cdk8s-plus-34 0.0.1 → 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.
Files changed (156) hide show
  1. package/.jsii +101649 -0
  2. package/CODE_OF_CONDUCT.md +3 -0
  3. package/CONTRIBUTING.md +185 -0
  4. package/DCO +34 -0
  5. package/LICENSE +202 -0
  6. package/NOTICE +1 -0
  7. package/OWNERS.md +5 -0
  8. package/README.md +21 -33
  9. package/SECURITY.md +5 -0
  10. package/cdk8s.yaml +11 -0
  11. package/docs/java.md +150009 -0
  12. package/docs/plus/config-map.md +98 -0
  13. package/docs/plus/container.md +133 -0
  14. package/docs/plus/cronjob.md +67 -0
  15. package/docs/plus/deployment.md +232 -0
  16. package/docs/plus/horizontal-pod-autoscaler.md +226 -0
  17. package/docs/plus/ingress.md +68 -0
  18. package/docs/plus/job.md +48 -0
  19. package/docs/plus/namespace.md +58 -0
  20. package/docs/plus/network-policy.md +341 -0
  21. package/docs/plus/pod.md +455 -0
  22. package/docs/plus/pv.md +82 -0
  23. package/docs/plus/pvc.md +77 -0
  24. package/docs/plus/rbac.md +104 -0
  25. package/docs/plus/secret.md +32 -0
  26. package/docs/plus/service-account.md +35 -0
  27. package/docs/plus/service.md +41 -0
  28. package/docs/plus/volume.md +84 -0
  29. package/docs/python.md +161196 -0
  30. package/docs/typescript.md +139649 -0
  31. package/git-hooks/README.md +9 -0
  32. package/git-hooks/prepare-commit-msg +18 -0
  33. package/git-hooks/setup.sh +10 -0
  34. package/lib/_action.d.ts +26 -0
  35. package/lib/_action.js +39 -0
  36. package/lib/api-resource.d.ts +298 -0
  37. package/lib/api-resource.js +430 -0
  38. package/lib/base.d.ts +79 -0
  39. package/lib/base.js +92 -0
  40. package/lib/config-map.d.ts +126 -0
  41. package/lib/config-map.js +159 -0
  42. package/lib/container.d.ts +1057 -0
  43. package/lib/container.js +845 -0
  44. package/lib/cron-job.d.ts +138 -0
  45. package/lib/cron-job.js +103 -0
  46. package/lib/daemon-set.d.ts +45 -0
  47. package/lib/daemon-set.js +55 -0
  48. package/lib/deployment.d.ts +235 -0
  49. package/lib/deployment.js +216 -0
  50. package/lib/handler.d.ts +62 -0
  51. package/lib/handler.js +54 -0
  52. package/lib/horizontal-pod-autoscaler.d.ts +500 -0
  53. package/lib/horizontal-pod-autoscaler.js +569 -0
  54. package/lib/imports/k8s.d.ts +25809 -0
  55. package/lib/imports/k8s.js +19238 -0
  56. package/lib/index.d.ts +26 -0
  57. package/lib/index.js +44 -0
  58. package/lib/ingress.d.ts +230 -0
  59. package/lib/ingress.js +246 -0
  60. package/lib/job.d.ts +64 -0
  61. package/lib/job.js +54 -0
  62. package/lib/namespace.d.ts +128 -0
  63. package/lib/namespace.js +109 -0
  64. package/lib/network-policy.d.ts +311 -0
  65. package/lib/network-policy.js +344 -0
  66. package/lib/pod.d.ts +1097 -0
  67. package/lib/pod.js +1147 -0
  68. package/lib/probe.d.ts +181 -0
  69. package/lib/probe.js +88 -0
  70. package/lib/pv.d.ts +375 -0
  71. package/lib/pv.js +273 -0
  72. package/lib/pvc.d.ts +163 -0
  73. package/lib/pvc.js +154 -0
  74. package/lib/role-binding.d.ts +138 -0
  75. package/lib/role-binding.js +165 -0
  76. package/lib/role.d.ts +268 -0
  77. package/lib/role.js +401 -0
  78. package/lib/secret.d.ts +195 -0
  79. package/lib/secret.js +185 -0
  80. package/lib/service-account.d.ts +83 -0
  81. package/lib/service-account.js +105 -0
  82. package/lib/service.d.ts +289 -0
  83. package/lib/service.js +182 -0
  84. package/lib/stateful-set.d.ts +206 -0
  85. package/lib/stateful-set.js +244 -0
  86. package/lib/utils.d.ts +4 -0
  87. package/lib/utils.js +33 -0
  88. package/lib/volume.d.ts +577 -0
  89. package/lib/volume.js +377 -0
  90. package/lib/workload.d.ts +121 -0
  91. package/lib/workload.js +122 -0
  92. package/node_modules/balanced-match/.github/FUNDING.yml +2 -0
  93. package/node_modules/balanced-match/LICENSE.md +21 -0
  94. package/node_modules/balanced-match/README.md +97 -0
  95. package/node_modules/balanced-match/index.js +62 -0
  96. package/node_modules/balanced-match/package.json +48 -0
  97. package/node_modules/brace-expansion/.github/FUNDING.yml +2 -0
  98. package/node_modules/brace-expansion/LICENSE +21 -0
  99. package/node_modules/brace-expansion/README.md +135 -0
  100. package/node_modules/brace-expansion/index.js +202 -0
  101. package/node_modules/brace-expansion/package.json +49 -0
  102. package/node_modules/minimatch/LICENSE +15 -0
  103. package/node_modules/minimatch/README.md +491 -0
  104. package/node_modules/minimatch/dist/commonjs/assert-valid-pattern.d.ts +2 -0
  105. package/node_modules/minimatch/dist/commonjs/assert-valid-pattern.d.ts.map +1 -0
  106. package/node_modules/minimatch/dist/commonjs/assert-valid-pattern.js +14 -0
  107. package/node_modules/minimatch/dist/commonjs/assert-valid-pattern.js.map +1 -0
  108. package/node_modules/minimatch/dist/commonjs/ast.d.ts +20 -0
  109. package/node_modules/minimatch/dist/commonjs/ast.d.ts.map +1 -0
  110. package/node_modules/minimatch/dist/commonjs/ast.js +747 -0
  111. package/node_modules/minimatch/dist/commonjs/ast.js.map +1 -0
  112. package/node_modules/minimatch/dist/commonjs/brace-expressions.d.ts +8 -0
  113. package/node_modules/minimatch/dist/commonjs/brace-expressions.d.ts.map +1 -0
  114. package/node_modules/minimatch/dist/commonjs/brace-expressions.js +152 -0
  115. package/node_modules/minimatch/dist/commonjs/brace-expressions.js.map +1 -0
  116. package/node_modules/minimatch/dist/commonjs/escape.d.ts +12 -0
  117. package/node_modules/minimatch/dist/commonjs/escape.d.ts.map +1 -0
  118. package/node_modules/minimatch/dist/commonjs/escape.js +22 -0
  119. package/node_modules/minimatch/dist/commonjs/escape.js.map +1 -0
  120. package/node_modules/minimatch/dist/commonjs/index.d.ts +98 -0
  121. package/node_modules/minimatch/dist/commonjs/index.d.ts.map +1 -0
  122. package/node_modules/minimatch/dist/commonjs/index.js +1023 -0
  123. package/node_modules/minimatch/dist/commonjs/index.js.map +1 -0
  124. package/node_modules/minimatch/dist/commonjs/package.json +3 -0
  125. package/node_modules/minimatch/dist/commonjs/unescape.d.ts +17 -0
  126. package/node_modules/minimatch/dist/commonjs/unescape.d.ts.map +1 -0
  127. package/node_modules/minimatch/dist/commonjs/unescape.js +24 -0
  128. package/node_modules/minimatch/dist/commonjs/unescape.js.map +1 -0
  129. package/node_modules/minimatch/dist/esm/assert-valid-pattern.d.ts +2 -0
  130. package/node_modules/minimatch/dist/esm/assert-valid-pattern.d.ts.map +1 -0
  131. package/node_modules/minimatch/dist/esm/assert-valid-pattern.js +10 -0
  132. package/node_modules/minimatch/dist/esm/assert-valid-pattern.js.map +1 -0
  133. package/node_modules/minimatch/dist/esm/ast.d.ts +20 -0
  134. package/node_modules/minimatch/dist/esm/ast.d.ts.map +1 -0
  135. package/node_modules/minimatch/dist/esm/ast.js +743 -0
  136. package/node_modules/minimatch/dist/esm/ast.js.map +1 -0
  137. package/node_modules/minimatch/dist/esm/brace-expressions.d.ts +8 -0
  138. package/node_modules/minimatch/dist/esm/brace-expressions.d.ts.map +1 -0
  139. package/node_modules/minimatch/dist/esm/brace-expressions.js +148 -0
  140. package/node_modules/minimatch/dist/esm/brace-expressions.js.map +1 -0
  141. package/node_modules/minimatch/dist/esm/escape.d.ts +12 -0
  142. package/node_modules/minimatch/dist/esm/escape.d.ts.map +1 -0
  143. package/node_modules/minimatch/dist/esm/escape.js +18 -0
  144. package/node_modules/minimatch/dist/esm/escape.js.map +1 -0
  145. package/node_modules/minimatch/dist/esm/index.d.ts +98 -0
  146. package/node_modules/minimatch/dist/esm/index.d.ts.map +1 -0
  147. package/node_modules/minimatch/dist/esm/index.js +1007 -0
  148. package/node_modules/minimatch/dist/esm/index.js.map +1 -0
  149. package/node_modules/minimatch/dist/esm/package.json +3 -0
  150. package/node_modules/minimatch/dist/esm/unescape.d.ts +17 -0
  151. package/node_modules/minimatch/dist/esm/unescape.d.ts.map +1 -0
  152. package/node_modules/minimatch/dist/esm/unescape.js +20 -0
  153. package/node_modules/minimatch/dist/esm/unescape.js.map +1 -0
  154. package/node_modules/minimatch/package.json +82 -0
  155. package/package.json +176 -6
  156. package/rotate.md +85 -0
