cdk8s-plus-31 2.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.backportrc.json +17 -0
- package/.jsii +90235 -0
- package/CODE_OF_CONDUCT.md +3 -0
- package/CONTRIBUTING.md +185 -0
- package/DCO +34 -0
- package/LICENSE +202 -0
- package/NOTICE +1 -0
- package/OWNERS.md +5 -0
- package/README.md +32 -0
- package/SECURITY.md +5 -0
- package/cdk8s.yaml +8 -0
- package/docs/java.md +23855 -0
- package/docs/plus/config-map.md +98 -0
- package/docs/plus/container.md +133 -0
- package/docs/plus/cronjob.md +67 -0
- package/docs/plus/deployment.md +232 -0
- package/docs/plus/horizontal-pod-autoscaler.md +226 -0
- package/docs/plus/ingress.md +68 -0
- package/docs/plus/job.md +48 -0
- package/docs/plus/namespace.md +58 -0
- package/docs/plus/network-policy.md +341 -0
- package/docs/plus/pod.md +455 -0
- package/docs/plus/pv.md +82 -0
- package/docs/plus/pvc.md +77 -0
- package/docs/plus/rbac.md +104 -0
- package/docs/plus/secret.md +32 -0
- package/docs/plus/service-account.md +35 -0
- package/docs/plus/service.md +41 -0
- package/docs/plus/volume.md +38 -0
- package/docs/python.md +26079 -0
- package/docs/typescript.md +19565 -0
- package/git-hooks/README.md +9 -0
- package/git-hooks/prepare-commit-msg +18 -0
- package/git-hooks/setup.sh +10 -0
- package/lib/_action.d.ts +21 -0
- package/lib/_action.js +32 -0
- package/lib/api-resource.d.ts +298 -0
- package/lib/api-resource.js +430 -0
- package/lib/base.d.ts +79 -0
- package/lib/base.js +92 -0
- package/lib/config-map.d.ts +126 -0
- package/lib/config-map.js +159 -0
- package/lib/container.d.ts +1057 -0
- package/lib/container.js +845 -0
- package/lib/cron-job.d.ts +138 -0
- package/lib/cron-job.js +103 -0
- package/lib/daemon-set.d.ts +45 -0
- package/lib/daemon-set.js +55 -0
- package/lib/deployment.d.ts +223 -0
- package/lib/deployment.js +214 -0
- package/lib/handler.d.ts +62 -0
- package/lib/handler.js +54 -0
- package/lib/horizontal-pod-autoscaler.d.ts +500 -0
- package/lib/horizontal-pod-autoscaler.js +569 -0
- package/lib/imports/k8s.d.ts +21534 -0
- package/lib/imports/k8s.js +16496 -0
- package/lib/index.d.ts +26 -0
- package/lib/index.js +39 -0
- package/lib/ingress.d.ts +230 -0
- package/lib/ingress.js +246 -0
- package/lib/job.d.ts +64 -0
- package/lib/job.js +54 -0
- package/lib/namespace.d.ts +128 -0
- package/lib/namespace.js +109 -0
- package/lib/network-policy.d.ts +311 -0
- package/lib/network-policy.js +344 -0
- package/lib/pod.d.ts +1080 -0
- package/lib/pod.js +1139 -0
- package/lib/probe.d.ts +141 -0
- package/lib/probe.js +77 -0
- package/lib/pv.d.ts +375 -0
- package/lib/pv.js +273 -0
- package/lib/pvc.d.ts +163 -0
- package/lib/pvc.js +152 -0
- package/lib/role-binding.d.ts +138 -0
- package/lib/role-binding.js +165 -0
- package/lib/role.d.ts +268 -0
- package/lib/role.js +401 -0
- package/lib/secret.d.ts +195 -0
- package/lib/secret.js +185 -0
- package/lib/service-account.d.ts +83 -0
- package/lib/service-account.js +105 -0
- package/lib/service.d.ts +289 -0
- package/lib/service.js +182 -0
- package/lib/stateful-set.d.ts +169 -0
- package/lib/stateful-set.js +174 -0
- package/lib/utils.d.ts +4 -0
- package/lib/utils.js +34 -0
- package/lib/volume.d.ts +573 -0
- package/lib/volume.js +371 -0
- package/lib/workload.d.ts +121 -0
- package/lib/workload.js +122 -0
- package/node_modules/balanced-match/.github/FUNDING.yml +2 -0
- package/node_modules/balanced-match/LICENSE.md +21 -0
- package/node_modules/balanced-match/README.md +97 -0
- package/node_modules/balanced-match/index.js +62 -0
- package/node_modules/balanced-match/package.json +48 -0
- package/node_modules/concat-map/.travis.yml +4 -0
- package/node_modules/concat-map/LICENSE +18 -0
- package/node_modules/concat-map/README.markdown +62 -0
- package/node_modules/concat-map/example/map.js +6 -0
- package/node_modules/concat-map/index.js +13 -0
- package/node_modules/concat-map/package.json +43 -0
- package/node_modules/concat-map/test/map.js +39 -0
- package/node_modules/minimatch/LICENSE +15 -0
- package/node_modules/minimatch/README.md +230 -0
- package/node_modules/minimatch/minimatch.js +947 -0
- package/node_modules/minimatch/node_modules/brace-expansion/LICENSE +21 -0
- package/node_modules/minimatch/node_modules/brace-expansion/README.md +129 -0
- package/node_modules/minimatch/node_modules/brace-expansion/index.js +201 -0
- package/node_modules/minimatch/node_modules/brace-expansion/package.json +47 -0
- package/node_modules/minimatch/package.json +33 -0
- package/package.json +186 -0
- package/rotate.md +84 -0
package/lib/role.js
ADDED
|
@@ -0,0 +1,401 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var _a, _b;
|
|
3
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
4
|
+
exports.ClusterRole = exports.Role = void 0;
|
|
5
|
+
const JSII_RTTI_SYMBOL_1 = Symbol.for("jsii.rtti");
|
|
6
|
+
const cdk8s_1 = require("cdk8s");
|
|
7
|
+
const constructs_1 = require("constructs");
|
|
8
|
+
const base = require("./base");
|
|
9
|
+
const k8s = require("./imports/k8s");
|
|
10
|
+
const rb = require("./role-binding");
|
|
11
|
+
const utils_1 = require("./utils");
|
|
12
|
+
class ImportedRole extends constructs_1.Construct {
|
|
13
|
+
constructor(scope, id, name) {
|
|
14
|
+
super(scope, id);
|
|
15
|
+
this.resourceType = 'roles';
|
|
16
|
+
this._name = name;
|
|
17
|
+
}
|
|
18
|
+
get name() {
|
|
19
|
+
return this._name;
|
|
20
|
+
}
|
|
21
|
+
get apiVersion() {
|
|
22
|
+
return k8s.KubeRole.GVK.apiVersion;
|
|
23
|
+
}
|
|
24
|
+
get apiGroup() {
|
|
25
|
+
return 'rbac.authorization.k8s.io';
|
|
26
|
+
}
|
|
27
|
+
get kind() {
|
|
28
|
+
return k8s.KubeRole.GVK.kind;
|
|
29
|
+
}
|
|
30
|
+
get resourceName() {
|
|
31
|
+
return this.name;
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
/**
|
|
35
|
+
* Role is a namespaced, logical grouping of PolicyRules that can be referenced
|
|
36
|
+
* as a unit by a RoleBinding.
|
|
37
|
+
*/
|
|
38
|
+
class Role extends base.Resource {
|
|
39
|
+
constructor(scope, id, props = {}) {
|
|
40
|
+
super(scope, id);
|
|
41
|
+
this.resourceType = 'roles';
|
|
42
|
+
this._rules = [];
|
|
43
|
+
this.apiObject = new k8s.KubeRole(this, 'Resource', {
|
|
44
|
+
metadata: props.metadata,
|
|
45
|
+
rules: cdk8s_1.Lazy.any({ produce: () => this.synthesizeRules() }),
|
|
46
|
+
});
|
|
47
|
+
for (const rule of props.rules ?? []) {
|
|
48
|
+
this.allow(rule.verbs, ...rule.resources);
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
/**
|
|
52
|
+
* Imports a role from the cluster as a reference.
|
|
53
|
+
*/
|
|
54
|
+
static fromRoleName(scope, id, name) {
|
|
55
|
+
return new ImportedRole(scope, id, name);
|
|
56
|
+
}
|
|
57
|
+
/**
|
|
58
|
+
* Rules associaated with this Role.
|
|
59
|
+
* Returns a copy, use `allow` to add rules.
|
|
60
|
+
*/
|
|
61
|
+
get rules() {
|
|
62
|
+
return [...this._rules];
|
|
63
|
+
}
|
|
64
|
+
/**
|
|
65
|
+
* Add permission to perform a list of HTTP verbs on a collection of
|
|
66
|
+
* resources.
|
|
67
|
+
*
|
|
68
|
+
* @param resources The resource(s) to apply to
|
|
69
|
+
* @see https://kubernetes.io/docs/reference/access-authn-authz/authorization/#determine-the-request-verb
|
|
70
|
+
*/
|
|
71
|
+
allow(verbs, ...resources) {
|
|
72
|
+
this._rules.push({ verbs, resources });
|
|
73
|
+
}
|
|
74
|
+
/**
|
|
75
|
+
* Add "create" permission for the resources.
|
|
76
|
+
* @param resources The resource(s) to apply to
|
|
77
|
+
*/
|
|
78
|
+
allowCreate(...resources) {
|
|
79
|
+
this.allow(['create'], ...resources);
|
|
80
|
+
}
|
|
81
|
+
/**
|
|
82
|
+
* Add "get" permission for the resources.
|
|
83
|
+
* @param resources The resource(s) to apply to
|
|
84
|
+
*/
|
|
85
|
+
allowGet(...resources) {
|
|
86
|
+
this.allow(['get'], ...resources);
|
|
87
|
+
}
|
|
88
|
+
/**
|
|
89
|
+
* Add "list" permission for the resources.
|
|
90
|
+
* @param resources The resource(s) to apply to
|
|
91
|
+
*/
|
|
92
|
+
allowList(...resources) {
|
|
93
|
+
this.allow(['list'], ...resources);
|
|
94
|
+
}
|
|
95
|
+
/**
|
|
96
|
+
* Add "watch" permission for the resources.
|
|
97
|
+
* @param resources The resource(s) to apply to
|
|
98
|
+
*/
|
|
99
|
+
allowWatch(...resources) {
|
|
100
|
+
this.allow(['watch'], ...resources);
|
|
101
|
+
}
|
|
102
|
+
/**
|
|
103
|
+
* Add "update" permission for the resources.
|
|
104
|
+
* @param resources The resource(s) to apply to
|
|
105
|
+
*/
|
|
106
|
+
allowUpdate(...resources) {
|
|
107
|
+
this.allow(['update'], ...resources);
|
|
108
|
+
}
|
|
109
|
+
/**
|
|
110
|
+
* Add "patch" permission for the resources.
|
|
111
|
+
* @param resources The resource(s) to apply to
|
|
112
|
+
*/
|
|
113
|
+
allowPatch(...resources) {
|
|
114
|
+
this.allow(['patch'], ...resources);
|
|
115
|
+
}
|
|
116
|
+
/**
|
|
117
|
+
* Add "delete" permission for the resources.
|
|
118
|
+
* @param resources The resource(s) to apply to
|
|
119
|
+
*/
|
|
120
|
+
allowDelete(...resources) {
|
|
121
|
+
this.allow(['delete'], ...resources);
|
|
122
|
+
}
|
|
123
|
+
/**
|
|
124
|
+
* Add "deletecollection" permission for the resources.
|
|
125
|
+
* @param resources The resource(s) to apply to
|
|
126
|
+
*/
|
|
127
|
+
allowDeleteCollection(...resources) {
|
|
128
|
+
this.allow(['deletecollection'], ...resources);
|
|
129
|
+
}
|
|
130
|
+
/**
|
|
131
|
+
* Add "get", "list", and "watch" permissions for the resources.
|
|
132
|
+
* @param resources The resource(s) to apply to
|
|
133
|
+
*/
|
|
134
|
+
allowRead(...resources) {
|
|
135
|
+
this.allow(['get', 'list', 'watch'], ...resources);
|
|
136
|
+
}
|
|
137
|
+
/**
|
|
138
|
+
* Add "get", "list", "watch", "create", "update", "patch", "delete", and
|
|
139
|
+
* "deletecollection" permissions for the resources.
|
|
140
|
+
*
|
|
141
|
+
* @param resources The resource(s) to apply to
|
|
142
|
+
*/
|
|
143
|
+
allowReadWrite(...resources) {
|
|
144
|
+
this.allow(['get', 'list', 'watch', 'create', 'update', 'patch', 'delete', 'deletecollection'], ...resources);
|
|
145
|
+
}
|
|
146
|
+
/**
|
|
147
|
+
* Create a RoleBinding that binds the permissions in this Role
|
|
148
|
+
* to a list of subjects, that will only apply this role's namespace.
|
|
149
|
+
* @param subjects a list of subjects to bind to
|
|
150
|
+
*/
|
|
151
|
+
bind(...subjects) {
|
|
152
|
+
const subjectsAddress = utils_1.address(...subjects);
|
|
153
|
+
const binding = new rb.RoleBinding(this, `RoleBinding${subjectsAddress}`, {
|
|
154
|
+
metadata: {
|
|
155
|
+
namespace: this.metadata.namespace,
|
|
156
|
+
},
|
|
157
|
+
role: this,
|
|
158
|
+
});
|
|
159
|
+
binding.addSubjects(...subjects);
|
|
160
|
+
return binding;
|
|
161
|
+
}
|
|
162
|
+
synthesizeRules() {
|
|
163
|
+
const rules = [];
|
|
164
|
+
for (const rule of this._rules) {
|
|
165
|
+
for (const resource of rule.resources) {
|
|
166
|
+
rules.push({
|
|
167
|
+
verbs: rule.verbs,
|
|
168
|
+
apiGroups: [resource.apiGroup === 'core' ? '' : resource.apiGroup],
|
|
169
|
+
resourceNames: resource.resourceName ? [resource.resourceName] : undefined,
|
|
170
|
+
resources: resource.resourceType ? [resource.resourceType] : undefined,
|
|
171
|
+
});
|
|
172
|
+
}
|
|
173
|
+
}
|
|
174
|
+
return rules;
|
|
175
|
+
}
|
|
176
|
+
}
|
|
177
|
+
exports.Role = Role;
|
|
178
|
+
_a = JSII_RTTI_SYMBOL_1;
|
|
179
|
+
Role[_a] = { fqn: "cdk8s-plus-31.Role", version: "2.0.0" };
|
|
180
|
+
class ImportedClusterRole extends constructs_1.Construct {
|
|
181
|
+
constructor(scope, id, name) {
|
|
182
|
+
super(scope, id);
|
|
183
|
+
this.resourceType = 'clusterroles';
|
|
184
|
+
this._name = name;
|
|
185
|
+
}
|
|
186
|
+
get name() {
|
|
187
|
+
return this._name;
|
|
188
|
+
}
|
|
189
|
+
get apiVersion() {
|
|
190
|
+
return k8s.KubeClusterRole.GVK.apiVersion;
|
|
191
|
+
}
|
|
192
|
+
get apiGroup() {
|
|
193
|
+
return 'rbac.authorization.k8s.io';
|
|
194
|
+
}
|
|
195
|
+
get kind() {
|
|
196
|
+
return k8s.KubeClusterRole.GVK.kind;
|
|
197
|
+
}
|
|
198
|
+
get resourceName() {
|
|
199
|
+
return this.name;
|
|
200
|
+
}
|
|
201
|
+
}
|
|
202
|
+
/**
|
|
203
|
+
* ClusterRole is a cluster level, logical grouping of PolicyRules that can be
|
|
204
|
+
* referenced as a unit by a RoleBinding or ClusterRoleBinding.
|
|
205
|
+
*/
|
|
206
|
+
class ClusterRole extends base.Resource {
|
|
207
|
+
constructor(scope, id, props = {}) {
|
|
208
|
+
super(scope, id);
|
|
209
|
+
this.resourceType = 'clusterroles';
|
|
210
|
+
this._labelSelector = {};
|
|
211
|
+
this._rules = [];
|
|
212
|
+
this.apiObject = new k8s.KubeClusterRole(this, 'Resource', {
|
|
213
|
+
metadata: props.metadata,
|
|
214
|
+
rules: cdk8s_1.Lazy.any({ produce: () => this.synthesizeRules() }),
|
|
215
|
+
aggregationRule: cdk8s_1.Lazy.any({ produce: () => this.synthesizeAggregationRules() }),
|
|
216
|
+
});
|
|
217
|
+
for (const rule of props.rules ?? []) {
|
|
218
|
+
this.allow(rule.verbs, ...rule.endpoints);
|
|
219
|
+
}
|
|
220
|
+
for (const [key, value] of Object.entries(props.aggregationLabels ?? {})) {
|
|
221
|
+
this.aggregate(key, value);
|
|
222
|
+
}
|
|
223
|
+
}
|
|
224
|
+
/**
|
|
225
|
+
* Imports a role from the cluster as a reference.
|
|
226
|
+
*/
|
|
227
|
+
static fromClusterRoleName(scope, id, name) {
|
|
228
|
+
return new ImportedClusterRole(scope, id, name);
|
|
229
|
+
}
|
|
230
|
+
/**
|
|
231
|
+
* Rules associaated with this Role.
|
|
232
|
+
* Returns a copy, use `allow` to add rules.
|
|
233
|
+
*/
|
|
234
|
+
get rules() {
|
|
235
|
+
return [...this._rules];
|
|
236
|
+
}
|
|
237
|
+
/**
|
|
238
|
+
* Add permission to perform a list of HTTP verbs on a collection of
|
|
239
|
+
* resources.
|
|
240
|
+
*
|
|
241
|
+
* @param endpoints The endpoints(s) to apply to
|
|
242
|
+
* @see https://kubernetes.io/docs/reference/access-authn-authz/authorization/#determine-the-request-verb
|
|
243
|
+
*/
|
|
244
|
+
allow(verbs, ...endpoints) {
|
|
245
|
+
this._rules.push({ verbs, endpoints });
|
|
246
|
+
}
|
|
247
|
+
/**
|
|
248
|
+
* Add "create" permission for the resources.
|
|
249
|
+
* @param endpoints The resource(s) to apply to
|
|
250
|
+
*/
|
|
251
|
+
allowCreate(...endpoints) {
|
|
252
|
+
this.allow(['create'], ...endpoints);
|
|
253
|
+
}
|
|
254
|
+
/**
|
|
255
|
+
* Add "get" permission for the resources.
|
|
256
|
+
* @param endpoints The resource(s) to apply to
|
|
257
|
+
*/
|
|
258
|
+
allowGet(...endpoints) {
|
|
259
|
+
this.allow(['get'], ...endpoints);
|
|
260
|
+
}
|
|
261
|
+
/**
|
|
262
|
+
* Add "list" permission for the resources.
|
|
263
|
+
* @param endpoints The resource(s) to apply to
|
|
264
|
+
*/
|
|
265
|
+
allowList(...endpoints) {
|
|
266
|
+
this.allow(['list'], ...endpoints);
|
|
267
|
+
}
|
|
268
|
+
/**
|
|
269
|
+
* Add "watch" permission for the resources.
|
|
270
|
+
* @param endpoints The resource(s) to apply to
|
|
271
|
+
*/
|
|
272
|
+
allowWatch(...endpoints) {
|
|
273
|
+
this.allow(['watch'], ...endpoints);
|
|
274
|
+
}
|
|
275
|
+
/**
|
|
276
|
+
* Add "update" permission for the resources.
|
|
277
|
+
* @param endpoints The resource(s) to apply to
|
|
278
|
+
*/
|
|
279
|
+
allowUpdate(...endpoints) {
|
|
280
|
+
this.allow(['update'], ...endpoints);
|
|
281
|
+
}
|
|
282
|
+
/**
|
|
283
|
+
* Add "patch" permission for the resources.
|
|
284
|
+
* @param endpoints The resource(s) to apply to
|
|
285
|
+
*/
|
|
286
|
+
allowPatch(...endpoints) {
|
|
287
|
+
this.allow(['patch'], ...endpoints);
|
|
288
|
+
}
|
|
289
|
+
/**
|
|
290
|
+
* Add "delete" permission for the resources.
|
|
291
|
+
* @param endpoints The resource(s) to apply to
|
|
292
|
+
*/
|
|
293
|
+
allowDelete(...endpoints) {
|
|
294
|
+
this.allow(['delete'], ...endpoints);
|
|
295
|
+
}
|
|
296
|
+
/**
|
|
297
|
+
* Add "deletecollection" permission for the resources.
|
|
298
|
+
* @param endpoints The resource(s) to apply to
|
|
299
|
+
*/
|
|
300
|
+
allowDeleteCollection(...endpoints) {
|
|
301
|
+
this.allow(['deletecollection'], ...endpoints);
|
|
302
|
+
}
|
|
303
|
+
/**
|
|
304
|
+
* Add "get", "list", and "watch" permissions for the resources.
|
|
305
|
+
* @param endpoints The resource(s) to apply to
|
|
306
|
+
*/
|
|
307
|
+
allowRead(...endpoints) {
|
|
308
|
+
this.allow(['get', 'list', 'watch'], ...endpoints);
|
|
309
|
+
}
|
|
310
|
+
/**
|
|
311
|
+
* Add "get", "list", "watch", "create", "update", "patch", "delete", and
|
|
312
|
+
* "deletecollection" permissions for the resources.
|
|
313
|
+
*
|
|
314
|
+
* @param endpoints The resource(s) to apply to
|
|
315
|
+
*/
|
|
316
|
+
allowReadWrite(...endpoints) {
|
|
317
|
+
this.allow(['get', 'list', 'watch', 'create', 'update', 'patch', 'delete', 'deletecollection'], ...endpoints);
|
|
318
|
+
}
|
|
319
|
+
/**
|
|
320
|
+
* Aggregate rules from roles matching this label selector.
|
|
321
|
+
*/
|
|
322
|
+
aggregate(key, value) {
|
|
323
|
+
this._labelSelector[key] = value;
|
|
324
|
+
}
|
|
325
|
+
/**
|
|
326
|
+
* Combines the rules of the argument ClusterRole into this ClusterRole
|
|
327
|
+
* using aggregation labels.
|
|
328
|
+
* @param rol
|
|
329
|
+
*/
|
|
330
|
+
combine(rol) {
|
|
331
|
+
const key = `cdk8s.cluster-role/aggregate-to-${cdk8s_1.Names.toLabelValue(this)}`;
|
|
332
|
+
const value = 'true';
|
|
333
|
+
rol.metadata.addLabel(key, value);
|
|
334
|
+
this.aggregate(key, value);
|
|
335
|
+
}
|
|
336
|
+
/**
|
|
337
|
+
* Create a RoleBinding that binds the permissions in this ClusterRole
|
|
338
|
+
* to a list of subjects, that will only apply to the given namespace.
|
|
339
|
+
* @param namespace the namespace to limit permissions to.
|
|
340
|
+
* @param subjects a list of subjects to bind to
|
|
341
|
+
*/
|
|
342
|
+
bindInNamespace(namespace, ...subjects) {
|
|
343
|
+
const binding = new rb.RoleBinding(this, `RoleBinding-${namespace}`, {
|
|
344
|
+
metadata: {
|
|
345
|
+
namespace,
|
|
346
|
+
},
|
|
347
|
+
role: this,
|
|
348
|
+
});
|
|
349
|
+
binding.addSubjects(...subjects);
|
|
350
|
+
return binding;
|
|
351
|
+
}
|
|
352
|
+
/**
|
|
353
|
+
* Create a ClusterRoleBinding that binds the permissions in this
|
|
354
|
+
* ClusterRole to a list of subjects, without namespace restrictions.
|
|
355
|
+
* @param subjects a list of subjects to bind to
|
|
356
|
+
*/
|
|
357
|
+
bind(...subjects) {
|
|
358
|
+
const binding = new rb.ClusterRoleBinding(this, 'ClusterRoleBinding', {
|
|
359
|
+
role: this,
|
|
360
|
+
});
|
|
361
|
+
binding.addSubjects(...subjects);
|
|
362
|
+
return binding;
|
|
363
|
+
}
|
|
364
|
+
synthesizeRules() {
|
|
365
|
+
const rules = [];
|
|
366
|
+
for (const rule of this._rules) {
|
|
367
|
+
for (const endpoint of rule.endpoints) {
|
|
368
|
+
const resource = endpoint.asApiResource();
|
|
369
|
+
const nonResource = endpoint.asNonApiResource();
|
|
370
|
+
if (resource && nonResource) {
|
|
371
|
+
throw new Error('Endpoint must be either resource or non resource. not both.');
|
|
372
|
+
}
|
|
373
|
+
if (!resource && !nonResource) {
|
|
374
|
+
throw new Error('Endpoint must be either resource or non resource. not neither.');
|
|
375
|
+
}
|
|
376
|
+
if (resource) {
|
|
377
|
+
rules.push({
|
|
378
|
+
apiGroups: [resource.apiGroup === 'core' ? '' : resource.apiGroup],
|
|
379
|
+
resources: [resource.resourceType],
|
|
380
|
+
resourceNames: resource.resourceName ? [resource.resourceName] : [],
|
|
381
|
+
verbs: rule.verbs,
|
|
382
|
+
});
|
|
383
|
+
}
|
|
384
|
+
if (nonResource) {
|
|
385
|
+
rules.push({ verbs: rule.verbs, nonResourceUrLs: [nonResource] });
|
|
386
|
+
}
|
|
387
|
+
}
|
|
388
|
+
}
|
|
389
|
+
return rules;
|
|
390
|
+
}
|
|
391
|
+
synthesizeAggregationRules() {
|
|
392
|
+
if (Object.keys(this._labelSelector).length === 0) {
|
|
393
|
+
return undefined;
|
|
394
|
+
}
|
|
395
|
+
return { clusterRoleSelectors: [{ matchLabels: this._labelSelector }] };
|
|
396
|
+
}
|
|
397
|
+
}
|
|
398
|
+
exports.ClusterRole = ClusterRole;
|
|
399
|
+
_b = JSII_RTTI_SYMBOL_1;
|
|
400
|
+
ClusterRole[_b] = { fqn: "cdk8s-plus-31.ClusterRole", version: "2.0.0" };
|
|
401
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicm9sZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3NyYy9yb2xlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7O0FBQUEsaUNBQStDO0FBQy9DLDJDQUF1QztBQUV2QywrQkFBK0I7QUFDL0IscUNBQXFDO0FBQ3JDLHFDQUFxQztBQUNyQyxtQ0FBa0M7QUFzQ2xDLE1BQU0sWUFBYSxTQUFRLHNCQUFTO0lBTWxDLFlBQVksS0FBZ0IsRUFBRSxFQUFVLEVBQUUsSUFBWTtRQUNwRCxLQUFLLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxDQUFDO1FBSEgsaUJBQVksR0FBRyxPQUFPLENBQUM7UUFJckMsSUFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUM7SUFDcEIsQ0FBQztJQUVELElBQVcsSUFBSTtRQUNiLE9BQU8sSUFBSSxDQUFDLEtBQUssQ0FBQztJQUNwQixDQUFDO0lBRUQsSUFBVyxVQUFVO1FBQ25CLE9BQU8sR0FBRyxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsVUFBVSxDQUFDO0lBQ3JDLENBQUM7SUFFRCxJQUFXLFFBQVE7UUFDakIsT0FBTywyQkFBMkIsQ0FBQztJQUNyQyxDQUFDO0lBRUQsSUFBVyxJQUFJO1FBQ2IsT0FBTyxHQUFHLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUM7SUFDL0IsQ0FBQztJQUVELElBQVcsWUFBWTtRQUNyQixPQUFPLElBQUksQ0FBQyxJQUFJLENBQUM7SUFDbkIsQ0FBQztDQUVGO0FBRUQ7OztHQUdHO0FBQ0gsTUFBYSxJQUFLLFNBQVEsSUFBSSxDQUFDLFFBQVE7SUFrQnJDLFlBQVksS0FBZ0IsRUFBRSxFQUFVLEVBQUUsUUFBbUIsRUFBRTtRQUM3RCxLQUFLLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxDQUFDO1FBTEgsaUJBQVksR0FBRyxPQUFPLENBQUM7UUFFdEIsV0FBTSxHQUEwQixFQUFFLENBQUM7UUFLbEQsSUFBSSxDQUFDLFNBQVMsR0FBRyxJQUFJLEdBQUcs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QkFDbEMsYUFBYSxFQUFFLFFBQVEsQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLFlBQVksQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFO3dCQUNuRSxLQUFLLEVBQUUsSUFBSSxDQUFDLEtBQUs7cUJBQ2xCLENBQUMsQ0FBQztpQkFDSjtnQkFDRCxJQUFJLFdBQVcsRUFBRTtvQkFDZixLQUFLLENBQUMsSUFBSSxDQUFDLEVBQUUsS0FBSyxFQUFFLElBQUksQ0FBQyxLQUFLLEVBQUUsZUFBZSxFQUFFLENBQUMsV0FBVyxDQUFDLEVBQUUsQ0FBQyxDQUFDO2lCQUNuRTthQUNGO1NBRUY7UUFDRCxPQUFPLEtBQUssQ0FBQztJQUNmLENBQUM7SUFFTywwQkFBMEI7UUFDaEMsSUFBSSxNQUFNLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxjQUFjLENBQUMsQ0FBQyxNQUFNLEtBQUssQ0FBQyxFQUFFO1lBQ2pELE9BQU8sU0FBUyxDQUFDO1NBQ2xCO1FBRUQsT0FBTyxFQUFFLG9CQUFvQixFQUFFLENBQUMsRUFBRSxXQUFXLEVBQUUsSUFBSSxDQUFDLGNBQWMsRUFBRSxDQUFDLEVBQUUsQ0FBQztJQUMxRSxDQUFDOztBQWpPSCxrQ0FrT0MiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBBcGlPYmplY3QsIExhenksIE5hbWVzIH0gZnJvbSAnY2RrOHMnO1xuaW1wb3J0IHsgQ29uc3RydWN0IH0gZnJvbSAnY29uc3RydWN0cyc7XG5pbXBvcnQgeyBJQXBpUmVzb3VyY2UsIElBcGlFbmRwb2ludCB9IGZyb20gJy4vYXBpLXJlc291cmNlJztcbmltcG9ydCAqIGFzIGJhc2UgZnJvbSAnLi9iYXNlJztcbmltcG9ydCAqIGFzIGs4cyBmcm9tICcuL2ltcG9ydHMvazhzJztcbmltcG9ydCAqIGFzIHJiIGZyb20gJy4vcm9sZS1iaW5kaW5nJztcbmltcG9ydCB7IGFkZHJlc3MgfSBmcm9tICcuL3V0aWxzJztcblxuLyoqXG4gKiBBIHJlZmVyZW5jZSB0byBhbnkgUm9sZSBvciBDbHVzdGVyUm9sZS5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBJUm9sZSBleHRlbmRzIGJhc2UuSVJlc291cmNlIHtcblxufVxuXG4vKipcbiAqIFByb3BlcnRpZXMgZm9yIGBSb2xlYC5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBSb2xlUHJvcHMgZXh0ZW5kcyBiYXNlLlJlc291cmNlUHJvcHMge1xuXG4gIC8qKlxuICAgKiBBIGxpc3Qgb2YgcnVsZXMgdGhlIHJvbGUgc2hvdWxkIGFsbG93LlxuICAgKlxuICAgKiBAZGVmYXVsdCBbXVxuICAgKi9cbiAgcmVhZG9ubHkgcnVsZXM/OiBSb2xlUG9saWN5UnVsZVtdO1xufVxuXG4vKipcbiAqIFBvbGljeSBydWxlIG9mIGEgYFJvbGUuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUm9sZVBvbGljeVJ1bGUge1xuXG4gIC8qKlxuICAgKiBWZXJicyB0byBhbGxvdy4gKGUuZyBbJ2dldCcsICd3YXRjaCddKVxuICAgKi9cbiAgcmVhZG9ubHkgdmVyYnM6IHN0cmluZ1tdO1xuXG4gIC8qKlxuICAgKiBSZXNvdXJjZXMgdGhpcyBydWxlIGFwcGxpZXMgdG8uXG4gICAqL1xuICByZWFkb25seSByZXNvdXJjZXM6IElBcGlSZXNvdXJjZVtdO1xufVxuXG5jbGFzcyBJbXBvcnRlZFJvbGUgZXh0ZW5kcyBDb25zdHJ1Y3QgaW1wbGVtZW50cyBJUm9sZSB7XG5cbiAgcHJpdmF0ZSByZWFkb25seSBfbmFtZTogc3RyaW5nO1xuXG4gIHB1YmxpYyByZWFkb25seSByZXNvdXJjZVR5cGUgPSAncm9sZXMnO1xuXG4gIGNvbnN0cnVjdG9yKHNjb3BlOiBDb25zdHJ1Y3QsIGlkOiBzdHJpbmcsIG5hbWU6IHN0cmluZykge1xuICAgIHN1cGVyKHNjb3BlLCBpZCk7XG4gICAgdGhpcy5fbmFtZSA9IG5hbWU7XG4gIH1cblxuICBwdWJsaWMgZ2V0IG5hbWUoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5fbmFtZTtcbiAgfVxuXG4gIHB1YmxpYyBnZXQgYXBpVmVyc2lvbigpOiBzdHJpbmcge1xuICAgIHJldHVybiBrOHMuS3ViZVJvbGUuR1ZLLmFwaVZlcnNpb247XG4gIH1cblxuICBwdWJsaWMgZ2V0IGFwaUdyb3VwKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuICdyYmFjLmF1dGhvcml6YXRpb24uazhzLmlvJztcbiAgfVxuXG4gIHB1YmxpYyBnZXQga2luZCgpOiBzdHJpbmcge1xuICAgIHJldHVybiBrOHMuS3ViZVJvbGUuR1ZLLmtpbmQ7XG4gIH1cblxuICBwdWJsaWMgZ2V0IHJlc291cmNlTmFtZSgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLm5hbWU7XG4gIH1cblxufVxuXG4vKipcbiAqIFJvbGUgaXMgYSBuYW1lc3BhY2VkLCBsb2dpY2FsIGdyb3VwaW5nIG9mIFBvbGljeVJ1bGVzIHRoYXQgY2FuIGJlIHJlZmVyZW5jZWRcbiAqIGFzIGEgdW5pdCBieSBhIFJvbGVCaW5kaW5nLlxuICovXG5leHBvcnQgY2xhc3MgUm9sZSBleHRlbmRzIGJhc2UuUmVzb3VyY2UgaW1wbGVtZW50cyBJUm9sZSB7XG5cbiAgLyoqXG4gICAqIEltcG9ydHMgYSByb2xlIGZyb20gdGhlIGNsdXN0ZXIgYXMgYSByZWZlcmVuY2UuXG4gICAqL1xuICBwdWJsaWMgc3RhdGljIGZyb21Sb2xlTmFtZShzY29wZTogQ29uc3RydWN0LCBpZDogc3RyaW5nLCBuYW1lOiBzdHJpbmcpOiBJUm9sZSB7XG4gICAgcmV0dXJuIG5ldyBJbXBvcnRlZFJvbGUoc2NvcGUsIGlkLCBuYW1lKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAc2VlIGJhc2UuUmVzb3VyY2UuYXBpT2JqZWN0XG4gICAqL1xuICBwcm90ZWN0ZWQgcmVhZG9ubHkgYXBpT2JqZWN0OiBBcGlPYmplY3Q7XG5cbiAgcHVibGljIHJlYWRvbmx5IHJlc291cmNlVHlwZSA9ICdyb2xlcyc7XG5cbiAgcHJpdmF0ZSByZWFkb25seSBfcnVsZXM6IEFycmF5PFJvbGVQb2xpY3lSdWxlPiA9IFtdO1xuXG4gIGNvbnN0cnVjdG9yKHNjb3BlOiBDb25zdHJ1Y3QsIGlkOiBzdHJpbmcsIHByb3BzOiBSb2xlUHJvcHMgPSB7fSkge1xuICAgIHN1cGVyKHNjb3BlLCBpZCk7XG5cbiAgICB0aGlzLmFwaU9iamVjdCA9IG5ldyBrOHMuS3ViZVJvbGUodGhpcywgJ1Jlc291cmNlJywge1xuICAgICAgbWV0YWRhdGE6IHByb3BzLm1ldGFkYXRhLFxuICAgICAgcnVsZXM6IExhenkuYW55KHsgcHJvZHVjZTogKCkgPT4gdGhpcy5zeW50aGVzaXplUnVsZXMoKSB9KSxcbiAgICB9KTtcblxuICAgIGZvciAoY29uc3QgcnVsZSBvZiBwcm9wcy5ydWxlcyA/PyBbXSkge1xuICAgICAgdGhpcy5hbGxvdyhydWxlLnZlcmJzLCAuLi5ydWxlLnJlc291cmNlcyk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFJ1bGVzIGFzc29jaWFhdGVkIHdpdGggdGhpcyBSb2xlLlxuICAgKiBSZXR1cm5zIGEgY29weSwgdXNlIGBhbGxvd2AgdG8gYWRkIHJ1bGVzLlxuICAgKi9cbiAgcHVibGljIGdldCBydWxlcygpOiBSb2xlUG9saWN5UnVsZVtdIHtcbiAgICByZXR1cm4gWy4uLnRoaXMuX3J1bGVzXTtcbiAgfVxuXG4gIC8qKlxuICAgKiBBZGQgcGVybWlzc2lvbiB0byBwZXJmb3JtIGEgbGlzdCBvZiBIVFRQIHZlcmJzIG9uIGEgY29sbGVjdGlvbiBvZlxuICAgKiByZXNvdXJjZXMuXG4gICAqXG4gICAqIEBwYXJhbSByZXNvdXJjZXMgVGhlIHJlc291cmNlKHMpIHRvIGFwcGx5IHRvXG4gICAqIEBzZWUgaHR0cHM6Ly9rdWJlcm5ldGVzLmlvL2RvY3MvcmVmZXJlbmNlL2FjY2Vzcy1hdXRobi1hdXRoei9hdXRob3JpemF0aW9uLyNkZXRlcm1pbmUtdGhlLXJlcXVlc3QtdmVyYlxuICAgKi9cbiAgcHVibGljIGFsbG93KHZlcmJzOiBzdHJpbmdbXSwgLi4ucmVzb3VyY2VzOiBJQXBpUmVzb3VyY2VbXSk6IHZvaWQge1xuICAgIHRoaXMuX3J1bGVzLnB1c2goeyB2ZXJicywgcmVzb3VyY2VzIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIEFkZCBcImNyZWF0ZVwiIHBlcm1pc3Npb24gZm9yIHRoZSByZXNvdXJjZXMuXG4gICAqIEBwYXJhbSByZXNvdXJjZXMgVGhlIHJlc291cmNlKHMpIHRvIGFwcGx5IHRvXG4gICAqL1xuICBwdWJsaWMgYWxsb3dDcmVhdGUoLi4ucmVzb3VyY2VzOiBJQXBpUmVzb3VyY2VbXSk6IHZvaWQge1xuICAgIHRoaXMuYWxsb3coWydjcmVhdGUnXSwgLi4ucmVzb3VyY2VzKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBBZGQgXCJnZXRcIiBwZXJtaXNzaW9uIGZvciB0aGUgcmVzb3VyY2VzLlxuICAgKiBAcGFyYW0gcmVzb3VyY2VzIFRoZSByZXNvdXJjZShzKSB0byBhcHBseSB0b1xuICAgKi9cbiAgcHVibGljIGFsbG93R2V0KC4uLnJlc291cmNlczogSUFwaVJlc291cmNlW10pOiB2b2lkIHtcbiAgICB0aGlzLmFsbG93KFsnZ2V0J10sIC4uLnJlc291cmNlcyk7XG4gIH1cblxuICAvKipcbiAgICogQWRkIFwibGlzdFwiIHBlcm1pc3Npb24gZm9yIHRoZSByZXNvdXJjZXMuXG4gICAqIEBwYXJhbSByZXNvdXJjZXMgVGhlIHJlc291cmNlKHMpIHRvIGFwcGx5IHRvXG4gICAqL1xuICBwdWJsaWMgYWxsb3dMaXN0KC4uLnJlc291cmNlczogSUFwaVJlc291cmNlW10pOiB2b2lkIHtcbiAgICB0aGlzLmFsbG93KFsnbGlzdCddLCAuLi5yZXNvdXJjZXMpO1xuICB9XG5cbiAgLyoqXG4gICAqIEFkZCBcIndhdGNoXCIgcGVybWlzc2lvbiBmb3IgdGhlIHJlc291cmNlcy5cbiAgICogQHBhcmFtIHJlc291cmNlcyBUaGUgcmVzb3VyY2UocykgdG8gYXBwbHkgdG9cbiAgICovXG4gIHB1YmxpYyBhbGxvd1dhdGNoKC4uLnJlc291cmNlczogSUFwaVJlc291cmNlW10pOiB2b2lkIHtcbiAgICB0aGlzLmFsbG93KFsnd2F0Y2gnXSwgLi4ucmVzb3VyY2VzKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBBZGQgXCJ1cGRhdGVcIiBwZXJtaXNzaW9uIGZvciB0aGUgcmVzb3VyY2VzLlxuICAgKiBAcGFyYW0gcmVzb3VyY2VzIFRoZSByZXNvdXJjZShzKSB0byBhcHBseSB0b1xuICAgKi9cbiAgcHVibGljIGFsbG93VXBkYXRlKC4uLnJlc291cmNlczogSUFwaVJlc291cmNlW10pOiB2b2lkIHtcbiAgICB0aGlzLmFsbG93KFsndXBkYXRlJ10sIC4uLnJlc291cmNlcyk7XG4gIH1cblxuICAvKipcbiAgICogQWRkIFwicGF0Y2hcIiBwZXJtaXNzaW9uIGZvciB0aGUgcmVzb3VyY2VzLlxuICAgKiBAcGFyYW0gcmVzb3VyY2VzIFRoZSByZXNvdXJjZShzKSB0byBhcHBseSB0b1xuICAgKi9cbiAgcHVibGljIGFsbG93UGF0Y2goLi4ucmVzb3VyY2VzOiBJQXBpUmVzb3VyY2VbXSk6IHZvaWQge1xuICAgIHRoaXMuYWxsb3coWydwYXRjaCddLCAuLi5yZXNvdXJjZXMpO1xuICB9XG5cbiAgLyoqXG4gICAqIEFkZCBcImRlbGV0ZVwiIHBlcm1pc3Npb24gZm9yIHRoZSByZXNvdXJjZXMuXG4gICAqIEBwYXJhbSByZXNvdXJjZXMgVGhlIHJlc291cmNlKHMpIHRvIGFwcGx5IHRvXG4gICAqL1xuICBwdWJsaWMgYWxsb3dEZWxldGUoLi4ucmVzb3VyY2VzOiBJQXBpUmVzb3VyY2VbXSk6IHZvaWQge1xuICAgIHRoaXMuYWxsb3coWydkZWxldGUnXSwgLi4ucmVzb3VyY2VzKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBBZGQgXCJkZWxldGVjb2xsZWN0aW9uXCIgcGVybWlzc2lvbiBmb3IgdGhlIHJlc291cmNlcy5cbiAgICogQHBhcmFtIHJlc291cmNlcyBUaGUgcmVzb3VyY2UocykgdG8gYXBwbHkgdG9cbiAgICovXG4gIHB1YmxpYyBhbGxvd0RlbGV0ZUNvbGxlY3Rpb24oLi4ucmVzb3VyY2VzOiBJQXBpUmVzb3VyY2VbXSk6IHZvaWQge1xuICAgIHRoaXMuYWxsb3coWydkZWxldGVjb2xsZWN0aW9uJ10sIC4uLnJlc291cmNlcyk7XG4gIH1cblxuICAvKipcbiAgICogQWRkIFwiZ2V0XCIsIFwibGlzdFwiLCBhbmQgXCJ3YXRjaFwiIHBlcm1pc3Npb25zIGZvciB0aGUgcmVzb3VyY2VzLlxuICAgKiBAcGFyYW0gcmVzb3VyY2VzIFRoZSByZXNvdXJjZShzKSB0byBhcHBseSB0b1xuICAgKi9cbiAgcHVibGljIGFsbG93UmVhZCguLi5yZXNvdXJjZXM6IElBcGlSZXNvdXJjZVtdKTogdm9pZCB7XG4gICAgdGhpcy5hbGxvdyhbJ2dldCcsICdsaXN0JywgJ3dhdGNoJ10sIC4uLnJlc291cmNlcyk7XG4gIH1cblxuICAvKipcbiAgICogQWRkIFwiZ2V0XCIsIFwibGlzdFwiLCBcIndhdGNoXCIsIFwiY3JlYXRlXCIsIFwidXBkYXRlXCIsIFwicGF0Y2hcIiwgXCJkZWxldGVcIiwgYW5kXG4gICAqIFwiZGVsZXRlY29sbGVjdGlvblwiIHBlcm1pc3Npb25zIGZvciB0aGUgcmVzb3VyY2VzLlxuICAgKlxuICAgKiBAcGFyYW0gcmVzb3VyY2VzIFRoZSByZXNvdXJjZShzKSB0byBhcHBseSB0b1xuICAgKi9cbiAgcHVibGljIGFsbG93UmVhZFdyaXRlKC4uLnJlc291cmNlczogSUFwaVJlc291cmNlW10pOiB2b2lkIHtcbiAgICB0aGlzLmFsbG93KFsnZ2V0JywgJ2xpc3QnLCAnd2F0Y2gnLCAnY3JlYXRlJywgJ3VwZGF0ZScsICdwYXRjaCcsICdkZWxldGUnLCAnZGVsZXRlY29sbGVjdGlvbiddLCAuLi5yZXNvdXJjZXMpO1xuICB9XG5cbiAgLyoqXG4gICAqIENyZWF0ZSBhIFJvbGVCaW5kaW5nIHRoYXQgYmluZHMgdGhlIHBlcm1pc3Npb25zIGluIHRoaXMgUm9sZVxuICAgKiB0byBhIGxpc3Qgb2Ygc3ViamVjdHMsIHRoYXQgd2lsbCBvbmx5IGFwcGx5IHRoaXMgcm9sZSdzIG5hbWVzcGFjZS5cbiAgICogQHBhcmFtIHN1YmplY3RzIGEgbGlzdCBvZiBzdWJqZWN0cyB0byBiaW5kIHRvXG4gICAqL1xuICBwdWJsaWMgYmluZCguLi5zdWJqZWN0czogcmIuSVN1YmplY3RbXSk6IHJiLlJvbGVCaW5kaW5nIHtcbiAgICBjb25zdCBzdWJqZWN0c0FkZHJlc3MgPSBhZGRyZXNzKC4uLnN1YmplY3RzKTtcbiAgICBjb25zdCBiaW5kaW5nID0gbmV3IHJiLlJvbGVCaW5kaW5nKHRoaXMsIGBSb2xlQmluZGluZyR7c3ViamVjdHNBZGRyZXNzfWAsIHtcbiAgICAgIG1ldGFkYXRhOiB7XG4gICAgICAgIG5hbWVzcGFjZTogdGhpcy5tZXRhZGF0YS5uYW1lc3BhY2UsXG4gICAgICB9LFxuICAgICAgcm9sZTogdGhpcyxcbiAgICB9KTtcbiAgICBiaW5kaW5nLmFkZFN1YmplY3RzKC4uLnN1YmplY3RzKTtcbiAgICByZXR1cm4gYmluZGluZztcbiAgfVxuXG4gIHByaXZhdGUgc3ludGhlc2l6ZVJ1bGVzKCk6IGs4cy5Qb2xpY3lSdWxlW10ge1xuICAgIGNvbnN0IHJ1bGVzOiBrOHMuUG9saWN5UnVsZVtdID0gW107XG4gICAgZm9yIChjb25zdCBydWxlIG9mIHRoaXMuX3J1bGVzKSB7XG4gICAgICBmb3IgKGNvbnN0IHJlc291cmNlIG9mIHJ1bGUucmVzb3VyY2VzKSB7XG4gICAgICAgIHJ1bGVzLnB1c2goe1xuICAgICAgICAgIHZlcmJzOiBydWxlLnZlcmJzLFxuICAgICAgICAgIGFwaUdyb3VwczogW3Jlc291cmNlLmFwaUdyb3VwID09PSAnY29yZScgPyAnJyA6IHJlc291cmNlLmFwaUdyb3VwXSxcbiAgICAgICAgICByZXNvdXJjZU5hbWVzOiByZXNvdXJjZS5yZXNvdXJjZU5hbWUgPyBbcmVzb3VyY2UucmVzb3VyY2VOYW1lXSA6IHVuZGVmaW5lZCxcbiAgICAgICAgICByZXNvdXJjZXM6IHJlc291cmNlLnJlc291cmNlVHlwZSA/IFtyZXNvdXJjZS5yZXNvdXJjZVR5cGVdIDogdW5kZWZpbmVkLFxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHJ1bGVzO1xuICB9XG59XG5cbi8qKlxuICogUmVwcmVzZW50cyBhIGNsdXN0ZXItbGV2ZWwgcm9sZS5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBJQ2x1c3RlclJvbGUgZXh0ZW5kcyBiYXNlLklSZXNvdXJjZSB7XG5cbn1cblxuLyoqXG4gKiBQcm9wZXJ0aWVzIGZvciBgQ2x1c3RlclJvbGVgLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIENsdXN0ZXJSb2xlUHJvcHMgZXh0ZW5kcyBiYXNlLlJlc291cmNlUHJvcHMge1xuXG4gIC8qKlxuICAgICogQSBsaXN0IG9mIHJ1bGVzIHRoZSByb2xlIHNob3VsZCBhbGxvdy5cbiAgICAqXG4gICAgKiBAZGVmYXVsdCBbXVxuICAgICovXG4gIHJlYWRvbmx5IHJ1bGVzPzogQ2x1c3RlclJvbGVQb2xpY3lSdWxlW107XG5cbiAgLyoqXG4gICAgKiBTcGVjaWZ5IGxhYmVscyB0aGF0IHNob3VsZCBiZSB1c2VkIHRvIGxvY2F0ZSBDbHVzdGVyUm9sZXMsIHdob3NlIHJ1bGVzXG4gICAgKiB3aWxsIGJlIGF1dG9tYXRpY2FsbHkgZmlsbGVkIGludG8gdGhpcyBDbHVzdGVyUm9sZSdzIHJ1bGVzLlxuICAgICovXG4gIHJlYWRvbmx5IGFnZ3JlZ2F0aW9uTGFiZWxzPzogeyBba2V5OiBzdHJpbmddOiBzdHJpbmcgfTtcbn1cblxuLyoqXG4gKiBQb2xpY3kgcnVsZSBvZiBhIGBDbHVzdGVyUm9sZS5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBDbHVzdGVyUm9sZVBvbGljeVJ1bGUge1xuXG4gIC8qKlxuICAgKiBWZXJicyB0byBhbGxvdy4gKGUuZyBbJ2dldCcsICd3YXRjaCddKVxuICAgKi9cbiAgcmVhZG9ubHkgdmVyYnM6IHN0cmluZ1tdO1xuXG4gIC8qKlxuICAgKiBFbmRwb2ludHMgdGhpcyBydWxlIGFwcGxpZXMgdG8uIENhbiBiZSBlaXRoZXIgYXBpIHJlc291cmNlc1xuICAgKiBvciBub24gYXBpIHJlc291cmNlcy5cbiAgICovXG4gIHJlYWRvbmx5IGVuZHBvaW50czogSUFwaUVuZHBvaW50W107XG59XG5cbmNsYXNzIEltcG9ydGVkQ2x1c3RlclJvbGUgZXh0ZW5kcyBDb25zdHJ1Y3QgaW1wbGVtZW50cyBJQ2x1c3RlclJvbGUge1xuXG4gIHByaXZhdGUgcmVhZG9ubHkgX25hbWU6IHN0cmluZztcblxuICBwdWJsaWMgcmVhZG9ubHkgcmVzb3VyY2VUeXBlOiBzdHJpbmcgPSAnY2x1c3RlcnJvbGVzJztcblxuICBjb25zdHJ1Y3RvcihzY29wZTogQ29uc3RydWN0LCBpZDogc3RyaW5nLCBuYW1lOiBzdHJpbmcpIHtcbiAgICBzdXBlcihzY29wZSwgaWQpO1xuICAgIHRoaXMuX25hbWUgPSBuYW1lO1xuICB9XG5cbiAgcHVibGljIGdldCBuYW1lKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuX25hbWU7XG4gIH1cblxuICBwdWJsaWMgZ2V0IGFwaVZlcnNpb24oKTogc3RyaW5nIHtcbiAgICByZXR1cm4gazhzLkt1YmVDbHVzdGVyUm9sZS5HVksuYXBpVmVyc2lvbjtcbiAgfVxuXG4gIHB1YmxpYyBnZXQgYXBpR3JvdXAoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gJ3JiYWMuYXV0aG9yaXphdGlvbi5rOHMuaW8nO1xuICB9XG5cbiAgcHVibGljIGdldCBraW5kKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIGs4cy5LdWJlQ2x1c3RlclJvbGUuR1ZLLmtpbmQ7XG4gIH1cblxuICBwdWJsaWMgZ2V0IHJlc291cmNlTmFtZSgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLm5hbWU7XG4gIH1cblxufVxuXG4vKipcbiAqIENsdXN0ZXJSb2xlIGlzIGEgY2x1c3RlciBsZXZlbCwgbG9naWNhbCBncm91cGluZyBvZiBQb2xpY3lSdWxlcyB0aGF0IGNhbiBiZVxuICogcmVmZXJlbmNlZCBhcyBhIHVuaXQgYnkgYSBSb2xlQmluZGluZyBvciBDbHVzdGVyUm9sZUJpbmRpbmcuXG4gKi9cbmV4cG9ydCBjbGFzcyBDbHVzdGVyUm9sZSBleHRlbmRzIGJhc2UuUmVzb3VyY2UgaW1wbGVtZW50cyBJQ2x1c3RlclJvbGUsIElSb2xlIHtcblxuICAvKipcbiAgICogSW1wb3J0cyBhIHJvbGUgZnJvbSB0aGUgY2x1c3RlciBhcyBhIHJlZmVyZW5jZS5cbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgZnJvbUNsdXN0ZXJSb2xlTmFtZShzY29wZTogQ29uc3RydWN0LCBpZDogc3RyaW5nLCBuYW1lOiBzdHJpbmcpOiBJQ2x1c3RlclJvbGUge1xuICAgIHJldHVybiBuZXcgSW1wb3J0ZWRDbHVzdGVyUm9sZShzY29wZSwgaWQsIG5hbWUpO1xuICB9XG5cbiAgLyoqXG4gICAqIEBzZWUgYmFzZS5SZXNvdXJjZS5hcGlPYmplY3RcbiAgICovXG4gIHByb3RlY3RlZCByZWFkb25seSBhcGlPYmplY3Q6IEFwaU9iamVjdDtcblxuICBwdWJsaWMgcmVhZG9ubHkgcmVzb3VyY2VUeXBlID0gJ2NsdXN0ZXJyb2xlcyc7XG5cbiAgcHJpdmF0ZSByZWFkb25seSBfbGFiZWxTZWxlY3RvcjogUmVjb3JkPHN0cmluZywgc3RyaW5nPiA9IHt9O1xuICBwcml2YXRlIHJlYWRvbmx5IF9ydWxlczogQXJyYXk8Q2x1c3RlclJvbGVQb2xpY3lSdWxlPiA9IFtdO1xuXG4gIGNvbnN0cnVjdG9yKHNjb3BlOiBDb25zdHJ1Y3QsIGlkOiBzdHJpbmcsIHByb3BzOiBDbHVzdGVyUm9sZVByb3BzID0ge30pIHtcbiAgICBzdXBlcihzY29wZSwgaWQpO1xuXG4gICAgdGhpcy5hcGlPYmplY3QgPSBuZXcgazhzLkt1YmVDbHVzdGVyUm9sZSh0aGlzLCAnUmVzb3VyY2UnLCB7XG4gICAgICBtZXRhZGF0YTogcHJvcHMubWV0YWRhdGEsXG4gICAgICBydWxlczogTGF6eS5hbnkoeyBwcm9kdWNlOiAoKSA9PiB0aGlzLnN5bnRoZXNpemVSdWxlcygpIH0pLFxuICAgICAgYWdncmVnYXRpb25SdWxlOiBMYXp5LmFueSh7IHByb2R1Y2U6ICgpID0+IHRoaXMuc3ludGhlc2l6ZUFnZ3JlZ2F0aW9uUnVsZXMoKSB9KSxcbiAgICB9KTtcblxuICAgIGZvciAoY29uc3QgcnVsZSBvZiBwcm9wcy5ydWxlcyA/PyBbXSkge1xuICAgICAgdGhpcy5hbGxvdyhydWxlLnZlcmJzLCAuLi5ydWxlLmVuZHBvaW50cyk7XG4gICAgfVxuXG4gICAgZm9yIChjb25zdCBba2V5LCB2YWx1ZV0gb2YgT2JqZWN0LmVudHJpZXMocHJvcHMuYWdncmVnYXRpb25MYWJlbHMgPz8ge30pKSB7XG4gICAgICB0aGlzLmFnZ3JlZ2F0ZShrZXksIHZhbHVlKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogUnVsZXMgYXNzb2NpYWF0ZWQgd2l0aCB0aGlzIFJvbGUuXG4gICAqIFJldHVybnMgYSBjb3B5LCB1c2UgYGFsbG93YCB0byBhZGQgcnVsZXMuXG4gICAqL1xuICBwdWJsaWMgZ2V0IHJ1bGVzKCk6IENsdXN0ZXJSb2xlUG9saWN5UnVsZVtdIHtcbiAgICByZXR1cm4gWy4uLnRoaXMuX3J1bGVzXTtcbiAgfVxuXG4gIC8qKlxuICAgKiBBZGQgcGVybWlzc2lvbiB0byBwZXJmb3JtIGEgbGlzdCBvZiBIVFRQIHZlcmJzIG9uIGEgY29sbGVjdGlvbiBvZlxuICAgKiByZXNvdXJjZXMuXG4gICAqXG4gICAqIEBwYXJhbSBlbmRwb2ludHMgVGhlIGVuZHBvaW50cyhzKSB0byBhcHBseSB0b1xuICAgKiBAc2VlIGh0dHBzOi8va3ViZXJuZXRlcy5pby9kb2NzL3JlZmVyZW5jZS9hY2Nlc3MtYXV0aG4tYXV0aHovYXV0aG9yaXphdGlvbi8jZGV0ZXJtaW5lLXRoZS1yZXF1ZXN0LXZlcmJcbiAgICovXG4gIHB1YmxpYyBhbGxvdyh2ZXJiczogc3RyaW5nW10sIC4uLmVuZHBvaW50czogSUFwaUVuZHBvaW50W10pOiB2b2lkIHtcbiAgICB0aGlzLl9ydWxlcy5wdXNoKHsgdmVyYnMsIGVuZHBvaW50cyB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBBZGQgXCJjcmVhdGVcIiBwZXJtaXNzaW9uIGZvciB0aGUgcmVzb3VyY2VzLlxuICAgKiBAcGFyYW0gZW5kcG9pbnRzIFRoZSByZXNvdXJjZShzKSB0byBhcHBseSB0b1xuICAgKi9cbiAgcHVibGljIGFsbG93Q3JlYXRlKC4uLmVuZHBvaW50czogSUFwaUVuZHBvaW50W10pOiB2b2lkIHtcbiAgICB0aGlzLmFsbG93KFsnY3JlYXRlJ10sIC4uLmVuZHBvaW50cyk7XG4gIH1cblxuICAvKipcbiAgICogQWRkIFwiZ2V0XCIgcGVybWlzc2lvbiBmb3IgdGhlIHJlc291cmNlcy5cbiAgICogQHBhcmFtIGVuZHBvaW50cyBUaGUgcmVzb3VyY2UocykgdG8gYXBwbHkgdG9cbiAgICovXG4gIHB1YmxpYyBhbGxvd0dldCguLi5lbmRwb2ludHM6IElBcGlFbmRwb2ludFtdKTogdm9pZCB7XG4gICAgdGhpcy5hbGxvdyhbJ2dldCddLCAuLi5lbmRwb2ludHMpO1xuICB9XG5cbiAgLyoqXG4gICAqIEFkZCBcImxpc3RcIiBwZXJtaXNzaW9uIGZvciB0aGUgcmVzb3VyY2VzLlxuICAgKiBAcGFyYW0gZW5kcG9pbnRzIFRoZSByZXNvdXJjZShzKSB0byBhcHBseSB0b1xuICAgKi9cbiAgcHVibGljIGFsbG93TGlzdCguLi5lbmRwb2ludHM6IElBcGlFbmRwb2ludFtdKTogdm9pZCB7XG4gICAgdGhpcy5hbGxvdyhbJ2xpc3QnXSwgLi4uZW5kcG9pbnRzKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBBZGQgXCJ3YXRjaFwiIHBlcm1pc3Npb24gZm9yIHRoZSByZXNvdXJjZXMuXG4gICAqIEBwYXJhbSBlbmRwb2ludHMgVGhlIHJlc291cmNlKHMpIHRvIGFwcGx5IHRvXG4gICAqL1xuICBwdWJsaWMgYWxsb3dXYXRjaCguLi5lbmRwb2ludHM6IElBcGlFbmRwb2ludFtdKTogdm9pZCB7XG4gICAgdGhpcy5hbGxvdyhbJ3dhdGNoJ10sIC4uLmVuZHBvaW50cyk7XG4gIH1cblxuICAvKipcbiAgICogQWRkIFwidXBkYXRlXCIgcGVybWlzc2lvbiBmb3IgdGhlIHJlc291cmNlcy5cbiAgICogQHBhcmFtIGVuZHBvaW50cyBUaGUgcmVzb3VyY2UocykgdG8gYXBwbHkgdG9cbiAgICovXG4gIHB1YmxpYyBhbGxvd1VwZGF0ZSguLi5lbmRwb2ludHM6IElBcGlFbmRwb2ludFtdKTogdm9pZCB7XG4gICAgdGhpcy5hbGxvdyhbJ3VwZGF0ZSddLCAuLi5lbmRwb2ludHMpO1xuICB9XG5cbiAgLyoqXG4gICAqIEFkZCBcInBhdGNoXCIgcGVybWlzc2lvbiBmb3IgdGhlIHJlc291cmNlcy5cbiAgICogQHBhcmFtIGVuZHBvaW50cyBUaGUgcmVzb3VyY2UocykgdG8gYXBwbHkgdG9cbiAgICovXG4gIHB1YmxpYyBhbGxvd1BhdGNoKC4uLmVuZHBvaW50czogSUFwaUVuZHBvaW50W10pOiB2b2lkIHtcbiAgICB0aGlzLmFsbG93KFsncGF0Y2gnXSwgLi4uZW5kcG9pbnRzKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBBZGQgXCJkZWxldGVcIiBwZXJtaXNzaW9uIGZvciB0aGUgcmVzb3VyY2VzLlxuICAgKiBAcGFyYW0gZW5kcG9pbnRzIFRoZSByZXNvdXJjZShzKSB0byBhcHBseSB0b1xuICAgKi9cbiAgcHVibGljIGFsbG93RGVsZXRlKC4uLmVuZHBvaW50czogSUFwaUVuZHBvaW50W10pOiB2b2lkIHtcbiAgICB0aGlzLmFsbG93KFsnZGVsZXRlJ10sIC4uLmVuZHBvaW50cyk7XG4gIH1cblxuICAvKipcbiAgICogQWRkIFwiZGVsZXRlY29sbGVjdGlvblwiIHBlcm1pc3Npb24gZm9yIHRoZSByZXNvdXJjZXMuXG4gICAqIEBwYXJhbSBlbmRwb2ludHMgVGhlIHJlc291cmNlKHMpIHRvIGFwcGx5IHRvXG4gICAqL1xuICBwdWJsaWMgYWxsb3dEZWxldGVDb2xsZWN0aW9uKC4uLmVuZHBvaW50czogSUFwaUVuZHBvaW50W10pOiB2b2lkIHtcbiAgICB0aGlzLmFsbG93KFsnZGVsZXRlY29sbGVjdGlvbiddLCAuLi5lbmRwb2ludHMpO1xuICB9XG5cbiAgLyoqXG4gICAqIEFkZCBcImdldFwiLCBcImxpc3RcIiwgYW5kIFwid2F0Y2hcIiBwZXJtaXNzaW9ucyBmb3IgdGhlIHJlc291cmNlcy5cbiAgICogQHBhcmFtIGVuZHBvaW50cyBUaGUgcmVzb3VyY2UocykgdG8gYXBwbHkgdG9cbiAgICovXG4gIHB1YmxpYyBhbGxvd1JlYWQoLi4uZW5kcG9pbnRzOiBJQXBpRW5kcG9pbnRbXSk6IHZvaWQge1xuICAgIHRoaXMuYWxsb3coWydnZXQnLCAnbGlzdCcsICd3YXRjaCddLCAuLi5lbmRwb2ludHMpO1xuICB9XG5cbiAgLyoqXG4gICAqIEFkZCBcImdldFwiLCBcImxpc3RcIiwgXCJ3YXRjaFwiLCBcImNyZWF0ZVwiLCBcInVwZGF0ZVwiLCBcInBhdGNoXCIsIFwiZGVsZXRlXCIsIGFuZFxuICAgKiBcImRlbGV0ZWNvbGxlY3Rpb25cIiBwZXJtaXNzaW9ucyBmb3IgdGhlIHJlc291cmNlcy5cbiAgICpcbiAgICogQHBhcmFtIGVuZHBvaW50cyBUaGUgcmVzb3VyY2UocykgdG8gYXBwbHkgdG9cbiAgICovXG4gIHB1YmxpYyBhbGxvd1JlYWRXcml0ZSguLi5lbmRwb2ludHM6IElBcGlFbmRwb2ludFtdKTogdm9pZCB7XG4gICAgdGhpcy5hbGxvdyhbJ2dldCcsICdsaXN0JywgJ3dhdGNoJywgJ2NyZWF0ZScsICd1cGRhdGUnLCAncGF0Y2gnLCAnZGVsZXRlJywgJ2RlbGV0ZWNvbGxlY3Rpb24nXSwgLi4uZW5kcG9pbnRzKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBBZ2dyZWdhdGUgcnVsZXMgZnJvbSByb2xlcyBtYXRjaGluZyB0aGlzIGxhYmVsIHNlbGVjdG9yLlxuICAgKi9cbiAgcHVibGljIGFnZ3JlZ2F0ZShrZXk6IHN0cmluZywgdmFsdWU6IHN0cmluZyk6IHZvaWQge1xuICAgIHRoaXMuX2xhYmVsU2VsZWN0b3Jba2V5XSA9IHZhbHVlO1xuICB9XG5cbiAgLyoqXG4gICAqIENvbWJpbmVzIHRoZSBydWxlcyBvZiB0aGUgYXJndW1lbnQgQ2x1c3RlclJvbGUgaW50byB0aGlzIENsdXN0ZXJSb2xlXG4gICAqIHVzaW5nIGFnZ3JlZ2F0aW9uIGxhYmVscy5cbiAgICogQHBhcmFtIHJvbFxuICAgKi9cbiAgcHVibGljIGNvbWJpbmUocm9sOiBDbHVzdGVyUm9sZSk6IHZvaWQge1xuICAgIGNvbnN0IGtleSA9IGBjZGs4cy5jbHVzdGVyLXJvbGUvYWdncmVnYXRlLXRvLSR7TmFtZXMudG9MYWJlbFZhbHVlKHRoaXMpfWA7XG4gICAgY29uc3QgdmFsdWUgPSAndHJ1ZSc7XG4gICAgcm9sLm1ldGFkYXRhLmFkZExhYmVsKGtleSwgdmFsdWUpO1xuICAgIHRoaXMuYWdncmVnYXRlKGtleSwgdmFsdWUpO1xuICB9XG5cbiAgLyoqXG4gICAqIENyZWF0ZSBhIFJvbGVCaW5kaW5nIHRoYXQgYmluZHMgdGhlIHBlcm1pc3Npb25zIGluIHRoaXMgQ2x1c3RlclJvbGVcbiAgICogdG8gYSBsaXN0IG9mIHN1YmplY3RzLCB0aGF0IHdpbGwgb25seSBhcHBseSB0byB0aGUgZ2l2ZW4gbmFtZXNwYWNlLlxuICAgKiBAcGFyYW0gbmFtZXNwYWNlIHRoZSBuYW1lc3BhY2UgdG8gbGltaXQgcGVybWlzc2lvbnMgdG8uXG4gICAqIEBwYXJhbSBzdWJqZWN0cyBhIGxpc3Qgb2Ygc3ViamVjdHMgdG8gYmluZCB0b1xuICAgKi9cbiAgcHVibGljIGJpbmRJbk5hbWVzcGFjZShuYW1lc3BhY2U6IHN0cmluZywgLi4uc3ViamVjdHM6IHJiLklTdWJqZWN0W10pOiByYi5Sb2xlQmluZGluZyB7XG4gICAgY29uc3QgYmluZGluZyA9IG5ldyByYi5Sb2xlQmluZGluZyh0aGlzLCBgUm9sZUJpbmRpbmctJHtuYW1lc3BhY2V9YCwge1xuICAgICAgbWV0YWRhdGE6IHtcbiAgICAgICAgbmFtZXNwYWNlLFxuICAgICAgfSxcbiAgICAgIHJvbGU6IHRoaXMsXG4gICAgfSk7XG4gICAgYmluZGluZy5hZGRTdWJqZWN0cyguLi5zdWJqZWN0cyk7XG4gICAgcmV0dXJuIGJpbmRpbmc7XG4gIH1cblxuICAvKipcbiAgICogQ3JlYXRlIGEgQ2x1c3RlclJvbGVCaW5kaW5nIHRoYXQgYmluZHMgdGhlIHBlcm1pc3Npb25zIGluIHRoaXNcbiAgICogQ2x1c3RlclJvbGUgdG8gYSBsaXN0IG9mIHN1YmplY3RzLCB3aXRob3V0IG5hbWVzcGFjZSByZXN0cmljdGlvbnMuXG4gICAqIEBwYXJhbSBzdWJqZWN0cyBhIGxpc3Qgb2Ygc3ViamVjdHMgdG8gYmluZCB0b1xuICAgKi9cbiAgcHVibGljIGJpbmQoLi4uc3ViamVjdHM6IHJiLklTdWJqZWN0W10pOiByYi5DbHVzdGVyUm9sZUJpbmRpbmcge1xuICAgIGNvbnN0IGJpbmRpbmcgPSBuZXcgcmIuQ2x1c3RlclJvbGVCaW5kaW5nKHRoaXMsICdDbHVzdGVyUm9sZUJpbmRpbmcnLCB7XG4gICAgICByb2xlOiB0aGlzLFxuICAgIH0pO1xuICAgIGJpbmRpbmcuYWRkU3ViamVjdHMoLi4uc3ViamVjdHMpO1xuICAgIHJldHVybiBiaW5kaW5nO1xuICB9XG5cbiAgcHJpdmF0ZSBzeW50aGVzaXplUnVsZXMoKTogazhzLlBvbGljeVJ1bGVbXSB7XG4gICAgY29uc3QgcnVsZXM6IGs4cy5Qb2xpY3lSdWxlW10gPSBbXTtcbiAgICBmb3IgKGNvbnN0IHJ1bGUgb2YgdGhpcy5fcnVsZXMpIHtcbiAgICAgIGZvciAoY29uc3QgZW5kcG9pbnQgb2YgcnVsZS5lbmRwb2ludHMpIHtcbiAgICAgICAgY29uc3QgcmVzb3VyY2UgPSBlbmRwb2ludC5hc0FwaVJlc291cmNlKCk7XG4gICAgICAgIGNvbnN0IG5vblJlc291cmNlID0gZW5kcG9pbnQuYXNOb25BcGlSZXNvdXJjZSgpO1xuXG4gICAgICAgIGlmIChyZXNvdXJjZSAmJiBub25SZXNvdXJjZSkge1xuICAgICAgICAgIHRocm93IG5ldyBFcnJvcignRW5kcG9pbnQgbXVzdCBiZSBlaXRoZXIgcmVzb3VyY2Ugb3Igbm9uIHJlc291cmNlLiBub3QgYm90aC4nKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICghcmVzb3VyY2UgJiYgIW5vblJlc291cmNlKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdFbmRwb2ludCBtdXN0IGJlIGVpdGhlciByZXNvdXJjZSBvciBub24gcmVzb3VyY2UuIG5vdCBuZWl0aGVyLicpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHJlc291cmNlKSB7XG4gICAgICAgICAgcnVsZXMucHVzaCh7XG4gICAgICAgICAgICBhcGlHcm91cHM6IFtyZXNvdXJjZS5hcGlHcm91cCA9PT0gJ2NvcmUnID8gJycgOiByZXNvdXJjZS5hcGlHcm91cF0sXG4gICAgICAgICAgICByZXNvdXJjZXM6IFtyZXNvdXJjZS5yZXNvdXJjZVR5cGVdLFxuICAgICAgICAgICAgcmVzb3VyY2VOYW1lczogcmVzb3VyY2UucmVzb3VyY2VOYW1lID8gW3Jlc291cmNlLnJlc291cmNlTmFtZV0gOiBbXSxcbiAgICAgICAgICAgIHZlcmJzOiBydWxlLnZlcmJzLFxuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIGlmIChub25SZXNvdXJjZSkge1xuICAgICAgICAgIHJ1bGVzLnB1c2goeyB2ZXJiczogcnVsZS52ZXJicywgbm9uUmVzb3VyY2VVckxzOiBbbm9uUmVzb3VyY2VdIH0pO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICB9XG4gICAgcmV0dXJuIHJ1bGVzO1xuICB9XG5cbiAgcHJpdmF0ZSBzeW50aGVzaXplQWdncmVnYXRpb25SdWxlcygpOiBrOHMuQWdncmVnYXRpb25SdWxlIHwgdW5kZWZpbmVkIHtcbiAgICBpZiAoT2JqZWN0LmtleXModGhpcy5fbGFiZWxTZWxlY3RvcikubGVuZ3RoID09PSAwKSB7XG4gICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH1cblxuICAgIHJldHVybiB7IGNsdXN0ZXJSb2xlU2VsZWN0b3JzOiBbeyBtYXRjaExhYmVsczogdGhpcy5fbGFiZWxTZWxlY3RvciB9XSB9O1xuICB9XG59XG4iXX0=
|
package/lib/secret.d.ts
ADDED
|
@@ -0,0 +1,195 @@
|
|
|
1
|
+
import { ApiObject } from 'cdk8s';
|
|
2
|
+
import { Construct } from 'constructs';
|
|
3
|
+
import * as base from './base';
|
|
4
|
+
import { EnvValue, EnvValueFromSecretOptions } from './container';
|
|
5
|
+
import * as serviceaccount from './service-account';
|
|
6
|
+
/**
|
|
7
|
+
* Common properties for `Secret`.
|
|
8
|
+
*/
|
|
9
|
+
export interface CommonSecretProps extends base.ResourceProps {
|
|
10
|
+
/**
|
|
11
|
+
* If set to true, ensures that data stored in the Secret cannot be updated (only object metadata can be modified).
|
|
12
|
+
* If not set to true, the field can be modified at any time.
|
|
13
|
+
*
|
|
14
|
+
* @default false
|
|
15
|
+
*/
|
|
16
|
+
readonly immutable?: boolean;
|
|
17
|
+
}
|
|
18
|
+
/**
|
|
19
|
+
* Options for `Secret`.
|
|
20
|
+
*/
|
|
21
|
+
export interface SecretProps extends CommonSecretProps {
|
|
22
|
+
/**
|
|
23
|
+
* stringData allows specifying non-binary secret data in string form. It is
|
|
24
|
+
* provided as a write-only convenience method. All keys and values are merged
|
|
25
|
+
* into the data field on write, overwriting any existing values. It is never
|
|
26
|
+
* output when reading from the API.
|
|
27
|
+
*/
|
|
28
|
+
readonly stringData?: {
|
|
29
|
+
[key: string]: string;
|
|
30
|
+
};
|
|
31
|
+
/**
|
|
32
|
+
* Optional type associated with the secret. Used to facilitate programmatic
|
|
33
|
+
* handling of secret data by various controllers.
|
|
34
|
+
*
|
|
35
|
+
* @default undefined - Don't set a type.
|
|
36
|
+
*/
|
|
37
|
+
readonly type?: string;
|
|
38
|
+
}
|
|
39
|
+
export interface ISecret extends base.IResource {
|
|
40
|
+
/**
|
|
41
|
+
* Returns EnvValue object from a secret's key.
|
|
42
|
+
* @param key Secret's key
|
|
43
|
+
* @param options Additional EnvValue options
|
|
44
|
+
*/
|
|
45
|
+
envValue(key: string, options?: EnvValueFromSecretOptions): EnvValue;
|
|
46
|
+
}
|
|
47
|
+
/**
|
|
48
|
+
* Represents a specific value in JSON secret.
|
|
49
|
+
*/
|
|
50
|
+
export interface SecretValue {
|
|
51
|
+
/**
|
|
52
|
+
* The secret
|
|
53
|
+
*/
|
|
54
|
+
readonly secret: ISecret;
|
|
55
|
+
/**
|
|
56
|
+
* The JSON key
|
|
57
|
+
*/
|
|
58
|
+
readonly key: string;
|
|
59
|
+
}
|
|
60
|
+
/**
|
|
61
|
+
* Kubernetes Secrets let you store and manage sensitive information, such as
|
|
62
|
+
* passwords, OAuth tokens, and ssh keys. Storing confidential information in a
|
|
63
|
+
* Secret is safer and more flexible than putting it verbatim in a Pod
|
|
64
|
+
* definition or in a container image.
|
|
65
|
+
*
|
|
66
|
+
* @see https://kubernetes.io/docs/concepts/configuration/secret
|
|
67
|
+
*/
|
|
68
|
+
export declare class Secret extends base.Resource implements ISecret {
|
|
69
|
+
/**
|
|
70
|
+
* Imports a secret from the cluster as a reference.
|
|
71
|
+
*/
|
|
72
|
+
static fromSecretName(scope: Construct, id: string, name: string): ISecret;
|
|
73
|
+
/**
|
|
74
|
+
* @see base.Resource.apiObject
|
|
75
|
+
*/
|
|
76
|
+
protected readonly apiObject: ApiObject;
|
|
77
|
+
readonly resourceType = "secrets";
|
|
78
|
+
/**
|
|
79
|
+
* Whether or not the secret is immutable.
|
|
80
|
+
*/
|
|
81
|
+
readonly immutable: boolean;
|
|
82
|
+
private readonly stringData;
|
|
83
|
+
constructor(scope: Construct, id: string, props?: SecretProps);
|
|
84
|
+
/**
|
|
85
|
+
* Adds a string data field to the secret.
|
|
86
|
+
* @param key Key
|
|
87
|
+
* @param value Value
|
|
88
|
+
*/
|
|
89
|
+
addStringData(key: string, value: string): void;
|
|
90
|
+
/**
|
|
91
|
+
* Gets a string data by key or undefined
|
|
92
|
+
* @param key Key
|
|
93
|
+
*/
|
|
94
|
+
getStringData(key: string): string | undefined;
|
|
95
|
+
envValue(key: string, options?: EnvValueFromSecretOptions): EnvValue;
|
|
96
|
+
}
|
|
97
|
+
/**
|
|
98
|
+
* Options for `BasicAuthSecret`.
|
|
99
|
+
*/
|
|
100
|
+
export interface BasicAuthSecretProps extends CommonSecretProps {
|
|
101
|
+
/**
|
|
102
|
+
* The user name for authentication
|
|
103
|
+
*/
|
|
104
|
+
readonly username: string;
|
|
105
|
+
/**
|
|
106
|
+
* The password or token for authentication
|
|
107
|
+
*/
|
|
108
|
+
readonly password: string;
|
|
109
|
+
}
|
|
110
|
+
/**
|
|
111
|
+
* Create a secret for basic authentication.
|
|
112
|
+
*
|
|
113
|
+
* @see https://kubernetes.io/docs/concepts/configuration/secret/#basic-authentication-secret
|
|
114
|
+
*/
|
|
115
|
+
export declare class BasicAuthSecret extends Secret {
|
|
116
|
+
constructor(scope: Construct, id: string, props: BasicAuthSecretProps);
|
|
117
|
+
}
|
|
118
|
+
/**
|
|
119
|
+
* Options for `SshAuthSecret`.
|
|
120
|
+
*/
|
|
121
|
+
export interface SshAuthSecretProps extends CommonSecretProps {
|
|
122
|
+
/**
|
|
123
|
+
* The SSH private key to use
|
|
124
|
+
*/
|
|
125
|
+
readonly sshPrivateKey: string;
|
|
126
|
+
}
|
|
127
|
+
/**
|
|
128
|
+
* Create a secret for ssh authentication.
|
|
129
|
+
*
|
|
130
|
+
* @see https://kubernetes.io/docs/concepts/configuration/secret/#ssh-authentication-secrets
|
|
131
|
+
*/
|
|
132
|
+
export declare class SshAuthSecret extends Secret {
|
|
133
|
+
constructor(scope: Construct, id: string, props: SshAuthSecretProps);
|
|
134
|
+
}
|
|
135
|
+
/**
|
|
136
|
+
* Options for `ServiceAccountTokenSecret`.
|
|
137
|
+
*/
|
|
138
|
+
export interface ServiceAccountTokenSecretProps extends CommonSecretProps {
|
|
139
|
+
/**
|
|
140
|
+
* The service account to store a secret for
|
|
141
|
+
*/
|
|
142
|
+
readonly serviceAccount: serviceaccount.IServiceAccount;
|
|
143
|
+
}
|
|
144
|
+
/**
|
|
145
|
+
* Create a secret for a service account token.
|
|
146
|
+
*
|
|
147
|
+
* @see https://kubernetes.io/docs/concepts/configuration/secret/#service-account-token-secrets
|
|
148
|
+
*/
|
|
149
|
+
export declare class ServiceAccountTokenSecret extends Secret {
|
|
150
|
+
constructor(scope: Construct, id: string, props: ServiceAccountTokenSecretProps);
|
|
151
|
+
}
|
|
152
|
+
/**
|
|
153
|
+
* Options for `TlsSecret`.
|
|
154
|
+
*/
|
|
155
|
+
export interface TlsSecretProps extends CommonSecretProps {
|
|
156
|
+
/**
|
|
157
|
+
* The TLS cert
|
|
158
|
+
*/
|
|
159
|
+
readonly tlsCert: string;
|
|
160
|
+
/**
|
|
161
|
+
* The TLS key
|
|
162
|
+
*/
|
|
163
|
+
readonly tlsKey: string;
|
|
164
|
+
}
|
|
165
|
+
/**
|
|
166
|
+
* Create a secret for storing a TLS certificate and its associated key.
|
|
167
|
+
*
|
|
168
|
+
* @see https://kubernetes.io/docs/concepts/configuration/secret/#tls-secrets
|
|
169
|
+
*/
|
|
170
|
+
export declare class TlsSecret extends Secret {
|
|
171
|
+
constructor(scope: Construct, id: string, props: TlsSecretProps);
|
|
172
|
+
}
|
|
173
|
+
/**
|
|
174
|
+
* Options for `DockerConfigSecret`.
|
|
175
|
+
*/
|
|
176
|
+
export interface DockerConfigSecretProps extends CommonSecretProps {
|
|
177
|
+
/**
|
|
178
|
+
* JSON content to provide for the `~/.docker/config.json` file. This will
|
|
179
|
+
* be stringified and inserted as stringData.
|
|
180
|
+
*
|
|
181
|
+
* @see https://docs.docker.com/engine/reference/commandline/cli/#sample-configuration-file
|
|
182
|
+
*/
|
|
183
|
+
readonly data: {
|
|
184
|
+
[key: string]: any;
|
|
185
|
+
};
|
|
186
|
+
}
|
|
187
|
+
/**
|
|
188
|
+
* Create a secret for storing credentials for accessing a container image
|
|
189
|
+
* registry.
|
|
190
|
+
*
|
|
191
|
+
* @see https://kubernetes.io/docs/concepts/configuration/secret/#docker-config-secrets
|
|
192
|
+
*/
|
|
193
|
+
export declare class DockerConfigSecret extends Secret {
|
|
194
|
+
constructor(scope: Construct, id: string, props: DockerConfigSecretProps);
|
|
195
|
+
}
|