awscfn 1.2.0 → 1.4.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 +5 -0
- package/bin/awscfn +28 -9
- package/dist/cli/loadTemplateAndParams.d.ts +1 -1
- package/dist/cli/loadTemplateAndParams.d.ts.map +1 -1
- package/dist/cli/loadTemplateAndParams.js +11 -2
- package/dist/cli/loadTemplateAndParams.js.map +1 -1
- package/dist/cli/loadTemplateAndParams.spec.d.ts +2 -0
- package/dist/cli/loadTemplateAndParams.spec.d.ts.map +1 -0
- package/dist/cli/loadTemplateAndParams.spec.js +14 -0
- package/dist/cli/loadTemplateAndParams.spec.js.map +1 -0
- package/dist/cli/parseParamOverrides.d.ts +9 -0
- package/dist/cli/parseParamOverrides.d.ts.map +1 -0
- package/dist/cli/parseParamOverrides.js +26 -0
- package/dist/cli/parseParamOverrides.js.map +1 -0
- package/dist/cli/parseParamOverrides.spec.d.ts +2 -0
- package/dist/cli/parseParamOverrides.spec.d.ts.map +1 -0
- package/dist/cli/parseParamOverrides.spec.js +16 -0
- package/dist/cli/parseParamOverrides.spec.js.map +1 -0
- package/dist/createStack.d.ts +1 -1
- package/dist/createStack.d.ts.map +1 -1
- package/dist/createStack.js +2 -2
- package/dist/createStack.js.map +1 -1
- package/dist/previewStack.d.ts +1 -1
- package/dist/previewStack.d.ts.map +1 -1
- package/dist/previewStack.js +2 -2
- package/dist/previewStack.js.map +1 -1
- package/dist/updateStack.d.ts +1 -1
- package/dist/updateStack.d.ts.map +1 -1
- package/dist/updateStack.js +10 -3
- package/dist/updateStack.js.map +1 -1
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -115,6 +115,7 @@ awscfn create-stack -n <STACK_NAME> -t <TEMPLATE_FILE> -p <PARAMS_FILE>
|
|
|
115
115
|
| `--name`, `-n` | Stack name |
|
|
116
116
|
| `--template`, `-t` | CloudFormation template file |
|
|
117
117
|
| `--params`, `-p` | Parameters file (YAML) |
|
|
118
|
+
| `--set`, `-s` | Override one or more parameters (repeatable `Key=Value`) |
|
|
118
119
|
|
|
119
120
|
### ⬆️ update-stack
|
|
120
121
|
|
|
@@ -127,6 +128,9 @@ awscfn update-stack -n <STACK_NAME> -t <TEMPLATE_FILE> -p <PARAMS_FILE>
|
|
|
127
128
|
| `--name`, `-n` | Stack name |
|
|
128
129
|
| `--template`, `-t` | CloudFormation template file |
|
|
129
130
|
| `--params`, `-p` | Parameters file (YAML) |
|
|
131
|
+
| `--set`, `-s` | Override one or more parameters (repeatable `Key=Value`). You can omit `--params` to override only specific values on an existing stack. |
|
|
132
|
+
| `--create` | If the stack doesn't exist, create it (instead of erroring) |
|
|
133
|
+
| `-m` | Shorthand for `--create` |
|
|
130
134
|
|
|
131
135
|
If there are no changes to apply, the command succeeds gracefully:
|
|
132
136
|
```
|
|
@@ -146,6 +150,7 @@ awscfn preview-stack -n <STACK_NAME> -t <TEMPLATE_FILE> -p <PARAMS_FILE>
|
|
|
146
150
|
| `--name`, `-n` | Stack name |
|
|
147
151
|
| `--template`, `-t` | CloudFormation template file |
|
|
148
152
|
| `--params`, `-p` | Parameters file (YAML) |
|
|
153
|
+
| `--set`, `-s` | Override one or more parameters (repeatable `Key=Value`) |
|
|
149
154
|
|
|
150
155
|
Use this to review Add / Modify / Remove actions (and replacement hints) before running **`create-stack`** or **`update-stack`**.
|
|
151
156
|
|
package/bin/awscfn
CHANGED
|
@@ -91,6 +91,25 @@ const templateOpt = {
|
|
|
91
91
|
const paramsOpt = {
|
|
92
92
|
params: { type: 'string', alias: 'p', describe: 'Parameters file (YAML). Optional; omit to use template defaults.', demandOption: false },
|
|
93
93
|
};
|
|
94
|
+
const setOpt = {
|
|
95
|
+
set: {
|
|
96
|
+
type: 'string',
|
|
97
|
+
alias: 's',
|
|
98
|
+
array: true,
|
|
99
|
+
describe: 'Override one or more parameters (repeatable). Format: Key=Value',
|
|
100
|
+
demandOption: false,
|
|
101
|
+
default: [],
|
|
102
|
+
},
|
|
103
|
+
};
|
|
104
|
+
const createIfMissingOpt = {
|
|
105
|
+
create: {
|
|
106
|
+
type: 'boolean',
|
|
107
|
+
alias: 'm',
|
|
108
|
+
describe: 'Create the stack if it does not exist (update-stack only)',
|
|
109
|
+
demandOption: false,
|
|
110
|
+
default: false,
|
|
111
|
+
},
|
|
112
|
+
};
|
|
94
113
|
const confirmOpt = {
|
|
95
114
|
confirm: { type: 'string', alias: 'c', describe: 'Repeat stack name to confirm deletion', demandOption: true },
|
|
96
115
|
};
|
|
@@ -132,9 +151,9 @@ yargs
|
|
|
132
151
|
.command(
|
|
133
152
|
'create-stack',
|
|
134
153
|
'Create a CloudFormation stack',
|
|
135
|
-
(cmd) => cmd.options({ ...nameOpt, ...templateOpt, ...paramsOpt }),
|
|
136
|
-
({ name, template, params }) => {
|
|
137
|
-
runCommand(() => createStack(name, template, params));
|
|
154
|
+
(cmd) => cmd.options({ ...nameOpt, ...templateOpt, ...paramsOpt, ...setOpt }),
|
|
155
|
+
({ name, template, params, set }) => {
|
|
156
|
+
runCommand(() => createStack(name, template, params, require('../dist/cli/parseParamOverrides').parseParamOverrides(set).overrides));
|
|
138
157
|
}
|
|
139
158
|
)
|
|
140
159
|
.command(
|
|
@@ -156,17 +175,17 @@ yargs
|
|
|
156
175
|
.command(
|
|
157
176
|
'update-stack',
|
|
158
177
|
'Update a CloudFormation stack',
|
|
159
|
-
(cmd) => cmd.options({ ...nameOpt, ...templateOpt, ...paramsOpt }),
|
|
160
|
-
({ name, template, params }) => {
|
|
161
|
-
runCommand(() => updateStack(name, template, params));
|
|
178
|
+
(cmd) => cmd.options({ ...nameOpt, ...templateOpt, ...paramsOpt, ...createIfMissingOpt, ...setOpt }),
|
|
179
|
+
({ name, template, params, create, set }) => {
|
|
180
|
+
runCommand(() => updateStack(name, template, params, Boolean(create), require('../dist/cli/parseParamOverrides').parseParamOverrides(set).overrides));
|
|
162
181
|
}
|
|
163
182
|
)
|
|
164
183
|
.command(
|
|
165
184
|
'preview-stack',
|
|
166
185
|
'Preview changes without deploying (change set only)',
|
|
167
|
-
(cmd) => cmd.options({ ...nameOpt, ...templateOpt, ...paramsOpt }),
|
|
168
|
-
({ name, template, params }) => {
|
|
169
|
-
runCommand(() => previewStack(name, template, params));
|
|
186
|
+
(cmd) => cmd.options({ ...nameOpt, ...templateOpt, ...paramsOpt, ...setOpt }),
|
|
187
|
+
({ name, template, params, set }) => {
|
|
188
|
+
runCommand(() => previewStack(name, template, params, require('../dist/cli/parseParamOverrides').parseParamOverrides(set).overrides));
|
|
170
189
|
}
|
|
171
190
|
)
|
|
172
191
|
.completion(
|
|
@@ -6,5 +6,5 @@ export interface TemplateAndParams {
|
|
|
6
6
|
* Load template from file and optional params. If no params file is given, uses {}.
|
|
7
7
|
* CloudFormation will error if a required parameter has no default.
|
|
8
8
|
*/
|
|
9
|
-
export declare function loadTemplateAndParams(templatePath: string, paramsPath: string | undefined): Promise<TemplateAndParams>;
|
|
9
|
+
export declare function loadTemplateAndParams(templatePath: string, paramsPath: string | undefined, overrides?: Record<string, string>): Promise<TemplateAndParams>;
|
|
10
10
|
//# sourceMappingURL=loadTemplateAndParams.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"loadTemplateAndParams.d.ts","sourceRoot":"","sources":["../../src/cli/loadTemplateAndParams.ts"],"names":[],"mappings":"AAIA,MAAM,WAAW,iBAAiB;IAC9B,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACnC;AAED;;;GAGG;AACH,wBAAsB,qBAAqB,CACvC,YAAY,EAAE,MAAM,EACpB,UAAU,EAAE,MAAM,GAAG,SAAS,
|
|
1
|
+
{"version":3,"file":"loadTemplateAndParams.d.ts","sourceRoot":"","sources":["../../src/cli/loadTemplateAndParams.ts"],"names":[],"mappings":"AAIA,MAAM,WAAW,iBAAiB;IAC9B,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACnC;AAED;;;GAGG;AACH,wBAAsB,qBAAqB,CACvC,YAAY,EAAE,MAAM,EACpB,UAAU,EAAE,MAAM,GAAG,SAAS,EAC9B,SAAS,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GACnC,OAAO,CAAC,iBAAiB,CAAC,CAwB5B"}
|
|
@@ -8,11 +8,20 @@ const templateHasParameters_1 = require("../lib/templateHasParameters");
|
|
|
8
8
|
* Load template from file and optional params. If no params file is given, uses {}.
|
|
9
9
|
* CloudFormation will error if a required parameter has no default.
|
|
10
10
|
*/
|
|
11
|
-
async function loadTemplateAndParams(templatePath, paramsPath) {
|
|
11
|
+
async function loadTemplateAndParams(templatePath, paramsPath, overrides) {
|
|
12
12
|
const template = (0, node_fs_1.readFileSync)(templatePath, 'utf-8');
|
|
13
|
-
const
|
|
13
|
+
const hasParameters = (0, templateHasParameters_1.templateHasParameters)(template);
|
|
14
|
+
const fileParams = (paramsPath && (0, templateHasParameters_1.templateHasParameters)(template))
|
|
14
15
|
? (await (0, getParamsFromFile_1.getParamsFromFile)(paramsPath))
|
|
15
16
|
: {};
|
|
17
|
+
if (!hasParameters && overrides && Object.keys(overrides).length > 0) {
|
|
18
|
+
throw new Error('Template does not declare Parameters, but --set was provided. '
|
|
19
|
+
+ 'Remove --set or add a Parameters section to the template.');
|
|
20
|
+
}
|
|
21
|
+
const params = {
|
|
22
|
+
...fileParams,
|
|
23
|
+
...(overrides ?? {}),
|
|
24
|
+
};
|
|
16
25
|
return { template, params };
|
|
17
26
|
}
|
|
18
27
|
//# sourceMappingURL=loadTemplateAndParams.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"loadTemplateAndParams.js","sourceRoot":"","sources":["../../src/cli/loadTemplateAndParams.ts"],"names":[],"mappings":";;AAaA,
|
|
1
|
+
{"version":3,"file":"loadTemplateAndParams.js","sourceRoot":"","sources":["../../src/cli/loadTemplateAndParams.ts"],"names":[],"mappings":";;AAaA,sDA4BC;AAzCD,qCAAqC;AACrC,gEAA2D;AAC3D,wEAAmE;AAOnE;;;GAGG;AACI,KAAK,UAAU,qBAAqB,CACvC,YAAoB,EACpB,UAA8B,EAC9B,SAAkC;IAGlC,MAAM,QAAQ,GAAG,IAAA,sBAAY,EAAC,YAAY,EAAE,OAAO,CAAC,CAAC;IACrD,MAAM,aAAa,GAAG,IAAA,6CAAqB,EAAC,QAAQ,CAAC,CAAC;IACtD,MAAM,UAAU,GAAG,CAAC,UAAU,IAAI,IAAA,6CAAqB,EAAC,QAAQ,CAAC,CAAC;QAC9D,CAAC,CAAE,CAAC,MAAM,IAAA,qCAAiB,EAAC,UAAU,CAAC,CAA6B;QACpE,CAAC,CAAC,EAAE,CAAC;IAET,IAAI,CAAC,aAAa,IAAI,SAAS,IAAI,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAEnE,MAAM,IAAI,KAAK,CACX,gEAAgE;cAC9D,2DAA2D,CAChE,CAAC;IAEN,CAAC;IAED,MAAM,MAAM,GAAG;QACX,GAAG,UAAU;QACb,GAAG,CAAC,SAAS,IAAI,EAAE,CAAC;KACvB,CAAC;IAEF,OAAO,EAAC,QAAQ,EAAE,MAAM,EAAC,CAAC;AAE9B,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"loadTemplateAndParams.spec.d.ts","sourceRoot":"","sources":["../../src/cli/loadTemplateAndParams.spec.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
const kizu_1 = require("kizu");
|
|
4
|
+
const node_fs_1 = require("node:fs");
|
|
5
|
+
const node_os_1 = require("node:os");
|
|
6
|
+
const node_path_1 = require("node:path");
|
|
7
|
+
const loadTemplateAndParams_1 = require("./loadTemplateAndParams");
|
|
8
|
+
(0, kizu_1.test)('loadTemplateAndParams throws when template has no Parameters but overrides provided', async (assert) => {
|
|
9
|
+
const dir = (0, node_fs_1.mkdtempSync)((0, node_path_1.join)((0, node_os_1.tmpdir)(), 'awscfn-'));
|
|
10
|
+
const templatePath = (0, node_path_1.join)(dir, 'template.yaml');
|
|
11
|
+
(0, node_fs_1.writeFileSync)(templatePath, 'Resources: {}', 'utf-8');
|
|
12
|
+
await assert.throws(() => (0, loadTemplateAndParams_1.loadTemplateAndParams)(templatePath, undefined, { Foo: 'bar' }), /does not declare Parameters/i);
|
|
13
|
+
});
|
|
14
|
+
//# sourceMappingURL=loadTemplateAndParams.spec.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"loadTemplateAndParams.spec.js","sourceRoot":"","sources":["../../src/cli/loadTemplateAndParams.spec.ts"],"names":[],"mappings":";;AAAA,+BAA0B;AAC1B,qCAAmD;AACnD,qCAA+B;AAC/B,yCAA+B;AAC/B,mEAA8D;AAE9D,IAAA,WAAI,EAAC,qFAAqF,EAAE,KAAK,EAAE,MAAM,EAAE,EAAE;IAEzG,MAAM,GAAG,GAAG,IAAA,qBAAW,EAAC,IAAA,gBAAI,EAAC,IAAA,gBAAM,GAAE,EAAE,SAAS,CAAC,CAAC,CAAC;IACnD,MAAM,YAAY,GAAG,IAAA,gBAAI,EAAC,GAAG,EAAE,eAAe,CAAC,CAAC;IAEhD,IAAA,uBAAa,EAAC,YAAY,EAAE,eAAe,EAAE,OAAO,CAAC,CAAC;IAEtD,MAAM,MAAM,CAAC,MAAM,CACf,GAAG,EAAE,CAAC,IAAA,6CAAqB,EAAC,YAAY,EAAE,SAAS,EAAE,EAAC,GAAG,EAAE,KAAK,EAAC,CAAC,EAClE,8BAA8B,CACjC,CAAC;AAEN,CAAC,CAAC,CAAC"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
export interface ParamOverrideParseResult {
|
|
2
|
+
overrides: Record<string, string>;
|
|
3
|
+
}
|
|
4
|
+
/**
|
|
5
|
+
* Parse repeatable CLI overrides like:
|
|
6
|
+
* ["Foo=bar", "Env=prod"]
|
|
7
|
+
*/
|
|
8
|
+
export declare function parseParamOverrides(values: unknown[] | undefined): ParamOverrideParseResult;
|
|
9
|
+
//# sourceMappingURL=parseParamOverrides.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"parseParamOverrides.d.ts","sourceRoot":"","sources":["../../src/cli/parseParamOverrides.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,wBAAwB;IACrC,SAAS,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CACrC;AAED;;;GAGG;AACH,wBAAgB,mBAAmB,CAAC,MAAM,EAAE,OAAO,EAAE,GAAG,SAAS,GAAG,wBAAwB,CAyB3F"}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.parseParamOverrides = parseParamOverrides;
|
|
4
|
+
/**
|
|
5
|
+
* Parse repeatable CLI overrides like:
|
|
6
|
+
* ["Foo=bar", "Env=prod"]
|
|
7
|
+
*/
|
|
8
|
+
function parseParamOverrides(values) {
|
|
9
|
+
const overrides = {};
|
|
10
|
+
if (!values)
|
|
11
|
+
return { overrides };
|
|
12
|
+
for (const raw of values) {
|
|
13
|
+
if (typeof raw !== 'string')
|
|
14
|
+
throw new Error(`Invalid --set value: ${String(raw)}`);
|
|
15
|
+
const idx = raw.indexOf('=');
|
|
16
|
+
if (idx <= 0)
|
|
17
|
+
throw new Error(`Invalid --set value (expected Key=Value): ${raw}`);
|
|
18
|
+
const key = raw.slice(0, idx).trim();
|
|
19
|
+
const value = raw.slice(idx + 1);
|
|
20
|
+
if (!key)
|
|
21
|
+
throw new Error(`Invalid --set value (empty key): ${raw}`);
|
|
22
|
+
overrides[key] = value;
|
|
23
|
+
}
|
|
24
|
+
return { overrides };
|
|
25
|
+
}
|
|
26
|
+
//# sourceMappingURL=parseParamOverrides.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"parseParamOverrides.js","sourceRoot":"","sources":["../../src/cli/parseParamOverrides.ts"],"names":[],"mappings":";;AAQA,kDAyBC;AA7BD;;;GAGG;AACH,SAAgB,mBAAmB,CAAC,MAA6B;IAE7D,MAAM,SAAS,GAA2B,EAAE,CAAC;IAE7C,IAAI,CAAC,MAAM;QAAE,OAAO,EAAC,SAAS,EAAC,CAAC;IAEhC,KAAK,MAAM,GAAG,IAAI,MAAM,EAAE,CAAC;QAEvB,IAAI,OAAO,GAAG,KAAK,QAAQ;YAAE,MAAM,IAAI,KAAK,CAAC,wBAAwB,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QAEpF,MAAM,GAAG,GAAG,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;QAE7B,IAAI,GAAG,IAAI,CAAC;YAAE,MAAM,IAAI,KAAK,CAAC,6CAA6C,GAAG,EAAE,CAAC,CAAC;QAElF,MAAM,GAAG,GAAG,GAAG,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC;QACrC,MAAM,KAAK,GAAG,GAAG,CAAC,KAAK,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC;QAEjC,IAAI,CAAC,GAAG;YAAE,MAAM,IAAI,KAAK,CAAC,oCAAoC,GAAG,EAAE,CAAC,CAAC;QAErE,SAAS,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC;IAE3B,CAAC;IAED,OAAO,EAAC,SAAS,EAAC,CAAC;AAEvB,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"parseParamOverrides.spec.d.ts","sourceRoot":"","sources":["../../src/cli/parseParamOverrides.spec.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
const kizu_1 = require("kizu");
|
|
4
|
+
const parseParamOverrides_1 = require("./parseParamOverrides");
|
|
5
|
+
(0, kizu_1.test)('parseParamOverrides parses repeated Key=Value pairs', (assert) => {
|
|
6
|
+
const { overrides } = (0, parseParamOverrides_1.parseParamOverrides)(['Foo=bar', 'Env=prod']);
|
|
7
|
+
assert.equal(overrides, { Foo: 'bar', Env: 'prod' });
|
|
8
|
+
});
|
|
9
|
+
(0, kizu_1.test)('parseParamOverrides last value wins for duplicate keys', (assert) => {
|
|
10
|
+
const { overrides } = (0, parseParamOverrides_1.parseParamOverrides)(['Foo=bar', 'Foo=baz']);
|
|
11
|
+
assert.equal(overrides, { Foo: 'baz' });
|
|
12
|
+
});
|
|
13
|
+
(0, kizu_1.test)('parseParamOverrides throws on invalid format', (assert) => {
|
|
14
|
+
assert.throws(() => (0, parseParamOverrides_1.parseParamOverrides)(['NoEquals']), /expected Key=Value/);
|
|
15
|
+
});
|
|
16
|
+
//# sourceMappingURL=parseParamOverrides.spec.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"parseParamOverrides.spec.js","sourceRoot":"","sources":["../../src/cli/parseParamOverrides.spec.ts"],"names":[],"mappings":";;AAAA,+BAA0B;AAC1B,+DAA0D;AAE1D,IAAA,WAAI,EAAC,qDAAqD,EAAE,CAAC,MAAM,EAAE,EAAE;IAEnE,MAAM,EAAC,SAAS,EAAC,GAAG,IAAA,yCAAmB,EAAC,CAAC,SAAS,EAAE,UAAU,CAAC,CAAC,CAAC;IAEjE,MAAM,CAAC,KAAK,CAAC,SAAS,EAAE,EAAC,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,MAAM,EAAC,CAAC,CAAC;AAEvD,CAAC,CAAC,CAAC;AAEH,IAAA,WAAI,EAAC,wDAAwD,EAAE,CAAC,MAAM,EAAE,EAAE;IAEtE,MAAM,EAAC,SAAS,EAAC,GAAG,IAAA,yCAAmB,EAAC,CAAC,SAAS,EAAE,SAAS,CAAC,CAAC,CAAC;IAEhE,MAAM,CAAC,KAAK,CAAC,SAAS,EAAE,EAAC,GAAG,EAAE,KAAK,EAAC,CAAC,CAAC;AAE1C,CAAC,CAAC,CAAC;AAEH,IAAA,WAAI,EAAC,8CAA8C,EAAE,CAAC,MAAM,EAAE,EAAE;IAE5D,MAAM,CAAC,MAAM,CAAC,GAAG,EAAE,CAAC,IAAA,yCAAmB,EAAC,CAAC,UAAU,CAAQ,CAAC,EAAE,oBAAoB,CAAC,CAAC;AAExF,CAAC,CAAC,CAAC"}
|
package/dist/createStack.d.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* CLI handler: create a new CloudFormation stack.
|
|
3
3
|
*/
|
|
4
|
-
export declare function createStack(stackName: string, templatePath: string, paramsPath?: string): Promise<void>;
|
|
4
|
+
export declare function createStack(stackName: string, templatePath: string, paramsPath?: string, overrides?: Record<string, string>): Promise<void>;
|
|
5
5
|
//# sourceMappingURL=createStack.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"createStack.d.ts","sourceRoot":"","sources":["../src/createStack.ts"],"names":[],"mappings":"AAKA;;GAEG;AACH,wBAAsB,WAAW,CAC7B,SAAS,EAAE,MAAM,EACjB,YAAY,EAAE,MAAM,EACpB,UAAU,CAAC,EAAE,MAAM,
|
|
1
|
+
{"version":3,"file":"createStack.d.ts","sourceRoot":"","sources":["../src/createStack.ts"],"names":[],"mappings":"AAKA;;GAEG;AACH,wBAAsB,WAAW,CAC7B,SAAS,EAAE,MAAM,EACjB,YAAY,EAAE,MAAM,EACpB,UAAU,CAAC,EAAE,MAAM,EACnB,SAAS,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GACnC,OAAO,CAAC,IAAI,CAAC,CAmBf"}
|
package/dist/createStack.js
CHANGED
|
@@ -41,9 +41,9 @@ const log_1 = require("./cli/log");
|
|
|
41
41
|
/**
|
|
42
42
|
* CLI handler: create a new CloudFormation stack.
|
|
43
43
|
*/
|
|
44
|
-
async function createStack(stackName, templatePath, paramsPath) {
|
|
44
|
+
async function createStack(stackName, templatePath, paramsPath, overrides) {
|
|
45
45
|
cfn.initCloudFormationClient();
|
|
46
|
-
const { template, params } = await (0, loadTemplateAndParams_1.loadTemplateAndParams)(templatePath, paramsPath);
|
|
46
|
+
const { template, params } = await (0, loadTemplateAndParams_1.loadTemplateAndParams)(templatePath, paramsPath, overrides);
|
|
47
47
|
const existing = await cfn.getStackByName(stackName);
|
|
48
48
|
if (existing) {
|
|
49
49
|
throw new Error('stack already exists, try update command');
|
package/dist/createStack.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"createStack.js","sourceRoot":"","sources":["../src/createStack.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAQA,
|
|
1
|
+
{"version":3,"file":"createStack.js","sourceRoot":"","sources":["../src/createStack.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAQA,kCAwBC;AAhCD,+CAAiC;AACjC,uEAAkE;AAClE,6DAA8D;AAC9D,mCAAyC;AAEzC;;GAEG;AACI,KAAK,UAAU,WAAW,CAC7B,SAAiB,EACjB,YAAoB,EACpB,UAAmB,EACnB,SAAkC;IAGlC,GAAG,CAAC,wBAAwB,EAAE,CAAC;IAE/B,MAAM,EAAC,QAAQ,EAAE,MAAM,EAAC,GAAG,MAAM,IAAA,6CAAqB,EAAC,YAAY,EAAE,UAAU,EAAE,SAAS,CAAC,CAAC;IAC5F,MAAM,QAAQ,GAAG,MAAM,GAAG,CAAC,cAAc,CAAC,SAAS,CAAC,CAAC;IAErD,IAAI,QAAQ,EAAE,CAAC;QAEX,MAAM,IAAI,KAAK,CAAC,0CAA0C,CAAC,CAAC;IAEhE,CAAC;IAED,OAAO,CAAC,GAAG,CAAC,wBAAwB,CAAC,CAAC;IACtC,MAAM,IAAA,yCAAsB,EAAC,QAAQ,CAAC,CAAC;IAEvC,IAAA,oBAAc,EAAC,SAAS,EAAE,UAAU,EAAE,MAAM,CAAC,CAAC;IAC9C,MAAM,GAAG,CAAC,WAAW,CAAC,SAAS,EAAE,EAAC,IAAI,EAAE,QAAQ,EAAE,MAAM,EAAC,CAAC,CAAC;AAE/D,CAAC"}
|
package/dist/previewStack.d.ts
CHANGED
|
@@ -2,5 +2,5 @@
|
|
|
2
2
|
* CLI: preview stack changes without executing (build change set, print table, delete change set).
|
|
3
3
|
* CREATE vs UPDATE matches whether the stack already exists.
|
|
4
4
|
*/
|
|
5
|
-
export declare function previewStack(stackName: string, templatePath: string, paramsPath?: string): Promise<void>;
|
|
5
|
+
export declare function previewStack(stackName: string, templatePath: string, paramsPath?: string, overrides?: Record<string, string>): Promise<void>;
|
|
6
6
|
//# sourceMappingURL=previewStack.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"previewStack.d.ts","sourceRoot":"","sources":["../src/previewStack.ts"],"names":[],"mappings":"AAMA;;;GAGG;AACH,wBAAsB,YAAY,CAC9B,SAAS,EAAE,MAAM,EACjB,YAAY,EAAE,MAAM,EACpB,UAAU,CAAC,EAAE,MAAM,
|
|
1
|
+
{"version":3,"file":"previewStack.d.ts","sourceRoot":"","sources":["../src/previewStack.ts"],"names":[],"mappings":"AAMA;;;GAGG;AACH,wBAAsB,YAAY,CAC9B,SAAS,EAAE,MAAM,EACjB,YAAY,EAAE,MAAM,EACpB,UAAU,CAAC,EAAE,MAAM,EACnB,SAAS,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GACnC,OAAO,CAAC,IAAI,CAAC,CA6Bf"}
|
package/dist/previewStack.js
CHANGED
|
@@ -43,9 +43,9 @@ const output_1 = require("./lib/output");
|
|
|
43
43
|
* CLI: preview stack changes without executing (build change set, print table, delete change set).
|
|
44
44
|
* CREATE vs UPDATE matches whether the stack already exists.
|
|
45
45
|
*/
|
|
46
|
-
async function previewStack(stackName, templatePath, paramsPath) {
|
|
46
|
+
async function previewStack(stackName, templatePath, paramsPath, overrides) {
|
|
47
47
|
cfn.initCloudFormationClient();
|
|
48
|
-
const { template, params } = await (0, loadTemplateAndParams_1.loadTemplateAndParams)(templatePath, paramsPath);
|
|
48
|
+
const { template, params } = await (0, loadTemplateAndParams_1.loadTemplateAndParams)(templatePath, paramsPath, overrides);
|
|
49
49
|
const existing = await cfn.getStackByName(stackName);
|
|
50
50
|
if (existing?.StackStatus === client_cloudformation_1.StackStatus.ROLLBACK_COMPLETE) {
|
|
51
51
|
(0, output_1.warn)(`Stack ${stackName} is in ROLLBACK_COMPLETE; update-stack would delete and recreate it. `
|
package/dist/previewStack.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"previewStack.js","sourceRoot":"","sources":["../src/previewStack.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAUA,
|
|
1
|
+
{"version":3,"file":"previewStack.js","sourceRoot":"","sources":["../src/previewStack.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAUA,oCAkCC;AA5CD,0EAA2D;AAC3D,+CAAiC;AACjC,uEAAkE;AAClE,6DAA8D;AAC9D,yCAAuD;AAEvD;;;GAGG;AACI,KAAK,UAAU,YAAY,CAC9B,SAAiB,EACjB,YAAoB,EACpB,UAAmB,EACnB,SAAkC;IAGlC,GAAG,CAAC,wBAAwB,EAAE,CAAC;IAE/B,MAAM,EAAC,QAAQ,EAAE,MAAM,EAAC,GAAG,MAAM,IAAA,6CAAqB,EAAC,YAAY,EAAE,UAAU,EAAE,SAAS,CAAC,CAAC;IAC5F,MAAM,QAAQ,GAAG,MAAM,GAAG,CAAC,cAAc,CAAC,SAAS,CAAC,CAAC;IAErD,IAAI,QAAQ,EAAE,WAAW,KAAK,mCAAW,CAAC,iBAAiB,EAAE,CAAC;QAE1D,IAAA,aAAI,EACA,SAAS,SAAS,uEAAuE;cACvF,iCAAiC,CACtC,CAAC;QAEF,MAAM,IAAI,KAAK,CACX,4GAA4G,CAC/G,CAAC;IAEN,CAAC;IAED,OAAO,CAAC,GAAG,CAAC,wBAAwB,CAAC,CAAC;IACtC,MAAM,IAAA,yCAAsB,EAAC,QAAQ,CAAC,CAAC;IAEvC,MAAM,SAAS,GAAG,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC;IAEjD,IAAA,aAAI,EAAC,GAAG,gBAAO,CAAC,KAAK,YAAY,IAAA,aAAI,EAAC,SAAS,CAAC,cAAc,IAAA,aAAI,EAAC,SAAS,CAAC,EAAE,CAAC,CAAC;IAEjF,MAAM,GAAG,CAAC,gBAAgB,CAAC,SAAS,EAAE,EAAC,IAAI,EAAE,QAAQ,EAAE,MAAM,EAAC,EAAE,SAAS,CAAC,CAAC;AAE/E,CAAC"}
|
package/dist/updateStack.d.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* CLI handler: update an existing CloudFormation stack.
|
|
3
3
|
*/
|
|
4
|
-
export declare function updateStack(stackName: string, templatePath: string, paramsPath?: string): Promise<void>;
|
|
4
|
+
export declare function updateStack(stackName: string, templatePath: string, paramsPath?: string, create?: boolean, overrides?: Record<string, string>): Promise<void>;
|
|
5
5
|
//# sourceMappingURL=updateStack.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"updateStack.d.ts","sourceRoot":"","sources":["../src/updateStack.ts"],"names":[],"mappings":"AAKA;;GAEG;AACH,wBAAsB,WAAW,CAC7B,SAAS,EAAE,MAAM,EACjB,YAAY,EAAE,MAAM,EACpB,UAAU,CAAC,EAAE,MAAM,
|
|
1
|
+
{"version":3,"file":"updateStack.d.ts","sourceRoot":"","sources":["../src/updateStack.ts"],"names":[],"mappings":"AAKA;;GAEG;AACH,wBAAsB,WAAW,CAC7B,SAAS,EAAE,MAAM,EACjB,YAAY,EAAE,MAAM,EACpB,UAAU,CAAC,EAAE,MAAM,EACnB,MAAM,GAAE,OAAe,EACvB,SAAS,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GACnC,OAAO,CAAC,IAAI,CAAC,CA+Bf"}
|
package/dist/updateStack.js
CHANGED
|
@@ -41,12 +41,19 @@ const log_1 = require("./cli/log");
|
|
|
41
41
|
/**
|
|
42
42
|
* CLI handler: update an existing CloudFormation stack.
|
|
43
43
|
*/
|
|
44
|
-
async function updateStack(stackName, templatePath, paramsPath) {
|
|
44
|
+
async function updateStack(stackName, templatePath, paramsPath, create = false, overrides) {
|
|
45
45
|
cfn.initCloudFormationClient();
|
|
46
|
-
const { template, params } = await (0, loadTemplateAndParams_1.loadTemplateAndParams)(templatePath, paramsPath);
|
|
46
|
+
const { template, params } = await (0, loadTemplateAndParams_1.loadTemplateAndParams)(templatePath, paramsPath, overrides);
|
|
47
47
|
const existing = await cfn.getStackByName(stackName);
|
|
48
48
|
if (!existing) {
|
|
49
|
-
|
|
49
|
+
if (!create) {
|
|
50
|
+
throw new Error('stack not found, try create command');
|
|
51
|
+
}
|
|
52
|
+
console.log('validating template...');
|
|
53
|
+
await (0, validateTemplate_1.validateTemplateOrExit)(template);
|
|
54
|
+
(0, log_1.logStackAction)(stackName, 'creating', params);
|
|
55
|
+
await cfn.createStack(stackName, { body: template, params });
|
|
56
|
+
return;
|
|
50
57
|
}
|
|
51
58
|
console.log('validating template...');
|
|
52
59
|
await (0, validateTemplate_1.validateTemplateOrExit)(template);
|
package/dist/updateStack.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"updateStack.js","sourceRoot":"","sources":["../src/updateStack.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAQA,
|
|
1
|
+
{"version":3,"file":"updateStack.js","sourceRoot":"","sources":["../src/updateStack.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAQA,kCAqCC;AA7CD,+CAAiC;AACjC,uEAAkE;AAClE,6DAA8D;AAC9D,mCAAyC;AAEzC;;GAEG;AACI,KAAK,UAAU,WAAW,CAC7B,SAAiB,EACjB,YAAoB,EACpB,UAAmB,EACnB,SAAkB,KAAK,EACvB,SAAkC;IAGlC,GAAG,CAAC,wBAAwB,EAAE,CAAC;IAE/B,MAAM,EAAC,QAAQ,EAAE,MAAM,EAAC,GAAG,MAAM,IAAA,6CAAqB,EAAC,YAAY,EAAE,UAAU,EAAE,SAAS,CAAC,CAAC;IAC5F,MAAM,QAAQ,GAAG,MAAM,GAAG,CAAC,cAAc,CAAC,SAAS,CAAC,CAAC;IAErD,IAAI,CAAC,QAAQ,EAAE,CAAC;QAEZ,IAAI,CAAC,MAAM,EAAE,CAAC;YAEV,MAAM,IAAI,KAAK,CAAC,qCAAqC,CAAC,CAAC;QAE3D,CAAC;QAED,OAAO,CAAC,GAAG,CAAC,wBAAwB,CAAC,CAAC;QACtC,MAAM,IAAA,yCAAsB,EAAC,QAAQ,CAAC,CAAC;QAEvC,IAAA,oBAAc,EAAC,SAAS,EAAE,UAAU,EAAE,MAAM,CAAC,CAAC;QAC9C,MAAM,GAAG,CAAC,WAAW,CAAC,SAAS,EAAE,EAAC,IAAI,EAAE,QAAQ,EAAE,MAAM,EAAC,CAAC,CAAC;QAE3D,OAAO;IAEX,CAAC;IAED,OAAO,CAAC,GAAG,CAAC,wBAAwB,CAAC,CAAC;IACtC,MAAM,IAAA,yCAAsB,EAAC,QAAQ,CAAC,CAAC;IAEvC,IAAA,oBAAc,EAAC,SAAS,EAAE,UAAU,EAAE,MAAM,CAAC,CAAC;IAC9C,MAAM,GAAG,CAAC,WAAW,CAAC,QAAQ,EAAE,EAAC,IAAI,EAAE,QAAQ,EAAE,MAAM,EAAC,CAAC,CAAC;AAE9D,CAAC"}
|
package/package.json
CHANGED