package/lib/volume.js ADDED
@@ -0,0 +1,377 @@
1
+ "use strict";
2
+ var _a;
3
+ Object.defineProperty(exports, "__esModule", { value: true });
4
+ exports.HostPathVolumeType = exports.AzureDiskPersistentVolumeCachingMode = exports.AzureDiskPersistentVolumeKind = exports.EmptyDirMedium = exports.Volume = 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 k8s = require("./imports/k8s");
9
+ /**
10
+ * Volume represents a named volume in a pod that may be accessed by any
11
+ * container in the pod.
12
+ *
13
+ * Docker also has a concept of volumes, though it is somewhat looser and less
14
+ * managed. In Docker, a volume is simply a directory on disk or in another
15
+ * Container. Lifetimes are not managed and until very recently there were only
16
+ * local-disk-backed volumes. Docker now provides volume drivers, but the
17
+ * functionality is very limited for now (e.g. as of Docker 1.7 only one volume
18
+ * driver is allowed per Container and there is no way to pass parameters to
19
+ * volumes).
20
+ *
21
+ * A Kubernetes volume, on the other hand, has an explicit lifetime - the same
22
+ * as the Pod that encloses it. Consequently, a volume outlives any Containers
23
+ * that run within the Pod, and data is preserved across Container restarts. Of
24
+ * course, when a Pod ceases to exist, the volume will cease to exist, too.
25
+ * Perhaps more importantly than this, Kubernetes supports many types of
26
+ * volumes, and a Pod can use any number of them simultaneously.
27
+ *
28
+ * At its core, a volume is just a directory, possibly with some data in it,
29
+ * which is accessible to the Containers in a Pod. How that directory comes to
30
+ * be, the medium that backs it, and the contents of it are determined by the
31
+ * particular volume type used.
32
+ *
33
+ * To use a volume, a Pod specifies what volumes to provide for the Pod (the
34
+ * .spec.volumes field) and where to mount those into Containers (the
35
+ * .spec.containers[*].volumeMounts field).
36
+ *
37
+ * A process in a container sees a filesystem view composed from their Docker
38
+ * image and volumes. The Docker image is at the root of the filesystem
39
+ * hierarchy, and any volumes are mounted at the specified paths within the
40
+ * image. Volumes can not mount onto other volumes
41
+ */
42
+ class Volume extends constructs_1.Construct {
43
+ /**
44
+ * Mounts an Amazon Web Services (AWS) EBS volume into your pod.
45
+ * Unlike emptyDir, which is erased when a pod is removed, the contents of an EBS volume are
46
+ * persisted and the volume is unmounted. This means that an EBS volume can be pre-populated with data,
47
+ * and that data can be shared between pods.
48
+ *
49
+ * There are some restrictions when using an awsElasticBlockStore volume:
50
+ *
51
+ * - the nodes on which pods are running must be AWS EC2 instances.
52
+ * - those instances need to be in the same region and availability zone as the EBS volume.
53
+ * - EBS only supports a single EC2 instance mounting a volume.
54
+ */
55
+ static fromAwsElasticBlockStore(scope, id, volumeId, options = {}) {
56
+ return new Volume(scope, id, options.name ?? `ebs-${volumeId}`, {
57
+ awsElasticBlockStore: {
58
+ volumeId,
59
+ fsType: options.fsType ?? 'ext4',
60
+ partition: options.partition,
61
+ readOnly: options.readOnly ?? false,
62
+ },
63
+ });
64
+ }
65
+ /**
66
+ * Mounts a Microsoft Azure Data Disk into a pod.
67
+ */
68
+ static fromAzureDisk(scope, id, diskName, diskUri, options = {}) {
69
+ return new Volume(scope, id, options.name ?? `azuredisk-${diskName}`, {
70
+ azureDisk: {
71
+ diskName,
72
+ diskUri,
73
+ cachingMode: options.cachingMode ?? AzureDiskPersistentVolumeCachingMode.NONE,
74
+ fsType: options.fsType ?? 'ext4',
75
+ kind: options.kind ?? AzureDiskPersistentVolumeKind.SHARED,
76
+ readOnly: options.readOnly ?? false,
77
+ },
78
+ });
79
+ }
80
+ /**
81
+ * Mounts a Google Compute Engine (GCE) persistent disk (PD) into your Pod.
82
+ * Unlike emptyDir, which is erased when a pod is removed, the contents of a PD are
83
+ * preserved and the volume is merely unmounted. This means that a PD can be pre-populated
84
+ * with data, and that data can be shared between pods.
85
+ *
86
+ * There are some restrictions when using a gcePersistentDisk:
87
+ *
88
+ * - the nodes on which Pods are running must be GCE VMs
89
+ * - those VMs need to be in the same GCE project and zone as the persistent disk
90
+ */
91
+ static fromGcePersistentDisk(scope, id, pdName, options = {}) {
92
+ return new Volume(scope, id, options.name ?? `gcedisk-${pdName}`, {
93
+ gcePersistentDisk: {
94
+ pdName,
95
+ fsType: options.fsType ?? 'ext4',
96
+ partition: options.partition,
97
+ readOnly: options.readOnly ?? false,
98
+ },
99
+ });
100
+ }
101
+ /**
102
+ * Populate the volume from a ConfigMap.
103
+ *
104
+ * The configMap resource provides a way to inject configuration data into
105
+ * Pods. The data stored in a ConfigMap object can be referenced in a volume
106
+ * of type configMap and then consumed by containerized applications running
107
+ * in a Pod.
108
+ *
109
+ * When referencing a configMap object, you can simply provide its name in the
110
+ * volume to reference it. You can also customize the path to use for a
111
+ * specific entry in the ConfigMap.
112
+ *
113
+ * @param configMap The config map to use to populate the volume.
114
+ * @param options Options
115
+ */
116
+ static fromConfigMap(scope, id, configMap, options = {}) {
117
+ return new Volume(scope, id, options.name ?? `configmap-${configMap.name}`, {
118
+ configMap: {
119
+ name: configMap.name,
120
+ defaultMode: options.defaultMode,
121
+ optional: options.optional,
122
+ items: Volume.renderItems(options.items),
123
+ },
124
+ });
125
+ }
126
+ /**
127
+ * An emptyDir volume is first created when a Pod is assigned to a Node, and
128
+ * exists as long as that Pod is running on that node. As the name says, it is
129
+ * initially empty. Containers in the Pod can all read and write the same
130
+ * files in the emptyDir volume, though that volume can be mounted at the same
131
+ * or different paths in each Container. When a Pod is removed from a node for
132
+ * any reason, the data in the emptyDir is deleted forever.
133
+ *
134
+ * @see http://kubernetes.io/docs/user-guide/volumes#emptydir
135
+ *
136
+ * @param options - Additional options.
137
+ */
138
+ static fromEmptyDir(scope, id, name, options = {}) {
139
+ return new Volume(scope, id, name, {
140
+ emptyDir: {
141
+ medium: options.medium,
142
+ sizeLimit: options.sizeLimit
143
+ ? k8s.Quantity.fromString(`${options.sizeLimit.toMebibytes()}Mi`)
144
+ : undefined,
145
+ },
146
+ });
147
+ }
148
+ /**
149
+ * Populate the volume from a Secret.
150
+ *
151
+ * A secret volume is used to pass sensitive information, such as passwords, to Pods.
152
+ * You can store secrets in the Kubernetes API and mount them as files for use by pods
153
+ * without coupling to Kubernetes directly.
154
+ *
155
+ * secret volumes are backed by tmpfs (a RAM-backed filesystem)
156
+ * so they are never written to non-volatile storage.
157
+ *
158
+ * @see https://kubernetes.io/docs/concepts/storage/volumes/#secret
159
+ *
160
+ * @param secr The secret to use to populate the volume.
161
+ * @param options Options
162
+ */
163
+ static fromSecret(scope, id, secr, options = {}) {
164
+ return new Volume(scope, id, options.name ?? `secret-${secr.name}`, {
165
+ secret: {
166
+ secretName: secr.name,
167
+ defaultMode: options.defaultMode,
168
+ optional: options.optional,
169
+ items: Volume.renderItems(options.items),
170
+ },
171
+ });
172
+ }
173
+ /**
174
+ * Used to mount a PersistentVolume into a Pod.
175
+ * PersistentVolumeClaims are a way for users to "claim" durable storage (such as a GCE PersistentDisk or an iSCSI volume)
176
+ * without knowing the details of the particular cloud environment.
177
+ *
178
+ * @see https://kubernetes.io/docs/concepts/storage/persistent-volumes/
179
+ */
180
+ static fromPersistentVolumeClaim(scope, id, claim, options = {}) {
181
+ return new Volume(scope, id, options.name ?? `pvc-${claim.name}`, {
182
+ persistentVolumeClaim: {
183
+ claimName: claim.name,
184
+ readOnly: options.readOnly ?? false,
185
+ },
186
+ });
187
+ }
188
+ /**
189
+ * Used to mount a file or directory from the host node's filesystem into a Pod.
190
+ * This is not something that most Pods will need, but it offers a powerful
191
+ * escape hatch for some applications.
192
+ *
193
+ * @see https://kubernetes.io/docs/concepts/storage/volumes/#hostpath
194
+ */
195
+ static fromHostPath(scope, id, name, options) {
196
+ return new Volume(scope, id, name, {
197
+ hostPath: {
198
+ path: options.path,
199
+ type: options.type ?? HostPathVolumeType.DEFAULT,
200
+ },
201
+ });
202
+ }
203
+ /**
204
+ * Used to mount an NFS share into a Pod.
205
+ *
206
+ * @see https://kubernetes.io/docs/concepts/storage/volumes/#nfs
207
+ */
208
+ static fromNfs(scope, id, name, options) {
209
+ return new Volume(scope, id, name, {
210
+ nfs: {
211
+ server: options.server,
212
+ path: options.path,
213
+ readOnly: options.readOnly,
214
+ },
215
+ });
216
+ }
217
+ /**
218
+ * Populate the volume from a CSI driver, for example the Secrets Store CSI
219
+ * Driver: https://secrets-store-csi-driver.sigs.k8s.io/introduction.html.
220
+ * Which in turn needs an associated provider to source the secrets, such as
221
+ * the AWS Secrets Manager and Systems Manager Parameter Store provider:
222
+ * https://aws.github.io/secrets-store-csi-driver-provider-aws/.
223
+ *
224
+ * @param driver The name of the CSI driver to use to populate the volume.
225
+ * @param options Options for the CSI volume, including driver-specific ones.
226
+ */
227
+ static fromCsi(scope, id, driver, options = {}) {
228
+ return new Volume(scope, id, options.name ?? cdk8s_1.Names.toDnsLabel(scope, { extra: [id] }), {
229
+ csi: {
230
+ driver: driver,
231
+ fsType: options.fsType,
232
+ readOnly: options.readOnly,
233
+ volumeAttributes: options.attributes,
234
+ },
235
+ });
236
+ }
237
+ /**
238
+ * Create a volume with an arbitrary name and no configuration.
239
+ */
240
+ static fromName(scope, id, name) {
241
+ return new Volume(scope, id, name, {});
242
+ }
243
+ constructor(scope, id, name, config) {
244
+ super(scope, id);
245
+ this.name = name;
246
+ this.config = config;
247
+ this.name = name.slice(0, 63);
248
+ }
249
+ asVolume() {
250
+ return this;
251
+ }
252
+ /**
253
+ * @internal
254
+ */
255
+ _toKube() {
256
+ return {
257
+ name: this.name,
258
+ ...this.config,
259
+ };
260
+ }
261
+ }
262
+ exports.Volume = Volume;
263
+ _a = JSII_RTTI_SYMBOL_1;
264
+ Volume[_a] = { fqn: "cdk8s-plus-34.Volume", version: "2.0.0" };
265
+ /**
266
+ * @internal
267
+ */
268
+ Volume.renderItems = (items) => {
269
+ if (!items) {
270
+ return undefined;
271
+ }
272
+ const result = new Array();
273
+ for (const key of Object.keys(items).sort()) {
274
+ result.push({
275
+ key,
276
+ path: items[key].path,
277
+ mode: items[key].mode,
278
+ });
279
+ }
280
+ return result;
281
+ };
282
+ /**
283
+ * The medium on which to store the volume.
284
+ */
285
+ var EmptyDirMedium;
286
+ (function (EmptyDirMedium) {
287
+ /**
288
+ * The default volume of the backing node.
289
+ */
290
+ EmptyDirMedium["DEFAULT"] = "";
291
+ /**
292
+ * Mount a tmpfs (RAM-backed filesystem) for you instead. While tmpfs is very
293
+ * fast, be aware that unlike disks, tmpfs is cleared on node reboot and any
294
+ * files you write will count against your Container's memory limit.
295
+ */
296
+ EmptyDirMedium["MEMORY"] = "Memory";
297
+ })(EmptyDirMedium || (exports.EmptyDirMedium = EmptyDirMedium = {}));
298
+ /**
299
+ * Azure Disk kinds.
300
+ */
301
+ var AzureDiskPersistentVolumeKind;
302
+ (function (AzureDiskPersistentVolumeKind) {
303
+ /**
304
+ * Multiple blob disks per storage account.
305
+ */
306
+ AzureDiskPersistentVolumeKind["SHARED"] = "Shared";
307
+ /**
308
+ * Single blob disk per storage account.
309
+ */
310
+ AzureDiskPersistentVolumeKind["DEDICATED"] = "Dedicated";
311
+ /**
312
+ * Azure managed data disk.
313
+ */
314
+ AzureDiskPersistentVolumeKind["MANAGED"] = "Managed";
315
+ })(AzureDiskPersistentVolumeKind || (exports.AzureDiskPersistentVolumeKind = AzureDiskPersistentVolumeKind = {}));
316
+ /**
317
+ * Azure disk caching modes.
318
+ */
319
+ var AzureDiskPersistentVolumeCachingMode;
320
+ (function (AzureDiskPersistentVolumeCachingMode) {
321
+ /**
322
+ * None.
323
+ */
324
+ AzureDiskPersistentVolumeCachingMode["NONE"] = "None";
325
+ /**
326
+ * ReadOnly.
327
+ */
328
+ AzureDiskPersistentVolumeCachingMode["READ_ONLY"] = "ReadOnly";
329
+ /**
330
+ * ReadWrite.
331
+ */
332
+ AzureDiskPersistentVolumeCachingMode["READ_WRITE"] = "ReadWrite";
333
+ })(AzureDiskPersistentVolumeCachingMode || (exports.AzureDiskPersistentVolumeCachingMode = AzureDiskPersistentVolumeCachingMode = {}));
334
+ /**
335
+ * Host path types.
336
+ */
337
+ var HostPathVolumeType;
338
+ (function (HostPathVolumeType) {
339
+ /**
340
+ * Empty string (default) is for backward compatibility, which means that no
341
+ * checks will be performed before mounting the hostPath volume.
342
+ */
343
+ HostPathVolumeType["DEFAULT"] = "";
344
+ /**
345
+ * If nothing exists at the given path, an empty directory will be created
346
+ * there as needed with permission set to 0755, having the same group and
347
+ * ownership with Kubelet.
348
+ */
349
+ HostPathVolumeType["DIRECTORY_OR_CREATE"] = "DirectoryOrCreate";
350
+ /**
351
+ * A directory must exist at the given path.
352
+ */
353
+ HostPathVolumeType["DIRECTORY"] = "Directory";
354
+ /**
355
+ * If nothing exists at the given path, an empty file will be created there
356
+ * as needed with permission set to 0644, having the same group and ownership
357
+ * with Kubelet.
358
+ */
359
+ HostPathVolumeType["FILE_OR_CREATE"] = "FileOrCreate";
360
+ /**
361
+ * A file must exist at the given path.
362
+ */
363
+ HostPathVolumeType["FILE"] = "File";
364
+ /**
365
+ * A UNIX socket must exist at the given path.
366
+ */
367
+ HostPathVolumeType["SOCKET"] = "Socket";
368
+ /**
369
+ * A character device must exist at the given path.
370
+ */
371
+ HostPathVolumeType["CHAR_DEVICE"] = "CharDevice";
372
+ /**
373
+ * A block device must exist at the given path.
374
+ */
375
+ HostPathVolumeType["BLOCK_DEVICE"] = "BlockDevice";
376
+ })(HostPathVolumeType || (exports.HostPathVolumeType = HostPathVolumeType = {}));
377
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidm9sdW1lLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL3ZvbHVtZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7OztBQUFBLGlDQUFvQztBQUNwQywyQ0FBbUQ7QUFFbkQscUNBQXFDO0FBZXJDOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQWdDRztBQUNILE1BQWEsTUFBTyxTQUFRLHNCQUFTO0lBRW5DOzs7Ozs7Ozs7OztPQVdHO0lBQ0ksTUFBTSxDQUFDLHdCQUF3QixDQUFDLEtBQWdCLEVBQUUsRUFBVSxFQUFFLFFBQWdCLEVBQUUsVUFBNkMsRUFBRTtRQUNwSSxPQUFPLElBQUksTUFBTSxDQUFDLEtBQUssRUFBRSxFQUFFLEVBQUUsT0FBTyxDQUFDLElBQUksSUFBSSxPQUFPLFFBQVEsRUFBRSxFQUFFO1lBQzlELG9CQUFvQixFQUFFO2dCQUNwQixRQUFRO2dCQUNSLE1BQU0sRUFBRSxPQUFPLENBQUMsTUFBTSxJQUFJLE1BQU07Z0JBQ2hDLFNBQVMsRUFBRSxPQUFPLENBQUMsU0FBUztnQkFDNUIsUUFBUSxFQUFFLE9BQU8sQ0FBQyxRQUFRLElBQUksS0FBSzthQUNwQztTQUNGLENBQUMsQ0FBQztJQUNMLENBQUM7SUFFRDs7T0FFRztJQUNJLE1BQU0sQ0FBQyxhQUFhLENBQUMsS0FBZ0IsRUFBRSxFQUFVLEVBQUUsUUFBZ0IsRUFBRSxPQUFlLEVBQUUsVUFBa0MsRUFBRTtRQUMvSCxPQUFPLElBQUksTUFBTSxDQUFDLEtBQUssRUFBRSxFQUFFLEVBQUUsT0FBTyxDQUFDLElBQUksSUFBSSxhQUFhLFFBQVEsRUFBRSxFQUFFO1lBQ3BFLFNBQVMsRUFBRTtnQkFDVCxRQUFRO2dCQUNSLE9BQU87Z0JBQ1AsV0FBVyxFQUFFLE9BQU8sQ0FBQyxXQUFXLElBQUksb0NBQW9DLENBQUMsSUFBSTtnQkFDN0UsTUFBTSxFQUFFLE9BQU8sQ0FBQyxNQUFNLElBQUksTUFBTTtnQkFDaEMsSUFBSSxFQUFFLE9BQU8sQ0FB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QUVHO0lBQ0gsZ0RBQTBCLENBQUE7SUFFMUI7O09BRUc7SUFDSCxrREFBNEIsQ0FBQTtBQUM5QixDQUFDLEVBN0NXLGtCQUFrQixrQ0FBbEIsa0JBQWtCLFFBNkM3QiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IE5hbWVzLCBTaXplIH0gZnJvbSAnY2RrOHMnO1xuaW1wb3J0IHsgQ29uc3RydWN0LCBJQ29uc3RydWN0IH0gZnJvbSAnY29uc3RydWN0cyc7XG5pbXBvcnQgKiBhcyBjb25maWdtYXAgZnJvbSAnLi9jb25maWctbWFwJztcbmltcG9ydCAqIGFzIGs4cyBmcm9tICcuL2ltcG9ydHMvazhzJztcbmltcG9ydCAqIGFzIHB2YyBmcm9tICcuL3B2Yyc7XG5pbXBvcnQgKiBhcyBzZWNyZXQgZnJvbSAnLi9zZWNyZXQnO1xuXG4vKipcbiAqIFJlcHJlc2VudHMgYSBwaWVjZSBvZiBzdG9yYWdlIGluIHRoZSBjbHVzdGVyLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIElTdG9yYWdlIGV4dGVuZHMgSUNvbnN0cnVjdCB7XG5cbiAgLyoqXG4gICAqIENvbnZlcnQgdGhlIHBpZWNlIG9mIHN0b3JhZ2UgaW50byBhIGNvbmNyZXRlIHZvbHVtZS5cbiAgICovXG4gIGFzVm9sdW1lKCk6IFZvbHVtZTtcbn1cblxuLyoqXG4gKiBWb2x1bWUgcmVwcmVzZW50cyBhIG5hbWVkIHZvbHVtZSBpbiBhIHBvZCB0aGF0IG1heSBiZSBhY2Nlc3NlZCBieSBhbnlcbiAqIGNvbnRhaW5lciBpbiB0aGUgcG9kLlxuICpcbiAqIERvY2tlciBhbHNvIGhhcyBhIGNvbmNlcHQgb2Ygdm9sdW1lcywgdGhvdWdoIGl0IGlzIHNvbWV3aGF0IGxvb3NlciBhbmQgbGVzc1xuICogbWFuYWdlZC4gSW4gRG9ja2VyLCBhIHZvbHVtZSBpcyBzaW1wbHkgYSBkaXJlY3Rvcnkgb24gZGlzayBvciBpbiBhbm90aGVyXG4gKiBDb250YWluZXIuIExpZmV0aW1lcyBhcmUgbm90IG1hbmFnZWQgYW5kIHVudGlsIHZlcnkgcmVjZW50bHkgdGhlcmUgd2VyZSBvbmx5XG4gKiBsb2NhbC1kaXNrLWJhY2tlZCB2b2x1bWVzLiBEb2NrZXIgbm93IHByb3ZpZGVzIHZvbHVtZSBkcml2ZXJzLCBidXQgdGhlXG4gKiBmdW5jdGlvbmFsaXR5IGlzIHZlcnkgbGltaXRlZCBmb3Igbm93IChlLmcuIGFzIG9mIERvY2tlciAxLjcgb25seSBvbmUgdm9sdW1lXG4gKiBkcml2ZXIgaXMgYWxsb3dlZCBwZXIgQ29udGFpbmVyIGFuZCB0aGVyZSBpcyBubyB3YXkgdG8gcGFzcyBwYXJhbWV0ZXJzIHRvXG4gKiB2b2x1bWVzKS5cbiAqXG4gKiBBIEt1YmVybmV0ZXMgdm9sdW1lLCBvbiB0aGUgb3RoZXIgaGFuZCwgaGFzIGFuIGV4cGxpY2l0IGxpZmV0aW1lIC0gdGhlIHNhbWVcbiAqIGFzIHRoZSBQb2QgdGhhdCBlbmNsb3NlcyBpdC4gQ29uc2VxdWVudGx5LCBhIHZvbHVtZSBvdXRsaXZlcyBhbnkgQ29udGFpbmVyc1xuICogdGhhdCBydW4gd2l0aGluIHRoZSBQb2QsIGFuZCBkYXRhIGlzIHByZXNlcnZlZCBhY3Jvc3MgQ29udGFpbmVyIHJlc3RhcnRzLiBPZlxuICogY291cnNlLCB3aGVuIGEgUG9kIGNlYXNlcyB0byBleGlzdCwgdGhlIHZvbHVtZSB3aWxsIGNlYXNlIHRvIGV4aXN0LCB0b28uXG4gKiBQZXJoYXBzIG1vcmUgaW1wb3J0YW50bHkgdGhhbiB0aGlzLCBLdWJlcm5ldGVzIHN1cHBvcnRzIG1hbnkgdHlwZXMgb2ZcbiAqIHZvbHVtZXMsIGFuZCBhIFBvZCBjYW4gdXNlIGFueSBudW1iZXIgb2YgdGhlbSBzaW11bHRhbmVvdXNseS5cbiAqXG4gKiBBdCBpdHMgY29yZSwgYSB2b2x1bWUgaXMganVzdCBhIGRpcmVjdG9yeSwgcG9zc2libHkgd2l0aCBzb21lIGRhdGEgaW4gaXQsXG4gKiB3aGljaCBpcyBhY2Nlc3NpYmxlIHRvIHRoZSBDb250YWluZXJzIGluIGEgUG9kLiBIb3cgdGhhdCBkaXJlY3RvcnkgY29tZXMgdG9cbiAqIGJlLCB0aGUgbWVkaXVtIHRoYXQgYmFja3MgaXQsIGFuZCB0aGUgY29udGVudHMgb2YgaXQgYXJlIGRldGVybWluZWQgYnkgdGhlXG4gKiBwYXJ0aWN1bGFyIHZvbHVtZSB0eXBlIHVzZWQuXG4gKlxuICogVG8gdXNlIGEgdm9sdW1lLCBhIFBvZCBzcGVjaWZpZXMgd2hhdCB2b2x1bWVzIHRvIHByb3ZpZGUgZm9yIHRoZSBQb2QgKHRoZVxuICogLnNwZWMudm9sdW1lcyBmaWVsZCkgYW5kIHdoZXJlIHRvIG1vdW50IHRob3NlIGludG8gQ29udGFpbmVycyAodGhlXG4gKiAuc3BlYy5jb250YWluZXJzWypdLnZvbHVtZU1vdW50cyBmaWVsZCkuXG4gKlxuICogQSBwcm9jZXNzIGluIGEgY29udGFpbmVyIHNlZXMgYSBmaWxlc3lzdGVtIHZpZXcgY29tcG9zZWQgZnJvbSB0aGVpciBEb2NrZXJcbiAqIGltYWdlIGFuZCB2b2x1bWVzLiBUaGUgRG9ja2VyIGltYWdlIGlzIGF0IHRoZSByb290IG9mIHRoZSBmaWxlc3lzdGVtXG4gKiBoaWVyYXJjaHksIGFuZCBhbnkgdm9sdW1lcyBhcmUgbW91bnRlZCBhdCB0aGUgc3BlY2lmaWVkIHBhdGhzIHdpdGhpbiB0aGVcbiAqIGltYWdlLiBWb2x1bWVzIGNhbiBub3QgbW91bnQgb250byBvdGhlciB2b2x1bWVzXG4gKi9cbmV4cG9ydCBjbGFzcyBWb2x1bWUgZXh0ZW5kcyBDb25zdHJ1Y3QgaW1wbGVtZW50cyBJU3RvcmFnZSB7XG5cbiAgLyoqXG4gICAqIE1vdW50cyBhbiBBbWF6b24gV2ViIFNlcnZpY2VzIChBV1MpIEVCUyB2b2x1bWUgaW50byB5b3VyIHBvZC5cbiAgICogVW5saWtlIGVtcHR5RGlyLCB3aGljaCBpcyBlcmFzZWQgd2hlbiBhIHBvZCBpcyByZW1vdmVkLCB0aGUgY29udGVudHMgb2YgYW4gRUJTIHZvbHVtZSBhcmVcbiAgICogcGVyc2lzdGVkIGFuZCB0aGUgdm9sdW1lIGlzIHVubW91bnRlZC4gVGhpcyBtZWFucyB0aGF0IGFuIEVCUyB2b2x1bWUgY2FuIGJlIHByZS1wb3B1bGF0ZWQgd2l0aCBkYXRhLFxuICAgKiBhbmQgdGhhdCBkYXRhIGNhbiBiZSBzaGFyZWQgYmV0d2VlbiBwb2RzLlxuICAgKlxuICAgKiBUaGVyZSBhcmUgc29tZSByZXN0cmljdGlvbnMgd2hlbiB1c2luZyBhbiBhd3NFbGFzdGljQmxvY2tTdG9yZSB2b2x1bWU6XG4gICAqXG4gICAqIC0gdGhlIG5vZGVzIG9uIHdoaWNoIHBvZHMgYXJlIHJ1bm5pbmcgbXVzdCBiZSBBV1MgRUMyIGluc3RhbmNlcy5cbiAgICogLSB0aG9zZSBpbnN0YW5jZXMgbmVlZCB0byBiZSBpbiB0aGUgc2FtZSByZWdpb24gYW5kIGF2YWlsYWJpbGl0eSB6b25lIGFzIHRoZSBFQlMgdm9sdW1lLlxuICAgKiAtIEVCUyBvbmx5IHN1cHBvcnRzIGEgc2luZ2xlIEVDMiBpbnN0YW5jZSBtb3VudGluZyBhIHZvbHVtZS5cbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgZnJvbUF3c0VsYXN0aWNCbG9ja1N0b3JlKHNjb3BlOiBDb25zdHJ1Y3QsIGlkOiBzdHJpbmcsIHZvbHVtZUlkOiBzdHJpbmcsIG9wdGlvbnM6IEF3c0VsYXN0aWNCbG9ja1N0b3JlVm9sdW1lT3B0aW9ucyA9IHt9KTogVm9sdW1lIHtcbiAgICByZXR1cm4gbmV3IFZvbHVtZShzY29wZSwgaWQsIG9wdGlvbnMubmFtZSA/PyBgZWJzLSR7dm9sdW1lSWR9YCwge1xuICAgICAgYXdzRWxhc3RpY0Jsb2NrU3RvcmU6IHtcbiAgICAgICAgdm9sdW1lSWQsXG4gICAgICAgIGZzVHlwZTogb3B0aW9ucy5mc1R5cGUgPz8gJ2V4dDQnLFxuICAgICAgICBwYXJ0aXRpb246IG9wdGlvbnMucGFydGl0aW9uLFxuICAgICAgICByZWFkT25seTogb3B0aW9ucy5yZWFkT25seSA/PyBmYWxzZSxcbiAgICAgIH0sXG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogTW91bnRzIGEgTWljcm9zb2Z0IEF6dXJlIERhdGEgRGlzayBpbnRvIGEgcG9kLlxuICAgKi9cbiAgcHVibGljIHN0YXRpYyBmcm9tQXp1cmVEaXNrKHNjb3BlOiBDb25zdHJ1Y3QsIGlkOiBzdHJpbmcsIGRpc2tOYW1lOiBzdHJpbmcsIGRpc2tVcmk6IHN0cmluZywgb3B0aW9uczogQXp1cmVEaXNrVm9sdW1lT3B0aW9ucyA9IHt9KTogVm9sdW1lIHtcbiAgICByZXR1cm4gbmV3IFZvbHVtZShzY29wZSwgaWQsIG9wdGlvbnMubmFtZSA/PyBgYXp1cmVkaXNrLSR7ZGlza05hbWV9YCwge1xuICAgICAgYXp1cmVEaXNrOiB7XG4gICAgICAgIGRpc2tOYW1lLFxuICAgICAgICBkaXNrVXJpLFxuICAgICAgICBjYWNoaW5nTW9kZTogb3B0aW9ucy5jYWNoaW5nTW9kZSA/PyBBenVyZURpc2tQZXJzaXN0ZW50Vm9sdW1lQ2FjaGluZ01vZGUuTk9ORSxcbiAgICAgICAgZnNUeXBlOiBvcHRpb25zLmZzVHlwZSA/PyAnZXh0NCcsXG4gICAgICAgIGtpbmQ6IG9wdGlvbnMua2luZCA/PyBBenVyZURpc2tQZXJzaXN0ZW50Vm9sdW1lS2luZC5TSEFSRUQsXG4gICAgICAgIHJlYWRPbmx5OiBvcHRpb25zLnJlYWRPbmx5ID8/IGZhbHNlLFxuICAgICAgfSxcbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBNb3VudHMgYSBHb29nbGUgQ29tcHV0ZSBFbmdpbmUgKEdDRSkgcGVyc2lzdGVudCBkaXNrIChQRCkgaW50byB5b3VyIFBvZC5cbiAgICogVW5saWtlIGVtcHR5RGlyLCB3aGljaCBpcyBlcmFzZWQgd2hlbiBhIHBvZCBpcyByZW1vdmVkLCB0aGUgY29udGVudHMgb2YgYSBQRCBhcmVcbiAgICogcHJlc2VydmVkIGFuZCB0aGUgdm9sdW1lIGlzIG1lcmVseSB1bm1vdW50ZWQuIFRoaXMgbWVhbnMgdGhhdCBhIFBEIGNhbiBiZSBwcmUtcG9wdWxhdGVkXG4gICAqIHdpdGggZGF0YSwgYW5kIHRoYXQgZGF0YSBjYW4gYmUgc2hhcmVkIGJldHdlZW4gcG9kcy5cbiAgICpcbiAgICogVGhlcmUgYXJlIHNvbWUgcmVzdHJpY3Rpb25zIHdoZW4gdXNpbmcgYSBnY2VQZXJzaXN0ZW50RGlzazpcbiAgICpcbiAgICogLSB0aGUgbm9kZXMgb24gd2hpY2ggUG9kcyBhcmUgcnVubmluZyBtdXN0IGJlIEdDRSBWTXNcbiAgICogLSB0aG9zZSBWTXMgbmVlZCB0byBiZSBpbiB0aGUgc2FtZSBHQ0UgcHJvamVjdCBhbmQgem9uZSBhcyB0aGUgcGVyc2lzdGVudCBkaXNrXG4gICAqL1xuICBwdWJsaWMgc3RhdGljIGZyb21HY2VQZXJzaXN0ZW50RGlzayhzY29wZTogQ29uc3RydWN0LCBpZDogc3RyaW5nLCBwZE5hbWU6IHN0cmluZywgb3B0aW9uczogR0NFUGVyc2lzdGVudERpc2tWb2x1bWVPcHRpb25zID0ge30pOiBWb2x1bWUge1xuICAgIHJldHVybiBuZXcgVm9sdW1lKHNjb3BlLCBpZCwgb3B0aW9ucy5uYW1lID8/IGBnY2VkaXNrLSR7cGROYW1lfWAsIHtcbiAgICAgIGdjZVBlcnNpc3RlbnREaXNrOiB7XG4gICAgICAgIHBkTmFtZSxcbiAgICAgICAgZnNUeXBlOiBvcHRpb25zLmZzVHlwZSA/PyAnZXh0NCcsXG4gICAgICAgIHBhcnRpdGlvbjogb3B0aW9ucy5wYXJ0aXRpb24sXG4gICAgICAgIHJlYWRPbmx5OiBvcHRpb25zLnJlYWRPbmx5ID8/IGZhbHNlLFxuICAgICAgfSxcbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBQb3B1bGF0ZSB0aGUgdm9sdW1lIGZyb20gYSBDb25maWdNYXAuXG4gICAqXG4gICAqIFRoZSBjb25maWdNYXAgcmVzb3VyY2UgcHJvdmlkZXMgYSB3YXkgdG8gaW5qZWN0IGNvbmZpZ3VyYXRpb24gZGF0YSBpbnRvXG4gICAqIFBvZHMuIFRoZSBkYXRhIHN0b3JlZCBpbiBhIENvbmZpZ01hcCBvYmplY3QgY2FuIGJlIHJlZmVyZW5jZWQgaW4gYSB2b2x1bWVcbiAgICogb2YgdHlwZSBjb25maWdNYXAgYW5kIHRoZW4gY29uc3VtZWQgYnkgY29udGFpbmVyaXplZCBhcHBsaWNhdGlvbnMgcnVubmluZ1xuICAgKiBpbiBhIFBvZC5cbiAgICpcbiAgICogV2hlbiByZWZlcmVuY2luZyBhIGNvbmZpZ01hcCBvYmplY3QsIHlvdSBjYW4gc2ltcGx5IHByb3ZpZGUgaXRzIG5hbWUgaW4gdGhlXG4gICAqIHZvbHVtZSB0byByZWZlcmVuY2UgaXQuIFlvdSBjYW4gYWxzbyBjdXN0b21pemUgdGhlIHBhdGggdG8gdXNlIGZvciBhXG4gICAqIHNwZWNpZmljIGVudHJ5IGluIHRoZSBDb25maWdNYXAuXG4gICAqXG4gICAqIEBwYXJhbSBjb25maWdNYXAgVGhlIGNvbmZpZyBtYXAgdG8gdXNlIHRvIHBvcHVsYXRlIHRoZSB2b2x1bWUuXG4gICAqIEBwYXJhbSBvcHRpb25zIE9wdGlvbnNcbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgZnJvbUNvbmZpZ01hcChzY29wZTogQ29uc3RydWN0LCBpZDogc3RyaW5nLCBjb25maWdNYXA6IGNvbmZpZ21hcC5JQ29uZmlnTWFwLCBvcHRpb25zOiBDb25maWdNYXBWb2x1bWVPcHRpb25zID0ge30pOiBWb2x1bWUge1xuICAgIHJldHVybiBuZXcgVm9sdW1lKHNjb3BlLCBpZCwgb3B0aW9ucy5uYW1lID8/IGBjb25maWdtYXAtJHtjb25maWdNYXAubmFtZX1gLCB7XG4gICAgICBjb25maWdNYXA6IHtcbiAgICAgICAgbmFtZTogY29uZmlnTWFwLm5hbWUsXG4gICAgICAgIGRlZmF1bHRNb2RlOiBvcHRpb25zLmRlZmF1bHRNb2RlLFxuICAgICAgICBvcHRpb25hbDogb3B0aW9ucy5vcHRpb25hbCxcbiAgICAgICAgaXRlbXM6IFZvbHVtZS5yZW5kZXJJdGVtcyhvcHRpb25zLml0ZW1zKSxcbiAgICAgIH0sXG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogQW4gZW1wdHlEaXIgdm9sdW1lIGlzIGZpcnN0IGNyZWF0ZWQgd2hlbiBhIFBvZCBpcyBhc3NpZ25lZCB0byBhIE5vZGUsIGFuZFxuICAgKiBleGlzdHMgYXMgbG9uZyBhcyB0aGF0IFBvZCBpcyBydW5uaW5nIG9uIHRoYXQgbm9kZS4gQXMgdGhlIG5hbWUgc2F5cywgaXQgaXNcbiAgICogaW5pdGlhbGx5IGVtcHR5LiBDb250YWluZXJzIGluIHRoZSBQb2QgY2FuIGFsbCByZWFkIGFuZCB3cml0ZSB0aGUgc2FtZVxuICAgKiBmaWxlcyBpbiB0aGUgZW1wdHlEaXIgdm9sdW1lLCB0aG91Z2ggdGhhdCB2b2x1bWUgY2FuIGJlIG1vdW50ZWQgYXQgdGhlIHNhbWVcbiAgICogb3IgZGlmZmVyZW50IHBhdGhzIGluIGVhY2ggQ29udGFpbmVyLiBXaGVuIGEgUG9kIGlzIHJlbW92ZWQgZnJvbSBhIG5vZGUgZm9yXG4gICAqIGFueSByZWFzb24sIHRoZSBkYXRhIGluIHRoZSBlbXB0eURpciBpcyBkZWxldGVkIGZvcmV2ZXIuXG4gICAqXG4gICAqIEBzZWUgaHR0cDovL2t1YmVybmV0ZXMuaW8vZG9jcy91c2VyLWd1aWRlL3ZvbHVtZXMjZW1wdHlkaXJcbiAgICpcbiAgICogQHBhcmFtIG9wdGlvbnMgLSBBZGRpdGlvbmFsIG9wdGlvbnMuXG4gICAqL1xuICBwdWJsaWMgc3RhdGljIGZyb21FbXB0eURpcihzY29wZTogQ29uc3RydWN0LCBpZDogc3RyaW5nLCBuYW1lOiBzdHJpbmcsIG9wdGlvbnM6IEVtcHR5RGlyVm9sdW1lT3B0aW9ucyA9IHt9KTogVm9sdW1lIHtcbiAgICByZXR1cm4gbmV3IFZvbHVtZShzY29wZSwgaWQsIG5hbWUsIHtcbiAgICAgIGVtcHR5RGlyOiB7XG4gICAgICAgIG1lZGl1bTogb3B0aW9ucy5tZWRpdW0sXG4gICAgICAgIHNpemVMaW1pdDogb3B0aW9ucy5zaXplTGltaXRcbiAgICAgICAgICA/IGs4cy5RdWFudGl0eS5mcm9tU3RyaW5nKGAke29wdGlvbnMuc2l6ZUxpbWl0LnRvTWViaWJ5dGVzKCl9TWlgKVxuICAgICAgICAgIDogdW5kZWZpbmVkLFxuICAgICAgfSxcbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBQb3B1bGF0ZSB0aGUgdm9sdW1lIGZyb20gYSBTZWNyZXQuXG4gICAqXG4gICAqIEEgc2VjcmV0IHZvbHVtZSBpcyB1c2VkIHRvIHBhc3Mgc2Vuc2l0aXZlIGluZm9ybWF0aW9uLCBzdWNoIGFzIHBhc3N3b3JkcywgdG8gUG9kcy5cbiAgICogWW91IGNhbiBzdG9yZSBzZWNyZXRzIGluIHRoZSBLdWJlcm5ldGVzIEFQSSBhbmQgbW91bnQgdGhlbSBhcyBmaWxlcyBmb3IgdXNlIGJ5IHBvZHNcbiAgICogd2l0aG91dCBjb3VwbGluZyB0byBLdWJlcm5ldGVzIGRpcmVjdGx5LlxuICAgKlxuICAgKiBzZWNyZXQgdm9sdW1lcyBhcmUgYmFja2VkIGJ5IHRtcGZzIChhIFJBTS1iYWNrZWQgZmlsZXN5c3RlbSlcbiAgICogc28gdGhleSBhcmUgbmV2ZXIgd3JpdHRlbiB0byBub24tdm9sYXRpbGUgc3RvcmFnZS5cbiAgICpcbiAgICogQHNlZSBodHRwczovL2t1YmVybmV0ZXMuaW8vZG9jcy9jb25jZXB0cy9zdG9yYWdlL3ZvbHVtZXMvI3NlY3JldFxuICAgKlxuICAgKiBAcGFyYW0gc2VjciBUaGUgc2VjcmV0IHRvIHVzZSB0byBwb3B1bGF0ZSB0aGUgdm9sdW1lLlxuICAgKiBAcGFyYW0gb3B0aW9ucyBPcHRpb25zXG4gICAqL1xuICBwdWJsaWMgc3RhdGljIGZyb21TZWNyZXQoc2NvcGU6IENvbnN0cnVjdCwgaWQ6IHN0cmluZywgc2Vjcjogc2VjcmV0LklTZWNyZXQsIG9wdGlvbnM6IFNlY3JldFZvbHVtZU9wdGlvbnMgPSB7fSk6IFZvbHVtZSB7XG4gICAgcmV0dXJuIG5ldyBWb2x1bWUoc2NvcGUsIGlkLCBvcHRpb25zLm5hbWUgPz8gYHNlY3JldC0ke3NlY3IubmFtZX1gLCB7XG4gICAgICBzZWNyZXQ6IHtcbiAgICAgICAgc2VjcmV0TmFtZTogc2Vjci5uYW1lLFxuICAgICAgICBkZWZhdWx0TW9kZTogb3B0aW9ucy5kZWZhdWx0TW9kZSxcbiAgICAgICAgb3B0aW9uYWw6IG9wdGlvbnMub3B0aW9uYWwsXG4gICAgICAgIGl0ZW1zOiBWb2x1bWUucmVuZGVySXRlbXMob3B0aW9ucy5pdGVtcyksXG4gICAgICB9LFxuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIFVzZWQgdG8gbW91bnQgYSBQZXJzaXN0ZW50Vm9sdW1lIGludG8gYSBQb2QuXG4gICAqIFBlcnNpc3RlbnRWb2x1bWVDbGFpbXMgYXJlIGEgd2F5IGZvciB1c2VycyB0byBcImNsYWltXCIgZHVyYWJsZSBzdG9yYWdlIChzdWNoIGFzIGEgR0NFIFBlcnNpc3RlbnREaXNrIG9yIGFuIGlTQ1NJIHZvbHVtZSlcbiAgICogd2l0aG91dCBrbm93aW5nIHRoZSBkZXRhaWxzIG9mIHRoZSBwYXJ0aWN1bGFyIGNsb3VkIGVudmlyb25tZW50LlxuICAgKlxuICAgKiBAc2VlIGh0dHBzOi8va3ViZXJuZXRlcy5pby9kb2NzL2NvbmNlcHRzL3N0b3JhZ2UvcGVyc2lzdGVudC12b2x1bWVzL1xuICAgKi9cbiAgcHVibGljIHN0YXRpYyBmcm9tUGVyc2lzdGVudFZvbHVtZUNsYWltKFxuICAgIHNjb3BlOiBDb25zdHJ1Y3QsIGlkOiBzdHJpbmcsXG4gICAgY2xhaW06IHB2Yy5JUGVyc2lzdGVudFZvbHVtZUNsYWltLFxuICAgIG9wdGlvbnM6IFBlcnNpc3RlbnRWb2x1bWVDbGFpbVZvbHVtZU9wdGlvbnMgPSB7fSk6IFZvbHVtZSB7XG4gICAgcmV0dXJuIG5ldyBWb2x1bWUoc2NvcGUsIGlkLCBvcHRpb25zLm5hbWUgPz8gYHB2Yy0ke2NsYWltLm5hbWV9YCwge1xuICAgICAgcGVyc2lzdGVudFZvbHVtZUNsYWltOiB7XG4gICAgICAgIGNsYWltTmFtZTogY2xhaW0ubmFtZSxcbiAgICAgICAgcmVhZE9ubHk6IG9wdGlvbnMucmVhZE9ubHkgPz8gZmFsc2UsXG4gICAgICB9LFxuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIFVzZWQgdG8gbW91bnQgYSBmaWxlIG9yIGRpcmVjdG9yeSBmcm9tIHRoZSBob3N0IG5vZGUncyBmaWxlc3lzdGVtIGludG8gYSBQb2QuXG4gICAqIFRoaXMgaXMgbm90IHNvbWV0aGluZyB0aGF0IG1vc3QgUG9kcyB3aWxsIG5lZWQsIGJ1dCBpdCBvZmZlcnMgYSBwb3dlcmZ1bFxuICAgKiBlc2NhcGUgaGF0Y2ggZm9yIHNvbWUgYXBwbGljYXRpb25zLlxuICAgKlxuICAgKiBAc2VlIGh0dHBzOi8va3ViZXJuZXRlcy5pby9kb2NzL2NvbmNlcHRzL3N0b3JhZ2Uvdm9sdW1lcy8jaG9zdHBhdGhcbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgZnJvbUhvc3RQYXRoKHNjb3BlOiBDb25zdHJ1Y3QsIGlkOiBzdHJpbmcsIG5hbWU6IHN0cmluZywgb3B0aW9uczogSG9zdFBhdGhWb2x1bWVPcHRpb25zKTogVm9sdW1lIHtcbiAgICByZXR1cm4gbmV3IFZvbHVtZShzY29wZSwgaWQsIG5hbWUsIHtcbiAgICAgIGhvc3RQYXRoOiB7XG4gICAgICAgIHBhdGg6IG9wdGlvbnMucGF0aCxcbiAgICAgICAgdHlwZTogb3B0aW9ucy50eXBlID8/IEhvc3RQYXRoVm9sdW1lVHlwZS5ERUZBVUxULFxuICAgICAgfSxcbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBVc2VkIHRvIG1vdW50IGFuIE5GUyBzaGFyZSBpbnRvIGEgUG9kLlxuICAgKlxuICAgKiBAc2VlIGh0dHBzOi8va3ViZXJuZXRlcy5pby9kb2NzL2NvbmNlcHRzL3N0b3JhZ2Uvdm9sdW1lcy8jbmZzXG4gICAqL1xuICBwdWJsaWMgc3RhdGljIGZyb21OZnMoc2NvcGU6IENvbnN0cnVjdCwgaWQ6IHN0cmluZywgbmFtZTogc3RyaW5nLCBvcHRpb25zOiBOZnNWb2x1bWVPcHRpb25zKTogVm9sdW1lIHtcbiAgICByZXR1cm4gbmV3IFZvbHVtZShzY29wZSwgaWQsIG5hbWUsIHtcbiAgICAgIG5mczoge1xuICAgICAgICBzZXJ2ZXI6IG9wdGlvbnMuc2VydmVyLFxuICAgICAgICBwYXRoOiBvcHRpb25zLnBhdGgsXG4gICAgICAgIHJlYWRPbmx5OiBvcHRpb25zLnJlYWRPbmx5LFxuICAgICAgfSxcbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBQb3B1bGF0ZSB0aGUgdm9sdW1lIGZyb20gYSBDU0kgZHJpdmVyLCBmb3IgZXhhbXBsZSB0aGUgU2VjcmV0cyBTdG9yZSBDU0lcbiAgICogRHJpdmVyOiBodHRwczovL3NlY3JldHMtc3RvcmUtY3NpLWRyaXZlci5zaWdzLms4cy5pby9pbnRyb2R1Y3Rpb24uaHRtbC5cbiAgICogV2hpY2ggaW4gdHVybiBuZWVkcyBhbiBhc3NvY2lhdGVkIHByb3ZpZGVyIHRvIHNvdXJjZSB0aGUgc2VjcmV0cywgc3VjaCBhc1xuICAgKiB0aGUgQVdTIFNlY3JldHMgTWFuYWdlciBhbmQgU3lzdGVtcyBNYW5hZ2VyIFBhcmFtZXRlciBTdG9yZSBwcm92aWRlcjpcbiAgICogaHR0cHM6Ly9hd3MuZ2l0aHViLmlvL3NlY3JldHMtc3RvcmUtY3NpLWRyaXZlci1wcm92aWRlci1hd3MvLlxuICAgKlxuICAgKiBAcGFyYW0gZHJpdmVyIFRoZSBuYW1lIG9mIHRoZSBDU0kgZHJpdmVyIHRvIHVzZSB0byBwb3B1bGF0ZSB0aGUgdm9sdW1lLlxuICAgKiBAcGFyYW0gb3B0aW9ucyBPcHRpb25zIGZvciB0aGUgQ1NJIHZvbHVtZSwgaW5jbHVkaW5nIGRyaXZlci1zcGVjaWZpYyBvbmVzLlxuICAgKi9cbiAgcHVibGljIHN0YXRpYyBmcm9tQ3NpKHNjb3BlOiBDb25zdHJ1Y3QsIGlkOiBzdHJpbmcsIGRyaXZlcjogc3RyaW5nLCBvcHRpb25zOiBDc2lWb2x1bWVPcHRpb25zID0ge30pOiBWb2x1bWUge1xuICAgIHJldHVybiBuZXcgVm9sdW1lKHNjb3BlLCBpZCwgb3B0aW9ucy5uYW1lID8/IE5hbWVzLnRvRG5zTGFiZWwoc2NvcGUsIHsgZXh0cmE6IFtpZF0gfSksIHtcbiAgICAgIGNzaToge1xuICAgICAgICBkcml2ZXI6IGRyaXZlcixcbiAgICAgICAgZnNUeXBlOiBvcHRpb25zLmZzVHlwZSxcbiAgICAgICAgcmVhZE9ubHk6IG9wdGlvbnMucmVhZE9ubHksXG4gICAgICAgIHZvbHVtZUF0dHJpYnV0ZXM6IG9wdGlvbnMuYXR0cmlidXRlcyxcbiAgICAgIH0sXG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogQ3JlYXRlIGEgdm9sdW1lIHdpdGggYW4gYXJiaXRyYXJ5IG5hbWUgYW5kIG5vIGNvbmZpZ3VyYXRpb24uXG4gICAqL1xuICBwdWJsaWMgc3RhdGljIGZyb21OYW1lKHNjb3BlOiBDb25zdHJ1Y3QsIGlkOiBzdHJpbmcsIG5hbWU6IHN0cmluZyk6IFZvbHVtZSB7XG4gICAgcmV0dXJuIG5ldyBWb2x1bWUoc2NvcGUsIGlkLCBuYW1lLCB7fSk7XG4gIH1cblxuICAvKipcbiAgICogQGludGVybmFsXG4gICAqL1xuICBwcml2YXRlIHN0YXRpYyByZW5kZXJJdGVtcyA9IChpdGVtcz86IHsgW2tleTogc3RyaW5nXTogUGF0aE1hcHBpbmcgfSk6IHVuZGVmaW5lZCB8IEFycmF5PGs4cy5LZXlUb1BhdGg+ID0+IHtcbiAgICBpZiAoIWl0ZW1zKSB7XG4gICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH1cbiAgICBjb25zdCByZXN1bHQgPSBuZXcgQXJyYXk8azhzLktleVRvUGF0aD4oKTtcbiAgICBmb3IgKGNvbnN0IGtleSBvZiBPYmplY3Qua2V5cyhpdGVtcykuc29ydCgpKSB7XG4gICAgICByZXN1bHQucHVzaCh7XG4gICAgICAgIGtleSxcbiAgICAgICAgcGF0aDogaXRlbXNba2V5XS5wYXRoLFxuICAgICAgICBtb2RlOiBpdGVtc1trZXldLm1vZGUsXG4gICAgICB9KTtcbiAgICB9XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfTtcblxuXG4gIHByaXZhdGUgY29uc3RydWN0b3IoXG4gICAgc2NvcGU6IENvbnN0cnVjdCwgaWQ6IHN0cmluZyxcbiAgICBwdWJsaWMgcmVhZG9ubHkgbmFtZTogc3RyaW5nLFxuICAgIHByaXZhdGUgcmVhZG9ubHkgY29uZmlnOiBPbWl0PGs4cy5Wb2x1bWUsICduYW1lJz4pIHtcbiAgICBzdXBlcihzY29wZSwgaWQpO1xuICAgIHRoaXMubmFtZSA9IG5hbWUuc2xpY2UoMCwgNjMpO1xuICB9XG5cbiAgcHVibGljIGFzVm9sdW1lKCk6IFZvbHVtZSB7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICAvKipcbiAgICogQGludGVybmFsXG4gICAqL1xuICBwdWJsaWMgX3RvS3ViZSgpOiBrOHMuVm9sdW1lIHtcbiAgICByZXR1cm4ge1xuICAgICAgbmFtZTogdGhpcy5uYW1lLFxuICAgICAgLi4udGhpcy5jb25maWcsXG4gICAgfTtcbiAgfVxufVxuXG4vKipcbiAqIE9wdGlvbnMgb2YgYFZvbHVtZS5mcm9tR2NlUGVyc2lzdGVudERpc2tgLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIEdDRVBlcnNpc3RlbnREaXNrVm9sdW1lT3B0aW9ucyB7XG4gIC8qKlxuICAgKiBUaGUgdm9sdW1lIG5hbWUuXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gYXV0by1nZW5lcmF0ZWRcbiAgICovXG4gIHJlYWRvbmx5IG5hbWU/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIEZpbGVzeXN0ZW0gdHlwZSBvZiB0aGUgdm9sdW1lIHRoYXQgeW91IHdhbnQgdG8gbW91bnQuXG4gICAqIFRpcDogRW5zdXJlIHRoYXQgdGhlIGZpbGVzeXN0ZW0gdHlwZSBpcyBzdXBwb3J0ZWQgYnkgdGhlIGhvc3Qgb3BlcmF0aW5nIHN5c3RlbS5cbiAgICpcbiAgICogQHNlZSBodHRwczovL2t1YmVybmV0ZXMuaW8vZG9jcy9jb25jZXB0cy9zdG9yYWdlL3ZvbHVtZXMjYXdzZWxhc3RpY2Jsb2Nrc3RvcmVcbiAgICogQGRlZmF1bHQgJ2V4dDQnXG4gICAqL1xuICByZWFkb25seSBmc1R5cGU/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSBwYXJ0aXRpb24gaW4gdGhlIHZvbHVtZSB0aGF0IHlvdSB3YW50IHRvIG1vdW50LiBJZiBvbWl0dGVkLCB0aGUgZGVmYXVsdCBpcyB0byBtb3VudCBieSB2b2x1bWUgbmFtZS5cbiAgICogRXhhbXBsZXM6IEZvciB2b2x1bWUgL2Rldi9zZGExLCB5b3Ugc3BlY2lmeSB0aGUgcGFydGl0aW9uIGFzIFwiMVwiLlxuICAgKiBTaW1pbGFybHksIHRoZSB2b2x1bWUgcGFydGl0aW9uIGZvciAvZGV2L3NkYSBpcyBcIjBcIiAob3IgeW91IGNhbiBsZWF2ZSB0aGUgcHJvcGVydHkgZW1wdHkpLlxuICAgKlxuICAgKiBAZGVmYXVsdCAtIE5vIHBhcnRpdGlvbi5cbiAgICovXG4gIHJlYWRvbmx5IHBhcnRpdGlvbj86IG51bWJlcjtcblxuICAvKipcbiAgICogU3BlY2lmeSBcInRydWVcIiB0byBmb3JjZSBhbmQgc2V0IHRoZSBSZWFkT25seSBwcm9wZXJ0eSBpbiBWb2x1bWVNb3VudHMgdG8gXCJ0cnVlXCIuXG4gICAqXG4gICAqIEBzZWUgaHR0cHM6Ly9rdWJlcm5ldGVzLmlvL2RvY3MvY29uY2VwdHMvc3RvcmFnZS92b2x1bWVzI2F3c2VsYXN0aWNibG9ja3N0b3JlXG4gICAqIEBkZWZhdWx0IGZhbHNlXG4gICAqL1xuICByZWFkb25seSByZWFkT25seT86IGJvb2xlYW47XG5cbn1cblxuLyoqXG4gKiBPcHRpb25zIG9mIGBWb2x1bWUuZnJvbUF6dXJlRGlza2AuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQXp1cmVEaXNrVm9sdW1lT3B0aW9ucyB7XG4gIC8qKlxuICAgKiBUaGUgdm9sdW1lIG5hbWUuXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gYXV0by1nZW5lcmF0ZWRcbiAgICovXG4gIHJlYWRvbmx5IG5hbWU/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIEhvc3QgQ2FjaGluZyBtb2RlLlxuICAgKlxuICAgKiBAZGVmYXVsdCAtIEF6dXJlRGlza1BlcnNpc3RlbnRWb2x1bWVDYWNoaW5nTW9kZS5OT05FLlxuICAgKi9cbiAgcmVhZG9ubHkgY2FjaGluZ01vZGU/OiBBenVyZURpc2tQZXJzaXN0ZW50Vm9sdW1lQ2FjaGluZ01vZGU7XG5cbiAgLyoqXG4gICAqIEZpbGVzeXN0ZW0gdHlwZSB0byBtb3VudC4gTXVzdCBiZSBhIGZpbGVzeXN0ZW0gdHlwZSBzdXBwb3J0ZWQgYnkgdGhlIGhvc3Qgb3BlcmF0aW5nIHN5c3RlbS5cbiAgICpcbiAgICogQGRlZmF1bHQgJ2V4dDQnXG4gICAqL1xuICByZWFkb25seSBmc1R5cGU/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIEtpbmQgb2YgZGlzay5cbiAgICpcbiAgICogQGRlZmF1bHQgQXp1cmVEaXNrUGVyc2lzdGVudFZvbHVtZUtpbmQuU0hBUkVEXG4gICAqL1xuICByZWFkb25seSBraW5kPzogQXp1cmVEaXNrUGVyc2lzdGVudFZvbHVtZUtpbmQ7XG5cbiAgLyoqXG4gICAqIEZvcmNlIHRoZSBSZWFkT25seSBzZXR0aW5nIGluIFZvbHVtZU1vdW50cy5cbiAgICpcbiAgICogQGRlZmF1bHQgZmFsc2VcbiAgICovXG4gIHJlYWRvbmx5IHJlYWRPbmx5PzogYm9vbGVhbjtcbn1cblxuLyoqXG4gKiBPcHRpb25zIG9mIGBWb2x1bWUuZnJvbUF3c0VsYXN0aWNCbG9ja1N0b3JlYC5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBBd3NFbGFzdGljQmxvY2tTdG9yZVZvbHVtZU9wdGlvbnMge1xuICAvKipcbiAgICogVGhlIHZvbHVtZSBuYW1lLlxuICAgKlxuICAgKiBAZGVmYXVsdCAtIGF1dG8tZ2VuZXJhdGVkXG4gICAqL1xuICByZWFkb25seSBuYW1lPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBGaWxlc3lzdGVtIHR5cGUgb2YgdGhlIHZvbHVtZSB0aGF0IHlvdSB3YW50IHRvIG1vdW50LlxuICAgKiBUaXA6IEVuc3VyZSB0aGF0IHRoZSBmaWxlc3lzdGVtIHR5cGUgaXMgc3VwcG9ydGVkIGJ5IHRoZSBob3N0IG9wZXJhdGluZyBzeXN0ZW0uXG4gICAqXG4gICAqIEBzZWUgaHR0cHM6Ly9rdWJlcm5ldGVzLmlvL2RvY3MvY29uY2VwdHMvc3RvcmFnZS92b2x1bWVzI2F3c2VsYXN0aWNibG9ja3N0b3JlXG4gICAqIEBkZWZhdWx0ICdleHQ0J1xuICAgKi9cbiAgcmVhZG9ubHkgZnNUeXBlPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgcGFydGl0aW9uIGluIHRoZSB2b2x1bWUgdGhhdCB5b3Ugd2FudCB0byBtb3VudC4gSWYgb21pdHRlZCwgdGhlIGRlZmF1bHQgaXMgdG8gbW91bnQgYnkgdm9sdW1lIG5hbWUuXG4gICAqIEV4YW1wbGVzOiBGb3Igdm9sdW1lIC9kZXYvc2RhMSwgeW91IHNwZWNpZnkgdGhlIHBhcnRpdGlvbiBhcyBcIjFcIi5cbiAgICogU2ltaWxhcmx5LCB0aGUgdm9sdW1lIHBhcnRpdGlvbiBmb3IgL2Rldi9zZGEgaXMgXCIwXCIgKG9yIHlvdSBjYW4gbGVhdmUgdGhlIHByb3BlcnR5IGVtcHR5KS5cbiAgICpcbiAgICogQGRlZmF1bHQgLSBObyBwYXJ0aXRpb24uXG4gICAqL1xuICByZWFkb25seSBwYXJ0aXRpb24/OiBudW1iZXI7XG5cbiAgLyoqXG4gICAqIFNwZWNpZnkgXCJ0cnVlXCIgdG8gZm9yY2UgYW5kIHNldCB0aGUgUmVhZE9ubHkgcHJvcGVydHkgaW4gVm9sdW1lTW91bnRzIHRvIFwidHJ1ZVwiLlxuICAgKlxuICAgKiBAc2VlIGh0dHBzOi8va3ViZXJuZXRlcy5pby9kb2NzL2NvbmNlcHRzL3N0b3JhZ2Uvdm9sdW1lcyNhd3NlbGFzdGljYmxvY2tzdG9yZVxuICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgKi9cbiAgcmVhZG9ubHkgcmVhZE9ubHk/OiBib29sZWFuO1xufVxuXG4vKipcbiAqIE9wdGlvbnMgZm9yIHRoZSBDb25maWdNYXAtYmFzZWQgdm9sdW1lLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIENvbmZpZ01hcFZvbHVtZU9wdGlvbnMge1xuICAvKipcbiAgICogVGhlIHZvbHVtZSBuYW1lLlxuICAgKlxuICAgKiBAZGVmYXVsdCAtIGF1dG8tZ2VuZXJhdGVkXG4gICAqL1xuICByZWFkb25seSBuYW1lPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBNb2RlIGJpdHMgdG8gdXNlIG9uIGNyZWF0ZWQgZmlsZXMgYnkgZGVmYXVsdC4gTXVzdCBiZSBhIHZhbHVlIGJldHdlZW4gMCBhbmRcbiAgICogMDc3Ny4gRGVmYXVsdHMgdG8gMDY0NC4gRGlyZWN0b3JpZXMgd2l0aGluIHRoZSBwYXRoIGFyZSBub3QgYWZmZWN0ZWQgYnlcbiAgICogdGhpcyBzZXR0aW5nLiBUaGlzIG1pZ2h0IGJlIGluIGNvbmZsaWN0IHdpdGggb3RoZXIgb3B0aW9ucyB0aGF0IGFmZmVjdCB0aGVcbiAgICogZmlsZSBtb2RlLCBsaWtlIGZzR3JvdXAsIGFuZCB0aGUgcmVzdWx0IGNhbiBiZSBvdGhlciBtb2RlIGJpdHMgc2V0LlxuICAgKlxuICAgKiBAZGVmYXVsdCAwNjQ0LiBEaXJlY3RvcmllcyB3aXRoaW4gdGhlIHBhdGggYXJlIG5vdCBhZmZlY3RlZCBieSB0aGlzXG4gICAqIHNldHRpbmcuIFRoaXMgbWlnaHQgYmUgaW4gY29uZmxpY3Qgd2l0aCBvdGhlciBvcHRpb25zIHRoYXQgYWZmZWN0IHRoZSBmaWxlXG4gICAqIG1vZGUsIGxpa2UgZnNHcm91cCwgYW5kIHRoZSByZXN1bHQgY2FuIGJlIG90aGVyIG1vZGUgYml0cyBzZXQuXG4gICAqL1xuICByZWFkb25seSBkZWZhdWx0TW9kZT86IG51bWJlcjtcblxuICAvKipcbiAgICogU3BlY2lmeSB3aGV0aGVyIHRoZSBDb25maWdNYXAgb3IgaXRzIGtleXMgbXVzdCBiZSBkZWZpbmVkLlxuICAgKiBAZGVmYXVsdCAtIHVuZG9jdW1lbnRlZFxuICAgKi9cbiAgcmVhZG9ubHkgb3B0aW9uYWw/OiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBJZiB1bnNwZWNpZmllZCwgZWFjaCBrZXktdmFsdWUgcGFpciBpbiB0aGUgRGF0YSBmaWVsZCBvZiB0aGUgcmVmZXJlbmNlZFxuICAgKiBDb25maWdNYXAgd2lsbCBiZSBwcm9qZWN0ZWQgaW50byB0aGUgdm9sdW1lIGFzIGEgZmlsZSB3aG9zZSBuYW1lIGlzIHRoZSBrZXlcbiAgICogYW5kIGNvbnRlbnQgaXMgdGhlIHZhbHVlLiBJZiBzcGVjaWZpZWQsIHRoZSBsaXN0ZWQga2V5cyB3aWxsIGJlIHByb2plY3RlZFxuICAgKiBpbnRvIHRoZSBzcGVjaWZpZWQgcGF0aHMsIGFuZCB1bmxpc3RlZCBrZXlzIHdpbGwgbm90IGJlIHByZXNlbnQuIElmIGEga2V5XG4gICAqIGlzIHNwZWNpZmllZCB3aGljaCBpcyBub3QgcHJlc2VudCBpbiB0aGUgQ29uZmlnTWFwLCB0aGUgdm9sdW1lIHNldHVwIHdpbGxcbiAgICogZXJyb3IgdW5sZXNzIGl0IGlzIG1hcmtlZCBvcHRpb25hbC4gUGF0aHMgbXVzdCBiZSByZWxhdGl2ZSBhbmQgbWF5IG5vdFxuICAgKiBjb250YWluIHRoZSAnLi4nIHBhdGggb3Igc3RhcnQgd2l0aCAnLi4nLlxuICAgKlxuICAgKiBAZGVmYXVsdCAtIG5vIG1hcHBpbmdcbiAgICovXG4gIHJlYWRvbmx5IGl0ZW1zPzogeyBba2V5OiBzdHJpbmddOiBQYXRoTWFwcGluZyB9O1xufVxuXG4vKipcbiAqIE1hcHMgYSBzdHJpbmcga2V5IHRvIGEgcGF0aCB3aXRoaW4gYSB2b2x1bWUuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUGF0aE1hcHBpbmcge1xuICAvKipcbiAgICogVGhlIHJlbGF0aXZlIHBhdGggb2YgdGhlIGZpbGUgdG8gbWFwIHRoZSBrZXkgdG8uIE1heSBub3QgYmUgYW4gYWJzb2x1dGVcbiAgICogcGF0aC4gTWF5IG5vdCBjb250YWluIHRoZSBwYXRoIGVsZW1lbnQgJy4uJy4gTWF5IG5vdCBzdGFydCB3aXRoIHRoZSBzdHJpbmdcbiAgICogJy4uJy5cbiAgICovXG4gIHJlYWRvbmx5IHBhdGg6IHN0cmluZztcblxuICAvKipcbiAgICogT3B0aW9uYWw6IG1vZGUgYml0cyB0byB1c2Ugb24gdGhpcyBmaWxlLCBtdXN0IGJlIGEgdmFsdWUgYmV0d2VlbiAwIGFuZFxuICAgKiAwNzc3LiBJZiBub3Qgc3BlY2lmaWVkLCB0aGUgdm9sdW1lIGRlZmF1bHRNb2RlIHdpbGwgYmUgdXNlZC4gVGhpcyBtaWdodCBiZVxuICAgKiBpbiBjb25mbGljdCB3aXRoIG90aGVyIG9wdGlvbnMgdGhhdCBhZmZlY3QgdGhlIGZpbGUgbW9kZSwgbGlrZSBmc0dyb3VwLCBhbmRcbiAgICogdGhlIHJlc3VsdCBjYW4gYmUgb3RoZXIgbW9kZSBiaXRzIHNldC5cbiAgICovXG4gIHJlYWRvbmx5IG1vZGU/OiBudW1iZXI7XG59XG5cbi8qKlxuICogT3B0aW9ucyBmb3Igdm9sdW1lcyBwb3B1bGF0ZWQgd2l0aCBhbiBlbXB0eSBkaXJlY3RvcnkuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRW1wdHlEaXJWb2x1bWVPcHRpb25zIHtcbiAgLyoqXG4gICAqIEJ5IGRlZmF1bHQsIGVtcHR5RGlyIHZvbHVtZXMgYXJlIHN0b3JlZCBvbiB3aGF0ZXZlciBtZWRpdW0gaXMgYmFja2luZyB0aGVcbiAgICogbm9kZSAtIHRoYXQgbWlnaHQgYmUgZGlzayBvciBTU0Qgb3IgbmV0d29yayBzdG9yYWdlLCBkZXBlbmRpbmcgb24geW91clxuICAgKiBlbnZpcm9ubWVudC4gSG93ZXZlciwgeW91IGNhbiBzZXQgdGhlIGVtcHR5RGlyLm1lZGl1bSBmaWVsZCB0b1xuICAgKiBgRW1wdHlEaXJNZWRpdW0uTUVNT1JZYCB0byB0ZWxsIEt1YmVybmV0ZXMgdG8gbW91bnQgYSB0bXBmcyAoUkFNLWJhY2tlZFxuICAgKiBmaWxlc3lzdGVtKSBmb3IgeW91IGluc3RlYWQuIFdoaWxlIHRtcGZzIGlzIHZlcnkgZmFzdCwgYmUgYXdhcmUgdGhhdCB1bmxpa2VcbiAgICogZGlza3MsIHRtcGZzIGlzIGNsZWFyZWQgb24gbm9kZSByZWJvb3QgYW5kIGFueSBmaWxlcyB5b3Ugd3JpdGUgd2lsbCBjb3VudFxuICAgKiBhZ2FpbnN0IHlvdXIgQ29udGFpbmVyJ3MgbWVtb3J5IGxpbWl0LlxuICAgKlxuICAgKiBAZGVmYXVsdCBFbXB0eURpck1lZGl1bS5ERUZBVUxUXG4gICAqL1xuICByZWFkb25seSBtZWRpdW0/OiBFbXB0eURpck1lZGl1bTtcblxuICAvKipcbiAgICogVG90YWwgYW1vdW50IG9mIGxvY2FsIHN0b3JhZ2UgcmVxdWlyZWQgZm9yIHRoaXMgRW1wdHlEaXIgdm9sdW1lLiBUaGUgc2l6ZVxuICAgKiBsaW1pdCBpcyBhbHNvIGFwcGxpY2FibGUgZm9yIG1lbW9yeSBtZWRpdW0uIFRoZSBtYXhpbXVtIHVzYWdlIG9uIG1lbW9yeVxuICAgKiBtZWRpdW0gRW1wdHlEaXIgd291bGQgYmUgdGhlIG1pbmltdW0gdmFsdWUgYmV0d2VlbiB0aGUgU2l6ZUxpbWl0IHNwZWNpZmllZFxuICAgKiBoZXJlIGFuZCB0aGUgc3VtIG9mIG1lbW9yeSBsaW1pdHMgb2YgYWxsIGNvbnRhaW5lcnMgaW4gYSBwb2QuXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gbGltaXQgaXMgdW5kZWZpbmVkXG4gICAqL1xuICByZWFkb25seSBzaXplTGltaXQ/OiBTaXplO1xufVxuXG4vKipcbiAqIFRoZSBtZWRpdW0gb24gd2hpY2ggdG8gc3RvcmUgdGhlIHZvbHVtZS5cbiAqL1xuZXhwb3J0IGVudW0gRW1wdHlEaXJNZWRpdW0ge1xuICAvKipcbiAgICogVGhlIGRlZmF1bHQgdm9sdW1lIG9mIHRoZSBiYWNraW5nIG5vZGUuXG4gICAqL1xuICBERUZBVUxUID0gJycsXG5cbiAgLyoqXG4gICAqIE1vdW50IGEgdG1wZnMgKFJBTS1iYWNrZWQgZmlsZXN5c3RlbSkgZm9yIHlvdSBpbnN0ZWFkLiBXaGlsZSB0bXBmcyBpcyB2ZXJ5XG4gICAqIGZhc3QsIGJlIGF3YXJlIHRoYXQgdW5saWtlIGRpc2tzLCB0bXBmcyBpcyBjbGVhcmVkIG9uIG5vZGUgcmVib290IGFuZCBhbnlcbiAgICogZmlsZXMgeW91IHdyaXRlIHdpbGwgY291bnQgYWdhaW5zdCB5b3VyIENvbnRhaW5lcidzIG1lbW9yeSBsaW1pdC5cbiAgICovXG4gIE1FTU9SWSA9ICdNZW1vcnknLFxufVxuXG4vKipcbiAqIE9wdGlvbnMgZm9yIGEgUGVyc2lzdGVudFZvbHVtZUNsYWltLWJhc2VkIHZvbHVtZS5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBQZXJzaXN0ZW50Vm9sdW1lQ2xhaW1Wb2x1bWVPcHRpb25zIHtcbiAgLyoqXG4gICAqIFRoZSB2b2x1bWUgbmFtZS5cbiAgICpcbiAgICogQGRlZmF1bHQgLSBEZXJpdmVkIGZyb20gdGhlIFBWQyBuYW1lLlxuICAgKi9cbiAgcmVhZG9ubHkgbmFtZT86IHN0cmluZztcblxuICAvKipcbiAgICogV2lsbCBmb3JjZSB0aGUgUmVhZE9ubHkgc2V0dGluZyBpbiBWb2x1bWVNb3VudHMuXG4gICAqXG4gICAqIEBkZWZhdWx0IGZhbHNlXG4gICAqL1xuICByZWFkb25seSByZWFkT25seT86IGJvb2xlYW47XG5cbn1cblxuLyoqXG4gKiBPcHRpb25zIGZvciB0aGUgU2VjcmV0LWJhc2VkIHZvbHVtZS5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBTZWNyZXRWb2x1bWVPcHRpb25zIHtcbiAgLyoqXG4gICAqIFRoZSB2b2x1bWUgbmFtZS5cbiAgICpcbiAgICogQGRlZmF1bHQgLSBhdXRvLWdlbmVyYXRlZFxuICAgKi9cbiAgcmVhZG9ubHkgbmFtZT86IHN0cmluZztcblxuICAvKipcbiAgICogTW9kZSBiaXRzIHRvIHVzZSBvbiBjcmVhdGVkIGZpbGVzIGJ5IGRlZmF1bHQuIE11c3QgYmUgYSB2YWx1ZSBiZXR3ZWVuIDAgYW5kXG4gICAqIDA3NzcuIERlZmF1bHRzIHRvIDA2NDQuIERpcmVjdG9yaWVzIHdpdGhpbiB0aGUgcGF0aCBhcmUgbm90IGFmZmVjdGVkIGJ5XG4gICAqIHRoaXMgc2V0dGluZy4gVGhpcyBtaWdodCBiZSBpbiBjb25mbGljdCB3aXRoIG90aGVyIG9wdGlvbnMgdGhhdCBhZmZlY3QgdGhlXG4gICAqIGZpbGUgbW9kZSwgbGlrZSBmc0dyb3VwLCBhbmQgdGhlIHJlc3VsdCBjYW4gYmUgb3RoZXIgbW9kZSBiaXRzIHNldC5cbiAgICpcbiAgICogQGRlZmF1bHQgMDY0NC4gRGlyZWN0b3JpZXMgd2l0aGluIHRoZSBwYXRoIGFyZSBub3QgYWZmZWN0ZWQgYnkgdGhpc1xuICAgKiBzZXR0aW5nLiBUaGlzIG1pZ2h0IGJlIGluIGNvbmZsaWN0IHdpdGggb3RoZXIgb3B0aW9ucyB0aGF0IGFmZmVjdCB0aGUgZmlsZVxuICAgKiBtb2RlLCBsaWtlIGZzR3JvdXAsIGFuZCB0aGUgcmVzdWx0IGNhbiBiZSBvdGhlciBtb2RlIGJpdHMgc2V0LlxuICAgKi9cbiAgcmVhZG9ubHkgZGVmYXVsdE1vZGU/OiBudW1iZXI7XG5cbiAgLyoqXG4gICAqIFNwZWNpZnkgd2hldGhlciB0aGUgc2VjcmV0IG9yIGl0cyBrZXlzIG11c3QgYmUgZGVmaW5lZC5cbiAgICogQGRlZmF1bHQgLSB1bmRvY3VtZW50ZWRcbiAgICovXG4gIHJlYWRvbmx5IG9wdGlvbmFsPzogYm9vbGVhbjtcblxuICAvKipcbiAgICogSWYgdW5zcGVjaWZpZWQsIGVhY2gga2V5LXZhbHVlIHBhaXIgaW4gdGhlIERhdGEgZmllbGQgb2YgdGhlIHJlZmVyZW5jZWRcbiAgICogc2VjcmV0IHdpbGwgYmUgcHJvamVjdGVkIGludG8gdGhlIHZvbHVtZSBhcyBhIGZpbGUgd2hvc2UgbmFtZSBpcyB0aGUga2V5XG4gICAqIGFuZCBjb250ZW50IGlzIHRoZSB2YWx1ZS4gSWYgc3BlY2lmaWVkLCB0aGUgbGlzdGVkIGtleXMgd2lsbCBiZSBwcm9qZWN0ZWRcbiAgICogaW50byB0aGUgc3BlY2lmaWVkIHBhdGhzLCBhbmQgdW5saXN0ZWQga2V5cyB3aWxsIG5vdCBiZSBwcmVzZW50LiBJZiBhIGtleVxuICAgKiBpcyBzcGVjaWZpZWQgd2hpY2ggaXMgbm90IHByZXNlbnQgaW4gdGhlIHNlY3JldCwgdGhlIHZvbHVtZSBzZXR1cCB3aWxsXG4gICAqIGVycm9yIHVubGVzcyBpdCBpcyBtYXJrZWQgb3B0aW9uYWwuIFBhdGhzIG11c3QgYmUgcmVsYXRpdmUgYW5kIG1heSBub3RcbiAgICogY29udGFpbiB0aGUgJy4uJyBwYXRoIG9yIHN0YXJ0IHdpdGggJy4uJy5cbiAgICpcbiAgICogQGRlZmF1bHQgLSBubyBtYXBwaW5nXG4gICAqL1xuICByZWFkb25seSBpdGVtcz86IHsgW2tleTogc3RyaW5nXTogUGF0aE1hcHBpbmcgfTtcblxufVxuXG4vKipcbiAqIEF6dXJlIERpc2sga2luZHMuXG4gKi9cbmV4cG9ydCBlbnVtIEF6dXJlRGlza1BlcnNpc3RlbnRWb2x1bWVLaW5kIHtcblxuICAvKipcbiAgICogTXVsdGlwbGUgYmxvYiBkaXNrcyBwZXIgc3RvcmFnZSBhY2NvdW50LlxuICAgKi9cbiAgU0hBUkVEID0gJ1NoYXJlZCcsXG5cbiAgLyoqXG4gICAqIFNpbmdsZSBibG9iIGRpc2sgcGVyIHN0b3JhZ2UgYWNjb3VudC5cbiAgICovXG4gIERFRElDQVRFRCA9ICdEZWRpY2F0ZWQnLFxuXG4gIC8qKlxuICAgKiBBenVyZSBtYW5hZ2VkIGRhdGEgZGlzay5cbiAgICovXG4gIE1BTkFHRUQgPSAnTWFuYWdlZCcsXG59XG5cbi8qKlxuICogQXp1cmUgZGlzayBjYWNoaW5nIG1vZGVzLlxuICovXG5leHBvcnQgZW51bSBBenVyZURpc2tQZXJzaXN0ZW50Vm9sdW1lQ2FjaGluZ01vZGUge1xuXG4gIC8qKlxuICAgKiBOb25lLlxuICAgKi9cbiAgTk9ORSA9ICdOb25lJyxcblxuICAvKipcbiAgICogUmVhZE9ubHkuXG4gICAqL1xuICBSRUFEX09OTFkgPSAnUmVhZE9ubHknLFxuXG4gIC8qKlxuICAgKiBSZWFkV3JpdGUuXG4gICAqL1xuICBSRUFEX1dSSVRFID0gJ1JlYWRXcml0ZScsXG59XG5cbi8qKlxuICogT3B0aW9ucyBmb3IgYSBIb3N0UGF0aFZvbHVtZS1iYXNlZCB2b2x1bWUuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgSG9zdFBhdGhWb2x1bWVPcHRpb25zIHtcbiAgLyoqXG4gICAqIFRoZSBwYXRoIG9mIHRoZSBkaXJlY3Rvcnkgb24gdGhlIGhvc3QuXG4gICAqL1xuICByZWFkb25seSBwYXRoOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSBleHBlY3RlZCB0eXBlIG9mIHRoZSBwYXRoIGZvdW5kIG9uIHRoZSBob3N0LlxuICAgKlxuICAgKiBAZGVmYXVsdCBIb3N0UGF0aFZvbHVtZVR5cGUuREVGQVVMVFxuICAgKi9cbiAgcmVhZG9ubHkgdHlwZT86IEhvc3RQYXRoVm9sdW1lVHlwZTtcblxufVxuXG4vKipcbiAqIEhvc3QgcGF0aCB0eXBlcy5cbiAqL1xuZXhwb3J0IGVudW0gSG9zdFBhdGhWb2x1bWVUeXBlIHtcbiAgLyoqXG4gICAqIEVtcHR5IHN0cmluZyAoZGVmYXVsdCkgaXMgZm9yIGJhY2t3YXJkIGNvbXBhdGliaWxpdHksIHdoaWNoIG1lYW5zIHRoYXQgbm9cbiAgICogY2hlY2tzIHdpbGwgYmUgcGVyZm9ybWVkIGJlZm9yZSBtb3VudGluZyB0aGUgaG9zdFBhdGggdm9sdW1lLlxuICAgKi9cbiAgREVGQVVMVCA9ICcnLFxuXG4gIC8qKlxuICAgKiBJZiBub3RoaW5nIGV4aXN0cyBhdCB0aGUgZ2l2ZW4gcGF0aCwgYW4gZW1wdHkgZGlyZWN0b3J5IHdpbGwgYmUgY3JlYXRlZFxuICAgKiB0aGVyZSBhcyBuZWVkZWQgd2l0aCBwZXJtaXNzaW9uIHNldCB0byAwNzU1LCBoYXZpbmcgdGhlIHNhbWUgZ3JvdXAgYW5kXG4gICAqIG93bmVyc2hpcCB3aXRoIEt1YmVsZXQuXG4gICAqL1xuICBESVJFQ1RPUllfT1JfQ1JFQVRFID0gJ0RpcmVjdG9yeU9yQ3JlYXRlJyxcblxuICAvKipcbiAgICogQSBkaXJlY3RvcnkgbXVzdCBleGlzdCBhdCB0aGUgZ2l2ZW4gcGF0aC5cbiAgICovXG4gIERJUkVDVE9SWSA9ICdEaXJlY3RvcnknLFxuXG4gIC8qKlxuICAgKiBJZiBub3RoaW5nIGV4aXN0cyBhdCB0aGUgZ2l2ZW4gcGF0aCwgYW4gZW1wdHkgZmlsZSB3aWxsIGJlIGNyZWF0ZWQgdGhlcmVcbiAgICogYXMgbmVlZGVkIHdpdGggcGVybWlzc2lvbiBzZXQgdG8gMDY0NCwgaGF2aW5nIHRoZSBzYW1lIGdyb3VwIGFuZCBvd25lcnNoaXBcbiAgICogd2l0aCBLdWJlbGV0LlxuICAgKi9cbiAgRklMRV9PUl9DUkVBVEUgPSAnRmlsZU9yQ3JlYXRlJyxcblxuICAvKipcbiAgICogQSBmaWxlIG11c3QgZXhpc3QgYXQgdGhlIGdpdmVuIHBhdGguXG4gICAqL1xuICBGSUxFID0gJ0ZpbGUnLFxuXG4gIC8qKlxuICAgKiBBIFVOSVggc29ja2V0IG11c3QgZXhpc3QgYXQgdGhlIGdpdmVuIHBhdGguXG4gICAqL1xuICBTT0NLRVQgPSAnU29ja2V0JyxcblxuICAvKipcbiAgICogQSBjaGFyYWN0ZXIgZGV2aWNlIG11c3QgZXhpc3QgYXQgdGhlIGdpdmVuIHBhdGguXG4gICAqL1xuICBDSEFSX0RFVklDRSA9ICdDaGFyRGV2aWNlJyxcblxuICAvKipcbiAgICogQSBibG9jayBkZXZpY2UgbXVzdCBleGlzdCBhdCB0aGUgZ2l2ZW4gcGF0aC5cbiAgICovXG4gIEJMT0NLX0RFVklDRSA9ICdCbG9ja0RldmljZScsXG59XG5cbi8qKlxuICogT3B0aW9ucyBmb3IgdGhlIE5GUyBiYXNlZCB2b2x1bWUuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgTmZzVm9sdW1lT3B0aW9ucyB7XG5cbiAgLyoqXG4gICAqIFNlcnZlciBpcyB0aGUgaG9zdG5hbWUgb3IgSVAgYWRkcmVzcyBvZiB0aGUgTkZTIHNlcnZlci5cbiAgICovXG4gIHJlYWRvbmx5IHNlcnZlcjogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBJZiBzZXQgdG8gdHJ1ZSwgd2lsbCBmb3JjZSB0aGUgTkZTIGV4cG9ydCB0byBiZSBtb3VudGVkIHdpdGggcmVhZC1vbmx5IHBlcm1pc3Npb25zLlxuICAgKlxuICAgKiBAZGVmYXVsdCAtIGZhbHNlXG4gICAqL1xuICByZWFkb25seSByZWFkT25seT86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIFBhdGggdGhhdCBpcyBleHBvcnRlZCBieSB0aGUgTkZTIHNlcnZlclxuICAgKi9cbiAgcmVhZG9ubHkgcGF0aDogc3RyaW5nO1xufVxuXG4vKipcbiAqIE9wdGlvbnMgZm9yIHRoZSBDU0kgZHJpdmVyIGJhc2VkIHZvbHVtZS5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBDc2lWb2x1bWVPcHRpb25zIHtcbiAgLyoqXG4gICAqIFRoZSB2b2x1bWUgbmFtZS5cbiAgICpcbiAgICogQGRlZmF1bHQgLSBhdXRvLWdlbmVyYXRlZFxuICAgKi9cbiAgcmVhZG9ubHkgbmFtZT86IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIGZpbGVzeXN0ZW0gdHlwZSB0byBtb3VudC4gRXguIFwiZXh0NFwiLCBcInhmc1wiLCBcIm50ZnNcIi4gSWYgbm90IHByb3ZpZGVkLFxuICAgKiB0aGUgZW1wdHkgdmFsdWUgaXMgcGFzc2VkIHRvIHRoZSBhc3NvY2lhdGVkIENTSSBkcml2ZXIsIHdoaWNoIHdpbGxcbiAgICogZGV0ZXJtaW5lIHRoZSBkZWZhdWx0IGZpbGVzeXN0ZW0gdG8gYXBwbHkuXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gZHJpdmVyLWRlcGVuZGVudFxuICAgKi9cbiAgcmVhZG9ubHkgZnNUeXBlPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBXaGV0aGVyIHRoZSBtb3VudGVkIHZvbHVtZSBzaG91bGQgYmUgcmVhZC1vbmx5IG9yIG5vdC5cbiAgICpcbiAgICogQGRlZmF1bHQgLSBmYWxzZVxuICAgKi9cbiAgcmVhZG9ubHkgcmVhZE9ubHk/OiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBBbnkgZHJpdmVyLXNwZWNpZmljIGF0dHJpYnV0ZXMgdG8gcGFzcyB0byB0aGUgQ1NJIHZvbHVtZSBidWlsZGVyLlxuICAgKlxuICAgKiBAZGVmYXVsdCAtIHVuZGVmaW5lZFxuICAgKi9cbiAgcmVhZG9ubHkgYXR0cmlidXRlcz86IHsgW2tleTogc3RyaW5nXTogc3RyaW5nIH07XG59XG4iXX0=
@@ -0,0 +1,121 @@
1
+ import { ApiObjectMetadata, ApiObjectMetadataDefinition } from 'cdk8s';
2
+ import { Construct } from 'constructs';
3
+ import * as k8s from './imports/k8s';
4
+ import * as pod from './pod';
5
+ /**
6
+ * Properties for `Workload`.
7
+ */
8
+ export interface WorkloadProps extends pod.AbstractPodProps {
9
+ /**
10
+ * The pod metadata of this workload.
11
+ */
12
+ readonly podMetadata?: ApiObjectMetadata;
13
+ /**
14
+ * Automatically allocates a pod label selector for this workload and add
15
+ * it to the pod metadata. This ensures this workload manages pods created by
16
+ * its pod template.
17
+ *
18
+ * @default true
19
+ */
20
+ readonly select?: boolean;
21
+ /**
22
+ * Automatically spread pods across hostname and zones.
23
+ *
24
+ * @see https://kubernetes.io/docs/concepts/scheduling-eviction/topology-spread-constraints/#internal-default-constraints
25
+ * @default false
26
+ */
27
+ readonly spread?: boolean;
28
+ }
29
+ /**
30
+ * A label selector requirement is a selector that contains values, a key, and an operator that
31
+ * relates the key and values.
32
+ */
33
+ export interface LabelSelectorRequirement {
34
+ /**
35
+ * The label key that the selector applies to.
36
+ */
37
+ readonly key: string;
38
+ /**
39
+ * Represents a key's relationship to a set of values.
40
+ */
41
+ readonly operator: string;
42
+ /**
43
+ * An array of string values. If the operator is In or NotIn, the values array
44
+ * must be non-empty. If the operator is Exists or DoesNotExist,
45
+ * the values array must be empty. This array is replaced during a strategic merge patch.
46
+ */
47
+ readonly values?: string[];
48
+ }
49
+ /**
50
+ * A workload is an application running on Kubernetes. Whether your workload is a single
51
+ * component or several that work together, on Kubernetes you run it inside a set of pods.
52
+ * In Kubernetes, a Pod represents a set of running containers on your cluster.
53
+ */
54
+ export declare abstract class Workload extends pod.AbstractPod {
55
+ readonly connections: pod.PodConnections;
56
+ readonly scheduling: WorkloadScheduling;
57
+ private readonly spread;
58
+ private readonly _matchLabels;
59
+ private readonly _matchExpressions;
60
+ private _podMetadata?;
61
+ private readonly _props;
62
+ private readonly _matcher;
63
+ constructor(scope: Construct, id: string, props: WorkloadProps);
64
+ /**
65
+ * The metadata of pods in this workload.
66
+ */
67
+ get podMetadata(): ApiObjectMetadataDefinition;
68
+ /**
69
+ * Configure selectors for this workload.
70
+ */
71
+ select(...selectors: pod.LabelSelector[]): void;
72
+ /**
73
+ * The label matchers this workload will use in order to select pods.
74
+ *
75
+ * Returns a a copy. Use `select()` to add label matchers.
76
+ */
77
+ get matchLabels(): Record<string, string>;
78
+ /**
79
+ * The expression matchers this workload will use in order to select pods.
80
+ *
81
+ * Returns a a copy. Use `select()` to add expression matchers.
82
+ */
83
+ get matchExpressions(): LabelSelectorRequirement[];
84
+ /**
85
+ * @internal
86
+ */
87
+ _toLabelSelector(): k8s.LabelSelector;
88
+ /**
89
+ * @internal
90
+ */
91
+ _toPodSpec(): k8s.PodSpec;
92
+ }
93
+ /**
94
+ * Options for `WorkloadScheduling.spread`.
95
+ */
96
+ export interface WorkloadSchedulingSpreadOptions {
97
+ /**
98
+ * Indicates the spread is optional, with this weight score.
99
+ *
100
+ * @default - no weight. spread is assumed to be required.
101
+ */
102
+ readonly weight?: number;
103
+ /**
104
+ * Which topology to spread on.
105
+ *
106
+ * @default - Topology.HOSTNAME
107
+ */
108
+ readonly topology?: pod.Topology;
109
+ }
110
+ /**
111
+ * Controls the pod scheduling strategy of this workload.
112
+ * It offers some additional API's on top of the core pod scheduling.
113
+ */
114
+ export declare class WorkloadScheduling extends pod.PodScheduling {
115
+ /**
116
+ * Spread the pods in this workload by the topology key.
117
+ * A spread is a separation of the pod from itself and is used to
118
+ * balance out pod replicas across a given topology.
119
+ */
120
+ spread(options?: WorkloadSchedulingSpreadOptions): void;
121
+ }