UNPKG

@cdklabs/cdk-ecs-codedeploy

Version:

CDK Constructs for performing ECS Deployments with CodeDeploy

91 lines 15.3 kB
"use strict"; 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==