@fjall/components-infrastructure 0.11.0 → 0.12.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/lib/config/aws/bootstrap.d.ts +12 -0
- package/dist/lib/config/aws/bootstrap.js +72 -0
- package/dist/lib/config/aws/bootstrap.original.d.ts +13 -0
- package/dist/lib/config/aws/bootstrap.original.js +94 -0
- package/dist/lib/config/aws/bootstrapAccounts.d.ts +12 -0
- package/dist/lib/config/aws/bootstrapAccounts.js +89 -0
- package/dist/lib/config/aws/bootstrapMultiRegion.example.d.ts +15 -0
- package/dist/lib/config/aws/bootstrapMultiRegion.example.js +105 -0
- package/dist/lib/config/aws/bootstrapSelfManaged.example.d.ts +13 -0
- package/dist/lib/config/aws/bootstrapSelfManaged.example.js +56 -0
- package/dist/lib/config/aws/managedAccountStackSet.d.ts +16 -0
- package/dist/lib/config/aws/managedAccountStackSet.js +75 -0
- package/dist/lib/config/aws/managedPlatformStackSet.d.ts +24 -0
- package/dist/lib/config/aws/managedPlatformStackSet.js +101 -0
- package/dist/lib/config/aws/organisation.d.ts +4 -2
- package/dist/lib/config/aws/organisation.js +21 -37
- package/dist/lib/patterns/aws/managedAccount.d.ts +0 -3
- package/dist/lib/patterns/aws/managedAccount.js +1 -10
- package/dist/lib/patterns/aws/managedAccountStackSet.d.ts +11 -0
- package/dist/lib/patterns/aws/managedAccountStackSet.js +36 -0
- package/dist/lib/patterns/aws/managedIdentityCenter.js +2 -2
- package/dist/lib/patterns/aws/managedOrganisation.d.ts +6 -3
- package/dist/lib/patterns/aws/managedOrganisation.js +39 -15
- package/dist/lib/patterns/aws/managedPlatform.d.ts +4 -4
- package/dist/lib/patterns/aws/managedPlatform.js +4 -5
- package/dist/lib/patterns/aws/managedPlatformStackSet.d.ts +17 -0
- package/dist/lib/patterns/aws/managedPlatformStackSet.js +45 -0
- package/dist/lib/resources/aws/iam/identityCenter/assignmentNew.d.ts +11 -0
- package/dist/lib/resources/aws/iam/identityCenter/assignmentNew.js +102 -0
- package/dist/lib/resources/aws/iam/identityCenter/lambda/assignmentHandler.d.ts +24 -0
- package/dist/lib/resources/aws/iam/identityCenter/lambda/assignmentHandler.js +246 -0
- package/dist/lib/utils/getAsync.js +2 -4
- package/dist/lib/utils/getCidr.js +2 -4
- package/dist/lib/utils/getConfig.js +2 -2
- package/package.json +3 -3
- package/dist/lib/patterns/aws/ec2.d.ts +0 -43
- package/dist/lib/patterns/aws/ec2.js +0 -123
|
@@ -0,0 +1,75 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.DeployManagedAccounts = void 0;
|
|
4
|
+
const aws_cdk_lib_1 = require("aws-cdk-lib");
|
|
5
|
+
const constructs_1 = require("constructs");
|
|
6
|
+
const aws_s3_deployment_1 = require("aws-cdk-lib/aws-s3-deployment");
|
|
7
|
+
const path = require("path");
|
|
8
|
+
const managedAccountStackSet_1 = require("../../patterns/aws/managedAccountStackSet");
|
|
9
|
+
/**
|
|
10
|
+
* Deploys the ManagedAccount stack to all accounts in the specified organizational units
|
|
11
|
+
* using AWS CloudFormation StackSets.
|
|
12
|
+
*/
|
|
13
|
+
class DeployManagedAccounts extends constructs_1.Construct {
|
|
14
|
+
constructor(scope, id, props) {
|
|
15
|
+
super(scope, id);
|
|
16
|
+
const stack = aws_cdk_lib_1.Stack.of(this);
|
|
17
|
+
// Create a temporary app to synthesize the ManagedAccount template
|
|
18
|
+
const tempApp = new aws_cdk_lib_1.App();
|
|
19
|
+
const managedAccountStack = new managedAccountStackSet_1.ManagedAccountStackSet(tempApp, "ManagedAccountTemplate");
|
|
20
|
+
const assembly = tempApp.synth();
|
|
21
|
+
// Get the synthesized template
|
|
22
|
+
const templateArtifact = assembly.getStackArtifact(managedAccountStack.artifactId);
|
|
23
|
+
const templatePath = templateArtifact.templateFullPath;
|
|
24
|
+
// Deploy the template to the S3 bucket
|
|
25
|
+
new aws_s3_deployment_1.BucketDeployment(this, "DeployManagedAccountTemplate", {
|
|
26
|
+
sources: [aws_s3_deployment_1.Source.asset(path.dirname(templatePath))],
|
|
27
|
+
destinationBucket: props.templateBucket,
|
|
28
|
+
destinationKeyPrefix: "managed-account",
|
|
29
|
+
retainOnDelete: false
|
|
30
|
+
});
|
|
31
|
+
// Use region-agnostic S3 URL format
|
|
32
|
+
const templateURL = `https://${props.templateBucket.bucketName}.s3.amazonaws.com/managed-account/${path.basename(templatePath)}`;
|
|
33
|
+
new aws_cdk_lib_1.CfnStackSet(this, "ManagedAccountStackSet", {
|
|
34
|
+
permissionModel: "SERVICE_MANAGED",
|
|
35
|
+
stackSetName: `ManagedAccount-${stack.stackName}`,
|
|
36
|
+
description: "ManagedAccount StackSet for organization accounts",
|
|
37
|
+
capabilities: [
|
|
38
|
+
"CAPABILITY_IAM",
|
|
39
|
+
"CAPABILITY_NAMED_IAM",
|
|
40
|
+
"CAPABILITY_AUTO_EXPAND"
|
|
41
|
+
],
|
|
42
|
+
templateUrl: templateURL,
|
|
43
|
+
autoDeployment: {
|
|
44
|
+
enabled: true,
|
|
45
|
+
retainStacksOnAccountRemoval: false
|
|
46
|
+
},
|
|
47
|
+
callAs: "DELEGATED_ADMIN",
|
|
48
|
+
operationPreferences: {
|
|
49
|
+
regionConcurrencyType: "PARALLEL",
|
|
50
|
+
maxConcurrentPercentage: 100,
|
|
51
|
+
failureTolerancePercentage: 10
|
|
52
|
+
},
|
|
53
|
+
stackInstancesGroup: [
|
|
54
|
+
{
|
|
55
|
+
deploymentTargets: {
|
|
56
|
+
organizationalUnitIds: props.organizationalUnitIds
|
|
57
|
+
},
|
|
58
|
+
regions: props.regions,
|
|
59
|
+
parameterOverrides: [
|
|
60
|
+
{
|
|
61
|
+
parameterKey: "AccountId",
|
|
62
|
+
parameterValue: "{{account}}"
|
|
63
|
+
},
|
|
64
|
+
{
|
|
65
|
+
parameterKey: "Region",
|
|
66
|
+
parameterValue: "{{region}}"
|
|
67
|
+
}
|
|
68
|
+
]
|
|
69
|
+
}
|
|
70
|
+
]
|
|
71
|
+
});
|
|
72
|
+
}
|
|
73
|
+
}
|
|
74
|
+
exports.DeployManagedAccounts = DeployManagedAccounts;
|
|
75
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWFuYWdlZEFjY291bnRTdGFja1NldC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL2xpYi9jb25maWcvYXdzL21hbmFnZWRBY2NvdW50U3RhY2tTZXQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQUEsNkNBQXNEO0FBQ3RELDJDQUF1QztBQUV2QyxxRUFBeUU7QUFDekUsNkJBQTZCO0FBQzdCLHNGQUE2RztBQVM3Rzs7O0dBR0c7QUFDSCxNQUFhLHFCQUFzQixTQUFRLHNCQUFTO0lBQ2xELFlBQVksS0FBZ0IsRUFBRSxFQUFVLEVBQUUsS0FBaUM7UUFDekUsS0FBSyxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsQ0FBQztRQUVqQixNQUFNLEtBQUssR0FBRyxtQkFBSyxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUU3QixtRUFBbUU7UUFDbkUsTUFBTSxPQUFPLEdBQUcsSUFBSSxpQkFBRyxFQUFFLENBQUM7UUFDMUIsTUFBTSxtQkFBbUIsR0FBRyxJQUFJLCtDQUFzQixDQUNwRCxPQUFPLEVBQ1Asd0JBQXdCLENBQ3pCLENBQUM7UUFDRixNQUFNLFFBQVEsR0FBRyxPQUFPLENBQUMsS0FBSyxFQUFFLENBQUM7UUFFakMsK0JBQStCO1FBQy9CLE1BQU0sZ0JBQWdCLEdBQUcsUUFBUSxDQUFDLGdCQUFnQixDQUNoRCxtQkFBbUIsQ0FBQyxVQUFVLENBQy9CLENBQUM7UUFDRixNQUFNLFlBQVksR0FBRyxnQkFBZ0IsQ0FBQyxnQkFBZ0IsQ0FBQztRQUV2RCx1Q0FBdUM7UUFDdkMsSUFBSSxvQ0FBZ0IsQ0FBQyxJQUFJLEVBQUUsOEJBQThCLEVBQUU7WUFDekQsT0FBTyxFQUFFLENBQUMsMEJBQU0sQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUFDO1lBQ25ELGlCQUFpQixFQUFFLEtBQUssQ0FBQyxjQUFjO1lBQ3ZDLG9CQUFvQixFQUFFLGlCQUFpQjtZQUN2QyxjQUFjLEVBQUUsS0FBSztTQUN0QixDQUFDLENBQUM7UUFFSCxvQ0FBb0M7UUFDcEMsTUFBTSxXQUFXLEdBQUcsV0FDbEIsS0FBSyxDQUFDLGNBQWMsQ0FBQyxVQUN2QixxQ0FBcUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxZQUFZLENBQUMsRUFBRSxDQUFDO1FBRW5FLElBQUkseUJBQVcsQ0FBQyxJQUFJLEVBQUUsd0JBQXdCLEVBQUU7WUFDOUMsZUFBZSxFQUFFLGlCQUFpQjtZQUNsQyxZQUFZLEVBQUUsa0JBQWtCLEtBQUssQ0FBQyxTQUFTLEVBQUU7WUFDakQsV0FBVyxFQUFFLG1EQUFtRDtZQUNoRSxZQUFZLEVBQUU7Z0JBQ1osZ0JBQWdCO2dCQUNoQixzQkFBc0I7Z0JBQ3RCLHdCQUF3QjthQUN6QjtZQUNELFdBQVcsRUFBRSxXQUFXO1lBQ3hCLGNBQWMsRUFBRTtnQkFDZCxPQUFPLEVBQUUsSUFBSTtnQkFDYiw0QkFBNEIsRUFBRSxLQUFLO2FBQ3BDO1lBQ0QsTUFBTSxFQUFFLGlCQUFpQjtZQUN6QixvQkFBb0IsRUFBRTtnQkFDcEIscUJBQXFCLEVBQUUsVUFBVTtnQkFDakMsdUJBQXVCLEVBQUUsR0FBRztnQkFDNUIsMEJBQTBCLEVBQUUsRUFBRTthQUMvQjtZQUNELG1CQUFtQixFQUFFO2dCQUNuQjtvQkFDRSxpQkFBaUIsRUFBRTt3QkFDakIscUJBQXFCLEVBQUUsS0FBSyxDQUFDLHFCQUFxQjtxQkFDbkQ7b0JBQ0QsT0FBTyxFQUFFLEtBQUssQ0FBQyxPQUFPO29CQUN0QixrQkFBa0IsRUFBRTt3QkFDbEI7NEJBQ0UsWUFBWSxFQUFFLFdBQVc7NEJBQ3pCLGNBQWMsRUFBRSxhQUFhO3lCQUM5Qjt3QkFDRDs0QkFDRSxZQUFZLEVBQUUsUUFBUTs0QkFDdEIsY0FBYyxFQUFFLFlBQVk7eUJBQzdCO3FCQUNGO2lCQUNGO2FBQ0Y7U0FDRixDQUFDLENBQUM7SUFDTCxDQUFDO0NBQ0Y7QUF6RUQsc0RBeUVDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgU3RhY2ssIENmblN0YWNrU2V0LCBBcHAgfSBmcm9tIFwiYXdzLWNkay1saWJcIjtcbmltcG9ydCB7IENvbnN0cnVjdCB9IGZyb20gXCJjb25zdHJ1Y3RzXCI7XG5pbXBvcnQgeyBTM0J1Y2tldCB9IGZyb20gXCIuLi8uLi9yZXNvdXJjZXNcIjtcbmltcG9ydCB7IEJ1Y2tldERlcGxveW1lbnQsIFNvdXJjZSB9IGZyb20gXCJhd3MtY2RrLWxpYi9hd3MtczMtZGVwbG95bWVudFwiO1xuaW1wb3J0ICogYXMgcGF0aCBmcm9tIFwicGF0aFwiO1xuaW1wb3J0IHsgTWFuYWdlZEFjY291bnRTdGFja1NldCBhcyBNYW5hZ2VkQWNjb3VudFRlbXBsYXRlIH0gZnJvbSBcIi4uLy4uL3BhdHRlcm5zL2F3cy9tYW5hZ2VkQWNjb3VudFN0YWNrU2V0XCI7XG5cbmludGVyZmFjZSBEZXBsb3lNYW5hZ2VkQWNjb3VudHNQcm9wcyB7XG4gIHJlZ2lvbnM6IHN0cmluZ1tdO1xuICB0ZW1wbGF0ZUJ1Y2tldDogUzNCdWNrZXQ7XG4gIG9yZ2FuaXNhdGlvbklkOiBzdHJpbmc7XG4gIG9yZ2FuaXphdGlvbmFsVW5pdElkczogc3RyaW5nW107XG59XG5cbi8qKlxuICogRGVwbG95cyB0aGUgTWFuYWdlZEFjY291bnQgc3RhY2sgdG8gYWxsIGFjY291bnRzIGluIHRoZSBzcGVjaWZpZWQgb3JnYW5pemF0aW9uYWwgdW5pdHNcbiAqIHVzaW5nIEFXUyBDbG91ZEZvcm1hdGlvbiBTdGFja1NldHMuXG4gKi9cbmV4cG9ydCBjbGFzcyBEZXBsb3lNYW5hZ2VkQWNjb3VudHMgZXh0ZW5kcyBDb25zdHJ1Y3Qge1xuICBjb25zdHJ1Y3RvcihzY29wZTogQ29uc3RydWN0LCBpZDogc3RyaW5nLCBwcm9wczogRGVwbG95TWFuYWdlZEFjY291bnRzUHJvcHMpIHtcbiAgICBzdXBlcihzY29wZSwgaWQpO1xuXG4gICAgY29uc3Qgc3RhY2sgPSBTdGFjay5vZih0aGlzKTtcblxuICAgIC8vIENyZWF0ZSBhIHRlbXBvcmFyeSBhcHAgdG8gc3ludGhlc2l6ZSB0aGUgTWFuYWdlZEFjY291bnQgdGVtcGxhdGVcbiAgICBjb25zdCB0ZW1wQXBwID0gbmV3IEFwcCgpO1xuICAgIGNvbnN0IG1hbmFnZWRBY2NvdW50U3RhY2sgPSBuZXcgTWFuYWdlZEFjY291bnRUZW1wbGF0ZShcbiAgICAgIHRlbXBBcHAsXG4gICAgICBcIk1hbmFnZWRBY2NvdW50VGVtcGxhdGVcIlxuICAgICk7XG4gICAgY29uc3QgYXNzZW1ibHkgPSB0ZW1wQXBwLnN5bnRoKCk7XG5cbiAgICAvLyBHZXQgdGhlIHN5bnRoZXNpemVkIHRlbXBsYXRlXG4gICAgY29uc3QgdGVtcGxhdGVBcnRpZmFjdCA9IGFzc2VtYmx5LmdldFN0YWNrQXJ0aWZhY3QoXG4gICAgICBtYW5hZ2VkQWNjb3VudFN0YWNrLmFydGlmYWN0SWRcbiAgICApO1xuICAgIGNvbnN0IHRlbXBsYXRlUGF0aCA9IHRlbXBsYXRlQXJ0aWZhY3QudGVtcGxhdGVGdWxsUGF0aDtcblxuICAgIC8vIERlcGxveSB0aGUgdGVtcGxhdGUgdG8gdGhlIFMzIGJ1Y2tldFxuICAgIG5ldyBCdWNrZXREZXBsb3ltZW50KHRoaXMsIFwiRGVwbG95TWFuYWdlZEFjY291bnRUZW1wbGF0ZVwiLCB7XG4gICAgICBzb3VyY2VzOiBbU291cmNlLmFzc2V0KHBhdGguZGlybmFtZSh0ZW1wbGF0ZVBhdGgpKV0sXG4gICAgICBkZXN0aW5hdGlvbkJ1Y2tldDogcHJvcHMudGVtcGxhdGVCdWNrZXQsXG4gICAgICBkZXN0aW5hdGlvbktleVByZWZpeDogXCJtYW5hZ2VkLWFjY291bnRcIixcbiAgICAgIHJldGFpbk9uRGVsZXRlOiBmYWxzZVxuICAgIH0pO1xuXG4gICAgLy8gVXNlIHJlZ2lvbi1hZ25vc3RpYyBTMyBVUkwgZm9ybWF0XG4gICAgY29uc3QgdGVtcGxhdGVVUkwgPSBgaHR0cHM6Ly8ke1xuICAgICAgcHJvcHMudGVtcGxhdGVCdWNrZXQuYnVja2V0TmFtZVxuICAgIH0uczMuYW1hem9uYXdzLmNvbS9tYW5hZ2VkLWFjY291bnQvJHtwYXRoLmJhc2VuYW1lKHRlbXBsYXRlUGF0aCl9YDtcblxuICAgIG5ldyBDZm5TdGFja1NldCh0aGlzLCBcIk1hbmFnZWRBY2NvdW50U3RhY2tTZXRcIiwge1xuICAgICAgcGVybWlzc2lvbk1vZGVsOiBcIlNFUlZJQ0VfTUFOQUdFRFwiLFxuICAgICAgc3RhY2tTZXROYW1lOiBgTWFuYWdlZEFjY291bnQtJHtzdGFjay5zdGFja05hbWV9YCxcbiAgICAgIGRlc2NyaXB0aW9uOiBcIk1hbmFnZWRBY2NvdW50IFN0YWNrU2V0IGZvciBvcmdhbml6YXRpb24gYWNjb3VudHNcIixcbiAgICAgIGNhcGFiaWxpdGllczogW1xuICAgICAgICBcIkNBUEFCSUxJVFlfSUFNXCIsXG4gICAgICAgIFwiQ0FQQUJJTElUWV9OQU1FRF9JQU1cIixcbiAgICAgICAgXCJDQVBBQklMSVRZX0FVVE9fRVhQQU5EXCJcbiAgICAgIF0sXG4gICAgICB0ZW1wbGF0ZVVybDogdGVtcGxhdGVVUkwsXG4gICAgICBhdXRvRGVwbG95bWVudDoge1xuICAgICAgICBlbmFibGVkOiB0cnVlLFxuICAgICAgICByZXRhaW5TdGFja3NPbkFjY291bnRSZW1vdmFsOiBmYWxzZVxuICAgICAgfSxcbiAgICAgIGNhbGxBczogXCJERUxFR0FURURfQURNSU5cIixcbiAgICAgIG9wZXJhdGlvblByZWZlcmVuY2VzOiB7XG4gICAgICAgIHJlZ2lvbkNvbmN1cnJlbmN5VHlwZTogXCJQQVJBTExFTFwiLFxuICAgICAgICBtYXhDb25jdXJyZW50UGVyY2VudGFnZTogMTAwLFxuICAgICAgICBmYWlsdXJlVG9sZXJhbmNlUGVyY2VudGFnZTogMTBcbiAgICAgIH0sXG4gICAgICBzdGFja0luc3RhbmNlc0dyb3VwOiBbXG4gICAgICAgIHtcbiAgICAgICAgICBkZXBsb3ltZW50VGFyZ2V0czoge1xuICAgICAgICAgICAgb3JnYW5pemF0aW9uYWxVbml0SWRzOiBwcm9wcy5vcmdhbml6YXRpb25hbFVuaXRJZHNcbiAgICAgICAgICB9LFxuICAgICAgICAgIHJlZ2lvbnM6IHByb3BzLnJlZ2lvbnMsXG4gICAgICAgICAgcGFyYW1ldGVyT3ZlcnJpZGVzOiBbXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIHBhcmFtZXRlcktleTogXCJBY2NvdW50SWRcIixcbiAgICAgICAgICAgICAgcGFyYW1ldGVyVmFsdWU6IFwie3thY2NvdW50fX1cIlxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgcGFyYW1ldGVyS2V5OiBcIlJlZ2lvblwiLFxuICAgICAgICAgICAgICBwYXJhbWV0ZXJWYWx1ZTogXCJ7e3JlZ2lvbn19XCJcbiAgICAgICAgICAgIH1cbiAgICAgICAgICBdXG4gICAgICAgIH1cbiAgICAgIF1cbiAgICB9KTtcbiAgfVxufVxuIl19
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import { Construct } from "constructs";
|
|
2
|
+
import { S3Bucket } from "../../resources";
|
|
3
|
+
interface DeployManagedPlatformProps {
|
|
4
|
+
regions: string[];
|
|
5
|
+
templateBucket: S3Bucket;
|
|
6
|
+
organisationId: string;
|
|
7
|
+
platformAccountId: string;
|
|
8
|
+
orgAccounts: string[];
|
|
9
|
+
}
|
|
10
|
+
/**
|
|
11
|
+
* Deploys the ManagedPlatform stack to the platform account only
|
|
12
|
+
* using AWS CloudFormation StackSets.
|
|
13
|
+
*
|
|
14
|
+
* Unlike ManagedAccount which deploys to all accounts, ManagedPlatform
|
|
15
|
+
* is only deployed to the designated platform account as it manages
|
|
16
|
+
* organization-wide resources like IPAM.
|
|
17
|
+
*
|
|
18
|
+
* Note: IPAM pools for individual accounts need to be created separately
|
|
19
|
+
* as they require concrete account names at synthesis time.
|
|
20
|
+
*/
|
|
21
|
+
export declare class DeployManagedPlatform extends Construct {
|
|
22
|
+
constructor(scope: Construct, id: string, props: DeployManagedPlatformProps);
|
|
23
|
+
}
|
|
24
|
+
export {};
|
|
@@ -0,0 +1,101 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.DeployManagedPlatform = void 0;
|
|
4
|
+
const aws_cdk_lib_1 = require("aws-cdk-lib");
|
|
5
|
+
const constructs_1 = require("constructs");
|
|
6
|
+
const aws_s3_deployment_1 = require("aws-cdk-lib/aws-s3-deployment");
|
|
7
|
+
const path = require("path");
|
|
8
|
+
const fs = require("fs");
|
|
9
|
+
const os = require("os");
|
|
10
|
+
const managedPlatformStackSet_1 = require("../../patterns/aws/managedPlatformStackSet");
|
|
11
|
+
/**
|
|
12
|
+
* Deploys the ManagedPlatform stack to the platform account only
|
|
13
|
+
* using AWS CloudFormation StackSets.
|
|
14
|
+
*
|
|
15
|
+
* Unlike ManagedAccount which deploys to all accounts, ManagedPlatform
|
|
16
|
+
* is only deployed to the designated platform account as it manages
|
|
17
|
+
* organization-wide resources like IPAM.
|
|
18
|
+
*
|
|
19
|
+
* Note: IPAM pools for individual accounts need to be created separately
|
|
20
|
+
* as they require concrete account names at synthesis time.
|
|
21
|
+
*/
|
|
22
|
+
class DeployManagedPlatform extends constructs_1.Construct {
|
|
23
|
+
constructor(scope, id, props) {
|
|
24
|
+
super(scope, id);
|
|
25
|
+
const stack = aws_cdk_lib_1.Stack.of(this);
|
|
26
|
+
let tmpDir;
|
|
27
|
+
try {
|
|
28
|
+
// Create a temporary app to synthesize the ManagedPlatform template
|
|
29
|
+
const tempApp = new aws_cdk_lib_1.App({
|
|
30
|
+
outdir: path.join(os.tmpdir(), `cdk-out-${Date.now()}`)
|
|
31
|
+
});
|
|
32
|
+
const managedPlatformStack = new managedPlatformStackSet_1.ManagedPlatformStackSet(tempApp, "ManagedPlatformTemplate");
|
|
33
|
+
const assembly = tempApp.synth();
|
|
34
|
+
// Get the synthesized template
|
|
35
|
+
const templateArtifact = assembly.getStackArtifact(managedPlatformStack.artifactId);
|
|
36
|
+
const templatePath = templateArtifact.templateFullPath;
|
|
37
|
+
// Create a temporary directory with just the template file
|
|
38
|
+
tmpDir = fs.mkdtempSync(path.join(os.tmpdir(), "managed-platform-"));
|
|
39
|
+
const templateFileName = "ManagedPlatformTemplate.template.json";
|
|
40
|
+
const destPath = path.join(tmpDir, templateFileName);
|
|
41
|
+
// Copy only the template file
|
|
42
|
+
fs.copyFileSync(templatePath, destPath);
|
|
43
|
+
// Deploy the template to the S3 bucket
|
|
44
|
+
new aws_s3_deployment_1.BucketDeployment(this, "DeployManagedPlatformTemplate", {
|
|
45
|
+
sources: [aws_s3_deployment_1.Source.asset(tmpDir)],
|
|
46
|
+
destinationBucket: props.templateBucket,
|
|
47
|
+
destinationKeyPrefix: "managed-platform",
|
|
48
|
+
retainOnDelete: false
|
|
49
|
+
});
|
|
50
|
+
// Use region-agnostic S3 URL format
|
|
51
|
+
const templateURL = `https://${props.templateBucket.bucketName}.s3.amazonaws.com/managed-platform/${templateFileName}`;
|
|
52
|
+
new aws_cdk_lib_1.CfnStackSet(this, "ManagedPlatformStackSet", {
|
|
53
|
+
permissionModel: "SERVICE_MANAGED",
|
|
54
|
+
stackSetName: `ManagedPlatform-${stack.stackName}`,
|
|
55
|
+
description: "ManagedPlatform StackSet for the platform account (IPAM infrastructure only)",
|
|
56
|
+
capabilities: [
|
|
57
|
+
"CAPABILITY_IAM",
|
|
58
|
+
"CAPABILITY_NAMED_IAM",
|
|
59
|
+
"CAPABILITY_AUTO_EXPAND"
|
|
60
|
+
],
|
|
61
|
+
templateUrl: templateURL,
|
|
62
|
+
autoDeployment: {
|
|
63
|
+
enabled: false, // Platform account is specific, not auto-deployed
|
|
64
|
+
retainStacksOnAccountRemoval: true
|
|
65
|
+
},
|
|
66
|
+
callAs: "DELEGATED_ADMIN",
|
|
67
|
+
operationPreferences: {
|
|
68
|
+
regionConcurrencyType: "PARALLEL",
|
|
69
|
+
maxConcurrentPercentage: 100,
|
|
70
|
+
failureTolerancePercentage: 0 // No tolerance as it's a single account
|
|
71
|
+
},
|
|
72
|
+
stackInstancesGroup: [
|
|
73
|
+
{
|
|
74
|
+
deploymentTargets: {
|
|
75
|
+
accounts: [props.platformAccountId] // Deploy only to platform account
|
|
76
|
+
},
|
|
77
|
+
regions: props.regions,
|
|
78
|
+
parameterOverrides: [
|
|
79
|
+
{
|
|
80
|
+
parameterKey: "AccountId",
|
|
81
|
+
parameterValue: props.platformAccountId
|
|
82
|
+
},
|
|
83
|
+
{
|
|
84
|
+
parameterKey: "Region",
|
|
85
|
+
parameterValue: props.regions[0] // Primary region for IPAM
|
|
86
|
+
}
|
|
87
|
+
]
|
|
88
|
+
}
|
|
89
|
+
]
|
|
90
|
+
});
|
|
91
|
+
}
|
|
92
|
+
finally {
|
|
93
|
+
// Clean up temporary directory
|
|
94
|
+
if (tmpDir && fs.existsSync(tmpDir)) {
|
|
95
|
+
fs.rmSync(tmpDir, { recursive: true, force: true });
|
|
96
|
+
}
|
|
97
|
+
}
|
|
98
|
+
}
|
|
99
|
+
}
|
|
100
|
+
exports.DeployManagedPlatform = DeployManagedPlatform;
|
|
101
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWFuYWdlZFBsYXRmb3JtU3RhY2tTZXQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9saWIvY29uZmlnL2F3cy9tYW5hZ2VkUGxhdGZvcm1TdGFja1NldC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBQSw2Q0FBc0Q7QUFDdEQsMkNBQXVDO0FBRXZDLHFFQUF5RTtBQUN6RSw2QkFBNkI7QUFDN0IseUJBQXlCO0FBQ3pCLHlCQUF5QjtBQUN6Qix3RkFBZ0g7QUFVaEg7Ozs7Ozs7Ozs7R0FVRztBQUNILE1BQWEscUJBQXNCLFNBQVEsc0JBQVM7SUFDbEQsWUFBWSxLQUFnQixFQUFFLEVBQVUsRUFBRSxLQUFpQztRQUN6RSxLQUFLLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxDQUFDO1FBRWpCLE1BQU0sS0FBSyxHQUFHLG1CQUFLLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQzdCLElBQUksTUFBMEIsQ0FBQztRQUUvQixJQUFJLENBQUM7WUFDSCxvRUFBb0U7WUFDcEUsTUFBTSxPQUFPLEdBQUcsSUFBSSxpQkFBRyxDQUFDO2dCQUN0QixNQUFNLEVBQUUsSUFBSSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsTUFBTSxFQUFFLEVBQUUsV0FBVyxJQUFJLENBQUMsR0FBRyxFQUFFLEVBQUUsQ0FBQzthQUN4RCxDQUFDLENBQUM7WUFFSCxNQUFNLG9CQUFvQixHQUFHLElBQUksaURBQXVCLENBQ3RELE9BQU8sRUFDUCx5QkFBeUIsQ0FDMUIsQ0FBQztZQUVGLE1BQU0sUUFBUSxHQUFHLE9BQU8sQ0FBQyxLQUFLLEVBQUUsQ0FBQztZQUVqQywrQkFBK0I7WUFDL0IsTUFBTSxnQkFBZ0IsR0FBRyxRQUFRLENBQUMsZ0JBQWdCLENBQ2hELG9CQUFvQixDQUFDLFVBQVUsQ0FDaEMsQ0FBQztZQUNGLE1BQU0sWUFBWSxHQUFHLGdCQUFnQixDQUFDLGdCQUFnQixDQUFDO1lBRXZELDJEQUEyRDtZQUMzRCxNQUFNLEdBQUcsRUFBRSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxNQUFNLEVBQUUsRUFBRSxtQkFBbUIsQ0FBQyxDQUFDLENBQUM7WUFDckUsTUFBTSxnQkFBZ0IsR0FBRyx1Q0FBdUMsQ0FBQztZQUNqRSxNQUFNLFFBQVEsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sRUFBRSxnQkFBZ0IsQ0FBQyxDQUFDO1lBRXJELDhCQUE4QjtZQUM5QixFQUFFLENBQUMsWUFBWSxDQUFDLFlBQVksRUFBRSxRQUFRLENBQUMsQ0FBQztZQUV4Qyx1Q0FBdUM7WUFDdkMsSUFBSSxvQ0FBZ0IsQ0FBQyxJQUFJLEVBQUUsK0JBQStCLEVBQUU7Z0JBQzFELE9BQU8sRUFBRSxDQUFDLDBCQUFNLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxDQUFDO2dCQUMvQixpQkFBaUIsRUFBRSxLQUFLLENBQUMsY0FBYztnQkFDdkMsb0JBQW9CLEVBQUUsa0JBQWtCO2dCQUN4QyxjQUFjLEVBQUUsS0FBSzthQUN0QixDQUFDLENBQUM7WUFFSCxvQ0FBb0M7WUFDcEMsTUFBTSxXQUFXLEdBQUcsV0FBVyxLQUFLLENBQUMsY0FBYyxDQUFDLFVBQVUsc0NBQXNDLGdCQUFnQixFQUFFLENBQUM7WUFFdkgsSUFBSSx5QkFBVyxDQUFDLElBQUksRUFBRSx5QkFBeUIsRUFBRTtnQkFDL0MsZUFBZSxFQUFFLGlCQUFpQjtnQkFDbEMsWUFBWSxFQUFFLG1CQUFtQixLQUFLLENBQUMsU0FBUyxFQUFFO2dCQUNsRCxXQUFXLEVBQ1QsOEVBQThFO2dCQUNoRixZQUFZLEVBQUU7b0JBQ1osZ0JBQWdCO29CQUNoQixzQkFBc0I7b0JBQ3RCLHdCQUF3QjtpQkFDekI7Z0JBQ0QsV0FBVyxFQUFFLFdBQVc7Z0JBQ3hCLGNBQWMsRUFBRTtvQkFDZCxPQUFPLEVBQUUsS0FBSyxFQUFFLGtEQUFrRDtvQkFDbEUsNEJBQTRCLEVBQUUsSUFBSTtpQkFDbkM7Z0JBQ0QsTUFBTSxFQUFFLGlCQUFpQjtnQkFDekIsb0JBQW9CLEVBQUU7b0JBQ3BCLHFCQUFxQixFQUFFLFVBQVU7b0JBQ2pDLHVCQUF1QixFQUFFLEdBQUc7b0JBQzVCLDBCQUEwQixFQUFFLENBQUMsQ0FBQyx3Q0FBd0M7aUJBQ3ZFO2dCQUNELG1CQUFtQixFQUFFO29CQUNuQjt3QkFDRSxpQkFBaUIsRUFBRTs0QkFDakIsUUFBUSxFQUFFLENBQUMsS0FBSyxDQUFDLGlCQUFpQixDQUFDLENBQUMsa0NBQWtDO3lCQUN2RTt3QkFDRCxPQUFPLEVBQUUsS0FBSyxDQUFDLE9BQU87d0JBQ3RCLGtCQUFrQixFQUFFOzRCQUNsQjtnQ0FDRSxZQUFZLEVBQUUsV0FBVztnQ0FDekIsY0FBYyxFQUFFLEtBQUssQ0FBQyxpQkFBaUI7NkJBQ3hDOzRCQUNEO2dDQUNFLFlBQVksRUFBRSxRQUFRO2dDQUN0QixjQUFjLEVBQUUsS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQywwQkFBMEI7NkJBQzVEO3lCQUNGO3FCQUNGO2lCQUNGO2FBQ0YsQ0FBQyxDQUFDO1FBQ0wsQ0FBQztnQkFBUyxDQUFDO1lBQ1QsK0JBQStCO1lBQy9CLElBQUksTUFBTSxJQUFJLEVBQUUsQ0FBQyxVQUFVLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQztnQkFDcEMsRUFBRSxDQUFDLE1BQU0sQ0FBQyxNQUFNLEVBQUUsRUFBRSxTQUFTLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDO1lBQ3RELENBQUM7UUFDSCxDQUFDO0lBQ0gsQ0FBQztDQUNGO0FBNUZELHNEQTRGQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IFN0YWNrLCBDZm5TdGFja1NldCwgQXBwIH0gZnJvbSBcImF3cy1jZGstbGliXCI7XG5pbXBvcnQgeyBDb25zdHJ1Y3QgfSBmcm9tIFwiY29uc3RydWN0c1wiO1xuaW1wb3J0IHsgUzNCdWNrZXQgfSBmcm9tIFwiLi4vLi4vcmVzb3VyY2VzXCI7XG5pbXBvcnQgeyBCdWNrZXREZXBsb3ltZW50LCBTb3VyY2UgfSBmcm9tIFwiYXdzLWNkay1saWIvYXdzLXMzLWRlcGxveW1lbnRcIjtcbmltcG9ydCAqIGFzIHBhdGggZnJvbSBcInBhdGhcIjtcbmltcG9ydCAqIGFzIGZzIGZyb20gXCJmc1wiO1xuaW1wb3J0ICogYXMgb3MgZnJvbSBcIm9zXCI7XG5pbXBvcnQgeyBNYW5hZ2VkUGxhdGZvcm1TdGFja1NldCBhcyBNYW5hZ2VkUGxhdGZvcm1UZW1wbGF0ZSB9IGZyb20gXCIuLi8uLi9wYXR0ZXJucy9hd3MvbWFuYWdlZFBsYXRmb3JtU3RhY2tTZXRcIjtcblxuaW50ZXJmYWNlIERlcGxveU1hbmFnZWRQbGF0Zm9ybVByb3BzIHtcbiAgcmVnaW9uczogc3RyaW5nW107XG4gIHRlbXBsYXRlQnVja2V0OiBTM0J1Y2tldDtcbiAgb3JnYW5pc2F0aW9uSWQ6IHN0cmluZztcbiAgcGxhdGZvcm1BY2NvdW50SWQ6IHN0cmluZztcbiAgb3JnQWNjb3VudHM6IHN0cmluZ1tdO1xufVxuXG4vKipcbiAqIERlcGxveXMgdGhlIE1hbmFnZWRQbGF0Zm9ybSBzdGFjayB0byB0aGUgcGxhdGZvcm0gYWNjb3VudCBvbmx5XG4gKiB1c2luZyBBV1MgQ2xvdWRGb3JtYXRpb24gU3RhY2tTZXRzLlxuICpcbiAqIFVubGlrZSBNYW5hZ2VkQWNjb3VudCB3aGljaCBkZXBsb3lzIHRvIGFsbCBhY2NvdW50cywgTWFuYWdlZFBsYXRmb3JtXG4gKiBpcyBvbmx5IGRlcGxveWVkIHRvIHRoZSBkZXNpZ25hdGVkIHBsYXRmb3JtIGFjY291bnQgYXMgaXQgbWFuYWdlc1xuICogb3JnYW5pemF0aW9uLXdpZGUgcmVzb3VyY2VzIGxpa2UgSVBBTS5cbiAqXG4gKiBOb3RlOiBJUEFNIHBvb2xzIGZvciBpbmRpdmlkdWFsIGFjY291bnRzIG5lZWQgdG8gYmUgY3JlYXRlZCBzZXBhcmF0ZWx5XG4gKiBhcyB0aGV5IHJlcXVpcmUgY29uY3JldGUgYWNjb3VudCBuYW1lcyBhdCBzeW50aGVzaXMgdGltZS5cbiAqL1xuZXhwb3J0IGNsYXNzIERlcGxveU1hbmFnZWRQbGF0Zm9ybSBleHRlbmRzIENvbnN0cnVjdCB7XG4gIGNvbnN0cnVjdG9yKHNjb3BlOiBDb25zdHJ1Y3QsIGlkOiBzdHJpbmcsIHByb3BzOiBEZXBsb3lNYW5hZ2VkUGxhdGZvcm1Qcm9wcykge1xuICAgIHN1cGVyKHNjb3BlLCBpZCk7XG5cbiAgICBjb25zdCBzdGFjayA9IFN0YWNrLm9mKHRoaXMpO1xuICAgIGxldCB0bXBEaXI6IHN0cmluZyB8IHVuZGVmaW5lZDtcblxuICAgIHRyeSB7XG4gICAgICAvLyBDcmVhdGUgYSB0ZW1wb3JhcnkgYXBwIHRvIHN5bnRoZXNpemUgdGhlIE1hbmFnZWRQbGF0Zm9ybSB0ZW1wbGF0ZVxuICAgICAgY29uc3QgdGVtcEFwcCA9IG5ldyBBcHAoe1xuICAgICAgICBvdXRkaXI6IHBhdGguam9pbihvcy50bXBkaXIoKSwgYGNkay1vdXQtJHtEYXRlLm5vdygpfWApXG4gICAgICB9KTtcblxuICAgICAgY29uc3QgbWFuYWdlZFBsYXRmb3JtU3RhY2sgPSBuZXcgTWFuYWdlZFBsYXRmb3JtVGVtcGxhdGUoXG4gICAgICAgIHRlbXBBcHAsXG4gICAgICAgIFwiTWFuYWdlZFBsYXRmb3JtVGVtcGxhdGVcIlxuICAgICAgKTtcblxuICAgICAgY29uc3QgYXNzZW1ibHkgPSB0ZW1wQXBwLnN5bnRoKCk7XG5cbiAgICAgIC8vIEdldCB0aGUgc3ludGhlc2l6ZWQgdGVtcGxhdGVcbiAgICAgIGNvbnN0IHRlbXBsYXRlQXJ0aWZhY3QgPSBhc3NlbWJseS5nZXRTdGFja0FydGlmYWN0KFxuICAgICAgICBtYW5hZ2VkUGxhdGZvcm1TdGFjay5hcnRpZmFjdElkXG4gICAgICApO1xuICAgICAgY29uc3QgdGVtcGxhdGVQYXRoID0gdGVtcGxhdGVBcnRpZmFjdC50ZW1wbGF0ZUZ1bGxQYXRoO1xuXG4gICAgICAvLyBDcmVhdGUgYSB0ZW1wb3JhcnkgZGlyZWN0b3J5IHdpdGgganVzdCB0aGUgdGVtcGxhdGUgZmlsZVxuICAgICAgdG1wRGlyID0gZnMubWtkdGVtcFN5bmMocGF0aC5qb2luKG9zLnRtcGRpcigpLCBcIm1hbmFnZWQtcGxhdGZvcm0tXCIpKTtcbiAgICAgIGNvbnN0IHRlbXBsYXRlRmlsZU5hbWUgPSBcIk1hbmFnZWRQbGF0Zm9ybVRlbXBsYXRlLnRlbXBsYXRlLmpzb25cIjtcbiAgICAgIGNvbnN0IGRlc3RQYXRoID0gcGF0aC5qb2luKHRtcERpciwgdGVtcGxhdGVGaWxlTmFtZSk7XG5cbiAgICAgIC8vIENvcHkgb25seSB0aGUgdGVtcGxhdGUgZmlsZVxuICAgICAgZnMuY29weUZpbGVTeW5jKHRlbXBsYXRlUGF0aCwgZGVzdFBhdGgpO1xuXG4gICAgICAvLyBEZXBsb3kgdGhlIHRlbXBsYXRlIHRvIHRoZSBTMyBidWNrZXRcbiAgICAgIG5ldyBCdWNrZXREZXBsb3ltZW50KHRoaXMsIFwiRGVwbG95TWFuYWdlZFBsYXRmb3JtVGVtcGxhdGVcIiwge1xuICAgICAgICBzb3VyY2VzOiBbU291cmNlLmFzc2V0KHRtcERpcildLFxuICAgICAgICBkZXN0aW5hdGlvbkJ1Y2tldDogcHJvcHMudGVtcGxhdGVCdWNrZXQsXG4gICAgICAgIGRlc3RpbmF0aW9uS2V5UHJlZml4OiBcIm1hbmFnZWQtcGxhdGZvcm1cIixcbiAgICAgICAgcmV0YWluT25EZWxldGU6IGZhbHNlXG4gICAgICB9KTtcblxuICAgICAgLy8gVXNlIHJlZ2lvbi1hZ25vc3RpYyBTMyBVUkwgZm9ybWF0XG4gICAgICBjb25zdCB0ZW1wbGF0ZVVSTCA9IGBodHRwczovLyR7cHJvcHMudGVtcGxhdGVCdWNrZXQuYnVja2V0TmFtZX0uczMuYW1hem9uYXdzLmNvbS9tYW5hZ2VkLXBsYXRmb3JtLyR7dGVtcGxhdGVGaWxlTmFtZX1gO1xuXG4gICAgICBuZXcgQ2ZuU3RhY2tTZXQodGhpcywgXCJNYW5hZ2VkUGxhdGZvcm1TdGFja1NldFwiLCB7XG4gICAgICAgIHBlcm1pc3Npb25Nb2RlbDogXCJTRVJWSUNFX01BTkFHRURcIixcbiAgICAgICAgc3RhY2tTZXROYW1lOiBgTWFuYWdlZFBsYXRmb3JtLSR7c3RhY2suc3RhY2tOYW1lfWAsXG4gICAgICAgIGRlc2NyaXB0aW9uOlxuICAgICAgICAgIFwiTWFuYWdlZFBsYXRmb3JtIFN0YWNrU2V0IGZvciB0aGUgcGxhdGZvcm0gYWNjb3VudCAoSVBBTSBpbmZyYXN0cnVjdHVyZSBvbmx5KVwiLFxuICAgICAgICBjYXBhYmlsaXRpZXM6IFtcbiAgICAgICAgICBcIkNBUEFCSUxJVFlfSUFNXCIsXG4gICAgICAgICAgXCJDQVBBQklMSVRZX05BTUVEX0lBTVwiLFxuICAgICAgICAgIFwiQ0FQQUJJTElUWV9BVVRPX0VYUEFORFwiXG4gICAgICAgIF0sXG4gICAgICAgIHRlbXBsYXRlVXJsOiB0ZW1wbGF0ZVVSTCxcbiAgICAgICAgYXV0b0RlcGxveW1lbnQ6IHtcbiAgICAgICAgICBlbmFibGVkOiBmYWxzZSwgLy8gUGxhdGZvcm0gYWNjb3VudCBpcyBzcGVjaWZpYywgbm90IGF1dG8tZGVwbG95ZWRcbiAgICAgICAgICByZXRhaW5TdGFja3NPbkFjY291bnRSZW1vdmFsOiB0cnVlXG4gICAgICAgIH0sXG4gICAgICAgIGNhbGxBczogXCJERUxFR0FURURfQURNSU5cIixcbiAgICAgICAgb3BlcmF0aW9uUHJlZmVyZW5jZXM6IHtcbiAgICAgICAgICByZWdpb25Db25jdXJyZW5jeVR5cGU6IFwiUEFSQUxMRUxcIixcbiAgICAgICAgICBtYXhDb25jdXJyZW50UGVyY2VudGFnZTogMTAwLFxuICAgICAgICAgIGZhaWx1cmVUb2xlcmFuY2VQZXJjZW50YWdlOiAwIC8vIE5vIHRvbGVyYW5jZSBhcyBpdCdzIGEgc2luZ2xlIGFjY291bnRcbiAgICAgICAgfSxcbiAgICAgICAgc3RhY2tJbnN0YW5jZXNHcm91cDogW1xuICAgICAgICAgIHtcbiAgICAgICAgICAgIGRlcGxveW1lbnRUYXJnZXRzOiB7XG4gICAgICAgICAgICAgIGFjY291bnRzOiBbcHJvcHMucGxhdGZvcm1BY2NvdW50SWRdIC8vIERlcGxveSBvbmx5IHRvIHBsYXRmb3JtIGFjY291bnRcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICByZWdpb25zOiBwcm9wcy5yZWdpb25zLFxuICAgICAgICAgICAgcGFyYW1ldGVyT3ZlcnJpZGVzOiBbXG4gICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBwYXJhbWV0ZXJLZXk6IFwiQWNjb3VudElkXCIsXG4gICAgICAgICAgICAgICAgcGFyYW1ldGVyVmFsdWU6IHByb3BzLnBsYXRmb3JtQWNjb3VudElkXG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBwYXJhbWV0ZXJLZXk6IFwiUmVnaW9uXCIsXG4gICAgICAgICAgICAgICAgcGFyYW1ldGVyVmFsdWU6IHByb3BzLnJlZ2lvbnNbMF0gLy8gUHJpbWFyeSByZWdpb24gZm9yIElQQU1cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgXVxuICAgICAgICAgIH1cbiAgICAgICAgXVxuICAgICAgfSk7XG4gICAgfSBmaW5hbGx5IHtcbiAgICAgIC8vIENsZWFuIHVwIHRlbXBvcmFyeSBkaXJlY3RvcnlcbiAgICAgIGlmICh0bXBEaXIgJiYgZnMuZXhpc3RzU3luYyh0bXBEaXIpKSB7XG4gICAgICAgIGZzLnJtU3luYyh0bXBEaXIsIHsgcmVjdXJzaXZlOiB0cnVlLCBmb3JjZTogdHJ1ZSB9KTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cbiJdfQ==
|
|
@@ -4,11 +4,13 @@ import { Account as ExistingAccounts } from "@aws-sdk/client-organizations";
|
|
|
4
4
|
import { KeyValue } from "../../types";
|
|
5
5
|
interface OrganisationProps extends StackProps {
|
|
6
6
|
organisationName: string;
|
|
7
|
-
|
|
8
|
-
platformAccount: string;
|
|
7
|
+
accounts: AccountsConfig;
|
|
9
8
|
orgEmail: string;
|
|
10
9
|
existingAccounts?: ExistingAccounts[];
|
|
11
10
|
}
|
|
11
|
+
type AccountsConfig = {
|
|
12
|
+
readonly [key: string]: readonly string[] | string;
|
|
13
|
+
};
|
|
12
14
|
/**
|
|
13
15
|
* A construct for creating multi environment organisations with a production, staging and development account.
|
|
14
16
|
*/
|
|
@@ -14,15 +14,9 @@ class Organisation extends constructs_1.Construct {
|
|
|
14
14
|
super(scope, id);
|
|
15
15
|
this.accounts = {};
|
|
16
16
|
this.organisationalUnits = [];
|
|
17
|
-
if (!props.orgAccounts.includes(props.platformAccount)) {
|
|
18
|
-
throw new Error("ERROR: The Platform account specified must be included in the account names");
|
|
19
|
-
}
|
|
20
|
-
else if (!props.env?.region) {
|
|
21
|
-
("ERROR: The Platform account specified must be included in the account names");
|
|
22
|
-
}
|
|
23
17
|
this.existingAccounts = props.existingAccounts;
|
|
24
18
|
this.addOrganisation(props.organisationName);
|
|
25
|
-
this.addOrganisationUnitsAndAccounts(props.
|
|
19
|
+
this.addOrganisationUnitsAndAccounts(props.accounts, props.orgEmail);
|
|
26
20
|
}
|
|
27
21
|
addOrganisation(organisationName) {
|
|
28
22
|
this.organisation = new cdk_organizations_1.Organization(this, organisationName, {
|
|
@@ -40,35 +34,25 @@ class Organisation extends constructs_1.Construct {
|
|
|
40
34
|
this.organisation.enablePolicyType(policyType);
|
|
41
35
|
}
|
|
42
36
|
}
|
|
43
|
-
addOrganisationUnitsAndAccounts(
|
|
44
|
-
const
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
const
|
|
48
|
-
//
|
|
49
|
-
const
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
const
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
}
|
|
63
|
-
]
|
|
64
|
-
};
|
|
65
|
-
orgStructure.push(orgUnitStructure);
|
|
66
|
-
}
|
|
67
|
-
}
|
|
68
|
-
for (const orgUnitStructure of orgStructure) {
|
|
69
|
-
const orgUnit = this.addOrganisationalUnit(orgUnitStructure.id, orgUnitStructure.name);
|
|
70
|
-
for (const accountStructure of orgUnitStructure.accounts) {
|
|
71
|
-
this.addAccount(accountStructure.id, accountStructure.name, accountStructure.email, { env: orgUnitStructure.name.toLocaleLowerCase() }, orgUnit);
|
|
37
|
+
addOrganisationUnitsAndAccounts(accounts, orgEmail) {
|
|
38
|
+
for (const [environmentType, accountList] of Object.entries(accounts)) {
|
|
39
|
+
// Create OU for each environment type
|
|
40
|
+
const ouName = environmentType.charAt(0).toUpperCase() + environmentType.slice(1);
|
|
41
|
+
const orgUnit = this.addOrganisationalUnit(`${ouName}OrganizationalUnit`, ouName);
|
|
42
|
+
// Convert single account to array for uniform processing
|
|
43
|
+
const accountsArray = Array.isArray(accountList)
|
|
44
|
+
? accountList
|
|
45
|
+
: [accountList];
|
|
46
|
+
// Add accounts to this OU
|
|
47
|
+
for (const accountName of accountsArray) {
|
|
48
|
+
const accountNameId = (0, stripAndCamelCase_1.stripAndCamelCase)(accountName);
|
|
49
|
+
const importedAccount = this.existingAccounts?.find((account) => account.Name === accountName);
|
|
50
|
+
const accountEmail = importedAccount
|
|
51
|
+
? importedAccount.Email
|
|
52
|
+
: (0, addSuffixToEmail_1.default)(orgEmail, accountNameId.toLowerCase());
|
|
53
|
+
if (accountEmail) {
|
|
54
|
+
this.addAccount(`${accountNameId}Account`, accountName, accountEmail, { env: environmentType }, orgUnit);
|
|
55
|
+
}
|
|
72
56
|
}
|
|
73
57
|
}
|
|
74
58
|
}
|
|
@@ -109,4 +93,4 @@ class Organisation extends constructs_1.Construct {
|
|
|
109
93
|
}
|
|
110
94
|
}
|
|
111
95
|
exports.default = Organisation;
|
|
112
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib3JnYW5pc2F0aW9uLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vbGliL2NvbmZpZy9hd3Mvb3JnYW5pc2F0aW9uLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7O0FBQUEsNkNBQW9EO0FBQ3BELDJDQUF1QztBQUN2Qyw2Q0FBbUM7QUFDbkMscUVBQWtFO0FBRWxFLG9FQU1zQztBQUN0QyxtRUFBNEQ7QUF1QjVEOztHQUVHO0FBRUgsTUFBcUIsWUFBYSxTQUFRLHNCQUFTO0lBUWpELFlBQVksS0FBZ0IsRUFBRSxFQUFVLEVBQUUsS0FBd0I7UUFDaEUsS0FBSyxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsQ0FBQztRQUxYLGFBQVEsR0FBYSxFQUFFLENBQUM7UUFFeEIsd0JBQW1CLEdBQXlCLEVBQUUsQ0FBQztRQUtyRCxJQUFJLENBQUMsS0FBSyxDQUFDLFdBQVcsQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLGVBQWUsQ0FBQyxFQUFFLENBQUM7WUFDdkQsTUFBTSxJQUFJLEtBQUssQ0FDYiw2RUFBNkUsQ0FDOUUsQ0FBQztRQUNKLENBQUM7YUFBTSxJQUFJLENBQUMsS0FBSyxDQUFDLEdBQUcsRUFBRSxNQUFNLEVBQUUsQ0FBQztZQUM5QixDQUFDLDZFQUE2RSxDQUFDLENBQUM7UUFDbEYsQ0FBQztRQUVELElBQUksQ0FBQyxnQkFBZ0IsR0FBRyxLQUFLLENBQUMsZ0JBQWdCLENBQUM7UUFDL0MsSUFBSSxDQUFDLGVBQWUsQ0FBQyxLQUFLLENBQUMsZ0JBQWdCLENBQUMsQ0FBQztRQUM3QyxJQUFJLENBQUMsK0JBQStCLENBQUMsS0FBSyxDQUFDLFdBQVcsRUFBRSxLQUFLLENBQUMsUUFBUSxDQUFDLENBQUM7SUFDMUUsQ0FBQztJQUVPLGVBQWUsQ0FBQyxnQkFBd0I7UUFDOUMsSUFBSSxDQUFDLFlBQVksR0FBRyxJQUFJLGdDQUFZLENBQUMsSUFBSSxFQUFFLGdCQUFnQixFQUFFO1lBQzNELFVBQVUsRUFBRSw4QkFBVSxDQUFDLEdBQUc7U0FDM0IsQ0FBQyxDQUFDO1FBRUgsNkNBQTZDO1FBQzdDLElBQUksQ0FBQyxZQUFZLENBQUMsc0JBQXNCLENBQUMsdUJBQXVCLENBQUMsQ0FBQztRQUVsRSxNQUFNLG1CQUFtQixHQUFpQjtZQUN4Qyw4QkFBVSxDQUFDLHNCQUFzQjtZQUNqQyw4QkFBVSxDQUFDLFVBQVU7WUFDckIsOEJBQVUsQ0FBQyxhQUFhO1lBQ3hCLDhCQUFVLENBQUMseUJBQXlCO1NBQ3JDLENBQUM7UUFFRixLQUFLLE1BQU0sVUFBVSxJQUFJLG1CQUFtQixFQUFFLENBQUM7WUFDN0MsSUFBSSxDQUFDLFlBQVksQ0FBQyxnQkFBZ0IsQ0FBQyxVQUFVLENBQUMsQ0FBQztRQUNqRCxDQUFDO0lBQ0gsQ0FBQztJQUVPLCtCQUErQixDQUNyQyxXQUFxQixFQUNyQixRQUFnQjtRQUVoQixNQUFNLFlBQVksR0FBNEIsRUFBRSxDQUFDO1FBRWpELEtBQUssTUFBTSxXQUFXLElBQUksV0FBVyxFQUFFLENBQUM7WUFDdEMseUNBQXlDO1lBQ3pDLE1BQU0sYUFBYSxHQUFHLElBQUEscUNBQWlCLEVBQUMsV0FBVyxDQUFDLENBQUM7WUFFckQsd0ZBQXdGO1lBQ3hGLE1BQU0sZUFBZSxHQUFHLElBQUksQ0FBQyxnQkFBZ0IsRUFBRSxJQUFJLENBQ2pELENBQUMsT0FBTyxFQUFFLEVBQUUsQ0FBQyxPQUFPLENBQUMsSUFBSSxLQUFLLFdBQVcsQ0FDMUMsQ0FBQztZQUNGLE1BQU0sWUFBWSxHQUFHLGVBQWU7Z0JBQ2xDLENBQUMsQ0FBQyxlQUFlLENBQUMsS0FBSztnQkFDdkIsQ0FBQyxDQUFDLElBQUEsMEJBQWdCLEVBQUMsUUFBUSxFQUFFLGFBQWEsQ0FBQyxXQUFXLEVBQUUsQ0FBQyxDQUFDO1lBRTVELElBQUksWUFBWSxFQUFFLENBQUM7Z0JBQ2pCLE1BQU0sZ0JBQWdCLEdBQTBCO29CQUM5QyxFQUFFLEVBQUUsR0FBRyxXQUFXLG9CQUFvQjtvQkFDdEMsSUFBSSxFQUFFLFdBQVc7b0JBQ2pCLFFBQVEsRUFBRTt3QkFDUjs0QkFDRSxFQUFFLEVBQUUsR0FBRyxhQUFhLFNBQVM7NEJBQzdCLElBQUksRUFBRSxXQUFXOzRCQUNqQixLQUFLLEVBQUUsWUFBWTt5QkFDcEI7cUJBQ0Y7aUJBQ0YsQ0FBQztnQkFDRixZQUFZLENBQUMsSUFBSSxDQUFDLGdCQUFnQixDQUFDLENBQUM7WUFDdEMsQ0FBQztRQUNILENBQUM7UUFDRCxLQUFLLE1BQU0sZ0JBQWdCLElBQUksWUFBWSxFQUFFLENBQUM7WUFDNUMsTUFBTSxPQUFPLEdBQUcsSUFBSSxDQUFDLHFCQUFxQixDQUN4QyxnQkFBZ0IsQ0FBQyxFQUFFLEVBQ25CLGdCQUFnQixDQUFDLElBQUksQ0FDdEIsQ0FBQztZQUNGLEtBQUssTUFBTSxnQkFBZ0IsSUFBSSxnQkFBZ0IsQ0FBQyxRQUFRLEVBQUUsQ0FBQztnQkFDekQsSUFBSSxDQUFDLFVBQVUsQ0FDYixnQkFBZ0IsQ0FBQyxFQUFFLEVBQ25CLGdCQUFnQixDQUFDLElBQUksRUFDckIsZ0JBQWdCLENBQUMsS0FBSyxFQUN0QixFQUFFLEdBQUcsRUFBRSxnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsaUJBQWlCLEVBQUUsRUFBRSxFQUNsRCxPQUFPLENBQ1IsQ0FBQztZQUNKLENBQUM7UUFDSCxDQUFDO0lBQ0gsQ0FBQztJQUVPLHFCQUFxQixDQUFDLEVBQVUsRUFBRSxJQUFZO1FBQ3BELE1BQU0sRUFBRSxHQUFHLElBQUksc0NBQWtCLENBQUMsSUFBSSxFQUFFLEVBQUUsRUFBRTtZQUMxQyxzQkFBc0IsRUFBRSxJQUFJO1lBQzVCLE1BQU0sRUFBRSxJQUFJLENBQUMsWUFBWSxDQUFDLElBQUk7WUFDOUIsaUJBQWlCLEVBQUUsSUFBSTtTQUN4QixDQUFDLENBQUM7UUFFSCxJQUFJLENBQUMsbUJBQW1CLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBQ2xDLE9BQU8sRUFBRSxDQUFDO0lBQ1osQ0FBQztJQUVPLFVBQVUsQ0FDaEIsRUFBVSxFQUNWLElBQVksRUFDWixLQUFhLEVBQ2IsSUFBK0IsRUFDL0Isa0JBQXNDO1FBRXRDLE1BQU0sR0FBRyxHQUFHLElBQUksMkJBQU8sQ0FBQyxJQUFJLEVBQUUsRUFBRSxFQUFFO1lBQ2hDLFdBQVcsRUFBRSxJQUFJO1lBQ2pCLEtBQUssRUFBRSxLQUFLO1lBQ1osTUFBTSxFQUFFLGtCQUFrQjtZQUMxQixpQkFBaUIsRUFBRSxJQUFJO1NBQ3hCLENBQUMsQ0FBQztRQUVILEtBQUssTUFBTSxHQUFHLElBQUksSUFBSSxFQUFFLENBQUM7WUFDdkIsa0JBQUksQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztRQUNuQyxDQUFDO1FBRUQsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsR0FBRyxHQUFHLENBQUMsU0FBUyxDQUFDO1FBRXBDLElBQUksdUJBQVMsQ0FBQyxJQUFJLEVBQUUsR0FBRyxFQUFFLElBQUksRUFBRTtZQUM3QixHQUFHLEVBQUUsR0FBRyxFQUFFLElBQUk7WUFDZCxLQUFLLEVBQUUsR0FBRyxDQUFDLFNBQVM7WUFDcEIsVUFBVSxFQUFFLEdBQUcsRUFBRSxJQUFJO1NBQ3RCLENBQUMsQ0FBQztRQUNILElBQUksdUJBQVMsQ0FBQyxJQUFJLEVBQUUsR0FBRyxFQUFFLEtBQUssRUFBRTtZQUM5QixHQUFHLEVBQUUsR0FBRyxFQUFFLEtBQUs7WUFDZixLQUFLLEVBQUUsR0FBRyxDQUFDLFVBQVU7WUFDckIsVUFBVSxFQUFFLEdBQUcsRUFBRSxLQUFLO1NBQ3ZCLENBQUMsQ0FBQztRQUVILE9BQU8sR0FBRyxDQUFDO0lBQ2IsQ0FBQztJQUVNLFdBQVc7UUFDaEIsT0FBTyxJQUFJLENBQUMsUUFBUSxDQUFDO0lBQ3ZCLENBQUM7Q0FDRjtBQTlJRCwrQkE4SUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDZm5PdXRwdXQsIFN0YWNrUHJvcHMgfSBmcm9tIFwiYXdzLWNkay1saWJcIjtcbmltcG9ydCB7IENvbnN0cnVjdCB9IGZyb20gXCJjb25zdHJ1Y3RzXCI7XG5pbXBvcnQgeyBUYWdzIH0gZnJvbSBcImF3cy1jZGstbGliXCI7XG5pbXBvcnQgeyBzdHJpcEFuZENhbWVsQ2FzZSB9IGZyb20gXCIuLi8uLi91dGlscy9zdHJpcEFuZENhbWVsQ2FzZVwiO1xuaW1wb3J0IHsgQWNjb3VudCBhcyBFeGlzdGluZ0FjY291bnRzIH0gZnJvbSBcIkBhd3Mtc2RrL2NsaWVudC1vcmdhbml6YXRpb25zXCI7XG5pbXBvcnQge1xuICBBY2NvdW50LFxuICBGZWF0dXJlU2V0LFxuICBPcmdhbml6YXRpb24sXG4gIE9yZ2FuaXphdGlvbmFsVW5pdCxcbiAgUG9saWN5VHlwZVxufSBmcm9tIFwiQHBlcHBlcml6ZS9jZGstb3JnYW5pemF0aW9uc1wiO1xuaW1wb3J0IGFkZFN1ZmZpeFRvRW1haWwgZnJvbSBcIi4uLy4uL3V0aWxzL2FkZFN1ZmZpeFRvRW1haWxcIjtcbmltcG9ydCB7IEtleVZhbHVlIH0gZnJvbSBcIi4uLy4uL3R5cGVzXCI7XG5cbmludGVyZmFjZSBPcmdhbmlzYXRpb25Qcm9wcyBleHRlbmRzIFN0YWNrUHJvcHMge1xuICBvcmdhbmlzYXRpb25OYW1lOiBzdHJpbmc7XG4gIG9yZ0FjY291bnRzOiBzdHJpbmdbXTtcbiAgcGxhdGZvcm1BY2NvdW50OiBzdHJpbmc7XG4gIG9yZ0VtYWlsOiBzdHJpbmc7XG4gIGV4aXN0aW5nQWNjb3VudHM/OiBFeGlzdGluZ0FjY291bnRzW107XG59XG5cbnR5cGUgQWNjb3VudFN0cnVjdHVyZSA9IHtcbiAgaWQ6IHN0cmluZztcbiAgbmFtZTogc3RyaW5nO1xuICBlbWFpbDogc3RyaW5nO1xufTtcblxudHlwZSBPcmdhbmlzYXRpb25TdHJ1Y3R1cmUgPSB7XG4gIGlkOiBzdHJpbmc7XG4gIG5hbWU6IHN0cmluZztcbiAgYWNjb3VudHM6IEFjY291bnRTdHJ1Y3R1cmVbXTtcbn07XG5cbi8qKlxuICogQSBjb25zdHJ1Y3QgZm9yIGNyZWF0aW5nIG11bHRpIGVudmlyb25tZW50IG9yZ2FuaXNhdGlvbnMgd2l0aCBhIHByb2R1Y3Rpb24sIHN0YWdpbmcgYW5kIGRldmVsb3BtZW50IGFjY291bnQuXG4gKi9cblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgT3JnYW5pc2F0aW9uIGV4dGVuZHMgQ29uc3RydWN0IHtcbiAgcHVibGljIGFjY291bnRJZDogQ2ZuT3V0cHV0O1xuXG4gIHByaXZhdGUgZXhpc3RpbmdBY2NvdW50cz86IEV4aXN0aW5nQWNjb3VudHNbXTtcbiAgcHJpdmF0ZSBhY2NvdW50czogS2V5VmFsdWUgPSB7fTtcbiAgcHJpdmF0ZSBvcmdhbmlzYXRpb246IE9yZ2FuaXphdGlvbjtcbiAgcHJpdmF0ZSBvcmdhbmlzYXRpb25hbFVuaXRzOiBPcmdhbml6YXRpb25hbFVuaXRbXSA9IFtdO1xuXG4gIGNvbnN0cnVjdG9yKHNjb3BlOiBDb25zdHJ1Y3QsIGlkOiBzdHJpbmcsIHByb3BzOiBPcmdhbmlzYXRpb25Qcm9wcykge1xuICAgIHN1cGVyKHNjb3BlLCBpZCk7XG5cbiAgICBpZiAoIXByb3BzLm9yZ0FjY291bnRzLmluY2x1ZGVzKHByb3BzLnBsYXRmb3JtQWNjb3VudCkpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgXCJFUlJPUjogVGhlIFBsYXRmb3JtIGFjY291bnQgc3BlY2lmaWVkIG11c3QgYmUgaW5jbHVkZWQgaW4gdGhlIGFjY291bnQgbmFtZXNcIlxuICAgICAgKTtcbiAgICB9IGVsc2UgaWYgKCFwcm9wcy5lbnY/LnJlZ2lvbikge1xuICAgICAgKFwiRVJST1I6IFRoZSBQbGF0Zm9ybSBhY2NvdW50IHNwZWNpZmllZCBtdXN0IGJlIGluY2x1ZGVkIGluIHRoZSBhY2NvdW50IG5hbWVzXCIpO1xuICAgIH1cblxuICAgIHRoaXMuZXhpc3RpbmdBY2NvdW50cyA9IHByb3BzLmV4aXN0aW5nQWNjb3VudHM7XG4gICAgdGhpcy5hZGRPcmdhbmlzYXRpb24ocHJvcHMub3JnYW5pc2F0aW9uTmFtZSk7XG4gICAgdGhpcy5hZGRPcmdhbmlzYXRpb25Vbml0c0FuZEFjY291bnRzKHByb3BzLm9yZ0FjY291bnRzLCBwcm9wcy5vcmdFbWFpbCk7XG4gIH1cblxuICBwcml2YXRlIGFkZE9yZ2FuaXNhdGlvbihvcmdhbmlzYXRpb25OYW1lOiBzdHJpbmcpIHtcbiAgICB0aGlzLm9yZ2FuaXNhdGlvbiA9IG5ldyBPcmdhbml6YXRpb24odGhpcywgb3JnYW5pc2F0aW9uTmFtZSwge1xuICAgICAgZmVhdHVyZVNldDogRmVhdHVyZVNldC5BTExcbiAgICB9KTtcblxuICAgIC8vIFRPRE86IFZhbGlkYXRlIHRoaXMgZW5hYmxlcyB0cnVzdGVkIGFjY2Vzc1xuICAgIHRoaXMub3JnYW5pc2F0aW9uLmVuYWJsZUF3c1NlcnZpY2VBY2Nlc3MoXCJhY2NvdW50LmFtYXpvbmF3cy5jb21cIik7XG5cbiAgICBjb25zdCBlbmZvcmNlZFBvbGljeVR5cGVzOiBQb2xpY3lUeXBlW10gPSBbXG4gICAgICBQb2xpY3lUeXBlLlNFUlZJQ0VfQ09OVFJPTF9QT0xJQ1ksXG4gICAgICBQb2xpY3lUeXBlLlRBR19QT0xJQ1ksXG4gICAgICBQb2xpY3lUeXBlLkJBQ0tVUF9QT0xJQ1ksXG4gICAgICBQb2xpY3lUeXBlLkFJU0VSVklDRVNfT1BUX09VVF9QT0xJQ1lcbiAgICBdO1xuXG4gICAgZm9yIChjb25zdCBwb2xpY3lUeXBlIG9mIGVuZm9yY2VkUG9saWN5VHlwZXMpIHtcbiAgICAgIHRoaXMub3JnYW5pc2F0aW9uLmVuYWJsZVBvbGljeVR5cGUocG9saWN5VHlwZSk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBhZGRPcmdhbmlzYXRpb25Vbml0c0FuZEFjY291bnRzKFxuICAgIG9yZ0FjY291bnRzOiBzdHJpbmdbXSxcbiAgICBvcmdFbWFpbDogc3RyaW5nXG4gICkge1xuICAgIGNvbnN0IG9yZ1N0cnVjdHVyZTogT3JnYW5pc2F0aW9uU3RydWN0dXJlW10gPSBbXTtcblxuICAgIGZvciAoY29uc3QgYWNjb3VudE5hbWUgb2Ygb3JnQWNjb3VudHMpIHtcbiAgICAgIC8vIFNldCBhY2NvdW50IG5hbWUsIHN0cmlwIGFueSBjaGFyYWN0ZXJzXG4gICAgICBjb25zdCBhY2NvdW50TmFtZUlkID0gc3RyaXBBbmRDYW1lbENhc2UoYWNjb3VudE5hbWUpO1xuXG4gICAgICAvLyBDaGVjayBpZiB0aGUgYWNjb3VudCBuYW1lIGFscmVhZHkgZXhpc3RzLCBpZiB0cnVlIGltcG9ydCB1c2luZyB0aGUgcHJlLWV4aXN0aW5nIGVtYWlsXG4gICAgICBjb25zdCBpbXBvcnRlZEFjY291bnQgPSB0aGlzLmV4aXN0aW5nQWNjb3VudHM/LmZpbmQoXG4gICAgICAgIChhY2NvdW50KSA9PiBhY2NvdW50Lk5hbWUgPT09IGFjY291bnROYW1lXG4gICAgICApO1xuICAgICAgY29uc3QgYWNjb3VudEVtYWlsID0gaW1wb3J0ZWRBY2NvdW50XG4gICAgICAgID8gaW1wb3J0ZWRBY2NvdW50LkVtYWlsXG4gICAgICAgIDogYWRkU3VmZml4VG9FbWFpbChvcmdFbWFpbCwgYWNjb3VudE5hbWVJZC50b0xvd2VyQ2FzZSgpKTtcblxuICAgICAgaWYgKGFjY291bnRFbWFpbCkge1xuICAgICAgICBjb25zdCBvcmdVbml0U3RydWN0dXJlOiBPcmdhbmlzYXRpb25TdHJ1Y3R1cmUgPSB7XG4gICAgICAgICAgaWQ6IGAke2FjY291bnROYW1lfU9yZ2FuaXphdGlvbmFsVW5pdGAsXG4gICAgICAgICAgbmFtZTogYWNjb3VudE5hbWUsXG4gICAgICAgICAgYWNjb3VudHM6IFtcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgaWQ6IGAke2FjY291bnROYW1lSWR9QWNjb3VudGAsXG4gICAgICAgICAgICAgIG5hbWU6IGFjY291bnROYW1lLFxuICAgICAgICAgICAgICBlbWFpbDogYWNjb3VudEVtYWlsXG4gICAgICAgICAgICB9XG4gICAgICAgICAgXVxuICAgICAgICB9O1xuICAgICAgICBvcmdTdHJ1Y3R1cmUucHVzaChvcmdVbml0U3RydWN0dXJlKTtcbiAgICAgIH1cbiAgICB9XG4gICAgZm9yIChjb25zdCBvcmdVbml0U3RydWN0dXJlIG9mIG9yZ1N0cnVjdHVyZSkge1xuICAgICAgY29uc3Qgb3JnVW5pdCA9IHRoaXMuYWRkT3JnYW5pc2F0aW9uYWxVbml0KFxuICAgICAgICBvcmdVbml0U3RydWN0dXJlLmlkLFxuICAgICAgICBvcmdVbml0U3RydWN0dXJlLm5hbWVcbiAgICAgICk7XG4gICAgICBmb3IgKGNvbnN0IGFjY291bnRTdHJ1Y3R1cmUgb2Ygb3JnVW5pdFN0cnVjdHVyZS5hY2NvdW50cykge1xuICAgICAgICB0aGlzLmFkZEFjY291bnQoXG4gICAgICAgICAgYWNjb3VudFN0cnVjdHVyZS5pZCxcbiAgICAgICAgICBhY2NvdW50U3RydWN0dXJlLm5hbWUsXG4gICAgICAgICAgYWNjb3VudFN0cnVjdHVyZS5lbWFpbCxcbiAgICAgICAgICB7IGVudjogb3JnVW5pdFN0cnVjdHVyZS5uYW1lLnRvTG9jYWxlTG93ZXJDYXNlKCkgfSxcbiAgICAgICAgICBvcmdVbml0XG4gICAgICAgICk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBhZGRPcmdhbmlzYXRpb25hbFVuaXQoaWQ6IHN0cmluZywgbmFtZTogc3RyaW5nKTogT3JnYW5pemF0aW9uYWxVbml0IHtcbiAgICBjb25zdCBvdSA9IG5ldyBPcmdhbml6YXRpb25hbFVuaXQodGhpcywgaWQsIHtcbiAgICAgIG9yZ2FuaXphdGlvbmFsVW5pdE5hbWU6IG5hbWUsXG4gICAgICBwYXJlbnQ6IHRoaXMub3JnYW5pc2F0aW9uLnJvb3QsXG4gICAgICBpbXBvcnRPbkR1cGxpY2F0ZTogdHJ1ZVxuICAgIH0pO1xuXG4gICAgdGhpcy5vcmdhbmlzYXRpb25hbFVuaXRzLnB1c2gob3UpO1xuICAgIHJldHVybiBvdTtcbiAgfVxuXG4gIHByaXZhdGUgYWRkQWNjb3VudChcbiAgICBpZDogc3RyaW5nLFxuICAgIG5hbWU6IHN0cmluZyxcbiAgICBlbWFpbDogc3RyaW5nLFxuICAgIHRhZ3M6IHsgW2tleTogc3RyaW5nXTogc3RyaW5nIH0sXG4gICAgb3JnYW5pc2F0aW9uYWxVbml0OiBPcmdhbml6YXRpb25hbFVuaXRcbiAgKTogQWNjb3VudCB7XG4gICAgY29uc3QgYWNjID0gbmV3IEFjY291bnQodGhpcywgaWQsIHtcbiAgICAgIGFjY291bnROYW1lOiBuYW1lLFxuICAgICAgZW1haWw6IGVtYWlsLFxuICAgICAgcGFyZW50OiBvcmdhbmlzYXRpb25hbFVuaXQsXG4gICAgICBpbXBvcnRPbkR1cGxpY2F0ZTogdHJ1ZVxuICAgIH0pO1xuXG4gICAgZm9yIChjb25zdCB0YWcgaW4gdGFncykge1xuICAgICAgVGFncy5vZihhY2MpLmFkZCh0YWcsIHRhZ3NbdGFnXSk7XG4gICAgfVxuXG4gICAgdGhpcy5hY2NvdW50c1tuYW1lXSA9IGFjYy5hY2NvdW50SWQ7XG5cbiAgICBuZXcgQ2ZuT3V0cHV0KHRoaXMsIGAke2lkfUlkYCwge1xuICAgICAga2V5OiBgJHtpZH1JZGAsXG4gICAgICB2YWx1ZTogYWNjLmFjY291bnRJZCxcbiAgICAgIGV4cG9ydE5hbWU6IGAke2lkfUlkYFxuICAgIH0pO1xuICAgIG5ldyBDZm5PdXRwdXQodGhpcywgYCR7aWR9QXJuYCwge1xuICAgICAga2V5OiBgJHtpZH1Bcm5gLFxuICAgICAgdmFsdWU6IGFjYy5hY2NvdW50QXJuLFxuICAgICAgZXhwb3J0TmFtZTogYCR7aWR9QXJuYFxuICAgIH0pO1xuXG4gICAgcmV0dXJuIGFjYztcbiAgfVxuXG4gIHB1YmxpYyBnZXRBY2NvdW50cygpIHtcbiAgICByZXR1cm4gdGhpcy5hY2NvdW50cztcbiAgfVxufVxuIl19
|
|
96
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib3JnYW5pc2F0aW9uLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vbGliL2NvbmZpZy9hd3Mvb3JnYW5pc2F0aW9uLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7O0FBQUEsNkNBQW9EO0FBQ3BELDJDQUF1QztBQUN2Qyw2Q0FBbUM7QUFDbkMscUVBQWtFO0FBRWxFLG9FQU1zQztBQUN0QyxtRUFBNEQ7QUFjNUQ7O0dBRUc7QUFFSCxNQUFxQixZQUFhLFNBQVEsc0JBQVM7SUFRakQsWUFBWSxLQUFnQixFQUFFLEVBQVUsRUFBRSxLQUF3QjtRQUNoRSxLQUFLLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxDQUFDO1FBTFgsYUFBUSxHQUFhLEVBQUUsQ0FBQztRQUV4Qix3QkFBbUIsR0FBeUIsRUFBRSxDQUFDO1FBS3JELElBQUksQ0FBQyxnQkFBZ0IsR0FBRyxLQUFLLENBQUMsZ0JBQWdCLENBQUM7UUFDL0MsSUFBSSxDQUFDLGVBQWUsQ0FBQyxLQUFLLENBQUMsZ0JBQWdCLENBQUMsQ0FBQztRQUM3QyxJQUFJLENBQUMsK0JBQStCLENBQUMsS0FBSyxDQUFDLFFBQVEsRUFBRSxLQUFLLENBQUMsUUFBUSxDQUFDLENBQUM7SUFDdkUsQ0FBQztJQUVPLGVBQWUsQ0FBQyxnQkFBd0I7UUFDOUMsSUFBSSxDQUFDLFlBQVksR0FBRyxJQUFJLGdDQUFZLENBQUMsSUFBSSxFQUFFLGdCQUFnQixFQUFFO1lBQzNELFVBQVUsRUFBRSw4QkFBVSxDQUFDLEdBQUc7U0FDM0IsQ0FBQyxDQUFDO1FBRUgsNkNBQTZDO1FBQzdDLElBQUksQ0FBQyxZQUFZLENBQUMsc0JBQXNCLENBQUMsdUJBQXVCLENBQUMsQ0FBQztRQUVsRSxNQUFNLG1CQUFtQixHQUFpQjtZQUN4Qyw4QkFBVSxDQUFDLHNCQUFzQjtZQUNqQyw4QkFBVSxDQUFDLFVBQVU7WUFDckIsOEJBQVUsQ0FBQyxhQUFhO1lBQ3hCLDhCQUFVLENBQUMseUJBQXlCO1NBQ3JDLENBQUM7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QztRQUVwQyxJQUFJLHVCQUFTLENBQUMsSUFBSSxFQUFFLEdBQUcsRUFBRSxJQUFJLEVBQUU7WUFDN0IsR0FBRyxFQUFFLEdBQUcsRUFBRSxJQUFJO1lBQ2QsS0FBSyxFQUFFLEdBQUcsQ0FBQyxTQUFTO1lBQ3BCLFVBQVUsRUFBRSxHQUFHLEVBQUUsSUFBSTtTQUN0QixDQUFDLENBQUM7UUFDSCxJQUFJLHVCQUFTLENBQUMsSUFBSSxFQUFFLEdBQUcsRUFBRSxLQUFLLEVBQUU7WUFDOUIsR0FBRyxFQUFFLEdBQUcsRUFBRSxLQUFLO1lBQ2YsS0FBSyxFQUFFLEdBQUcsQ0FBQyxVQUFVO1lBQ3JCLFVBQVUsRUFBRSxHQUFHLEVBQUUsS0FBSztTQUN2QixDQUFDLENBQUM7UUFFSCxPQUFPLEdBQUcsQ0FBQztJQUNiLENBQUM7SUFFTSxXQUFXO1FBQ2hCLE9BQU8sSUFBSSxDQUFDLFFBQVEsQ0FBQztJQUN2QixDQUFDO0NBQ0Y7QUE5SEQsK0JBOEhDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ2ZuT3V0cHV0LCBTdGFja1Byb3BzIH0gZnJvbSBcImF3cy1jZGstbGliXCI7XG5pbXBvcnQgeyBDb25zdHJ1Y3QgfSBmcm9tIFwiY29uc3RydWN0c1wiO1xuaW1wb3J0IHsgVGFncyB9IGZyb20gXCJhd3MtY2RrLWxpYlwiO1xuaW1wb3J0IHsgc3RyaXBBbmRDYW1lbENhc2UgfSBmcm9tIFwiLi4vLi4vdXRpbHMvc3RyaXBBbmRDYW1lbENhc2VcIjtcbmltcG9ydCB7IEFjY291bnQgYXMgRXhpc3RpbmdBY2NvdW50cyB9IGZyb20gXCJAYXdzLXNkay9jbGllbnQtb3JnYW5pemF0aW9uc1wiO1xuaW1wb3J0IHtcbiAgQWNjb3VudCxcbiAgRmVhdHVyZVNldCxcbiAgT3JnYW5pemF0aW9uLFxuICBPcmdhbml6YXRpb25hbFVuaXQsXG4gIFBvbGljeVR5cGVcbn0gZnJvbSBcIkBwZXBwZXJpemUvY2RrLW9yZ2FuaXphdGlvbnNcIjtcbmltcG9ydCBhZGRTdWZmaXhUb0VtYWlsIGZyb20gXCIuLi8uLi91dGlscy9hZGRTdWZmaXhUb0VtYWlsXCI7XG5pbXBvcnQgeyBLZXlWYWx1ZSB9IGZyb20gXCIuLi8uLi90eXBlc1wiO1xuXG5pbnRlcmZhY2UgT3JnYW5pc2F0aW9uUHJvcHMgZXh0ZW5kcyBTdGFja1Byb3BzIHtcbiAgb3JnYW5pc2F0aW9uTmFtZTogc3RyaW5nO1xuICBhY2NvdW50czogQWNjb3VudHNDb25maWc7XG4gIG9yZ0VtYWlsOiBzdHJpbmc7XG4gIGV4aXN0aW5nQWNjb3VudHM/OiBFeGlzdGluZ0FjY291bnRzW107XG59XG5cbnR5cGUgQWNjb3VudHNDb25maWcgPSB7XG4gIHJlYWRvbmx5IFtrZXk6IHN0cmluZ106IHJlYWRvbmx5IHN0cmluZ1tdIHwgc3RyaW5nO1xufTtcblxuLyoqXG4gKiBBIGNvbnN0cnVjdCBmb3IgY3JlYXRpbmcgbXVsdGkgZW52aXJvbm1lbnQgb3JnYW5pc2F0aW9ucyB3aXRoIGEgcHJvZHVjdGlvbiwgc3RhZ2luZyBhbmQgZGV2ZWxvcG1lbnQgYWNjb3VudC5cbiAqL1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBPcmdhbmlzYXRpb24gZXh0ZW5kcyBDb25zdHJ1Y3Qge1xuICBwdWJsaWMgYWNjb3VudElkOiBDZm5PdXRwdXQ7XG5cbiAgcHJpdmF0ZSBleGlzdGluZ0FjY291bnRzPzogRXhpc3RpbmdBY2NvdW50c1tdO1xuICBwcml2YXRlIGFjY291bnRzOiBLZXlWYWx1ZSA9IHt9O1xuICBwcml2YXRlIG9yZ2FuaXNhdGlvbjogT3JnYW5pemF0aW9uO1xuICBwcml2YXRlIG9yZ2FuaXNhdGlvbmFsVW5pdHM6IE9yZ2FuaXphdGlvbmFsVW5pdFtdID0gW107XG5cbiAgY29uc3RydWN0b3Ioc2NvcGU6IENvbnN0cnVjdCwgaWQ6IHN0cmluZywgcHJvcHM6IE9yZ2FuaXNhdGlvblByb3BzKSB7XG4gICAgc3VwZXIoc2NvcGUsIGlkKTtcblxuICAgIHRoaXMuZXhpc3RpbmdBY2NvdW50cyA9IHByb3BzLmV4aXN0aW5nQWNjb3VudHM7XG4gICAgdGhpcy5hZGRPcmdhbmlzYXRpb24ocHJvcHMub3JnYW5pc2F0aW9uTmFtZSk7XG4gICAgdGhpcy5hZGRPcmdhbmlzYXRpb25Vbml0c0FuZEFjY291bnRzKHByb3BzLmFjY291bnRzLCBwcm9wcy5vcmdFbWFpbCk7XG4gIH1cblxuICBwcml2YXRlIGFkZE9yZ2FuaXNhdGlvbihvcmdhbmlzYXRpb25OYW1lOiBzdHJpbmcpIHtcbiAgICB0aGlzLm9yZ2FuaXNhdGlvbiA9IG5ldyBPcmdhbml6YXRpb24odGhpcywgb3JnYW5pc2F0aW9uTmFtZSwge1xuICAgICAgZmVhdHVyZVNldDogRmVhdHVyZVNldC5BTExcbiAgICB9KTtcblxuICAgIC8vIFRPRE86IFZhbGlkYXRlIHRoaXMgZW5hYmxlcyB0cnVzdGVkIGFjY2Vzc1xuICAgIHRoaXMub3JnYW5pc2F0aW9uLmVuYWJsZUF3c1NlcnZpY2VBY2Nlc3MoXCJhY2NvdW50LmFtYXpvbmF3cy5jb21cIik7XG5cbiAgICBjb25zdCBlbmZvcmNlZFBvbGljeVR5cGVzOiBQb2xpY3lUeXBlW10gPSBbXG4gICAgICBQb2xpY3lUeXBlLlNFUlZJQ0VfQ09OVFJPTF9QT0xJQ1ksXG4gICAgICBQb2xpY3lUeXBlLlRBR19QT0xJQ1ksXG4gICAgICBQb2xpY3lUeXBlLkJBQ0tVUF9QT0xJQ1ksXG4gICAgICBQb2xpY3lUeXBlLkFJU0VSVklDRVNfT1BUX09VVF9QT0xJQ1lcbiAgICBdO1xuXG4gICAgZm9yIChjb25zdCBwb2xpY3lUeXBlIG9mIGVuZm9yY2VkUG9saWN5VHlwZXMpIHtcbiAgICAgIHRoaXMub3JnYW5pc2F0aW9uLmVuYWJsZVBvbGljeVR5cGUocG9saWN5VHlwZSk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBhZGRPcmdhbmlzYXRpb25Vbml0c0FuZEFjY291bnRzKFxuICAgIGFjY291bnRzOiBBY2NvdW50c0NvbmZpZyxcbiAgICBvcmdFbWFpbDogc3RyaW5nXG4gICkge1xuICAgIGZvciAoY29uc3QgW2Vudmlyb25tZW50VHlwZSwgYWNjb3VudExpc3RdIG9mIE9iamVjdC5lbnRyaWVzKGFjY291bnRzKSkge1xuICAgICAgLy8gQ3JlYXRlIE9VIGZvciBlYWNoIGVudmlyb25tZW50IHR5cGVcbiAgICAgIGNvbnN0IG91TmFtZSA9XG4gICAgICAgIGVudmlyb25tZW50VHlwZS5jaGFyQXQoMCkudG9VcHBlckNhc2UoKSArIGVudmlyb25tZW50VHlwZS5zbGljZSgxKTtcbiAgICAgIGNvbnN0IG9yZ1VuaXQgPSB0aGlzLmFkZE9yZ2FuaXNhdGlvbmFsVW5pdChcbiAgICAgICAgYCR7b3VOYW1lfU9yZ2FuaXphdGlvbmFsVW5pdGAsXG4gICAgICAgIG91TmFtZVxuICAgICAgKTtcblxuICAgICAgLy8gQ29udmVydCBzaW5nbGUgYWNjb3VudCB0byBhcnJheSBmb3IgdW5pZm9ybSBwcm9jZXNzaW5nXG4gICAgICBjb25zdCBhY2NvdW50c0FycmF5ID0gQXJyYXkuaXNBcnJheShhY2NvdW50TGlzdClcbiAgICAgICAgPyBhY2NvdW50TGlzdFxuICAgICAgICA6IFthY2NvdW50TGlzdF07XG5cbiAgICAgIC8vIEFkZCBhY2NvdW50cyB0byB0aGlzIE9VXG4gICAgICBmb3IgKGNvbnN0IGFjY291bnROYW1lIG9mIGFjY291bnRzQXJyYXkpIHtcbiAgICAgICAgY29uc3QgYWNjb3VudE5hbWVJZCA9IHN0cmlwQW5kQ2FtZWxDYXNlKGFjY291bnROYW1lKTtcblxuICAgICAgICBjb25zdCBpbXBvcnRlZEFjY291bnQgPSB0aGlzLmV4aXN0aW5nQWNjb3VudHM/LmZpbmQoXG4gICAgICAgICAgKGFjY291bnQpID0+IGFjY291bnQuTmFtZSA9PT0gYWNjb3VudE5hbWVcbiAgICAgICAgKTtcbiAgICAgICAgY29uc3QgYWNjb3VudEVtYWlsID0gaW1wb3J0ZWRBY2NvdW50XG4gICAgICAgICAgPyBpbXBvcnRlZEFjY291bnQuRW1haWxcbiAgICAgICAgICA6IGFkZFN1ZmZpeFRvRW1haWwob3JnRW1haWwsIGFjY291bnROYW1lSWQudG9Mb3dlckNhc2UoKSk7XG5cbiAgICAgICAgaWYgKGFjY291bnRFbWFpbCkge1xuICAgICAgICAgIHRoaXMuYWRkQWNjb3VudChcbiAgICAgICAgICAgIGAke2FjY291bnROYW1lSWR9QWNjb3VudGAsXG4gICAgICAgICAgICBhY2NvdW50TmFtZSxcbiAgICAgICAgICAgIGFjY291bnRFbWFpbCxcbiAgICAgICAgICAgIHsgZW52OiBlbnZpcm9ubWVudFR5cGUgfSxcbiAgICAgICAgICAgIG9yZ1VuaXRcbiAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBhZGRPcmdhbmlzYXRpb25hbFVuaXQoaWQ6IHN0cmluZywgbmFtZTogc3RyaW5nKTogT3JnYW5pemF0aW9uYWxVbml0IHtcbiAgICBjb25zdCBvdSA9IG5ldyBPcmdhbml6YXRpb25hbFVuaXQodGhpcywgaWQsIHtcbiAgICAgIG9yZ2FuaXphdGlvbmFsVW5pdE5hbWU6IG5hbWUsXG4gICAgICBwYXJlbnQ6IHRoaXMub3JnYW5pc2F0aW9uLnJvb3QsXG4gICAgICBpbXBvcnRPbkR1cGxpY2F0ZTogdHJ1ZVxuICAgIH0pO1xuXG4gICAgdGhpcy5vcmdhbmlzYXRpb25hbFVuaXRzLnB1c2gob3UpO1xuICAgIHJldHVybiBvdTtcbiAgfVxuXG4gIHByaXZhdGUgYWRkQWNjb3VudChcbiAgICBpZDogc3RyaW5nLFxuICAgIG5hbWU6IHN0cmluZyxcbiAgICBlbWFpbDogc3RyaW5nLFxuICAgIHRhZ3M6IHsgW2tleTogc3RyaW5nXTogc3RyaW5nIH0sXG4gICAgb3JnYW5pc2F0aW9uYWxVbml0OiBPcmdhbml6YXRpb25hbFVuaXRcbiAgKTogQWNjb3VudCB7XG4gICAgY29uc3QgYWNjID0gbmV3IEFjY291bnQodGhpcywgaWQsIHtcbiAgICAgIGFjY291bnROYW1lOiBuYW1lLFxuICAgICAgZW1haWw6IGVtYWlsLFxuICAgICAgcGFyZW50OiBvcmdhbmlzYXRpb25hbFVuaXQsXG4gICAgICBpbXBvcnRPbkR1cGxpY2F0ZTogdHJ1ZVxuICAgIH0pO1xuXG4gICAgZm9yIChjb25zdCB0YWcgaW4gdGFncykge1xuICAgICAgVGFncy5vZihhY2MpLmFkZCh0YWcsIHRhZ3NbdGFnXSk7XG4gICAgfVxuXG4gICAgdGhpcy5hY2NvdW50c1tuYW1lXSA9IGFjYy5hY2NvdW50SWQ7XG5cbiAgICBuZXcgQ2ZuT3V0cHV0KHRoaXMsIGAke2lkfUlkYCwge1xuICAgICAga2V5OiBgJHtpZH1JZGAsXG4gICAgICB2YWx1ZTogYWNjLmFjY291bnRJZCxcbiAgICAgIGV4cG9ydE5hbWU6IGAke2lkfUlkYFxuICAgIH0pO1xuICAgIG5ldyBDZm5PdXRwdXQodGhpcywgYCR7aWR9QXJuYCwge1xuICAgICAga2V5OiBgJHtpZH1Bcm5gLFxuICAgICAgdmFsdWU6IGFjYy5hY2NvdW50QXJuLFxuICAgICAgZXhwb3J0TmFtZTogYCR7aWR9QXJuYFxuICAgIH0pO1xuXG4gICAgcmV0dXJuIGFjYztcbiAgfVxuXG4gIHB1YmxpYyBnZXRBY2NvdW50cygpIHtcbiAgICByZXR1cm4gdGhpcy5hY2NvdW50cztcbiAgfVxufVxuIl19
|
|
@@ -4,9 +4,6 @@ export interface ManagedAccountProps extends StackProps {
|
|
|
4
4
|
accountId: string;
|
|
5
5
|
region: string;
|
|
6
6
|
}
|
|
7
|
-
/**
|
|
8
|
-
* A stack for deploying defaults into a new account.
|
|
9
|
-
*/
|
|
10
7
|
export declare class ManagedAccount extends Stack {
|
|
11
8
|
constructor(scope: Construct, id: string, props: ManagedAccountProps);
|
|
12
9
|
}
|
|
@@ -4,9 +4,6 @@ exports.ManagedAccount = void 0;
|
|
|
4
4
|
const aws_cdk_lib_1 = require("aws-cdk-lib");
|
|
5
5
|
const aws_1 = require("../../config/aws");
|
|
6
6
|
const cloudTrail_1 = require("../../config/aws/cloudTrail");
|
|
7
|
-
/**
|
|
8
|
-
* A stack for deploying defaults into a new account.
|
|
9
|
-
*/
|
|
10
7
|
class ManagedAccount extends aws_cdk_lib_1.Stack {
|
|
11
8
|
constructor(scope, id, props) {
|
|
12
9
|
super(scope, id, props);
|
|
@@ -28,13 +25,7 @@ class ManagedAccount extends aws_cdk_lib_1.Stack {
|
|
|
28
25
|
accountId: account.accountId.value,
|
|
29
26
|
eventBusArn: eventBus.defaultEventBusArn.value
|
|
30
27
|
});
|
|
31
|
-
// TODO: Not sure if we need this anymore
|
|
32
|
-
// new CfnOutput(this, `AccountName`, {
|
|
33
|
-
// key: `AccountName`,
|
|
34
|
-
// value: props.accountName,
|
|
35
|
-
// exportName: `AccountName`
|
|
36
|
-
// });
|
|
37
28
|
}
|
|
38
29
|
}
|
|
39
30
|
exports.ManagedAccount = ManagedAccount;
|
|
40
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
31
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWFuYWdlZEFjY291bnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9saWIvcGF0dGVybnMvYXdzL21hbmFnZWRBY2NvdW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUFBLDZDQUFnRDtBQUNoRCwwQ0FNMEI7QUFHMUIsNERBQW9FO0FBT3BFLE1BQWEsY0FBZSxTQUFRLG1CQUFLO0lBQ3ZDLFlBQVksS0FBZ0IsRUFBRSxFQUFVLEVBQUUsS0FBMEI7UUFDbEUsS0FBSyxDQUFDLEtBQUssRUFBRSxFQUFFLEVBQUUsS0FBSyxDQUFDLENBQUM7UUFFeEIsTUFBTSxZQUFZLEdBQUcsSUFBSSxvQkFBYyxDQUFDLElBQUksRUFBRSxnQkFBZ0IsQ0FBQyxDQUFDO1FBRWhFLE1BQU0sT0FBTyxHQUFHLElBQUksZUFBUyxDQUFDLElBQUksRUFBRSxXQUFXLENBQUMsQ0FBQztRQUVqRCxNQUFNLFFBQVEsR0FBRyxJQUFJLHFCQUFlLENBQUMsSUFBSSxFQUFFLFVBQVUsQ0FBQyxDQUFDO1FBRXZELElBQUksRUFBRSxLQUFLLGdCQUFnQixFQUFFLENBQUM7WUFDNUIsSUFBSSxnQkFBVSxDQUFDLElBQUksRUFBRSxZQUFZLEVBQUU7Z0JBQ2pDLFNBQVMsRUFBRSxLQUFLLENBQUMsU0FBUztnQkFDMUIsTUFBTSxFQUFFLEtBQUssQ0FBQyxNQUFNO2dCQUNwQixPQUFPLEVBQUUsWUFBWSxDQUFDLHNCQUFzQixDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO2FBQ2pFLENBQUMsQ0FBQztRQUNMLENBQUM7UUFFRCxJQUFJLGtDQUFxQixDQUFDLElBQUksRUFBRSxZQUFZLEVBQUU7WUFDNUMsU0FBUyxFQUFFLE9BQU8sQ0FBQyxTQUFTLENBQUMsS0FBSztTQUNuQyxDQUFDLENBQUM7UUFFSCxJQUFJLHFCQUFlLENBQUMsSUFBSSxFQUFFLGlCQUFpQixFQUFFO1lBQzNDLE1BQU0sRUFBRSxLQUFLLENBQUMsTUFBTTtZQUNwQixTQUFTLEVBQUUsT0FBTyxDQUFDLFNBQVMsQ0FBQyxLQUFLO1lBQ2xDLFdBQVcsRUFBRSxRQUFRLENBQUMsa0JBQWtCLENBQUMsS0FBSztTQUMvQyxDQUFDLENBQUM7SUFDTCxDQUFDO0NBQ0Y7QUE1QkQsd0NBNEJDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgU3RhY2ssIFN0YWNrUHJvcHMgfSBmcm9tIFwiYXdzLWNkay1saWJcIjtcbmltcG9ydCB7XG4gIE9yZ2FuaXNhdGlvbklkLFxuICBBY2NvdW50SWQsXG4gIElwYW1Qb29sSWQsXG4gIEVjckRlZmF1bHRJbWFnZSxcbiAgRGVmYXVsdEV2ZW50QnVzXG59IGZyb20gXCIuLi8uLi9jb25maWcvYXdzXCI7XG5pbXBvcnQge30gZnJvbSBcImF3cy1jZGstbGliL2F3cy1ldmVudHNcIjtcbmltcG9ydCB7IENvbnN0cnVjdCB9IGZyb20gXCJjb25zdHJ1Y3RzXCI7XG5pbXBvcnQgeyBNYW5hZ2VtZW50RXZlbnRzVHJhaWwgfSBmcm9tIFwiLi4vLi4vY29uZmlnL2F3cy9jbG91ZFRyYWlsXCI7XG5cbmV4cG9ydCBpbnRlcmZhY2UgTWFuYWdlZEFjY291bnRQcm9wcyBleHRlbmRzIFN0YWNrUHJvcHMge1xuICBhY2NvdW50SWQ6IHN0cmluZztcbiAgcmVnaW9uOiBzdHJpbmc7XG59XG5cbmV4cG9ydCBjbGFzcyBNYW5hZ2VkQWNjb3VudCBleHRlbmRzIFN0YWNrIHtcbiAgY29uc3RydWN0b3Ioc2NvcGU6IENvbnN0cnVjdCwgaWQ6IHN0cmluZywgcHJvcHM6IE1hbmFnZWRBY2NvdW50UHJvcHMpIHtcbiAgICBzdXBlcihzY29wZSwgaWQsIHByb3BzKTtcblxuICAgIGNvbnN0IG9yZ2FuaXNhdGlvbiA9IG5ldyBPcmdhbmlzYXRpb25JZCh0aGlzLCBcIk9yZ2FuaXNhdGlvbklkXCIpO1xuXG4gICAgY29uc3QgYWNjb3VudCA9IG5ldyBBY2NvdW50SWQodGhpcywgXCJBY2NvdW50SWRcIik7XG5cbiAgICBjb25zdCBldmVudEJ1cyA9IG5ldyBEZWZhdWx0RXZlbnRCdXModGhpcywgXCJFdmVudEJ1c1wiKTtcblxuICAgIGlmIChpZCA9PT0gXCJNYW5hZ2VkQWNjb3VudFwiKSB7XG4gICAgICBuZXcgSXBhbVBvb2xJZCh0aGlzLCBcIklwYW1Qb29sSWRcIiwge1xuICAgICAgICBhY2NvdW50SWQ6IHByb3BzLmFjY291bnRJZCxcbiAgICAgICAgcmVnaW9uOiBwcm9wcy5yZWdpb24sXG4gICAgICAgIG93bmVySWQ6IG9yZ2FuaXNhdGlvbi5vcmdhbmlzYXRpb25BY2NvdW50QXJuLnZhbHVlLnNwbGl0KFwiOlwiKVs0XVxuICAgICAgfSk7XG4gICAgfVxuXG4gICAgbmV3IE1hbmFnZW1lbnRFdmVudHNUcmFpbCh0aGlzLCBcIkNsb3VkVHJhaWxcIiwge1xuICAgICAgYWNjb3VudElkOiBhY2NvdW50LmFjY291bnRJZC52YWx1ZVxuICAgIH0pO1xuXG4gICAgbmV3IEVjckRlZmF1bHRJbWFnZSh0aGlzLCBcIkVjckRlZmF1bHRJbWFnZVwiLCB7XG4gICAgICByZWdpb246IHByb3BzLnJlZ2lvbixcbiAgICAgIGFjY291bnRJZDogYWNjb3VudC5hY2NvdW50SWQudmFsdWUsXG4gICAgICBldmVudEJ1c0FybjogZXZlbnRCdXMuZGVmYXVsdEV2ZW50QnVzQXJuLnZhbHVlXG4gICAgfSk7XG4gIH1cbn1cbiJdfQ==
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import { Stack, StackProps } from "aws-cdk-lib";
|
|
2
|
+
import { Construct } from "constructs";
|
|
3
|
+
export interface ManagedAccountStackSetProps extends StackProps {
|
|
4
|
+
}
|
|
5
|
+
/**
|
|
6
|
+
* A StackSet-compatible version of ManagedAccount that uses CloudFormation parameters
|
|
7
|
+
* for accountId and region instead of hardcoded values.
|
|
8
|
+
*/
|
|
9
|
+
export declare class ManagedAccountStackSet extends Stack {
|
|
10
|
+
constructor(scope: Construct, id: string, props?: ManagedAccountStackSetProps);
|
|
11
|
+
}
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.ManagedAccountStackSet = void 0;
|
|
4
|
+
const aws_cdk_lib_1 = require("aws-cdk-lib");
|
|
5
|
+
const managedAccount_1 = require("./managedAccount");
|
|
6
|
+
/**
|
|
7
|
+
* A StackSet-compatible version of ManagedAccount that uses CloudFormation parameters
|
|
8
|
+
* for accountId and region instead of hardcoded values.
|
|
9
|
+
*/
|
|
10
|
+
class ManagedAccountStackSet extends aws_cdk_lib_1.Stack {
|
|
11
|
+
constructor(scope, id, props) {
|
|
12
|
+
super(scope, id, props);
|
|
13
|
+
// Create parameters that will be populated by StackSet
|
|
14
|
+
const accountIdParam = new aws_cdk_lib_1.CfnParameter(this, "AccountId", {
|
|
15
|
+
type: "String",
|
|
16
|
+
description: "The AWS Account ID where this stack is being deployed",
|
|
17
|
+
default: this.account
|
|
18
|
+
});
|
|
19
|
+
const regionParam = new aws_cdk_lib_1.CfnParameter(this, "Region", {
|
|
20
|
+
type: "String",
|
|
21
|
+
description: "The AWS Region where this stack is being deployed",
|
|
22
|
+
default: this.region
|
|
23
|
+
});
|
|
24
|
+
// Create the ManagedAccount resources using parameter values
|
|
25
|
+
const managedAccount = new managedAccount_1.ManagedAccount(this, "ManagedAccountResources", {
|
|
26
|
+
accountId: accountIdParam.valueAsString,
|
|
27
|
+
region: regionParam.valueAsString,
|
|
28
|
+
env: {
|
|
29
|
+
account: accountIdParam.valueAsString,
|
|
30
|
+
region: regionParam.valueAsString
|
|
31
|
+
}
|
|
32
|
+
});
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
exports.ManagedAccountStackSet = ManagedAccountStackSet;
|
|
36
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWFuYWdlZEFjY291bnRTdGFja1NldC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL2xpYi9wYXR0ZXJucy9hd3MvbWFuYWdlZEFjY291bnRTdGFja1NldC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBQSw2Q0FBOEQ7QUFFOUQscURBQWtEO0FBTWxEOzs7R0FHRztBQUNILE1BQWEsc0JBQXVCLFNBQVEsbUJBQUs7SUFDL0MsWUFDRSxLQUFnQixFQUNoQixFQUFVLEVBQ1YsS0FBbUM7UUFFbkMsS0FBSyxDQUFDLEtBQUssRUFBRSxFQUFFLEVBQUUsS0FBSyxDQUFDLENBQUM7UUFFeEIsdURBQXVEO1FBQ3ZELE1BQU0sY0FBYyxHQUFHLElBQUksMEJBQVksQ0FBQyxJQUFJLEVBQUUsV0FBVyxFQUFFO1lBQ3pELElBQUksRUFBRSxRQUFRO1lBQ2QsV0FBVyxFQUFFLHVEQUF1RDtZQUNwRSxPQUFPLEVBQUUsSUFBSSxDQUFDLE9BQU87U0FDdEIsQ0FBQyxDQUFDO1FBRUgsTUFBTSxXQUFXLEdBQUcsSUFBSSwwQkFBWSxDQUFDLElBQUksRUFBRSxRQUFRLEVBQUU7WUFDbkQsSUFBSSxFQUFFLFFBQVE7WUFDZCxXQUFXLEVBQUUsbURBQW1EO1lBQ2hFLE9BQU8sRUFBRSxJQUFJLENBQUMsTUFBTTtTQUNyQixDQUFDLENBQUM7UUFFSCw2REFBNkQ7UUFDN0QsTUFBTSxjQUFjLEdBQUcsSUFBSSwrQkFBYyxDQUFDLElBQUksRUFBRSx5QkFBeUIsRUFBRTtZQUN6RSxTQUFTLEVBQUUsY0FBYyxDQUFDLGFBQWE7WUFDdkMsTUFBTSxFQUFFLFdBQVcsQ0FBQyxhQUFhO1lBQ2pDLEdBQUcsRUFBRTtnQkFDSCxPQUFPLEVBQUUsY0FBYyxDQUFDLGFBQWE7Z0JBQ3JDLE1BQU0sRUFBRSxXQUFXLENBQUMsYUFBYTthQUNsQztTQUNGLENBQUMsQ0FBQztJQUNMLENBQUM7Q0FDRjtBQS9CRCx3REErQkMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDZm5QYXJhbWV0ZXIsIFN0YWNrLCBTdGFja1Byb3BzIH0gZnJvbSBcImF3cy1jZGstbGliXCI7XG5pbXBvcnQgeyBDb25zdHJ1Y3QgfSBmcm9tIFwiY29uc3RydWN0c1wiO1xuaW1wb3J0IHsgTWFuYWdlZEFjY291bnQgfSBmcm9tIFwiLi9tYW5hZ2VkQWNjb3VudFwiO1xuXG5leHBvcnQgaW50ZXJmYWNlIE1hbmFnZWRBY2NvdW50U3RhY2tTZXRQcm9wcyBleHRlbmRzIFN0YWNrUHJvcHMge1xuICAvLyBBZGRpdGlvbmFsIHByb3BzIGlmIG5lZWRlZFxufVxuXG4vKipcbiAqIEEgU3RhY2tTZXQtY29tcGF0aWJsZSB2ZXJzaW9uIG9mIE1hbmFnZWRBY2NvdW50IHRoYXQgdXNlcyBDbG91ZEZvcm1hdGlvbiBwYXJhbWV0ZXJzXG4gKiBmb3IgYWNjb3VudElkIGFuZCByZWdpb24gaW5zdGVhZCBvZiBoYXJkY29kZWQgdmFsdWVzLlxuICovXG5leHBvcnQgY2xhc3MgTWFuYWdlZEFjY291bnRTdGFja1NldCBleHRlbmRzIFN0YWNrIHtcbiAgY29uc3RydWN0b3IoXG4gICAgc2NvcGU6IENvbnN0cnVjdCxcbiAgICBpZDogc3RyaW5nLFxuICAgIHByb3BzPzogTWFuYWdlZEFjY291bnRTdGFja1NldFByb3BzXG4gICkge1xuICAgIHN1cGVyKHNjb3BlLCBpZCwgcHJvcHMpO1xuXG4gICAgLy8gQ3JlYXRlIHBhcmFtZXRlcnMgdGhhdCB3aWxsIGJlIHBvcHVsYXRlZCBieSBTdGFja1NldFxuICAgIGNvbnN0IGFjY291bnRJZFBhcmFtID0gbmV3IENmblBhcmFtZXRlcih0aGlzLCBcIkFjY291bnRJZFwiLCB7XG4gICAgICB0eXBlOiBcIlN0cmluZ1wiLFxuICAgICAgZGVzY3JpcHRpb246IFwiVGhlIEFXUyBBY2NvdW50IElEIHdoZXJlIHRoaXMgc3RhY2sgaXMgYmVpbmcgZGVwbG95ZWRcIixcbiAgICAgIGRlZmF1bHQ6IHRoaXMuYWNjb3VudFxuICAgIH0pO1xuXG4gICAgY29uc3QgcmVnaW9uUGFyYW0gPSBuZXcgQ2ZuUGFyYW1ldGVyKHRoaXMsIFwiUmVnaW9uXCIsIHtcbiAgICAgIHR5cGU6IFwiU3RyaW5nXCIsXG4gICAgICBkZXNjcmlwdGlvbjogXCJUaGUgQVdTIFJlZ2lvbiB3aGVyZSB0aGlzIHN0YWNrIGlzIGJlaW5nIGRlcGxveWVkXCIsXG4gICAgICBkZWZhdWx0OiB0aGlzLnJlZ2lvblxuICAgIH0pO1xuXG4gICAgLy8gQ3JlYXRlIHRoZSBNYW5hZ2VkQWNjb3VudCByZXNvdXJjZXMgdXNpbmcgcGFyYW1ldGVyIHZhbHVlc1xuICAgIGNvbnN0IG1hbmFnZWRBY2NvdW50ID0gbmV3IE1hbmFnZWRBY2NvdW50KHRoaXMsIFwiTWFuYWdlZEFjY291bnRSZXNvdXJjZXNcIiwge1xuICAgICAgYWNjb3VudElkOiBhY2NvdW50SWRQYXJhbS52YWx1ZUFzU3RyaW5nLFxuICAgICAgcmVnaW9uOiByZWdpb25QYXJhbS52YWx1ZUFzU3RyaW5nLFxuICAgICAgZW52OiB7XG4gICAgICAgIGFjY291bnQ6IGFjY291bnRJZFBhcmFtLnZhbHVlQXNTdHJpbmcsXG4gICAgICAgIHJlZ2lvbjogcmVnaW9uUGFyYW0udmFsdWVBc1N0cmluZ1xuICAgICAgfVxuICAgIH0pO1xuICB9XG59XG4iXX0=
|
|
@@ -8,7 +8,7 @@ const identityCenterGroupMembership_1 = require("../../config/aws/identityCenter
|
|
|
8
8
|
class ManagedIdentityCenter extends aws_cdk_lib_1.Stack {
|
|
9
9
|
constructor(id) {
|
|
10
10
|
super(app_1.default.getInstance(), id);
|
|
11
|
-
const configFile = fs.readFileSync("
|
|
11
|
+
const configFile = fs.readFileSync("../identity-center-config.json", {
|
|
12
12
|
encoding: "utf8"
|
|
13
13
|
});
|
|
14
14
|
const identityCenterConfig = JSON.parse(configFile);
|
|
@@ -21,4 +21,4 @@ class ManagedIdentityCenter extends aws_cdk_lib_1.Stack {
|
|
|
21
21
|
}
|
|
22
22
|
}
|
|
23
23
|
exports.ManagedIdentityCenter = ManagedIdentityCenter;
|
|
24
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
24
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWFuYWdlZElkZW50aXR5Q2VudGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vbGliL3BhdHRlcm5zL2F3cy9tYW5hZ2VkSWRlbnRpdHlDZW50ZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQUEsNkNBQW9DO0FBQ3BDLHlCQUF5QjtBQUN6QixtQ0FBNEI7QUFDNUIsa0dBQStGO0FBTy9GLE1BQWEscUJBQXNCLFNBQVEsbUJBQUs7SUFDOUMsWUFBWSxFQUFVO1FBQ3BCLEtBQUssQ0FBQyxhQUFHLENBQUMsV0FBVyxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUM7UUFFN0IsTUFBTSxVQUFVLEdBQUcsRUFBRSxDQUFDLFlBQVksQ0FBQyxnQ0FBZ0MsRUFBRTtZQUNuRSxRQUFRLEVBQUUsTUFBTTtTQUNqQixDQUFDLENBQUM7UUFDSCxNQUFNLG9CQUFvQixHQUF5QixJQUFJLENBQUMsS0FBSyxDQUFDLFVBQVUsQ0FBQyxDQUFDO1FBRTFFLG9CQUFvQixDQUFDLE9BQU8sQ0FBQyxDQUFDLE1BQU0sRUFBRSxFQUFFO1lBQ3RDLElBQUksNkRBQTZCLENBQUMsSUFBSSxFQUFFLFVBQVUsTUFBTSxDQUFDLEtBQUssT0FBTyxFQUFFO2dCQUNyRSxTQUFTLEVBQUUsTUFBTSxDQUFDLEtBQUs7Z0JBQ3ZCLFlBQVksRUFBRSxNQUFNLENBQUMsT0FBTzthQUM3QixDQUFDLENBQUM7UUFDTCxDQUFDLENBQUMsQ0FBQztJQUNMLENBQUM7Q0FDRjtBQWhCRCxzREFnQkMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBTdGFjayB9IGZyb20gXCJhd3MtY2RrLWxpYlwiO1xuaW1wb3J0ICogYXMgZnMgZnJvbSBcImZzXCI7XG5pbXBvcnQgQXBwIGZyb20gXCIuLi8uLi9hcHBcIjtcbmltcG9ydCB7IElkZW50aXR5Q2VudGVyR3JvdXBNZW1iZXJzaGlwIH0gZnJvbSBcIi4uLy4uL2NvbmZpZy9hd3MvaWRlbnRpdHlDZW50ZXJHcm91cE1lbWJlcnNoaXBcIjtcblxudHlwZSBJZGVudGl0eUNlbnRlckNvbmZpZyA9IHtcbiAgZ3JvdXA6IHN0cmluZztcbiAgbWVtYmVyczogc3RyaW5nW107XG59W107XG5cbmV4cG9ydCBjbGFzcyBNYW5hZ2VkSWRlbnRpdHlDZW50ZXIgZXh0ZW5kcyBTdGFjayB7XG4gIGNvbnN0cnVjdG9yKGlkOiBzdHJpbmcpIHtcbiAgICBzdXBlcihBcHAuZ2V0SW5zdGFuY2UoKSwgaWQpO1xuXG4gICAgY29uc3QgY29uZmlnRmlsZSA9IGZzLnJlYWRGaWxlU3luYyhcIi4uL2lkZW50aXR5LWNlbnRlci1jb25maWcuanNvblwiLCB7XG4gICAgICBlbmNvZGluZzogXCJ1dGY4XCJcbiAgICB9KTtcbiAgICBjb25zdCBpZGVudGl0eUNlbnRlckNvbmZpZzogSWRlbnRpdHlDZW50ZXJDb25maWcgPSBKU09OLnBhcnNlKGNvbmZpZ0ZpbGUpO1xuXG4gICAgaWRlbnRpdHlDZW50ZXJDb25maWcuZm9yRWFjaCgoY29uZmlnKSA9PiB7XG4gICAgICBuZXcgSWRlbnRpdHlDZW50ZXJHcm91cE1lbWJlcnNoaXAodGhpcywgYE1hbmFnZWQke2NvbmZpZy5ncm91cH1Hcm91cGAsIHtcbiAgICAgICAgZ3JvdXBOYW1lOiBjb25maWcuZ3JvdXAsXG4gICAgICAgIGdyb3VwTWVtYmVyczogY29uZmlnLm1lbWJlcnNcbiAgICAgIH0pO1xuICAgIH0pO1xuICB9XG59XG4iXX0=
|
|
@@ -4,10 +4,12 @@ import { Account } from "@aws-sdk/client-organizations";
|
|
|
4
4
|
type ExtendedStackProps = Omit<StackProps, "env"> & {
|
|
5
5
|
env: Required<Pick<Environment, "region" | "account">> & Partial<Omit<Environment, "region" | "account">>;
|
|
6
6
|
};
|
|
7
|
+
type AccountsConfig = {
|
|
8
|
+
readonly [key: string]: readonly string[] | string;
|
|
9
|
+
};
|
|
7
10
|
interface ManagedOrganisationProps extends ExtendedStackProps {
|
|
8
11
|
organisationName: string;
|
|
9
|
-
|
|
10
|
-
platformAccount: string;
|
|
12
|
+
accounts: AccountsConfig;
|
|
11
13
|
orgEmail: string;
|
|
12
14
|
existingAccounts?: Account[];
|
|
13
15
|
costAllocationTags: ICostAllocationTags[];
|
|
@@ -16,13 +18,14 @@ interface ManagedOrganisationProps extends ExtendedStackProps {
|
|
|
16
18
|
export declare class ManagedOrganisation extends Stack {
|
|
17
19
|
private organisation;
|
|
18
20
|
constructor(id: string, props: ManagedOrganisationProps);
|
|
19
|
-
private validatePlatformAccount;
|
|
20
21
|
private createOrganisation;
|
|
21
22
|
private setupOrganisationFeatures;
|
|
23
|
+
private getPlatformAccountId;
|
|
22
24
|
private setupIpamDelegation;
|
|
23
25
|
private enableRamSharing;
|
|
24
26
|
private enableTrustedAccess;
|
|
25
27
|
private enableCostAllocationTags;
|
|
26
28
|
private setupIdentityCenter;
|
|
29
|
+
private updateEnvironmentConfig;
|
|
27
30
|
}
|
|
28
31
|
export {};
|