in source/services/deployments/lib/createGreengrassXDefinitionVersion.js [8:141]
module.exports = function (key, spec, currentGreengrassGroupDefinitionVersion) {
const tag = 'createGreengrass' + key + 'DefinitionVersion:';
console.log(tag);
// Simple version: We'll just create it rather than check.
if (!spec.hasOwnProperty(key + 'DefinitionVersion')) {
console.log(tag, key + 'DefinitionVersion not found in spec. Returning.');
return Promise.resolve(null);
} else {
let promise;
if (!currentGreengrassGroupDefinitionVersion || !currentGreengrassGroupDefinitionVersion.Definition[key + 'DefinitionVersionArn']) {
console.log(tag, key + 'DefinitionVersion needs creating');
promise = gg['create' + key + 'Definition']({
Name: uuid.v4()
}).promise();
} else {
console.log(tag, key + 'DefinitionVersion exists', currentGreengrassGroupDefinitionVersion);
let params = {};
params[key + 'DefinitionId'] = currentGreengrassGroupDefinitionVersion.Definition[key + 'DefinitionVersionArn'].split('/')[4];
promise = gg['get' + key + 'Definition'](params).promise();
}
return promise.then(definition => {
console.log('Using definition Id', definition.Id, definition);
let params = {};
params[key + 'DefinitionId'] = definition.Id;
if (definition.hasOwnProperty('LatestVersion')) {
// This means that it already exists. Then lets remove the Ids and stringify to compare with the spec.
console.log(tag, 'Definition already exists, lets remove the Ids and compare');
params[key + 'DefinitionVersionId'] = definition.LatestVersion;
return gg['get' + key + 'DefinitionVersion'](params).promise().then(definitionVersion => {
delete params[key + 'DefinitionVersionId'];
let originalToCompare = definitionVersion.Definition[key + 's'];
spec[key + 'DefinitionVersion'][key + 's'].forEach(o => {
if (!o.hasOwnProperty('Id')) {
o.Id = uuid.v4();
}
});
params[key + 's'] = spec[key + 'DefinitionVersion'][key + 's'];
return gg['create' + key + 'DefinitionVersion'](params).promise().then(tempVersion => {
delete params[key + 's'];
params[key + 'DefinitionVersionId'] = tempVersion.Version;
return gg['get' + key + 'DefinitionVersion'](params).promise().then(tempFullVersion => {
console.log(tag, tempFullVersion);
let newToCompare = tempFullVersion.Definition[key + 's'];
console.log(tag, 'Removing all Ids from original:', originalToCompare);
originalToCompare.forEach(item => {
delete item.Id;
});
console.log(tag, 'Removing all Ids from new:', newToCompare);
newToCompare.forEach(item => {
delete item.Id;
});
console.log(tag, 'Compare:', JSON.stringify(originalToCompare), JSON.stringify(newToCompare));
if (diff(originalToCompare, newToCompare)) {
console.log(tag, 'Its different, stick to the new');
return tempFullVersion;
} else {
console.log(tag, 'Its same, stick to the old');
return definitionVersion;
}
});
});
// let newToCompare = JSON.parse(JSON.stringify(spec[key + 'DefinitionVersion'][key + 's']));
// console.log(tag, 'Removing all Ids from original:', originalToCompare);
// originalToCompare.forEach(item => {
// delete item.Id;
// });
// console.log(tag, 'Removing all Ids from new:', newToCompare);
// newToCompare.forEach(item => {
// delete item.Id;
// });
// console.log(tag, 'Ids removed: Comparing:', JSON.stringify(originalToCompare), JSON.stringify(newToCompare));
// if (diff(originalToCompare, newToCompare)) {
// console.log(tag, 'Its different: build the Ids and create the DefinitionVersion');
// spec[key + 'DefinitionVersion'][key + 's'].forEach(o => {
// if (!o.hasOwnProperty('Id')) {
// o.Id = uuid.v4();
// }
// });
// params[key + 's'] = spec[key + 'DefinitionVersion'][key + 's'];
// return gg['create' + key + 'DefinitionVersion'](params).promise();
// } else {
// // They are the same: don't do anything !
// console.log(tag, 'Its the same, return the definition version as is', definitionVersion);
// return definitionVersion;
// }
});
} else {
// Simple, doesnt exist, so lets create.
console.log(tag, 'Definition doesnt exist: build the Ids and create the DefinitionVersion');
spec[key + 'DefinitionVersion'][key + 's'].forEach(o => {
if (!o.hasOwnProperty('Id')) {
o.Id = uuid.v4();
}
});
params[key + 's'] = spec[key + 'DefinitionVersion'][key + 's'];
console.log(tag, 'create' + key + 'DefinitionVersion:', params, 'for', spec);
return gg['create' + key + 'DefinitionVersion'](params).promise();
}
}).then(result => {
console.log(tag, 'result', JSON.stringify(result));
return result;
});
}
};