@bluedynamics/cdk8s-plone 0.1.40 → 0.1.42

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 (35) hide show
  1. package/.jsii +294 -28
  2. package/API.md +225 -10
  3. package/CLAUDE.md +1 -1
  4. package/README.md +4 -4
  5. package/docs/superpowers/plans/2026-06-12-configurable-service-spec.md +608 -0
  6. package/docs/superpowers/specs/2026-06-12-configurable-service-spec-design.md +192 -0
  7. package/documentation/sources/explanation/architecture.md +7 -6
  8. package/documentation/sources/explanation/features.md +9 -7
  9. package/documentation/sources/how-to/{deploy-classic-ui.md → deploy-blicca.md} +43 -39
  10. package/documentation/sources/how-to/deploy-production-volto.md +1 -1
  11. package/documentation/sources/how-to/index.md +1 -1
  12. package/documentation/sources/reference/api/index.md +1 -1
  13. package/documentation/sources/reference/configuration-options.md +55 -11
  14. package/documentation/sources/tutorials/01-quick-start.md +1 -1
  15. package/examples/{classic-ui → blicca}/README.md +24 -25
  16. package/examples/{classic-ui → blicca}/__snapshots__/main.test.ts.snap +3 -3
  17. package/examples/{classic-ui → blicca}/config/varnish.tpl.vcl +1 -1
  18. package/examples/{classic-ui → blicca}/main.test.ts +3 -3
  19. package/examples/{classic-ui → blicca}/main.ts +6 -6
  20. package/examples/{classic-ui → blicca}/package.json +2 -2
  21. package/lib/httpcache.js +1 -1
  22. package/lib/index.d.ts +1 -0
  23. package/lib/index.js +1 -1
  24. package/lib/plone.d.ts +23 -5
  25. package/lib/plone.js +22 -8
  26. package/lib/service.d.ts +81 -0
  27. package/lib/service.js +24 -6
  28. package/lib/vinylcache.js +1 -1
  29. package/package.json +1 -1
  30. /package/examples/{classic-ui → blicca}/.env.example +0 -0
  31. /package/examples/{classic-ui → blicca}/cdk8s.yaml +0 -0
  32. /package/examples/{classic-ui → blicca}/ingress.ts +0 -0
  33. /package/examples/{classic-ui → blicca}/jest.config.js +0 -0
  34. /package/examples/{classic-ui → blicca}/postgres.bitnami.ts +0 -0
  35. /package/examples/{classic-ui → blicca}/postgres.cloudnativepg.ts +0 -0
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[![npm version](https://badge.fury.io/js/%40bluedynamics%2Fcdk8s-plone.svg)](https://www.npmjs.com/package/@bluedynamics/cdk8s-plone)\n[![PyPI version](https://badge.fury.io/py/cdk8s-plone.svg)](https://pypi.org/project/cdk8s-plone/)\n[![License](https://img.shields.io/badge/License-Apache%202.0-blue.svg)](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 via kube-httpcache (`PloneHttpcache`) or cloud-vinyl VinylCache operator (`PloneVinylCache`)\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\nComplete working examples are available in the [`examples/`](examples/) directory:\n\n- **[Production Volto](examples/production-volto/)** - Production-ready Plone 6 deployment with modern UI:\n - Volto frontend (React) + REST API backend\n - PostgreSQL with RelStorage (CloudNativePG or Bitnami)\n - Varnish HTTP caching with kube-httpcache\n - Ingress support (Traefik/Kong) with TLS\n\n- **[Classic UI](examples/classic-ui/)** - Traditional Plone deployment with server-side rendering:\n - Classic UI (traditional Plone interface)\n - PostgreSQL with RelStorage (CloudNativePG or Bitnami)\n - Varnish HTTP caching with kube-httpcache\n - Ingress support (Traefik/Kong) with TLS\n - Simpler architecture (no separate frontend)\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- [CloudNativePG](https://cloudnative-pg.io/) (for PostgreSQL management)\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"
111
+ "markdown": "# CDK8S Plone\n\n> TypeScript and Python library for deploying Plone CMS to Kubernetes using CDK8S\n\n[![npm version](https://badge.fury.io/js/%40bluedynamics%2Fcdk8s-plone.svg)](https://www.npmjs.com/package/@bluedynamics/cdk8s-plone)\n[![PyPI version](https://badge.fury.io/py/cdk8s-plone.svg)](https://pypi.org/project/cdk8s-plone/)\n[![License](https://img.shields.io/badge/License-Apache%202.0-blue.svg)](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 (React frontend) and Blicca (formerly Classic UI)\n- 📦 High availability with configurable replicas\n- ⚡ Optional Varnish HTTP caching via kube-httpcache (`PloneHttpcache`) or cloud-vinyl VinylCache operator (`PloneVinylCache`)\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\nComplete working examples are available in the [`examples/`](examples/) directory:\n\n- **[Production Volto](examples/production-volto/)** - Production-ready Plone 6 deployment with the React single-page frontend:\n - Volto frontend (React) + REST API backend\n - PostgreSQL with RelStorage (CloudNativePG or Bitnami)\n - Varnish HTTP caching with kube-httpcache\n - Ingress support (Traefik/Kong) with TLS\n\n- **[Blicca](examples/blicca/)** - Plone deployment with server-side rendering (formerly Classic UI):\n - Blicca (backend renders the UI, no separate frontend)\n - PostgreSQL with RelStorage (CloudNativePG or Bitnami)\n - Varnish HTTP caching with kube-httpcache\n - Ingress support (Traefik/Kong) with TLS\n - Simpler architecture (no separate frontend)\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- [CloudNativePG](https://cloudnative-pg.io/) (for PostgreSQL management)\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",
@@ -268,7 +268,7 @@
268
268
  "base": "constructs.Construct",
269
269
  "docs": {
270
270
  "example": "new Plone(chart, 'my-plone', {\n variant: PloneVariant.VOLTO,\n backend: {\n image: 'plone/plone-backend:6.0.10',\n replicas: 3,\n },\n frontend: {\n image: 'plone/plone-frontend:16.0.0',\n },\n});",
271
- "remarks": "This construct creates all necessary Kubernetes resources for running Plone:\n- Deployment(s) for backend (and optionally frontend)\n- Service(s) for network access\n- Optional PodDisruptionBudget for high availability\n\nSupports two deployment variants:\n- VOLTO: Modern React frontend with REST API backend (default)\n- CLASSICUI: Traditional server-side rendered Plone",
271
+ "remarks": "This construct creates all necessary Kubernetes resources for running Plone:\n- Deployment(s) for backend (and optionally frontend)\n- Service(s) for network access\n- Optional PodDisruptionBudget for high availability\n\nSupports two deployment variants:\n- VOLTO: React single-page frontend talking to the REST API backend (default)\n- BLICCA: the Plone backend renders the UI server-side and serves HTML directly",
272
272
  "stability": "stable",
273
273
  "summary": "Plone construct for deploying Plone CMS to Kubernetes."
274
274
  },
@@ -279,7 +279,7 @@
279
279
  },
280
280
  "locationInModule": {
281
281
  "filename": "src/plone.ts",
282
- "line": 398
282
+ "line": 417
283
283
  },
284
284
  "parameters": [
285
285
  {
@@ -306,7 +306,7 @@
306
306
  "kind": "class",
307
307
  "locationInModule": {
308
308
  "filename": "src/plone.ts",
309
- "line": 375
309
+ "line": 394
310
310
  },
311
311
  "name": "Plone",
312
312
  "properties": [
@@ -319,7 +319,7 @@
319
319
  "immutable": true,
320
320
  "locationInModule": {
321
321
  "filename": "src/plone.ts",
322
- "line": 380
322
+ "line": 399
323
323
  },
324
324
  "name": "backendServiceName",
325
325
  "type": {
@@ -334,7 +334,7 @@
334
334
  "immutable": true,
335
335
  "locationInModule": {
336
336
  "filename": "src/plone.ts",
337
- "line": 396
337
+ "line": 415
338
338
  },
339
339
  "name": "siteId",
340
340
  "type": {
@@ -344,12 +344,12 @@
344
344
  {
345
345
  "docs": {
346
346
  "stability": "stable",
347
- "summary": "The deployment variant being used (VOLTO or CLASSICUI)."
347
+ "summary": "The deployment variant being used (VOLTO or BLICCA)."
348
348
  },
349
349
  "immutable": true,
350
350
  "locationInModule": {
351
351
  "filename": "src/plone.ts",
352
- "line": 391
352
+ "line": 410
353
353
  },
354
354
  "name": "variant",
355
355
  "type": {
@@ -365,7 +365,7 @@
365
365
  "immutable": true,
366
366
  "locationInModule": {
367
367
  "filename": "src/plone.ts",
368
- "line": 386
368
+ "line": 405
369
369
  },
370
370
  "name": "frontendServiceName",
371
371
  "optional": true,
@@ -658,7 +658,7 @@
658
658
  "immutable": true,
659
659
  "locationInModule": {
660
660
  "filename": "src/plone.ts",
661
- "line": 270
661
+ "line": 280
662
662
  },
663
663
  "name": "metricsPath",
664
664
  "optional": true,
@@ -677,7 +677,7 @@
677
677
  "immutable": true,
678
678
  "locationInModule": {
679
679
  "filename": "src/plone.ts",
680
- "line": 263
680
+ "line": 273
681
681
  },
682
682
  "name": "metricsPort",
683
683
  "optional": true,
@@ -734,7 +734,7 @@
734
734
  "immutable": true,
735
735
  "locationInModule": {
736
736
  "filename": "src/plone.ts",
737
- "line": 278
737
+ "line": 288
738
738
  },
739
739
  "name": "nodeSelector",
740
740
  "optional": true,
@@ -949,7 +949,7 @@
949
949
  "immutable": true,
950
950
  "locationInModule": {
951
951
  "filename": "src/plone.ts",
952
- "line": 286
952
+ "line": 296
953
953
  },
954
954
  "name": "securityContext",
955
955
  "optional": true,
@@ -957,19 +957,40 @@
957
957
  "fqn": "@bluedynamics/cdk8s-plone.PloneSecurityContext"
958
958
  }
959
959
  },
960
+ {
961
+ "abstract": true,
962
+ "docs": {
963
+ "default": "- construct-managed defaults only",
964
+ "example": "{ type: 'LoadBalancer', trafficDistribution: 'PreferClose' }",
965
+ "remarks": "Applies to this component's Service.",
966
+ "stability": "stable",
967
+ "summary": "Service configuration: type, trafficDistribution, sessionAffinity, annotations/labels, and a raw `overrides` escape hatch for any other ServiceSpec field."
968
+ },
969
+ "immutable": true,
970
+ "locationInModule": {
971
+ "filename": "src/plone.ts",
972
+ "line": 258
973
+ },
974
+ "name": "service",
975
+ "optional": true,
976
+ "type": {
977
+ "fqn": "@bluedynamics/cdk8s-plone.PloneServiceSpec"
978
+ }
979
+ },
960
980
  {
961
981
  "abstract": true,
962
982
  "docs": {
963
983
  "default": "- no additional annotations",
984
+ "deprecated": "use `service.annotations` instead",
964
985
  "example": "{ 'external-dns.alpha.kubernetes.io/hostname': 'plone.example.com' }",
965
986
  "remarks": "Common for external-dns, load balancers, service mesh, etc.",
966
- "stability": "stable",
987
+ "stability": "deprecated",
967
988
  "summary": "Annotations to add to the Service metadata."
968
989
  },
969
990
  "immutable": true,
970
991
  "locationInModule": {
971
992
  "filename": "src/plone.ts",
972
- "line": 248
993
+ "line": 249
973
994
  },
974
995
  "name": "serviceAnnotations",
975
996
  "optional": true,
@@ -993,7 +1014,7 @@
993
1014
  "immutable": true,
994
1015
  "locationInModule": {
995
1016
  "filename": "src/plone.ts",
996
- "line": 256
1017
+ "line": 266
997
1018
  },
998
1019
  "name": "servicemonitor",
999
1020
  "optional": true,
@@ -1450,7 +1471,7 @@
1450
1471
  "kind": "interface",
1451
1472
  "locationInModule": {
1452
1473
  "filename": "src/plone.ts",
1453
- "line": 308
1474
+ "line": 327
1454
1475
  },
1455
1476
  "name": "PloneOptions",
1456
1477
  "properties": [
@@ -1464,7 +1485,7 @@
1464
1485
  "immutable": true,
1465
1486
  "locationInModule": {
1466
1487
  "filename": "src/plone.ts",
1467
- "line": 333
1488
+ "line": 352
1468
1489
  },
1469
1490
  "name": "backend",
1470
1491
  "optional": true,
@@ -1483,7 +1504,7 @@
1483
1504
  "immutable": true,
1484
1505
  "locationInModule": {
1485
1506
  "filename": "src/plone.ts",
1486
- "line": 340
1507
+ "line": 359
1487
1508
  },
1488
1509
  "name": "frontend",
1489
1510
  "optional": true,
@@ -1503,7 +1524,7 @@
1503
1524
  "immutable": true,
1504
1525
  "locationInModule": {
1505
1526
  "filename": "src/plone.ts",
1506
- "line": 348
1527
+ "line": 367
1507
1528
  },
1508
1529
  "name": "imagePullSecrets",
1509
1530
  "optional": true,
@@ -1527,7 +1548,7 @@
1527
1548
  "immutable": true,
1528
1549
  "locationInModule": {
1529
1550
  "filename": "src/plone.ts",
1530
- "line": 321
1551
+ "line": 340
1531
1552
  },
1532
1553
  "name": "siteId",
1533
1554
  "optional": true,
@@ -1545,7 +1566,7 @@
1545
1566
  "immutable": true,
1546
1567
  "locationInModule": {
1547
1568
  "filename": "src/plone.ts",
1548
- "line": 327
1569
+ "line": 346
1549
1570
  },
1550
1571
  "name": "variant",
1551
1572
  "optional": true,
@@ -1564,7 +1585,7 @@
1564
1585
  "immutable": true,
1565
1586
  "locationInModule": {
1566
1587
  "filename": "src/plone.ts",
1567
- "line": 314
1588
+ "line": 333
1568
1589
  },
1569
1590
  "name": "version",
1570
1591
  "optional": true,
@@ -1721,6 +1742,243 @@
1721
1742
  ],
1722
1743
  "symbolId": "src/plone:PloneSecurityContext"
1723
1744
  },
1745
+ "@bluedynamics/cdk8s-plone.PloneServiceSpec": {
1746
+ "assembly": "@bluedynamics/cdk8s-plone",
1747
+ "datatype": true,
1748
+ "docs": {
1749
+ "remarks": "Curated fields cover the common cases; use `overrides` as an escape hatch\nfor any other `ServiceSpec` field. `overrides` has the highest precedence and\ncan override every field, including the construct-managed `ports`/`selector`\n(at your own risk).",
1750
+ "stability": "stable",
1751
+ "summary": "Configuration for the generated Kubernetes Service spec."
1752
+ },
1753
+ "fqn": "@bluedynamics/cdk8s-plone.PloneServiceSpec",
1754
+ "kind": "interface",
1755
+ "locationInModule": {
1756
+ "filename": "src/service.ts",
1757
+ "line": 13
1758
+ },
1759
+ "name": "PloneServiceSpec",
1760
+ "properties": [
1761
+ {
1762
+ "abstract": true,
1763
+ "docs": {
1764
+ "default": "- none",
1765
+ "stability": "stable",
1766
+ "summary": "Annotations to add to the Service metadata."
1767
+ },
1768
+ "immutable": true,
1769
+ "locationInModule": {
1770
+ "filename": "src/service.ts",
1771
+ "line": 66
1772
+ },
1773
+ "name": "annotations",
1774
+ "optional": true,
1775
+ "type": {
1776
+ "collection": {
1777
+ "elementtype": {
1778
+ "primitive": "string"
1779
+ },
1780
+ "kind": "map"
1781
+ }
1782
+ }
1783
+ },
1784
+ {
1785
+ "abstract": true,
1786
+ "docs": {
1787
+ "default": "- Cluster (Kubernetes default)",
1788
+ "stability": "stable",
1789
+ "summary": "External traffic policy, 'Cluster' | 'Local'."
1790
+ },
1791
+ "immutable": true,
1792
+ "locationInModule": {
1793
+ "filename": "src/service.ts",
1794
+ "line": 36
1795
+ },
1796
+ "name": "externalTrafficPolicy",
1797
+ "optional": true,
1798
+ "type": {
1799
+ "primitive": "string"
1800
+ }
1801
+ },
1802
+ {
1803
+ "abstract": true,
1804
+ "docs": {
1805
+ "default": "- Cluster (Kubernetes default)",
1806
+ "stability": "stable",
1807
+ "summary": "Internal traffic policy, 'Cluster' | 'Local'."
1808
+ },
1809
+ "immutable": true,
1810
+ "locationInModule": {
1811
+ "filename": "src/service.ts",
1812
+ "line": 42
1813
+ },
1814
+ "name": "internalTrafficPolicy",
1815
+ "optional": true,
1816
+ "type": {
1817
+ "primitive": "string"
1818
+ }
1819
+ },
1820
+ {
1821
+ "abstract": true,
1822
+ "docs": {
1823
+ "default": "- none",
1824
+ "stability": "stable",
1825
+ "summary": "Extra labels to add to the Service metadata."
1826
+ },
1827
+ "immutable": true,
1828
+ "locationInModule": {
1829
+ "filename": "src/service.ts",
1830
+ "line": 72
1831
+ },
1832
+ "name": "labels",
1833
+ "optional": true,
1834
+ "type": {
1835
+ "collection": {
1836
+ "elementtype": {
1837
+ "primitive": "string"
1838
+ },
1839
+ "kind": "map"
1840
+ }
1841
+ }
1842
+ },
1843
+ {
1844
+ "abstract": true,
1845
+ "docs": {
1846
+ "default": "- none",
1847
+ "stability": "stable",
1848
+ "summary": "Load balancer implementation class."
1849
+ },
1850
+ "immutable": true,
1851
+ "locationInModule": {
1852
+ "filename": "src/service.ts",
1853
+ "line": 54
1854
+ },
1855
+ "name": "loadBalancerClass",
1856
+ "optional": true,
1857
+ "type": {
1858
+ "primitive": "string"
1859
+ }
1860
+ },
1861
+ {
1862
+ "abstract": true,
1863
+ "docs": {
1864
+ "default": "- none",
1865
+ "stability": "stable",
1866
+ "summary": "Source IP ranges allowed to access a LoadBalancer service."
1867
+ },
1868
+ "immutable": true,
1869
+ "locationInModule": {
1870
+ "filename": "src/service.ts",
1871
+ "line": 60
1872
+ },
1873
+ "name": "loadBalancerSourceRanges",
1874
+ "optional": true,
1875
+ "type": {
1876
+ "collection": {
1877
+ "elementtype": {
1878
+ "primitive": "string"
1879
+ },
1880
+ "kind": "array"
1881
+ }
1882
+ }
1883
+ },
1884
+ {
1885
+ "abstract": true,
1886
+ "docs": {
1887
+ "default": "- none",
1888
+ "stability": "stable",
1889
+ "summary": "Raw ServiceSpec overrides as a free-form map (e.g. `{ ipFamilyPolicy: 'PreferDualStack' }`). Highest precedence — merged on top of all curated fields and the construct-managed base. Use for any ServiceSpec field not covered above. Keys and values are passed through to the Service spec verbatim and are not validated by this construct."
1890
+ },
1891
+ "immutable": true,
1892
+ "locationInModule": {
1893
+ "filename": "src/service.ts",
1894
+ "line": 82
1895
+ },
1896
+ "name": "overrides",
1897
+ "optional": true,
1898
+ "type": {
1899
+ "collection": {
1900
+ "elementtype": {
1901
+ "primitive": "any"
1902
+ },
1903
+ "kind": "map"
1904
+ }
1905
+ }
1906
+ },
1907
+ {
1908
+ "abstract": true,
1909
+ "docs": {
1910
+ "default": "- false",
1911
+ "stability": "stable",
1912
+ "summary": "Publish not-ready addresses (e.g. for headless services with StatefulSets)."
1913
+ },
1914
+ "immutable": true,
1915
+ "locationInModule": {
1916
+ "filename": "src/service.ts",
1917
+ "line": 48
1918
+ },
1919
+ "name": "publishNotReadyAddresses",
1920
+ "optional": true,
1921
+ "type": {
1922
+ "primitive": "boolean"
1923
+ }
1924
+ },
1925
+ {
1926
+ "abstract": true,
1927
+ "docs": {
1928
+ "default": "- None (Kubernetes default)",
1929
+ "stability": "stable",
1930
+ "summary": "Session affinity, 'ClientIP' | 'None'."
1931
+ },
1932
+ "immutable": true,
1933
+ "locationInModule": {
1934
+ "filename": "src/service.ts",
1935
+ "line": 30
1936
+ },
1937
+ "name": "sessionAffinity",
1938
+ "optional": true,
1939
+ "type": {
1940
+ "primitive": "string"
1941
+ }
1942
+ },
1943
+ {
1944
+ "abstract": true,
1945
+ "docs": {
1946
+ "default": "- none",
1947
+ "stability": "stable",
1948
+ "summary": "Traffic distribution preference, e.g. 'PreferClose' for topology-aware routing."
1949
+ },
1950
+ "immutable": true,
1951
+ "locationInModule": {
1952
+ "filename": "src/service.ts",
1953
+ "line": 24
1954
+ },
1955
+ "name": "trafficDistribution",
1956
+ "optional": true,
1957
+ "type": {
1958
+ "primitive": "string"
1959
+ }
1960
+ },
1961
+ {
1962
+ "abstract": true,
1963
+ "docs": {
1964
+ "default": "- ClusterIP (Kubernetes default)",
1965
+ "stability": "stable",
1966
+ "summary": "Service type, e.g. ClusterIP | NodePort | LoadBalancer | ExternalName."
1967
+ },
1968
+ "immutable": true,
1969
+ "locationInModule": {
1970
+ "filename": "src/service.ts",
1971
+ "line": 18
1972
+ },
1973
+ "name": "type",
1974
+ "optional": true,
1975
+ "type": {
1976
+ "primitive": "string"
1977
+ }
1978
+ }
1979
+ ],
1980
+ "symbolId": "src/service:PloneServiceSpec"
1981
+ },
1724
1982
  "@bluedynamics/cdk8s-plone.PloneVariant": {
1725
1983
  "assembly": "@bluedynamics/cdk8s-plone",
1726
1984
  "docs": {
@@ -1731,14 +1989,14 @@
1731
1989
  "kind": "enum",
1732
1990
  "locationInModule": {
1733
1991
  "filename": "src/plone.ts",
1734
- "line": 291
1992
+ "line": 301
1735
1993
  },
1736
1994
  "members": [
1737
1995
  {
1738
1996
  "docs": {
1739
1997
  "remarks": "Deploys both frontend and backend services.",
1740
1998
  "stability": "stable",
1741
- "summary": "Volto variant: ReactJS frontend (Volto) with REST API backend."
1999
+ "summary": "Volto variant: ReactJS single-page frontend (Volto) talking to the Plone REST API."
1742
2000
  },
1743
2001
  "name": "VOLTO"
1744
2002
  },
@@ -1746,7 +2004,15 @@
1746
2004
  "docs": {
1747
2005
  "remarks": "Deploys only the backend service.",
1748
2006
  "stability": "stable",
1749
- "summary": "Classic UI variant: Traditional Plone with server-side rendering."
2007
+ "summary": "Blicca variant: the Plone backend renders the UI server-side and serves the HTML directly."
2008
+ },
2009
+ "name": "BLICCA"
2010
+ },
2011
+ {
2012
+ "docs": {
2013
+ "deprecated": "Renamed to {@link BLICCA }. Kept for backward compatibility and selects the\nsame backend-only deployment. Existing configuration using `CLASSICUI` (or the literal\nvalue `'classicui'`) keeps working unchanged. Will be removed in a future major release.",
2014
+ "stability": "deprecated",
2015
+ "summary": "Deprecated alias for the Blicca variant (formerly \"Classic UI\")."
1750
2016
  },
1751
2017
  "name": "CLASSICUI"
1752
2018
  }
@@ -2852,6 +3118,6 @@
2852
3118
  "symbolId": "src/vinylcache:VinylCacheToleration"
2853
3119
  }
2854
3120
  },
2855
- "version": "0.1.40",
2856
- "fingerprint": "RD48uDt8wjb2dYP+IUClJ3iHIkNYZ/vLu2zMbysrhSo="
3121
+ "version": "0.1.42",
3122
+ "fingerprint": "D9/SxjjIZbxf8BCRqRbR2qAlxXiZY5YCDvyQS6+zHXQ="
2857
3123
  }