All Policies
Copy Namespace Labels
It is common for Namespaced resources to need access to labels which have been assigned to the Namespace in which they reside. This policy demonstrates two different ways of assigning Namespace labels to a Deployment. The first method copies only the `owner` label while the second copies all labels except for `kubernetes.io/metadata.name`.
Policy Definition
/other/copy-namespace-labels/copy-namespace-labels.yaml
1apiVersion: kyverno.io/v1
2kind: ClusterPolicy
3metadata:
4 name: copy-namespace-labels
5 annotations:
6 policies.kyverno.io/title: Copy Namespace Labels
7 policies.kyverno.io/category: Other
8 policies.kyverno.io/severity: medium
9 policies.kyverno.io/subject: Deployment, Label, Namespace
10 kyverno.io/kyverno-version: 1.11.1
11 kyverno.io/kubernetes-version: "1.27"
12 policies.kyverno.io/description: >-
13 It is common for Namespaced resources to need access to labels which have been assigned
14 to the Namespace in which they reside. This policy demonstrates two different ways of
15 assigning Namespace labels to a Deployment. The first method copies only the `owner` label
16 while the second copies all labels except for `kubernetes.io/metadata.name`.
17spec:
18 rules:
19 - name: owner-label-deployment-from-ns
20 match:
21 any:
22 - resources:
23 kinds:
24 - Deployment
25 operations:
26 - CREATE
27 context:
28 - name: owner
29 apiCall:
30 urlPath: "/api/v1/namespaces/{{ request.object.metadata.namespace }}"
31 jmesPath: metadata.labels.owner || 'empty'
32 mutate:
33 patchStrategicMerge:
34 metadata:
35 labels:
36 owner: "{{ owner }}"
37 - name: all-label-deployment-from-ns
38 match:
39 any:
40 - resources:
41 kinds:
42 - Deployment
43 operations:
44 - CREATE
45 context:
46 - name: alllabels
47 apiCall:
48 urlPath: "/api/v1/namespaces/{{ request.object.metadata.namespace }}"
49 jmesPath: metadata.labels | merge(@, {"kubernetes.io/metadata.name":null})
50 mutate:
51 patchStrategicMerge:
52 metadata:
53 labels:
54 "{{ alllabels }}"