Kubernetes Ansible Operators - Patch an Existing Kubernetes Resource Kubernetes Ansible Operators - Patch an Existing Kubernetes Resource kubernetes kubernetes

Kubernetes Ansible Operators - Patch an Existing Kubernetes Resource


Yes, you can provide just a patch and if the resource already exists it should send a strategic-merge-patch (or just a merge-patch if it's a custom resource). Here's an example playbook that creates and modifies a configmap:

---                                                                                                                                                                                                                                           - hosts: localhost                                                                                                                                                                                                                              connection: local                                                                                                                                                                                                                             gather_facts: no                                                                                                                                                                                                                              vars:                                                                                                                                                                                                                                           cm: "{{ lookup('k8s',                                                                                                                                                                                                                           api_version='v1',                                                                                                                                                                                                                             kind='ConfigMap',                                                                                                                                                                                                                             namespace='default',                                                                                                                                                                                                                          resource_name='test') }}"   tasks:                                                                                                                                                                                                                                          - name: Create the ConfigMap                                                                                                                                                                                                                    k8s:                                                                                                                                                                                                                                            definition:                                                                                                                                                                                                                                     apiVersion: v1                                                                                                                                                                                                                                kind: ConfigMap                                                                                                                                                                                                                               metadata:            name: test            namespace: default          data:            hello: world    - name: We will see the ConfigMap defined above      debug:        var: cm    - name: Add a field to the ConfigMap (this will be a PATCH request)      k8s:        definition:          apiVersion: v1          kind: ConfigMap          metadata:            name: test            namespace: default          data:            added: field    - name: The same ConfigMap as before, but with an extra field in data      debug:        var: cm    - name: Change a field in the ConfigMap (this will be a PATCH request)      k8s:        definition:          apiVersion: v1          kind: ConfigMap          metadata:            name: test            namespace: default          data:            hello: everyone    - name: The added field is unchanged, but the hello field has a new value      debug:        var: cm    - name: Delete the added field in the ConfigMap (this will be a PATCH request)      k8s:        definition:          apiVersion: v1          kind: ConfigMap          metadata:            name: test            namespace: default          data:            added: null    - name: The hello field is unchanged, but the added field is now gone      debug:        var: cm