MXS-1300: Add creation/deletion of listeners to cluster sync
New listeners are created and old ones removed. As listeners cannot yet be altered via the REST API, differing listeners are not modified.
This commit is contained in:
@ -107,45 +107,44 @@ exports.builder = function(yargs) {
|
|||||||
.command('diff <target>', 'Show difference between host servers and <target>. ' +
|
.command('diff <target>', 'Show difference between host servers and <target>. ' +
|
||||||
'Value must be in HOST:PORT format', {}, function(argv) {
|
'Value must be in HOST:PORT format', {}, function(argv) {
|
||||||
|
|
||||||
maxctrl(argv, function(host) {
|
maxctrl(argv, function(host) {
|
||||||
return getDiffs(host, argv.target)
|
return getDiffs(host, argv.target)
|
||||||
.then(function(diffs) {
|
.then(function(diffs) {
|
||||||
var src = diffs[0]
|
var src = diffs[0]
|
||||||
var dest = diffs[1]
|
var dest = diffs[1]
|
||||||
|
|
||||||
_.uniq(_.concat(Object.keys(src), Object.keys(dest))).forEach(function(i) {
|
_.uniq(_.concat(Object.keys(src), Object.keys(dest))).forEach(function(i) {
|
||||||
var newObj = getDifference(src[i].data, dest[i].data)
|
var newObj = getDifference(src[i].data, dest[i].data)
|
||||||
var oldObj = getDifference(dest[i].data, src[i].data)
|
var oldObj = getDifference(dest[i].data, src[i].data)
|
||||||
var changed = getChangedObjects(src[i].data, dest[i].data)
|
var changed = getChangedObjects(src[i].data, dest[i].data)
|
||||||
|
|
||||||
if (newObj.length) {
|
if (newObj.length) {
|
||||||
logger.log("New:", i)
|
logger.log("New:", i)
|
||||||
logger.log(colors.green(JSON.stringify(newObj, null, 4)))
|
logger.log(colors.green(JSON.stringify(newObj, null, 4)))
|
||||||
}
|
}
|
||||||
if (oldObj.length) {
|
if (oldObj.length) {
|
||||||
logger.log("Deleted:", i)
|
logger.log("Deleted:", i)
|
||||||
logger.log(colors.red(JSON.stringify(oldObj, null, 4)))
|
logger.log(colors.red(JSON.stringify(oldObj, null, 4)))
|
||||||
}
|
}
|
||||||
if (changed.length) {
|
if (changed.length) {
|
||||||
logger.log("Changed:", i)
|
logger.log("Changed:", i)
|
||||||
logger.log(colors.yellow(JSON.stringify(changed, null, 4)))
|
logger.log(colors.yellow(JSON.stringify(changed, null, 4)))
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
endpoints.forEach(function(i) {
|
endpoints.forEach(function(i) {
|
||||||
// Treating the resource endpoints as arrays allows the same functions to be used
|
// Treating the resource endpoints as arrays allows the same functions to be used
|
||||||
// to compare individual resources and resource collections
|
// to compare individual resources and resource collections
|
||||||
var changed = getChangedObjects([src[i].data], [dest[i].data])
|
var changed = getChangedObjects([src[i].data], [dest[i].data])
|
||||||
if (changed.length) {
|
if (changed.length) {
|
||||||
logger.log("Changed:", i)
|
logger.log("Changed:", i)
|
||||||
logger.log(colors.yellow(JSON.stringify(changed, null, 4)))
|
logger.log(colors.yellow(JSON.stringify(changed, null, 4)))
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
})
|
})
|
||||||
})
|
})
|
||||||
})
|
})
|
||||||
.command('sync <target>', 'Synchronize the cluster with target MaxScale server.', {}, function(argv) {
|
.command('sync <target>', 'Synchronize the cluster with target MaxScale server.', {}, function(argv) {
|
||||||
maxctrl(argv, function(host) {
|
maxctrl(argv, function(host) {
|
||||||
// TODO: Create new listeners
|
|
||||||
return getDiffs(argv.target, host)
|
return getDiffs(argv.target, host)
|
||||||
.then(function(diffs) {
|
.then(function(diffs) {
|
||||||
var promises = []
|
var promises = []
|
||||||
@ -198,6 +197,24 @@ exports.builder = function(yargs) {
|
|||||||
})
|
})
|
||||||
return Promise.all(promises)
|
return Promise.all(promises)
|
||||||
})
|
})
|
||||||
|
.then(function() {
|
||||||
|
// Add new and delete old listeners
|
||||||
|
var promises = []
|
||||||
|
var all_keys = _.concat(Object.keys(src), Object.keys(dest))
|
||||||
|
var unwanted_keys = _.concat(collections, endpoints)
|
||||||
|
var relevant_keys = _.uniq(_.difference(all_keys, unwanted_keys))
|
||||||
|
|
||||||
|
relevant_keys.forEach(function(i) {
|
||||||
|
getDifference(dest[i].data, src[i].data).forEach(function(j) {
|
||||||
|
promises.push(doAsyncRequest(host, i + '/' + j.id, null, {method: 'DELETE'}))
|
||||||
|
})
|
||||||
|
getDifference(src[i].data, dest[i].data).forEach(function(j) {
|
||||||
|
promises.push(doAsyncRequest(host, i, null, {method: 'POST', body: {data: j}}))
|
||||||
|
})
|
||||||
|
})
|
||||||
|
|
||||||
|
return Promise.all(promises)
|
||||||
|
})
|
||||||
.then(function() {
|
.then(function() {
|
||||||
var promises = []
|
var promises = []
|
||||||
// PATCH all remaining resource collections in src from dest apart from the
|
// PATCH all remaining resource collections in src from dest apart from the
|
||||||
|
Reference in New Issue
Block a user