@hiiretail/gcp-infra-generators 1.0.0 → 1.0.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/generators/clan-resources/clan-project/index.js +89 -189
- package/dist/generators/common-resources/bigquery/index.js +172 -267
- package/dist/generators/common-resources/budget/index.js +67 -153
- package/dist/generators/common-resources/cloud-armor/index.js +17 -167
- package/dist/generators/common-resources/cloud-storage/index.js +96 -205
- package/dist/generators/common-resources/cloudsql/index.js +71 -177
- package/dist/generators/common-resources/cloudsql-database/index.js +40 -287
- package/dist/generators/common-resources/confluent-cluster/index.js +23 -132
- package/dist/generators/common-resources/datastore/index.js +48 -194
- package/dist/generators/common-resources/elastic-cloud/index.js +22 -132
- package/dist/generators/common-resources/elastic-index-policy/handle-yaml.js +76 -0
- package/dist/generators/common-resources/elastic-index-policy/index.js +131 -286
- package/dist/generators/common-resources/elastic-template/index.js +52 -162
- package/dist/generators/common-resources/firestore/index.js +93 -233
- package/dist/generators/common-resources/iam/index.js +35 -157
- package/dist/generators/common-resources/iam/valid-prefix.js +8 -0
- package/dist/generators/common-resources/kafka-connect/index.js +35 -144
- package/dist/generators/common-resources/kafka-topics/index.js +20 -129
- package/dist/generators/common-resources/kms/index.js +31 -141
- package/dist/generators/common-resources/memorystore/index.js +42 -328
- package/dist/generators/common-resources/monitoring/handle-yaml.js +49 -0
- package/dist/generators/common-resources/monitoring/index.js +144 -322
- package/dist/generators/common-resources/monitoring/validate.js +58 -0
- package/dist/generators/common-resources/pubsub/append.js +130 -0
- package/dist/generators/common-resources/pubsub/get-gcp-projects.js +34 -0
- package/dist/generators/common-resources/pubsub/handle-subscribers.js +68 -0
- package/dist/generators/common-resources/pubsub/index.js +194 -536
- package/dist/generators/common-resources/pubsub/validate.js +53 -0
- package/dist/generators/common-resources/scheduler/append.js +85 -0
- package/dist/generators/common-resources/scheduler/index.js +62 -249
- package/dist/generators/common-resources/spanner/append.js +31 -0
- package/dist/generators/common-resources/spanner/index.js +102 -269
- package/dist/generators/common-resources/spanner/validate.js +38 -0
- package/dist/generators/docs/rca/index.js +25 -135
- package/dist/generators/docs/runbook/index.js +16 -126
- package/dist/generators/docs/srb/index.js +33 -147
- package/dist/generators/docs/srb/run-docker.js +2 -0
- package/dist/generators/init/clan-infra/gcp-projects.js +47 -0
- package/dist/generators/init/clan-infra/index.js +95 -290
- package/dist/generators/init/clan-infra/tribe-clan-repo.js +38 -0
- package/dist/generators/init/clan-infra/validate.js +8 -0
- package/dist/generators/maintenance/manage-states/index.js +142 -219
- package/dist/generators/maintenance/update-modules/index.js +56 -155
- package/dist/generators/organization/clan-project/googlecloud.js +124 -0
- package/dist/generators/organization/clan-project/index.js +81 -303
- package/dist/node_modules/.package-lock.json +81 -23
- package/dist/package.json +45 -0
- package/dist/src/BaseGenerator.js +84 -0
- package/dist/src/SecretsGenerator.js +137 -0
- package/dist/src/cli.js +54 -255
- package/dist/src/dependency-check.js +48 -0
- package/dist/src/update-check.js +38 -0
- package/dist/src/validators.js +33 -0
- package/dist/src/yeoman.js +80 -0
- package/package.json +1 -2
|
@@ -1,188 +1,102 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
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, 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: required,
|
|
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, required, 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, required, 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');
|
|
114
4
|
|
|
115
|
-
// generators/common-resources/budget/index.js
|
|
116
|
-
var path = require("path");
|
|
117
|
-
var chalk = require("chalk");
|
|
118
|
-
var BaseGenerator = require_BaseGenerator();
|
|
119
5
|
module.exports = class extends BaseGenerator {
|
|
120
6
|
prompting() {
|
|
121
7
|
const prompts = [
|
|
122
8
|
{
|
|
123
|
-
type:
|
|
124
|
-
name:
|
|
125
|
-
message:
|
|
126
|
-
default:
|
|
127
|
-
choices: [
|
|
9
|
+
type: 'list',
|
|
10
|
+
name: 'usingGKE',
|
|
11
|
+
message: 'Is the clan using GKE?',
|
|
12
|
+
default: 'false',
|
|
13
|
+
choices: ['true', 'false'],
|
|
128
14
|
},
|
|
129
15
|
{
|
|
130
|
-
type:
|
|
131
|
-
name:
|
|
132
|
-
message:
|
|
16
|
+
type: 'input',
|
|
17
|
+
name: 'expectedServiceCount',
|
|
18
|
+
message: 'How many services will eventually be in use simultanously?',
|
|
133
19
|
},
|
|
134
20
|
{
|
|
135
|
-
type:
|
|
136
|
-
name:
|
|
137
|
-
message:
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
21
|
+
type: 'list',
|
|
22
|
+
name: 'usingInternalTraffic',
|
|
23
|
+
message:
|
|
24
|
+
'Is the clan using internal traffic (service to service communication)?',
|
|
25
|
+
default: 'true',
|
|
26
|
+
choices: ['true', 'false'],
|
|
27
|
+
},
|
|
141
28
|
];
|
|
142
29
|
return this.prompt(prompts).then((props) => {
|
|
143
30
|
this.answers = props;
|
|
144
31
|
});
|
|
145
32
|
}
|
|
33
|
+
|
|
146
34
|
writing() {
|
|
147
35
|
let overheadPercentage = 0.01;
|
|
148
|
-
if (
|
|
149
|
-
|
|
36
|
+
if (
|
|
37
|
+
this.answers.usingInternalTraffic === 'false' &&
|
|
38
|
+
this.answers.usingGKE === 'false' &&
|
|
39
|
+
this.answers.expectedServiceCount < 8
|
|
40
|
+
) {
|
|
150
41
|
overheadPercentage = 0.01;
|
|
151
|
-
} else if (
|
|
152
|
-
|
|
42
|
+
} else if (
|
|
43
|
+
this.answers.usingInternalTraffic === 'true' &&
|
|
44
|
+
this.answers.usingGKE === 'false' &&
|
|
45
|
+
this.answers.expectedServiceCount < 8
|
|
46
|
+
) {
|
|
153
47
|
overheadPercentage = 0.03;
|
|
154
|
-
} else if (
|
|
155
|
-
|
|
48
|
+
} else if (
|
|
49
|
+
this.answers.usingInternalTraffic === 'true' &&
|
|
50
|
+
this.answers.usingGKE === 'false' &&
|
|
51
|
+
this.answers.expectedServiceCount > 8
|
|
52
|
+
) {
|
|
156
53
|
overheadPercentage = 0.04;
|
|
157
|
-
} else if (
|
|
158
|
-
|
|
54
|
+
} else if (
|
|
55
|
+
this.answers.usingInternalTraffic === 'true' &&
|
|
56
|
+
this.answers.usingGKE === 'true' &&
|
|
57
|
+
this.answers.expectedServiceCount < 8
|
|
58
|
+
) {
|
|
159
59
|
overheadPercentage = 0.04;
|
|
160
|
-
} else if (
|
|
161
|
-
|
|
60
|
+
} else if (
|
|
61
|
+
this.answers.usingInternalTraffic === 'true' &&
|
|
62
|
+
this.answers.usingGKE === 'true' &&
|
|
63
|
+
this.answers.expectedServiceCount > 8
|
|
64
|
+
) {
|
|
162
65
|
overheadPercentage = 0.05;
|
|
163
|
-
} else if (
|
|
164
|
-
|
|
66
|
+
} else if (
|
|
67
|
+
this.answers.usingInternalTraffic === 'false' &&
|
|
68
|
+
this.answers.usingGKE === 'false' &&
|
|
69
|
+
this.answers.expectedServiceCount > 8
|
|
70
|
+
) {
|
|
165
71
|
overheadPercentage = 0.03;
|
|
166
|
-
} else if (
|
|
167
|
-
|
|
72
|
+
} else if (
|
|
73
|
+
this.answers.usingInternalTraffic === 'false' &&
|
|
74
|
+
this.answers.usingGKE === 'true' &&
|
|
75
|
+
this.answers.expectedServiceCount < 8
|
|
76
|
+
) {
|
|
168
77
|
overheadPercentage = 0.03;
|
|
169
|
-
} else if (
|
|
170
|
-
|
|
78
|
+
} else if (
|
|
79
|
+
this.answers.usingInternalTraffic === 'false' &&
|
|
80
|
+
this.answers.usingGKE === 'true' &&
|
|
81
|
+
this.answers.expectedServiceCount > 8
|
|
82
|
+
) {
|
|
171
83
|
overheadPercentage = 0.04;
|
|
172
84
|
}
|
|
173
|
-
|
|
174
|
-
|
|
85
|
+
|
|
86
|
+
['prod', 'staging'].forEach((env) => {
|
|
87
|
+
this.copyDir('budget', path.join('infra', env, 'budget'), {
|
|
175
88
|
...this.answers,
|
|
176
89
|
env,
|
|
177
|
-
overheadPercentage
|
|
90
|
+
overheadPercentage,
|
|
178
91
|
});
|
|
179
92
|
});
|
|
180
93
|
}
|
|
94
|
+
|
|
181
95
|
end() {
|
|
182
96
|
this.log(`
|
|
183
|
-
${chalk.green(
|
|
184
|
-
${chalk.green(
|
|
185
|
-
${chalk.green(
|
|
97
|
+
${chalk.green('Your budget has been created.')}
|
|
98
|
+
${chalk.green('1.')} To finalize your configuration, please continue with manual editing of the generated files.
|
|
99
|
+
${chalk.green('2.')} Push the changes in a feature branch and open a pull request.
|
|
186
100
|
`);
|
|
187
101
|
}
|
|
188
102
|
};
|
|
@@ -1,187 +1,37 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
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, 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: required,
|
|
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, required, 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, required, 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 getTribeAndClanName = require('../../init/clan-infra/tribe-clan-repo');
|
|
114
5
|
|
|
115
|
-
// generators/init/clan-infra/tribe-clan-repo.js
|
|
116
|
-
var require_tribe_clan_repo = __commonJS({
|
|
117
|
-
"generators/init/clan-infra/tribe-clan-repo.js"(exports2, module2) {
|
|
118
|
-
var path2 = require("path");
|
|
119
|
-
var fs = require("fs");
|
|
120
|
-
var getKeyValue = /* @__PURE__ */ __name((content, key) => {
|
|
121
|
-
let value = "";
|
|
122
|
-
content.split(/\r?\n/).forEach((line) => {
|
|
123
|
-
if (line.includes(key)) {
|
|
124
|
-
value = line.split("=")[1].replace('"', "").replace('"', "").trim();
|
|
125
|
-
}
|
|
126
|
-
});
|
|
127
|
-
return value;
|
|
128
|
-
}, "getKeyValue");
|
|
129
|
-
var getTribeAndClanName2 = /* @__PURE__ */ __name(() => {
|
|
130
|
-
const repoName = path2.basename(path2.resolve());
|
|
131
|
-
const isClanInfraRepo = /^(?:\w+-){2}common(?:$|\W)$/.test(repoName);
|
|
132
|
-
let tribe = "";
|
|
133
|
-
let clan = "";
|
|
134
|
-
if (isClanInfraRepo) {
|
|
135
|
-
[tribe, clan] = repoName.split("-");
|
|
136
|
-
} else {
|
|
137
|
-
const commonHCL = path2.join("infra", "common.hcl");
|
|
138
|
-
if (fs.existsSync(commonHCL)) {
|
|
139
|
-
const commonHCLContent = fs.readFileSync(commonHCL, "utf8");
|
|
140
|
-
tribe = getKeyValue(commonHCLContent, "tribe_name");
|
|
141
|
-
clan = getKeyValue(commonHCLContent, "clan_name");
|
|
142
|
-
}
|
|
143
|
-
}
|
|
144
|
-
return {
|
|
145
|
-
tribe,
|
|
146
|
-
clan
|
|
147
|
-
};
|
|
148
|
-
}, "getTribeAndClanName");
|
|
149
|
-
module2.exports = getTribeAndClanName2;
|
|
150
|
-
}
|
|
151
|
-
});
|
|
152
|
-
|
|
153
|
-
// generators/common-resources/cloud-armor/index.js
|
|
154
|
-
var path = require("path");
|
|
155
|
-
var chalk = require("chalk");
|
|
156
|
-
var BaseGenerator = require_BaseGenerator();
|
|
157
|
-
var getTribeAndClanName = require_tribe_clan_repo();
|
|
158
6
|
module.exports = class extends BaseGenerator {
|
|
159
7
|
prompting() {
|
|
160
8
|
const prompts = [
|
|
161
9
|
{
|
|
162
|
-
type:
|
|
163
|
-
name:
|
|
10
|
+
type: 'input',
|
|
11
|
+
name: 'name',
|
|
164
12
|
default: getTribeAndClanName().clan,
|
|
165
|
-
message:
|
|
166
|
-
}
|
|
13
|
+
message: 'Enter your policy name or leave blank for default',
|
|
14
|
+
},
|
|
167
15
|
];
|
|
168
16
|
return this.prompt(prompts).then((props) => {
|
|
169
17
|
this.answers = props;
|
|
170
18
|
});
|
|
171
19
|
}
|
|
20
|
+
|
|
172
21
|
writing() {
|
|
173
22
|
const { name } = this.answers;
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
run(
|
|
23
|
+
|
|
24
|
+
const run = (env) => {
|
|
25
|
+
this.copyDir(path.join(''), path.join('infra', env, 'cloud-armor', name));
|
|
26
|
+
};
|
|
27
|
+
run('staging');
|
|
28
|
+
run('prod');
|
|
179
29
|
}
|
|
30
|
+
|
|
180
31
|
end() {
|
|
181
32
|
const { name } = this.answers;
|
|
182
33
|
this.log(`
|
|
183
|
-
${chalk.green(`Your cloud armor policy ${chalk.cyan(name)} has been created. To finalize your configuration, please
|
|
184
|
-
inue
|
|
34
|
+
${chalk.green(`Your cloud armor policy ${chalk.cyan(name)} has been created. To finalize your configuration, please continue
|
|
185
35
|
with manual editing of the generated files.`)}
|
|
186
36
|
`);
|
|
187
37
|
}
|