@bluedynamics/cdk8s-plone 0.1.23 → 0.1.25

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/API.md CHANGED
@@ -389,6 +389,176 @@ Use this to reference the cache service from ingress or other constructs.
389
389
  ---
390
390
 
391
391
 
392
+ ### PloneVinylCache <a name="PloneVinylCache" id="@bluedynamics/cdk8s-plone.PloneVinylCache"></a>
393
+
394
+ PloneVinylCache construct for deploying Varnish Cache via cloud-vinyl operator.
395
+
396
+ Creates a VinylCache custom resource with Plone backend/frontend services
397
+ auto-configured as backends. The cloud-vinyl operator manages the full
398
+ Varnish lifecycle including VCL generation, agent delivery, and monitoring.
399
+
400
+ Requires the cloud-vinyl operator to be installed in the cluster.
401
+
402
+ *Example*
403
+
404
+ ```typescript
405
+ const plone = new Plone(chart, 'plone');
406
+ const cache = new PloneVinylCache(chart, 'cache', {
407
+ plone: plone,
408
+ replicas: 2,
409
+ });
410
+ // Use cache.vinylCacheServiceName for IngressRoute
411
+ ```
412
+
413
+
414
+ #### Initializers <a name="Initializers" id="@bluedynamics/cdk8s-plone.PloneVinylCache.Initializer"></a>
415
+
416
+ ```typescript
417
+ import { PloneVinylCache } from '@bluedynamics/cdk8s-plone'
418
+
419
+ new PloneVinylCache(scope: Construct, id: string, options: PloneVinylCacheOptions)
420
+ ```
421
+
422
+ | **Name** | **Type** | **Description** |
423
+ | --- | --- | --- |
424
+ | <code><a href="#@bluedynamics/cdk8s-plone.PloneVinylCache.Initializer.parameter.scope">scope</a></code> | <code>constructs.Construct</code> | *No description.* |
425
+ | <code><a href="#@bluedynamics/cdk8s-plone.PloneVinylCache.Initializer.parameter.id">id</a></code> | <code>string</code> | *No description.* |
426
+ | <code><a href="#@bluedynamics/cdk8s-plone.PloneVinylCache.Initializer.parameter.options">options</a></code> | <code><a href="#@bluedynamics/cdk8s-plone.PloneVinylCacheOptions">PloneVinylCacheOptions</a></code> | *No description.* |
427
+
428
+ ---
429
+
430
+ ##### `scope`<sup>Required</sup> <a name="scope" id="@bluedynamics/cdk8s-plone.PloneVinylCache.Initializer.parameter.scope"></a>
431
+
432
+ - *Type:* constructs.Construct
433
+
434
+ ---
435
+
436
+ ##### `id`<sup>Required</sup> <a name="id" id="@bluedynamics/cdk8s-plone.PloneVinylCache.Initializer.parameter.id"></a>
437
+
438
+ - *Type:* string
439
+
440
+ ---
441
+
442
+ ##### `options`<sup>Required</sup> <a name="options" id="@bluedynamics/cdk8s-plone.PloneVinylCache.Initializer.parameter.options"></a>
443
+
444
+ - *Type:* <a href="#@bluedynamics/cdk8s-plone.PloneVinylCacheOptions">PloneVinylCacheOptions</a>
445
+
446
+ ---
447
+
448
+ #### Methods <a name="Methods" id="Methods"></a>
449
+
450
+ | **Name** | **Description** |
451
+ | --- | --- |
452
+ | <code><a href="#@bluedynamics/cdk8s-plone.PloneVinylCache.toString">toString</a></code> | Returns a string representation of this construct. |
453
+ | <code><a href="#@bluedynamics/cdk8s-plone.PloneVinylCache.with">with</a></code> | Applies one or more mixins to this construct. |
454
+
455
+ ---
456
+
457
+ ##### `toString` <a name="toString" id="@bluedynamics/cdk8s-plone.PloneVinylCache.toString"></a>
458
+
459
+ ```typescript
460
+ public toString(): string
461
+ ```
462
+
463
+ Returns a string representation of this construct.
464
+
465
+ ##### `with` <a name="with" id="@bluedynamics/cdk8s-plone.PloneVinylCache.with"></a>
466
+
467
+ ```typescript
468
+ public with(mixins: ...IMixin[]): IConstruct
469
+ ```
470
+
471
+ Applies one or more mixins to this construct.
472
+
473
+ Mixins are applied in order. The list of constructs is captured at the
474
+ start of the call, so constructs added by a mixin will not be visited.
475
+ Use multiple `with()` calls if subsequent mixins should apply to added
476
+ constructs.
477
+
478
+ ###### `mixins`<sup>Required</sup> <a name="mixins" id="@bluedynamics/cdk8s-plone.PloneVinylCache.with.parameter.mixins"></a>
479
+
480
+ - *Type:* ...constructs.IMixin[]
481
+
482
+ The mixins to apply.
483
+
484
+ ---
485
+
486
+ #### Static Functions <a name="Static Functions" id="Static Functions"></a>
487
+
488
+ | **Name** | **Description** |
489
+ | --- | --- |
490
+ | <code><a href="#@bluedynamics/cdk8s-plone.PloneVinylCache.isConstruct">isConstruct</a></code> | Checks if `x` is a construct. |
491
+
492
+ ---
493
+
494
+ ##### `isConstruct` <a name="isConstruct" id="@bluedynamics/cdk8s-plone.PloneVinylCache.isConstruct"></a>
495
+
496
+ ```typescript
497
+ import { PloneVinylCache } from '@bluedynamics/cdk8s-plone'
498
+
499
+ PloneVinylCache.isConstruct(x: any)
500
+ ```
501
+
502
+ Checks if `x` is a construct.
503
+
504
+ Use this method instead of `instanceof` to properly detect `Construct`
505
+ instances, even when the construct library is symlinked.
506
+
507
+ Explanation: in JavaScript, multiple copies of the `constructs` library on
508
+ disk are seen as independent, completely different libraries. As a
509
+ consequence, the class `Construct` in each copy of the `constructs` library
510
+ is seen as a different class, and an instance of one class will not test as
511
+ `instanceof` the other class. `npm install` will not create installations
512
+ like this, but users may manually symlink construct libraries together or
513
+ use a monorepo tool: in those cases, multiple copies of the `constructs`
514
+ library can be accidentally installed, and `instanceof` will behave
515
+ unpredictably. It is safest to avoid using `instanceof`, and using
516
+ this type-testing method instead.
517
+
518
+ ###### `x`<sup>Required</sup> <a name="x" id="@bluedynamics/cdk8s-plone.PloneVinylCache.isConstruct.parameter.x"></a>
519
+
520
+ - *Type:* any
521
+
522
+ Any object.
523
+
524
+ ---
525
+
526
+ #### Properties <a name="Properties" id="Properties"></a>
527
+
528
+ | **Name** | **Type** | **Description** |
529
+ | --- | --- | --- |
530
+ | <code><a href="#@bluedynamics/cdk8s-plone.PloneVinylCache.property.node">node</a></code> | <code>constructs.Node</code> | The tree node. |
531
+ | <code><a href="#@bluedynamics/cdk8s-plone.PloneVinylCache.property.vinylCacheServiceName">vinylCacheServiceName</a></code> | <code>string</code> | Name of the VinylCache service created by the operator. |
532
+
533
+ ---
534
+
535
+ ##### `node`<sup>Required</sup> <a name="node" id="@bluedynamics/cdk8s-plone.PloneVinylCache.property.node"></a>
536
+
537
+ ```typescript
538
+ public readonly node: Node;
539
+ ```
540
+
541
+ - *Type:* constructs.Node
542
+
543
+ The tree node.
544
+
545
+ ---
546
+
547
+ ##### `vinylCacheServiceName`<sup>Required</sup> <a name="vinylCacheServiceName" id="@bluedynamics/cdk8s-plone.PloneVinylCache.property.vinylCacheServiceName"></a>
548
+
549
+ ```typescript
550
+ public readonly vinylCacheServiceName: string;
551
+ ```
552
+
553
+ - *Type:* string
554
+
555
+ Name of the VinylCache service created by the operator.
556
+
557
+ Use this to reference the cache service from ingress or other constructs.
558
+
559
+ ---
560
+
561
+
392
562
  ## Structs <a name="Structs" id="Structs"></a>
