@cdklabs/cdk-ecs-codedeploy
Version:
CDK Constructs for performing ECS Deployments with CodeDeploy
91 lines • 15.3 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.handler = handler;
const client_codedeploy_1 = require("@aws-sdk/client-codedeploy");
const logger_1 = require("./logger");
/**
* The lambda function called from CloudFormation for this custom resource.
*
* @param event
* @returns attribues of the deployment that was created
*/
async function handler(event) {
const logger = new logger_1.Logger();
logger.appendKeys({
stackEvent: event.RequestType,
});
switch (event.RequestType) {
case 'Create':
case 'Update': {
// create deployment
const props = event.ResourceProperties;
let autoRollbackConfiguration;
if (props.autoRollbackConfigurationEnabled === 'true') {
autoRollbackConfiguration = {
enabled: true,
events: props.autoRollbackConfigurationEvents.split(','),
};
}
else if (props.autoRollbackConfigurationEnabled === 'false') {
autoRollbackConfiguration = {
enabled: false,
};
}
const resp = await codedeployClient().send(new client_codedeploy_1.CreateDeploymentCommand({
applicationName: props.applicationName,
deploymentConfigName: props.deploymentConfigName,
deploymentGroupName: props.deploymentGroupName,
autoRollbackConfiguration,
description: props.description,
revision: {
revisionType: 'AppSpecContent',
appSpecContent: {
content: props.revisionAppSpecContent,
},
},
}));
if (!resp.deploymentId) {
throw new Error('No deploymentId received from call to CreateDeployment');
}
logger.appendKeys({
deploymentId: resp.deploymentId,
});
logger.info('Created new deployment');
return {
PhysicalResourceId: resp.deploymentId,
Data: {
deploymentId: resp.deploymentId,
},
};
}
case 'Delete':
logger.appendKeys({
deploymentId: event.PhysicalResourceId,
});
// cancel deployment and rollback
try {
const resp = await codedeployClient().send(new client_codedeploy_1.StopDeploymentCommand({
deploymentId: event.PhysicalResourceId,
autoRollbackEnabled: true,
}));
logger.info(`Stopped deployment: ${resp.status} ${resp.statusMessage}`);
}
catch (e) {
logger.warn('Ignoring error', { error: e });
}
return {
PhysicalResourceId: event.PhysicalResourceId,
Data: {
deploymentId: event.PhysicalResourceId,
},
};
default:
logger.error('Unknown stack event');
throw new Error(`Unknown request type: ${event.RequestType}`);
}
}
function codedeployClient() {
return new client_codedeploy_1.CodeDeployClient({});
}
;
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib24tZXZlbnQubGFtYmRhLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2Vjcy1kZXBsb3ltZW50LXByb3ZpZGVyL29uLWV2ZW50LmxhbWJkYS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOztBQXFIQSwwQkEwRUM7QUEvTEQsa0VBQTRKO0FBQzVKLHFDQUFrQztBQThHbEM7Ozs7O0dBS0c7QUFDSSxLQUFLLFVBQVUsT0FBTyxDQUFDLEtBQXFCO0lBQ2pELE1BQU0sTUFBTSxHQUFHLElBQUksZUFBTSxFQUFFLENBQUM7SUFDNUIsTUFBTSxDQUFDLFVBQVUsQ0FBQztRQUNoQixVQUFVLEVBQUUsS0FBSyxDQUFDLFdBQVc7S0FDOUIsQ0FBQyxDQUFDO0lBQ0gsUUFBUSxLQUFLLENBQUMsV0FBVyxFQUFFLENBQUM7UUFDMUIsS0FBSyxRQUFRLENBQUM7UUFDZCxLQUFLLFFBQVEsQ0FBQyxDQUFDLENBQUM7WUFDZCxvQkFBb0I7WUFDcEIsTUFBTSxLQUFLLEdBQUcsS0FBSyxDQUFDLGtCQUFrQixDQUFDO1lBQ3ZDLElBQUkseUJBQWlFLENBQUM7WUFDdEUsSUFBSSxLQUFLLENBQUMsZ0NBQWdDLEtBQUssTUFBTSxFQUFFLENBQUM7Z0JBQ3RELHlCQUF5QixHQUFHO29CQUMxQixPQUFPLEVBQUUsSUFBSTtvQkFDYixNQUFNLEVBQUUsS0FBSyxDQUFDLCtCQUErQixDQUFDLEtBQUssQ0FBQyxHQUFHLENBQXdCO2lCQUNoRixDQUFDO1lBQ0osQ0FBQztpQkFBTSxJQUFJLEtBQUssQ0FBQyxnQ0FBZ0MsS0FBSyxPQUFPLEVBQUUsQ0FBQztnQkFDOUQseUJBQXlCLEdBQUc7b0JBQzFCLE9BQU8sRUFBRSxLQUFLO2lCQUNmLENBQUM7WUFDSixDQUFDO1lBQ0QsTUFBTSxJQUFJLEdBQUcsTUFBTSxnQkFBZ0IsRUFBRSxDQUFDLElBQUksQ0FBQyxJQUFJLDJDQUF1QixDQUFDO2dCQUNyRSxlQUFlLEVBQUUsS0FBSyxDQUFDLGVBQWU7Z0JBQ3RDLG9CQUFvQixFQUFFLEtBQUssQ0FBQyxvQkFBb0I7Z0JBQ2hELG1CQUFtQixFQUFFLEtBQUssQ0FBQyxtQkFBbUI7Z0JBQzlDLHlCQUF5QjtnQkFDekIsV0FBVyxFQUFFLEtBQUssQ0FBQyxXQUFXO2dCQUM5QixRQUFRLEVBQUU7b0JBQ1IsWUFBWSxFQUFFLGdCQUFnQjtvQkFDOUIsY0FBYyxFQUFFO3dCQUNkLE9BQU8sRUFBRSxLQUFLLENBQUMsc0JBQXNCO3FCQUN0QztpQkFDRjthQUNGLENBQUMsQ0FBQyxDQUFDO1lBQ0osSUFBSSxDQUFDLElBQUksQ0FBQyxZQUFZLEVBQUUsQ0FBQztnQkFDdkIsTUFBTSxJQUFJLEtBQUssQ0FBQyx3REFBd0QsQ0FBQyxDQUFDO1lBQzVFLENBQUM7WUFDRCxNQUFNLENBQUMsVUFBVSxDQUFDO2dCQUNoQixZQUFZLEVBQUUsSUFBSSxDQUFDLFlBQVk7YUFDaEMsQ0FBQyxDQUFDO1lBQ0gsTUFBTSxDQUFDLElBQUksQ0FBQyx3QkFBd0IsQ0FBQyxDQUFDO1lBRXRDLE9BQU87Z0JBQ0wsa0JBQWtCLEVBQUUsSUFBSSxDQUFDLFlBQVk7Z0JBQ3JDLElBQUksRUFBRTtvQkFDSixZQUFZLEVBQUUsSUFBSSxDQUFDLFlBQVk7aUJBQ2hDO2FBQ0YsQ0FBQztRQUNKLENBQUM7UUFDRCxLQUFLLFFBQVE7WUFDWCxNQUFNLENBQUMsVUFBVSxDQUFDO2dCQUNoQixZQUFZLEVBQUUsS0FBSyxDQUFDLGtCQUFrQjthQUN2QyxDQUFDLENBQUM7WUFDSCxpQ0FBaUM7WUFDakMsSUFBSSxDQUFDO2dCQUNILE1BQU0sSUFBSSxHQUFHLE1BQU0sZ0JBQWdCLEVBQUUsQ0FBQyxJQUFJLENBQUMsSUFBSSx5Q0FBcUIsQ0FBQztvQkFDbkUsWUFBWSxFQUFFLEtBQUssQ0FBQyxrQkFBa0I7b0JBQ3RDLG1CQUFtQixFQUFFLElBQUk7aUJBQzFCLENBQUMsQ0FBQyxDQUFDO2dCQUNKLE1BQU0sQ0FBQyxJQUFJLENBQUMsdUJBQXVCLElBQUksQ0FBQyxNQUFNLElBQUksSUFBSSxDQUFDLGFBQWEsRUFBRSxDQUFDLENBQUM7WUFDMUUsQ0FBQztZQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUM7Z0JBQ1gsTUFBTSxDQUFDLElBQUksQ0FBQyxnQkFBZ0IsRUFBRSxFQUFFLEtBQUssRUFBRSxDQUFVLEVBQUUsQ0FBQyxDQUFDO1lBQ3ZELENBQUM7WUFFRCxPQUFPO2dCQUNMLGtCQUFrQixFQUFFLEtBQUssQ0FBQyxrQkFBa0I7Z0JBQzVDLElBQUksRUFBRTtvQkFDSixZQUFZLEVBQUUsS0FBSyxDQUFDLGtCQUFrQjtpQkFDdkM7YUFDRixDQUFDO1FBQ0o7WUFDRSxNQUFNLENBQUMsS0FBSyxDQUFDLHFCQUFxQixDQUFDLENBQUM7WUFDcEMsTUFBTSxJQUFJLEtBQUssQ0FBQyx5QkFBeUIsS0FBSyxDQUFDLFdBQVcsRUFBRSxDQUFDLENBQUM7SUFDbEUsQ0FBQztBQUNILENBQUM7QUFHRCxTQUFTLGdCQUFnQjtJQUN2QixPQUFPLElBQUksb0NBQWdCLENBQUMsRUFBRSxDQUFDLENBQUM7QUFDbEMsQ0FBQztBQUFBLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBBdXRvUm9sbGJhY2tDb25maWd1cmF0aW9uLCBBdXRvUm9sbGJhY2tFdmVudCwgQ29kZURlcGxveUNsaWVudCwgQ3JlYXRlRGVwbG95bWVudENvbW1hbmQsIFN0b3BEZXBsb3ltZW50Q29tbWFuZCB9IGZyb20gJ0Bhd3Mtc2RrL2NsaWVudC1jb2RlZGVwbG95JztcbmltcG9ydCB7IExvZ2dlciB9IGZyb20gJy4vbG9nZ2VyJztcblxuLyoqXG4gKiBUaGUgcHJvcGVydGllcyBvZiB0aGUgQ29kZURlcGxveSBEZXBsb3ltZW50IHRvIGNyZWF0ZVxuICovXG5pbnRlcmZhY2UgRGVwbG95bWVudFByb3BlcnRpZXMge1xuICBkZXNjcmlwdGlvbjogc3RyaW5nO1xuICAvKipcbiAgICogVGhlIG5hbWUgb2YgYW4gQVdTIENvZGVEZXBsb3kgYXBwbGljYXRpb24uXG4gICAqL1xuICBhcHBsaWNhdGlvbk5hbWU6IHN0cmluZztcbiAgLyoqXG4gICAqIFRoZSBuYW1lIG9mIGEgZGVwbG95bWVudCBjb25maWd1cmF0aW9uLiAgSWYgbm90IHNwZWNpZmllZCwgdGhlIHZhbHVlXG4gICAqIGNvbmZpZ3VyZWQgaW4gdGhlIGRlcGxveW1lbnQgZ3JvdXAgaXMgdXNlZCBhcyB0aGUgZGVmYXVsdC5cbiAgICogSWYgdGhlIGRlcGxveW1lbnQgZ3JvdXAgZG9lcyBub3QgaGF2ZSBhIGRlcGxveW1lbnQgY29uZmlndXJhdGlvbiBhc3NvY2lhdGVkIHdpdGggaXQsXG4gICAqIENvZGVEZXBsb3lEZWZhdWx0Lk9uZUF0QVRpbWUgaXMgdXNlZCBieSBkZWZhdWx0LlxuICAgKi9cbiAgZGVwbG95bWVudENvbmZpZ05hbWU6IHN0cmluZztcbiAgLyoqXG4gICAqIFRoZSBuYW1lIG9mIHRoZSBkZXBsb3ltZW50IGdyb3VwLlxuICAgKi9cbiAgZGVwbG95bWVudEdyb3VwTmFtZTogc3RyaW5nO1xuICAvKipcbiAgICogSW5kaWNhdGVzIHdoZXRoZXIgYSBkZWZpbmVkIGF1dG9tYXRpYyByb2xsYmFjayBjb25maWd1cmF0aW9uIGlzIGN1cnJlbnRseSBlbmFibGVkLlxuICAgKi9cbiAgYXV0b1JvbGxiYWNrQ29uZmlndXJhdGlvbkVuYWJsZWQ6IHN0cmluZztcbiAgLyoqXG4gICAqIFRoZSBldmVudCB0eXBlIG9yIHR5cGVzIHRoYXQgdHJpZ2dlciBhIHJvbGxiYWNrLlxuICAgKiBWYWxpZCBWYWx1ZXM6IERFUExPWU1FTlRfRkFJTFVSRSB8IERFUExPWU1FTlRfU1RPUF9PTl9BTEFSTSB8IERFUExPWU1FTlRfU1RPUF9PTl9SRVFVRVNUXG4gICAqL1xuICBhdXRvUm9sbGJhY2tDb25maWd1cmF0aW9uRXZlbnRzOiBzdHJpbmc7XG4gIC8qKlxuICAgKiBUaGUgY29udGVudCBvZiBhbiBBcHBTcGVjIGZpbGUgZm9yIGFuIEFtYXpvbiBFQ1MgZGVwbG95bWVudC5cbiAgICogVGhlIGNvbnRlbnQgaXMgZm9ybWF0dGVkIGFzIEpTT04gb3IgWUFNTCBhbmQgc3RvcmVkIGFzIGEgUmF3U3RyaW5nLlxuICAgKi9cbiAgcmV2aXNpb25BcHBTcGVjQ29udGVudDogc3RyaW5nO1xufVxuXG4vKipcbiAqIFRoZSBwcm9wZXJ0aWVzIGluIHRoZSBEYXRhIG9iamVjdCByZXR1cm5lZCB0byBDbG91ZEZvcm1hdGlvblxuICovXG5leHBvcnQgaW50ZXJmYWNlIERhdGFBdHRyaWJ1dGVzIHtcbiAgLyoqXG4gICAqIElEIG9mIHRoZSBDb2RlRGVwbG95IGRlcGxveW1lbnRcbiAgICovXG4gIGRlcGxveW1lbnRJZDogc3RyaW5nO1xufVxuXG4vKipcbiAqIFRoZSByZXF1ZXN0IG9iamVjdCB0aGF0IHRoZSBjdXN0b20gcmVzb3VyY2UgbGFtYmEgZnVuY3Rpb24gcmVjZWl2ZXMgZnJvbSBDbG91ZEZvcm1hdGlvbi5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBPbkV2ZW50UmVxdWVzdCB7XG4gIC8qKlxuICAgKiBUaGUgdHlwZSBvZiBsaWZlY3ljbGUgZXZlbnQ6IENyZWF0ZSwgVXBkYXRlIG9yIERlbGV0ZS5cbiAgICovXG4gIFJlcXVlc3RUeXBlOiBzdHJpbmc7XG4gIC8qKlxuICAgKiBUaGUgdGVtcGxhdGUgZGV2ZWxvcGVyLWNob3NlbiBuYW1lIChsb2dpY2FsIElEKSBvZiB0aGUgY3VzdG9tIHJlc291cmNlIGluIHRoZSBBV1MgQ2xvdWRGb3JtYXRpb24gdGVtcGxhdGUuXG4gICAqL1xuICBMb2dpY2FsUmVzb3VyY2VJZDogc3RyaW5nO1xuICAvKipcbiAgICogVGhpcyBmaWVsZCB3aWxsIG9ubHkgYmUgcHJlc2VudCBmb3IgVXBkYXRlIGFuZCBEZWxldGUgZXZlbnRzIGFuZCBpbmNsdWRlcyB0aGUgdmFsdWVcbiAgICogcmV0dXJuZWQgaW4gUGh5c2ljYWxSZXNvdXJjZUlkIG9mIHRoZSBwcmV2aW91cyBvcGVyYXRpb24uXG4gICAqL1xuICBQaHlzaWNhbFJlc291cmNlSWQ6IHN0cmluZztcbiAgLyoqXG4gICAqIFRoaXMgZmllbGQgY29udGFpbnMgdGhlIHByb3BlcnRpZXMgZGVmaW5lZCBpbiB0aGUgdGVtcGxhdGUgZm9yIHRoaXMgY3VzdG9tIHJlc291cmNlLlxuICAgKi9cbiAgUmVzb3VyY2VQcm9wZXJ0aWVzOiBEZXBsb3ltZW50UHJvcGVydGllcztcbiAgLyoqXG4gICAqIFRoaXMgZmllbGQgd2lsbCBvbmx5IGJlIHByZXNlbnQgZm9yIFVwZGF0ZSBldmVudHMgYW5kIGNvbnRhaW5zIHRoZSByZXNvdXJjZSBwcm9wZXJ0aWVzXG4gICAqIHRoYXQgd2VyZSBkZWNsYXJlZCBwcmV2aW91cyB0byB0aGUgdXBkYXRlIHJlcXVlc3QuXG4gICAqL1xuICBPbGRSZXNvdXJjZVByb3BlcnRpZXM6IERlcGxveW1lbnRQcm9wZXJ0aWVzO1xuICAvKipcbiAgICogVGhlIHJlc291cmNlIHR5cGUgZGVmaW5lZCBmb3IgdGhpcyBjdXN0b20gcmVzb3VyY2UgaW4gdGhlIHRlbXBsYXRlLlxuICAgKiBBIHByb3ZpZGVyIG1heSBoYW5kbGUgYW55IG51bWJlciBvZiBjdXN0b20gcmVzb3VyY2UgdHlwZXMuXG4gICAqL1xuICBSZXNvdXJjZVR5cGU6IHN0cmluZztcbiAgLyoqXG4gICAqIEEgdW5pcXVlIElEIGZvciB0aGUgcmVxdWVzdC5cbiAgICovXG4gIFJlcXVlc3RJZDogc3RyaW5nO1xuICAvKipcbiAgICogVGhlIEFSTiB0aGF0IGlkZW50aWZpZXMgdGhlIHN0YWNrIHRoYXQgY29udGFpbnMgdGhlIGN1c3RvbSByZXNvdXJjZS5cbiAgICovXG4gIFN0YWNrSWQ6IHN0cmluZztcbn1cbi8qKlxuICogVGhlIHJlc3BvbnNlIG9iamVjdCB0aGF0IHRoZSBjdXN0b20gcmVzb3VyY2UgbGFtYmRhIGZ1bmN0aW9uIHJldHVybnMgdG8gQ2xvdWRGb3JtYXRpb24uXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgT25FdmVudFJlc3BvbnNlIHtcbiAgLyoqXG4gICAqIFRoZSBhbGxvY2F0ZWQvYXNzaWduZWQgcGh5c2ljYWwgSUQgb2YgdGhlIHJlc291cmNlLiBJZiBvbWl0dGVkIGZvciBDcmVhdGUgZXZlbnRzLFxuICAgKiB0aGUgZXZlbnQncyBSZXF1ZXN0SWQgd2lsbCBiZSB1c2VkLiBGb3IgVXBkYXRlLCB0aGUgY3VycmVudCBwaHlzaWNhbCBJRCB3aWxsIGJlIHVzZWQuXG4gICAqIElmIGEgZGlmZmVyZW50IHZhbHVlIGlzIHJldHVybmVkLCBDbG91ZEZvcm1hdGlvbiB3aWxsIGZvbGxvdyB3aXRoIGEgc3Vic2VxdWVudCBEZWxldGVcbiAgICogZm9yIHRoZSBwcmV2aW91cyBJRCAocmVzb3VyY2UgcmVwbGFjZW1lbnQpLiBGb3IgRGVsZXRlLCBpdCB3aWxsIGFsd2F5cyByZXR1cm4gdGhlIGN1cnJlbnRcbiAgICogcGh5c2ljYWwgcmVzb3VyY2UgSUQsIGFuZCBpZiB0aGUgdXNlciByZXR1cm5zIGEgZGlmZmVyZW50IG9uZSwgYW4gZXJyb3Igd2lsbCBvY2N1ci5cbiAgICovXG4gIFBoeXNpY2FsUmVzb3VyY2VJZD86IHN0cmluZztcbiAgLyoqXG4gICAqIFJlc291cmNlIGF0dHJpYnV0ZXMsIHdoaWNoIGNhbiBsYXRlciBiZSByZXRyaWV2ZWQgdGhyb3VnaCBGbjo6R2V0QXR0IG9uIHRoZSBjdXN0b20gcmVzb3VyY2Ugb2JqZWN0LlxuICAgKi9cbiAgRGF0YT86IERhdGFBdHRyaWJ1dGVzO1xuICAvKipcbiAgICogV2hldGhlciB0byBtYXNrIHRoZSBvdXRwdXQgb2YgdGhlIGN1c3RvbSByZXNvdXJjZSB3aGVuIHJldHJpZXZlZCBieSB1c2luZyB0aGUgRm46OkdldEF0dCBmdW5jdGlvbi5cbiAgICovXG4gIE5vRWNobz86IGJvb2xlYW47XG59XG5cbi8qKlxuICogVGhlIGxhbWJkYSBmdW5jdGlvbiBjYWxsZWQgZnJvbSBDbG91ZEZvcm1hdGlvbiBmb3IgdGhpcyBjdXN0b20gcmVzb3VyY2UuXG4gKlxuICogQHBhcmFtIGV2ZW50XG4gKiBAcmV0dXJucyBhdHRyaWJ1ZXMgb2YgdGhlIGRlcGxveW1lbnQgdGhhdCB3YXMgY3JlYXRlZFxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gaGFuZGxlcihldmVudDogT25FdmVudFJlcXVlc3QpOiBQcm9taXNlPE9uRXZlbnRSZXNwb25zZT4ge1xuICBjb25zdCBsb2dnZXIgPSBuZXcgTG9nZ2VyKCk7XG4gIGxvZ2dlci5hcHBlbmRLZXlzKHtcbiAgICBzdGFja0V2ZW50OiBldmVudC5SZXF1ZXN0VHlwZSxcbiAgfSk7XG4gIHN3aXRjaCAoZXZlbnQuUmVxdWVzdFR5cGUpIHtcbiAgICBjYXNlICdDcmVhdGUnOlxuICAgIGNhc2UgJ1VwZGF0ZSc6IHtcbiAgICAgIC8vIGNyZWF0ZSBkZXBsb3ltZW50XG4gICAgICBjb25zdCBwcm9wcyA9IGV2ZW50LlJlc291cmNlUHJvcGVydGllcztcbiAgICAgIGxldCBhdXRvUm9sbGJhY2tDb25maWd1cmF0aW9uIDogQXV0b1JvbGxiYWNrQ29uZmlndXJhdGlvbiB8IHVuZGVmaW5lZDtcbiAgICAgIGlmIChwcm9wcy5hdXRvUm9sbGJhY2tDb25maWd1cmF0aW9uRW5hYmxlZCA9PT0gJ3RydWUnKSB7XG4gICAgICAgIGF1dG9Sb2xsYmFja0NvbmZpZ3VyYXRpb24gPSB7XG4gICAgICAgICAgZW5hYmxlZDogdHJ1ZSxcbiAgICAgICAgICBldmVudHM6IHByb3BzLmF1dG9Sb2xsYmFja0NvbmZpZ3VyYXRpb25FdmVudHMuc3BsaXQoJywnKSBhcyBBdXRvUm9sbGJhY2tFdmVudFtdLFxuICAgICAgICB9O1xuICAgICAgfSBlbHNlIGlmIChwcm9wcy5hdXRvUm9sbGJhY2tDb25maWd1cmF0aW9uRW5hYmxlZCA9PT0gJ2ZhbHNlJykge1xuICAgICAgICBhdXRvUm9sbGJhY2tDb25maWd1cmF0aW9uID0ge1xuICAgICAgICAgIGVuYWJsZWQ6IGZhbHNlLFxuICAgICAgICB9O1xuICAgICAgfVxuICAgICAgY29uc3QgcmVzcCA9IGF3YWl0IGNvZGVkZXBsb3lDbGllbnQoKS5zZW5kKG5ldyBDcmVhdGVEZXBsb3ltZW50Q29tbWFuZCh7XG4gICAgICAgIGFwcGxpY2F0aW9uTmFtZTogcHJvcHMuYXBwbGljYXRpb25OYW1lLFxuICAgICAgICBkZXBsb3ltZW50Q29uZmlnTmFtZTogcHJvcHMuZGVwbG95bWVudENvbmZpZ05hbWUsXG4gICAgICAgIGRlcGxveW1lbnRHcm91cE5hbWU6IHByb3BzLmRlcGxveW1lbnRHcm91cE5hbWUsXG4gICAgICAgIGF1dG9Sb2xsYmFja0NvbmZpZ3VyYXRpb24sXG4gICAgICAgIGRlc2NyaXB0aW9uOiBwcm9wcy5kZXNjcmlwdGlvbixcbiAgICAgICAgcmV2aXNpb246IHtcbiAgICAgICAgICByZXZpc2lvblR5cGU6ICdBcHBTcGVjQ29udGVudCcsXG4gICAgICAgICAgYXBwU3BlY0NvbnRlbnQ6IHtcbiAgICAgICAgICAgIGNvbnRlbnQ6IHByb3BzLnJldmlzaW9uQXBwU3BlY0NvbnRlbnQsXG4gICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICAgIH0pKTtcbiAgICAgIGlmICghcmVzcC5kZXBsb3ltZW50SWQpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdObyBkZXBsb3ltZW50SWQgcmVjZWl2ZWQgZnJvbSBjYWxsIHRvIENyZWF0ZURlcGxveW1lbnQnKTtcbiAgICAgIH1cbiAgICAgIGxvZ2dlci5hcHBlbmRLZXlzKHtcbiAgICAgICAgZGVwbG95bWVudElkOiByZXNwLmRlcGxveW1lbnRJZCxcbiAgICAgIH0pO1xuICAgICAgbG9nZ2VyLmluZm8oJ0NyZWF0ZWQgbmV3IGRlcGxveW1lbnQnKTtcblxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgUGh5c2ljYWxSZXNvdXJjZUlkOiByZXNwLmRlcGxveW1lbnRJZCxcbiAgICAgICAgRGF0YToge1xuICAgICAgICAgIGRlcGxveW1lbnRJZDogcmVzcC5kZXBsb3ltZW50SWQsXG4gICAgICAgIH0sXG4gICAgICB9O1xuICAgIH1cbiAgICBjYXNlICdEZWxldGUnOlxuICAgICAgbG9nZ2VyLmFwcGVuZEtleXMoe1xuICAgICAgICBkZXBsb3ltZW50SWQ6IGV2ZW50LlBoeXNpY2FsUmVzb3VyY2VJZCxcbiAgICAgIH0pO1xuICAgICAgLy8gY2FuY2VsIGRlcGxveW1lbnQgYW5kIHJvbGxiYWNrXG4gICAgICB0cnkge1xuICAgICAgICBjb25zdCByZXNwID0gYXdhaXQgY29kZWRlcGxveUNsaWVudCgpLnNlbmQobmV3IFN0b3BEZXBsb3ltZW50Q29tbWFuZCh7XG4gICAgICAgICAgZGVwbG95bWVudElkOiBldmVudC5QaHlzaWNhbFJlc291cmNlSWQsXG4gICAgICAgICAgYXV0b1JvbGxiYWNrRW5hYmxlZDogdHJ1ZSxcbiAgICAgICAgfSkpO1xuICAgICAgICBsb2dnZXIuaW5mbyhgU3RvcHBlZCBkZXBsb3ltZW50OiAke3Jlc3Auc3RhdHVzfSAke3Jlc3Auc3RhdHVzTWVzc2FnZX1gKTtcbiAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgbG9nZ2VyLndhcm4oJ0lnbm9yaW5nIGVycm9yJywgeyBlcnJvcjogZSBhcyBFcnJvciB9KTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgUGh5c2ljYWxSZXNvdXJjZUlkOiBldmVudC5QaHlzaWNhbFJlc291cmNlSWQsXG4gICAgICAgIERhdGE6IHtcbiAgICAgICAgICBkZXBsb3ltZW50SWQ6IGV2ZW50LlBoeXNpY2FsUmVzb3VyY2VJZCxcbiAgICAgICAgfSxcbiAgICAgIH07XG4gICAgZGVmYXVsdDpcbiAgICAgIGxvZ2dlci5lcnJvcignVW5rbm93biBzdGFjayBldmVudCcpO1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBVbmtub3duIHJlcXVlc3QgdHlwZTogJHtldmVudC5SZXF1ZXN0VHlwZX1gKTtcbiAgfVxufVxuXG5cbmZ1bmN0aW9uIGNvZGVkZXBsb3lDbGllbnQoKTogQ29kZURlcGxveUNsaWVudCB7XG4gIHJldHVybiBuZXcgQ29kZURlcGxveUNsaWVudCh7fSk7XG59OyJdfQ==