@alauda-fe/common 1.4.28-beta.6 → 1.4.29-beta.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 (39) hide show
  1. package/array-form-table/form/component.d.ts +1 -1
  2. package/chart/common/series/bar-path.component.d.ts +1 -1
  3. package/chart/common/tooltip/tooltip.component.d.ts +1 -1
  4. package/code/code-editor-configs.d.ts +2 -0
  5. package/code/managed-fields-folder.util.d.ts +35 -0
  6. package/code/public-api.d.ts +4 -0
  7. package/code/resource-yaml-display/component.d.ts +64 -6
  8. package/code/resource-yaml-editor/component.d.ts +95 -0
  9. package/code/yaml-examples.d.ts +8 -0
  10. package/code/yaml-sidebar/component.d.ts +57 -0
  11. package/code/yaml-sidebar/types.d.ts +21 -0
  12. package/core/abstract/base-nested-form-control.d.ts +1 -1
  13. package/core/directives/scroll-to-first-invalid.directive.d.ts +1 -1
  14. package/core/services/feature-gate.service.d.ts +1 -1
  15. package/core/services/kubernetes-schema.service.d.ts +44 -0
  16. package/core/services/public-api.d.ts +1 -0
  17. package/core/types/openapi.d.ts +37 -0
  18. package/core/types/public-api.d.ts +1 -0
  19. package/core/utils/version.d.ts +1 -1
  20. package/esm2022/code/code-editor-configs.mjs +12 -2
  21. package/esm2022/code/managed-fields-folder.util.mjs +147 -0
  22. package/esm2022/code/public-api.mjs +5 -1
  23. package/esm2022/code/resource-yaml-display/component.mjs +256 -42
  24. package/esm2022/code/resource-yaml-editor/component.mjs +392 -0
  25. package/esm2022/code/yaml-examples.mjs +337 -0
  26. package/esm2022/code/yaml-sidebar/component.mjs +482 -0
  27. package/esm2022/code/yaml-sidebar/types.mjs +2 -0
  28. package/esm2022/core/services/kubernetes-schema.service.mjs +129 -0
  29. package/esm2022/core/services/public-api.mjs +2 -1
  30. package/esm2022/core/services/workspace-helper.service.mjs +4 -3
  31. package/esm2022/core/types/openapi.mjs +2 -0
  32. package/esm2022/core/types/public-api.mjs +2 -1
  33. package/esm2022/exec/terminal-group/component.mjs +2 -2
  34. package/esm2022/translate/translate.service.mjs +2 -2
  35. package/package.json +1 -1
  36. package/styles/global.scss +4 -0
  37. package/table/component.d.ts +1 -1
  38. package/table/helper.d.ts +1 -1
  39. package/view-chart/view-chart.component.d.ts +1 -1
