@hiiretail/gcp-infra-generators 1.0.0 → 1.0.2

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.
Files changed (74) hide show
  1. package/dist/generators/clan-resources/clan-project/index.js +89 -189
  2. package/dist/generators/common-resources/bigquery/index.js +172 -267
  3. package/dist/generators/common-resources/budget/index.js +67 -153
  4. package/dist/generators/common-resources/cloud-armor/index.js +17 -167
  5. package/dist/generators/common-resources/cloud-storage/index.js +96 -205
  6. package/dist/generators/common-resources/cloudsql/index.js +71 -177
  7. package/dist/generators/common-resources/cloudsql-database/index.js +40 -287
  8. package/dist/generators/common-resources/confluent-cluster/index.js +23 -132
  9. package/dist/generators/common-resources/datastore/index.js +48 -194
  10. package/dist/generators/common-resources/elastic-cloud/index.js +22 -132
  11. package/dist/generators/common-resources/elastic-index-policy/handle-yaml.js +76 -0
  12. package/dist/generators/common-resources/elastic-index-policy/index.js +131 -286
  13. package/dist/generators/common-resources/elastic-template/index.js +52 -162
  14. package/dist/generators/common-resources/firestore/index.js +93 -233
  15. package/dist/generators/common-resources/iam/index.js +35 -157
  16. package/dist/generators/common-resources/iam/valid-prefix.js +8 -0
  17. package/dist/generators/common-resources/kafka-connect/index.js +35 -144
  18. package/dist/generators/common-resources/kafka-topics/index.js +20 -129
  19. package/dist/generators/common-resources/kms/index.js +31 -141
  20. package/dist/generators/common-resources/memorystore/index.js +42 -328
  21. package/dist/generators/common-resources/monitoring/handle-yaml.js +49 -0
  22. package/dist/generators/common-resources/monitoring/index.js +144 -322
  23. package/dist/generators/common-resources/monitoring/templates/alerts/generic-infra.yaml +37 -2
  24. package/dist/generators/common-resources/monitoring/validate.js +58 -0
  25. package/dist/generators/common-resources/pubsub/append.js +130 -0
  26. package/dist/generators/common-resources/pubsub/get-gcp-projects.js +34 -0
  27. package/dist/generators/common-resources/pubsub/handle-subscribers.js +68 -0
  28. package/dist/generators/common-resources/pubsub/index.js +194 -536
  29. package/dist/generators/common-resources/pubsub/validate.js +53 -0
  30. package/dist/generators/common-resources/scheduler/append.js +85 -0
  31. package/dist/generators/common-resources/scheduler/index.js +62 -249
  32. package/dist/generators/common-resources/spanner/append.js +31 -0
  33. package/dist/generators/common-resources/spanner/index.js +102 -269
  34. package/dist/generators/common-resources/spanner/validate.js +38 -0
  35. package/dist/generators/docs/rca/index.js +25 -135
  36. package/dist/generators/docs/runbook/index.js +16 -126
  37. package/dist/generators/docs/srb/index.js +33 -147
  38. package/dist/generators/docs/srb/run-docker.js +2 -0
  39. package/dist/generators/init/clan-infra/gcp-projects.js +47 -0
  40. package/dist/generators/init/clan-infra/index.js +95 -290
  41. package/dist/generators/init/clan-infra/tribe-clan-repo.js +38 -0
  42. package/dist/generators/init/clan-infra/validate.js +8 -0
  43. package/dist/generators/maintenance/manage-states/index.js +142 -219
  44. package/dist/generators/maintenance/update-modules/index.js +56 -155
  45. package/dist/generators/organization/clan-project/googlecloud.js +124 -0
  46. package/dist/generators/organization/clan-project/index.js +81 -303
  47. package/dist/node_modules/.package-lock.json +88 -31
  48. package/dist/node_modules/@google-cloud/storage/build/cjs/src/bucket.js +5 -5
  49. package/dist/node_modules/@google-cloud/storage/build/cjs/src/file.d.ts +1 -0
  50. package/dist/node_modules/@google-cloud/storage/build/cjs/src/file.js +10 -1
  51. package/dist/node_modules/@google-cloud/storage/build/cjs/src/storage.js +1 -1
  52. package/dist/node_modules/@google-cloud/storage/build/cjs/src/transfer-manager.d.ts +4 -4
  53. package/dist/node_modules/@google-cloud/storage/build/cjs/src/transfer-manager.js +4 -4
  54. package/dist/node_modules/@google-cloud/storage/build/cjs/src/util.d.ts +1 -1
  55. package/dist/node_modules/@google-cloud/storage/build/cjs/src/util.js +2 -2
  56. package/dist/node_modules/@google-cloud/storage/build/esm/src/bucket.js +5 -5
  57. package/dist/node_modules/@google-cloud/storage/build/esm/src/file.d.ts +1 -0
  58. package/dist/node_modules/@google-cloud/storage/build/esm/src/file.js +10 -1
  59. package/dist/node_modules/@google-cloud/storage/build/esm/src/storage.js +1 -1
  60. package/dist/node_modules/@google-cloud/storage/build/esm/src/transfer-manager.d.ts +4 -4
  61. package/dist/node_modules/@google-cloud/storage/build/esm/src/transfer-manager.js +4 -4
  62. package/dist/node_modules/@google-cloud/storage/build/esm/src/util.d.ts +1 -1
  63. package/dist/node_modules/@google-cloud/storage/build/esm/src/util.js +2 -2
  64. package/dist/node_modules/@google-cloud/storage/package.json +5 -5
  65. package/dist/package.json +45 -0
  66. package/dist/src/BaseGenerator.js +84 -0
  67. package/dist/src/SecretsGenerator.js +137 -0
  68. package/dist/src/cli.js +54 -255
  69. package/dist/src/dependency-check.js +48 -0
  70. package/dist/src/update-check.js +38 -0
  71. package/dist/src/validators.js +33 -0
  72. package/dist/src/yeoman.js +80 -0
  73. package/package.json +2 -3
  74. package/dist/node_modules/@google-cloud/storage/CHANGELOG.md +0 -1769