393
563
 
394
564
  ### HttpcacheEnvVar <a name="HttpcacheEnvVar" id="@bluedynamics/cdk8s-plone.HttpcacheEnvVar"></a>
@@ -545,6 +715,7 @@ const ploneBaseOptions: PloneBaseOptions = { ... }
545
715
  | <code><a href="#@bluedynamics/cdk8s-plone.PloneBaseOptions.property.metricsPath">metricsPath</a></code> | <code>string</code> | Path to scrape metrics from. |
546
716
  | <code><a href="#@bluedynamics/cdk8s-plone.PloneBaseOptions.property.metricsPort">metricsPort</a></code> | <code>string \| number</code> | Port name or number to scrape metrics from. |
547
717
  | <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. |
718
+ | <code><a href="#@bluedynamics/cdk8s-plone.PloneBaseOptions.property.nodeSelector">nodeSelector</a></code> | <code>{[ key: string ]: string}</code> | Node selector labels for pod scheduling. |
548
719
  | <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. |
549
720
  | <code><a href="#@bluedynamics/cdk8s-plone.PloneBaseOptions.property.readinessEnabled">readinessEnabled</a></code> | <code>boolean</code> | Enable readiness probe for the container. |
550
721
  | <code><a href="#@bluedynamics/cdk8s-plone.PloneBaseOptions.property.readinessFailureThreshold">readinessFailureThreshold</a></code> | <code>number</code> | Minimum consecutive failures for the readiness probe to be considered failed. |