@@ -0,0 +1,337 @@
1
+ /**
2
+ * Kubernetes 资源的内置 YAML 示例
3
+ * 按照 apiVersion.kind 的格式组织
4
+ */
5
+ export const BUILT_IN_YAML_EXAMPLES = {
6
+ 'apps/v1.Deployment': [
7
+ {
8
+ title: 'Basic Deployment',
9
+ description: 'A basic deployment example with nginx container',
10
+ yaml: `apiVersion: apps/v1
11
+ kind: Deployment
12
+ metadata:
13
+ name: example
14
+ spec:
15
+ selector:
16
+ matchLabels:
17
+ app: httpd
18
+ replicas: 3
19
+ template:
20
+ metadata:
21
+ labels:
22
+ app: httpd
23
+ spec:
24
+ containers:
25
+ - name: httpd
26
+ image: nginx:1.7.9
27
+ ports:
28
+ - containerPort: 8080`,
29
+ },
30
+ ],
31
+ 'v1.ConfigMap': [
32
+ {
33
+ title: 'Basic ConfigMap',
34
+ description: 'A basic ConfigMap example with properties and file data',
35
+ yaml: `apiVersion: v1
36
+ kind: ConfigMap
37
+ metadata:
38
+ name: example
39
+ data:
40
+ example.property.1: hello
41
+ example.property.2: world
42
+ example.property.file: |-
43
+ property.1=value-1
44
+ property.2=value-2
45
+ property.3=value-3`,
46
+ },
47
+ ],
48
+ 'batch/v1.CronJob': [
49
+ {
50
+ title: 'Basic CronJob',
51
+ description: 'A basic CronJob example that runs daily',
52
+ yaml: `apiVersion: batch/v1
53
+ kind: CronJob
54
+ metadata:
55
+ name: example
56
+ spec:
57
+ schedule: "@daily"
58
+ jobTemplate:
59
+ spec:
60
+ template:
61
+ spec:
62
+ containers:
63
+ - name: hello
64
+ image: busybox
65
+ args:
66
+ - /bin/sh
67
+ - -c
68
+ - date; echo Hello from the Kubernetes cluster
69
+ restartPolicy: OnFailure`,
70
+ },
71
+ ],
72
+ 'v1.PersistentVolume': [
73
+ {
74
+ title: 'Basic PersistentVolume',
75
+ description: 'A basic PersistentVolume example with NFS storage',
76
+ yaml: `apiVersion: v1
77
+ kind: PersistentVolume
78
+ metadata:
79
+ name: example
80
+ spec:
81
+ capacity:
82
+ storage: 5Gi
83
+ accessModes:
84
+ - ReadWriteOnce
85
+ persistentVolumeReclaimPolicy: Retain
86
+ storageClassName: slow
87
+ nfs:
88
+ path: /tmp
89
+ server: 172.17.0.2`,
90
+ },
91
+ ],
92
+ 'autoscaling/v2.HorizontalPodAutoscaler': [
93
+ {
94
+ title: 'Basic HorizontalPodAutoscaler',
95
+ description: 'A basic HPA example with CPU utilization target',
96
+ yaml: `apiVersion: autoscaling/v2
97
+ kind: HorizontalPodAutoscaler
98
+ metadata:
99
+ name: example
100
+ spec:
101
+ scaleTargetRef:
102
+ apiVersion: apps/v1
103
+ kind: Deployment
104
+ name: example
105
+ minReplicas: 1
106
+ maxReplicas: 3
107
+ metrics:
108
+ - type: Resource
109
+ resource:
110
+ name: cpu
111
+ target:
112
+ averageUtilization: 50
113
+ type: Utilization`,
114
+ },
115
+ ],
116
+ 'apps/v1.DaemonSet': [
117
+ {
118
+ title: 'Basic DaemonSet',
119
+ description: 'A basic DaemonSet example with nginx container',
120
+ yaml: `apiVersion: apps/v1
121
+ kind: DaemonSet
122
+ metadata:
123
+ name: example
124
+ spec:
125
+ selector:
126
+ matchLabels:
127
+ app: httpd
128
+ template:
129
+ metadata:
130
+ labels:
131
+ app: httpd
132
+ spec:
133
+ containers:
134
+ - name: httpd
135
+ image: nginx:1.7.9
136
+ ports:
137
+ - containerPort: 8080`,
138
+ },
139
+ ],
140
+ 'v1.PersistentVolumeClaim': [
141
+ {
142
+ title: 'Basic PersistentVolumeClaim',
143
+ description: 'A basic PVC example requesting 1Gi storage',
144
+ yaml: `apiVersion: v1
145
+ kind: PersistentVolumeClaim
146
+ metadata:
147
+ name: example
148
+ spec:
149
+ accessModes:
150
+ - ReadWriteOnce
151
+ volumeMode: Filesystem
152
+ resources:
153
+ requests:
154
+ storage: 1Gi`,
155
+ },
156
+ ],
157
+ 'v1.ResourceQuota': [
158
+ {
159
+ title: 'Compute ResourceQuota',
160
+ description: 'A ResourceQuota example for compute resources',
161
+ yaml: `apiVersion: v1
162
+ kind: ResourceQuota
163
+ metadata:
164
+ name: compute-quota
165
+ namespace: default
166
+ spec:
167
+ hard:
168
+ requests.cpu: '1'
169
+ requests.memory: 1Gi
170
+ limits.cpu: '2'
171
+ limits.memory: 2Gi`,
172
+ },
173
+ {
174
+ title: 'Storage Class ResourceQuota',
175
+ description: 'A ResourceQuota example for storage class specific quotas',
176
+ yaml: `apiVersion: v1
177
+ kind: ResourceQuota
178
+ metadata:
179
+ name: storage-class-quota
180
+ namespace: default
181
+ spec:
182
+ hard:
183
+ requests.storage: 100Gi
184
+ persistentvolumeclaims: '100'
185
+ # For quota specific to a storage class, the storage class must have the same name
186
+ gold.storage-class.kubernetes.io/requests.storage: 3Gi
187
+ gold.storage-class.kubernetes.io/persistentvolumeclaims: '5'
188
+ silver.storage-class.kubernetes.io/requests.storage: 2Gi
189
+ silver.storage-class.kubernetes.io/persistentvolumeclaims: '3'
190
+ bronze.storage-class.kubernetes.io/requests.storage: 1Gi
191
+ bronze.storage-class.kubernetes.io/persistentvolumeclaims: '1'`,
192
+ },
193
+ {
194
+ title: 'Object Counts ResourceQuota',
195
+ description: 'A ResourceQuota example for object count limits',
196
+ yaml: `apiVersion: v1
197
+ kind: ResourceQuota
198
+ metadata:
199
+ name: object-counts
200
+ namespace: default
201
+ spec:
202
+ hard:
203
+ configmaps: "10"
204
+ persistentvolumeclaims: "4"
205
+ replicationcontrollers: "20"
206
+ secrets: "10"
207
+ services: "10"
208
+ services.loadbalancers: "2"`,
209
+ },
210
+ ],
211
+ 'v1.LimitRange': [
212
+ {
213
+ title: 'Memory LimitRange',
214
+ description: 'A LimitRange example for container memory limits',
215
+ yaml: `apiVersion: v1
216
+ kind: LimitRange
217
+ metadata:
218
+ name: mem-limit-range
219
+ spec:
220
+ limits:
221
+ - default:
222
+ memory: 512Mi
223
+ defaultRequest:
224
+ memory: 256Mi
225
+ type: Container`,
226
+ },
227
+ ],
228
+ 'apps/v1.StatefulSet': [
229
+ {
230
+ title: 'Basic StatefulSet',
231
+ description: 'A basic StatefulSet example with persistent storage',
232
+ yaml: `apiVersion: apps/v1
233
+ kind: StatefulSet
234
+ metadata:
235
+ name: example
236
+ spec:
237
+ serviceName: "httpd"
238
+ replicas: 3
239
+ selector:
240
+ matchLabels:
241
+ app: httpd
242
+ template:
243
+ metadata:
244
+ labels:
245
+ app: httpd
246
+ spec:
247
+ terminationGracePeriodSeconds: 10
248
+ containers:
249
+ - name: httpd
250
+ image: nginx:1.7.9
251
+ ports:
252
+ - containerPort: 8080
253
+ name: web
254
+ volumeMounts:
255
+ - name: www
256
+ mountPath: /var/www/html
257
+ volumeClaimTemplates:
258
+ - metadata:
259
+ name: www
260
+ spec:
261
+ accessModes: [ "ReadWriteOnce" ]
262
+ storageClassName: my-storage-class
263
+ resources:
264
+ requests:
265
+ storage: 1Gi`,
266
+ },
267
+ ],
268
+ 'storage.k8s.io/v1.StorageClass': [
269
+ {
270
+ title: 'Basic StorageClass',
271
+ description: 'A basic StorageClass example',
272
+ yaml: `apiVersion: storage.k8s.io/v1
273
+ kind: StorageClass
274
+ metadata:
275
+ name: example
276
+ provisioner: my-provisioner
277
+ reclaimPolicy: Delete`,
278
+ },
279
+ ],
280
+ 'v1.Secret': [
281
+ {
282
+ title: 'Basic Secret',
283
+ description: 'A basic Secret example with username and password',
284
+ yaml: `apiVersion: v1
285
+ kind: Secret
286
+ metadata:
287
+ name: example
288
+ type: Opaque
289
+ stringData:
290
+ username: admin
291
+ password: opensesame`,
292
+ },
293
+ ],
294
+ 'app.k8s.io/v1beta1.Application': [
295
+ {
296
+ title: 'Basic Application',
297
+ description: 'A basic Application example with Deployment and Service',
298
+ yaml: `apiVersion: apps/v1
299
+ kind: Deployment
300
+ metadata:
301
+ labels:
302
+ app: nginx
303
+ name: nginx-deployment
304
+ spec:
305
+ replicas: 1
306
+ selector:
307
+ matchLabels:
308
+ app: nginx
309
+ template:
310
+ metadata:
311
+ labels:
312
+ app: nginx
313
+ spec:
314
+ containers:
315
+ - image: nginx:1.7.9
316
+ name: nginx
317
+ ports:
318
+ - containerPort: 80
319
+ ---
320
+ apiVersion: v1
321
+ kind: Service
322
+ metadata:
323
+ labels:
324
+ app: nginx
325
+ name: nginx
326
+ spec:
327
+ ports:
328
+ - port: 80
329
+ protocol: TCP
330
+ targetPort: 80
331
+ selector:
332
+ app: nginx
333
+ type: ClusterIP`,
334
+ },
335
+ ],
336
+ };
337
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoieWFtbC1leGFtcGxlcy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL2xpYnMvY29tbW9uL3NyYy9jb2RlL3lhbWwtZXhhbXBsZXMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBRUE7OztHQUdHO0FBQ0gsTUFBTSxDQUFDLE1BQU0sc0JBQXNCLEdBQXFDO0lBQ3RFLG9CQUFvQixFQUFFO1FBQ3BCO1lBQ0UsS0FBSyxFQUFFLGtCQUFrQjtZQUN6QixXQUFXLEVBQUUsaURBQWlEO1lBQzlELElBQUksRUFBRTs7Ozs7Ozs7Ozs7Ozs7Ozs7OzhCQWtCa0I7U0FDekI7S0FDRjtJQUVELGNBQWMsRUFBRTtRQUNkO1lBQ0UsS0FBSyxFQUFFLGlCQUFpQjtZQUN4QixXQUFXLEVBQUUseURBQXlEO1lBQ3RFLElBQUksRUFBRTs7Ozs7Ozs7Ozt1QkFVVztTQUNsQjtLQUNGO0lBRUQsa0JBQWtCLEVBQUU7UUFDbEI7WUFDRSxLQUFLLEVBQUUsZUFBZTtZQUN0QixXQUFXLEVBQUUseUNBQXlDO1lBQ3RELElBQUksRUFBRTs7Ozs7Ozs7Ozs7Ozs7Ozs7bUNBaUJ1QjtTQUM5QjtLQUNGO0lBRUQscUJBQXFCLEVBQUU7UUFDckI7WUFDRSxLQUFLLEVBQUUsd0JBQXdCO1lBQy9CLFdBQVcsRUFBRSxtREFBbUQ7WUFDaEUsSUFBSSxFQUFFOzs7Ozs7Ozs7Ozs7O3VCQWFXO1NBQ2xCO0tBQ0Y7SUFFRCx3Q0FBd0MsRUFBRTtRQUN4QztZQUNFLEtBQUssRUFBRSwrQkFBK0I7WUFDdEMsV0FBVyxFQUFFLGlEQUFpRDtZQUM5RCxJQUFJLEVBQUU7Ozs7Ozs7Ozs7Ozs7Ozs7OzBCQWlCYztTQUNyQjtLQUNGO0lBRUQsbUJBQW1CLEVBQUU7UUFDbkI7WUFDRSxLQUFLLEVBQUUsaUJBQWlCO1lBQ3hCLFdBQVcsRUFBRSxnREFBZ0Q7WUFDN0QsSUFBSSxFQUFFOzs7Ozs7Ozs7Ozs7Ozs7Ozs4QkFpQmtCO1NBQ3pCO0tBQ0Y7SUFFRCwwQkFBMEIsRUFBRTtRQUMxQjtZQUNFLEtBQUssRUFBRSw2QkFBNkI7WUFDcEMsV0FBVyxFQUFFLDRDQUE0QztZQUN6RCxJQUFJLEVBQUU7Ozs7Ozs7Ozs7bUJBVU87U0FDZDtLQUNGO0lBRUQsa0JBQWtCLEVBQUU7UUFDbEI7WUFDRSxLQUFLLEVBQUUsdUJBQXVCO1lBQzlCLFdBQVcsRUFBRSwrQ0FBK0M7WUFDNUQsSUFBSSxFQUFFOzs7Ozs7Ozs7O3VCQVVXO1NBQ2xCO1FBQ0Q7WUFDRSxLQUFLLEVBQUUsNkJBQTZCO1lBQ3BDLFdBQVcsRUFBRSwyREFBMkQ7WUFDeEUsSUFBSSxFQUFFOzs7Ozs7Ozs7Ozs7Ozs7bUVBZXVEO1NBQzlEO1FBQ0Q7WUFDRSxLQUFLLEVBQUUsNkJBQTZCO1lBQ3BDLFdBQVcsRUFBRSxpREFBaUQ7WUFDOUQsSUFBSSxFQUFFOzs7Ozs7Ozs7Ozs7Z0NBWW9CO1NBQzNCO0tBQ0Y7SUFFRCxlQUFlLEVBQUU7UUFDZjtZQUNFLEtBQUssRUFBRSxtQkFBbUI7WUFDMUIsV0FBVyxFQUFFLGtEQUFrRDtZQUMvRCxJQUFJLEVBQUU7Ozs7Ozs7Ozs7b0JBVVE7U0FDZjtLQUNGO0lBRUQscUJBQXFCLEVBQUU7UUFDckI7WUFDRSxLQUFLLEVBQUUsbUJBQW1CO1lBQzFCLFdBQVcsRUFBRSxxREFBcUQ7WUFDbEUsSUFBSSxFQUFFOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7dUJBaUNXO1NBQ2xCO0tBQ0Y7SUFFRCxnQ0FBZ0MsRUFBRTtRQUNoQztZQUNFLEtBQUssRUFBRSxvQkFBb0I7WUFDM0IsV0FBVyxFQUFFLDhCQUE4QjtZQUMzQyxJQUFJLEVBQUU7Ozs7O3NCQUtVO1NBQ2pCO0tBQ0Y7SUFFRCxXQUFXLEVBQUU7UUFDWDtZQUNFLEtBQUssRUFBRSxjQUFjO1lBQ3JCLFdBQVcsRUFBRSxtREFBbUQ7WUFDaEUsSUFBSSxFQUFFOzs7Ozs7O3VCQU9XO1NBQ2xCO0tBQ0Y7SUFFRCxnQ0FBZ0MsRUFBRTtRQUNoQztZQUNFLEtBQUssRUFBRSxtQkFBbUI7WUFDMUIsV0FBVyxFQUFFLHlEQUF5RDtZQUN0RSxJQUFJLEVBQUU7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O2tCQW1DTTtTQUNiO0tBQ0Y7Q0FDRixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgWWFtbEV4YW1wbGUgfSBmcm9tICcuL3lhbWwtc2lkZWJhci90eXBlcyc7XG5cbi8qKlxuICogS3ViZXJuZXRlcyDotYTmupDnmoTlhoXnva4gWUFNTCDnpLrkvotcbiAqIOaMieeFpyBhcGlWZXJzaW9uLmtpbmQg55qE5qC85byP57uE57uHXG4gKi9cbmV4cG9ydCBjb25zdCBCVUlMVF9JTl9ZQU1MX0VYQU1QTEVTOiB7IFtrZXk6IHN0cmluZ106IFlhbWxFeGFtcGxlW10gfSA9IHtcbiAgJ2FwcHMvdjEuRGVwbG95bWVudCc6IFtcbiAgICB7XG4gICAgICB0aXRsZTogJ0Jhc2ljIERlcGxveW1lbnQnLFxuICAgICAgZGVzY3JpcHRpb246ICdBIGJhc2ljIGRlcGxveW1lbnQgZXhhbXBsZSB3aXRoIG5naW54IGNvbnRhaW5lcicsXG4gICAgICB5YW1sOiBgYXBpVmVyc2lvbjogYXBwcy92MVxua2luZDogRGVwbG95bWVudFxubWV0YWRhdGE6XG4gIG5hbWU6IGV4YW1wbGVcbnNwZWM6XG4gIHNlbGVjdG9yOlxuICAgIG1hdGNoTGFiZWxzOlxuICAgICAgYXBwOiBodHRwZFxuICByZXBsaWNhczogM1xuICB0ZW1wbGF0ZTpcbiAgICBtZXRhZGF0YTpcbiAgICAgIGxhYmVsczpcbiAgICAgICAgYXBwOiBodHRwZFxuICAgIHNwZWM6XG4gICAgICBjb250YWluZXJzOlxuICAgICAgLSBuYW1lOiBodHRwZFxuICAgICAgICBpbWFnZTogbmdpbng6MS43LjlcbiAgICAgICAgcG9ydHM6XG4gICAgICAgIC0gY29udGFpbmVyUG9ydDogODA4MGAsXG4gICAgfSxcbiAgXSxcblxuICAndjEuQ29uZmlnTWFwJzogW1xuICAgIHtcbiAgICAgIHRpdGxlOiAnQmFzaWMgQ29uZmlnTWFwJyxcbiAgICAgIGRlc2NyaXB0aW9uOiAnQSBiYXNpYyBDb25maWdNYXAgZXhhbXBsZSB3aXRoIHByb3BlcnRpZXMgYW5kIGZpbGUgZGF0YScsXG4gICAgICB5YW1sOiBgYXBpVmVyc2lvbjogdjFcbmtpbmQ6IENvbmZpZ01hcFxubWV0YWRhdGE6XG4gIG5hbWU6IGV4YW1wbGVcbmRhdGE6XG4gIGV4YW1wbGUucHJvcGVydHkuMTogaGVsbG9cbiAgZXhhbXBsZS5wcm9wZXJ0eS4yOiB3b3JsZFxuICBleGFtcGxlLnByb3BlcnR5LmZpbGU6IHwtXG4gICAgcHJvcGVydHkuMT12YWx1ZS0xXG4gICAgcHJvcGVydHkuMj12YWx1ZS0yXG4gICAgcHJvcGVydHkuMz12YWx1ZS0zYCxcbiAgICB9LFxuICBdLFxuXG4gICdiYXRjaC92MS5Dcm9uSm9iJzogW1xuICAgIHtcbiAgICAgIHRpdGxlOiAnQmFzaWMgQ3JvbkpvYicsXG4gICAgICBkZXNjcmlwdGlvbjogJ0EgYmFzaWMgQ3JvbkpvYiBleGFtcGxlIHRoYXQgcnVucyBkYWlseScsXG4gICAgICB5YW1sOiBgYXBpVmVyc2lvbjogYmF0Y2gvdjFcbmtpbmQ6IENyb25Kb2Jcbm1ldGFkYXRhOlxuICBuYW1lOiBleGFtcGxlXG5zcGVjOlxuICBzY2hlZHVsZTogXCJAZGFpbHlcIlxuICBqb2JUZW1wbGF0ZTpcbiAgICBzcGVjOlxuICAgICAgdGVtcGxhdGU6XG4gICAgICAgIHNwZWM6XG4gICAgICAgICAgY29udGFpbmVyczpcbiAgICAgICAgICAtIG5hbWU6IGhlbGxvXG4gICAgICAgICAgICBpbWFnZTogYnVzeWJveFxuICAgICAgICAgICAgYXJnczpcbiAgICAgICAgICAgIC0gL2Jpbi9zaFxuICAgICAgICAgICAgLSAtY1xuICAgICAgICAgICAgLSBkYXRlOyBlY2hvIEhlbGxvIGZyb20gdGhlIEt1YmVybmV0ZXMgY2x1c3RlclxuICAgICAgICAgIHJlc3RhcnRQb2xpY3k6IE9uRmFpbHVyZWAsXG4gICAgfSxcbiAgXSxcblxuICAndjEuUGVyc2lzdGVudFZvbHVtZSc6IFtcbiAgICB7XG4gICAgICB0aXRsZTogJ0Jhc2ljIFBlcnNpc3RlbnRWb2x1bWUnLFxuICAgICAgZGVzY3JpcHRpb246ICdBIGJhc2ljIFBlcnNpc3RlbnRWb2x1bWUgZXhhbXBsZSB3aXRoIE5GUyBzdG9yYWdlJyxcbiAgICAgIHlhbWw6IGBhcGlWZXJzaW9uOiB2MVxua2luZDogUGVyc2lzdGVudFZvbHVtZVxubWV0YWRhdGE6XG4gIG5hbWU6IGV4YW1wbGVcbnNwZWM6XG4gIGNhcGFjaXR5OlxuICAgIHN0b3JhZ2U6IDVHaVxuICBhY2Nlc3NNb2RlczpcbiAgICAtIFJlYWRXcml0ZU9uY2VcbiAgcGVyc2lzdGVudFZvbHVtZVJlY2xhaW1Qb2xpY3k6IFJldGFpblxuICBzdG9yYWdlQ2xhc3NOYW1lOiBzbG93XG4gIG5mczpcbiAgICBwYXRoOiAvdG1wXG4gICAgc2VydmVyOiAxNzIuMTcuMC4yYCxcbiAgICB9LFxuICBdLFxuXG4gICdhdXRvc2NhbGluZy92Mi5Ib3Jpem9udGFsUG9kQXV0b3NjYWxlcic6IFtcbiAgICB7XG4gICAgICB0aXRsZTogJ0Jhc2ljIEhvcml6b250YWxQb2RBdXRvc2NhbGVyJyxcbiAgICAgIGRlc2NyaXB0aW9uOiAnQSBiYXNpYyBIUEEgZXhhbXBsZSB3aXRoIENQVSB1dGlsaXphdGlvbiB0YXJnZXQnLFxuICAgICAgeWFtbDogYGFwaVZlcnNpb246IGF1dG9zY2FsaW5nL3YyXG5raW5kOiBIb3Jpem9udGFsUG9kQXV0b3NjYWxlclxubWV0YWRhdGE6XG4gIG5hbWU6IGV4YW1wbGVcbnNwZWM6XG4gIHNjYWxlVGFyZ2V0UmVmOlxuICAgIGFwaVZlcnNpb246IGFwcHMvdjFcbiAgICBraW5kOiBEZXBsb3ltZW50XG4gICAgbmFtZTogZXhhbXBsZVxuICBtaW5SZXBsaWNhczogMVxuICBtYXhSZXBsaWNhczogM1xuICBtZXRyaWNzOlxuICAtIHR5cGU6IFJlc291cmNlXG4gICAgcmVzb3VyY2U6XG4gICAgICBuYW1lOiBjcHVcbiAgICAgIHRhcmdldDpcbiAgICAgICAgYXZlcmFnZVV0aWxpemF0aW9uOiA1MFxuICAgICAgICB0eXBlOiBVdGlsaXphdGlvbmAsXG4gICAgfSxcbiAgXSxcblxuICAnYXBwcy92MS5EYWVtb25TZXQnOiBbXG4gICAge1xuICAgICAgdGl0bGU6ICdCYXNpYyBEYWVtb25TZXQnLFxuICAgICAgZGVzY3JpcHRpb246ICdBIGJhc2ljIERhZW1vblNldCBleGFtcGxlIHdpdGggbmdpbnggY29udGFpbmVyJyxcbiAgICAgIHlhbWw6IGBhcGlWZXJzaW9uOiBhcHBzL3YxXG5raW5kOiBEYWVtb25TZXRcbm1ldGFkYXRhOlxuICBuYW1lOiBleGFtcGxlXG5zcGVjOlxuICBzZWxlY3RvcjpcbiAgICBtYXRjaExhYmVsczpcbiAgICAgIGFwcDogaHR0cGRcbiAgdGVtcGxhdGU6XG4gICAgbWV0YWRhdGE6XG4gICAgICBsYWJlbHM6XG4gICAgICAgIGFwcDogaHR0cGRcbiAgICBzcGVjOlxuICAgICAgY29udGFpbmVyczpcbiAgICAgIC0gbmFtZTogaHR0cGRcbiAgICAgICAgaW1hZ2U6IG5naW54OjEuNy45XG4gICAgICAgIHBvcnRzOlxuICAgICAgICAtIGNvbnRhaW5lclBvcnQ6IDgwODBgLFxuICAgIH0sXG4gIF0sXG5cbiAgJ3YxLlBlcnNpc3RlbnRWb2x1bWVDbGFpbSc6IFtcbiAgICB7XG4gICAgICB0aXRsZTogJ0Jhc2ljIFBlcnNpc3RlbnRWb2x1bWVDbGFpbScsXG4gICAgICBkZXNjcmlwdGlvbjogJ0EgYmFzaWMgUFZDIGV4YW1wbGUgcmVxdWVzdGluZyAxR2kgc3RvcmFnZScsXG4gICAgICB5YW1sOiBgYXBpVmVyc2lvbjogdjFcbmtpbmQ6IFBlcnNpc3RlbnRWb2x1bWVDbGFpbVxubWV0YWRhdGE6XG4gIG5hbWU6IGV4YW1wbGVcbnNwZWM6XG4gIGFjY2Vzc01vZGVzOlxuICAgIC0gUmVhZFdyaXRlT25jZVxuICB2b2x1bWVNb2RlOiBGaWxlc3lzdGVtXG4gIHJlc291cmNlczpcbiAgICByZXF1ZXN0czpcbiAgICAgIHN0b3JhZ2U6IDFHaWAsXG4gICAgfSxcbiAgXSxcblxuICAndjEuUmVzb3VyY2VRdW90YSc6IFtcbiAgICB7XG4gICAgICB0aXRsZTogJ0NvbXB1dGUgUmVzb3VyY2VRdW90YScsXG4gICAgICBkZXNjcmlwdGlvbjogJ0EgUmVzb3VyY2VRdW90YSBleGFtcGxlIGZvciBjb21wdXRlIHJlc291cmNlcycsXG4gICAgICB5YW1sOiBgYXBpVmVyc2lvbjogdjFcbmtpbmQ6IFJlc291cmNlUXVvdGFcbm1ldGFkYXRhOlxuICBuYW1lOiBjb21wdXRlLXF1b3RhXG4gIG5hbWVzcGFjZTogZGVmYXVsdFxuc3BlYzpcbiAgaGFyZDpcbiAgICByZXF1ZXN0cy5jcHU6ICcxJ1xuICAgIHJlcXVlc3RzLm1lbW9yeTogMUdpXG4gICAgbGltaXRzLmNwdTogJzInXG4gICAgbGltaXRzLm1lbW9yeTogMkdpYCxcbiAgICB9LFxuICAgIHtcbiAgICAgIHRpdGxlOiAnU3RvcmFnZSBDbGFzcyBSZXNvdXJjZVF1b3RhJyxcbiAgICAgIGRlc2NyaXB0aW9uOiAnQSBSZXNvdXJjZVF1b3RhIGV4YW1wbGUgZm9yIHN0b3JhZ2UgY2xhc3Mgc3BlY2lmaWMgcXVvdGFzJyxcbiAgICAgIHlhbWw6IGBhcGlWZXJzaW9uOiB2MVxua2luZDogUmVzb3VyY2VRdW90YVxubWV0YWRhdGE6XG4gIG5hbWU6IHN0b3JhZ2UtY2xhc3MtcXVvdGFcbiAgbmFtZXNwYWNlOiBkZWZhdWx0XG5zcGVjOlxuICBoYXJkOlxuICAgIHJlcXVlc3RzLnN0b3JhZ2U6IDEwMEdpXG4gICAgcGVyc2lzdGVudHZvbHVtZWNsYWltczogJzEwMCdcbiAgICAjIEZvciBxdW90YSBzcGVjaWZpYyB0byBhIHN0b3JhZ2UgY2xhc3MsIHRoZSBzdG9yYWdlIGNsYXNzIG11c3QgaGF2ZSB0aGUgc2FtZSBuYW1lXG4gICAgZ29sZC5zdG9yYWdlLWNsYXNzLmt1YmVybmV0ZXMuaW8vcmVxdWVzdHMuc3RvcmFnZTogM0dpXG4gICAgZ29sZC5zdG9yYWdlLWNsYXNzLmt1YmVybmV0ZXMuaW8vcGVyc2lzdGVudHZvbHVtZWNsYWltczogJzUnXG4gICAgc2lsdmVyLnN0b3JhZ2UtY2xhc3Mua3ViZXJuZXRlcy5pby9yZXF1ZXN0cy5zdG9yYWdlOiAyR2lcbiAgICBzaWx2ZXIuc3RvcmFnZS1jbGFzcy5rdWJlcm5ldGVzLmlvL3BlcnNpc3RlbnR2b2x1bWVjbGFpbXM6ICczJ1xuICAgIGJyb256ZS5zdG9yYWdlLWNsYXNzLmt1YmVybmV0ZXMuaW8vcmVxdWVzdHMuc3RvcmFnZTogMUdpXG4gICAgYnJvbnplLnN0b3JhZ2UtY2xhc3Mua3ViZXJuZXRlcy5pby9wZXJzaXN0ZW50dm9sdW1lY2xhaW1zOiAnMSdgLFxuICAgIH0sXG4gICAge1xuICAgICAgdGl0bGU6ICdPYmplY3QgQ291bnRzIFJlc291cmNlUXVvdGEnLFxuICAgICAgZGVzY3JpcHRpb246ICdBIFJlc291cmNlUXVvdGEgZXhhbXBsZSBmb3Igb2JqZWN0IGNvdW50IGxpbWl0cycsXG4gICAgICB5YW1sOiBgYXBpVmVyc2lvbjogdjFcbmtpbmQ6IFJlc291cmNlUXVvdGFcbm1ldGFkYXRhOlxuICBuYW1lOiBvYmplY3QtY291bnRzXG4gIG5hbWVzcGFjZTogZGVmYXVsdFxuc3BlYzpcbiAgaGFyZDpcbiAgICBjb25maWdtYXBzOiBcIjEwXCJcbiAgICBwZXJzaXN0ZW50dm9sdW1lY2xhaW1zOiBcIjRcIlxuICAgIHJlcGxpY2F0aW9uY29udHJvbGxlcnM6IFwiMjBcIlxuICAgIHNlY3JldHM6IFwiMTBcIlxuICAgIHNlcnZpY2VzOiBcIjEwXCJcbiAgICBzZXJ2aWNlcy5sb2FkYmFsYW5jZXJzOiBcIjJcImAsXG4gICAgfSxcbiAgXSxcblxuICAndjEuTGltaXRSYW5nZSc6IFtcbiAgICB7XG4gICAgICB0aXRsZTogJ01lbW9yeSBMaW1pdFJhbmdlJyxcbiAgICAgIGRlc2NyaXB0aW9uOiAnQSBMaW1pdFJhbmdlIGV4YW1wbGUgZm9yIGNvbnRhaW5lciBtZW1vcnkgbGltaXRzJyxcbiAgICAgIHlhbWw6IGBhcGlWZXJzaW9uOiB2MVxua2luZDogTGltaXRSYW5nZVxubWV0YWRhdGE6XG4gIG5hbWU6IG1lbS1saW1pdC1yYW5nZVxuc3BlYzpcbiAgbGltaXRzOlxuICAtIGRlZmF1bHQ6XG4gICAgICBtZW1vcnk6IDUxMk1pXG4gICAgZGVmYXVsdFJlcXVlc3Q6XG4gICAgICBtZW1vcnk6IDI1Nk1pXG4gICAgdHlwZTogQ29udGFpbmVyYCxcbiAgICB9LFxuICBdLFxuXG4gICdhcHBzL3YxLlN0YXRlZnVsU2V0JzogW1xuICAgIHtcbiAgICAgIHRpdGxlOiAnQmFzaWMgU3RhdGVmdWxTZXQnLFxuICAgICAgZGVzY3JpcHRpb246ICdBIGJhc2ljIFN0YXRlZnVsU2V0IGV4YW1wbGUgd2l0aCBwZXJzaXN0ZW50IHN0b3JhZ2UnLFxuICAgICAgeWFtbDogYGFwaVZlcnNpb246IGFwcHMvdjFcbmtpbmQ6IFN0YXRlZnVsU2V0XG5tZXRhZGF0YTpcbiAgbmFtZTogZXhhbXBsZVxuc3BlYzpcbiAgc2VydmljZU5hbWU6IFwiaHR0cGRcIlxuICByZXBsaWNhczogM1xuICBzZWxlY3RvcjpcbiAgICBtYXRjaExhYmVsczpcbiAgICAgIGFwcDogaHR0cGRcbiAgdGVtcGxhdGU6XG4gICAgbWV0YWRhdGE6XG4gICAgICBsYWJlbHM6XG4gICAgICAgIGFwcDogaHR0cGRcbiAgICBzcGVjOlxuICAgICAgdGVybWluYXRpb25HcmFjZVBlcmlvZFNlY29uZHM6IDEwXG4gICAgICBjb250YWluZXJzOlxuICAgICAgLSBuYW1lOiBodHRwZFxuICAgICAgICBpbWFnZTogbmdpbng6MS43LjlcbiAgICAgICAgcG9ydHM6XG4gICAgICAgIC0gY29udGFpbmVyUG9ydDogODA4MFxuICAgICAgICAgIG5hbWU6IHdlYlxuICAgICAgICB2b2x1bWVNb3VudHM6XG4gICAgICAgIC0gbmFtZTogd3d3XG4gICAgICAgICAgbW91bnRQYXRoOiAvdmFyL3d3dy9odG1sXG4gIHZvbHVtZUNsYWltVGVtcGxhdGVzOlxuICAtIG1ldGFkYXRhOlxuICAgICAgbmFtZTogd3d3XG4gICAgc3BlYzpcbiAgICAgIGFjY2Vzc01vZGVzOiBbIFwiUmVhZFdyaXRlT25jZVwiIF1cbiAgICAgIHN0b3JhZ2VDbGFzc05hbWU6IG15LXN0b3JhZ2UtY2xhc3NcbiAgICAgIHJlc291cmNlczpcbiAgICAgICAgcmVxdWVzdHM6XG4gICAgICAgICAgc3RvcmFnZTogMUdpYCxcbiAgICB9LFxuICBdLFxuXG4gICdzdG9yYWdlLms4cy5pby92MS5TdG9yYWdlQ2xhc3MnOiBbXG4gICAge1xuICAgICAgdGl0bGU6ICdCYXNpYyBTdG9yYWdlQ2xhc3MnLFxuICAgICAgZGVzY3JpcHRpb246ICdBIGJhc2ljIFN0b3JhZ2VDbGFzcyBleGFtcGxlJyxcbiAgICAgIHlhbWw6IGBhcGlWZXJzaW9uOiBzdG9yYWdlLms4cy5pby92MVxua2luZDogU3RvcmFnZUNsYXNzXG5tZXRhZGF0YTpcbiAgbmFtZTogZXhhbXBsZVxucHJvdmlzaW9uZXI6IG15LXByb3Zpc2lvbmVyXG5yZWNsYWltUG9saWN5OiBEZWxldGVgLFxuICAgIH0sXG4gIF0sXG5cbiAgJ3YxLlNlY3JldCc6IFtcbiAgICB7XG4gICAgICB0aXRsZTogJ0Jhc2ljIFNlY3JldCcsXG4gICAgICBkZXNjcmlwdGlvbjogJ0EgYmFzaWMgU2VjcmV0IGV4YW1wbGUgd2l0aCB1c2VybmFtZSBhbmQgcGFzc3dvcmQnLFxuICAgICAgeWFtbDogYGFwaVZlcnNpb246IHYxXG5raW5kOiBTZWNyZXRcbm1ldGFkYXRhOlxuICBuYW1lOiBleGFtcGxlXG50eXBlOiBPcGFxdWVcbnN0cmluZ0RhdGE6XG4gIHVzZXJuYW1lOiBhZG1pblxuICBwYXNzd29yZDogb3BlbnNlc2FtZWAsXG4gICAgfSxcbiAgXSxcblxuICAnYXBwLms4cy5pby92MWJldGExLkFwcGxpY2F0aW9uJzogW1xuICAgIHtcbiAgICAgIHRpdGxlOiAnQmFzaWMgQXBwbGljYXRpb24nLFxuICAgICAgZGVzY3JpcHRpb246ICdBIGJhc2ljIEFwcGxpY2F0aW9uIGV4YW1wbGUgd2l0aCBEZXBsb3ltZW50IGFuZCBTZXJ2aWNlJyxcbiAgICAgIHlhbWw6IGBhcGlWZXJzaW9uOiBhcHBzL3YxXG5raW5kOiBEZXBsb3ltZW50XG5tZXRhZGF0YTpcbiAgbGFiZWxzOlxuICAgIGFwcDogbmdpbnhcbiAgbmFtZTogbmdpbngtZGVwbG95bWVudFxuc3BlYzpcbiAgcmVwbGljYXM6IDFcbiAgc2VsZWN0b3I6XG4gICAgbWF0Y2hMYWJlbHM6XG4gICAgICBhcHA6IG5naW54XG4gIHRlbXBsYXRlOlxuICAgIG1ldGFkYXRhOlxuICAgICAgbGFiZWxzOlxuICAgICAgICBhcHA6IG5naW54XG4gICAgc3BlYzpcbiAgICAgIGNvbnRhaW5lcnM6XG4gICAgICAgIC0gaW1hZ2U6IG5naW54OjEuNy45XG4gICAgICAgICAgbmFtZTogbmdpbnhcbiAgICAgICAgICBwb3J0czpcbiAgICAgICAgICAgIC0gY29udGFpbmVyUG9ydDogODBcbi0tLVxuYXBpVmVyc2lvbjogdjFcbmtpbmQ6IFNlcnZpY2Vcbm1ldGFkYXRhOlxuICBsYWJlbHM6XG4gICAgYXBwOiBuZ2lueFxuICBuYW1lOiBuZ2lueFxuc3BlYzpcbiAgcG9ydHM6XG4gICAgLSBwb3J0OiA4MFxuICAgICAgcHJvdG9jb2w6IFRDUFxuICAgICAgdGFyZ2V0UG9ydDogODBcbiAgc2VsZWN0b3I6XG4gICAgYXBwOiBuZ2lueFxuICB0eXBlOiBDbHVzdGVySVBgLFxuICAgIH0sXG4gIF0sXG59O1xuIl19