All Policies
Generate Backup Policy by Preset
Generate a K10 backup policy for a namespace that includes a valid "dataprotection" label, if the policy does not already exist.
Policy Definition
/kasten/k10-generate-policy-by-preset-label/k10-generate-policy-by-preset-label.yaml
1# NOTE: This example assumes that K10 policy presets named "gold", "silver", and "bronze" have been pre-created and K10 was deployed into the `kasten-io` namespace. And the kyverno:generate ClusterRole has been updated with the following additional permissions:
2# - apiGroups:
3# - config.kio.kasten.io
4# resources:
5# - policies
6# verbs:
7# - create
8# - update
9# - list
10# - get
11apiVersion: kyverno.io/v1
12kind: ClusterPolicy
13metadata:
14 name: k10-generate-policy-by-preset-label
15 annotations:
16 policies.kyverno.io/title: Generate Backup Policy by Preset
17 policies.kyverno.io/category: Kasten K10 by Veeam
18 policies.kyverno.io/subject: Policy
19 kyverno.io/kyverno-version: 1.9.0
20 policies.kyverno.io/minversion: 1.9.0
21 kyverno.io/kubernetes-version: "1.23"
22 policies.kyverno.io/description: >-
23 Generate a K10 backup policy for a namespace that includes a valid "dataprotection" label, if the policy does not already exist.
24spec:
25 background: false
26 rules:
27 - name: k10-generate-policy-by-preset-label
28 match:
29 any:
30 - resources:
31 kinds:
32 - Namespace
33 selector:
34 matchExpressions:
35 - key: dataprotection
36 operator: In
37 values:
38 - gold
39 - silver
40 - bronze
41 context:
42 - name: existingPolicy
43 apiCall:
44 urlPath: "/apis/config.kio.kasten.io/v1alpha1/namespaces/kasten-io/policies/" # returns list of K10 policies from kasten-io namespace
45 jmesPath: "items[][[@.spec.presetRef][?name=='{{ request.object.metadata.labels.dataprotection }}'] && [@.spec.selector.matchExpressions[].values[?@=='{{ request.namespace }}']]][][][][] | length(@)" # queries if a policy based on the dataprotection label value, covering that app namespace already exists
46 preconditions:
47 any:
48 - key: "{{ existingPolicy }}"
49 operator: Equals
50 value: 0 # Only generate the policy if it does not already exist
51 generate:
52 apiVersion: config.kio.kasten.io/v1alpha1
53 kind: Policy
54 name: "{{ request.namespace }}-{{ request.object.metadata.labels.dataprotection }}-backup"
55 namespace: kasten-io
56 data:
57 spec:
58 comment: "Auto-generated by Kyverno"
59 paused: false
60 actions:
61 - action: backup
62 presetRef:
63 name: "{{ request.object.metadata.labels.dataprotection }}"
64 namespace: kasten-io
65 selector:
66 matchExpressions:
67 - key: k10.kasten.io/appNamespace
68 operator: In
69 values:
70 - "{{ request.namespace }}"