@bluedynamics/cdk8s-plone 0.1.23 → 0.1.24

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.
@@ -294,6 +294,62 @@ new PloneHttpcache(chart, 'cache', {
294
294
 
295
295
  ---
296
296
 
297
+ ### `PloneVinylCacheOptions`
298
+
299
+ Configuration for the Varnish HTTP cache layer via the cloud-vinyl operator.
300
+ Requires the [cloud-vinyl operator](https://github.com/bluedynamics/cloud-vinyl) to be installed in the cluster.
301
+
302
+ | Property | Type | Required | Default | Description |
303
+ |----------|------|----------|---------|-------------|
304
+ | `plone` | `Plone` | Yes | - | Plone construct to attach cache to |
305
+ | `replicas` | `number` | No | `2` | Number of Varnish replicas |
306
+ | `requestCpu` | `string` | No | `100m` | CPU request |
307
+ | `limitCpu` | `string` | No | `500m` | CPU limit |
308
+ | `requestMemory` | `string` | No | `256Mi` | Memory request |
309
+ | `limitMemory` | `string` | No | `512Mi` | Memory limit |
310
+ | `director` | `string` | No | `shard` | Director type: shard, round_robin, random, hash |
311
+ | `vclRecvSnippet` | `string` | No | built-in | Custom VCL snippet for vcl_recv |
312
+ | `vclBackendResponseSnippet` | `string` | No | built-in | Custom VCL snippet for vcl_backend_response |
313
+ | `invalidation` | `boolean` | No | `true` | Enable PURGE/BAN/xkey cache invalidation |
314
+ | `monitoring` | `boolean` | No | `false` | Enable Prometheus metrics and ServiceMonitor |
315
+ | `tolerations` | `VinylCacheToleration[]` | No | - | Node tolerations for Varnish pods |
316
+
317
+ **Example:**
318
+ ```typescript
319
+ const cache = new PloneVinylCache(chart, 'cache', {
320
+ plone: ploneInstance,
321
+ replicas: 2,
322
+ requestCpu: '200m',
323
+ limitCpu: '1',
324
+ requestMemory: '256Mi',
325
+ limitMemory: '1Gi',
326
+ monitoring: true,
327
+ });
328
+
329
+ // Use the service name for IngressRoute
330
+ console.log(cache.vinylCacheServiceName);
331
+ ```
332
+
333
+ **Custom VCL Snippets:**
334
+ ```typescript
335
+ new PloneVinylCache(chart, 'cache', {
336
+ plone: ploneInstance,
337
+ vclRecvSnippet: `
338
+ // Custom routing logic
339
+ if (req.url ~ "^/api/") {
340
+ set req.backend_hint = plone_backend.backend();
341
+ }
342
+ `,
343
+ });
344
+ ```
345
+
346
+ **vs PloneHttpcache:**
347
+ - `PloneHttpcache` deploys Varnish via mittwald Helm chart (self-contained, no operator needed)
348
+ - `PloneVinylCache` creates a VinylCache CR managed by the cloud-vinyl operator (requires operator in cluster)
349
+ - VinylCache provides structured VCL generation, agent-based config delivery, and built-in invalidation proxy
350
+
351
+ ---
352
+
297
353
  ## PloneVariant Enum
298
354
 
299
355
  Defines the deployment variant:
package/lib/httpcache.js CHANGED
@@ -115,5 +115,5 @@ class PloneHttpcache extends constructs_1.Construct {
115
115
  }
116
116
  exports.PloneHttpcache = PloneHttpcache;
117
117
  _a = JSII_RTTI_SYMBOL_1;
118
- PloneHttpcache[_a] = { fqn: "@bluedynamics/cdk8s-plone.PloneHttpcache", version: "0.1.23" };
118
+ PloneHttpcache[_a] = { fqn: "@bluedynamics/cdk8s-plone.PloneHttpcache", version: "0.1.24" };
119
119
  //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaHR0cGNhY2hlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL2h0dHBjYWNoZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7OztBQUFBLHlCQUF5QjtBQUN6Qiw2QkFBNkI7QUFDN0IsaUNBQTZCO0FBQzdCLDJDQUF1QztBQXdKdkM7Ozs7Ozs7Ozs7Ozs7OztHQWVHO0FBQ0gsTUFBYSxjQUFlLFNBQVEsc0JBQVM7SUFPM0MsWUFBWSxLQUFnQixFQUFFLEVBQVUsRUFBRSxPQUE4QjtRQUN0RSxLQUFLLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxDQUFDO1FBQ2pCLElBQUksVUFBa0IsQ0FBQztRQUN2QixJQUFJLENBQUMsT0FBTyxDQUFDLFVBQVUsRUFBRSxDQUFDO1lBQ3hCLElBQUksT0FBZSxDQUFDO1lBQ3BCLElBQUksQ0FBQyxPQUFPLENBQUMsY0FBYyxFQUFFLENBQUM7Z0JBQzVCLE9BQU8sR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLFNBQVMsRUFBRSxRQUFRLEVBQUUsaUJBQWlCLENBQUMsQ0FBQztZQUM5RCxDQUFDO2lCQUFNLENBQUM7Z0JBQ04sT0FBTyxHQUFHLE9BQU8sQ0FBQyxjQUFjLENBQUM7WUFDbkMsQ0FBQztZQUNELFVBQVUsR0FBRyxFQUFFLENBQUMsWUFBWSxDQUFDLE9BQU8sRUFBRSxNQUFNLENBQUMsQ0FBQztRQUNoRCxDQUFDO2FBQU0sQ0FBQztZQUNOLFVBQVUsR0FBRyxPQUFPLENBQUMsVUFBVSxDQUFDO1FBQ2xDLENBQUM7UUFDRCxNQUFNLFFBQVEsR0FBRyxPQUFPLENBQUMsVUFBVSxJQUFJLE9BQU8sQ0FBQyxZQUFZLENBQUM7UUFDNUQsTUFBTSxTQUFTLEdBQUcsSUFBSSxZQUFJLENBQUMsSUFBSSxFQUFFLFdBQVcsRUFBRTtZQUM1Qyx1REFBdUQ7WUFDdkQsSUFBSSxFQUFFLDBCQUEwQjtZQUNoQyxLQUFLLEVBQUUsZ0JBQWdCO1lBQ3ZCLE9BQU8sRUFBRSxPQUFPLENBQUMsWUFBWTtZQUM3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QUM7UUFDRCxJQUFJLENBQUMsb0JBQW9CLEdBQUcsZ0JBQWdCLENBQUMsSUFBSSxDQUFDO0lBQ3BELENBQUM7O0FBNUZILHdDQTZGQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCAqIGFzIGZzIGZyb20gJ2ZzJztcbmltcG9ydCAqIGFzIHBhdGggZnJvbSAncGF0aCc7XG5pbXBvcnQgeyBIZWxtIH0gZnJvbSAnY2RrOHMnO1xuaW1wb3J0IHsgQ29uc3RydWN0IH0gZnJvbSAnY29uc3RydWN0cyc7XG5pbXBvcnQgeyBQbG9uZSB9IGZyb20gJy4vcGxvbmUnO1xuXG4vKipcbiAqIEFuIGVudmlyb25tZW50IHZhcmlhYmxlIHRvIHBhc3MgdG8gdGhlIGt1YmUtaHR0cGNhY2hlIGNvbnRhaW5lci5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBIdHRwY2FjaGVFbnZWYXIge1xuICAvKipcbiAgICogVGhlIG5hbWUgb2YgdGhlIGVudmlyb25tZW50IHZhcmlhYmxlLlxuICAgKi9cbiAgcmVhZG9ubHkgbmFtZTogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgdmFsdWUgb2YgdGhlIGVudmlyb25tZW50IHZhcmlhYmxlLlxuICAgKi9cbiAgcmVhZG9ubHkgdmFsdWU6IHN0cmluZztcbn1cblxuLyoqXG4gKiBBIEt1YmVybmV0ZXMgdG9sZXJhdGlvbiBmb3IgdGhlIFZhcm5pc2ggcG9kcy5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBIdHRwY2FjaGVUb2xlcmF0aW9uIHtcbiAgLyoqXG4gICAqIFRoZSB0YWludCBrZXkgdG8gdG9sZXJhdGUuXG4gICAqL1xuICByZWFkb25seSBrZXk6IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIG9wZXJhdG9yIChFcXVhbCBvciBFeGlzdHMpLlxuICAgKiBAZGVmYXVsdCAnRXF1YWwnXG4gICAqL1xuICByZWFkb25seSBvcGVyYXRvcj86IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIHRhaW50IHZhbHVlIHRvIG1hdGNoICh3aGVuIG9wZXJhdG9yIGlzIEVxdWFsKS5cbiAgICogQGRlZmF1bHQgLSBubyB2YWx1ZVxuICAgKi9cbiAgcmVhZG9ubHkgdmFsdWU/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSB0YWludCBlZmZlY3QgdG8gdG9sZXJhdGUgKE5vU2NoZWR1bGUsIFByZWZlck5vU2NoZWR1bGUsIE5vRXhlY3V0ZSkuXG4gICAqIEBkZWZhdWx0IC0gdG9sZXJhdGUgYWxsIGVmZmVjdHNcbiAgICovXG4gIHJlYWRvbmx5IGVmZmVjdD86IHN0cmluZztcbn1cblxuLyoqXG4gKiBDb25maWd1cmF0aW9uIG9wdGlvbnMgZm9yIFBsb25lSHR0cGNhY2hlIChWYXJuaXNoIGNhY2hpbmcgbGF5ZXIpLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFBsb25lSHR0cGNhY2hlT3B0aW9ucyB7XG4gIC8qKlxuICAgKiBUaGUgUGxvbmUgY29uc3RydWN0IHRvIGF0dGFjaCB0aGUgSFRUUCBjYWNoZSB0by5cbiAgICogVGhlIGNhY2hlIHdpbGwgYXV0b21hdGljYWxseSBjb25uZWN0IHRvIHRoZSBiYWNrZW5kIGFuZCBmcm9udGVuZCBzZXJ2aWNlcy5cbiAgICovXG4gIHJlYWRvbmx5IHBsb25lOiBQbG9uZTtcblxuICAvKipcbiAgICogVmFybmlzaCBWQ0wgY29uZmlndXJhdGlvbiBhcyBhIHN0cmluZy5cbiAgICogSWYgcHJvdmlkZWQsIHRoaXMgdGFrZXMgcHJlY2VkZW5jZSBvdmVyIHZhcm5pc2hWY2xGaWxlLlxuICAgKiBAZGVmYXVsdCAtIGxvYWRlZCBmcm9tIHZhcm5pc2hWY2xGaWxlIG9yIGRlZmF1bHQgY29uZmlnIGZpbGVcbiAgICovXG4gIHJlYWRvbmx5IHZhcm5pc2hWY2w/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFBhdGggdG8gYSBWYXJuaXNoIFZDTCBjb25maWd1cmF0aW9uIGZpbGUuXG4gICAqIElmIG5vdCBwcm92aWRlZCwgdXNlcyB0aGUgZGVmYXVsdCBWQ0wgZmlsZSBpbmNsdWRlZCBpbiB0aGUgbGlicmFyeS5cbiAgICogQGRlZmF1bHQgLSB1c2VzIGRlZmF1bHQgY29uZmlnL3Zhcm5pc2gudHBsLnZjbFxuICAgKi9cbiAgcmVhZG9ubHkgdmFybmlzaFZjbEZpbGU/OiBzdHJpbmcgfCB1bmRlZmluZWQ7XG5cbiAgLyoqXG4gICAqIE5hbWUgb2YgYW4gZXhpc3RpbmcgS3ViZXJuZXRlcyBzZWNyZXQgY29udGFpbmluZyBWYXJuaXNoIGFkbWluIGNyZWRlbnRpYWxzLlxuICAgKiBUaGUgc2VjcmV0IHNob3VsZCBiZSBjcmVhdGVkIHNlcGFyYXRlbHkgaW4gdGhlIHNhbWUgbmFtZXNwYWNlLlxuICAgKiBAZGVmYXVsdCAtIHVuZGVmaW5lZCAobm8gZXhpc3Rpbmcgc2VjcmV0KVxuICAgKi9cbiAgcmVhZG9ubHkgZXhpc3RpbmdTZWNyZXQ/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIENQVSBsaW1pdCBmb3IgVmFybmlzaCBwb2RzLlxuICAgKiBAZGVmYXVsdCAnNTAwbSdcbiAgICovXG4gIHJlYWRvbmx5IGxpbWl0Q3B1Pzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBNZW1vcnkgbGltaXQgZm9yIFZhcm5pc2ggcG9kcy5cbiAgICogQGRlZmF1bHQgJzUwME1pJ1xuICAgKi9cbiAgcmVhZG9ubHkgbGltaXRNZW1vcnk/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIENQVSByZXF1ZXN0IGZvciBWYXJuaXNoIHBvZHMuXG4gICAqIEBkZWZhdWx0ICcxMDBtJ1xuICAgKi9cbiAgcmVhZG9ubHkgcmVxdWVzdENwdT86IHN0cmluZztcblxuICAvKipcbiAgICogTWVtb3J5IHJlcXVlc3QgZm9yIFZhcm5pc2ggcG9kcy5cbiAgICogQGRlZmF1bHQgJzEwME1pJ1xuICAgKi9cbiAgcmVhZG9ubHkgcmVxdWVzdE1lbW9yeT86IHN0cmluZztcblxuICAvKipcbiAgICogRW5hYmxlIFByb21ldGhldXMgU2VydmljZU1vbml0b3IgZm9yIG1ldHJpY3MgY29sbGVjdGlvbi5cbiAgICogUmVxdWlyZXMgUHJvbWV0aGV1cyBPcGVyYXRvciB0byBiZSBpbnN0YWxsZWQgaW4gdGhlIGNsdXN0ZXIuXG4gICAqIEBkZWZhdWx0IGZhbHNlXG4gICAqL1xuICByZWFkb25seSBzZXJ2aWNlbW9uaXRvcj86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIEVuYWJsZSB0aGUgUHJvbWV0aGV1cyBleHBvcnRlciBmb3IgVmFybmlzaCBtZXRyaWNzLlxuICAgKiBXaGVuIGVuYWJsZWQsIHRoZSBleHBvcnRlciBzaWRlY2FyIGNvbnRhaW5lciB3aWxsIGJlIGRlcGxveWVkIGFsb25nc2lkZSBWYXJuaXNoLlxuICAgKiBAZGVmYXVsdCB0cnVlXG4gICAqL1xuICByZWFkb25seSBleHBvcnRlckVuYWJsZWQ/OiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBWZXJzaW9uIG9mIHRoZSBrdWJlLWh0dHBjYWNoZSBIZWxtIGNoYXJ0IHRvIHVzZS5cbiAgICogSWYgbm90IHNwZWNpZmllZCwgdGhlIGxhdGVzdCB2ZXJzaW9uIGZyb20gdGhlIHJlcG9zaXRvcnkgd2lsbCBiZSB1c2VkLlxuICAgKiBAZGVmYXVsdCB1bmRlZmluZWQgKGxhdGVzdClcbiAgICovXG4gIHJlYWRvbmx5IGNoYXJ0VmVyc2lvbj86IHN0cmluZztcblxuICAvKipcbiAgICogVmVyc2lvbiBvZiB0aGUga3ViZS1odHRwY2FjaGUgQ29udGFpbmVyIEltYWdlIHRvIHVzZS5cbiAgICogSWYgbm90IHNwZWNpZmllZCwgdGhlIGxhdGVzdCB2ZXJzaW9uIGZyb20gdGhlIHJlcG9zaXRvcnkgd2lsbCBiZSB1c2VkLlxuICAgKiBAZGVmYXVsdCB1bmRlZmluZWQgKGNoYXJ0VmVyc2lvbiA9IHdpdGggZWFjaCBjaGFydCByZWxlYXNlIHRoZXJlIGlzIGFuIGltYWdlIHJlbGVhc2UgdG9vIClcbiAgICovXG4gIHJlYWRvbmx5IGFwcFZlcnNpb24/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIE51bWJlciBvZiBWYXJuaXNoIHBvZCByZXBsaWNhcyB0byBydW4uXG4gICAqIEBkZWZhdWx0IDJcbiAgICovXG4gIHJlYWRvbmx5IHJlcGxpY2FzPzogbnVtYmVyO1xuXG4gIC8qKlxuICAgKiBBZGRpdGlvbmFsIGVudmlyb25tZW50IHZhcmlhYmxlcyB0byBwYXNzIHRvIHRoZSBrdWJlLWh0dHBjYWNoZSBjb250YWluZXIuXG4gICAqIFRoZXNlIGFyZSBhcHBlbmRlZCB0byB0aGUgYnVpbHQtaW4gZW52IHZhcnMgKEJBQ0tFTkRfU0VSVklDRV9OQU1FLCBldGMuKVxuICAgKiBhbmQgY2FuIGJlIHJlZmVyZW5jZWQgaW4gVkNMIHRlbXBsYXRlcyB1c2luZyBHbyB0ZW1wbGF0ZSBzeW50YXg6IHt7IC5FbnYuVkFSX05BTUUgfX1cbiAgICogQGRlZmF1bHQgLSBubyBhZGRpdGlvbmFsIGVudiB2YXJzXG4gICAqL1xuICByZWFkb25seSBleHRyYUVudlZhcnM/OiBIdHRwY2FjaGVFbnZWYXJbXTtcblxuICAvKipcbiAgICogVG9sZXJhdGlvbnMgZm9yIHRoZSBWYXJuaXNoIHBvZHMuXG4gICAqIFVzZSB0aGlzIHRvIGFsbG93IHNjaGVkdWxpbmcgb24gbm9kZXMgd2l0aCBzcGVjaWZpYyB0YWludHMsXG4gICAqIGUuZy4gbm9kZXMgdGFpbnRlZCB3aXRoIGt1YmVybmV0ZXMuaW8vYXJjaD1hbWQ2NDpOb1NjaGVkdWxlLlxuICAgKiBAZGVmYXVsdCAtIG5vIHRvbGVyYXRpb25zXG4gICAqL1xuICByZWFkb25seSB0b2xlcmF0aW9ucz86IEh0dHBjYWNoZVRvbGVyYXRpb25bXTtcbn1cblxuLyoqXG4gKiBQbG9uZUh0dHBjYWNoZSBjb25zdHJ1Y3QgZm9yIGRlcGxveWluZyBWYXJuaXNoIEhUVFAgY2FjaGluZyBsYXllci5cbiAqXG4gKiBVc2VzIHRoZSBtaXR0d2FsZC9rdWJlLWh0dHBjYWNoZSBIZWxtIGNoYXJ0IHRvIGRlcGxveSBWYXJuaXNoIGFzIGFcbiAqIGNhY2hpbmcgcHJveHkgaW4gZnJvbnQgb2YgUGxvbmUgYmFja2VuZCBhbmQvb3IgZnJvbnRlbmQgc2VydmljZXMuXG4gKlxuICogVGhlIGNhY2hlIGF1dG9tYXRpY2FsbHkgY29ubmVjdHMgdG8gdGhlIFBsb25lIHNlcnZpY2VzIGFuZCBwcm92aWRlc1xuICogSFRUUCBjYWNoZSBpbnZhbGlkYXRpb24gY2FwYWJpbGl0aWVzLlxuICpcbiAqIEBleGFtcGxlXG4gKiBjb25zdCBwbG9uZSA9IG5ldyBQbG9uZShjaGFydCwgJ3Bsb25lJyk7XG4gKiBjb25zdCBjYWNoZSA9IG5ldyBQbG9uZUh0dHBjYWNoZShjaGFydCwgJ2NhY2hlJywge1xuICogICBwbG9uZTogcGxvbmUsXG4gKiAgIGV4aXN0aW5nU2VjcmV0OiAndmFybmlzaC1zZWNyZXQnLFxuICogfSk7XG4gKi9cbmV4cG9ydCBjbGFzcyBQbG9uZUh0dHBjYWNoZSBleHRlbmRzIENvbnN0cnVjdCB7XG4gIC8qKlxuICAgKiBOYW1lIG9mIHRoZSBWYXJuaXNoIHNlcnZpY2UgY3JlYXRlZCBieSB0aGUgSGVsbSBjaGFydC5cbiAgICogVXNlIHRoaXMgdG8gcmVmZXJlbmNlIHRoZSBjYWNoZSBzZXJ2aWNlIGZyb20gaW5ncmVzcyBvciBvdGhlciBjb25zdHJ1Y3RzLlxuICAgKi9cbiAgcHVibGljIHJlYWRvbmx5IGh0dHBjYWNoZVNlcnZpY2VOYW1lOiBzdHJpbmc7XG5cbiAgY29uc3RydWN0b3Ioc2NvcGU6IENvbnN0cnVjdCwgaWQ6IHN0cmluZywgb3B0aW9uczogUGxvbmVIdHRwY2FjaGVPcHRpb25zKSB7XG4gICAgc3VwZXIoc2NvcGUsIGlkKTtcbiAgICBsZXQgdmFybmlzaFZjbDogc3RyaW5nO1xuICAgIGlmICghb3B0aW9ucy52YXJuaXNoVmNsKSB7XG4gICAgICBsZXQgdmNsUGF0aDogc3RyaW5nO1xuICAgICAgaWYgKCFvcHRpb25zLnZhcm5pc2hWY2xGaWxlKSB7XG4gICAgICAgIHZjbFBhdGggPSBwYXRoLmpvaW4oX19kaXJuYW1lLCAnY29uZmlnJywgJ3Zhcm5pc2gudHBsLnZjbCcpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdmNsUGF0aCA9IG9wdGlvbnMudmFybmlzaFZjbEZpbGU7XG4gICAgICB9XG4gICAgICB2YXJuaXNoVmNsID0gZnMucmVhZEZpbGVTeW5jKHZjbFBhdGgsICd1dGY4Jyk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHZhcm5pc2hWY2wgPSBvcHRpb25zLnZhcm5pc2hWY2w7XG4gICAgfVxuICAgIGNvbnN0IGltYWdlVGFnID0gb3B0aW9ucy5hcHBWZXJzaW9uID8/IG9wdGlvbnMuY2hhcnRWZXJzaW9uO1xuICAgIGNvbnN0IGh0dHBjYWNoZSA9IG5ldyBIZWxtKHRoaXMsICdodHRwY2FjaGUnLCB7XG4gICAgICAvLyBzZWUgaHR0cHM6Ly9naXRodWIuY29tL21pdHR3YWxkL2t1YmUtaHR0cGNhY2hlL2NoYXJ0XG4gICAgICByZXBvOiAnaHR0cHM6Ly9oZWxtLm1pdHR3YWxkLmRlJyxcbiAgICAgIGNoYXJ0OiAna3ViZS1odHRwY2FjaGUnLFxuICAgICAgdmVyc2lvbjogb3B0aW9ucy5jaGFydFZlcnNpb24sXG4gICAgICB2YWx1ZXM6IHtcbiAgICAgICAgcmVwbGljYUNvdW50OiBvcHRpb25zLnJlcGxpY2FzID8/IDIsXG4gICAgICAgIC4uLihpbWFnZVRhZyAmJiB7IGltYWdlOiB7IHRhZzogaW1hZ2VUYWcgfSB9KSxcbiAgICAgICAgY2FjaGU6IHtcbiAgICAgICAgICAvLyBuZWVkIHRvIGxvb2tzIGF0IHRoZSBmcm9udGVuZFdhdGNoLCBkbyB3ZSBuZWVkIGl0P1xuICAgICAgICAgIGZyb250ZW5kV2F0Y2g6IGZhbHNlLFxuICAgICAgICAgIGJhY2tlbmRXYXRjaDogZmFsc2UsXG4gICAgICAgICAgZXhpc3RpbmdTZWNyZXQ6IG9wdGlvbnMuZXhpc3RpbmdTZWNyZXQgPz8gdW5kZWZpbmVkLFxuICAgICAgICB9LFxuICAgICAgICB2Y2xUZW1wbGF0ZTogdmFybmlzaFZjbCxcbiAgICAgICAgZXh0cmFFbnZWYXJzOiBbXG4gICAgICAgICAgeyBuYW1lOiAnQkFDS0VORF9TRVJWSUNFX05BTUUnLCB2YWx1ZTogb3B0aW9ucy5wbG9uZS5iYWNrZW5kU2VydmljZU5hbWUgfSxcbiAgICAgICAgICB7IG5hbWU6ICdCQUNLRU5EX1NFUlZJQ0VfUE9SVCcsIHZhbHVlOiAnODA4MCcgfSxcbiAgICAgICAgICB7IG5hbWU6ICdCQUNLRU5EX1NJVEVfSUQnLCB2YWx1ZTogb3B0aW9ucy5wbG9uZS5zaXRlSWQgfSxcbiAgICAgICAgICB7IG5hbWU6ICdGUk9OVEVORF9TRVJWSUNFX05BTUUnLCB2YWx1ZTogb3B0aW9ucy5wbG9uZS5mcm9udGVuZFNlcnZpY2VOYW1lIH0sXG4gICAgICAgICAgeyBuYW1lOiAnRlJPTlRFTkRfU0VSVklDRV9QT1JUJywgdmFsdWU6ICczMDAwJyB9LFxuICAgICAgICAgIC4uLihvcHRpb25zLmV4dHJhRW52VmFycyA/PyBbXSksXG4gICAgICAgIF0sXG4gICAgICAgIC8vIHNlZSBodHRwczovL2dpdGh1Yi5jb20vbWl0dHdhbGQva3ViZS1odHRwY2FjaGUvaXNzdWVzLzI1M1xuICAgICAgICBub2RlU2VsZWN0b3I6IHtcbiAgICAgICAgICAna3ViZXJuZXRlcy5pby9hcmNoJzogJ2FtZDY0JyxcbiAgICAgICAgfSxcbiAgICAgICAgLi4uKG9wdGlvbnMudG9sZXJhdGlvbnMgJiYgeyB0b2xlcmF0aW9uczogb3B0aW9ucy50b2xlcmF0aW9ucyB9KSxcbiAgICAgICAgcmVzb3VyY2VzOiB7XG4gICAgICAgICAgbGltaXRzOiB7XG4gICAgICAgICAgICBjcHU6IG9wdGlvbnMubGltaXRDcHUgfHwgJzUwMG0nLFxuICAgICAgICAgICAgbWVtb3J5OiBvcHRpb25zLmxpbWl0TWVtb3J5IHx8ICc1MDBNaScsXG4gICAgICAgICAgfSxcbiAgICAgICAgICByZXF1ZXN0czoge1xuICAgICAgICAgICAgY3B1OiBvcHRpb25zLnJlcXVlc3RDcHUgfHwgJzEwMG0nLFxuICAgICAgICAgICAgbWVtb3J5OiBvcHRpb25zLnJlcXVlc3RNZW1vcnkgfHwgJzEwME1pJyxcbiAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgICAgICByYmFjOiB7XG4gICAgICAgICAgZW5hYmxlZDogZmFsc2UsXG4gICAgICAgIH0sXG4gICAgICAgIGV4cG9ydGVyOiB7XG4gICAgICAgICAgZW5hYmxlZDogb3B0aW9ucy5leHBvcnRlckVuYWJsZWQgPz8gdHJ1ZSxcbiAgICAgICAgICByZXNvdXJjZXM6IHtcbiAgICAgICAgICAgIGxpbWl0czoge1xuICAgICAgICAgICAgICBjcHU6ICcxMDBtJyxcbiAgICAgICAgICAgICAgbWVtb3J5OiAnMTAwTWknLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHJlcXVlc3RzOiB7XG4gICAgICAgICAgICAgIGNwdTogJzEwbScsXG4gICAgICAgICAgICAgIG1lbW9yeTogJzUwTWknLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgICAgICBzZXJ2aWNlTW9uaXRvcjoge1xuICAgICAgICAgIGVuYWJsZWQ6IG9wdGlvbnMuc2VydmljZW1vbml0b3IgfHwgZmFsc2UsXG4gICAgICAgICAgc2NyYXBlU2lnbmFsbGVyOiBvcHRpb25zLnNlcnZpY2Vtb25pdG9yIHx8IGZhbHNlLFxuICAgICAgICB9LFxuICAgICAgfSxcbiAgICB9KTtcbiAgICBjb25zdCBodHRwY2FjaGVTZXJ2aWNlID0gaHR0cGNhY2hlLmFwaU9iamVjdHMuZmluZCgoY29uc3RydWN0KSA9PiB7XG4gICAgICBpZiAoKGNvbnN0cnVjdC5raW5kID09PSAnU2VydmljZScpICYmIChjb25zdHJ1Y3QubWV0YWRhdGEubmFtZT8uZW5kc1dpdGgoJ2t1YmUtaHR0cGNhY2hlJykpKSB7XG4gICAgICAgIHJldHVybiBjb25zdHJ1Y3QubmFtZTtcbiAgICAgIH1cbiAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfSk7XG4gICAgaWYgKGh0dHBjYWNoZVNlcnZpY2UgPT09IHVuZGVmaW5lZCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdDb3VsZCBub3QgZmluZCBodHRwY2FjaGUgc2VydmljZScpO1xuICAgIH1cbiAgICB0aGlzLmh0dHBjYWNoZVNlcnZpY2VOYW1lID0gaHR0cGNhY2hlU2VydmljZS5uYW1lO1xuICB9XG59Il19