aws-cdk 2.1006.0 → 3.0.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/README.md +1 -1
- package/THIRD_PARTY_LICENSES +104 -86
- package/build-info.json +2 -2
- package/db.json.gz +0 -0
- package/lib/api/aws-auth.d.ts +1 -0
- package/lib/api/{logs/index.js → aws-auth.js} +2 -3
- package/lib/api/bootstrap.d.ts +1 -0
- package/lib/api/bootstrap.js +18 -0
- package/lib/api/cloud-assembly.d.ts +1 -0
- package/lib/api/cloud-assembly.js +18 -0
- package/lib/api/cloudformation.d.ts +1 -0
- package/lib/api/cloudformation.js +18 -0
- package/lib/api/context.d.ts +1 -40
- package/lib/api/context.js +16 -80
- package/lib/api/deployments.d.ts +1 -0
- package/lib/api/deployments.js +18 -0
- package/lib/api/environment.d.ts +1 -0
- package/lib/api/environment.js +18 -0
- package/lib/api/garbage-collection.d.ts +1 -0
- package/lib/api/garbage-collection.js +18 -0
- package/lib/api/hotswap.d.ts +1 -0
- package/lib/api/hotswap.js +18 -0
- package/lib/api/index.d.ts +5 -1
- package/lib/api/index.js +6 -2
- package/lib/api/logs-monitor.d.ts +1 -0
- package/lib/api/logs-monitor.js +18 -0
- package/lib/api/notices.d.ts +1 -0
- package/lib/api/notices.js +18 -0
- package/lib/api/plugin.d.ts +1 -0
- package/lib/api/{resource-import/index.js → plugin.js} +2 -3
- package/lib/api/resource-import.d.ts +1 -0
- package/lib/api/resource-import.js +18 -0
- package/lib/api/rwlock.d.ts +1 -0
- package/lib/api/{garbage-collection/index.js → rwlock.js} +2 -2
- package/lib/api/settings.d.ts +1 -26
- package/lib/api/settings.js +16 -103
- package/lib/api/stack-events.d.ts +1 -0
- package/lib/api/stack-events.js +18 -0
- package/lib/api/tags.d.ts +1 -9
- package/lib/api/tags.js +16 -8
- package/lib/api/toolkit-info.d.ts +1 -52
- package/lib/api/toolkit-info.js +16 -152
- package/lib/api/tree.d.ts +1 -31
- package/lib/api/tree.js +16 -35
- package/lib/api/work-graph.d.ts +1 -0
- package/lib/api/work-graph.js +18 -0
- package/lib/api-private.d.ts +3 -0
- package/lib/api-private.js +22 -0
- package/lib/cli/cdk-toolkit.d.ts +20 -16
- package/lib/cli/cdk-toolkit.js +102 -37
- package/lib/cli/cli-config.js +2 -2
- package/lib/cli/cli.d.ts +1 -1
- package/lib/cli/cli.js +22 -19
- package/lib/cli/io-host/cli-io-host.js +2 -2
- package/lib/cli/pretty-print-error.js +3 -1
- package/lib/cli/util/npm.d.ts +4 -1
- package/lib/cli/util/npm.js +25 -13
- package/lib/cli/version.d.ts +1 -1
- package/lib/cli/version.js +21 -25
- package/lib/commands/context.js +3 -2
- package/lib/commands/diff.d.ts +1 -50
- package/lib/commands/diff.js +5 -213
- package/lib/commands/init/init.js +3 -2
- package/lib/commands/list-stacks.js +4 -4
- package/lib/context-providers/ami.d.ts +1 -13
- package/lib/context-providers/ami.js +16 -48
- package/lib/context-providers/availability-zones.d.ts +1 -13
- package/lib/context-providers/availability-zones.js +16 -25
- package/lib/context-providers/cc-api-provider.d.ts +1 -30
- package/lib/context-providers/cc-api-provider.js +16 -136
- package/lib/context-providers/endpoint-service-availability-zones.d.ts +1 -13
- package/lib/context-providers/endpoint-service-availability-zones.js +16 -31
- package/lib/context-providers/hosted-zones.d.ts +1 -12
- package/lib/context-providers/hosted-zones.js +16 -65
- package/lib/context-providers/index.d.ts +1 -44
- package/lib/context-providers/index.js +15 -126
- package/lib/context-providers/keys.d.ts +1 -13
- package/lib/context-providers/keys.js +16 -50
- package/lib/context-providers/load-balancers.d.ts +1 -20
- package/lib/context-providers/load-balancers.js +16 -154
- package/lib/context-providers/security-groups.d.ts +1 -9
- package/lib/context-providers/security-groups.js +16 -66
- package/lib/context-providers/ssm-parameters.d.ts +1 -25
- package/lib/context-providers/ssm-parameters.js +16 -57
- package/lib/context-providers/vpcs.d.ts +1 -13
- package/lib/context-providers/vpcs.js +16 -285
- package/lib/{api/cxapp → cxapp}/cloud-assembly.d.ts +3 -59
- package/lib/cxapp/cloud-assembly.js +108 -0
- package/lib/{api/cxapp → cxapp}/cloud-executable.d.ts +10 -3
- package/lib/cxapp/cloud-executable.js +92 -0
- package/lib/{api/cxapp → cxapp}/environments.d.ts +1 -2
- package/lib/{api/cxapp → cxapp}/environments.js +2 -2
- package/lib/cxapp/exec.d.ts +14 -0
- package/lib/cxapp/exec.js +157 -0
- package/lib/cxapp/index.d.ts +4 -0
- package/lib/{api/bootstrap → cxapp}/index.js +5 -3
- package/lib/index.js +134493 -125222
- package/lib/init-templates/.init-version.json +1 -1
- package/lib/init-templates/.recommended-feature-flags.json +3 -1
- package/lib/legacy-aws-auth.d.ts +74 -0
- package/lib/legacy-aws-auth.js +40 -0
- package/lib/legacy-exports-source.d.ts +13 -18
- package/lib/legacy-exports-source.js +42 -49
- package/lib/legacy-exports.d.ts +3 -6
- package/lib/legacy-exports.js +5 -5
- package/lib/legacy-types.d.ts +31 -0
- package/lib/legacy-types.js +3 -0
- package/package.json +19 -18
- package/lib/api/aws-auth/account-cache.d.ts +0 -36
- package/lib/api/aws-auth/account-cache.js +0 -99
- package/lib/api/aws-auth/awscli-compatible.d.ts +0 -42
- package/lib/api/aws-auth/awscli-compatible.js +0 -263
- package/lib/api/aws-auth/cached.d.ts +0 -11
- package/lib/api/aws-auth/cached.js +0 -26
- package/lib/api/aws-auth/credential-plugins.d.ts +0 -36
- package/lib/api/aws-auth/credential-plugins.js +0 -152
- package/lib/api/aws-auth/index.d.ts +0 -3
- package/lib/api/aws-auth/index.js +0 -20
- package/lib/api/aws-auth/provider-caching.d.ts +0 -13
- package/lib/api/aws-auth/provider-caching.js +0 -24
- package/lib/api/aws-auth/sdk-logger.d.ts +0 -69
- package/lib/api/aws-auth/sdk-logger.js +0 -124
- package/lib/api/aws-auth/sdk-provider.d.ts +0 -207
- package/lib/api/aws-auth/sdk-provider.js +0 -357
- package/lib/api/aws-auth/sdk.d.ts +0 -229
- package/lib/api/aws-auth/sdk.js +0 -373
- package/lib/api/aws-auth/tracing.d.ts +0 -11
- package/lib/api/aws-auth/tracing.js +0 -60
- package/lib/api/aws-auth/user-agent.d.ts +0 -7
- package/lib/api/aws-auth/user-agent.js +0 -20
- package/lib/api/aws-auth/util.d.ts +0 -6
- package/lib/api/aws-auth/util.js +0 -23
- package/lib/api/bootstrap/bootstrap-environment.d.ts +0 -35
- package/lib/api/bootstrap/bootstrap-environment.js +0 -321
- package/lib/api/bootstrap/bootstrap-props.d.ts +0 -130
- package/lib/api/bootstrap/bootstrap-props.js +0 -14
- package/lib/api/bootstrap/deploy-bootstrap.d.ts +0 -39
- package/lib/api/bootstrap/deploy-bootstrap.js +0 -141
- package/lib/api/bootstrap/index.d.ts +0 -2
- package/lib/api/bootstrap/legacy-template.d.ts +0 -2
- package/lib/api/bootstrap/legacy-template.js +0 -82
- package/lib/api/cloudformation/evaluate-cloudformation-template.d.ts +0 -85
- package/lib/api/cloudformation/evaluate-cloudformation-template.js +0 -440
- package/lib/api/cloudformation/index.d.ts +0 -4
- package/lib/api/cloudformation/index.js +0 -21
- package/lib/api/cloudformation/nested-stack-helpers.d.ts +0 -25
- package/lib/api/cloudformation/nested-stack-helpers.js +0 -86
- package/lib/api/cloudformation/stack-helpers.d.ts +0 -96
- package/lib/api/cloudformation/stack-helpers.js +0 -158
- package/lib/api/cloudformation/template-body-parameter.d.ts +0 -22
- package/lib/api/cloudformation/template-body-parameter.js +0 -104
- package/lib/api/cxapp/cloud-assembly.js +0 -304
- package/lib/api/cxapp/cloud-executable.js +0 -89
- package/lib/api/cxapp/exec.d.ts +0 -56
- package/lib/api/cxapp/exec.js +0 -272
- package/lib/api/deployments/asset-manifest-builder.d.ts +0 -8
- package/lib/api/deployments/asset-manifest-builder.js +0 -35
- package/lib/api/deployments/asset-publishing.d.ts +0 -60
- package/lib/api/deployments/asset-publishing.js +0 -141
- package/lib/api/deployments/assets.d.ts +0 -11
- package/lib/api/deployments/assets.js +0 -109
- package/lib/api/deployments/cfn-api.d.ts +0 -138
- package/lib/api/deployments/cfn-api.js +0 -438
- package/lib/api/deployments/checks.d.ts +0 -9
- package/lib/api/deployments/checks.js +0 -72
- package/lib/api/deployments/deploy-stack.d.ts +0 -155
- package/lib/api/deployments/deploy-stack.js +0 -478
- package/lib/api/deployments/deployment-method.d.ts +0 -24
- package/lib/api/deployments/deployment-method.js +0 -3
- package/lib/api/deployments/deployment-result.d.ts +0 -21
- package/lib/api/deployments/deployment-result.js +0 -10
- package/lib/api/deployments/deployments.d.ts +0 -296
- package/lib/api/deployments/deployments.js +0 -331
- package/lib/api/deployments/hotswap-deployments.d.ts +0 -17
- package/lib/api/deployments/hotswap-deployments.js +0 -441
- package/lib/api/deployments/index.d.ts +0 -4
- package/lib/api/deployments/index.js +0 -21
- package/lib/api/environment/environment-access.d.ts +0 -140
- package/lib/api/environment/environment-access.js +0 -202
- package/lib/api/environment/environment-resources.d.ts +0 -75
- package/lib/api/environment/environment-resources.js +0 -207
- package/lib/api/environment/index.d.ts +0 -3
- package/lib/api/environment/index.js +0 -20
- package/lib/api/environment/placeholders.d.ts +0 -10
- package/lib/api/environment/placeholders.js +0 -23
- package/lib/api/garbage-collection/garbage-collector.d.ts +0 -158
- package/lib/api/garbage-collection/garbage-collector.js +0 -599
- package/lib/api/garbage-collection/index.d.ts +0 -1
- package/lib/api/garbage-collection/progress-printer.d.ts +0 -23
- package/lib/api/garbage-collection/progress-printer.js +0 -70
- package/lib/api/garbage-collection/stack-refresh.d.ts +0 -49
- package/lib/api/garbage-collection/stack-refresh.js +0 -151
- package/lib/api/hotswap/appsync-mapping-templates.d.ts +0 -4
- package/lib/api/hotswap/appsync-mapping-templates.js +0 -162
- package/lib/api/hotswap/code-build-projects.d.ts +0 -4
- package/lib/api/hotswap/code-build-projects.js +0 -62
- package/lib/api/hotswap/common.d.ts +0 -89
- package/lib/api/hotswap/common.js +0 -128
- package/lib/api/hotswap/ecs-services.d.ts +0 -4
- package/lib/api/hotswap/ecs-services.js +0 -159
- package/lib/api/hotswap/lambda-functions.d.ts +0 -4
- package/lib/api/hotswap/lambda-functions.js +0 -297
- package/lib/api/hotswap/s3-bucket-deployments.d.ts +0 -5
- package/lib/api/hotswap/s3-bucket-deployments.js +0 -117
- package/lib/api/hotswap/stepfunctions-state-machines.d.ts +0 -4
- package/lib/api/hotswap/stepfunctions-state-machines.js +0 -48
- package/lib/api/logs/find-cloudwatch-logs.d.ts +0 -25
- package/lib/api/logs/find-cloudwatch-logs.js +0 -95
- package/lib/api/logs/index.d.ts +0 -2
- package/lib/api/logs/logs-monitor.d.ts +0 -76
- package/lib/api/logs/logs-monitor.js +0 -187
- package/lib/api/plugin/context-provider-plugin.d.ts +0 -6
- package/lib/api/plugin/context-provider-plugin.js +0 -7
- package/lib/api/plugin/index.d.ts +0 -3
- package/lib/api/plugin/index.js +0 -20
- package/lib/api/plugin/mode.d.ts +0 -4
- package/lib/api/plugin/mode.js +0 -9
- package/lib/api/plugin/plugin.d.ts +0 -63
- package/lib/api/plugin/plugin.js +0 -102
- package/lib/api/resource-import/importer.d.ts +0 -220
- package/lib/api/resource-import/importer.js +0 -331
- package/lib/api/resource-import/index.d.ts +0 -2
- package/lib/api/resource-import/migrator.d.ts +0 -26
- package/lib/api/resource-import/migrator.js +0 -71
- package/lib/api/stack-events/index.d.ts +0 -3
- package/lib/api/stack-events/index.js +0 -20
- package/lib/api/stack-events/stack-activity-monitor.d.ts +0 -100
- package/lib/api/stack-events/stack-activity-monitor.js +0 -142
- package/lib/api/stack-events/stack-event-poller.d.ts +0 -69
- package/lib/api/stack-events/stack-event-poller.js +0 -128
- package/lib/api/stack-events/stack-progress-monitor.d.ts +0 -48
- package/lib/api/stack-events/stack-progress-monitor.js +0 -94
- package/lib/api/stack-events/stack-status.d.ts +0 -42
- package/lib/api/stack-events/stack-status.js +0 -88
- package/lib/api/util/rwlock.d.ts +0 -65
- package/lib/api/util/rwlock.js +0 -179
- package/lib/api/work-graph/index.d.ts +0 -3
- package/lib/api/work-graph/index.js +0 -20
- package/lib/api/work-graph/work-graph-builder.d.ts +0 -34
- package/lib/api/work-graph/work-graph-builder.js +0 -168
- package/lib/api/work-graph/work-graph-types.d.ts +0 -50
- package/lib/api/work-graph/work-graph-types.js +0 -13
- package/lib/api/work-graph/work-graph.d.ts +0 -72
- package/lib/api/work-graph/work-graph.js +0 -346
- package/lib/cli/activity-printer/base.d.ts +0 -50
- package/lib/cli/activity-printer/base.js +0 -114
- package/lib/cli/activity-printer/current.d.ts +0 -26
- package/lib/cli/activity-printer/current.js +0 -118
- package/lib/cli/activity-printer/display.d.ts +0 -13
- package/lib/cli/activity-printer/display.js +0 -80
- package/lib/cli/activity-printer/history.d.ts +0 -32
- package/lib/cli/activity-printer/history.js +0 -108
- package/lib/cli/activity-printer/index.d.ts +0 -3
- package/lib/cli/activity-printer/index.js +0 -20
- package/lib/notices.d.ts +0 -203
- package/lib/notices.js +0 -411
|
@@ -1,207 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.NoBootstrapStackEnvironmentResources = exports.EnvironmentResources = exports.EnvironmentResourcesRegistry = void 0;
|
|
4
|
-
const api_1 = require("../../../../@aws-cdk/tmp-toolkit-helpers/src/api");
|
|
5
|
-
const private_1 = require("../../../../@aws-cdk/tmp-toolkit-helpers/src/api/io/private");
|
|
6
|
-
const notices_1 = require("../../notices");
|
|
7
|
-
const util_1 = require("../../util");
|
|
8
|
-
const toolkit_info_1 = require("../toolkit-info");
|
|
9
|
-
/**
|
|
10
|
-
* Registry class for `EnvironmentResources`.
|
|
11
|
-
*
|
|
12
|
-
* The state management of this class is a bit non-standard. We want to cache
|
|
13
|
-
* data related to toolkit stacks and SSM parameters, but we are not in charge
|
|
14
|
-
* of ensuring caching of SDKs. Since `EnvironmentResources` needs an SDK to
|
|
15
|
-
* function, we treat it as an ephemeral class, and store the actual cached data
|
|
16
|
-
* in `EnvironmentResourcesRegistry`.
|
|
17
|
-
*/
|
|
18
|
-
class EnvironmentResourcesRegistry {
|
|
19
|
-
constructor(toolkitStackName) {
|
|
20
|
-
this.toolkitStackName = toolkitStackName;
|
|
21
|
-
this.cache = new Map();
|
|
22
|
-
}
|
|
23
|
-
for(resolvedEnvironment, sdk, ioHelper) {
|
|
24
|
-
const key = `${resolvedEnvironment.account}:${resolvedEnvironment.region}`;
|
|
25
|
-
let envCache = this.cache.get(key);
|
|
26
|
-
if (!envCache) {
|
|
27
|
-
envCache = emptyCache();
|
|
28
|
-
this.cache.set(key, envCache);
|
|
29
|
-
}
|
|
30
|
-
return new EnvironmentResources(resolvedEnvironment, sdk, ioHelper, envCache, this.toolkitStackName);
|
|
31
|
-
}
|
|
32
|
-
}
|
|
33
|
-
exports.EnvironmentResourcesRegistry = EnvironmentResourcesRegistry;
|
|
34
|
-
/**
|
|
35
|
-
* Interface with the account and region we're deploying into
|
|
36
|
-
*
|
|
37
|
-
* Manages lookups for bootstrapped resources, falling back to the legacy "CDK Toolkit"
|
|
38
|
-
* original bootstrap stack if necessary.
|
|
39
|
-
*
|
|
40
|
-
* The state management of this class is a bit non-standard. We want to cache
|
|
41
|
-
* data related to toolkit stacks and SSM parameters, but we are not in charge
|
|
42
|
-
* of ensuring caching of SDKs. Since `EnvironmentResources` needs an SDK to
|
|
43
|
-
* function, we treat it as an ephemeral class, and store the actual cached data
|
|
44
|
-
* in `EnvironmentResourcesRegistry`.
|
|
45
|
-
*/
|
|
46
|
-
class EnvironmentResources {
|
|
47
|
-
constructor(environment, sdk, ioHelper, cache, toolkitStackName) {
|
|
48
|
-
this.environment = environment;
|
|
49
|
-
this.sdk = sdk;
|
|
50
|
-
this.ioHelper = ioHelper;
|
|
51
|
-
this.cache = cache;
|
|
52
|
-
this.toolkitStackName = toolkitStackName;
|
|
53
|
-
}
|
|
54
|
-
/**
|
|
55
|
-
* Look up the toolkit for a given environment, using a given SDK
|
|
56
|
-
*/
|
|
57
|
-
async lookupToolkit() {
|
|
58
|
-
if (!this.cache.toolkitInfo) {
|
|
59
|
-
this.cache.toolkitInfo = await toolkit_info_1.ToolkitInfo.lookup(this.environment, this.sdk, this.ioHelper, this.toolkitStackName);
|
|
60
|
-
}
|
|
61
|
-
return this.cache.toolkitInfo;
|
|
62
|
-
}
|
|
63
|
-
/**
|
|
64
|
-
* Validate that the bootstrap stack version matches or exceeds the expected version
|
|
65
|
-
*
|
|
66
|
-
* Use the SSM parameter name to read the version number if given, otherwise use the version
|
|
67
|
-
* discovered on the bootstrap stack.
|
|
68
|
-
*
|
|
69
|
-
* Pass in the SSM parameter name so we can cache the lookups an don't need to do the same
|
|
70
|
-
* lookup again and again for every artifact.
|
|
71
|
-
*/
|
|
72
|
-
async validateVersion(expectedVersion, ssmParameterName) {
|
|
73
|
-
if (expectedVersion === undefined) {
|
|
74
|
-
// No requirement
|
|
75
|
-
return;
|
|
76
|
-
}
|
|
77
|
-
const defExpectedVersion = expectedVersion;
|
|
78
|
-
if (ssmParameterName !== undefined) {
|
|
79
|
-
try {
|
|
80
|
-
doValidate(await this.versionFromSsmParameter(ssmParameterName), this.environment);
|
|
81
|
-
return;
|
|
82
|
-
}
|
|
83
|
-
catch (e) {
|
|
84
|
-
if (e.name !== 'AccessDeniedException') {
|
|
85
|
-
throw e;
|
|
86
|
-
}
|
|
87
|
-
// This is a fallback! The bootstrap template that goes along with this change introduces
|
|
88
|
-
// a new 'ssm:GetParameter' permission, but when run using the previous bootstrap template we
|
|
89
|
-
// won't have the permissions yet to read the version, so we won't be able to show the
|
|
90
|
-
// message telling the user they need to update! When we see an AccessDeniedException, fall
|
|
91
|
-
// back to the version we read from Stack Outputs; but ONLY if the version we discovered via
|
|
92
|
-
// outputs is legitimately an old version. If it's newer than that, something else must be broken,
|
|
93
|
-
// so let it fail as it would if we didn't have this fallback.
|
|
94
|
-
const bootstrapStack = await this.lookupToolkit();
|
|
95
|
-
if (bootstrapStack.found && bootstrapStack.version < BOOTSTRAP_TEMPLATE_VERSION_INTRODUCING_GETPARAMETER) {
|
|
96
|
-
await this.ioHelper.notify(private_1.IO.DEFAULT_TOOLKIT_WARN.msg(`Could not read SSM parameter ${ssmParameterName}: ${(0, util_1.formatErrorMessage)(e)}, falling back to version from ${bootstrapStack}`));
|
|
97
|
-
doValidate(bootstrapStack.version, this.environment);
|
|
98
|
-
return;
|
|
99
|
-
}
|
|
100
|
-
throw new api_1.ToolkitError(`This CDK deployment requires bootstrap stack version '${expectedVersion}', but during the confirmation via SSM parameter ${ssmParameterName} the following error occurred: ${e}`);
|
|
101
|
-
}
|
|
102
|
-
}
|
|
103
|
-
// No SSM parameter
|
|
104
|
-
const bootstrapStack = await this.lookupToolkit();
|
|
105
|
-
doValidate(bootstrapStack.version, this.environment);
|
|
106
|
-
function doValidate(version, environment) {
|
|
107
|
-
const notices = notices_1.Notices.get();
|
|
108
|
-
if (notices) {
|
|
109
|
-
// if `Notices` hasn't been initialized there is probably a good
|
|
110
|
-
// reason for it. handle gracefully.
|
|
111
|
-
notices.addBootstrappedEnvironment({ bootstrapStackVersion: version, environment });
|
|
112
|
-
}
|
|
113
|
-
if (defExpectedVersion > version) {
|
|
114
|
-
throw new api_1.ToolkitError(`This CDK deployment requires bootstrap stack version '${expectedVersion}', found '${version}'. Please run 'cdk bootstrap'.`);
|
|
115
|
-
}
|
|
116
|
-
}
|
|
117
|
-
}
|
|
118
|
-
/**
|
|
119
|
-
* Read a version from an SSM parameter, cached
|
|
120
|
-
*/
|
|
121
|
-
async versionFromSsmParameter(parameterName) {
|
|
122
|
-
const existing = this.cache.ssmParameters.get(parameterName);
|
|
123
|
-
if (existing !== undefined) {
|
|
124
|
-
return existing;
|
|
125
|
-
}
|
|
126
|
-
const ssm = this.sdk.ssm();
|
|
127
|
-
try {
|
|
128
|
-
const result = await ssm.getParameter({ Name: parameterName });
|
|
129
|
-
const asNumber = parseInt(`${result.Parameter?.Value}`, 10);
|
|
130
|
-
if (isNaN(asNumber)) {
|
|
131
|
-
throw new api_1.ToolkitError(`SSM parameter ${parameterName} not a number: ${result.Parameter?.Value}`);
|
|
132
|
-
}
|
|
133
|
-
this.cache.ssmParameters.set(parameterName, asNumber);
|
|
134
|
-
return asNumber;
|
|
135
|
-
}
|
|
136
|
-
catch (e) {
|
|
137
|
-
if (e.name === 'ParameterNotFound') {
|
|
138
|
-
throw new api_1.ToolkitError(`SSM parameter ${parameterName} not found. Has the environment been bootstrapped? Please run \'cdk bootstrap\' (see https://docs.aws.amazon.com/cdk/latest/guide/bootstrapping.html)`);
|
|
139
|
-
}
|
|
140
|
-
throw e;
|
|
141
|
-
}
|
|
142
|
-
}
|
|
143
|
-
async prepareEcrRepository(repositoryName) {
|
|
144
|
-
if (!this.sdk) {
|
|
145
|
-
throw new api_1.ToolkitError('ToolkitInfo needs to have been initialized with an sdk to call prepareEcrRepository');
|
|
146
|
-
}
|
|
147
|
-
const ecr = this.sdk.ecr();
|
|
148
|
-
// check if repo already exists
|
|
149
|
-
try {
|
|
150
|
-
await this.ioHelper.notify(private_1.IO.DEFAULT_TOOLKIT_DEBUG.msg(`${repositoryName}: checking if ECR repository already exists`));
|
|
151
|
-
const describeResponse = await ecr.describeRepositories({
|
|
152
|
-
repositoryNames: [repositoryName],
|
|
153
|
-
});
|
|
154
|
-
const existingRepositoryUri = describeResponse.repositories[0]?.repositoryUri;
|
|
155
|
-
if (existingRepositoryUri) {
|
|
156
|
-
return { repositoryUri: existingRepositoryUri };
|
|
157
|
-
}
|
|
158
|
-
}
|
|
159
|
-
catch (e) {
|
|
160
|
-
if (e.name !== 'RepositoryNotFoundException') {
|
|
161
|
-
throw e;
|
|
162
|
-
}
|
|
163
|
-
}
|
|
164
|
-
// create the repo (tag it so it will be easier to garbage collect in the future)
|
|
165
|
-
await this.ioHelper.notify(private_1.IO.DEFAULT_TOOLKIT_DEBUG.msg(`${repositoryName}: creating ECR repository`));
|
|
166
|
-
const assetTag = { Key: 'awscdk:asset', Value: 'true' };
|
|
167
|
-
const response = await ecr.createRepository({
|
|
168
|
-
repositoryName,
|
|
169
|
-
tags: [assetTag],
|
|
170
|
-
});
|
|
171
|
-
const repositoryUri = response.repository?.repositoryUri;
|
|
172
|
-
if (!repositoryUri) {
|
|
173
|
-
throw new api_1.ToolkitError(`CreateRepository did not return a repository URI for ${repositoryUri}`);
|
|
174
|
-
}
|
|
175
|
-
// configure image scanning on push (helps in identifying software vulnerabilities, no additional charge)
|
|
176
|
-
await this.ioHelper.notify(private_1.IO.DEFAULT_TOOLKIT_DEBUG.msg(`${repositoryName}: enable image scanning`));
|
|
177
|
-
await ecr.putImageScanningConfiguration({
|
|
178
|
-
repositoryName,
|
|
179
|
-
imageScanningConfiguration: { scanOnPush: true },
|
|
180
|
-
});
|
|
181
|
-
return { repositoryUri };
|
|
182
|
-
}
|
|
183
|
-
}
|
|
184
|
-
exports.EnvironmentResources = EnvironmentResources;
|
|
185
|
-
class NoBootstrapStackEnvironmentResources extends EnvironmentResources {
|
|
186
|
-
constructor(environment, sdk, ioHelper) {
|
|
187
|
-
super(environment, sdk, ioHelper, emptyCache());
|
|
188
|
-
}
|
|
189
|
-
/**
|
|
190
|
-
* Look up the toolkit for a given environment, using a given SDK
|
|
191
|
-
*/
|
|
192
|
-
async lookupToolkit() {
|
|
193
|
-
throw new api_1.ToolkitError('Trying to perform an operation that requires a bootstrap stack; you should not see this error, this is a bug in the CDK CLI.');
|
|
194
|
-
}
|
|
195
|
-
}
|
|
196
|
-
exports.NoBootstrapStackEnvironmentResources = NoBootstrapStackEnvironmentResources;
|
|
197
|
-
function emptyCache() {
|
|
198
|
-
return {
|
|
199
|
-
ssmParameters: new Map(),
|
|
200
|
-
toolkitInfo: undefined,
|
|
201
|
-
};
|
|
202
|
-
}
|
|
203
|
-
/**
|
|
204
|
-
* The bootstrap template version that introduced ssm:GetParameter
|
|
205
|
-
*/
|
|
206
|
-
const BOOTSTRAP_TEMPLATE_VERSION_INTRODUCING_GETPARAMETER = 5;
|
|
207
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZW52aXJvbm1lbnQtcmVzb3VyY2VzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiZW52aXJvbm1lbnQtcmVzb3VyY2VzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUNBLDBFQUFnRjtBQUNoRix5RkFBZ0c7QUFDaEcsMkNBQXdDO0FBQ3hDLHFDQUFnRDtBQUVoRCxrREFBc0U7QUFFdEU7Ozs7Ozs7O0dBUUc7QUFDSCxNQUFhLDRCQUE0QjtJQUd2QyxZQUE2QixnQkFBeUI7UUFBekIscUJBQWdCLEdBQWhCLGdCQUFnQixDQUFTO1FBRnJDLFVBQUssR0FBRyxJQUFJLEdBQUcsRUFBNEIsQ0FBQztJQUc3RCxDQUFDO0lBRU0sR0FBRyxDQUFDLG1CQUFnQyxFQUFFLEdBQVEsRUFBRSxRQUFrQjtRQUN2RSxNQUFNLEdBQUcsR0FBRyxHQUFHLG1CQUFtQixDQUFDLE9BQU8sSUFBSSxtQkFBbUIsQ0FBQyxNQUFNLEVBQUUsQ0FBQztRQUMzRSxJQUFJLFFBQVEsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUNuQyxJQUFJLENBQUMsUUFBUSxFQUFFLENBQUM7WUFDZCxRQUFRLEdBQUcsVUFBVSxFQUFFLENBQUM7WUFDeEIsSUFBSSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsR0FBRyxFQUFFLFFBQVEsQ0FBQyxDQUFDO1FBQ2hDLENBQUM7UUFDRCxPQUFPLElBQUksb0JBQW9CLENBQUMsbUJBQW1CLEVBQUUsR0FBRyxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsSUFBSSxDQUFDLGdCQUFnQixDQUFDLENBQUM7SUFDdkcsQ0FBQztDQUNGO0FBZkQsb0VBZUM7QUFFRDs7Ozs7Ozs7Ozs7R0FXRztBQUNILE1BQWEsb0JBQW9CO0lBQy9CLFlBQ2tCLFdBQXdCLEVBQ3ZCLEdBQVEsRUFDUixRQUFrQixFQUNsQixLQUF1QixFQUN2QixnQkFBeUI7UUFKMUIsZ0JBQVcsR0FBWCxXQUFXLENBQWE7UUFDdkIs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LG1EQUFtRCxHQUFHLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB0eXBlIHsgRW52aXJvbm1lbnQgfSBmcm9tICdAYXdzLWNkay9jeC1hcGknO1xuaW1wb3J0IHsgVG9vbGtpdEVycm9yIH0gZnJvbSAnLi4vLi4vLi4vLi4vQGF3cy1jZGsvdG1wLXRvb2xraXQtaGVscGVycy9zcmMvYXBpJztcbmltcG9ydCB7IElPLCB0eXBlIElvSGVscGVyIH0gZnJvbSAnLi4vLi4vLi4vLi4vQGF3cy1jZGsvdG1wLXRvb2xraXQtaGVscGVycy9zcmMvYXBpL2lvL3ByaXZhdGUnO1xuaW1wb3J0IHsgTm90aWNlcyB9IGZyb20gJy4uLy4uL25vdGljZXMnO1xuaW1wb3J0IHsgZm9ybWF0RXJyb3JNZXNzYWdlIH0gZnJvbSAnLi4vLi4vdXRpbCc7XG5pbXBvcnQgdHlwZSB7IFNESyB9IGZyb20gJy4uL2F3cy1hdXRoJztcbmltcG9ydCB7IHR5cGUgRWNyUmVwb3NpdG9yeUluZm8sIFRvb2xraXRJbmZvIH0gZnJvbSAnLi4vdG9vbGtpdC1pbmZvJztcblxuLyoqXG4gKiBSZWdpc3RyeSBjbGFzcyBmb3IgYEVudmlyb25tZW50UmVzb3VyY2VzYC5cbiAqXG4gKiBUaGUgc3RhdGUgbWFuYWdlbWVudCBvZiB0aGlzIGNsYXNzIGlzIGEgYml0IG5vbi1zdGFuZGFyZC4gV2Ugd2FudCB0byBjYWNoZVxuICogZGF0YSByZWxhdGVkIHRvIHRvb2xraXQgc3RhY2tzIGFuZCBTU00gcGFyYW1ldGVycywgYnV0IHdlIGFyZSBub3QgaW4gY2hhcmdlXG4gKiBvZiBlbnN1cmluZyBjYWNoaW5nIG9mIFNES3MuIFNpbmNlIGBFbnZpcm9ubWVudFJlc291cmNlc2AgbmVlZHMgYW4gU0RLIHRvXG4gKiBmdW5jdGlvbiwgd2UgdHJlYXQgaXQgYXMgYW4gZXBoZW1lcmFsIGNsYXNzLCBhbmQgc3RvcmUgdGhlIGFjdHVhbCBjYWNoZWQgZGF0YVxuICogaW4gYEVudmlyb25tZW50UmVzb3VyY2VzUmVnaXN0cnlgLlxuICovXG5leHBvcnQgY2xhc3MgRW52aXJvbm1lbnRSZXNvdXJjZXNSZWdpc3RyeSB7XG4gIHByaXZhdGUgcmVhZG9ubHkgY2FjaGUgPSBuZXcgTWFwPHN0cmluZywgRW52aXJvbm1lbnRDYWNoZT4oKTtcblxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIHJlYWRvbmx5IHRvb2xraXRTdGFja05hbWU/OiBzdHJpbmcpIHtcbiAgfVxuXG4gIHB1YmxpYyBmb3IocmVzb2x2ZWRFbnZpcm9ubWVudDogRW52aXJvbm1lbnQsIHNkazogU0RLLCBpb0hlbHBlcjogSW9IZWxwZXIpIHtcbiAgICBjb25zdCBrZXkgPSBgJHtyZXNvbHZlZEVudmlyb25tZW50LmFjY291bnR9OiR7cmVzb2x2ZWRFbnZpcm9ubWVudC5yZWdpb259YDtcbiAgICBsZXQgZW52Q2FjaGUgPSB0aGlzLmNhY2hlLmdldChrZXkpO1xuICAgIGlmICghZW52Q2FjaGUpIHtcbiAgICAgIGVudkNhY2hlID0gZW1wdHlDYWNoZSgpO1xuICAgICAgdGhpcy5jYWNoZS5zZXQoa2V5LCBlbnZDYWNoZSk7XG4gICAgfVxuICAgIHJldHVybiBuZXcgRW52aXJvbm1lbnRSZXNvdXJjZXMocmVzb2x2ZWRFbnZpcm9ubWVudCwgc2RrLCBpb0hlbHBlciwgZW52Q2FjaGUsIHRoaXMudG9vbGtpdFN0YWNrTmFtZSk7XG4gIH1cbn1cblxuLyoqXG4gKiBJbnRlcmZhY2Ugd2l0aCB0aGUgYWNjb3VudCBhbmQgcmVnaW9uIHdlJ3JlIGRlcGxveWluZyBpbnRvXG4gKlxuICogTWFuYWdlcyBsb29rdXBzIGZvciBib290c3RyYXBwZWQgcmVzb3VyY2VzLCBmYWxsaW5nIGJhY2sgdG8gdGhlIGxlZ2FjeSBcIkNESyBUb29sa2l0XCJcbiAqIG9yaWdpbmFsIGJvb3RzdHJhcCBzdGFjayBpZiBuZWNlc3NhcnkuXG4gKlxuICogVGhlIHN0YXRlIG1hbmFnZW1lbnQgb2YgdGhpcyBjbGFzcyBpcyBhIGJpdCBub24tc3RhbmRhcmQuIFdlIHdhbnQgdG8gY2FjaGVcbiAqIGRhdGEgcmVsYXRlZCB0byB0b29sa2l0IHN0YWNrcyBhbmQgU1NNIHBhcmFtZXRlcnMsIGJ1dCB3ZSBhcmUgbm90IGluIGNoYXJnZVxuICogb2YgZW5zdXJpbmcgY2FjaGluZyBvZiBTREtzLiBTaW5jZSBgRW52aXJvbm1lbnRSZXNvdXJjZXNgIG5lZWRzIGFuIFNESyB0b1xuICogZnVuY3Rpb24sIHdlIHRyZWF0IGl0IGFzIGFuIGVwaGVtZXJhbCBjbGFzcywgYW5kIHN0b3JlIHRoZSBhY3R1YWwgY2FjaGVkIGRhdGFcbiAqIGluIGBFbnZpcm9ubWVudFJlc291cmNlc1JlZ2lzdHJ5YC5cbiAqL1xuZXhwb3J0IGNsYXNzIEVudmlyb25tZW50UmVzb3VyY2VzIHtcbiAgY29uc3RydWN0b3IoXG4gICAgcHVibGljIHJlYWRvbmx5IGVudmlyb25tZW50OiBFbnZpcm9ubWVudCxcbiAgICBwcml2YXRlIHJlYWRvbmx5IHNkazogU0RLLFxuICAgIHByaXZhdGUgcmVhZG9ubHkgaW9IZWxwZXI6IElvSGVscGVyLFxuICAgIHByaXZhdGUgcmVhZG9ubHkgY2FjaGU6IEVudmlyb25tZW50Q2FjaGUsXG4gICAgcHJpdmF0ZSByZWFkb25seSB0b29sa2l0U3RhY2tOYW1lPzogc3RyaW5nLFxuICApIHtcbiAgfVxuXG4gIC8qKlxuICAgKiBMb29rIHVwIHRoZSB0b29sa2l0IGZvciBhIGdpdmVuIGVudmlyb25tZW50LCB1c2luZyBhIGdpdmVuIFNES1xuICAgKi9cbiAgcHVibGljIGFzeW5jIGxvb2t1cFRvb2xraXQoKSB7XG4gICAgaWYgKCF0aGlzLmNhY2hlLnRvb2xraXRJbmZvKSB7XG4gICAgICB0aGlzLmNhY2hlLnRvb2xraXRJbmZvID0gYXdhaXQgVG9vbGtpdEluZm8ubG9va3VwKHRoaXMuZW52aXJvbm1lbnQsIHRoaXMuc2RrLCB0aGlzLmlvSGVscGVyLCB0aGlzLnRvb2xraXRTdGFja05hbWUpO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy5jYWNoZS50b29sa2l0SW5mbztcbiAgfVxuXG4gIC8qKlxuICAgKiBWYWxpZGF0ZSB0aGF0IHRoZSBib290c3RyYXAgc3RhY2sgdmVyc2lvbiBtYXRjaGVzIG9yIGV4Y2VlZHMgdGhlIGV4cGVjdGVkIHZlcnNpb25cbiAgICpcbiAgICogVXNlIHRoZSBTU00gcGFyYW1ldGVyIG5hbWUgdG8gcmVhZCB0aGUgdmVyc2lvbiBudW1iZXIgaWYgZ2l2ZW4sIG90aGVyd2lzZSB1c2UgdGhlIHZlcnNpb25cbiAgICogZGlzY292ZXJlZCBvbiB0aGUgYm9vdHN0cmFwIHN0YWNrLlxuICAgKlxuICAgKiBQYXNzIGluIHRoZSBTU00gcGFyYW1ldGVyIG5hbWUgc28gd2UgY2FuIGNhY2hlIHRoZSBsb29rdXBzIGFuIGRvbid0IG5lZWQgdG8gZG8gdGhlIHNhbWVcbiAgICogbG9va3VwIGFnYWluIGFuZCBhZ2FpbiBmb3IgZXZlcnkgYXJ0aWZhY3QuXG4gICAqL1xuICBwdWJsaWMgYXN5bmMgdmFsaWRhdGVWZXJzaW9uKGV4cGVjdGVkVmVyc2lvbjogbnVtYmVyIHwgdW5kZWZpbmVkLCBzc21QYXJhbWV0ZXJOYW1lOiBzdHJpbmcgfCB1bmRlZmluZWQpIHtcbiAgICBpZiAoZXhwZWN0ZWRWZXJzaW9uID09PSB1bmRlZmluZWQpIHtcbiAgICAgIC8vIE5vIHJlcXVpcmVtZW50XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGNvbnN0IGRlZkV4cGVjdGVkVmVyc2lvbiA9IGV4cGVjdGVkVmVyc2lvbjtcblxuICAgIGlmIChzc21QYXJhbWV0ZXJOYW1lICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGRvVmFsaWRhdGUoYXdhaXQgdGhpcy52ZXJzaW9uRnJvbVNzbVBhcmFtZXRlcihzc21QYXJhbWV0ZXJOYW1lKSwgdGhpcy5lbnZpcm9ubWVudCk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH0gY2F0Y2ggKGU6IGFueSkge1xuICAgICAgICBpZiAoZS5uYW1lICE9PSAnQWNjZXNzRGVuaWVkRXhjZXB0aW9uJykge1xuICAgICAgICAgIHRocm93IGU7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBUaGlzIGlzIGEgZmFsbGJhY2shIFRoZSBib290c3RyYXAgdGVtcGxhdGUgdGhhdCBnb2VzIGFsb25nIHdpdGggdGhpcyBjaGFuZ2UgaW50cm9kdWNlc1xuICAgICAgICAvLyBhIG5ldyAnc3NtOkdldFBhcmFtZXRlcicgcGVybWlzc2lvbiwgYnV0IHdoZW4gcnVuIHVzaW5nIHRoZSBwcmV2aW91cyBib290c3RyYXAgdGVtcGxhdGUgd2VcbiAgICAgICAgLy8gd29uJ3QgaGF2ZSB0aGUgcGVybWlzc2lvbnMgeWV0IHRvIHJlYWQgdGhlIHZlcnNpb24sIHNvIHdlIHdvbid0IGJlIGFibGUgdG8gc2hvdyB0aGVcbiAgICAgICAgLy8gbWVzc2FnZSB0ZWxsaW5nIHRoZSB1c2VyIHRoZXkgbmVlZCB0byB1cGRhdGUhIFdoZW4gd2Ugc2VlIGFuIEFjY2Vzc0RlbmllZEV4Y2VwdGlvbiwgZmFsbFxuICAgICAgICAvLyBiYWNrIHRvIHRoZSB2ZXJzaW9uIHdlIHJlYWQgZnJvbSBTdGFjayBPdXRwdXRzOyBidXQgT05MWSBpZiB0aGUgdmVyc2lvbiB3ZSBkaXNjb3ZlcmVkIHZpYVxuICAgICAgICAvLyBvdXRwdXRzIGlzIGxlZ2l0aW1hdGVseSBhbiBvbGQgdmVyc2lvbi4gSWYgaXQncyBuZXdlciB0aGFuIHRoYXQsIHNvbWV0aGluZyBlbHNlIG11c3QgYmUgYnJva2VuLFxuICAgICAgICAvLyBzbyBsZXQgaXQgZmFpbCBhcyBpdCB3b3VsZCBpZiB3ZSBkaWRuJ3QgaGF2ZSB0aGlzIGZhbGxiYWNrLlxuICAgICAgICBjb25zdCBib290c3RyYXBTdGFjayA9IGF3YWl0IHRoaXMubG9va3VwVG9vbGtpdCgpO1xuICAgICAgICBpZiAoYm9vdHN0cmFwU3RhY2suZm91bmQgJiYgYm9vdHN0cmFwU3RhY2sudmVyc2lvbiA8IEJPT1RTVFJBUF9URU1QTEFURV9WRVJTSU9OX0lOVFJPRFVDSU5HX0dFVFBBUkFNRVRFUikge1xuICAgICAgICAgIGF3YWl0IHRoaXMuaW9IZWxwZXIubm90aWZ5KElPLkRFRkFVTFRfVE9PTEtJVF9XQVJOLm1zZyhcbiAgICAgICAgICAgIGBDb3VsZCBub3QgcmVhZCBTU00gcGFyYW1ldGVyICR7c3NtUGFyYW1ldGVyTmFtZX06ICR7Zm9ybWF0RXJyb3JNZXNzYWdlKGUpfSwgZmFsbGluZyBiYWNrIHRvIHZlcnNpb24gZnJvbSAke2Jvb3RzdHJhcFN0YWNrfWAsXG4gICAgICAgICAgKSk7XG4gICAgICAgICAgZG9WYWxpZGF0ZShib290c3RyYXBTdGFjay52ZXJzaW9uLCB0aGlzLmVudmlyb25tZW50KTtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICB0aHJvdyBuZXcgVG9vbGtpdEVycm9yKFxuICAgICAgICAgIGBUaGlzIENESyBkZXBsb3ltZW50IHJlcXVpcmVzIGJvb3RzdHJhcCBzdGFjayB2ZXJzaW9uICcke2V4cGVjdGVkVmVyc2lvbn0nLCBidXQgZHVyaW5nIHRoZSBjb25maXJtYXRpb24gdmlhIFNTTSBwYXJhbWV0ZXIgJHtzc21QYXJhbWV0ZXJOYW1lfSB0aGUgZm9sbG93aW5nIGVycm9yIG9jY3VycmVkOiAke2V9YCxcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBObyBTU00gcGFyYW1ldGVyXG4gICAgY29uc3QgYm9vdHN0cmFwU3RhY2sgPSBhd2FpdCB0aGlzLmxvb2t1cFRvb2xraXQoKTtcbiAgICBkb1ZhbGlkYXRlKGJvb3RzdHJhcFN0YWNrLnZlcnNpb24sIHRoaXMuZW52aXJvbm1lbnQpO1xuXG4gICAgZnVuY3Rpb24gZG9WYWxpZGF0ZSh2ZXJzaW9uOiBudW1iZXIsIGVudmlyb25tZW50OiBFbnZpcm9ubWVudCkge1xuICAgICAgY29uc3Qgbm90aWNlcyA9IE5vdGljZXMuZ2V0KCk7XG4gICAgICBpZiAobm90aWNlcykge1xuICAgICAgICAvLyBpZiBgTm90aWNlc2AgaGFzbid0IGJlZW4gaW5pdGlhbGl6ZWQgdGhlcmUgaXMgcHJvYmFibHkgYSBnb29kXG4gICAgICAgIC8vIHJlYXNvbiBmb3IgaXQuIGhhbmRsZSBncmFjZWZ1bGx5LlxuICAgICAgICBub3RpY2VzLmFkZEJvb3RzdHJhcHBlZEVudmlyb25tZW50KHsgYm9vdHN0cmFwU3RhY2tWZXJzaW9uOiB2ZXJzaW9uLCBlbnZpcm9ubWVudCB9KTtcbiAgICAgIH1cbiAgICAgIGlmIChkZWZFeHBlY3RlZFZlcnNpb24gPiB2ZXJzaW9uKSB7XG4gICAgICAgIHRocm93IG5ldyBUb29sa2l0RXJyb3IoXG4gICAgICAgICAgYFRoaXMgQ0RLIGRlcGxveW1lbnQgcmVxdWlyZXMgYm9vdHN0cmFwIHN0YWNrIHZlcnNpb24gJyR7ZXhwZWN0ZWRWZXJzaW9ufScsIGZvdW5kICcke3ZlcnNpb259Jy4gUGxlYXNlIHJ1biAnY2RrIGJvb3RzdHJhcCcuYCxcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogUmVhZCBhIHZlcnNpb24gZnJvbSBhbiBTU00gcGFyYW1ldGVyLCBjYWNoZWRcbiAgICovXG4gIHB1YmxpYyBhc3luYyB2ZXJzaW9uRnJvbVNzbVBhcmFtZXRlcihwYXJhbWV0ZXJOYW1lOiBzdHJpbmcpOiBQcm9taXNlPG51bWJlcj4ge1xuICAgIGNvbnN0IGV4aXN0aW5nID0gdGhpcy5jYWNoZS5zc21QYXJhbWV0ZXJzLmdldChwYXJhbWV0ZXJOYW1lKTtcbiAgICBpZiAoZXhpc3RpbmcgIT09IHVuZGVmaW5lZCkge1xuICAgICAgcmV0dXJuIGV4aXN0aW5nO1xuICAgIH1cblxuICAgIGNvbnN0IHNzbSA9IHRoaXMuc2RrLnNzbSgpO1xuXG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHNzbS5nZXRQYXJhbWV0ZXIoeyBOYW1lOiBwYXJhbWV0ZXJOYW1lIH0pO1xuXG4gICAgICBjb25zdCBhc051bWJlciA9IHBhcnNlSW50KGAke3Jlc3VsdC5QYXJhbWV0ZXI/LlZhbHVlfWAsIDEwKTtcbiAgICAgIGlmIChpc05hTihhc051bWJlcikpIHtcbiAgICAgICAgdGhyb3cgbmV3IFRvb2xraXRFcnJvcihgU1NNIHBhcmFtZXRlciAke3BhcmFtZXRlck5hbWV9IG5vdCBhIG51bWJlcjogJHtyZXN1bHQuUGFyYW1ldGVyPy5WYWx1ZX1gKTtcbiAgICAgIH1cblxuICAgICAgdGhpcy5jYWNoZS5zc21QYXJhbWV0ZXJzLnNldChwYXJhbWV0ZXJOYW1lLCBhc051bWJlcik7XG4gICAgICByZXR1cm4gYXNOdW1iZXI7XG4gICAgfSBjYXRjaCAoZTogYW55KSB7XG4gICAgICBpZiAoZS5uYW1lID09PSAnUGFyYW1ldGVyTm90Rm91bmQnKSB7XG4gICAgICAgIHRocm93IG5ldyBUb29sa2l0RXJyb3IoXG4gICAgICAgICAgYFNTTSBwYXJhbWV0ZXIgJHtwYXJhbWV0ZXJOYW1lfSBub3QgZm91bmQuIEhhcyB0aGUgZW52aXJvbm1lbnQgYmVlbiBib290c3RyYXBwZWQ/IFBsZWFzZSBydW4gXFwnY2RrIGJvb3RzdHJhcFxcJyAoc2VlIGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9jZGsvbGF0ZXN0L2d1aWRlL2Jvb3RzdHJhcHBpbmcuaHRtbClgLFxuICAgICAgICApO1xuICAgICAgfVxuICAgICAgdGhyb3cgZTtcbiAgICB9XG4gIH1cblxuICBwdWJsaWMgYXN5bmMgcHJlcGFyZUVjclJlcG9zaXRvcnkocmVwb3NpdG9yeU5hbWU6IHN0cmluZyk6IFByb21pc2U8RWNyUmVwb3NpdG9yeUluZm8+IHtcbiAgICBpZiAoIXRoaXMuc2RrKSB7XG4gICAgICB0aHJvdyBuZXcgVG9vbGtpdEVycm9yKCdUb29sa2l0SW5mbyBuZWVkcyB0byBoYXZlIGJlZW4gaW5pdGlhbGl6ZWQgd2l0aCBhbiBzZGsgdG8gY2FsbCBwcmVwYXJlRWNyUmVwb3NpdG9yeScpO1xuICAgIH1cbiAgICBjb25zdCBlY3IgPSB0aGlzLnNkay5lY3IoKTtcblxuICAgIC8vIGNoZWNrIGlmIHJlcG8gYWxyZWFkeSBleGlzdHNcbiAgICB0cnkge1xuICAgICAgYXdhaXQgdGhpcy5pb0hlbHBlci5ub3RpZnkoSU8uREVGQVVMVF9UT09MS0lUX0RFQlVHLm1zZyhgJHtyZXBvc2l0b3J5TmFtZX06IGNoZWNraW5nIGlmIEVDUiByZXBvc2l0b3J5IGFscmVhZHkgZXhpc3RzYCkpO1xuICAgICAgY29uc3QgZGVzY3JpYmVSZXNwb25zZSA9IGF3YWl0IGVjci5kZXNjcmliZVJlcG9zaXRvcmllcyh7XG4gICAgICAgIHJlcG9zaXRvcnlOYW1lczogW3JlcG9zaXRvcnlOYW1lXSxcbiAgICAgIH0pO1xuICAgICAgY29uc3QgZXhpc3RpbmdSZXBvc2l0b3J5VXJpID0gZGVzY3JpYmVSZXNwb25zZS5yZXBvc2l0b3JpZXMhWzBdPy5yZXBvc2l0b3J5VXJpO1xuICAgICAgaWYgKGV4aXN0aW5nUmVwb3NpdG9yeVVyaSkge1xuICAgICAgICByZXR1cm4geyByZXBvc2l0b3J5VXJpOiBleGlzdGluZ1JlcG9zaXRvcnlVcmkgfTtcbiAgICAgIH1cbiAgICB9IGNhdGNoIChlOiBhbnkpIHtcbiAgICAgIGlmIChlLm5hbWUgIT09ICdSZXBvc2l0b3J5Tm90Rm91bmRFeGNlcHRpb24nKSB7XG4gICAgICAgIHRocm93IGU7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gY3JlYXRlIHRoZSByZXBvICh0YWcgaXQgc28gaXQgd2lsbCBiZSBlYXNpZXIgdG8gZ2FyYmFnZSBjb2xsZWN0IGluIHRoZSBmdXR1cmUpXG4gICAgYXdhaXQgdGhpcy5pb0hlbHBlci5ub3RpZnkoSU8uREVGQVVMVF9UT09MS0lUX0RFQlVHLm1zZyhgJHtyZXBvc2l0b3J5TmFtZX06IGNyZWF0aW5nIEVDUiByZXBvc2l0b3J5YCkpO1xuICAgIGNvbnN0IGFzc2V0VGFnID0geyBLZXk6ICdhd3NjZGs6YXNzZXQnLCBWYWx1ZTogJ3RydWUnIH07XG4gICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBlY3IuY3JlYXRlUmVwb3NpdG9yeSh7XG4gICAgICByZXBvc2l0b3J5TmFtZSxcbiAgICAgIHRhZ3M6IFthc3NldFRhZ10sXG4gICAgfSk7XG4gICAgY29uc3QgcmVwb3NpdG9yeVVyaSA9IHJlc3BvbnNlLnJlcG9zaXRvcnk/LnJlcG9zaXRvcnlVcmk7XG4gICAgaWYgKCFyZXBvc2l0b3J5VXJpKSB7XG4gICAgICB0aHJvdyBuZXcgVG9vbGtpdEVycm9yKGBDcmVhdGVSZXBvc2l0b3J5IGRpZCBub3QgcmV0dXJuIGEgcmVwb3NpdG9yeSBVUkkgZm9yICR7cmVwb3NpdG9yeVVyaX1gKTtcbiAgICB9XG5cbiAgICAvLyBjb25maWd1cmUgaW1hZ2Ugc2Nhbm5pbmcgb24gcHVzaCAoaGVscHMgaW4gaWRlbnRpZnlpbmcgc29mdHdhcmUgdnVsbmVyYWJpbGl0aWVzLCBubyBhZGRpdGlvbmFsIGNoYXJnZSlcbiAgICBhd2FpdCB0aGlzLmlvSGVscGVyLm5vdGlmeShJTy5ERUZBVUxUX1RPT0xLSVRfREVCVUcubXNnKGAke3JlcG9zaXRvcnlOYW1lfTogZW5hYmxlIGltYWdlIHNjYW5uaW5nYCkpO1xuICAgIGF3YWl0IGVjci5wdXRJbWFnZVNjYW5uaW5nQ29uZmlndXJhdGlvbih7XG4gICAgICByZXBvc2l0b3J5TmFtZSxcbiAgICAgIGltYWdlU2Nhbm5pbmdDb25maWd1cmF0aW9uOiB7IHNjYW5PblB1c2g6IHRydWUgfSxcbiAgICB9KTtcblxuICAgIHJldHVybiB7IHJlcG9zaXRvcnlVcmkgfTtcbiAgfVxufVxuXG5leHBvcnQgY2xhc3MgTm9Cb290c3RyYXBTdGFja0Vudmlyb25tZW50UmVzb3VyY2VzIGV4dGVuZHMgRW52aXJvbm1lbnRSZXNvdXJjZXMge1xuICBjb25zdHJ1Y3RvcihlbnZpcm9ubWVudDogRW52aXJvbm1lbnQsIHNkazogU0RLLCBpb0hlbHBlcjogSW9IZWxwZXIpIHtcbiAgICBzdXBlcihlbnZpcm9ubWVudCwgc2RrLCBpb0hlbHBlciwgZW1wdHlDYWNoZSgpKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBMb29rIHVwIHRoZSB0b29sa2l0IGZvciBhIGdpdmVuIGVudmlyb25tZW50LCB1c2luZyBhIGdpdmVuIFNES1xuICAgKi9cbiAgcHVibGljIGFzeW5jIGxvb2t1cFRvb2xraXQoKTogUHJvbWlzZTxUb29sa2l0SW5mbz4ge1xuICAgIHRocm93IG5ldyBUb29sa2l0RXJyb3IoXG4gICAgICAnVHJ5aW5nIHRvIHBlcmZvcm0gYW4gb3BlcmF0aW9uIHRoYXQgcmVxdWlyZXMgYSBib290c3RyYXAgc3RhY2s7IHlvdSBzaG91bGQgbm90IHNlZSB0aGlzIGVycm9yLCB0aGlzIGlzIGEgYnVnIGluIHRoZSBDREsgQ0xJLicsXG4gICAgKTtcbiAgfVxufVxuXG4vKipcbiAqIERhdGEgdGhhdCBpcyBjYWNoZWQgb24gYSBwZXItZW52aXJvbm1lbnQgbGV2ZWxcbiAqXG4gKiBUaGlzIGNhY2hlIG1heSBiZSBzaGFyZWQgYmV0d2VlbiBkaWZmZXJlbnQgaW5zdGFuY2VzIG9mIHRoZSBgRW52aXJvbm1lbnRSZXNvdXJjZXNgIGNsYXNzLlxuICovXG5pbnRlcmZhY2UgRW52aXJvbm1lbnRDYWNoZSB7XG4gIHJlYWRvbmx5IHNzbVBhcmFtZXRlcnM6IE1hcDxzdHJpbmcsIG51bWJlcj47XG4gIHRvb2xraXRJbmZvPzogVG9vbGtpdEluZm87XG59XG5cbmZ1bmN0aW9uIGVtcHR5Q2FjaGUoKTogRW52aXJvbm1lbnRDYWNoZSB7XG4gIHJldHVybiB7XG4gICAgc3NtUGFyYW1ldGVyczogbmV3IE1hcCgpLFxuICAgIHRvb2xraXRJbmZvOiB1bmRlZmluZWQsXG4gIH07XG59XG5cbi8qKlxuICogVGhlIGJvb3RzdHJhcCB0ZW1wbGF0ZSB2ZXJzaW9uIHRoYXQgaW50cm9kdWNlZCBzc206R2V0UGFyYW1ldGVyXG4gKi9cbmNvbnN0IEJPT1RTVFJBUF9URU1QTEFURV9WRVJTSU9OX0lOVFJPRFVDSU5HX0dFVFBBUkFNRVRFUiA9IDU7XG4iXX0=
|
|
@@ -1,20 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
-
if (k2 === undefined) k2 = k;
|
|
4
|
-
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
-
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
-
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
-
}
|
|
8
|
-
Object.defineProperty(o, k2, desc);
|
|
9
|
-
}) : (function(o, m, k, k2) {
|
|
10
|
-
if (k2 === undefined) k2 = k;
|
|
11
|
-
o[k2] = m[k];
|
|
12
|
-
}));
|
|
13
|
-
var __exportStar = (this && this.__exportStar) || function(m, exports) {
|
|
14
|
-
for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
|
|
15
|
-
};
|
|
16
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
17
|
-
__exportStar(require("./environment-access"), exports);
|
|
18
|
-
__exportStar(require("./environment-resources"), exports);
|
|
19
|
-
__exportStar(require("./placeholders"), exports);
|
|
20
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJpbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7O0FBQUEsdURBQXFDO0FBQ3JDLDBEQUF3QztBQUN4QyxpREFBK0IiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgKiBmcm9tICcuL2Vudmlyb25tZW50LWFjY2Vzcyc7XG5leHBvcnQgKiBmcm9tICcuL2Vudmlyb25tZW50LXJlc291cmNlcyc7XG5leHBvcnQgKiBmcm9tICcuL3BsYWNlaG9sZGVycyc7XG4iXX0=
|
|
@@ -1,10 +0,0 @@
|
|
|
1
|
-
import { type Environment } from '@aws-cdk/cx-api';
|
|
2
|
-
import type { Branded } from '../../util';
|
|
3
|
-
import type { SdkProvider } from '../aws-auth/sdk-provider';
|
|
4
|
-
/**
|
|
5
|
-
* Replace the {ACCOUNT} and {REGION} placeholders in all strings found in a complex object.
|
|
6
|
-
*/
|
|
7
|
-
export declare function replaceEnvPlaceholders<A extends Record<string, string | undefined>>(object: A, env: Environment, sdkProvider: SdkProvider): Promise<{
|
|
8
|
-
[k in keyof A]: StringWithoutPlaceholders | undefined;
|
|
9
|
-
}>;
|
|
10
|
-
export type StringWithoutPlaceholders = Branded<string, 'NoPlaceholders'>;
|
|
@@ -1,23 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.replaceEnvPlaceholders = replaceEnvPlaceholders;
|
|
4
|
-
const cx_api_1 = require("@aws-cdk/cx-api");
|
|
5
|
-
const mode_1 = require("../plugin/mode");
|
|
6
|
-
/**
|
|
7
|
-
* Replace the {ACCOUNT} and {REGION} placeholders in all strings found in a complex object.
|
|
8
|
-
*/
|
|
9
|
-
async function replaceEnvPlaceholders(object, env, sdkProvider) {
|
|
10
|
-
return cx_api_1.EnvironmentPlaceholders.replaceAsync(object, {
|
|
11
|
-
accountId: () => Promise.resolve(env.account),
|
|
12
|
-
region: () => Promise.resolve(env.region),
|
|
13
|
-
partition: async () => {
|
|
14
|
-
// There's no good way to get the partition!
|
|
15
|
-
// We should have had it already, except we don't.
|
|
16
|
-
//
|
|
17
|
-
// Best we can do is ask the "base credentials" for this environment for their partition. Cross-partition
|
|
18
|
-
// AssumeRole'ing will never work anyway, so this answer won't be wrong (it will just be slow!)
|
|
19
|
-
return (await sdkProvider.baseCredentialsPartition(env, mode_1.Mode.ForReading)) ?? 'aws';
|
|
20
|
-
},
|
|
21
|
-
});
|
|
22
|
-
}
|
|
23
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGxhY2Vob2xkZXJzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsicGxhY2Vob2xkZXJzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7O0FBUUEsd0RBaUJDO0FBekJELDRDQUE0RTtBQUc1RSx5Q0FBc0M7QUFFdEM7O0dBRUc7QUFDSSxLQUFLLFVBQVUsc0JBQXNCLENBQzFDLE1BQVMsRUFDVCxHQUFnQixFQUNoQixXQUF3QjtJQUV4QixPQUFPLGdDQUF1QixDQUFDLFlBQVksQ0FBQyxNQUFNLEVBQUU7UUFDbEQsU0FBUyxFQUFFLEdBQUcsRUFBRSxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLE9BQU8sQ0FBQztRQUM3QyxNQUFNLEVBQUUsR0FBRyxFQUFFLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDO1FBQ3pDLFNBQVMsRUFBRSxLQUFLLElBQUksRUFBRTtZQUNwQiw0Q0FBNEM7WUFDNUMsa0RBQWtEO1lBQ2xELEVBQUU7WUFDRix5R0FBeUc7WUFDekcsK0ZBQStGO1lBQy9GLE9BQU8sQ0FBQyxNQUFNLFdBQVcsQ0FBQyx3QkFBd0IsQ0FBQyxHQUFHLEVBQUUsV0FBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDLElBQUksS0FBSyxDQUFDO1FBQ3JGLENBQUM7S0FDRixDQUFDLENBQUM7QUFDTCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgdHlwZSBFbnZpcm9ubWVudCwgRW52aXJvbm1lbnRQbGFjZWhvbGRlcnMgfSBmcm9tICdAYXdzLWNkay9jeC1hcGknO1xuaW1wb3J0IHR5cGUgeyBCcmFuZGVkIH0gZnJvbSAnLi4vLi4vdXRpbCc7XG5pbXBvcnQgdHlwZSB7IFNka1Byb3ZpZGVyIH0gZnJvbSAnLi4vYXdzLWF1dGgvc2RrLXByb3ZpZGVyJztcbmltcG9ydCB7IE1vZGUgfSBmcm9tICcuLi9wbHVnaW4vbW9kZSc7XG5cbi8qKlxuICogUmVwbGFjZSB0aGUge0FDQ09VTlR9IGFuZCB7UkVHSU9OfSBwbGFjZWhvbGRlcnMgaW4gYWxsIHN0cmluZ3MgZm91bmQgaW4gYSBjb21wbGV4IG9iamVjdC5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHJlcGxhY2VFbnZQbGFjZWhvbGRlcnM8QSBleHRlbmRzIFJlY29yZDxzdHJpbmcsIHN0cmluZyB8IHVuZGVmaW5lZD4+KFxuICBvYmplY3Q6IEEsXG4gIGVudjogRW52aXJvbm1lbnQsXG4gIHNka1Byb3ZpZGVyOiBTZGtQcm92aWRlcixcbik6IFByb21pc2U8e1trIGluIGtleW9mIEFdOiBTdHJpbmdXaXRob3V0UGxhY2Vob2xkZXJzIHwgdW5kZWZpbmVkfT4ge1xuICByZXR1cm4gRW52aXJvbm1lbnRQbGFjZWhvbGRlcnMucmVwbGFjZUFzeW5jKG9iamVjdCwge1xuICAgIGFjY291bnRJZDogKCkgPT4gUHJvbWlzZS5yZXNvbHZlKGVudi5hY2NvdW50KSxcbiAgICByZWdpb246ICgpID0+IFByb21pc2UucmVzb2x2ZShlbnYucmVnaW9uKSxcbiAgICBwYXJ0aXRpb246IGFzeW5jICgpID0+IHtcbiAgICAgIC8vIFRoZXJlJ3Mgbm8gZ29vZCB3YXkgdG8gZ2V0IHRoZSBwYXJ0aXRpb24hXG4gICAgICAvLyBXZSBzaG91bGQgaGF2ZSBoYWQgaXQgYWxyZWFkeSwgZXhjZXB0IHdlIGRvbid0LlxuICAgICAgLy9cbiAgICAgIC8vIEJlc3Qgd2UgY2FuIGRvIGlzIGFzayB0aGUgXCJiYXNlIGNyZWRlbnRpYWxzXCIgZm9yIHRoaXMgZW52aXJvbm1lbnQgZm9yIHRoZWlyIHBhcnRpdGlvbi4gQ3Jvc3MtcGFydGl0aW9uXG4gICAgICAvLyBBc3N1bWVSb2xlJ2luZyB3aWxsIG5ldmVyIHdvcmsgYW55d2F5LCBzbyB0aGlzIGFuc3dlciB3b24ndCBiZSB3cm9uZyAoaXQgd2lsbCBqdXN0IGJlIHNsb3chKVxuICAgICAgcmV0dXJuIChhd2FpdCBzZGtQcm92aWRlci5iYXNlQ3JlZGVudGlhbHNQYXJ0aXRpb24oZW52LCBNb2RlLkZvclJlYWRpbmcpKSA/PyAnYXdzJztcbiAgICB9LFxuICB9KTtcbn1cblxuZXhwb3J0IHR5cGUgU3RyaW5nV2l0aG91dFBsYWNlaG9sZGVycyA9IEJyYW5kZWQ8c3RyaW5nLCAnTm9QbGFjZWhvbGRlcnMnPjtcbiJdfQ==
|
|
@@ -1,158 +0,0 @@
|
|
|
1
|
-
import type * as cxapi from '@aws-cdk/cx-api';
|
|
2
|
-
import type { Tag } from '@aws-sdk/client-s3';
|
|
3
|
-
import type { IS3Client, SDK, SdkProvider } from '../aws-auth';
|
|
4
|
-
import { ActiveAssetCache, BackgroundStackRefresh } from './stack-refresh';
|
|
5
|
-
import { type IoHelper } from '../../../../@aws-cdk/tmp-toolkit-helpers/src/api/io/private';
|
|
6
|
-
export declare const S3_ISOLATED_TAG = "aws-cdk:isolated";
|
|
7
|
-
export declare const ECR_ISOLATED_TAG = "aws-cdk.isolated";
|
|
8
|
-
export type GcAsset = ImageAsset | ObjectAsset;
|
|
9
|
-
/**
|
|
10
|
-
* An image asset that lives in the bootstrapped ECR Repository
|
|
11
|
-
*/
|
|
12
|
-
export declare class ImageAsset {
|
|
13
|
-
readonly digest: string;
|
|
14
|
-
readonly size: number;
|
|
15
|
-
readonly tags: string[];
|
|
16
|
-
readonly manifest: string;
|
|
17
|
-
constructor(digest: string, size: number, tags: string[], manifest: string);
|
|
18
|
-
private getTag;
|
|
19
|
-
private hasTag;
|
|
20
|
-
hasIsolatedTag(): boolean;
|
|
21
|
-
getIsolatedTag(): string | undefined;
|
|
22
|
-
isolatedTagBefore(date: Date): boolean;
|
|
23
|
-
buildImageTag(inc: number): string;
|
|
24
|
-
dateIsolated(): string | undefined;
|
|
25
|
-
}
|
|
26
|
-
/**
|
|
27
|
-
* An object asset that lives in the bootstrapped S3 Bucket
|
|
28
|
-
*/
|
|
29
|
-
export declare class ObjectAsset {
|
|
30
|
-
private readonly bucket;
|
|
31
|
-
readonly key: string;
|
|
32
|
-
readonly size: number;
|
|
33
|
-
private cached_tags;
|
|
34
|
-
constructor(bucket: string, key: string, size: number);
|
|
35
|
-
fileName(): string;
|
|
36
|
-
allTags(s3: IS3Client): Promise<Tag[] | undefined>;
|
|
37
|
-
private getTag;
|
|
38
|
-
private hasTag;
|
|
39
|
-
hasIsolatedTag(): boolean;
|
|
40
|
-
isolatedTagBefore(date: Date): boolean;
|
|
41
|
-
}
|
|
42
|
-
/**
|
|
43
|
-
* Props for the Garbage Collector
|
|
44
|
-
*/
|
|
45
|
-
interface GarbageCollectorProps {
|
|
46
|
-
/**
|
|
47
|
-
* The action to perform. Specify this if you want to perform a truncated set
|
|
48
|
-
* of actions available.
|
|
49
|
-
*/
|
|
50
|
-
readonly action: 'print' | 'tag' | 'delete-tagged' | 'full';
|
|
51
|
-
/**
|
|
52
|
-
* The type of asset to garbage collect.
|
|
53
|
-
*/
|
|
54
|
-
readonly type: 's3' | 'ecr' | 'all';
|
|
55
|
-
/**
|
|
56
|
-
* The days an asset must be in isolation before being actually deleted.
|
|
57
|
-
*/
|
|
58
|
-
readonly rollbackBufferDays: number;
|
|
59
|
-
/**
|
|
60
|
-
* Refuse deletion of any assets younger than this number of days.
|
|
61
|
-
*/
|
|
62
|
-
readonly createdBufferDays: number;
|
|
63
|
-
/**
|
|
64
|
-
* The environment to deploy this stack in
|
|
65
|
-
*
|
|
66
|
-
* The environment on the stack artifact may be unresolved, this one
|
|
67
|
-
* must be resolved.
|
|
68
|
-
*/
|
|
69
|
-
readonly resolvedEnvironment: cxapi.Environment;
|
|
70
|
-
/**
|
|
71
|
-
* SDK provider (seeded with default credentials)
|
|
72
|
-
*
|
|
73
|
-
* Will be used to make SDK calls to CloudFormation, S3, and ECR.
|
|
74
|
-
*/
|
|
75
|
-
readonly sdkProvider: SdkProvider;
|
|
76
|
-
/**
|
|
77
|
-
* Used to send messages.
|
|
78
|
-
*/
|
|
79
|
-
readonly ioHelper: IoHelper;
|
|
80
|
-
/**
|
|
81
|
-
* The name of the bootstrap stack to look for.
|
|
82
|
-
*
|
|
83
|
-
* @default DEFAULT_TOOLKIT_STACK_NAME
|
|
84
|
-
*/
|
|
85
|
-
readonly bootstrapStackName?: string;
|
|
86
|
-
/**
|
|
87
|
-
* Confirm with the user before actual deletion happens
|
|
88
|
-
*
|
|
89
|
-
* @default true
|
|
90
|
-
*/
|
|
91
|
-
readonly confirm?: boolean;
|
|
92
|
-
}
|
|
93
|
-
/**
|
|
94
|
-
* A class to facilitate Garbage Collection of S3 and ECR assets
|
|
95
|
-
*/
|
|
96
|
-
export declare class GarbageCollector {
|
|
97
|
-
readonly props: GarbageCollectorProps;
|
|
98
|
-
private garbageCollectS3Assets;
|
|
99
|
-
private garbageCollectEcrAssets;
|
|
100
|
-
private permissionToDelete;
|
|
101
|
-
private permissionToTag;
|
|
102
|
-
private bootstrapStackName;
|
|
103
|
-
private confirm;
|
|
104
|
-
private ioHelper;
|
|
105
|
-
constructor(props: GarbageCollectorProps);
|
|
106
|
-
/**
|
|
107
|
-
* Perform garbage collection on the resolved environment.
|
|
108
|
-
*/
|
|
109
|
-
garbageCollect(): Promise<void>;
|
|
110
|
-
/**
|
|
111
|
-
* Perform garbage collection on ECR assets
|
|
112
|
-
*/
|
|
113
|
-
garbageCollectEcr(sdk: SDK, activeAssets: ActiveAssetCache, backgroundStackRefresh: BackgroundStackRefresh): Promise<void>;
|
|
114
|
-
/**
|
|
115
|
-
* Perform garbage collection on S3 assets
|
|
116
|
-
*/
|
|
117
|
-
garbageCollectS3(sdk: SDK, activeAssets: ActiveAssetCache, backgroundStackRefresh: BackgroundStackRefresh): Promise<void>;
|
|
118
|
-
private parallelReadAllTags;
|
|
119
|
-
/**
|
|
120
|
-
* Untag assets that were previously tagged, but now currently referenced.
|
|
121
|
-
* Since this is treated as an implementation detail, we do not print the results in the printer.
|
|
122
|
-
*/
|
|
123
|
-
private parallelUntagEcr;
|
|
124
|
-
/**
|
|
125
|
-
* Untag assets that were previously tagged, but now currently referenced.
|
|
126
|
-
* Since this is treated as an implementation detail, we do not print the results in the printer.
|
|
127
|
-
*/
|
|
128
|
-
private parallelUntagS3;
|
|
129
|
-
/**
|
|
130
|
-
* Tag images in parallel using p-limit
|
|
131
|
-
*/
|
|
132
|
-
private parallelTagEcr;
|
|
133
|
-
/**
|
|
134
|
-
* Tag objects in parallel using p-limit. The putObjectTagging API does not
|
|
135
|
-
* support batch tagging so we must handle the parallelism client-side.
|
|
136
|
-
*/
|
|
137
|
-
private parallelTagS3;
|
|
138
|
-
/**
|
|
139
|
-
* Delete images in parallel. The deleteImage API supports batches of 100.
|
|
140
|
-
*/
|
|
141
|
-
private parallelDeleteEcr;
|
|
142
|
-
/**
|
|
143
|
-
* Delete objects in parallel. The deleteObjects API supports batches of 1000.
|
|
144
|
-
*/
|
|
145
|
-
private parallelDeleteS3;
|
|
146
|
-
private bootstrapBucketName;
|
|
147
|
-
private bootstrapRepositoryName;
|
|
148
|
-
private bootstrapQualifier;
|
|
149
|
-
private numObjectsInBucket;
|
|
150
|
-
private numImagesInRepo;
|
|
151
|
-
private readRepoInBatches;
|
|
152
|
-
/**
|
|
153
|
-
* Generator function that reads objects from the S3 Bucket in batches.
|
|
154
|
-
*/
|
|
155
|
-
private readBucketInBatches;
|
|
156
|
-
private confirmationPrompt;
|
|
157
|
-
}
|
|
158
|
-
export {};
|