@@ -811,6 +982,28 @@ Used in PodDisruptionBudget if specified.
811
982
 
812
983
  ---
813
984
 
985
+ ##### `nodeSelector`<sup>Optional</sup> <a name="nodeSelector" id="@bluedynamics/cdk8s-plone.PloneBaseOptions.property.nodeSelector"></a>
986
+
987
+ ```typescript
988
+ public readonly nodeSelector: {[ key: string ]: string};
989
+ ```
990
+
991
+ - *Type:* {[ key: string ]: string}
992
+ - *Default:* no node selector
993
+
994
+ Node selector labels for pod scheduling.
995
+
996
+ Use to constrain pods to nodes with matching labels, e.g. for region affinity.
997
+
998
+ ---
999
+
1000
+ *Example*
1001
+
1002
+ ```typescript
1003
+ { 'topology.kubernetes.io/region': 'fsn1' }
1004
+ ```
1005
+
1006
+
814
1007
  ##### `podAnnotations`<sup>Optional</sup> <a name="podAnnotations" id="@bluedynamics/cdk8s-plone.PloneBaseOptions.property.podAnnotations"></a>
815
1008
 
816
1009
  ```typescript
@@ -1372,6 +1565,291 @@ This is used in Kubernetes labels and doesn't affect the actual image versions.
1372
1565
 
1373
1566
  ---
1374
1567
 
1568
+ ### PloneVinylCacheOptions <a name="PloneVinylCacheOptions" id="@bluedynamics/cdk8s-plone.PloneVinylCacheOptions"></a>
1569
+
1570
+ Configuration options for PloneVinylCache (cloud-vinyl operator).
1571
+
1572
+ Creates a VinylCache custom resource that the cloud-vinyl operator
1573
+ reconciles into a Varnish Cache cluster with agent-based VCL delivery.
1574
+
1575
+ Requires the cloud-vinyl operator to be installed in the cluster.
1576
+
1577
+ #### Initializer <a name="Initializer" id="@bluedynamics/cdk8s-plone.PloneVinylCacheOptions.Initializer"></a>
1578
+
1579
+ ```typescript
1580
+ import { PloneVinylCacheOptions } from '@bluedynamics/cdk8s-plone'
1581
+
1582
+ const ploneVinylCacheOptions: PloneVinylCacheOptions = { ... }
1583
+ ```
1584
+
1585
+ #### Properties <a name="Properties" id="Properties"></a>
1586
+
1587
+ | **Name** | **Type** | **Description** |
1588
+ | --- | --- | --- |
1589
+ | <code><a href="#@bluedynamics/cdk8s-plone.PloneVinylCacheOptions.property.plone">plone</a></code> | <code><a href="#@bluedynamics/cdk8s-plone.Plone">Plone</a></code> | The Plone construct to attach the cache to. |
1590
+ | <code><a href="#@bluedynamics/cdk8s-plone.PloneVinylCacheOptions.property.director">director</a></code> | <code>string</code> | Director type for load distribution. |
1591
+ | <code><a href="#@bluedynamics/cdk8s-plone.PloneVinylCacheOptions.property.image">image</a></code> | <code>string</code> | Container image for the Varnish pods. |
1592
+ | <code><a href="#@bluedynamics/cdk8s-plone.PloneVinylCacheOptions.property.invalidation">invalidation</a></code> | <code>boolean</code> | Enable cache invalidation (PURGE, BAN, xkey). |
1593
+ | <code><a href="#@bluedynamics/cdk8s-plone.PloneVinylCacheOptions.property.limitCpu">limitCpu</a></code> | <code>string</code> | CPU limit for Varnish pods. |
1594
+ | <code><a href="#@bluedynamics/cdk8s-plone.PloneVinylCacheOptions.property.limitMemory">limitMemory</a></code> | <code>string</code> | Memory limit for Varnish pods. |
1595
+ | <code><a href="#@bluedynamics/cdk8s-plone.PloneVinylCacheOptions.property.monitoring">monitoring</a></code> | <code>boolean</code> | Enable Prometheus monitoring (metrics + ServiceMonitor). |
1596
+ | <code><a href="#@bluedynamics/cdk8s-plone.PloneVinylCacheOptions.property.replicas">replicas</a></code> | <code>number</code> | Number of Varnish pod replicas. |
1597
+ | <code><a href="#@bluedynamics/cdk8s-plone.PloneVinylCacheOptions.property.requestCpu">requestCpu</a></code> | <code>string</code> | CPU request for Varnish pods. |
1598
+ | <code><a href="#@bluedynamics/cdk8s-plone.PloneVinylCacheOptions.property.requestMemory">requestMemory</a></code> | <code>string</code> | Memory request for Varnish pods. |
1599
+ | <code><a href="#@bluedynamics/cdk8s-plone.PloneVinylCacheOptions.property.tolerations">tolerations</a></code> | <code><a href="#@bluedynamics/cdk8s-plone.VinylCacheToleration">VinylCacheToleration</a>[]</code> | Tolerations for the Varnish pods. |
1600
+ | <code><a href="#@bluedynamics/cdk8s-plone.PloneVinylCacheOptions.property.vclBackendResponseSnippet">vclBackendResponseSnippet</a></code> | <code>string</code> | Custom VCL snippet for vcl_backend_response subroutine. |
1601
+ | <code><a href="#@bluedynamics/cdk8s-plone.PloneVinylCacheOptions.property.vclRecvSnippet">vclRecvSnippet</a></code> | <code>string</code> | Custom VCL snippet for vcl_recv subroutine. |
1602
+
1603
+ ---
1604
+
1605
+ ##### `plone`<sup>Required</sup> <a name="plone" id="@bluedynamics/cdk8s-plone.PloneVinylCacheOptions.property.plone"></a>
1606
+
1607
+ ```typescript
1608
+ public readonly plone: Plone;
1609
+ ```
1610
+
1611
+ - *Type:* <a href="#@bluedynamics/cdk8s-plone.Plone">Plone</a>
1612
+
1613
+ The Plone construct to attach the cache to.
1614
+
1615
+ Backends are auto-configured from the Plone services.
1616
+
1617
+ ---
1618
+
1619
+ ##### `director`<sup>Optional</sup> <a name="director" id="@bluedynamics/cdk8s-plone.PloneVinylCacheOptions.property.director"></a>
1620
+
1621
+ ```typescript
1622
+ public readonly director: string;
1623
+ ```
1624
+
1625
+ - *Type:* string
1626
+ - *Default:* 'shard'
1627
+
1628
+ Director type for load distribution.
1629
+
1630
+ ---
1631
+
1632
+ ##### `image`<sup>Optional</sup> <a name="image" id="@bluedynamics/cdk8s-plone.PloneVinylCacheOptions.property.image"></a>
1633
+
1634
+ ```typescript
1635
+ public readonly image: string;
1636
+ ```
1637
+
1638
+ - *Type:* string
1639
+ - *Default:* 'varnish:7.6'
1640
+
1641
+ Container image for the Varnish pods.
1642
+
1643
+ ---
1644
+
1645
+ ##### `invalidation`<sup>Optional</sup> <a name="invalidation" id="@bluedynamics/cdk8s-plone.PloneVinylCacheOptions.property.invalidation"></a>
1646
+
1647
+ ```typescript
1648
+ public readonly invalidation: boolean;
1649
+ ```
1650
+
1651
+ - *Type:* boolean
1652
+ - *Default:* true
1653
+
1654
+ Enable cache invalidation (PURGE, BAN, xkey).
1655
+
1656
+ ---
1657
+
1658
+ ##### `limitCpu`<sup>Optional</sup> <a name="limitCpu" id="@bluedynamics/cdk8s-plone.PloneVinylCacheOptions.property.limitCpu"></a>
1659
+
1660
+ ```typescript
1661
+ public readonly limitCpu: string;
1662
+ ```
1663
+
1664
+ - *Type:* string
1665
+ - *Default:* '500m'
1666
+
1667
+ CPU limit for Varnish pods.
1668
+
1669
+ ---
1670
+
1671
+ ##### `limitMemory`<sup>Optional</sup> <a name="limitMemory" id="@bluedynamics/cdk8s-plone.PloneVinylCacheOptions.property.limitMemory"></a>
1672
+
1673
+ ```typescript
1674
+ public readonly limitMemory: string;
1675
+ ```
1676
+
1677
+ - *Type:* string
1678
+ - *Default:* '512Mi'
1679
+
1680
+ Memory limit for Varnish pods.
1681
+
1682
+ ---
1683
+
1684
+ ##### `monitoring`<sup>Optional</sup> <a name="monitoring" id="@bluedynamics/cdk8s-plone.PloneVinylCacheOptions.property.monitoring"></a>
1685
+
1686
+ ```typescript
1687
+ public readonly monitoring: boolean;
1688
+ ```
1689
+
1690
+ - *Type:* boolean
1691
+ - *Default:* false
1692
+
1693
+ Enable Prometheus monitoring (metrics + ServiceMonitor).
1694
+
1695
+ ---
1696
+
1697
+ ##### `replicas`<sup>Optional</sup> <a name="replicas" id="@bluedynamics/cdk8s-plone.PloneVinylCacheOptions.property.replicas"></a>
1698
+
1699
+ ```typescript
1700
+ public readonly replicas: number;
1701
+ ```
1702
+
1703
+ - *Type:* number
1704
+ - *Default:* 2
1705
+
1706
+ Number of Varnish pod replicas.
1707
+
1708
+ ---
1709
+
1710
+ ##### `requestCpu`<sup>Optional</sup> <a name="requestCpu" id="@bluedynamics/cdk8s-plone.PloneVinylCacheOptions.property.requestCpu"></a>
1711
+
1712
+ ```typescript
1713
+ public readonly requestCpu: string;
1714
+ ```
1715
+
1716
+ - *Type:* string
1717
+ - *Default:* '100m'
1718
+
1719
+ CPU request for Varnish pods.
1720
+
1721
+ ---
1722
+
1723
+ ##### `requestMemory`<sup>Optional</sup> <a name="requestMemory" id="@bluedynamics/cdk8s-plone.PloneVinylCacheOptions.property.requestMemory"></a>
1724
+
1725
+ ```typescript
1726
+ public readonly requestMemory: string;
1727
+ ```
1728
+
1729
+ - *Type:* string
1730
+ - *Default:* '256Mi'
1731
+
1732
+ Memory request for Varnish pods.
1733
+
1734
+ ---
1735
+
1736
+ ##### `tolerations`<sup>Optional</sup> <a name="tolerations" id="@bluedynamics/cdk8s-plone.PloneVinylCacheOptions.property.tolerations"></a>
1737
+
1738
+ ```typescript
1739
+ public readonly tolerations: VinylCacheToleration[];
1740
+ ```
1741
+
1742
+ - *Type:* <a href="#@bluedynamics/cdk8s-plone.VinylCacheToleration">VinylCacheToleration</a>[]
1743
+ - *Default:* no tolerations
1744
+
1745
+ Tolerations for the Varnish pods.
1746
+
1747
+ ---
1748
+
1749
+ ##### `vclBackendResponseSnippet`<sup>Optional</sup> <a name="vclBackendResponseSnippet" id="@bluedynamics/cdk8s-plone.PloneVinylCacheOptions.property.vclBackendResponseSnippet"></a>
1750
+
1751
+ ```typescript
1752
+ public readonly vclBackendResponseSnippet: string;
1753
+ ```
1754
+
1755
+ - *Type:* string
1756
+ - *Default:* uses built-in plone-vinyl-backend-response.vcl
1757
+
1758
+ Custom VCL snippet for vcl_backend_response subroutine.
1759
+
1760
+ Replaces the default Plone backend_response snippet.
1761
+
1762
+ ---
1763
+
1764
+ ##### `vclRecvSnippet`<sup>Optional</sup> <a name="vclRecvSnippet" id="@bluedynamics/cdk8s-plone.PloneVinylCacheOptions.property.vclRecvSnippet"></a>
1765
+
1766
+ ```typescript
1767
+ public readonly vclRecvSnippet: string;
1768
+ ```
1769
+
1770
+ - *Type:* string
1771
+ - *Default:* uses built-in plone-vinyl-recv.vcl
1772
+
1773
+ Custom VCL snippet for vcl_recv subroutine.
1774
+
1775
+ Replaces the default Plone recv snippet.
1776
+
1777
+ ---
1778
+
1779
+ ### VinylCacheToleration <a name="VinylCacheToleration" id="@bluedynamics/cdk8s-plone.VinylCacheToleration"></a>
1780
+
1781
+ A Kubernetes toleration for the Varnish pods.
1782
+
1783
+ #### Initializer <a name="Initializer" id="@bluedynamics/cdk8s-plone.VinylCacheToleration.Initializer"></a>
1784
+
1785
+ ```typescript
1786
+ import { VinylCacheToleration } from '@bluedynamics/cdk8s-plone'
1787
+
1788
+ const vinylCacheToleration: VinylCacheToleration = { ... }
1789
+ ```
1790
+
1791
+ #### Properties <a name="Properties" id="Properties"></a>
1792
+
1793
+ | **Name** | **Type** | **Description** |
1794
+ | --- | --- | --- |
1795
+ | <code><a href="#@bluedynamics/cdk8s-plone.VinylCacheToleration.property.key">key</a></code> | <code>string</code> | The taint key to tolerate. |
1796
+ | <code><a href="#@bluedynamics/cdk8s-plone.VinylCacheToleration.property.effect">effect</a></code> | <code>string</code> | The taint effect to tolerate (NoSchedule, PreferNoSchedule, NoExecute). |
1797
+ | <code><a href="#@bluedynamics/cdk8s-plone.VinylCacheToleration.property.operator">operator</a></code> | <code>string</code> | The operator (Equal or Exists). |
1798
+ | <code><a href="#@bluedynamics/cdk8s-plone.VinylCacheToleration.property.value">value</a></code> | <code>string</code> | The taint value to match (when operator is Equal). |
1799
+
1800
+ ---
1801
+
1802
+ ##### `key`<sup>Required</sup> <a name="key" id="@bluedynamics/cdk8s-plone.VinylCacheToleration.property.key"></a>
1803
+
1804
+ ```typescript
1805
+ public readonly key: string;
1806
+ ```
1807
+
1808
+ - *Type:* string
1809
+
1810
+ The taint key to tolerate.
1811
+
1812
+ ---
1813
+
1814
+ ##### `effect`<sup>Optional</sup> <a name="effect" id="@bluedynamics/cdk8s-plone.VinylCacheToleration.property.effect"></a>
1815
+
1816
+ ```typescript
1817
+ public readonly effect: string;
1818
+ ```
1819
+
1820
+ - *Type:* string
1821
+ - *Default:* tolerate all effects
1822
+
1823
+ The taint effect to tolerate (NoSchedule, PreferNoSchedule, NoExecute).
1824
+
1825
+ ---
1826
+
1827
+ ##### `operator`<sup>Optional</sup> <a name="operator" id="@bluedynamics/cdk8s-plone.VinylCacheToleration.property.operator"></a>
1828
+
1829
+ ```typescript
1830
+ public readonly operator: string;
1831
+ ```
1832
+
1833
+ - *Type:* string
1834
+ - *Default:* 'Equal'
1835
+
1836
+ The operator (Equal or Exists).
1837
+
1838
+ ---
1839
+
1840
+ ##### `value`<sup>Optional</sup> <a name="value" id="@bluedynamics/cdk8s-plone.VinylCacheToleration.property.value"></a>
1841
+
1842
+ ```typescript
1843
+ public readonly value: string;
1844
+ ```
1845
+
1846
+ - *Type:* string
1847
+ - *Default:* no value
1848
+
1849
+ The taint value to match (when operator is Equal).
1850
+
1851
+ ---
1852
+
1375
1853
 
1376
1854
 
1377
1855
  ## Enums <a name="Enums" id="Enums"></a>
package/README.md CHANGED
@@ -13,7 +13,7 @@ cdk8s-plone provides CDK8S constructs for deploying [Plone CMS](https://plone.or
13
13
  **Key Features:**
14
14
  - 🚀 Supports Volto (modern React frontend) and Classic UI
15
15
  - 📦 High availability with configurable replicas
16
- - ⚡ Optional Varnish HTTP caching layer
16
+ - ⚡ Optional Varnish HTTP caching via kube-httpcache (`PloneHttpcache`) or cloud-vinyl VinylCache operator (`PloneVinylCache`)
17
17
  - 🔧 Fine-grained resource and probe configuration
18
18
  - 🌍 Multi-language support (TypeScript/JavaScript and Python)
19
19
  - ✅ Type-safe infrastructure as code
@@ -57,6 +57,24 @@ cdk8s-plone supports two deployment variants:
57
57
  - Better scalability
58
58
  - Automatic cache invalidation on content changes
59
59
 
60
+ ### Caching Options
61
+
62
+ cdk8s-plone supports two HTTP caching approaches:
63
+
64
+ **PloneHttpcache (mittwald/kube-httpcache)**
65
+ - Self-contained: deploys Varnish via Helm chart, no operator needed
66
+ - Full VCL template with Go template variable injection
67
+ - Prometheus exporter sidecar for metrics
68
+
69
+ **PloneVinylCache (cloud-vinyl operator)**
70
+ - Operator-managed: creates a VinylCache custom resource
71
+ - Structured VCL generation with snippet injection hooks
72
+ - Built-in cache invalidation proxy (PURGE, BAN, xkey)
73
+ - Agent-based VCL delivery and Prometheus metrics
74
+ - Requires the [cloud-vinyl operator](https://github.com/bluedynamics/cloud-vinyl) in the cluster
75
+
76
+ Choose PloneHttpcache for standalone deployments without cloud-vinyl. Choose PloneVinylCache when the operator is available for centralized cache management.
77
+
60
78
  ### Multi-Language Support
61
79
 
62
80
  The library is published in multiple languages:
@@ -44,12 +44,20 @@ backend: {
44
44
 
45
45
  ### HTTP Caching with Varnish
46
46
 
47
- **kube-httpcache Integration**
48
- - Production-grade Varnish deployment
47
+ cdk8s-plone supports two caching backends: the self-contained mittwald kube-httpcache Helm chart (`PloneHttpcache`) and the operator-managed cloud-vinyl VinylCache (`PloneVinylCache`).
48
+
49
+ **kube-httpcache Integration (PloneHttpcache)**
50
+ - Production-grade Varnish deployment, no operator required
49
51
  - Cluster-wide cache invalidation
50
52
  - Automatic invalidation on content changes
51
53
  - HTTP/2 support
52
54
 
55
+ **cloud-vinyl VinylCache Integration (PloneVinylCache)**
56
+ - Operator-managed Varnish via VinylCache custom resource
57
+ - Structured VCL generation with snippet injection hooks
58
+ - Built-in cache invalidation proxy (PURGE, BAN, xkey)
59
+ - Requires the cloud-vinyl operator in the cluster
60
+
53
61
  **Benefits:**
54
62
  - Dramatically reduced backend load
55
63
  - Faster response times
@@ -0,0 +1,115 @@
1
+ ```{image} ../_static/kup6s-icon-howto.svg
2
+ :align: center
3
+ :class: section-icon-large
4
+ ```
5
+
6
+ # Deploy with Cloud-Vinyl Cache
7
+
8
+ <div class="page-metadata">
9
+ <div class="metadata-content">
10
+ <p><strong>Type</strong>: How-To (Task-oriented)</p>
11
+ <p><strong>Difficulty</strong>: Intermediate</p>
12
+ <p><strong>Time</strong>: 15 minutes</p>
13
+ </div>
14
+ </div>
15
+
16
+ ## Prerequisites
17
+
18
+ - The **cloud-vinyl operator** must be installed in your cluster
19
+ - A working Plone deployment using `cdk8s-plone`
20
+ - `@bluedynamics/cdk8s-plone` version with VinylCache support
21
+
22
+ ## Steps
23
+
24
+ ### 1. Add PloneVinylCache to Your Deployment
25
+
26
+ ```typescript
27
+ import { Plone, PloneVinylCache } from '@bluedynamics/cdk8s-plone';
28
+
29
+ const plone = new Plone(chart, 'plone', {
30
+ backend: { image: 'plone/plone-backend:6.1.3' },
31
+ frontend: { image: 'plone/plone-frontend:16.0.0' },
32
+ });
33
+
34
+ const cache = new PloneVinylCache(chart, 'cache', {
35
+ plone: plone,
36
+ replicas: 2,
37
+ });
38
+ ```
39
+
40
+ ### 2. Use the Cache Service in Your IngressRoute
41
+
42
+ The cache exposes a service that should be used as the upstream in your IngressRoute:
43
+
44
+ ```typescript
45
+ // Use cache.vinylCacheServiceName as the service target
46
+ // instead of plone.frontendServiceName
47
+ ```
48
+
49
+ ### 3. Build and Deploy
50
+
51
+ ```bash
52
+ npm run build
53
+ # Review generated manifests
54
+ # Deploy via ArgoCD or kubectl apply
55
+ ```
56
+
57
+ ### 4. Verify
58
+
59
+ ```bash
60
+ # Check VinylCache status
61
+ kubectl get vinylcache -n <namespace>
62
+
63
+ # Check Varnish pods
64
+ kubectl get pods -n <namespace> -l app.kubernetes.io/managed-by=cloud-vinyl
65
+ ```
66
+
67
+ ## Customization
68
+
69
+ ### Custom VCL
70
+
71
+ Override the default Plone VCL snippets for custom caching logic:
72
+
73
+ ```typescript
74
+ new PloneVinylCache(chart, 'cache', {
75
+ plone: plone,
76
+ vclRecvSnippet: fs.readFileSync('./config/custom-recv.vcl', 'utf8'),
77
+ vclBackendResponseSnippet: fs.readFileSync('./config/custom-beresp.vcl', 'utf8'),
78
+ });
79
+ ```
80
+
81
+ ### Cache Invalidation
82
+
83
+ Invalidation is enabled by default (PURGE, BAN, xkey). Configure `plone.cachepurging` to point to the VinylCache invalidation proxy endpoint.
84
+
85
+ To disable invalidation:
86
+
87
+ ```typescript
88
+ new PloneVinylCache(chart, 'cache', {
89
+ plone: plone,
90
+ invalidation: false,
91
+ });
92
+ ```
93
+
94
+ ## Migrating from PloneHttpcache
95
+
96
+ Replace `PloneHttpcache` with `PloneVinylCache`:
97
+
98
+ ```typescript
99
+ // Before (mittwald)
100
+ // import { PloneHttpcache } from '@bluedynamics/cdk8s-plone';
101
+ // const cache = new PloneHttpcache(chart, 'cache', {
102
+ // plone, varnishVcl: '...', existingSecret: 'secret',
103
+ // });
104
+ // const serviceName = cache.httpcacheServiceName;
105
+
106
+ // After (cloud-vinyl)
107
+ import { PloneVinylCache } from '@bluedynamics/cdk8s-plone';
108
+ const cache = new PloneVinylCache(chart, 'cache', { plone });
109
+ const serviceName = cache.vinylCacheServiceName;
110
+ ```
111
+
112
+ Key differences:
113
+ - No VCL template needed (operator generates VCL from structured config)
114
+ - No `existingSecret` needed (operator manages agent authentication)
115
+ - Service name property is `vinylCacheServiceName` (not `httpcacheServiceName`)
@@ -32,6 +32,7 @@ titlesonly: true
32
32
  ---
33
33
  deploy-production-volto
34
34
  deploy-classic-ui
35
+ deploy-with-vinyl-cache
35
36
  ```
36
37
 
37
38
  ## Configuration