Skip to content

Instantly share code, notes, and snippets.

Show Gist options
  • Save larkintuckerllc/cc72b7ef46b468af73d4cc1fb17da84a to your computer and use it in GitHub Desktop.
Save larkintuckerllc/cc72b7ef46b468af73d4cc1fb17da84a to your computer and use it in GitHub Desktop.
apiVersion: kyverno.io/v1
kind: ClusterPolicy
metadata:
name: nodepool-selector-affinites-exist
annotations:
pod-policies.kyverno.io/autogen-controllers: none
spec:
rules:
- name: nodepool-selector-affinites-exist
match:
any:
- resources:
annotations:
example.com/nodepool: "*"
kinds:
- Pod
namespaceSelector:
matchLabels:
example.com/match: "true"
operations:
- CREATE
exclude:
any:
- resources:
annotations:
example.com/nodepool-selector-affinites: "true"
preconditions:
and:
- key: "{{ request.object.spec.affinity.nodeAffinity.requiredDuringSchedulingIgnoredDuringExecution.nodeSelectorTerms || '' }}"
operator: NotEquals
value: ""
- key: example.com/nodepool
operator: AnyNotIn
value: "{{ request.object.spec.affinity.nodeAffinity.requiredDuringSchedulingIgnoredDuringExecution.nodeSelectorTerms[].matchExpressions[].key || [] }}"
mutate:
foreach:
- list: "request.object.spec.affinity.nodeAffinity.requiredDuringSchedulingIgnoredDuringExecution.nodeSelectorTerms"
patchesJson6902: |-
- op: add
path: "/metadata/annotations/example.com~1nodepool-selector-affinites"
value: "true"
- path: "/spec/affinity/nodeAffinity/requiredDuringSchedulingIgnoredDuringExecution/nodeSelectorTerms/{{elementIndex}}/matchExpressions/-"
op: add
value:
key: example.com/nodepool
operator: In
values:
- '{{ request.object.metadata.annotations."example.com/nodepool" }}'
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment