@bluedynamics/cdk8s-plone 0.1.6 → 0.1.7
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.jsii +109 -43
- package/API.md +49 -0
- package/README.md +19 -1
- package/lib/httpcache.js +1 -1
- package/lib/imports/monitoring.coreos.com.d.ts +2029 -0
- package/lib/imports/monitoring.coreos.com.js +1042 -0
- package/lib/plone.d.ts +26 -0
- package/lib/plone.js +53 -2
- package/lib/service.d.ts +6 -0
- package/lib/service.js +2 -1
- package/package.json +3 -1
package/.jsii
CHANGED
|
@@ -108,7 +108,7 @@
|
|
|
108
108
|
},
|
|
109
109
|
"name": "@bluedynamics/cdk8s-plone",
|
|
110
110
|
"readme": {
|
|
111
|
-
"markdown": "# CDK8S Plone\n\n> TypeScript and Python library for deploying Plone CMS to Kubernetes using CDK8S\n\n[](https://www.npmjs.com/package/@bluedynamics/cdk8s-plone)\n[](https://pypi.org/project/cdk8s-plone/)\n[](LICENSE)\n\n## Overview\n\ncdk8s-plone provides CDK8S constructs for deploying [Plone CMS](https://plone.org/) on Kubernetes. Define your infrastructure using TypeScript or Python and generate Kubernetes manifests automatically.\n\n**Key Features:**\n- 🚀 Supports Volto (modern React frontend) and Classic UI\n- 📦 High availability with configurable replicas\n- ⚡ Optional Varnish HTTP caching layer\n- 🔧 Fine-grained resource and probe configuration\n- 🌍 Multi-language support (TypeScript/JavaScript and Python)\n- ✅ Type-safe infrastructure as code\n\n## Quick Start\n\n### Installation\n\n**TypeScript/JavaScript:**\n```bash\nnpm install @bluedynamics/cdk8s-plone\n```\n\n**Python:**\n```bash\npip install cdk8s-plone\n```\n\n### Basic Example\n\n```typescript\nimport { App, Chart } from 'cdk8s';\nimport { Plone, PloneVariant } from '@bluedynamics/cdk8s-plone';\n\nconst app = new App();\nconst chart = new Chart(app, 'PloneDeployment');\n\nnew Plone(chart, 'my-plone', {\n variant: PloneVariant.VOLTO,\n backend: {\n image: 'plone/plone-backend:6.1.3',\n replicas: 3,\n },\n frontend: {\n image: 'plone/plone-frontend:16.0.0',\n replicas: 2,\n },\n});\n\napp.synth();\n```\n\nGenerate Kubernetes manifests:\n```bash\ncdk8s synth\nkubectl apply -f dist/\n```\n\n## Documentation\n\n**📚 Full documentation:** https://bluedynamics.github.io/cdk8s-plone/\n\n- [Quick Start Tutorial](https://bluedynamics.github.io/cdk8s-plone/tutorials/01-quick-start.html)\n- [Configuration Reference](https://bluedynamics.github.io/cdk8s-plone/reference/configuration-options.html)\n- [Architecture Overview](https://bluedynamics.github.io/cdk8s-plone/explanation/architecture.html)\n- [Complete API Documentation](./API.md)\n\n## Examples\n\nSee the [cdk8s-plone-example](https://github.com/bluedynamics/cdk8s-plone-example) repository for complete working examples.\n\n
|
|
111
|
+
"markdown": "# CDK8S Plone\n\n> TypeScript and Python library for deploying Plone CMS to Kubernetes using CDK8S\n\n[](https://www.npmjs.com/package/@bluedynamics/cdk8s-plone)\n[](https://pypi.org/project/cdk8s-plone/)\n[](LICENSE)\n\n## Overview\n\ncdk8s-plone provides CDK8S constructs for deploying [Plone CMS](https://plone.org/) on Kubernetes. Define your infrastructure using TypeScript or Python and generate Kubernetes manifests automatically.\n\n**Key Features:**\n- 🚀 Supports Volto (modern React frontend) and Classic UI\n- 📦 High availability with configurable replicas\n- ⚡ Optional Varnish HTTP caching layer\n- 🔧 Fine-grained resource and probe configuration\n- 🌍 Multi-language support (TypeScript/JavaScript and Python)\n- ✅ Type-safe infrastructure as code\n\n## Quick Start\n\n### Installation\n\n**TypeScript/JavaScript:**\n```bash\nnpm install @bluedynamics/cdk8s-plone\n```\n\n**Python:**\n```bash\npip install cdk8s-plone\n```\n\n### Basic Example\n\n```typescript\nimport { App, Chart } from 'cdk8s';\nimport { Plone, PloneVariant } from '@bluedynamics/cdk8s-plone';\n\nconst app = new App();\nconst chart = new Chart(app, 'PloneDeployment');\n\nnew Plone(chart, 'my-plone', {\n variant: PloneVariant.VOLTO,\n backend: {\n image: 'plone/plone-backend:6.1.3',\n replicas: 3,\n },\n frontend: {\n image: 'plone/plone-frontend:16.0.0',\n replicas: 2,\n },\n});\n\napp.synth();\n```\n\nGenerate Kubernetes manifests:\n```bash\ncdk8s synth\nkubectl apply -f dist/\n```\n\n## Documentation\n\n**📚 Full documentation:** https://bluedynamics.github.io/cdk8s-plone/\n\n- [Quick Start Tutorial](https://bluedynamics.github.io/cdk8s-plone/tutorials/01-quick-start.html)\n- [Configuration Reference](https://bluedynamics.github.io/cdk8s-plone/reference/configuration-options.html)\n- [Architecture Overview](https://bluedynamics.github.io/cdk8s-plone/explanation/architecture.html)\n- [Complete API Documentation](./API.md)\n\n## Examples\n\nSee the [cdk8s-plone-example](https://github.com/bluedynamics/cdk8s-plone-example) repository for complete working examples.\n\n### Prometheus Metrics\n\nEnable Prometheus ServiceMonitor for metrics collection (requires Prometheus Operator):\n\n```typescript\nnew Plone(chart, 'my-plone', {\n backend: {\n servicemonitor: true,\n metricsPath: '/metrics', // optional, defaults to '/metrics'\n },\n frontend: {\n servicemonitor: true,\n metricsPort: 9090, // optional, defaults to service port\n },\n});\n```\n\n**Note:** You must instrument your Plone backend/frontend to expose metrics at the configured endpoint. For Volto/Node.js frontends, consider using [prom-client](https://www.npmjs.com/package/prom-client) or [express-prometheus-middleware](https://www.npmjs.com/package/express-prometheus-middleware).\n\n## Requirements\n- **kubectl** - [Install kubectl](https://kubernetes.io/docs/tasks/tools/#kubectl)\n- **Node.js 16+** (for TypeScript/JavaScript) - [Install Node.js](https://nodejs.org/)\n- **Python 3.8+** (for Python) - [Install Python](https://www.python.org/)\n- **Kubernetes cluster** (local or cloud)\n\nFor detailed setup instructions, see [Setup Prerequisites](https://bluedynamics.github.io/cdk8s-plone/how-to/setup-prerequisites.html).\n\n## Development\n\nThis project uses [Projen](https://projen.io/) for project management.\n\n```bash\n# Install dependencies\nnpm install\n\n# Run tests\nnpm test\n\n# Build\nnpm run build\n\n# Update project configuration\n# Edit .projenrc.ts, then run:\nnpx projen\n```\n\nFor detailed development instructions, see [CONTRIBUTING.md](./CONTRIBUTING.md) (if available).\n\n## Resources\n\n- [CDK8S Documentation](https://cdk8s.io/)\n- [Plone CMS](https://plone.org/)\n- [kube-httpcache](https://github.com/mittwald/kube-httpcache) (for HTTP caching)\n- [Example Project](https://github.com/bluedynamics/cdk8s-plone-example)\n\n## License\n\n[Apache 2.0](LICENSE)\n\n## Maintainers\n\nMaintained by [Blue Dynamics Alliance](https://github.com/bluedynamics)\n\n**Author:** Jens W. Klein (jk@kleinundpartner.at)\n"
|
|
112
112
|
},
|
|
113
113
|
"repository": {
|
|
114
114
|
"type": "git",
|
|
@@ -141,7 +141,7 @@
|
|
|
141
141
|
},
|
|
142
142
|
"locationInModule": {
|
|
143
143
|
"filename": "src/plone.ts",
|
|
144
|
-
"line":
|
|
144
|
+
"line": 316
|
|
145
145
|
},
|
|
146
146
|
"parameters": [
|
|
147
147
|
{
|
|
@@ -168,7 +168,7 @@
|
|
|
168
168
|
"kind": "class",
|
|
169
169
|
"locationInModule": {
|
|
170
170
|
"filename": "src/plone.ts",
|
|
171
|
-
"line":
|
|
171
|
+
"line": 293
|
|
172
172
|
},
|
|
173
173
|
"name": "Plone",
|
|
174
174
|
"properties": [
|
|
@@ -181,7 +181,7 @@
|
|
|
181
181
|
"immutable": true,
|
|
182
182
|
"locationInModule": {
|
|
183
183
|
"filename": "src/plone.ts",
|
|
184
|
-
"line":
|
|
184
|
+
"line": 298
|
|
185
185
|
},
|
|
186
186
|
"name": "backendServiceName",
|
|
187
187
|
"type": {
|
|
@@ -196,7 +196,7 @@
|
|
|
196
196
|
"immutable": true,
|
|
197
197
|
"locationInModule": {
|
|
198
198
|
"filename": "src/plone.ts",
|
|
199
|
-
"line":
|
|
199
|
+
"line": 314
|
|
200
200
|
},
|
|
201
201
|
"name": "siteId",
|
|
202
202
|
"type": {
|
|
@@ -211,7 +211,7 @@
|
|
|
211
211
|
"immutable": true,
|
|
212
212
|
"locationInModule": {
|
|
213
213
|
"filename": "src/plone.ts",
|
|
214
|
-
"line":
|
|
214
|
+
"line": 309
|
|
215
215
|
},
|
|
216
216
|
"name": "variant",
|
|
217
217
|
"type": {
|
|
@@ -227,7 +227,7 @@
|
|
|
227
227
|
"immutable": true,
|
|
228
228
|
"locationInModule": {
|
|
229
229
|
"filename": "src/plone.ts",
|
|
230
|
-
"line":
|
|
230
|
+
"line": 304
|
|
231
231
|
},
|
|
232
232
|
"name": "frontendServiceName",
|
|
233
233
|
"optional": true,
|
|
@@ -250,7 +250,7 @@
|
|
|
250
250
|
"kind": "interface",
|
|
251
251
|
"locationInModule": {
|
|
252
252
|
"filename": "src/plone.ts",
|
|
253
|
-
"line":
|
|
253
|
+
"line": 15
|
|
254
254
|
},
|
|
255
255
|
"name": "PloneBaseOptions",
|
|
256
256
|
"properties": [
|
|
@@ -265,7 +265,7 @@
|
|
|
265
265
|
"immutable": true,
|
|
266
266
|
"locationInModule": {
|
|
267
267
|
"filename": "src/plone.ts",
|
|
268
|
-
"line":
|
|
268
|
+
"line": 166
|
|
269
269
|
},
|
|
270
270
|
"name": "annotations",
|
|
271
271
|
"optional": true,
|
|
@@ -289,7 +289,7 @@
|
|
|
289
289
|
"immutable": true,
|
|
290
290
|
"locationInModule": {
|
|
291
291
|
"filename": "src/plone.ts",
|
|
292
|
-
"line":
|
|
292
|
+
"line": 84
|
|
293
293
|
},
|
|
294
294
|
"name": "environment",
|
|
295
295
|
"optional": true,
|
|
@@ -308,7 +308,7 @@
|
|
|
308
308
|
"immutable": true,
|
|
309
309
|
"locationInModule": {
|
|
310
310
|
"filename": "src/plone.ts",
|
|
311
|
-
"line":
|
|
311
|
+
"line": 21
|
|
312
312
|
},
|
|
313
313
|
"name": "image",
|
|
314
314
|
"optional": true,
|
|
@@ -326,7 +326,7 @@
|
|
|
326
326
|
"immutable": true,
|
|
327
327
|
"locationInModule": {
|
|
328
328
|
"filename": "src/plone.ts",
|
|
329
|
-
"line":
|
|
329
|
+
"line": 27
|
|
330
330
|
},
|
|
331
331
|
"name": "imagePullPolicy",
|
|
332
332
|
"optional": true,
|
|
@@ -345,7 +345,7 @@
|
|
|
345
345
|
"immutable": true,
|
|
346
346
|
"locationInModule": {
|
|
347
347
|
"filename": "src/plone.ts",
|
|
348
|
-
"line":
|
|
348
|
+
"line": 56
|
|
349
349
|
},
|
|
350
350
|
"name": "limitCpu",
|
|
351
351
|
"optional": true,
|
|
@@ -364,7 +364,7 @@
|
|
|
364
364
|
"immutable": true,
|
|
365
365
|
"locationInModule": {
|
|
366
366
|
"filename": "src/plone.ts",
|
|
367
|
-
"line":
|
|
367
|
+
"line": 63
|
|
368
368
|
},
|
|
369
369
|
"name": "limitMemory",
|
|
370
370
|
"optional": true,
|
|
@@ -383,7 +383,7 @@
|
|
|
383
383
|
"immutable": true,
|
|
384
384
|
"locationInModule": {
|
|
385
385
|
"filename": "src/plone.ts",
|
|
386
|
-
"line":
|
|
386
|
+
"line": 129
|
|
387
387
|
},
|
|
388
388
|
"name": "livenessEnabled",
|
|
389
389
|
"optional": true,
|
|
@@ -401,7 +401,7 @@
|
|
|
401
401
|
"immutable": true,
|
|
402
402
|
"locationInModule": {
|
|
403
403
|
"filename": "src/plone.ts",
|
|
404
|
-
"line":
|
|
404
|
+
"line": 159
|
|
405
405
|
},
|
|
406
406
|
"name": "livenessFailureThreshold",
|
|
407
407
|
"optional": true,
|
|
@@ -419,7 +419,7 @@
|
|
|
419
419
|
"immutable": true,
|
|
420
420
|
"locationInModule": {
|
|
421
421
|
"filename": "src/plone.ts",
|
|
422
|
-
"line":
|
|
422
|
+
"line": 135
|
|
423
423
|
},
|
|
424
424
|
"name": "livenessInitialDelaySeconds",
|
|
425
425
|
"optional": true,
|
|
@@ -437,7 +437,7 @@
|
|
|
437
437
|
"immutable": true,
|
|
438
438
|
"locationInModule": {
|
|
439
439
|
"filename": "src/plone.ts",
|
|
440
|
-
"line":
|
|
440
|
+
"line": 147
|
|
441
441
|
},
|
|
442
442
|
"name": "livenessPeriodSeconds",
|
|
443
443
|
"optional": true,
|
|
@@ -455,7 +455,7 @@
|
|
|
455
455
|
"immutable": true,
|
|
456
456
|
"locationInModule": {
|
|
457
457
|
"filename": "src/plone.ts",
|
|
458
|
-
"line":
|
|
458
|
+
"line": 153
|
|
459
459
|
},
|
|
460
460
|
"name": "livenessSuccessThreshold",
|
|
461
461
|
"optional": true,
|
|
@@ -473,7 +473,7 @@
|
|
|
473
473
|
"immutable": true,
|
|
474
474
|
"locationInModule": {
|
|
475
475
|
"filename": "src/plone.ts",
|
|
476
|
-
"line":
|
|
476
|
+
"line": 141
|
|
477
477
|
},
|
|
478
478
|
"name": "livenessTimeoutSeconds",
|
|
479
479
|
"optional": true,
|
|
@@ -492,7 +492,7 @@
|
|
|
492
492
|
"immutable": true,
|
|
493
493
|
"locationInModule": {
|
|
494
494
|
"filename": "src/plone.ts",
|
|
495
|
-
"line":
|
|
495
|
+
"line": 41
|
|
496
496
|
},
|
|
497
497
|
"name": "maxUnavailable",
|
|
498
498
|
"optional": true,
|
|
@@ -509,6 +509,53 @@
|
|
|
509
509
|
}
|
|
510
510
|
}
|
|
511
511
|
},
|
|
512
|
+
{
|
|
513
|
+
"abstract": true,
|
|
514
|
+
"docs": {
|
|
515
|
+
"default": "'/metrics'",
|
|
516
|
+
"remarks": "Only used when servicemonitor is enabled.",
|
|
517
|
+
"stability": "stable",
|
|
518
|
+
"summary": "Path to scrape metrics from."
|
|
519
|
+
},
|
|
520
|
+
"immutable": true,
|
|
521
|
+
"locationInModule": {
|
|
522
|
+
"filename": "src/plone.ts",
|
|
523
|
+
"line": 204
|
|
524
|
+
},
|
|
525
|
+
"name": "metricsPath",
|
|
526
|
+
"optional": true,
|
|
527
|
+
"type": {
|
|
528
|
+
"primitive": "string"
|
|
529
|
+
}
|
|
530
|
+
},
|
|
531
|
+
{
|
|
532
|
+
"abstract": true,
|
|
533
|
+
"docs": {
|
|
534
|
+
"default": "- uses the main service port",
|
|
535
|
+
"remarks": "Only used when servicemonitor is enabled.",
|
|
536
|
+
"stability": "stable",
|
|
537
|
+
"summary": "Port name or number to scrape metrics from."
|
|
538
|
+
},
|
|
539
|
+
"immutable": true,
|
|
540
|
+
"locationInModule": {
|
|
541
|
+
"filename": "src/plone.ts",
|
|
542
|
+
"line": 197
|
|
543
|
+
},
|
|
544
|
+
"name": "metricsPort",
|
|
545
|
+
"optional": true,
|
|
546
|
+
"type": {
|
|
547
|
+
"union": {
|
|
548
|
+
"types": [
|
|
549
|
+
{
|
|
550
|
+
"primitive": "string"
|
|
551
|
+
},
|
|
552
|
+
{
|
|
553
|
+
"primitive": "number"
|
|
554
|
+
}
|
|
555
|
+
]
|
|
556
|
+
}
|
|
557
|
+
}
|
|
558
|
+
},
|
|
512
559
|
{
|
|
513
560
|
"abstract": true,
|
|
514
561
|
"docs": {
|
|
@@ -520,7 +567,7 @@
|
|
|
520
567
|
"immutable": true,
|
|
521
568
|
"locationInModule": {
|
|
522
569
|
"filename": "src/plone.ts",
|
|
523
|
-
"line":
|
|
570
|
+
"line": 49
|
|
524
571
|
},
|
|
525
572
|
"name": "minAvailable",
|
|
526
573
|
"optional": true,
|
|
@@ -549,7 +596,7 @@
|
|
|
549
596
|
"immutable": true,
|
|
550
597
|
"locationInModule": {
|
|
551
598
|
"filename": "src/plone.ts",
|
|
552
|
-
"line":
|
|
599
|
+
"line": 174
|
|
553
600
|
},
|
|
554
601
|
"name": "podAnnotations",
|
|
555
602
|
"optional": true,
|
|
@@ -573,7 +620,7 @@
|
|
|
573
620
|
"immutable": true,
|
|
574
621
|
"locationInModule": {
|
|
575
622
|
"filename": "src/plone.ts",
|
|
576
|
-
"line":
|
|
623
|
+
"line": 91
|
|
577
624
|
},
|
|
578
625
|
"name": "readinessEnabled",
|
|
579
626
|
"optional": true,
|
|
@@ -591,7 +638,7 @@
|
|
|
591
638
|
"immutable": true,
|
|
592
639
|
"locationInModule": {
|
|
593
640
|
"filename": "src/plone.ts",
|
|
594
|
-
"line":
|
|
641
|
+
"line": 121
|
|
595
642
|
},
|
|
596
643
|
"name": "readinessFailureThreshold",
|
|
597
644
|
"optional": true,
|
|
@@ -609,7 +656,7 @@
|
|
|
609
656
|
"immutable": true,
|
|
610
657
|
"locationInModule": {
|
|
611
658
|
"filename": "src/plone.ts",
|
|
612
|
-
"line":
|
|
659
|
+
"line": 97
|
|
613
660
|
},
|
|
614
661
|
"name": "readinessInitialDelaySeconds",
|
|
615
662
|
"optional": true,
|
|
@@ -627,7 +674,7 @@
|
|
|
627
674
|
"immutable": true,
|
|
628
675
|
"locationInModule": {
|
|
629
676
|
"filename": "src/plone.ts",
|
|
630
|
-
"line":
|
|
677
|
+
"line": 109
|
|
631
678
|
},
|
|
632
679
|
"name": "readinessPeriodSeconds",
|
|
633
680
|
"optional": true,
|
|
@@ -645,7 +692,7 @@
|
|
|
645
692
|
"immutable": true,
|
|
646
693
|
"locationInModule": {
|
|
647
694
|
"filename": "src/plone.ts",
|
|
648
|
-
"line":
|
|
695
|
+
"line": 115
|
|
649
696
|
},
|
|
650
697
|
"name": "readinessSuccessThreshold",
|
|
651
698
|
"optional": true,
|
|
@@ -663,7 +710,7 @@
|
|
|
663
710
|
"immutable": true,
|
|
664
711
|
"locationInModule": {
|
|
665
712
|
"filename": "src/plone.ts",
|
|
666
|
-
"line":
|
|
713
|
+
"line": 103
|
|
667
714
|
},
|
|
668
715
|
"name": "readinessTimeoutSeconds",
|
|
669
716
|
"optional": true,
|
|
@@ -681,7 +728,7 @@
|
|
|
681
728
|
"immutable": true,
|
|
682
729
|
"locationInModule": {
|
|
683
730
|
"filename": "src/plone.ts",
|
|
684
|
-
"line":
|
|
731
|
+
"line": 33
|
|
685
732
|
},
|
|
686
733
|
"name": "replicas",
|
|
687
734
|
"optional": true,
|
|
@@ -700,7 +747,7 @@
|
|
|
700
747
|
"immutable": true,
|
|
701
748
|
"locationInModule": {
|
|
702
749
|
"filename": "src/plone.ts",
|
|
703
|
-
"line":
|
|
750
|
+
"line": 70
|
|
704
751
|
},
|
|
705
752
|
"name": "requestCpu",
|
|
706
753
|
"optional": true,
|
|
@@ -719,7 +766,7 @@
|
|
|
719
766
|
"immutable": true,
|
|
720
767
|
"locationInModule": {
|
|
721
768
|
"filename": "src/plone.ts",
|
|
722
|
-
"line":
|
|
769
|
+
"line": 77
|
|
723
770
|
},
|
|
724
771
|
"name": "requestMemory",
|
|
725
772
|
"optional": true,
|
|
@@ -739,7 +786,7 @@
|
|
|
739
786
|
"immutable": true,
|
|
740
787
|
"locationInModule": {
|
|
741
788
|
"filename": "src/plone.ts",
|
|
742
|
-
"line":
|
|
789
|
+
"line": 182
|
|
743
790
|
},
|
|
744
791
|
"name": "serviceAnnotations",
|
|
745
792
|
"optional": true,
|
|
@@ -751,6 +798,25 @@
|
|
|
751
798
|
"kind": "map"
|
|
752
799
|
}
|
|
753
800
|
}
|
|
801
|
+
},
|
|
802
|
+
{
|
|
803
|
+
"abstract": true,
|
|
804
|
+
"docs": {
|
|
805
|
+
"default": "false",
|
|
806
|
+
"remarks": "Requires Prometheus Operator to be installed in the cluster.\nWhen enabled, a ServiceMonitor resource will be created to scrape metrics.",
|
|
807
|
+
"stability": "stable",
|
|
808
|
+
"summary": "Enable Prometheus ServiceMonitor for metrics collection."
|
|
809
|
+
},
|
|
810
|
+
"immutable": true,
|
|
811
|
+
"locationInModule": {
|
|
812
|
+
"filename": "src/plone.ts",
|
|
813
|
+
"line": 190
|
|
814
|
+
},
|
|
815
|
+
"name": "servicemonitor",
|
|
816
|
+
"optional": true,
|
|
817
|
+
"type": {
|
|
818
|
+
"primitive": "boolean"
|
|
819
|
+
}
|
|
754
820
|
}
|
|
755
821
|
],
|
|
756
822
|
"symbolId": "src/plone:PloneBaseOptions"
|
|
@@ -1089,7 +1155,7 @@
|
|
|
1089
1155
|
"kind": "interface",
|
|
1090
1156
|
"locationInModule": {
|
|
1091
1157
|
"filename": "src/plone.ts",
|
|
1092
|
-
"line":
|
|
1158
|
+
"line": 226
|
|
1093
1159
|
},
|
|
1094
1160
|
"name": "PloneOptions",
|
|
1095
1161
|
"properties": [
|
|
@@ -1103,7 +1169,7 @@
|
|
|
1103
1169
|
"immutable": true,
|
|
1104
1170
|
"locationInModule": {
|
|
1105
1171
|
"filename": "src/plone.ts",
|
|
1106
|
-
"line":
|
|
1172
|
+
"line": 251
|
|
1107
1173
|
},
|
|
1108
1174
|
"name": "backend",
|
|
1109
1175
|
"optional": true,
|
|
@@ -1122,7 +1188,7 @@
|
|
|
1122
1188
|
"immutable": true,
|
|
1123
1189
|
"locationInModule": {
|
|
1124
1190
|
"filename": "src/plone.ts",
|
|
1125
|
-
"line":
|
|
1191
|
+
"line": 258
|
|
1126
1192
|
},
|
|
1127
1193
|
"name": "frontend",
|
|
1128
1194
|
"optional": true,
|
|
@@ -1142,7 +1208,7 @@
|
|
|
1142
1208
|
"immutable": true,
|
|
1143
1209
|
"locationInModule": {
|
|
1144
1210
|
"filename": "src/plone.ts",
|
|
1145
|
-
"line":
|
|
1211
|
+
"line": 266
|
|
1146
1212
|
},
|
|
1147
1213
|
"name": "imagePullSecrets",
|
|
1148
1214
|
"optional": true,
|
|
@@ -1166,7 +1232,7 @@
|
|
|
1166
1232
|
"immutable": true,
|
|
1167
1233
|
"locationInModule": {
|
|
1168
1234
|
"filename": "src/plone.ts",
|
|
1169
|
-
"line":
|
|
1235
|
+
"line": 239
|
|
1170
1236
|
},
|
|
1171
1237
|
"name": "siteId",
|
|
1172
1238
|
"optional": true,
|
|
@@ -1184,7 +1250,7 @@
|
|
|
1184
1250
|
"immutable": true,
|
|
1185
1251
|
"locationInModule": {
|
|
1186
1252
|
"filename": "src/plone.ts",
|
|
1187
|
-
"line":
|
|
1253
|
+
"line": 245
|
|
1188
1254
|
},
|
|
1189
1255
|
"name": "variant",
|
|
1190
1256
|
"optional": true,
|
|
@@ -1203,7 +1269,7 @@
|
|
|
1203
1269
|
"immutable": true,
|
|
1204
1270
|
"locationInModule": {
|
|
1205
1271
|
"filename": "src/plone.ts",
|
|
1206
|
-
"line":
|
|
1272
|
+
"line": 232
|
|
1207
1273
|
},
|
|
1208
1274
|
"name": "version",
|
|
1209
1275
|
"optional": true,
|
|
@@ -1224,7 +1290,7 @@
|
|
|
1224
1290
|
"kind": "enum",
|
|
1225
1291
|
"locationInModule": {
|
|
1226
1292
|
"filename": "src/plone.ts",
|
|
1227
|
-
"line":
|
|
1293
|
+
"line": 209
|
|
1228
1294
|
},
|
|
1229
1295
|
"members": [
|
|
1230
1296
|
{
|
|
@@ -1248,6 +1314,6 @@
|
|
|
1248
1314
|
"symbolId": "src/plone:PloneVariant"
|
|
1249
1315
|
}
|
|
1250
1316
|
},
|
|
1251
|
-
"version": "0.1.
|
|
1252
|
-
"fingerprint": "
|
|
1317
|
+
"version": "0.1.7",
|
|
1318
|
+
"fingerprint": "1RasD5X2ED05MCVXhsOX9X9OB1c2NAYIz9qK40tNRL8="
|
|
1253
1319
|
}
|
package/API.md
CHANGED
|
@@ -379,6 +379,8 @@ const ploneBaseOptions: PloneBaseOptions = { ... }
|
|
|
379
379
|
| <code><a href="#@bluedynamics/cdk8s-plone.PloneBaseOptions.property.livenessSuccessThreshold">livenessSuccessThreshold</a></code> | <code>number</code> | Minimum consecutive successes for the liveness probe to be considered successful. |
|
|
380
380
|
| <code><a href="#@bluedynamics/cdk8s-plone.PloneBaseOptions.property.livenessTimeoutSeconds">livenessTimeoutSeconds</a></code> | <code>number</code> | Number of seconds after which the liveness probe times out. |
|
|
381
381
|
| <code><a href="#@bluedynamics/cdk8s-plone.PloneBaseOptions.property.maxUnavailable">maxUnavailable</a></code> | <code>string \| number</code> | Maximum number of pods that can be unavailable during updates. |
|
|
382
|
+
| <code><a href="#@bluedynamics/cdk8s-plone.PloneBaseOptions.property.metricsPath">metricsPath</a></code> | <code>string</code> | Path to scrape metrics from. |
|
|
383
|
+
| <code><a href="#@bluedynamics/cdk8s-plone.PloneBaseOptions.property.metricsPort">metricsPort</a></code> | <code>string \| number</code> | Port name or number to scrape metrics from. |
|
|
382
384
|
| <code><a href="#@bluedynamics/cdk8s-plone.PloneBaseOptions.property.minAvailable">minAvailable</a></code> | <code>string \| number</code> | Minimum number of pods that must be available during updates. |
|
|
383
385
|
| <code><a href="#@bluedynamics/cdk8s-plone.PloneBaseOptions.property.podAnnotations">podAnnotations</a></code> | <code>{[ key: string ]: string}</code> | Annotations to add to the Pod template metadata. |
|
|
384
386
|
| <code><a href="#@bluedynamics/cdk8s-plone.PloneBaseOptions.property.readinessEnabled">readinessEnabled</a></code> | <code>boolean</code> | Enable readiness probe for the container. |
|
|
@@ -391,6 +393,7 @@ const ploneBaseOptions: PloneBaseOptions = { ... }
|
|
|
391
393
|
| <code><a href="#@bluedynamics/cdk8s-plone.PloneBaseOptions.property.requestCpu">requestCpu</a></code> | <code>string</code> | CPU request for the container. |
|
|
392
394
|
| <code><a href="#@bluedynamics/cdk8s-plone.PloneBaseOptions.property.requestMemory">requestMemory</a></code> | <code>string</code> | Memory request for the container. |
|
|
393
395
|
| <code><a href="#@bluedynamics/cdk8s-plone.PloneBaseOptions.property.serviceAnnotations">serviceAnnotations</a></code> | <code>{[ key: string ]: string}</code> | Annotations to add to the Service metadata. |
|
|
396
|
+
| <code><a href="#@bluedynamics/cdk8s-plone.PloneBaseOptions.property.servicemonitor">servicemonitor</a></code> | <code>boolean</code> | Enable Prometheus ServiceMonitor for metrics collection. |
|
|
394
397
|
|
|
395
398
|
---
|
|
396
399
|
|
|
@@ -599,6 +602,36 @@ Used in PodDisruptionBudget if specified.
|
|
|
599
602
|
|
|
600
603
|
---
|
|
601
604
|
|
|
605
|
+
##### `metricsPath`<sup>Optional</sup> <a name="metricsPath" id="@bluedynamics/cdk8s-plone.PloneBaseOptions.property.metricsPath"></a>
|
|
606
|
+
|
|
607
|
+
```typescript
|
|
608
|
+
public readonly metricsPath: string;
|
|
609
|
+
```
|
|
610
|
+
|
|
611
|
+
- *Type:* string
|
|
612
|
+
- *Default:* '/metrics'
|
|
613
|
+
|
|
614
|
+
Path to scrape metrics from.
|
|
615
|
+
|
|
616
|
+
Only used when servicemonitor is enabled.
|
|
617
|
+
|
|
618
|
+
---
|
|
619
|
+
|
|
620
|
+
##### `metricsPort`<sup>Optional</sup> <a name="metricsPort" id="@bluedynamics/cdk8s-plone.PloneBaseOptions.property.metricsPort"></a>
|
|
621
|
+
|
|
622
|
+
```typescript
|
|
623
|
+
public readonly metricsPort: string | number;
|
|
624
|
+
```
|
|
625
|
+
|
|
626
|
+
- *Type:* string | number
|
|
627
|
+
- *Default:* uses the main service port
|
|
628
|
+
|
|
629
|
+
Port name or number to scrape metrics from.
|
|
630
|
+
|
|
631
|
+
Only used when servicemonitor is enabled.
|
|
632
|
+
|
|
633
|
+
---
|
|
634
|
+
|
|
602
635
|
##### `minAvailable`<sup>Optional</sup> <a name="minAvailable" id="@bluedynamics/cdk8s-plone.PloneBaseOptions.property.minAvailable"></a>
|
|
603
636
|
|
|
604
637
|
```typescript
|
|
@@ -792,6 +825,22 @@ Common for external-dns, load balancers, service mesh, etc.
|
|
|
792
825
|
```
|
|
793
826
|
|
|
794
827
|
|
|
828
|
+
##### `servicemonitor`<sup>Optional</sup> <a name="servicemonitor" id="@bluedynamics/cdk8s-plone.PloneBaseOptions.property.servicemonitor"></a>
|
|
829
|
+
|
|
830
|
+
```typescript
|
|
831
|
+
public readonly servicemonitor: boolean;
|
|
832
|
+
```
|
|
833
|
+
|
|
834
|
+
- *Type:* boolean
|
|
835
|
+
- *Default:* false
|
|
836
|
+
|
|
837
|
+
Enable Prometheus ServiceMonitor for metrics collection.
|
|
838
|
+
|
|
839
|
+
Requires Prometheus Operator to be installed in the cluster.
|
|
840
|
+
When enabled, a ServiceMonitor resource will be created to scrape metrics.
|
|
841
|
+
|
|
842
|
+
---
|
|
843
|
+
|
|
795
844
|
### PloneHttpcacheOptions <a name="PloneHttpcacheOptions" id="@bluedynamics/cdk8s-plone.PloneHttpcacheOptions"></a>
|
|
796
845
|
|
|
797
846
|
Configuration options for PloneHttpcache (Varnish caching layer).
|
package/README.md
CHANGED
|
@@ -75,8 +75,26 @@ kubectl apply -f dist/
|
|
|
75
75
|
|
|
76
76
|
See the [cdk8s-plone-example](https://github.com/bluedynamics/cdk8s-plone-example) repository for complete working examples.
|
|
77
77
|
|
|
78
|
-
|
|
78
|
+
### Prometheus Metrics
|
|
79
|
+
|
|
80
|
+
Enable Prometheus ServiceMonitor for metrics collection (requires Prometheus Operator):
|
|
79
81
|
|
|
82
|
+
```typescript
|
|
83
|
+
new Plone(chart, 'my-plone', {
|
|
84
|
+
backend: {
|
|
85
|
+
servicemonitor: true,
|
|
86
|
+
metricsPath: '/metrics', // optional, defaults to '/metrics'
|
|
87
|
+
},
|
|
88
|
+
frontend: {
|
|
89
|
+
servicemonitor: true,
|
|
90
|
+
metricsPort: 9090, // optional, defaults to service port
|
|
91
|
+
},
|
|
92
|
+
});
|
|
93
|
+
```
|
|
94
|
+
|
|
95
|
+
**Note:** You must instrument your Plone backend/frontend to expose metrics at the configured endpoint. For Volto/Node.js frontends, consider using [prom-client](https://www.npmjs.com/package/prom-client) or [express-prometheus-middleware](https://www.npmjs.com/package/express-prometheus-middleware).
|
|
96
|
+
|
|
97
|
+
## Requirements
|
|
80
98
|
- **kubectl** - [Install kubectl](https://kubernetes.io/docs/tasks/tools/#kubectl)
|
|
81
99
|
- **Node.js 16+** (for TypeScript/JavaScript) - [Install Node.js](https://nodejs.org/)
|
|
82
100
|
- **Python 3.8+** (for Python) - [Install Python](https://www.python.org/)
|
package/lib/httpcache.js
CHANGED
|
@@ -113,5 +113,5 @@ class PloneHttpcache extends constructs_1.Construct {
|
|
|
113
113
|
}
|
|
114
114
|
exports.PloneHttpcache = PloneHttpcache;
|
|
115
115
|
_a = JSII_RTTI_SYMBOL_1;
|
|
116
|
-
PloneHttpcache[_a] = { fqn: "@bluedynamics/cdk8s-plone.PloneHttpcache", version: "0.1.
|
|
116
|
+
PloneHttpcache[_a] = { fqn: "@bluedynamics/cdk8s-plone.PloneHttpcache", version: "0.1.7" };
|
|
117
117
|
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaHR0cGNhY2hlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL2h0dHBjYWNoZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7OztBQUFBLHlCQUF5QjtBQUN6Qiw2QkFBNkI7QUFDN0IsaUNBQTZCO0FBQzdCLDJDQUF1QztBQTZGdkM7Ozs7Ozs7Ozs7Ozs7OztHQWVHO0FBQ0gsTUFBYSxjQUFlLFNBQVEsc0JBQVM7SUFPM0MsWUFBWSxLQUFnQixFQUFFLEVBQVUsRUFBRSxPQUE4QjtRQUN0RSxLQUFLLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxDQUFDO1FBQ2pCLElBQUksVUFBa0IsQ0FBQztRQUN2QixJQUFJLENBQUMsT0FBTyxDQUFDLFVBQVUsRUFBRSxDQUFDO1lBQ3hCLElBQUksT0FBZSxDQUFDO1lBQ3BCLElBQUksQ0FBQyxPQUFPLENBQUMsY0FBYyxFQUFFLENBQUM7Z0JBQzVCLE9BQU8sR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLFNBQVMsRUFBRSxRQUFRLEVBQUUsaUJBQWlCLENBQUMsQ0FBQztZQUM5RCxDQUFDO2lCQUFNLENBQUM7Z0JBQ04sT0FBTyxHQUFHLE9BQU8sQ0FBQyxjQUFjLENBQUM7WUFDbkMsQ0FBQztZQUNELFVBQVUsR0FBRyxFQUFFLENBQUMsWUFBWSxDQUFDLE9BQU8sRUFBRSxNQUFNLENBQUMsQ0FBQztRQUNoRCxDQUFDO2FBQU0sQ0FBQztZQUNOLFVBQVUsR0FBRyxPQUFPLENBQUMsVUFBVSxDQUFDO1FBQ2xDLENBQUM7UUFDRCxNQUFNLFFBQVEsR0FBRyxPQUFPLENBQUMsVUFBVSxJQUFJLE9BQU8sQ0FBQyxZQUFZLENBQUM7UUFDNUQsTUFBTSxTQUFTLEdBQUcsSUFBSSxZQUFJLENBQUMsSUFBSSxFQUFFLFdBQVcsRUFBRTtZQUM1Qyx1REFBdUQ7WUFDdkQsSUFBSSxFQUFFLDBCQUEwQjtZQUNoQyxLQUFLLEVBQUUsZ0JBQWdCO1lBQ3ZCLE9BQU8sRUFBRSxPQUFPLENBQUMsWUFBWTtZQUM3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aW1wb3J0ICogYXMgcGF0aCBmcm9tICdwYXRoJztcbmltcG9ydCB7IEhlbG0gfSBmcm9tICdjZGs4cyc7XG5pbXBvcnQgeyBDb25zdHJ1Y3QgfSBmcm9tICdjb25zdHJ1Y3RzJztcbmltcG9ydCB7IFBsb25lIH0gZnJvbSAnLi9wbG9uZSc7XG5cbi8qKlxuICogQ29uZmlndXJhdGlvbiBvcHRpb25zIGZvciBQbG9uZUh0dHBjYWNoZSAoVmFybmlzaCBjYWNoaW5nIGxheWVyKS5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBQbG9uZUh0dHBjYWNoZU9wdGlvbnMge1xuICAvKipcbiAgICogVGhlIFBsb25lIGNvbnN0cnVjdCB0byBhdHRhY2ggdGhlIEhUVFAgY2FjaGUgdG8uXG4gICAqIFRoZSBjYWNoZSB3aWxsIGF1dG9tYXRpY2FsbHkgY29ubmVjdCB0byB0aGUgYmFja2VuZCBhbmQgZnJvbnRlbmQgc2VydmljZXMuXG4gICAqL1xuICByZWFkb25seSBwbG9uZTogUGxvbmU7XG5cbiAgLyoqXG4gICAqIFZhcm5pc2ggVkNMIGNvbmZpZ3VyYXRpb24gYXMgYSBzdHJpbmcuXG4gICAqIElmIHByb3ZpZGVkLCB0aGlzIHRha2VzIHByZWNlZGVuY2Ugb3ZlciB2YXJuaXNoVmNsRmlsZS5cbiAgICogQGRlZmF1bHQgLSBsb2FkZWQgZnJvbSB2YXJuaXNoVmNsRmlsZSBvciBkZWZhdWx0IGNvbmZpZyBmaWxlXG4gICAqL1xuICByZWFkb25seSB2YXJuaXNoVmNsPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBQYXRoIHRvIGEgVmFybmlzaCBWQ0wgY29uZmlndXJhdGlvbiBmaWxlLlxuICAgKiBJZiBub3QgcHJvdmlkZWQsIHVzZXMgdGhlIGRlZmF1bHQgVkNMIGZpbGUgaW5jbHVkZWQgaW4gdGhlIGxpYnJhcnkuXG4gICAqIEBkZWZhdWx0IC0gdXNlcyBkZWZhdWx0IGNvbmZpZy92YXJuaXNoLnRwbC52Y2xcbiAgICovXG4gIHJlYWRvbmx5IHZhcm5pc2hWY2xGaWxlPzogc3RyaW5nIHwgdW5kZWZpbmVkO1xuXG4gIC8qKlxuICAgKiBOYW1lIG9mIGFuIGV4aXN0aW5nIEt1YmVybmV0ZXMgc2VjcmV0IGNvbnRhaW5pbmcgVmFybmlzaCBhZG1pbiBjcmVkZW50aWFscy5cbiAgICogVGhlIHNlY3JldCBzaG91bGQgYmUgY3JlYXRlZCBzZXBhcmF0ZWx5IGluIHRoZSBzYW1lIG5hbWVzcGFjZS5cbiAgICogQGRlZmF1bHQgLSB1bmRlZmluZWQgKG5vIGV4aXN0aW5nIHNlY3JldClcbiAgICovXG4gIHJlYWRvbmx5IGV4aXN0aW5nU2VjcmV0Pzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBDUFUgbGltaXQgZm9yIFZhcm5pc2ggcG9kcy5cbiAgICogQGRlZmF1bHQgJzUwMG0nXG4gICAqL1xuICByZWFkb25seSBsaW1pdENwdT86IHN0cmluZztcblxuICAvKipcbiAgICogTWVtb3J5IGxpbWl0IGZvciBWYXJuaXNoIHBvZHMuXG4gICAqIEBkZWZhdWx0ICc1MDBNaSdcbiAgICovXG4gIHJlYWRvbmx5IGxpbWl0TWVtb3J5Pzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBDUFUgcmVxdWVzdCBmb3IgVmFybmlzaCBwb2RzLlxuICAgKiBAZGVmYXVsdCAnMTAwbSdcbiAgICovXG4gIHJlYWRvbmx5IHJlcXVlc3RDcHU/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIE1lbW9yeSByZXF1ZXN0IGZvciBWYXJuaXNoIHBvZHMuXG4gICAqIEBkZWZhdWx0ICcxMDBNaSdcbiAgICovXG4gIHJlYWRvbmx5IHJlcXVlc3RNZW1vcnk/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIEVuYWJsZSBQcm9tZXRoZXVzIFNlcnZpY2VNb25pdG9yIGZvciBtZXRyaWNzIGNvbGxlY3Rpb24uXG4gICAqIFJlcXVpcmVzIFByb21ldGhldXMgT3BlcmF0b3IgdG8gYmUgaW5zdGFsbGVkIGluIHRoZSBjbHVzdGVyLlxuICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgKi9cbiAgcmVhZG9ubHkgc2VydmljZW1vbml0b3I/OiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBFbmFibGUgdGhlIFByb21ldGhldXMgZXhwb3J0ZXIgZm9yIFZhcm5pc2ggbWV0cmljcy5cbiAgICogV2hlbiBlbmFibGVkLCB0aGUgZXhwb3J0ZXIgc2lkZWNhciBjb250YWluZXIgd2lsbCBiZSBkZXBsb3llZCBhbG9uZ3NpZGUgVmFybmlzaC5cbiAgICogQGRlZmF1bHQgdHJ1ZVxuICAgKi9cbiAgcmVhZG9ubHkgZXhwb3J0ZXJFbmFibGVkPzogYm9vbGVhbjtcblxuICAvKipcbiAgICogVmVyc2lvbiBvZiB0aGUga3ViZS1odHRwY2FjaGUgSGVsbSBjaGFydCB0byB1c2UuXG4gICAqIElmIG5vdCBzcGVjaWZpZWQsIHRoZSBsYXRlc3QgdmVyc2lvbiBmcm9tIHRoZSByZXBvc2l0b3J5IHdpbGwgYmUgdXNlZC5cbiAgICogQGRlZmF1bHQgdW5kZWZpbmVkIChsYXRlc3QpXG4gICAqL1xuICByZWFkb25seSBjaGFydFZlcnNpb24/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFZlcnNpb24gb2YgdGhlIGt1YmUtaHR0cGNhY2hlIENvbnRhaW5lciBJbWFnZSB0byB1c2UuXG4gICAqIElmIG5vdCBzcGVjaWZpZWQsIHRoZSBsYXRlc3QgdmVyc2lvbiBmcm9tIHRoZSByZXBvc2l0b3J5IHdpbGwgYmUgdXNlZC5cbiAgICogQGRlZmF1bHQgdW5kZWZpbmVkIChjaGFydFZlcnNpb24gPSB3aXRoIGVhY2ggY2hhcnQgcmVsZWFzZSB0aGVyZSBpcyBhbiBpbWFnZSByZWxlYXNlIHRvbyApXG4gICAqL1xuICByZWFkb25seSBhcHBWZXJzaW9uPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBOdW1iZXIgb2YgVmFybmlzaCBwb2QgcmVwbGljYXMgdG8gcnVuLlxuICAgKiBAZGVmYXVsdCAyXG4gICAqL1xuICByZWFkb25seSByZXBsaWNhcz86IG51bWJlcjtcbn1cblxuLyoqXG4gKiBQbG9uZUh0dHBjYWNoZSBjb25zdHJ1Y3QgZm9yIGRlcGxveWluZyBWYXJuaXNoIEhUVFAgY2FjaGluZyBsYXllci5cbiAqXG4gKiBVc2VzIHRoZSBtaXR0d2FsZC9rdWJlLWh0dHBjYWNoZSBIZWxtIGNoYXJ0IHRvIGRlcGxveSBWYXJuaXNoIGFzIGFcbiAqIGNhY2hpbmcgcHJveHkgaW4gZnJvbnQgb2YgUGxvbmUgYmFja2VuZCBhbmQvb3IgZnJvbnRlbmQgc2VydmljZXMuXG4gKlxuICogVGhlIGNhY2hlIGF1dG9tYXRpY2FsbHkgY29ubmVjdHMgdG8gdGhlIFBsb25lIHNlcnZpY2VzIGFuZCBwcm92aWRlc1xuICogSFRUUCBjYWNoZSBpbnZhbGlkYXRpb24gY2FwYWJpbGl0aWVzLlxuICpcbiAqIEBleGFtcGxlXG4gKiBjb25zdCBwbG9uZSA9IG5ldyBQbG9uZShjaGFydCwgJ3Bsb25lJyk7XG4gKiBjb25zdCBjYWNoZSA9IG5ldyBQbG9uZUh0dHBjYWNoZShjaGFydCwgJ2NhY2hlJywge1xuICogICBwbG9uZTogcGxvbmUsXG4gKiAgIGV4aXN0aW5nU2VjcmV0OiAndmFybmlzaC1zZWNyZXQnLFxuICogfSk7XG4gKi9cbmV4cG9ydCBjbGFzcyBQbG9uZUh0dHBjYWNoZSBleHRlbmRzIENvbnN0cnVjdCB7XG4gIC8qKlxuICAgKiBOYW1lIG9mIHRoZSBWYXJuaXNoIHNlcnZpY2UgY3JlYXRlZCBieSB0aGUgSGVsbSBjaGFydC5cbiAgICogVXNlIHRoaXMgdG8gcmVmZXJlbmNlIHRoZSBjYWNoZSBzZXJ2aWNlIGZyb20gaW5ncmVzcyBvciBvdGhlciBjb25zdHJ1Y3RzLlxuICAgKi9cbiAgcHVibGljIHJlYWRvbmx5IGh0dHBjYWNoZVNlcnZpY2VOYW1lOiBzdHJpbmc7XG5cbiAgY29uc3RydWN0b3Ioc2NvcGU6IENvbnN0cnVjdCwgaWQ6IHN0cmluZywgb3B0aW9uczogUGxvbmVIdHRwY2FjaGVPcHRpb25zKSB7XG4gICAgc3VwZXIoc2NvcGUsIGlkKTtcbiAgICBsZXQgdmFybmlzaFZjbDogc3RyaW5nO1xuICAgIGlmICghb3B0aW9ucy52YXJuaXNoVmNsKSB7XG4gICAgICBsZXQgdmNsUGF0aDogc3RyaW5nO1xuICAgICAgaWYgKCFvcHRpb25zLnZhcm5pc2hWY2xGaWxlKSB7XG4gICAgICAgIHZjbFBhdGggPSBwYXRoLmpvaW4oX19kaXJuYW1lLCAnY29uZmlnJywgJ3Zhcm5pc2gudHBsLnZjbCcpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdmNsUGF0aCA9IG9wdGlvbnMudmFybmlzaFZjbEZpbGU7XG4gICAgICB9XG4gICAgICB2YXJuaXNoVmNsID0gZnMucmVhZEZpbGVTeW5jKHZjbFBhdGgsICd1dGY4Jyk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHZhcm5pc2hWY2wgPSBvcHRpb25zLnZhcm5pc2hWY2w7XG4gICAgfVxuICAgIGNvbnN0IGltYWdlVGFnID0gb3B0aW9ucy5hcHBWZXJzaW9uID8/IG9wdGlvbnMuY2hhcnRWZXJzaW9uO1xuICAgIGNvbnN0IGh0dHBjYWNoZSA9IG5ldyBIZWxtKHRoaXMsICdodHRwY2FjaGUnLCB7XG4gICAgICAvLyBzZWUgaHR0cHM6Ly9naXRodWIuY29tL21pdHR3YWxkL2t1YmUtaHR0cGNhY2hlL2NoYXJ0XG4gICAgICByZXBvOiAnaHR0cHM6Ly9oZWxtLm1pdHR3YWxkLmRlJyxcbiAgICAgIGNoYXJ0OiAna3ViZS1odHRwY2FjaGUnLFxuICAgICAgdmVyc2lvbjogb3B0aW9ucy5jaGFydFZlcnNpb24sXG4gICAgICB2YWx1ZXM6IHtcbiAgICAgICAgcmVwbGljYUNvdW50OiBvcHRpb25zLnJlcGxpY2FzID8/IDIsXG4gICAgICAgIC4uLihpbWFnZVRhZyAmJiB7IGltYWdlOiB7IHRhZzogaW1hZ2VUYWcgfSB9KSxcbiAgICAgICAgY2FjaGU6IHtcbiAgICAgICAgICAvLyBuZWVkIHRvIGxvb2tzIGF0IHRoZSBmcm9udGVuZFdhdGNoLCBkbyB3ZSBuZWVkIGl0P1xuICAgICAgICAgIGZyb250ZW5kV2F0Y2g6IGZhbHNlLFxuICAgICAgICAgIGJhY2tlbmRXYXRjaDogZmFsc2UsXG4gICAgICAgICAgZXhpc3RpbmdTZWNyZXQ6IG9wdGlvbnMuZXhpc3RpbmdTZWNyZXQgPz8gdW5kZWZpbmVkLFxuICAgICAgICB9LFxuICAgICAgICB2Y2xUZW1wbGF0ZTogdmFybmlzaFZjbCxcbiAgICAgICAgZXh0cmFFbnZWYXJzOiBbXG4gICAgICAgICAgeyBuYW1lOiAnQkFDS0VORF9TRVJWSUNFX05BTUUnLCB2YWx1ZTogb3B0aW9ucy5wbG9uZS5iYWNrZW5kU2VydmljZU5hbWUgfSxcbiAgICAgICAgICB7IG5hbWU6ICdCQUNLRU5EX1NFUlZJQ0VfUE9SVCcsIHZhbHVlOiAnODA4MCcgfSxcbiAgICAgICAgICB7IG5hbWU6ICdCQUNLRU5EX1NJVEVfSUQnLCB2YWx1ZTogb3B0aW9ucy5wbG9uZS5zaXRlSWQgfSxcbiAgICAgICAgICB7IG5hbWU6ICdGUk9OVEVORF9TRVJWSUNFX05BTUUnLCB2YWx1ZTogb3B0aW9ucy5wbG9uZS5mcm9udGVuZFNlcnZpY2VOYW1lIH0sXG4gICAgICAgICAgeyBuYW1lOiAnRlJPTlRFTkRfU0VSVklDRV9QT1JUJywgdmFsdWU6ICczMDAwJyB9LFxuICAgICAgICBdLFxuICAgICAgICAvLyBzZWUgaHR0cHM6Ly9naXRodWIuY29tL21pdHR3YWxkL2t1YmUtaHR0cGNhY2hlL2lzc3Vlcy8yNTNcbiAgICAgICAgbm9kZVNlbGVjdG9yOiB7XG4gICAgICAgICAgJ2t1YmVybmV0ZXMuaW8vYXJjaCc6ICdhbWQ2NCcsXG4gICAgICAgIH0sXG4gICAgICAgIHJlc291cmNlczoge1xuICAgICAgICAgIGxpbWl0czoge1xuICAgICAgICAgICAgY3B1OiBvcHRpb25zLmxpbWl0Q3B1IHx8ICc1MDBtJyxcbiAgICAgICAgICAgIG1lbW9yeTogb3B0aW9ucy5saW1pdE1lbW9yeSB8fCAnNTAwTWknLFxuICAgICAgICAgIH0sXG4gICAgICAgICAgcmVxdWVzdHM6IHtcbiAgICAgICAgICAgIGNwdTogb3B0aW9ucy5yZXF1ZXN0Q3B1IHx8ICcxMDBtJyxcbiAgICAgICAgICAgIG1lbW9yeTogb3B0aW9ucy5yZXF1ZXN0TWVtb3J5IHx8ICcxMDBNaScsXG4gICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICAgICAgcmJhYzoge1xuICAgICAgICAgIGVuYWJsZWQ6IGZhbHNlLFxuICAgICAgICB9LFxuICAgICAgICBleHBvcnRlcjoge1xuICAgICAgICAgIGVuYWJsZWQ6IG9wdGlvbnMuZXhwb3J0ZXJFbmFibGVkID8/IHRydWUsXG4gICAgICAgICAgcmVzb3VyY2VzOiB7XG4gICAgICAgICAgICBsaW1pdHM6IHtcbiAgICAgICAgICAgICAgY3B1OiAnMTAwbScsXG4gICAgICAgICAgICAgIG1lbW9yeTogJzEwME1pJyxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICByZXF1ZXN0czoge1xuICAgICAgICAgICAgICBjcHU6ICcxMG0nLFxuICAgICAgICAgICAgICBtZW1vcnk6ICc1ME1pJyxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICAgICAgc2VydmljZU1vbml0b3I6IHtcbiAgICAgICAgICBlbmFibGVkOiBvcHRpb25zLnNlcnZpY2Vtb25pdG9yIHx8IGZhbHNlLFxuICAgICAgICAgIHNjcmFwZVNpZ25hbGxlcjogb3B0aW9ucy5zZXJ2aWNlbW9uaXRvciB8fCBmYWxzZSxcbiAgICAgICAgfSxcbiAgICAgIH0sXG4gICAgfSk7XG4gICAgY29uc3QgaHR0cGNhY2hlU2VydmljZSA9IGh0dHBjYWNoZS5hcGlPYmplY3RzLmZpbmQoKGNvbnN0cnVjdCkgPT4ge1xuICAgICAgaWYgKChjb25zdHJ1Y3Qua2luZCA9PT0gJ1NlcnZpY2UnKSAmJiAoY29uc3RydWN0Lm1ldGFkYXRhLm5hbWU/LmVuZHNXaXRoKCdrdWJlLWh0dHBjYWNoZScpKSkge1xuICAgICAgICByZXR1cm4gY29uc3RydWN0Lm5hbWU7XG4gICAgICB9XG4gICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH0pO1xuICAgIGlmIChodHRwY2FjaGVTZXJ2aWNlID09PSB1bmRlZmluZWQpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignQ291bGQgbm90IGZpbmQgaHR0cGNhY2hlIHNlcnZpY2UnKTtcbiAgICB9XG4gICAgdGhpcy5odHRwY2FjaGVTZXJ2aWNlTmFtZSA9IGh0dHBjYWNoZVNlcnZpY2UubmFtZTtcbiAgfVxufSJdfQ==
|