aws-ddk-core
Version:
The AWS DataOps Development Kit is an open source development framework for customers that build data workflows and modern data architecture on AWS.
79 lines • 13.3 kB
JavaScript
var _a;
Object.defineProperty(exports, "__esModule", { value: true });
exports.EMRServerlessJobStage = void 0;
const JSII_RTTI_SYMBOL_1 = Symbol.for("jsii.rtti");
const cdk = require("aws-cdk-lib");
const aws_cdk_lib_1 = require("aws-cdk-lib");
const iam = require("aws-cdk-lib/aws-iam");
const sfn = require("aws-cdk-lib/aws-stepfunctions");
const tasks = require("aws-cdk-lib/aws-stepfunctions-tasks");
const pipelines_1 = require("../pipelines");
/**
* Stage that contains a step function that runs an EMR Job.
*/
class EMRServerlessJobStage extends pipelines_1.StateMachineStage {
/**
* Constructs EMRServerlessJobStage.
* @param scope Scope within which this construct is defined.
* @param id Identifier of the stage.
* @param props Properties for the stage.
*/
constructor(scope, id, props) {
super(scope, id, props);
const stack = cdk.Stack.of(this);
const emrApplicationArn = `arn:${stack.partition}:emr-serverless:${stack.region}:${stack.account}:/applications/${props.applicationId}`;
const jobExecutionStatusWait = new sfn.Wait(this, "Wait Before Checking Job Status", {
time: sfn.WaitTime.duration(props.jobExecutionStatusCheckPeriod ?? aws_cdk_lib_1.Duration.seconds(30)),
});
const runJobTask = new tasks.CallAwsService(this, "Start Job Run", {
service: "emrserverless",
action: "startJobRun",
iamResources: [emrApplicationArn],
parameters: {
ApplicationId: props.applicationId,
ExecutionRoleArn: props.executionRoleArn,
JobDriver: props.jobDriver,
ClientToken: Math.random().toString(36),
...props.startJobRunProps,
},
});
const getJobTask = new tasks.CallAwsService(scope, "Get Job Status", {
service: "emrserverless",
action: "getJobRun",
resultPath: "$.JobStatus",
iamResources: [emrApplicationArn],
parameters: {
"ApplicationId.$": "$.ApplicationId",
"JobRunId.$": "$.JobRunId",
},
});
const successState = new sfn.Succeed(this, "Success State");
const failState = new sfn.Fail(this, "Fail State");
const retryChain = jobExecutionStatusWait.next(getJobTask);
const jobStatusChoice = new sfn.Choice(scope, "Job Status Choice")
.when(sfn.Condition.stringEquals("$.JobStatus.JobRun.State", "SUCCESS"), successState)
.when(sfn.Condition.or(sfn.Condition.stringEquals("$.JobStatus.JobRun.State", "FAILED"), sfn.Condition.stringEquals("$.JobStatus.JobRun.State", "CANCELLED")), failState)
.otherwise(retryChain);
const definition = runJobTask.next(getJobTask).next(jobStatusChoice);
({
eventPattern: this.eventPattern,
targets: this.targets,
stateMachine: this.stateMachine,
} = this.createStateMachine({ definition: definition, ...props }));
this.stateMachine.addToRolePolicy(new iam.PolicyStatement({
effect: iam.Effect.ALLOW,
actions: ["emr-serverless:StartJobRun", "emr-serverless:GetJobRun"],
resources: [emrApplicationArn, `${emrApplicationArn}/jobruns/*`],
}));
this.stateMachine.addToRolePolicy(new iam.PolicyStatement({
effect: iam.Effect.ALLOW,
actions: ["iam:PassRole"],
resources: [props.executionRoleArn],
}));
}
}
exports.EMRServerlessJobStage = EMRServerlessJobStage;
_a = JSII_RTTI_SYMBOL_1;
EMRServerlessJobStage[_a] = { fqn: "aws-ddk-core.EMRServerlessJobStage", version: "1.4.1" };
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZW1yLXNlcnZlcmxlc3Mtam9iLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3N0YWdlcy9lbXItc2VydmVybGVzcy1qb2IudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7QUFBQSxtQ0FBbUM7QUFDbkMsNkNBQXVDO0FBRXZDLDJDQUEyQztBQUMzQyxxREFBcUQ7QUFDckQsNkRBQTZEO0FBRTdELDRDQUF5RTtBQWdDekU7O0dBRUc7QUFDSCxNQUFhLHFCQUFzQixTQUFRLDZCQUFpQjtJQUsxRDs7Ozs7T0FLRztJQUNILFlBQVksS0FBZ0IsRUFBRSxFQUFVLEVBQUUsS0FBaUM7UUFDekUsS0FBSyxDQUFDLEtBQUssRUFBRSxFQUFFLEVBQUUsS0FBSyxDQUFDLENBQUM7UUFFeEIsTUFBTSxLQUFLLEdBQUcsR0FBRyxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDakMsTUFBTSxpQkFBaUIsR0FBRyxPQUFPLEtBQUssQ0FBQyxTQUFTLG1CQUFtQixLQUFLLENBQUMsTUFBTSxJQUFJLEtBQUssQ0FBQyxPQUFPLGtCQUFrQixLQUFLLENBQUMsYUFBYSxFQUFFLENBQUM7UUFDeEksTUFBTSxzQkFBc0IsR0FBRyxJQUFJLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLGlDQUFpQyxFQUFFO1lBQ25GLElBQUksRUFBRSxHQUFHLENBQUMsUUFBUSxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsNkJBQTZCLElBQUksc0JBQVEsQ0FBQyxPQUFPLENBQUMsRUFBRSxDQUFDLENBQUM7U0FDekYsQ0FBQyxDQUFDO1FBRUgsTUFBTSxVQUFVLEdBQUcsSUFBSSxLQUFLLENBQUMsY0FBYyxDQUFDLElBQUksRUFBRSxlQUFlLEVBQUU7WUFDakUsT0FBTyxFQUFFLGVBQWU7WUFDeEIsTUFBTSxFQUFFLGFBQWE7WUFDckIsWUFBWSxFQUFFLENBQUMsaUJBQWlCLENBQUM7WUFDakMsVUFBVSxFQUFFO2dCQUNWLGFBQWEsRUFBRSxLQUFLLENBQUMsYUFBYTtnQkFDbEMsZ0JBQWdCLEVBQUUsS0FBSyxDQUFDLGdCQUFnQjtnQkFDeEMsU0FBUyxFQUFFLEtBQUssQ0FBQyxTQUFTO2dCQUMxQixXQUFXLEVBQUUsSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDLFFBQVEsQ0FBQyxFQUFFLENBQUM7Z0JBQ3ZDLEdBQUcsS0FBSyxDQUFDLGdCQUFnQjthQUMxQjtTQUNGLENBQUMsQ0FBQztRQUVILE1BQU0sVUFBVSxHQUFHLElBQUksS0FBSyxDQUFDLGNBQWMsQ0FBQyxLQUFLLEVBQUUsZ0JBQWdCLEVBQUU7WUFDbkUsT0FBTyxFQUFFLGVBQWU7WUFDeEIsTUFBTSxFQUFFLFdBQVc7WUFDbkIsVUFBVSxFQUFFLGFBQWE7WUFDekIsWUFBWSxFQUFFLENBQUMsaUJBQWlCLENBQUM7WUFDakMsVUFBVSxFQUFFO2dCQUNWLGlCQUFpQixFQUFFLGlCQUFpQjtnQkFDcEMsWUFBWSxFQUFFLFlBQVk7YUFDM0I7U0FDRixDQUFDLENBQUM7UUFFSCxNQUFNLFlBQVksR0FBRyxJQUFJLEdBQUcsQ0FBQyxPQUFPLENBQUMsSUFBSSxFQUFFLGVBQWUsQ0FBQyxDQUFDO1FBQzVELE1BQU0sU0FBUyxHQUFHLElBQUksR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsWUFBWSxDQUFDLENBQUM7UUFDbkQsTUFBTSxVQUFVLEdBQUcsc0JBQXNCLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDO1FBQzNELE1BQU0sZUFBZSxHQUFHLElBQUksR0FBRyxDQUFDLE1BQU0sQ0FBQyxLQUFLLEVBQUUsbUJBQW1CLENBQUM7YUFDL0QsSUFBSSxDQUFDLEdBQUcsQ0FBQyxTQUFTLENBQUMsWUFBWSxDQUFDLDBCQUEwQixFQUFFLFNBQVMsQ0FBQyxFQUFFLFlBQVksQ0FBQzthQUNyRixJQUFJLENBQ0gsR0FBRyxDQUFDLFNBQVMsQ0FBQyxFQUFFLENBQ2QsR0FBRyxDQUFDLFNBQVMsQ0FBQyxZQUFZLENBQUMsMEJBQTBCLEVBQUUsUUFBUSxDQUFDLEVBQ2hFLEdBQUcsQ0FBQyxTQUFTLENBQUMsWUFBWSxDQUFDLDBCQUEwQixFQUFFLFdBQVcsQ0FBQyxDQUNwRSxFQUNELFNBQVMsQ0FDVjthQUNBLFNBQVMsQ0FBQyxVQUFVLENBQUMsQ0FBQztRQUV6QixNQUFNLFVBQVUsR0FBRyxVQUFVLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDLElBQUksQ0FBQyxlQUFlLENBQUMsQ0FBQztRQUVyRSxDQUFDO1lBQ0MsWUFBWSxFQUFFLElBQUksQ0FBQyxZQUFZO1lBQy9CLE9BQU8sRUFBRSxJQUFJLENBQUMsT0FBTztZQUNyQixZQUFZLEVBQUUsSUFBSSxDQUFDLFlBQVk7U0FDaEMsR0FBRyxJQUFJLENBQUMsa0JBQWtCLENBQUMsRUFBRSxVQUFVLEVBQUUsVUFBVSxFQUFFLEdBQUcsS0FBSyxFQUFFLENBQUMsQ0FBQyxDQUFDO1FBQ25FLElBQUksQ0FBQyxZQUFZLENBQUMsZUFBZSxDQUMvQixJQUFJLEdBQUcsQ0FBQyxlQUFlLENBQUM7WUFDdEIsTUFBTSxFQUFFLEdBQUcsQ0FBQyxNQUFNLENBQUMsS0FBSztZQUN4QixPQUFPLEVBQUUsQ0FBQyw0QkFBNEIsRUFBRSwwQkFBMEIsQ0FBQztZQUNuRSxTQUFTLEVBQUUsQ0FBQyxpQkFBaUIsRUFBRSxHQUFHLGlCQUFpQixZQUFZLENBQUM7U0FDakUsQ0FBQyxDQUNILENBQUM7UUFDRixJQUFJLENBQUMsWUFBWSxDQUFDLGVBQWUsQ0FDL0IsSUFBSSxHQUFHLENBQUMsZUFBZSxDQUFDO1lBQ3RCLE1BQU0sRUFBRSxHQUFHLENBQUMsTUFBTSxDQUFDLEtBQUs7WUFDeEIsT0FBTyxFQUFFLENBQUMsY0FBYyxDQUFDO1lBQ3pCLFNBQVMsRUFBRSxDQUFDLEtBQUssQ0FBQyxnQkFBZ0IsQ0FBQztTQUNwQyxDQUFDLENBQ0gsQ0FBQztJQUNKLENBQUM7O0FBL0VILHNEQWdGQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCAqIGFzIGNkayBmcm9tIFwiYXdzLWNkay1saWJcIjtcbmltcG9ydCB7IER1cmF0aW9uIH0gZnJvbSBcImF3cy1jZGstbGliXCI7XG5pbXBvcnQgKiBhcyBldmVudHMgZnJvbSBcImF3cy1jZGstbGliL2F3cy1ldmVudHNcIjtcbmltcG9ydCAqIGFzIGlhbSBmcm9tIFwiYXdzLWNkay1saWIvYXdzLWlhbVwiO1xuaW1wb3J0ICogYXMgc2ZuIGZyb20gXCJhd3MtY2RrLWxpYi9hd3Mtc3RlcGZ1bmN0aW9uc1wiO1xuaW1wb3J0ICogYXMgdGFza3MgZnJvbSBcImF3cy1jZGstbGliL2F3cy1zdGVwZnVuY3Rpb25zLXRhc2tzXCI7XG5pbXBvcnQgeyBDb25zdHJ1Y3QgfSBmcm9tIFwiY29uc3RydWN0c1wiO1xuaW1wb3J0IHsgU3RhdGVNYWNoaW5lU3RhZ2UsIFN0YXRlTWFjaGluZVN0YWdlUHJvcHMgfSBmcm9tIFwiLi4vcGlwZWxpbmVzXCI7XG4vKipcbiAqIFByb3BlcnRpZXMgb2YgdGhlIEVNUiBTZXJ2ZXJsZXNzIEpvYiBzdGFnZS5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBFTVJTZXJ2ZXJsZXNzSm9iU3RhZ2VQcm9wcyBleHRlbmRzIFN0YXRlTWFjaGluZVN0YWdlUHJvcHMge1xuICAvKipcbiAgICogRU1SIFNlcnZlcmxlc3MgQXBwbGljYXRpb24gSWQuXG4gICAqL1xuICByZWFkb25seSBhcHBsaWNhdGlvbklkOiBzdHJpbmc7XG4gIC8qKlxuICAgKiBFTVIgRXhlY3V0aW9uIFJvbGUgQXJuLlxuICAgKi9cbiAgcmVhZG9ubHkgZXhlY3V0aW9uUm9sZUFybjogc3RyaW5nO1xuICAvKipcbiAgICogVGhlIGpvYiBkcml2ZXIgZm9yIHRoZSBqb2IgcnVuLlxuICAgKiBUaGlzIGlzIGEgVGFnZ2VkIFVuaW9uIHN0cnVjdHVyZS5cbiAgICogT25seSBvbmUgb2YgdGhlIGZvbGxvd2luZyB0b3AgbGV2ZWxcbiAgICoga2V5cyBjYW4gYmUgc2V0OiAnc3BhcmtTdWJtaXQnLCAnaGl2ZSdcbiAgICovXG4gIHJlYWRvbmx5IGpvYkRyaXZlcjogeyBba2V5OiBzdHJpbmddOiBhbnkgfTtcbiAgLyoqXG4gICAqIER1cmF0aW9uIHRvIHdhaXQgYmV0d2VlbiBwb2xsaW5nIGpvYiBzdGF0dXMuXG4gICAqIERlZmF1bHRzIHRvIDMwIHNlY29uZHMuXG4gICAqL1xuICByZWFkb25seSBqb2JFeGVjdXRpb25TdGF0dXNDaGVja1BlcmlvZD86IGNkay5EdXJhdGlvbjtcbiAgLyoqXG4gICAqIEFkZGl0aW9uYWwgcHJvcGVydGllcyB0byBwYXNzIHRvICdlbXJzZXJ2ZXJsZXNzOlN0YXJ0Sm9iUnVuJy5cbiAgICogaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL2Vtci1zZXJ2ZXJsZXNzL2xhdGVzdC9BUElSZWZlcmVuY2UvQVBJX1N0YXJ0Sm9iUnVuLmh0bWxcbiAgICovXG4gIHJlYWRvbmx5IHN0YXJ0Sm9iUnVuUHJvcHM/OiB7IFtrZXk6IHN0cmluZ106IGFueSB9O1xufVxuXG4vKipcbiAqIFN0YWdlIHRoYXQgY29udGFpbnMgYSBzdGVwIGZ1bmN0aW9uIHRoYXQgcnVucyBhbiBFTVIgSm9iLlxuICovXG5leHBvcnQgY2xhc3MgRU1SU2VydmVybGVzc0pvYlN0YWdlIGV4dGVuZHMgU3RhdGVNYWNoaW5lU3RhZ2Uge1xuICByZWFkb25seSB0YXJnZXRzPzogZXZlbnRzLklSdWxlVGFyZ2V0W107XG4gIHJlYWRvbmx5IGV2ZW50UGF0dGVybj86IGV2ZW50cy5FdmVudFBhdHRlcm47XG4gIHJlYWRvbmx5IHN0YXRlTWFjaGluZTogc2ZuLlN0YXRlTWFjaGluZTtcblxuICAvKipcbiAgICogQ29uc3RydWN0cyBFTVJTZXJ2ZXJsZXNzSm9iU3RhZ2UuXG4gICAqIEBwYXJhbSBzY29wZSBTY29wZSB3aXRoaW4gd2hpY2ggdGhpcyBjb25zdHJ1Y3QgaXMgZGVmaW5lZC5cbiAgICogQHBhcmFtIGlkIElkZW50aWZpZXIgb2YgdGhlIHN0YWdlLlxuICAgKiBAcGFyYW0gcHJvcHMgUHJvcGVydGllcyBmb3IgdGhlIHN0YWdlLlxuICAgKi9cbiAgY29uc3RydWN0b3Ioc2NvcGU6IENvbnN0cnVjdCwgaWQ6IHN0cmluZywgcHJvcHM6IEVNUlNlcnZlcmxlc3NKb2JTdGFnZVByb3BzKSB7XG4gICAgc3VwZXIoc2NvcGUsIGlkLCBwcm9wcyk7XG5cbiAgICBjb25zdCBzdGFjayA9IGNkay5TdGFjay5vZih0aGlzKTtcbiAgICBjb25zdCBlbXJBcHBsaWNhdGlvbkFybiA9IGBhcm46JHtzdGFjay5wYXJ0aXRpb259OmVtci1zZXJ2ZXJsZXNzOiR7c3RhY2sucmVnaW9ufToke3N0YWNrLmFjY291bnR9Oi9hcHBsaWNhdGlvbnMvJHtwcm9wcy5hcHBsaWNhdGlvbklkfWA7XG4gICAgY29uc3Qgam9iRXhlY3V0aW9uU3RhdHVzV2FpdCA9IG5ldyBzZm4uV2FpdCh0aGlzLCBcIldhaXQgQmVmb3JlIENoZWNraW5nIEpvYiBTdGF0dXNcIiwge1xuICAgICAgdGltZTogc2ZuLldhaXRUaW1lLmR1cmF0aW9uKHByb3BzLmpvYkV4ZWN1dGlvblN0YXR1c0NoZWNrUGVyaW9kID8/IER1cmF0aW9uLnNlY29uZHMoMzApKSxcbiAgICB9KTtcblxuICAgIGNvbnN0IHJ1bkpvYlRhc2sgPSBuZXcgdGFza3MuQ2FsbEF3c1NlcnZpY2UodGhpcywgXCJTdGFydCBKb2IgUnVuXCIsIHtcbiAgICAgIHNlcnZpY2U6IFwiZW1yc2VydmVybGVzc1wiLFxuICAgICAgYWN0aW9uOiBcInN0YXJ0Sm9iUnVuXCIsXG4gICAgICBpYW1SZXNvdXJjZXM6IFtlbXJBcHBsaWNhdGlvbkFybl0sXG4gICAgICBwYXJhbWV0ZXJzOiB7XG4gICAgICAgIEFwcGxpY2F0aW9uSWQ6IHByb3BzLmFwcGxpY2F0aW9uSWQsXG4gICAgICAgIEV4ZWN1dGlvblJvbGVBcm46IHByb3BzLmV4ZWN1dGlvblJvbGVBcm4sXG4gICAgICAgIEpvYkRyaXZlcjogcHJvcHMuam9iRHJpdmVyLFxuICAgICAgICBDbGllbnRUb2tlbjogTWF0aC5yYW5kb20oKS50b1N0cmluZygzNiksXG4gICAgICAgIC4uLnByb3BzLnN0YXJ0Sm9iUnVuUHJvcHMsXG4gICAgICB9LFxuICAgIH0pO1xuXG4gICAgY29uc3QgZ2V0Sm9iVGFzayA9IG5ldyB0YXNrcy5DYWxsQXdzU2VydmljZShzY29wZSwgXCJHZXQgSm9iIFN0YXR1c1wiLCB7XG4gICAgICBzZXJ2aWNlOiBcImVtcnNlcnZlcmxlc3NcIixcbiAgICAgIGFjdGlvbjogXCJnZXRKb2JSdW5cIixcbiAgICAgIHJlc3VsdFBhdGg6IFwiJC5Kb2JTdGF0dXNcIixcbiAgICAgIGlhbVJlc291cmNlczogW2VtckFwcGxpY2F0aW9uQXJuXSxcbiAgICAgIHBhcmFtZXRlcnM6IHtcbiAgICAgICAgXCJBcHBsaWNhdGlvbklkLiRcIjogXCIkLkFwcGxpY2F0aW9uSWRcIixcbiAgICAgICAgXCJKb2JSdW5JZC4kXCI6IFwiJC5Kb2JSdW5JZFwiLFxuICAgICAgfSxcbiAgICB9KTtcblxuICAgIGNvbnN0IHN1Y2Nlc3NTdGF0ZSA9IG5ldyBzZm4uU3VjY2VlZCh0aGlzLCBcIlN1Y2Nlc3MgU3RhdGVcIik7XG4gICAgY29uc3QgZmFpbFN0YXRlID0gbmV3IHNmbi5GYWlsKHRoaXMsIFwiRmFpbCBTdGF0ZVwiKTtcbiAgICBjb25zdCByZXRyeUNoYWluID0gam9iRXhlY3V0aW9uU3RhdHVzV2FpdC5uZXh0KGdldEpvYlRhc2spO1xuICAgIGNvbnN0IGpvYlN0YXR1c0Nob2ljZSA9IG5ldyBzZm4uQ2hvaWNlKHNjb3BlLCBcIkpvYiBTdGF0dXMgQ2hvaWNlXCIpXG4gICAgICAud2hlbihzZm4uQ29uZGl0aW9uLnN0cmluZ0VxdWFscyhcIiQuSm9iU3RhdHVzLkpvYlJ1bi5TdGF0ZVwiLCBcIlNVQ0NFU1NcIiksIHN1Y2Nlc3NTdGF0ZSlcbiAgICAgIC53aGVuKFxuICAgICAgICBzZm4uQ29uZGl0aW9uLm9yKFxuICAgICAgICAgIHNmbi5Db25kaXRpb24uc3RyaW5nRXF1YWxzKFwiJC5Kb2JTdGF0dXMuSm9iUnVuLlN0YXRlXCIsIFwiRkFJTEVEXCIpLFxuICAgICAgICAgIHNmbi5Db25kaXRpb24uc3RyaW5nRXF1YWxzKFwiJC5Kb2JTdGF0dXMuSm9iUnVuLlN0YXRlXCIsIFwiQ0FOQ0VMTEVEXCIpLFxuICAgICAgICApLFxuICAgICAgICBmYWlsU3RhdGUsXG4gICAgICApXG4gICAgICAub3RoZXJ3aXNlKHJldHJ5Q2hhaW4pO1xuXG4gICAgY29uc3QgZGVmaW5pdGlvbiA9IHJ1bkpvYlRhc2submV4dChnZXRKb2JUYXNrKS5uZXh0KGpvYlN0YXR1c0Nob2ljZSk7XG5cbiAgICAoe1xuICAgICAgZXZlbnRQYXR0ZXJuOiB0aGlzLmV2ZW50UGF0dGVybixcbiAgICAgIHRhcmdldHM6IHRoaXMudGFyZ2V0cyxcbiAgICAgIHN0YXRlTWFjaGluZTogdGhpcy5zdGF0ZU1hY2hpbmUsXG4gICAgfSA9IHRoaXMuY3JlYXRlU3RhdGVNYWNoaW5lKHsgZGVmaW5pdGlvbjogZGVmaW5pdGlvbiwgLi4ucHJvcHMgfSkpO1xuICAgIHRoaXMuc3RhdGVNYWNoaW5lLmFkZFRvUm9sZVBvbGljeShcbiAgICAgIG5ldyBpYW0uUG9saWN5U3RhdGVtZW50KHtcbiAgICAgICAgZWZmZWN0OiBpYW0uRWZmZWN0LkFMTE9XLFxuICAgICAgICBhY3Rpb25zOiBbXCJlbXItc2VydmVybGVzczpTdGFydEpvYlJ1blwiLCBcImVtci1zZXJ2ZXJsZXNzOkdldEpvYlJ1blwiXSxcbiAgICAgICAgcmVzb3VyY2VzOiBbZW1yQXBwbGljYXRpb25Bcm4sIGAke2VtckFwcGxpY2F0aW9uQXJufS9qb2JydW5zLypgXSxcbiAgICAgIH0pLFxuICAgICk7XG4gICAgdGhpcy5zdGF0ZU1hY2hpbmUuYWRkVG9Sb2xlUG9saWN5KFxuICAgICAgbmV3IGlhbS5Qb2xpY3lTdGF0ZW1lbnQoe1xuICAgICAgICBlZmZlY3Q6IGlhbS5FZmZlY3QuQUxMT1csXG4gICAgICAgIGFjdGlvbnM6IFtcImlhbTpQYXNzUm9sZVwiXSxcbiAgICAgICAgcmVzb3VyY2VzOiBbcHJvcHMuZXhlY3V0aW9uUm9sZUFybl0sXG4gICAgICB9KSxcbiAgICApO1xuICB9XG59XG4iXX0=
;