@goldstack/utils-terraform 0.3.43 → 0.3.47

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.
@@ -1,25 +1,25 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- const utils_sh_1 = require("@goldstack/utils-sh");
4
- const terraformBuild_1 = require("./terraformBuild");
5
- describe('Terraform Utils', () => {
6
- it('Should convert variable names to Python variable Names', () => {
7
- expect((0, terraformBuild_1.convertToPythonVariable)('myVarName')).toEqual('my_var_name');
8
- expect((0, terraformBuild_1.convertToPythonVariable)('awsRegion')).toEqual('aws_region');
9
- expect((0, terraformBuild_1.convertToPythonVariable)('hostedZoneDomain')).toEqual('hosted_zone_domain');
10
- expect((0, terraformBuild_1.convertToPythonVariable)('websiteDomain')).toEqual('website_domain');
11
- expect((0, terraformBuild_1.convertToPythonVariable)('websiteDomainRedirect')).toEqual('website_domain_redirect');
12
- expect((0, terraformBuild_1.convertToPythonVariable)('defaultCacheDuration')).toEqual('default_cache_duration');
13
- });
14
- it('Should convert variables name from Pything variable names', () => {
15
- expect((0, terraformBuild_1.convertFromPythonVariable)('my_var_name')).toEqual('myVarName');
16
- expect((0, terraformBuild_1.convertFromPythonVariable)('aws_region')).toEqual('awsRegion');
17
- });
18
- it('Should read variables from variables.tf', () => {
19
- const testDir = './goldstackLocal/test-variables/';
20
- (0, utils_sh_1.mkdir)('-p', testDir);
21
- const oldDir = (0, utils_sh_1.pwd)();
22
- (0, utils_sh_1.cd)(testDir);
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const utils_sh_1 = require("@goldstack/utils-sh");
4
+ const terraformBuild_1 = require("./terraformBuild");
5
+ describe('Terraform Utils', () => {
6
+ it('Should convert variable names to Python variable Names', () => {
7
+ expect((0, terraformBuild_1.convertToPythonVariable)('myVarName')).toEqual('my_var_name');
8
+ expect((0, terraformBuild_1.convertToPythonVariable)('awsRegion')).toEqual('aws_region');
9
+ expect((0, terraformBuild_1.convertToPythonVariable)('hostedZoneDomain')).toEqual('hosted_zone_domain');
10
+ expect((0, terraformBuild_1.convertToPythonVariable)('websiteDomain')).toEqual('website_domain');
11
+ expect((0, terraformBuild_1.convertToPythonVariable)('websiteDomainRedirect')).toEqual('website_domain_redirect');
12
+ expect((0, terraformBuild_1.convertToPythonVariable)('defaultCacheDuration')).toEqual('default_cache_duration');
13
+ });
14
+ it('Should convert variables name from Pything variable names', () => {
15
+ expect((0, terraformBuild_1.convertFromPythonVariable)('my_var_name')).toEqual('myVarName');
16
+ expect((0, terraformBuild_1.convertFromPythonVariable)('aws_region')).toEqual('awsRegion');
17
+ });
18
+ it('Should read variables from variables.tf', () => {
19
+ const testDir = './goldstackLocal/test-variables/';
20
+ (0, utils_sh_1.mkdir)('-p', testDir);
21
+ const oldDir = (0, utils_sh_1.pwd)();
22
+ (0, utils_sh_1.cd)(testDir);
23
23
  (0, utils_sh_1.write)(`
24
24
  variable "aws_region" {
25
25
  description = "Region where the S3 bucket is deployed."
@@ -29,15 +29,15 @@ variable "aws_region" {
29
29
  variable "bucket_name" {
30
30
  description = "Name of the S3 bucket."
31
31
  type = string
32
- }`, './variables.tf');
33
- const vars = (0, terraformBuild_1.getVariablesFromHCL)({
34
- awsRegion: 'us-east-1',
35
- bucketName: 'test-bucket',
36
- });
37
- expect(vars).toHaveLength(2);
38
- expect(vars[0][0]).toEqual('aws_region');
39
- expect(vars[0][1]).toEqual('us-east-1');
40
- (0, utils_sh_1.cd)(oldDir);
41
- });
42
- });
32
+ }`, './variables.tf');
33
+ const vars = (0, terraformBuild_1.getVariablesFromHCL)({
34
+ awsRegion: 'us-east-1',
35
+ bucketName: 'test-bucket',
36
+ });
37
+ expect(vars).toHaveLength(2);
38
+ expect(vars[0][0]).toEqual('aws_region');
39
+ expect(vars[0][1]).toEqual('us-east-1');
40
+ (0, utils_sh_1.cd)(oldDir);
41
+ });
42
+ });
43
43
  //# sourceMappingURL=terraformBuild.spec.js.map
@@ -1,13 +1,15 @@
1
- import { CloudProvider } from './cloudProvider';
2
- export declare type Variables = [string, string][];
3
- interface TerraformOptions {
4
- dir?: string;
5
- provider: CloudProvider;
6
- variables?: Variables;
7
- backendConfig?: Variables;
8
- options?: string[];
9
- }
10
- export declare const assertTerraform: () => void;
11
- export declare const tf: (cmd: string, options: TerraformOptions) => string;
12
- export {};
1
+ import { CloudProvider } from './cloudProvider';
2
+ import { TerraformVersion } from './types/utilsTerraformConfig';
3
+ export declare type Variables = [string, string][];
4
+ interface TerraformOptions {
5
+ dir?: string;
6
+ provider: CloudProvider;
7
+ variables?: Variables;
8
+ backendConfig?: Variables;
9
+ version: TerraformVersion;
10
+ options?: string[];
11
+ }
12
+ export declare const assertTerraform: () => void;
13
+ export declare const tf: (cmd: string, options: TerraformOptions) => string;
14
+ export {};
13
15
  //# sourceMappingURL=terraformCli.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"terraformCli.d.ts","sourceRoot":"","sources":["../../src/terraformCli.ts"],"names":[],"mappings":"AAOA,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAEhD,oBAAY,SAAS,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,EAAE,CAAC;AAiB3C,UAAU,gBAAgB;IACxB,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,aAAa,CAAC;IACxB,SAAS,CAAC,EAAE,SAAS,CAAC;IACtB,aAAa,CAAC,EAAE,SAAS,CAAC;IAC1B,OAAO,CAAC,EAAE,MAAM,EAAE,CAAC;CACpB;AAuBD,eAAO,MAAM,eAAe,QAAO,IAQlC,CAAC;AAsBF,eAAO,MAAM,EAAE,QAAS,MAAM,WAAW,gBAAgB,KAAG,MAO3D,CAAC"}
1
+ {"version":3,"file":"terraformCli.d.ts","sourceRoot":"","sources":["../../src/terraformCli.ts"],"names":[],"mappings":"AAOA,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAChD,OAAO,EAAE,gBAAgB,EAAE,MAAM,8BAA8B,CAAC;AAEhE,oBAAY,SAAS,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,EAAE,CAAC;AAiB3C,UAAU,gBAAgB;IACxB,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,aAAa,CAAC;IACxB,SAAS,CAAC,EAAE,SAAS,CAAC;IACtB,aAAa,CAAC,EAAE,SAAS,CAAC;IAC1B,OAAO,EAAE,gBAAgB,CAAC;IAC1B,OAAO,CAAC,EAAE,MAAM,EAAE,CAAC;CACpB;AAuBD,eAAO,MAAM,eAAe,QAAO,IAQlC,CAAC;AAgCF,eAAO,MAAM,EAAE,QAAS,MAAM,WAAW,gBAAgB,KAAG,MAO3D,CAAC"}
@@ -1,69 +1,73 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.tf = exports.assertTerraform = void 0;
4
- const utils_sh_1 = require("@goldstack/utils-sh");
5
- const utils_docker_1 = require("@goldstack/utils-docker");
6
- const utils_log_1 = require("@goldstack/utils-log");
7
- const renderVariables = (variables) => {
8
- if (variables.length === 0) {
9
- return '';
10
- }
11
- return variables.map(([key, value]) => `-var \"${key}=${value}\" `).join('');
12
- };
13
- const renderBackendConfig = (variables) => {
14
- if (variables.length === 0) {
15
- return '';
16
- }
17
- return variables
18
- .map(([key, value]) => `-backend-config=\"${key}=${value}\" `)
19
- .join('');
20
- };
21
- const execWithDocker = (cmd, options) => {
22
- var _a;
23
- if (!options.dir) {
24
- options.dir = (0, utils_sh_1.pwd)();
25
- }
26
- (0, utils_docker_1.assertDocker)();
27
- const cmd3 = `docker run --rm -v "${options.dir}":/app ` +
28
- ` ${options.provider.generateEnvVariableString()} ` +
29
- '-w /app ' +
30
- `${(0, utils_docker_1.imageTerraform)()} ${cmd} ` +
31
- ` ${renderBackendConfig(options.backendConfig || [])} ` +
32
- ` ${renderVariables(options.variables || [])} ` +
33
- ` ${((_a = options.options) === null || _a === void 0 ? void 0 : _a.join(' ')) || ''} `;
34
- console.debug('Running Terraform in Docker');
35
- console.debug(cmd3);
36
- return (0, utils_sh_1.exec)(cmd3);
37
- };
38
- const assertTerraform = () => {
39
- if (!(0, utils_sh_1.commandExists)('terraform')) {
40
- (0, utils_log_1.fatal)('Terraform is not installed.\n\n' +
41
- 'Install terraform CLI or Docker (preferred).');
42
- throw new Error();
43
- }
44
- };
45
- exports.assertTerraform = assertTerraform;
46
- const execWithCli = (cmd, options) => {
47
- var _a;
48
- if (!options.dir) {
49
- options.dir = (0, utils_sh_1.pwd)();
50
- }
51
- (0, exports.assertTerraform)();
52
- options.provider.setEnvVariables();
53
- const execCmd = `terraform ${cmd} ` +
54
- ` ${renderBackendConfig(options.backendConfig || [])} ` +
55
- ` ${renderVariables(options.variables || [])} ` +
56
- ` ${((_a = options.options) === null || _a === void 0 ? void 0 : _a.join(' ')) || ''} `;
57
- console.debug('Running Terraform in cli');
58
- console.debug(execCmd);
59
- return (0, utils_sh_1.exec)(execCmd);
60
- };
61
- const tf = (cmd, options) => {
62
- // always prefer running with Docker
63
- if ((0, utils_docker_1.hasDocker)()) {
64
- return execWithDocker(cmd, options);
65
- }
66
- return execWithCli(cmd, options);
67
- };
68
- exports.tf = tf;
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.tf = exports.assertTerraform = void 0;
4
+ const utils_sh_1 = require("@goldstack/utils-sh");
5
+ const utils_docker_1 = require("@goldstack/utils-docker");
6
+ const utils_log_1 = require("@goldstack/utils-log");
7
+ const renderVariables = (variables) => {
8
+ if (variables.length === 0) {
9
+ return '';
10
+ }
11
+ return variables.map(([key, value]) => `-var \"${key}=${value}\" `).join('');
12
+ };
13
+ const renderBackendConfig = (variables) => {
14
+ if (variables.length === 0) {
15
+ return '';
16
+ }
17
+ return variables
18
+ .map(([key, value]) => `-backend-config=\"${key}=${value}\" `)
19
+ .join('');
20
+ };
21
+ const execWithDocker = (cmd, options) => {
22
+ var _a;
23
+ if (!options.dir) {
24
+ options.dir = (0, utils_sh_1.pwd)();
25
+ }
26
+ (0, utils_docker_1.assertDocker)();
27
+ const cmd3 = `docker run --rm -v "${options.dir}":/app ` +
28
+ ` ${options.provider.generateEnvVariableString()} ` +
29
+ '-w /app ' +
30
+ `${(0, utils_docker_1.imageTerraform)(options.version)} ${cmd} ` +
31
+ ` ${renderBackendConfig(options.backendConfig || [])} ` +
32
+ ` ${renderVariables(options.variables || [])} ` +
33
+ ` ${((_a = options.options) === null || _a === void 0 ? void 0 : _a.join(' ')) || ''} `;
34
+ console.debug('Running Terraform in Docker');
35
+ console.debug(cmd3);
36
+ return (0, utils_sh_1.exec)(cmd3);
37
+ };
38
+ const assertTerraform = () => {
39
+ if (!(0, utils_sh_1.commandExists)('terraform')) {
40
+ (0, utils_log_1.fatal)('Terraform is not installed.\n\n' +
41
+ 'Install terraform CLI or Docker (preferred).');
42
+ throw new Error();
43
+ }
44
+ };
45
+ exports.assertTerraform = assertTerraform;
46
+ const execWithCli = (cmd, options) => {
47
+ var _a;
48
+ if (!options.dir) {
49
+ options.dir = (0, utils_sh_1.pwd)();
50
+ }
51
+ (0, exports.assertTerraform)();
52
+ const version = (0, utils_sh_1.exec)('terraform version');
53
+ if (version.indexOf(options.version) === -1) {
54
+ throw new Error(`Invalid local Terraform version detected: [${version.split('\n')[0]}], expected version compatible with [${options.version}]. Please install this version locally or install Docker for Goldstack to run the correct Terraform version required for this deployment using Docker.`);
55
+ }
56
+ options.provider.setEnvVariables();
57
+ const execCmd = `terraform ${cmd} ` +
58
+ ` ${renderBackendConfig(options.backendConfig || [])} ` +
59
+ ` ${renderVariables(options.variables || [])} ` +
60
+ ` ${((_a = options.options) === null || _a === void 0 ? void 0 : _a.join(' ')) || ''} `;
61
+ console.debug('Running Terraform in cli');
62
+ console.debug(execCmd);
63
+ return (0, utils_sh_1.exec)(execCmd);
64
+ };
65
+ const tf = (cmd, options) => {
66
+ // always prefer running with Docker
67
+ if ((0, utils_docker_1.hasDocker)()) {
68
+ return execWithDocker(cmd, options);
69
+ }
70
+ return execWithCli(cmd, options);
71
+ };
72
+ exports.tf = tf;
69
73
  //# sourceMappingURL=terraformCli.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"terraformCli.js","sourceRoot":"","sources":["../../src/terraformCli.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"terraformCli.js","sourceRoot":"","sources":["../../src/terraformCli.ts"],"names":[],"mappings":"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"}
@@ -1,2 +1,2 @@
1
- export {};
1
+ export {};
2
2
  //# sourceMappingURL=terraformCli.spec.d.ts.map
@@ -1,20 +1,30 @@
1
- "use strict";
2
- var __importDefault = (this && this.__importDefault) || function (mod) {
3
- return (mod && mod.__esModule) ? mod : { "default": mod };
4
- };
5
- Object.defineProperty(exports, "__esModule", { value: true });
6
- const utils_sh_1 = require("@goldstack/utils-sh");
7
- const terraformCli_1 = require("./terraformCli");
8
- const MockCloudProvider_1 = __importDefault(require("./MockCloudProvider"));
9
- const path_1 = __importDefault(require("path"));
10
- describe('Terraform CLI', () => {
11
- it('Should accept folder with spaces', async () => {
12
- const testDir = './goldstackLocal/cli-folder-w-space/My Dir';
13
- (0, utils_sh_1.mkdir)('-p', testDir);
14
- (0, terraformCli_1.tf)('init', {
15
- dir: path_1.default.resolve(testDir),
16
- provider: new MockCloudProvider_1.default(),
17
- });
18
- });
19
- });
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ const utils_sh_1 = require("@goldstack/utils-sh");
7
+ const terraformCli_1 = require("./terraformCli");
8
+ const MockCloudProvider_1 = __importDefault(require("./MockCloudProvider"));
9
+ const path_1 = __importDefault(require("path"));
10
+ describe('Terraform CLI', () => {
11
+ it('Should accept folder with spaces (v0.12)', async () => {
12
+ const testDir = './goldstackLocal/cli-folder-w-space/0.12/My Dir';
13
+ (0, utils_sh_1.mkdir)('-p', testDir);
14
+ (0, terraformCli_1.tf)('init', {
15
+ dir: path_1.default.resolve(testDir),
16
+ version: '0.12',
17
+ provider: new MockCloudProvider_1.default(),
18
+ });
19
+ });
20
+ it('Should accept folder with spaces (v0.13', async () => {
21
+ const testDir = './goldstackLocal/cli-folder-w-space/0.13/My Dir';
22
+ (0, utils_sh_1.mkdir)('-p', testDir);
23
+ (0, terraformCli_1.tf)('init', {
24
+ dir: path_1.default.resolve(testDir),
25
+ version: '0.13',
26
+ provider: new MockCloudProvider_1.default(),
27
+ });
28
+ });
29
+ });
20
30
  //# sourceMappingURL=terraformCli.spec.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"terraformCli.spec.js","sourceRoot":"","sources":["../../src/terraformCli.spec.ts"],"names":[],"mappings":";;;;;AAAA,kDAA4C;AAC5C,iDAAoC;AACpC,4EAAoD;AAEpD,gDAAwB;AAExB,QAAQ,CAAC,eAAe,EAAE,GAAG,EAAE;IAC7B,EAAE,CAAC,kCAAkC,EAAE,KAAK,IAAI,EAAE;QAChD,MAAM,OAAO,GAAG,4CAA4C,CAAC;QAC7D,IAAA,gBAAK,EAAC,IAAI,EAAE,OAAO,CAAC,CAAC;QACrB,IAAA,iBAAE,EAAC,MAAM,EAAE;YACT,GAAG,EAAE,cAAI,CAAC,OAAO,CAAC,OAAO,CAAC;YAC1B,QAAQ,EAAE,IAAI,2BAAiB,EAAE;SAClC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
1
+ {"version":3,"file":"terraformCli.spec.js","sourceRoot":"","sources":["../../src/terraformCli.spec.ts"],"names":[],"mappings":";;;;;AAAA,kDAA4C;AAC5C,iDAAoC;AACpC,4EAAoD;AAEpD,gDAAwB;AAExB,QAAQ,CAAC,eAAe,EAAE,GAAG,EAAE;IAC7B,EAAE,CAAC,0CAA0C,EAAE,KAAK,IAAI,EAAE;QACxD,MAAM,OAAO,GAAG,iDAAiD,CAAC;QAClE,IAAA,gBAAK,EAAC,IAAI,EAAE,OAAO,CAAC,CAAC;QACrB,IAAA,iBAAE,EAAC,MAAM,EAAE;YACT,GAAG,EAAE,cAAI,CAAC,OAAO,CAAC,OAAO,CAAC;YAC1B,OAAO,EAAE,MAAM;YACf,QAAQ,EAAE,IAAI,2BAAiB,EAAE;SAClC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IACH,EAAE,CAAC,yCAAyC,EAAE,KAAK,IAAI,EAAE;QACvD,MAAM,OAAO,GAAG,iDAAiD,CAAC;QAClE,IAAA,gBAAK,EAAC,IAAI,EAAE,OAAO,CAAC,CAAC;QACrB,IAAA,iBAAE,EAAC,MAAM,EAAE;YACT,GAAG,EAAE,cAAI,CAAC,OAAO,CAAC,OAAO,CAAC;YAC1B,OAAO,EAAE,MAAM;YACf,QAAQ,EAAE,IAAI,2BAAiB,EAAE;SAClC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
@@ -1,27 +1,36 @@
1
- import { Deployment } from '@goldstack/infra';
2
- /**
3
- * Name of the property that should be converted into a Terraform variable.
4
- *
5
- * @title Terraform Variable
6
- *
7
- */
8
- export declare type TerraformVariable = string;
9
- /**
10
- * Key used for Terraform state persisted in Terraform state bucket.
11
- *
12
- * Will be auto-generated upon first deployment if not provided.
13
- *
14
- * @title Terraform State Key
15
- */
16
- export declare type TerraformStateKey = string;
17
- /**
18
- * Define which of the deployment variables will be made available for terraform.
19
- *
20
- * @title Terraform Variables
21
- */
22
- export declare type TerraformVariables = TerraformVariable[];
23
- export interface TerraformDeployment extends Deployment {
24
- terraformVariables?: TerraformVariables;
25
- tfStateKey?: TerraformStateKey;
26
- }
1
+ import { Deployment } from '@goldstack/infra';
2
+ /**
3
+ * Name of the property that should be converted into a Terraform variable.
4
+ *
5
+ * @title Terraform Variable
6
+ *
7
+ */
8
+ export declare type TerraformVariable = string;
9
+ /**
10
+ * Key used for Terraform state persisted in Terraform state bucket.
11
+ *
12
+ * Will be auto-generated upon first deployment if not provided.
13
+ *
14
+ * @title Terraform State Key
15
+ */
16
+ export declare type TerraformStateKey = string;
17
+ /**
18
+ * Version of Terraform that the remote state for this deployment was created with.
19
+ *
20
+ * Go to the next version using `yarn infra upgrade [deploymentName] [targetVersion]`. Note that Terraform versions should only be increased one at a time, so for instance you can go from v0.12 to v0.13 but not from v0.12 to v0.14.
21
+ *
22
+ * @default '0.12'
23
+ */
24
+ export declare type TerraformVersion = '0.12' | '0.13';
25
+ /**
26
+ * Define which of the deployment variables will be made available for terraform.
27
+ *
28
+ * @title Terraform Variables
29
+ */
30
+ export declare type TerraformVariables = TerraformVariable[];
31
+ export interface TerraformDeployment extends Deployment {
32
+ terraformVariables?: TerraformVariables;
33
+ tfStateKey?: TerraformStateKey;
34
+ tfVersion?: TerraformVersion;
35
+ }
27
36
  //# sourceMappingURL=utilsTerraformConfig.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"utilsTerraformConfig.d.ts","sourceRoot":"","sources":["../../../src/types/utilsTerraformConfig.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAE9C;;;;;GAKG;AACH,oBAAY,iBAAiB,GAAG,MAAM,CAAC;AAEvC;;;;;;GAMG;AACH,oBAAY,iBAAiB,GAAG,MAAM,CAAC;AAEvC;;;;GAIG;AACH,oBAAY,kBAAkB,GAAG,iBAAiB,EAAE,CAAC;AAErD,MAAM,WAAW,mBAAoB,SAAQ,UAAU;IACrD,kBAAkB,CAAC,EAAE,kBAAkB,CAAC;IACxC,UAAU,CAAC,EAAE,iBAAiB,CAAC;CAChC"}
1
+ {"version":3,"file":"utilsTerraformConfig.d.ts","sourceRoot":"","sources":["../../../src/types/utilsTerraformConfig.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAE9C;;;;;GAKG;AACH,oBAAY,iBAAiB,GAAG,MAAM,CAAC;AAEvC;;;;;;GAMG;AACH,oBAAY,iBAAiB,GAAG,MAAM,CAAC;AAEvC;;;;;;GAMG;AACH,oBAAY,gBAAgB,GAAG,MAAM,GAAG,MAAM,CAAC;AAE/C;;;;GAIG;AACH,oBAAY,kBAAkB,GAAG,iBAAiB,EAAE,CAAC;AAErD,MAAM,WAAW,mBAAoB,SAAQ,UAAU;IACrD,kBAAkB,CAAC,EAAE,kBAAkB,CAAC;IACxC,UAAU,CAAC,EAAE,iBAAiB,CAAC;IAC/B,SAAS,CAAC,EAAE,gBAAgB,CAAC;CAC9B"}
@@ -1,3 +1,3 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
3
  //# sourceMappingURL=utilsTerraformConfig.js.map
@@ -1,10 +1,10 @@
1
- export type { TerraformDeployment, TerraformVariable, TerraformVariables, } from './types/utilsTerraformConfig';
2
- import { CloudProvider } from './cloudProvider';
3
- export type { CloudProvider } from './cloudProvider';
4
- export { tf } from './terraformCli';
5
- export { getVariablesFromProperties } from './terraformBuild';
6
- export declare const infraCommands: () => any;
7
- export declare const terraformCli: (args: string[], options: {
8
- provider: CloudProvider;
9
- }) => void;
1
+ export type { TerraformDeployment, TerraformVariable, TerraformVariables, } from './types/utilsTerraformConfig';
2
+ import { CloudProvider } from './cloudProvider';
3
+ export type { CloudProvider } from './cloudProvider';
4
+ export { tf } from './terraformCli';
5
+ export { getVariablesFromProperties } from './terraformBuild';
6
+ export declare const infraCommands: () => any;
7
+ export declare const terraformCli: (args: string[], options: {
8
+ provider: CloudProvider;
9
+ }) => void;
10
10
  //# sourceMappingURL=utilsTerraform.d.ts.map
@@ -1,63 +1,63 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.terraformCli = exports.infraCommands = exports.getVariablesFromProperties = exports.tf = void 0;
4
- const terraformBuild_1 = require("./terraformBuild");
5
- var terraformCli_1 = require("./terraformCli");
6
- Object.defineProperty(exports, "tf", { enumerable: true, get: function () { return terraformCli_1.tf; } });
7
- var terraformBuild_2 = require("./terraformBuild");
8
- Object.defineProperty(exports, "getVariablesFromProperties", { enumerable: true, get: function () { return terraformBuild_2.getVariablesFromProperties; } });
9
- const infraCommands = () => {
10
- const deploymentPositional = (yargs) => {
11
- return yargs.positional('deployment', {
12
- type: 'string',
13
- describe: 'Name of the deployment this command should be applied to',
14
- demandOption: true,
15
- });
16
- };
17
- return (yargs) => {
18
- return yargs
19
- .command('up <deployment>', 'Stands up infrastructure for the specified deployment', deploymentPositional)
20
- .command('init <deployment>', 'Initialises Terraform working directory for deployment', deploymentPositional)
21
- .command('plan <deployment>', 'Creates a Terraform execution plan for deployment', deploymentPositional)
22
- .command('apply <deployment>', 'Applies the last Terraform execution plan calculated using `infra plan`', deploymentPositional)
23
- .command('destroy <deployment>', 'DANGER: Destroys all deployed infrastructure for the deployment', (yargs) => {
24
- return deploymentPositional(yargs).option('yes', {
25
- alias: 'y',
26
- description: 'DANGER: If provided, confirmation for deleting infrastructure resources will be skipped.',
27
- default: false,
28
- demandOption: false,
29
- type: 'boolean',
30
- });
31
- });
32
- };
33
- };
34
- exports.infraCommands = infraCommands;
35
- const terraformCli = (args, options) => {
36
- const [operation, ...opArgs] = args;
37
- const build = new terraformBuild_1.TerraformBuild(options.provider);
38
- if (operation === 'up') {
39
- build.init(opArgs);
40
- build.plan(opArgs);
41
- build.apply(opArgs);
42
- return;
43
- }
44
- if (operation === 'init') {
45
- build.init(opArgs);
46
- return;
47
- }
48
- if (operation === 'plan') {
49
- build.plan(opArgs);
50
- return;
51
- }
52
- if (operation === 'apply') {
53
- build.apply(opArgs);
54
- return;
55
- }
56
- if (operation === 'destroy') {
57
- build.destroy(opArgs);
58
- return;
59
- }
60
- throw new Error('Unknown infrastructure operation: ' + operation);
61
- };
62
- exports.terraformCli = terraformCli;
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.terraformCli = exports.infraCommands = exports.getVariablesFromProperties = exports.tf = void 0;
4
+ const terraformBuild_1 = require("./terraformBuild");
5
+ var terraformCli_1 = require("./terraformCli");
6
+ Object.defineProperty(exports, "tf", { enumerable: true, get: function () { return terraformCli_1.tf; } });
7
+ var terraformBuild_2 = require("./terraformBuild");
8
+ Object.defineProperty(exports, "getVariablesFromProperties", { enumerable: true, get: function () { return terraformBuild_2.getVariablesFromProperties; } });
9
+ const infraCommands = () => {
10
+ const deploymentPositional = (yargs) => {
11
+ return yargs.positional('deployment', {
12
+ type: 'string',
13
+ describe: 'Name of the deployment this command should be applied to',
14
+ demandOption: true,
15
+ });
16
+ };
17
+ return (yargs) => {
18
+ return yargs
19
+ .command('up <deployment>', 'Stands up infrastructure for the specified deployment', deploymentPositional)
20
+ .command('init <deployment>', 'Initialises Terraform working directory for deployment', deploymentPositional)
21
+ .command('plan <deployment>', 'Creates a Terraform execution plan for deployment', deploymentPositional)
22
+ .command('apply <deployment>', 'Applies the last Terraform execution plan calculated using `infra plan`', deploymentPositional)
23
+ .command('destroy <deployment>', 'DANGER: Destroys all deployed infrastructure for the deployment', (yargs) => {
24
+ return deploymentPositional(yargs).option('yes', {
25
+ alias: 'y',
26
+ description: 'DANGER: If provided, confirmation for deleting infrastructure resources will be skipped.',
27
+ default: false,
28
+ demandOption: false,
29
+ type: 'boolean',
30
+ });
31
+ });
32
+ };
33
+ };
34
+ exports.infraCommands = infraCommands;
35
+ const terraformCli = (args, options) => {
36
+ const [operation, ...opArgs] = args;
37
+ const build = new terraformBuild_1.TerraformBuild(options.provider);
38
+ if (operation === 'up') {
39
+ build.init(opArgs);
40
+ build.plan(opArgs);
41
+ build.apply(opArgs);
42
+ return;
43
+ }
44
+ if (operation === 'init') {
45
+ build.init(opArgs);
46
+ return;
47
+ }
48
+ if (operation === 'plan') {
49
+ build.plan(opArgs);
50
+ return;
51
+ }
52
+ if (operation === 'apply') {
53
+ build.apply(opArgs);
54
+ return;
55
+ }
56
+ if (operation === 'destroy') {
57
+ build.destroy(opArgs);
58
+ return;
59
+ }
60
+ throw new Error('Unknown infrastructure operation: ' + operation);
61
+ };
62
+ exports.terraformCli = terraformCli;
63
63
  //# sourceMappingURL=utilsTerraform.js.map
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@goldstack/utils-terraform",
3
- "version": "0.3.43",
3
+ "version": "0.3.47",
4
4
  "description": "Run Terraform commands easily as npm package scripts",
5
5
  "keywords": [
6
6
  "goldstack",
@@ -40,7 +40,7 @@
40
40
  "@goldstack/infra": "0.3.24",
41
41
  "@goldstack/infra-aws": "0.3.31",
42
42
  "@goldstack/utils-config": "0.3.23",
43
- "@goldstack/utils-docker": "0.3.27",
43
+ "@goldstack/utils-docker": "0.3.29",
44
44
  "@goldstack/utils-log": "0.2.9",
45
45
  "@goldstack/utils-package": "0.3.26",
46
46
  "@goldstack/utils-sh": "0.4.22",