UNPKG

@rocketleap/cdk-organizations

Version:

Manage AWS organizations, organizational units (OU), accounts and service control policies (SCP).

102 lines 16.2 kB
"use strict"; var _a; Object.defineProperty(exports, "__esModule", { value: true }); exports.Policy = exports.PolicyType = void 0; const JSII_RTTI_SYMBOL_1 = Symbol.for("jsii.rtti"); const aws_cdk_lib_1 = require("aws-cdk-lib"); const custom_resources_1 = require("aws-cdk-lib/custom-resources"); const constructs_1 = require("constructs"); const tag_resource_1 = require("./tag-resource"); const validators_1 = require("./validators"); /** * Organizations offers policy types in the following two broad categories: * <ol> * <li>Authorization policies help you to centrally manage the security of the AWS accounts in your organization.</li> * <li>Management policies enable you to centrally configure and manage AWS services and their features.</li> * </ol> * * @see https://docs.aws.amazon.com/organizations/latest/userguide/orgs_manage_policies.html#orgs-policy-types */ var PolicyType; (function (PolicyType) { /** * Service control policies (SCPs) offer central control over the maximum available permissions for all of the accounts in your organization. */ PolicyType["SERVICE_CONTROL_POLICY"] = "SERVICE_CONTROL_POLICY"; /** * Tag policies help you standardize the tags attached to the AWS resources in your organization's accounts. */ PolicyType["TAG_POLICY"] = "TAG_POLICY"; /** * Backup policies help you centrally manage and apply backup plans to the AWS resources across your organization's accounts. */ PolicyType["BACKUP_POLICY"] = "BACKUP_POLICY"; /** * Artificial Intelligence (AI) services opt-out policies enable you to control data collection for AWS AI services for all of your organization's accounts. */ PolicyType["AISERVICES_OPT_OUT_POLICY"] = "AISERVICES_OPT_OUT_POLICY"; /** * Resource control policies offer central control over the resource policies applied to all resources in your organization. */ PolicyType["RESOURCE_CONTROL_POLICY"] = "RESOURCE_CONTROL_POLICY"; })(PolicyType || (exports.PolicyType = PolicyType = {})); class Policy extends constructs_1.Construct { constructor(scope, id, props) { super(scope, id); this.tags = new aws_cdk_lib_1.TagManager(aws_cdk_lib_1.TagType.KEY_VALUE, "Custom::Organizations_Policy"); const { content, description, policyName, policyType } = props; const organizationsRegion = process.env.CDK_AWS_PARTITION === "aws-cn" ? "cn-northwest-1" : "us-east-1"; if (!validators_1.Validators.of().policyContent(content)) { aws_cdk_lib_1.Annotations.of(this).addError("The text content of the policy must be valid and between 1 and 1,000,000 characters long."); } const policy = new custom_resources_1.AwsCustomResource(this, "PolicyCustomResource", { resourceType: "Custom::Organizations_Policy", onCreate: { service: "Organizations", action: "createPolicy", // https://docs.aws.amazon.com/AWSJavaScriptSDK/latest/AWS/Organizations.html#createPolicy-property region: organizationsRegion, parameters: { Content: content, Description: description, Name: policyName, Type: policyType, }, outputPaths: ["Policy.PolicySummary.Id"], physicalResourceId: custom_resources_1.PhysicalResourceId.fromResponse("Policy.PolicySummary.Id"), }, onUpdate: { service: "Organizations", action: "updatePolicy", // https://docs.aws.amazon.com/AWSJavaScriptSDK/latest/AWS/Organizations.html#updatePolicy-property region: organizationsRegion, parameters: { Content: content, Description: description, Name: policyName, PolicyId: new custom_resources_1.PhysicalResourceIdReference(), }, outputPaths: ["Policy.PolicySummary.Id"], physicalResourceId: custom_resources_1.PhysicalResourceId.fromResponse("Policy.PolicySummary.Id"), }, onDelete: { service: "Organizations", action: "deletePolicy", // https://docs.aws.amazon.com/AWSJavaScriptSDK/latest/AWS/Organizations.html#deletePolicy-property region: organizationsRegion, parameters: { PolicyId: new custom_resources_1.PhysicalResourceIdReference(), }, }, installLatestAwsSdk: false, policy: custom_resources_1.AwsCustomResourcePolicy.fromSdkCalls({ resources: custom_resources_1.AwsCustomResourcePolicy.ANY_RESOURCE }), }); this.policyId = policy.getResponseField("Policy.PolicySummary.Id"); const tagResource = new tag_resource_1.TagResource(this, "Tags", { resourceId: this.policyId, tags: this.tags.renderedTags }); tagResource.node.addDependency(policy); } identifier() { return this.policyId; } } exports.Policy = Policy; _a = JSII_RTTI_SYMBOL_1; Policy[_a] = { fqn: "@rocketleap/cdk-organizations.Policy", version: "0.0.3" }; //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicG9saWN5LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL3BvbGljeS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7OztBQUFBLDZDQUErRDtBQUMvRCxtRUFLc0M7QUFDdEMsMkNBQW1EO0FBQ25ELGlEQUFnRTtBQUNoRSw2Q0FBMEM7QUFFMUM7Ozs7Ozs7O0dBUUc7QUFDSCxJQUFZLFVBcUJYO0FBckJELFdBQVksVUFBVTtJQUNwQjs7T0FFRztJQUNILCtEQUFpRCxDQUFBO0lBQ2pEOztPQUVHO0lBQ0gsdUNBQXlCLENBQUE7SUFDekI7O09BRUc7SUFDSCw2Q0FBK0IsQ0FBQTtJQUMvQjs7T0FFRztJQUNILHFFQUF1RCxDQUFBO0lBQ3ZEOztPQUVHO0lBQ0gsaUVBQW1ELENBQUE7QUFDckQsQ0FBQyxFQXJCVyxVQUFVLDBCQUFWLFVBQVUsUUFxQnJCO0FBb0NELE1BQWEsTUFBTyxTQUFRLHNCQUFTO0lBS25DLFlBQW1CLEtBQWdCLEVBQUUsRUFBVSxFQUFFLEtBQWtCO1FBQ2pFLEtBQUssQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLENBQUM7UUFIVixTQUFJLEdBQUcsSUFBSSx3QkFBVSxDQUFDLHFCQUFPLENBQUMsU0FBUyxFQUFFLDhCQUE4QixDQUFDLENBQUM7UUFLaEYsTUFBTSxFQUFFLE9BQU8sRUFBRSxXQUFXLEVBQUUsVUFBVSxFQUFFLFVBQVUsRUFBRSxHQUFHLEtBQUssQ0FBQztRQUMvRCxNQUFNLG1CQUFtQixHQUFHLE9BQU8sQ0FBQyxHQUFHLENBQUMsaUJBQWlCLEtBQUssUUFBUSxDQUFDLENBQUMsQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDLENBQUMsV0FBVyxDQUFDO1FBRXhHLElBQUksQ0FBQyx1QkFBVSxDQUFDLEVBQUUsRUFBRSxDQUFDLGFBQWEsQ0FBQyxPQUFPLENBQUMsRUFBRSxDQUFDO1lBQzVDLHlCQUFXLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxDQUFDLFFBQVEsQ0FDM0IsMkZBQTJGLENBQzVGLENBQUM7UUFDSixDQUFDO1FBRUQsTUFBTSxNQUFNLEdBQUcsSUFBSSxvQ0FBaUIsQ0FBQyxJQUFJLEVBQUUsc0JBQXNCLEVBQUU7WUFDakUsWUFBWSxFQUFFLDhCQUE4QjtZQUM1QyxRQUFRLEVBQUU7Z0JBQ1IsT0FBTyxFQUFFLGVBQWU7Z0JBQ3hCLE1BQU0sRUFBRSxjQUFjLEVBQUUsbUdBQW1HO2dCQUMzSCxNQUFNLEVBQUUsbUJBQW1CO2dCQUMzQixVQUFVLEVBQUU7b0JBQ1YsT0FBTyxFQUFFLE9BQU87b0JBQ2hCLFdBQVcsRUFBRSxXQUFXO29CQUN4QixJQUFJLEVBQUUsVUFBVTtvQkFDaEIsSUFBSSxFQUFFLFVBQVU7aUJBQ2pCO2dCQUNELFdBQVcsRUFBRSxDQUFDLHlCQUF5QixDQUFDO2dCQUN4QyxrQkFBa0IsRUFBRSxxQ0FBa0IsQ0FBQyxZQUFZLENBQUMseUJBQXlCLENBQUM7YUFDL0U7WUFDRCxRQUFRLEVBQUU7Z0JBQ1IsT0FBTyxFQUFFLGVBQWU7Z0JBQ3hCLE1BQU0sRUFBRSxjQUFjLEVBQUUsbUdBQW1HO2dCQUMzSCxNQUFNLEVBQUUsbUJBQW1CO2dCQUMzQixVQUFVLEVBQUU7b0JBQ1YsT0FBTyxFQUFFLE9BQU87b0JBQ2hCLFdBQVcsRUFBRSxXQUFXO29CQUN4QixJQUFJLEVBQUUsVUFBVTtvQkFDaEIsUUFBUSxFQUFFLElBQUksOENBQTJCLEVBQUU7aUJBQzVDO2dCQUNELFdBQVcsRUFBRSxDQUFDLHlCQUF5QixDQUFDO2dCQUN4QyxrQkFBa0IsRUFBRSxxQ0FBa0IsQ0FBQyxZQUFZLENBQUMseUJBQXlCLENBQUM7YUFDL0U7WUFDRCxRQUFRLEVBQUU7Z0JBQ1IsT0FBTyxFQUFFLGVBQWU7Z0JBQ3hCLE1BQU0sRUFBRSxjQUFjLEVBQUUsbUdBQW1HO2dCQUMzSCxNQUFNLEVBQUUsbUJBQW1CO2dCQUMzQixVQUFVLEVBQUU7b0JBQ1YsUUFBUSxFQUFFLElBQUksOENBQTJCLEVBQUU7aUJBQzVDO2FBQ0Y7WUFDRCxtQkFBbUIsRUFBRSxLQUFLO1lBQzFCLE1BQU0sRUFBRSwwQ0FBdUIsQ0FBQyxZQUFZLENBQUMsRUFBRSxTQUFTLEVBQUUsMENBQXVCLENBQUMsWUFBWSxFQUFFLENBQUM7U0FDbEcsQ0FBQyxDQUFDO1FBQ0gsSUFBSSxDQUFDLFFBQVEsR0FBRyxNQUFNLENBQUMsZ0JBQWdCLENBQUMseUJBQXlCLENBQUMsQ0FBQztRQUVuRSxNQUFNLFdBQVcsR0FBRyxJQUFJLDBCQUFXLENBQUMsSUFBSSxFQUFFLE1BQU0sRUFBRSxFQUFFLFVBQVUsRUFBRSxJQUFJLENBQUMsUUFBUSxFQUFFLElBQUksRUFBRSxJQUFJLENBQUMsSUFBSSxDQUFDLFlBQVksRUFBRSxDQUFDLENBQUM7UUFDL0csV0FBVyxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsTUFBTSxDQUFDLENBQUM7SUFDekMsQ0FBQztJQUVELFVBQVU7UUFDUixPQUFPLElBQUksQ0FBQyxRQUFRLENBQUM7SUFDdkIsQ0FBQzs7QUFoRUgsd0JBaUVDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQW5ub3RhdGlvbnMsIFRhZ01hbmFnZXIsIFRhZ1R5cGUgfSBmcm9tIFwiYXdzLWNkay1saWJcIjtcbmltcG9ydCB7XG4gIEF3c0N1c3RvbVJlc291cmNlLFxuICBBd3NDdXN0b21SZXNvdXJjZVBvbGljeSxcbiAgUGh5c2ljYWxSZXNvdXJjZUlkLFxuICBQaHlzaWNhbFJlc291cmNlSWRSZWZlcmVuY2UsXG59IGZyb20gXCJhd3MtY2RrLWxpYi9jdXN0b20tcmVzb3VyY2VzXCI7XG5pbXBvcnQgeyBDb25zdHJ1Y3QsIElDb25zdHJ1Y3QgfSBmcm9tIFwiY29uc3RydWN0c1wiO1xuaW1wb3J0IHsgSVRhZ2dhYmxlUmVzb3VyY2UsIFRhZ1Jlc291cmNlIH0gZnJvbSBcIi4vdGFnLXJlc291cmNlXCI7XG5pbXBvcnQgeyBWYWxpZGF0b3JzIH0gZnJvbSBcIi4vdmFsaWRhdG9yc1wiO1xuXG4vKipcbiAqIE9yZ2FuaXphdGlvbnMgb2ZmZXJzIHBvbGljeSB0eXBlcyBpbiB0aGUgZm9sbG93aW5nIHR3byBicm9hZCBjYXRlZ29yaWVzOlxuICogPG9sPlxuICogICAgIDxsaT5BdXRob3JpemF0aW9uIHBvbGljaWVzIGhlbHAgeW91IHRvIGNlbnRyYWxseSBtYW5hZ2UgdGhlIHNlY3VyaXR5IG9mIHRoZSBBV1MgYWNjb3VudHMgaW4geW91ciBvcmdhbml6YXRpb24uPC9saT5cbiAqICAgICA8bGk+TWFuYWdlbWVudCBwb2xpY2llcyBlbmFibGUgeW91IHRvIGNlbnRyYWxseSBjb25maWd1cmUgYW5kIG1hbmFnZSBBV1Mgc2VydmljZXMgYW5kIHRoZWlyIGZlYXR1cmVzLjwvbGk+XG4gKiA8L29sPlxuICpcbiAqIEBzZWUgaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL29yZ2FuaXphdGlvbnMvbGF0ZXN0L3VzZXJndWlkZS9vcmdzX21hbmFnZV9wb2xpY2llcy5odG1sI29yZ3MtcG9saWN5LXR5cGVzXG4gKi9cbmV4cG9ydCBlbnVtIFBvbGljeVR5cGUge1xuICAvKipcbiAgICogU2VydmljZSBjb250cm9sIHBvbGljaWVzIChTQ1BzKSBvZmZlciBjZW50cmFsIGNvbnRyb2wgb3ZlciB0aGUgbWF4aW11bSBhdmFpbGFibGUgcGVybWlzc2lvbnMgZm9yIGFsbCBvZiB0aGUgYWNjb3VudHMgaW4geW91ciBvcmdhbml6YXRpb24uXG4gICAqL1xuICBTRVJWSUNFX0NPTlRST0xfUE9MSUNZID0gXCJTRVJWSUNFX0NPTlRST0xfUE9MSUNZXCIsXG4gIC8qKlxuICAgKiBUYWcgcG9saWNpZXMgaGVscCB5b3Ugc3RhbmRhcmRpemUgdGhlIHRhZ3MgYXR0YWNoZWQgdG8gdGhlIEFXUyByZXNvdXJjZXMgaW4geW91ciBvcmdhbml6YXRpb24ncyBhY2NvdW50cy5cbiAgICovXG4gIFRBR19QT0xJQ1kgPSBcIlRBR19QT0xJQ1lcIixcbiAgLyoqXG4gICAqIEJhY2t1cCBwb2xpY2llcyBoZWxwIHlvdSBjZW50cmFsbHkgbWFuYWdlIGFuZCBhcHBseSBiYWNrdXAgcGxhbnMgdG8gdGhlIEFXUyByZXNvdXJjZXMgYWNyb3NzIHlvdXIgb3JnYW5pemF0aW9uJ3MgYWNjb3VudHMuXG4gICAqL1xuICBCQUNLVVBfUE9MSUNZID0gXCJCQUNLVVBfUE9MSUNZXCIsXG4gIC8qKlxuICAgKiBBcnRpZmljaWFsIEludGVsbGlnZW5jZSAoQUkpIHNlcnZpY2VzIG9wdC1vdXQgcG9saWNpZXMgZW5hYmxlIHlvdSB0byBjb250cm9sIGRhdGEgY29sbGVjdGlvbiBmb3IgQVdTIEFJIHNlcnZpY2VzIGZvciBhbGwgb2YgeW91ciBvcmdhbml6YXRpb24ncyBhY2NvdW50cy5cbiAgICovXG4gIEFJU0VSVklDRVNfT1BUX09VVF9QT0xJQ1kgPSBcIkFJU0VSVklDRVNfT1BUX09VVF9QT0xJQ1lcIixcbiAgLyoqXG4gICAqIFJlc291cmNlIGNvbnRyb2wgcG9saWNpZXMgb2ZmZXIgY2VudHJhbCBjb250cm9sIG92ZXIgdGhlIHJlc291cmNlIHBvbGljaWVzIGFwcGxpZWQgdG8gYWxsIHJlc291cmNlcyBpbiB5b3VyIG9yZ2FuaXphdGlvbi5cbiAgICovXG4gIFJFU09VUkNFX0NPTlRST0xfUE9MSUNZID0gXCJSRVNPVVJDRV9DT05UUk9MX1BPTElDWVwiLFxufVxuXG5leHBvcnQgaW50ZXJmYWNlIFBvbGljeVByb3BzIHtcbiAgLyoqXG4gICAqIFRoZSBwb2xpY3kgdGV4dCBjb250ZW50IHRvIGFkZCB0byB0aGUgbmV3IHBvbGljeS4gVGhlIHRleHQgdGhhdCB5b3Ugc3VwcGx5IG11c3QgYWRoZXJlIHRvIHRoZSBydWxlcyBvZiB0aGUgcG9saWN5IHR5cGUgeW91IHNwZWNpZnkgaW4gdGhlIFR5cGUgcGFyYW1ldGVyLlxuICAgKi9cbiAgcmVhZG9ubHkgY29udGVudDogc3RyaW5nO1xuICAvKipcbiAgICogQW4gb3B0aW9uYWwgZGVzY3JpcHRpb24gdG8gYXNzaWduIHRvIHRoZSBwb2xpY3kuXG4gICAqL1xuICByZWFkb25seSBkZXNjcmlwdGlvbj86IHN0cmluZztcbiAgLyoqXG4gICAqIFRoZSBmcmllbmRseSBuYW1lIHRvIGFzc2lnbiB0byB0aGUgcG9saWN5LlxuICAgKi9cbiAgcmVhZG9ubHkgcG9saWN5TmFtZTogc3RyaW5nO1xuICAvKipcbiAgICogVGhlIHR5cGUgb2YgcG9saWN5IHRvIGNyZWF0ZS4gWW91IGNhbiBzcGVjaWZ5IG9uZSBvZiB0aGUgZm9sbG93aW5nIHZhbHVlczpcbiAgICovXG4gIHJlYWRvbmx5IHBvbGljeVR5cGU6IFBvbGljeVR5cGU7XG59XG5cbi8qKlxuICogUG9saWNpZXMgaW4gQVdTIE9yZ2FuaXphdGlvbnMgZW5hYmxlIHlvdSB0byBhcHBseSBhZGRpdGlvbmFsIHR5cGVzIG9mIG1hbmFnZW1lbnQgdG8gdGhlIEFXUyBhY2NvdW50cyBpbiB5b3VyIG9yZ2FuaXphdGlvbi4gPHN0cm9uZz5Zb3UgY2FuIHVzZSBwb2xpY2llcyB3aGVuIGFsbCBmZWF0dXJlcyBhcmUgZW5hYmxlZCBpbiB5b3VyIG9yZ2FuaXphdGlvbi48L3N0cm9uZz5cbiAqXG4gKiA8c3Ryb25nPkJlZm9yZSB5b3UgY2FuIGNyZWF0ZSBhbmQgYXR0YWNoIGEgcG9saWN5IHRvIHlvdXIgb3JnYW5pemF0aW9uLCB5b3UgbXVzdCBlbmFibGUgdGhhdCBwb2xpY3kgdHlwZSBmb3IgdXNlLjwvc3Ryb25nPlxuICpcbiAqIEBzZWUgaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL29yZ2FuaXphdGlvbnMvbGF0ZXN0L3VzZXJndWlkZS9vcmdzX21hbmFnZV9wb2xpY2llcy5odG1sXG4gKiBAc2VlIEZlYXR1cmVTZXRcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBJUG9saWN5IGV4dGVuZHMgSUNvbnN0cnVjdCB7XG4gIC8qKlxuICAgKiBUaGUgdW5pcXVlIGlkZW50aWZpZXIgKElEKSBvZiB0aGUgcG9saWN5LiBUaGUgcmVnZXggcGF0dGVybiBmb3IgYSBwb2xpY3kgSUQgc3RyaW5nIHJlcXVpcmVzIFwicC1cIiBmb2xsb3dlZCBieSBmcm9tIDggdG8gMTI4IGxvd2VyY2FzZSBvciB1cHBlcmNhc2UgbGV0dGVycywgZGlnaXRzLCBvciB0aGUgdW5kZXJzY29yZSBjaGFyYWN0ZXIgKF8pLlxuICAgKi9cbiAgcmVhZG9ubHkgcG9saWN5SWQ6IHN0cmluZztcbn1cblxuZXhwb3J0IGNsYXNzIFBvbGljeSBleHRlbmRzIENvbnN0cnVjdCBpbXBsZW1lbnRzIElQb2xpY3ksIElUYWdnYWJsZVJlc291cmNlIHtcbiAgcHVibGljIHJlYWRvbmx5IHBvbGljeUlkOiBzdHJpbmc7XG5cbiAgcmVhZG9ubHkgdGFncyA9IG5ldyBUYWdNYW5hZ2VyKFRhZ1R5cGUuS0VZX1ZBTFVFLCBcIkN1c3RvbTo6T3JnYW5pemF0aW9uc19Qb2xpY3lcIik7XG5cbiAgcHVibGljIGNvbnN0cnVjdG9yKHNjb3BlOiBDb25zdHJ1Y3QsIGlkOiBzdHJpbmcsIHByb3BzOiBQb2xpY3lQcm9wcykge1xuICAgIHN1cGVyKHNjb3BlLCBpZCk7XG5cbiAgICBjb25zdCB7IGNvbnRlbnQsIGRlc2NyaXB0aW9uLCBwb2xpY3lOYW1lLCBwb2xpY3lUeXBlIH0gPSBwcm9wcztcbiAgICBjb25zdCBvcmdhbml6YXRpb25zUmVnaW9uID0gcHJvY2Vzcy5lbnYuQ0RLX0FXU19QQVJUSVRJT04gPT09IFwiYXdzLWNuXCIgPyBcImNuLW5vcnRod2VzdC0xXCIgOiBcInVzLWVhc3QtMVwiO1xuXG4gICAgaWYgKCFWYWxpZGF0b3JzLm9mKCkucG9saWN5Q29udGVudChjb250ZW50KSkge1xuICAgICAgQW5ub3RhdGlvbnMub2YodGhpcykuYWRkRXJyb3IoXG4gICAgICAgIFwiVGhlIHRleHQgY29udGVudCBvZiB0aGUgcG9saWN5IG11c3QgYmUgdmFsaWQgYW5kIGJldHdlZW4gMSBhbmQgMSwwMDAsMDAwIGNoYXJhY3RlcnMgbG9uZy5cIlxuICAgICAgKTtcbiAgICB9XG5cbiAgICBjb25zdCBwb2xpY3kgPSBuZXcgQXdzQ3VzdG9tUmVzb3VyY2UodGhpcywgXCJQb2xpY3lDdXN0b21SZXNvdXJjZVwiLCB7XG4gICAgICByZXNvdXJjZVR5cGU6IFwiQ3VzdG9tOjpPcmdhbml6YXRpb25zX1BvbGljeVwiLFxuICAgICAgb25DcmVhdGU6IHtcbiAgICAgICAgc2VydmljZTogXCJPcmdhbml6YXRpb25zXCIsXG4gICAgICAgIGFjdGlvbjogXCJjcmVhdGVQb2xpY3lcIiwgLy8gaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FXU0phdmFTY3JpcHRTREsvbGF0ZXN0L0FXUy9Pcmdhbml6YXRpb25zLmh0bWwjY3JlYXRlUG9saWN5LXByb3BlcnR5XG4gICAgICAgIHJlZ2lvbjogb3JnYW5pemF0aW9uc1JlZ2lvbixcbiAgICAgICAgcGFyYW1ldGVyczoge1xuICAgICAgICAgIENvbnRlbnQ6IGNvbnRlbnQsXG4gICAgICAgICAgRGVzY3JpcHRpb246IGRlc2NyaXB0aW9uLFxuICAgICAgICAgIE5hbWU6IHBvbGljeU5hbWUsXG4gICAgICAgICAgVHlwZTogcG9saWN5VHlwZSxcbiAgICAgICAgfSxcbiAgICAgICAgb3V0cHV0UGF0aHM6IFtcIlBvbGljeS5Qb2xpY3lTdW1tYXJ5LklkXCJdLFxuICAgICAgICBwaHlzaWNhbFJlc291cmNlSWQ6IFBoeXNpY2FsUmVzb3VyY2VJZC5mcm9tUmVzcG9uc2UoXCJQb2xpY3kuUG9saWN5U3VtbWFyeS5JZFwiKSxcbiAgICAgIH0sXG4gICAgICBvblVwZGF0ZToge1xuICAgICAgICBzZXJ2aWNlOiBcIk9yZ2FuaXphdGlvbnNcIixcbiAgICAgICAgYWN0aW9uOiBcInVwZGF0ZVBvbGljeVwiLCAvLyBodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQVdTSmF2YVNjcmlwdFNESy9sYXRlc3QvQVdTL09yZ2FuaXphdGlvbnMuaHRtbCN1cGRhdGVQb2xpY3ktcHJvcGVydHlcbiAgICAgICAgcmVnaW9uOiBvcmdhbml6YXRpb25zUmVnaW9uLFxuICAgICAgICBwYXJhbWV0ZXJzOiB7XG4gICAgICAgICAgQ29udGVudDogY29udGVudCxcbiAgICAgICAgICBEZXNjcmlwdGlvbjogZGVzY3JpcHRpb24sXG4gICAgICAgICAgTmFtZTogcG9saWN5TmFtZSxcbiAgICAgICAgICBQb2xpY3lJZDogbmV3IFBoeXNpY2FsUmVzb3VyY2VJZFJlZmVyZW5jZSgpLFxuICAgICAgICB9LFxuICAgICAgICBvdXRwdXRQYXRoczogW1wiUG9saWN5LlBvbGljeVN1bW1hcnkuSWRcIl0sXG4gICAgICAgIHBoeXNpY2FsUmVzb3VyY2VJZDogUGh5c2ljYWxSZXNvdXJjZUlkLmZyb21SZXNwb25zZShcIlBvbGljeS5Qb2xpY3lTdW1tYXJ5LklkXCIpLFxuICAgICAgfSxcbiAgICAgIG9uRGVsZXRlOiB7XG4gICAgICAgIHNlcnZpY2U6IFwiT3JnYW5pemF0aW9uc1wiLFxuICAgICAgICBhY3Rpb246IFwiZGVsZXRlUG9saWN5XCIsIC8vIGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BV1NKYXZhU2NyaXB0U0RLL2xhdGVzdC9BV1MvT3JnYW5pemF0aW9ucy5odG1sI2RlbGV0ZVBvbGljeS1wcm9wZXJ0eVxuICAgICAgICByZWdpb246IG9yZ2FuaXphdGlvbnNSZWdpb24sXG4gICAgICAgIHBhcmFtZXRlcnM6IHtcbiAgICAgICAgICBQb2xpY3lJZDogbmV3IFBoeXNpY2FsUmVzb3VyY2VJZFJlZmVyZW5jZSgpLFxuICAgICAgICB9LFxuICAgICAgfSxcbiAgICAgIGluc3RhbGxMYXRlc3RBd3NTZGs6IGZhbHNlLFxuICAgICAgcG9saWN5OiBBd3NDdXN0b21SZXNvdXJjZVBvbGljeS5mcm9tU2RrQ2FsbHMoeyByZXNvdXJjZXM6IEF3c0N1c3RvbVJlc291cmNlUG9saWN5LkFOWV9SRVNPVVJDRSB9KSxcbiAgICB9KTtcbiAgICB0aGlzLnBvbGljeUlkID0gcG9saWN5LmdldFJlc3BvbnNlRmllbGQoXCJQb2xpY3kuUG9saWN5U3VtbWFyeS5JZFwiKTtcblxuICAgIGNvbnN0IHRhZ1Jlc291cmNlID0gbmV3IFRhZ1Jlc291cmNlKHRoaXMsIFwiVGFnc1wiLCB7IHJlc291cmNlSWQ6IHRoaXMucG9saWN5SWQsIHRhZ3M6IHRoaXMudGFncy5yZW5kZXJlZFRhZ3MgfSk7XG4gICAgdGFnUmVzb3VyY2Uubm9kZS5hZGREZXBlbmRlbmN5KHBvbGljeSk7XG4gIH1cblxuICBpZGVudGlmaWVyKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMucG9saWN5SWQ7XG4gIH1cbn1cbiJdfQ==