diff --git a/molecule/default/molecule.yml b/molecule/default/molecule.yml index 90ba2e53..37f7c3bc 100644 --- a/molecule/default/molecule.yml +++ b/molecule/default/molecule.yml @@ -21,6 +21,8 @@ provisioner: ansible_python_interpreter: '{{ ansible_playbook_python }}' env: ANSIBLE_FORCE_COLOR: 'true' + options: + vvv: True scenario: name: default test_sequence: diff --git a/molecule/default/tasks/apply.yml b/molecule/default/tasks/apply.yml index f5362220..2f8e6e28 100644 --- a/molecule/default/tasks/apply.yml +++ b/molecule/default/tasks/apply.yml @@ -154,6 +154,30 @@ that: - k8s_service_2 is not changed + - name: Add exactly same service in check mode + k8s: + definition: + apiVersion: v1 + kind: Service + metadata: + name: apply-svc + namespace: "{{ apply_namespace }}" + spec: + selector: + app: whatever + ports: + - name: http + port: 8080 + targetPort: 8080 + apply: yes + register: k8s_service_3 + check_mode: yes + + - name: Check nothing changed + assert: + that: + - k8s_service_3 is not changed + - name: Change service ports k8s: definition: @@ -170,14 +194,14 @@ port: 8081 targetPort: 8081 apply: yes - register: k8s_service_3 + register: k8s_service_4 - name: Check ports are correct assert: that: - - k8s_service_3 is changed - - k8s_service_3.result.spec.ports | length == 1 - - k8s_service_3.result.spec.ports[0].port == 8081 + - k8s_service_4 is changed + - k8s_service_4.result.spec.ports | length == 1 + - k8s_service_4.result.spec.ports[0].port == 8081 always: - name: Remove namespace diff --git a/plugins/module_utils/raw.py b/plugins/module_utils/raw.py index de214e90..929193b1 100644 --- a/plugins/module_utils/raw.py +++ b/plugins/module_utils/raw.py @@ -299,7 +299,11 @@ class KubernetesRawModule(KubernetesAnsibleModule): else: if self.apply: if self.check_mode: - ignored, k8s_obj = apply_object(resource, definition) + ignored, patch = apply_object(resource, definition) + if existing: + k8s_obj = dict_merge(existing.to_dict(), patch) + else: + k8s_obj = patch else: try: k8s_obj = resource.apply(definition, namespace=namespace).to_dict()