@@ -1,327 +1,80 @@
1
- var __defProp = Object.defineProperty;
2
- var __getOwnPropNames = Object.getOwnPropertyNames;
3
- var __name = (target, value) => __defProp(target, "name", { value, configurable: true });
4
- var __commonJS = (cb, mod) => function __require() {
5
- return mod || (0, cb[__getOwnPropNames(cb)[0]])((mod = { exports: {} }).exports, mod), mod.exports;
6
- };
7
-
8
- // src/validators.js
9
- var require_validators = __commonJS({
10
- "src/validators.js"(exports2, module2) {
11
- var path2 = require("path");
12
- module2.exports = {
13
- chain: /* @__PURE__ */ __name((input, ...validators) => {
14
- let msg = "";
15
- validators.every((validator) => {
16
- msg = validator(input);
17
- return msg === true;
18
- });
19
- return msg === true ? true : msg;
20
- }, "chain"),
21
- filename: /* @__PURE__ */ __name((input) => {
22
- if (!input) {
23
- return true;
24
- }
25
- return path2.basename(input) === input ? true : "Invalid filename";
26
- }, "filename"),
27
- maxLength: /* @__PURE__ */ __name((input, maxLength) => !input || input.length <= maxLength ? true : `Exceeds max \
28
- length: ${maxLength}`, "maxLength"),
29
- required: /* @__PURE__ */ __name((input) => {
30
- const msg = "Required";
31
- if (Array.isArray(input)) {
32
- return input.length > 0 ? true : msg;
33
- }
34
- if (input) {
35
- return input.trim().length > 0 ? true : msg;
36
- }
37
- return msg;
38
- }, "required")
39
- };
40
- }
41
- });
42
-
43
- // src/BaseGenerator.js
44
- var require_BaseGenerator = __commonJS({
45
- "src/BaseGenerator.js"(exports2, module2) {
46
- var Generator = require("yeoman-generator");
47
- var path2 = require("path");
48
- var fs = require("fs");
49
- var inquirer = require("inquirer");
50
- var { chain, required: required2, filename } = require_validators();
51
- module2.exports = class extends Generator {
52
- constructor(args, opts) {
53
- super(args, opts);
54
- this.baseDir = path2.resolve(path2.join(__dirname, ".."));
55
- this.destinationRoot(process.cwd());
56
- const [command, generator] = opts.namespace.split(":").slice(-2);
57
- this.generatorId = path2.join(command, generator);
58
- this.sourceRoot(
59
- path2.join(this.baseDir, "generators", this.generatorId, "templates")
60
- );
61
- this.copyDir = (templateDir, targetDir, answers = this.answers, skipIfExists = false) => {
62
- if (skipIfExists && fs.existsSync(targetDir)) {
63
- return;
64
- }
65
- this.fs.copyTpl(
66
- this.templatePath(`${templateDir}/**/*`),
67
- this.destinationPath(targetDir),
68
- answers
69
- );
70
- };
71
- this.listSubDirectories = (parent) => fs.readdirSync(parent).filter((f) => !f.startsWith(".")).filter((f) => fs.
72
- lstatSync(path2.join(parent, f)).isDirectory()).sort((a, b) => a.localeCompare(b));
73
- this.kebabCase = (input) => input.replace(/\s|_/g, "-");
74
- this.chooseOrCreatePrompts = (name, getChoicesDirectory) => [
75
- {
76
- when: /* @__PURE__ */ __name((answers) => fs.existsSync(getChoicesDirectory(answers)), "when"),
77
- type: "list",
78
- name,
79
- message: `Choose ${name}`,
80
- store: true,
81
- choices: /* @__PURE__ */ __name((answers) => [
82
- ...this.listSubDirectories(getChoicesDirectory(answers)),
83
- new inquirer.Separator(),
84
- `Create new ${name}`
85
- ], "choices"),
86
- validate: required2,
87
- filter: this.kebabCase
88
- },
89
- {
90
- when: /* @__PURE__ */ __name((answers) => !fs.existsSync(getChoicesDirectory(answers)) || answers[name] === `\
91
- Create-new-${name}`, "when"),
92
- type: "input",
93
- name: `new-${name}`,
94
- message: `New ${name} name`,
95
- store: false,
96
- validate: /* @__PURE__ */ __name((input) => chain(input, required2, filename), "validate"),
97
- filter: this.kebabCase
98
- },
99
- {
100
- when: /* @__PURE__ */ __name((answers) => !fs.existsSync(getChoicesDirectory(answers)) || answers[name] === "\
101
- Create-new-tribe", "when"),
102
- type: "input",
103
- name: "costCenter",
104
- message: "Please provide the Cost Center of the Tribe",
105
- store: false,
106
- validate: /* @__PURE__ */ __name((input) => chain(input, required2, filename), "validate"),
107
- filter: this.kebabCase
108
- }
109
- ];
110
- }
111
- };
112
- }
113
- });
114
-
115
- // src/SecretsGenerator.js
116
- var require_SecretsGenerator = __commonJS({
117
- "src/SecretsGenerator.js"(exports2, module2) {
118
- var path2 = require("path");
119
- var fs = require("fs");
120
- var printf = require("sprintf-js").sprintf;
121
- var chalk2 = require("chalk");
122
- var BaseGenerator = require_BaseGenerator();
123
- function getMaxStrLength(strings) {
124
- let maxLength = 0;
125
- Object.values(strings).forEach((string) => {
126
- if (string.length > maxLength) {
127
- maxLength = string.length;
128
- }
129
- });
130
- return maxLength;
131
- }
132
- __name(getMaxStrLength, "getMaxStrLength");
133
- module2.exports = class extends BaseGenerator {
134
- writeSecrets(resource, instanceResource, instanceType, resourceName) {
135
- ["prod", "staging"].forEach((env) => {
136
- this.init(env, resource, instanceResource, instanceType, resourceName);
137
- if (fs.existsSync(path2.resolve(this.secretsDir, "terragrunt.hcl"))) {
138
- fs.unlinkSync(path2.join(this.secretsDir, "terragrunt.hcl"));
139
- } else {
140
- fs.mkdirSync(this.secretsDir, { recursive: true });
141
- }
142
- this.createTemplate();
143
- });
144
- }
145
- init(env, resource, instanceResource, instanceType, resourceName) {
146
- this.resourceName = resourceName;
147
- this.instanceType = instanceType;
148
- this.resource = resource;
149
- this.outputs = JSON.parse(
150
- fs.readFileSync(
151
- path2.join(
152
- this.baseDir,
153
- "generators",
154
- this.generatorId,
155
- "templates",
156
- this.instanceType,
157
- "outputs.json"
158
- ),
159
- "utf8"
160
- )
161
- );
162
- this.secretsDir = path2.join(
163
- "infra",
164
- env,
165
- resource,
166
- instanceType,
167
- instanceResource,
168
- "secrets"
169
- );
170
- if (fs.existsSync(path2.join(this.secretsDir, "state.json"))) {
171
- this.stateNames = JSON.parse(
172
- fs.readFileSync(path2.join(this.secretsDir, "state.json"), "utf8")
173
- );
174
- this.checkUniqueState();
175
- this.stateNames.secrets.push(this.resourceName);
176
- } else {
177
- this.stateNames = { secrets: [this.resourceName] };
178
- }
179
- this.outputLen = getMaxStrLength(this.outputs);
180
- this.stateLen = getMaxStrLength(this.stateNames.secrets);
181
- }
182
- checkUniqueState() {
183
- this.stateNames.secrets.forEach((state) => {
184
- if (state === this.resourceName) {
185
- process.stderr.write(
186
- `${chalk2.red("ERROR!")} resource already exists
187
- `
188
- );
189
- process.exit(1);
190
- }
191
- });
192
- }
193
- buildDependencies() {
194
- const dependencies = [];
195
- this.stateNames.secrets.forEach((secret) => {
196
- let fp = `dependency "${secret}" {
197
- config_path = "../${secret}"
198
- mock_outputs = {
199
- `;
200
- Object.values(this.outputs).forEach((value) => {
201
- fp += printf(
202
- `%-4s%-${this.outputLen}s %s`,
203
- "",
204
- `${value}`,
205
- `= "dummy-${value}"
206
- `
207
- );
208
- });
209
- fp += " }\n}\n";
210
- dependencies.push(fp);
211
- });
212
- return dependencies;
213
- }
214
- buildSecrets() {
215
- const secrets = [];
216
- const resourceType = this.instanceType === "" ? this.resource : this.instanceType;
217
- const padding = resourceType.length + this.outputLen + this.stateLen + 2;
218
- this.stateNames.secrets.forEach((secret) => {
219
- const secretsSet = [];
220
- Object.values(this.outputs).forEach((value) => {
221
- secretsSet.push(
222
- printf(
223
- `
224
- %-6s%-${padding}s %s`,
225
- "",
226
- `${resourceType}_${secret}_${value}`,
227
- `= dependency.${secret}.outputs.${value}`
228
- )
229
- );
230
- });
231
- secrets.push(secretsSet.join(""));
232
- });
233
- return secrets.join("");
234
- }
235
- updateState() {
236
- fs.writeFileSync(
237
- path2.join(this.secretsDir, "state.json"),
238
- JSON.stringify(this.stateNames, null, 2)
239
- );
240
- }
241
- createTemplate() {
242
- const dependencies = this.buildDependencies().join("");
243
- const secrets = this.buildSecrets();
244
- this.updateState();
245
- this.copyDir(path2.join(this.instanceType, "secrets"), this.secretsDir, {
246
- ...this.answers,
247
- dependencies,
248
- secrets
249
- });
250
- }
251
- };
252
- }
253
- });
1
+ const path = require('path');
2
+ const chalk = require('chalk');
3
+ const { required } = require('../../../src/validators');
4
+ const SecretsGenerator = require('../../../src/SecretsGenerator');
254
5
 
255
- // generators/common-resources/cloudsql-database/index.js
256
- var path = require("path");
257
- var chalk = require("chalk");
258
- var { required } = require_validators();
259
- var SecretsGenerator = require_SecretsGenerator();
260
6
  module.exports = class extends SecretsGenerator {
261
7
  prompting() {
262
8
  const prompts = [
263
9
  {
264
- type: "list",
265
- name: "instanceType",
266
- message: "Select Cloud SQL database instance type",
267
- default: "postgres",
268
- choices: ["postgres", "mysql"]
10
+ type: 'list',
11
+ name: 'instanceType',
12
+ message: 'Select Cloud SQL database instance type',
13
+ default: 'postgres',
14
+ choices: ['postgres', 'mysql'],
269
15
  },
270
16
  {
271
- type: "input",
272
- name: "dbName",
17
+ type: 'input',
18
+ name: 'dbName',
273
19
  validate: required,
274
- message: "Enter the name of the service of the database be created for"
275
- }
20
+ message: 'Enter the name of the service of the database be created for',
21
+ },
276
22
  ];
23
+
277
24
  return this.prompt(prompts).then((props) => {
278
25
  this.answers = props;
279
26
  });
280
27
  }
28
+
281
29
  writing() {
282
30
  const { instanceType, dbName } = this.answers;
283
- ["prod", "staging"].forEach((env) => {
31
+
32
+ // CloudSQL Database
33
+ ['prod', 'staging'].forEach((env) => {
284
34
  const randomPort = Math.floor(Math.random() * (65535 - 49152)) + 49152;
285
35
  this.copyDir(
286
- path.join(instanceType, "database"),
287
- path.join("infra", env, "cloud-sql", instanceType, "databases", dbName),
36
+ path.join(instanceType, 'database'),
37
+ path.join('infra', env, 'cloud-sql', instanceType, 'databases', dbName),
288
38
  {
289
39
  ...this.answers,
290
40
  env,
291
- randomPort
292
- }
41
+ randomPort,
42
+ },
293
43
  );
294
44
  });
295
- this.writeSecrets("cloud-sql", "databases", instanceType, dbName);
45
+
46
+ this.writeSecrets('cloud-sql', 'databases', instanceType, dbName);
296
47
  }
48
+
297
49
  end() {
298
50
  const { instanceType, dbName } = this.answers;
51
+
299
52
  const specStageFile = path.join(
300
- "infra",
301
- "staging",
302
- "cloud-sql",
53
+ 'infra',
54
+ 'staging',
55
+ 'cloud-sql',
303
56
  instanceType,
304
- "databases",
57
+ 'databases',
305
58
  dbName,
306
- "spec.hcl"
59
+ 'spec.hcl',
307
60
  );
308
61
  const specProdFile = path.join(
309
- "infra",
310
- "prod",
311
- "cloud-sql",
62
+ 'infra',
63
+ 'prod',
64
+ 'cloud-sql',
312
65
  instanceType,
313
- "databases",
66
+ 'databases',
314
67
  dbName,
315
- "spec.hcl"
68
+ 'spec.hcl',
316
69
  );
70
+
317
71
  this.log(`
318
- ${chalk.green(`Your CloudSQL ${instanceType} database ${chalk.cyan(dbName)} have now been created. To finalize your conf\
319
- iguration, please continue
72
+ ${chalk.green(`Your CloudSQL ${instanceType} database ${chalk.cyan(dbName)} have now been created. To finalize your configuration, please continue
320
73
  with manual editing of the generated files.`)}
321
- ${chalk.green("1.")} Review and change specs if needed.
74
+ ${chalk.green('1.')} Review and change specs if needed.
322
75
  \u2192 ${chalk.cyan(specStageFile)}
323
76
  \u2192 ${chalk.cyan(specProdFile)}
324
- ${chalk.green("2.")} Push this change in a feature branch and open a pull request.
77
+ ${chalk.green('2.')} Push this change in a feature branch and open a pull request.
325
78
  `);
326
79
  }
327
80
  };
@@ -1,156 +1,47 @@
1
- var __defProp = Object.defineProperty;
2
- var __getOwnPropNames = Object.getOwnPropertyNames;
3
- var __name = (target, value) => __defProp(target, "name", { value, configurable: true });
4
- var __commonJS = (cb, mod) => function __require() {
5
- return mod || (0, cb[__getOwnPropNames(cb)[0]])((mod = { exports: {} }).exports, mod), mod.exports;
6
- };
7
-
8
- // src/validators.js
9
- var require_validators = __commonJS({
10
- "src/validators.js"(exports2, module2) {
11
- var path2 = require("path");
12
- module2.exports = {
13
- chain: /* @__PURE__ */ __name((input, ...validators) => {
14
- let msg = "";
15
- validators.every((validator) => {
16
- msg = validator(input);
17
- return msg === true;
18
- });
19
- return msg === true ? true : msg;
20
- }, "chain"),
21
- filename: /* @__PURE__ */ __name((input) => {
22
- if (!input) {
23
- return true;
24
- }
25
- return path2.basename(input) === input ? true : "Invalid filename";
26
- }, "filename"),
27
- maxLength: /* @__PURE__ */ __name((input, maxLength) => !input || input.length <= maxLength ? true : `Exceeds max \
28
- length: ${maxLength}`, "maxLength"),
29
- required: /* @__PURE__ */ __name((input) => {
30
- const msg = "Required";
31
- if (Array.isArray(input)) {
32
- return input.length > 0 ? true : msg;
33
- }
34
- if (input) {
35
- return input.trim().length > 0 ? true : msg;
36
- }
37
- return msg;
38
- }, "required")
39
- };
40
- }
41
- });
42
-
43
- // src/BaseGenerator.js
44
- var require_BaseGenerator = __commonJS({
45
- "src/BaseGenerator.js"(exports2, module2) {
46
- var Generator = require("yeoman-generator");
47
- var path2 = require("path");
48
- var fs = require("fs");
49
- var inquirer = require("inquirer");
50
- var { chain, required: required2, filename } = require_validators();
51
- module2.exports = class extends Generator {
52
- constructor(args, opts) {
53
- super(args, opts);
54
- this.baseDir = path2.resolve(path2.join(__dirname, ".."));
55
- this.destinationRoot(process.cwd());
56
- const [command, generator] = opts.namespace.split(":").slice(-2);
57
- this.generatorId = path2.join(command, generator);
58
- this.sourceRoot(
59
- path2.join(this.baseDir, "generators", this.generatorId, "templates")
60
- );
61
- this.copyDir = (templateDir, targetDir, answers = this.answers, skipIfExists = false) => {
62
- if (skipIfExists && fs.existsSync(targetDir)) {
63
- return;
64
- }
65
- this.fs.copyTpl(
66
- this.templatePath(`${templateDir}/**/*`),
67
- this.destinationPath(targetDir),
68
- answers
69
- );
70
- };
71
- this.listSubDirectories = (parent) => fs.readdirSync(parent).filter((f) => !f.startsWith(".")).filter((f) => fs.
72
- lstatSync(path2.join(parent, f)).isDirectory()).sort((a, b) => a.localeCompare(b));
73
- this.kebabCase = (input) => input.replace(/\s|_/g, "-");
74
- this.chooseOrCreatePrompts = (name, getChoicesDirectory) => [
75
- {
76
- when: /* @__PURE__ */ __name((answers) => fs.existsSync(getChoicesDirectory(answers)), "when"),
77
- type: "list",
78
- name,
79
- message: `Choose ${name}`,
80
- store: true,
81
- choices: /* @__PURE__ */ __name((answers) => [
82
- ...this.listSubDirectories(getChoicesDirectory(answers)),
83
- new inquirer.Separator(),
84
- `Create new ${name}`
85
- ], "choices"),
86
- validate: required2,
87
- filter: this.kebabCase
88
- },
89
- {
90
- when: /* @__PURE__ */ __name((answers) => !fs.existsSync(getChoicesDirectory(answers)) || answers[name] === `\
91
- Create-new-${name}`, "when"),
92
- type: "input",
93
- name: `new-${name}`,
94
- message: `New ${name} name`,
95
- store: false,
96
- validate: /* @__PURE__ */ __name((input) => chain(input, required2, filename), "validate"),
97
- filter: this.kebabCase
98
- },
99
- {
100
- when: /* @__PURE__ */ __name((answers) => !fs.existsSync(getChoicesDirectory(answers)) || answers[name] === "\
101
- Create-new-tribe", "when"),
102
- type: "input",
103
- name: "costCenter",
104
- message: "Please provide the Cost Center of the Tribe",
105
- store: false,
106
- validate: /* @__PURE__ */ __name((input) => chain(input, required2, filename), "validate"),
107
- filter: this.kebabCase
108
- }
109
- ];
110
- }
111
- };
112
- }
113
- });
1
+ const path = require('path');
2
+ const chalk = require('chalk');
3
+ const BaseGenerator = require('../../../src/BaseGenerator');
4
+ const { required } = require('../../../src/validators');
114
5
 
115
- // generators/common-resources/confluent-cluster/index.js
116
- var path = require("path");
117
- var chalk = require("chalk");
118
- var BaseGenerator = require_BaseGenerator();
119
- var { required } = require_validators();
120
6
  module.exports = class extends BaseGenerator {
121
7
  prompting() {
122
8
  const prompts = [
123
9
  {
124
- type: "input",
125
- name: "clusterName",
126
- message: "Please provide the cluster name (clan_name and env will be added after the provided name)",
127
- validate: required
128
- }
10
+ type: 'input',
11
+ name: 'clusterName',
12
+ message:
13
+ 'Please provide the cluster name (clan_name and env will be added after the provided name)',
14
+ validate: required,
15
+ },
129
16
  ];
17
+
130
18
  return this.prompt(prompts).then((props) => {
131
19
  this.answers = props;
132
20
  });
133
21
  }
22
+
134
23
  writing() {
135
24
  const { clusterName } = this.answers;
136
- ["prod", "staging"].forEach((env) => {
137
- this.copyDir("confluent", path.join("infra", env, "confluent"), {
25
+
26
+ ['prod', 'staging'].forEach((env) => {
27
+ this.copyDir('confluent', path.join('infra', env, 'confluent'), {
138
28
  ...this.answers,
139
29
  env,
140
- clusterName
30
+ clusterName,
141
31
  });
142
32
  });
143
33
  }
34
+
144
35
  end() {
145
- const specStageFile = path.join("infra", "staging", "confluent");
146
- const specProdFile = path.join("infra", "prod", "confluent");
36
+ const specStageFile = path.join('infra', 'staging', 'confluent');
37
+ const specProdFile = path.join('infra', 'prod', 'confluent');
147
38
  this.log(`
148
39
  ${chalk.green(`Your Confluent clusters have now been created. To finalize your configuration, please continue
149
40
  with manual editing of the generated files.`)}
150
- ${chalk.green("1.")} Review Confluent configuration
151
- \u2192 ${chalk.cyan(path.join(specStageFile, "spec.hcl"))}
152
- \u2192 ${chalk.cyan(path.join(specProdFile, "spec.hcl"))}
153
- ${chalk.green("2.")} Push this change in a feature branch and open a pull request.
41
+ ${chalk.green('1.')} Review Confluent configuration
42
+ \u2192 ${chalk.cyan(path.join(specStageFile, 'spec.hcl'))}
43
+ \u2192 ${chalk.cyan(path.join(specProdFile, 'spec.hcl'))}
44
+ ${chalk.green('2.')} Push this change in a feature branch and open a pull request.
154
45
  `);
155
46
  }
156
47
  };