--- - block: - set_fact: template_namespace: template-test - name: Ensure namespace exists k8s: definition: apiVersion: v1 kind: Namespace metadata: name: "{{ template_namespace }}" - name: Check if k8s_service does not inherit parameter kubernetes.core.k8s_service: template: "pod_template_one.j2" state: present ignore_errors: yes register: r - name: Check for expected failures in last tasks assert: that: - r.failed - "'is only supported parameter for' in r.msg" - name: Specify both definition and template kubernetes.core.k8s: state: present template: "pod_template_one.j2" definition: apiVersion: apps/v1 kind: Deployment metadata: name: apply-deploy namespace: "{{ template_namespace }}" spec: replicas: 1 selector: matchLabels: app: "{{ k8s_pod_name_one }}" vars: k8s_pod_name_one: pod k8s_pod_namespace: "{{ template_namespace }}" register: r ignore_errors: yes - name: Check if definition and template are mutually exclusive assert: that: - r.failed - "'parameters are mutually exclusive' in r.msg" - name: Specify both src and template kubernetes.core.k8s: state: present src: "../templates/pod_template_one.j2" template: "pod_template_one.j2" vars: k8s_pod_name_one: pod k8s_pod_namespace: "{{ template_namespace }}" register: r ignore_errors: yes - name: Check if src and template are mutually exclusive assert: that: - r.failed - "'parameters are mutually exclusive' in r.msg" - name: Create pod using template (direct specification) kubernetes.core.k8s: template: "pod_template_one.j2" wait: yes vars: k8s_pod_name_one: pod-1 k8s_pod_namespace: "{{ template_namespace }}" register: r - name: Assert that pod creation succeeded using template assert: that: - r is successful - name: Create pod using template with wrong parameter kubernetes.core.k8s: template: - default wait: yes vars: k8s_pod_name_one: pod-2 k8s_pod_namespace: "{{ template_namespace }}" register: r ignore_errors: True - name: Assert that pod creation failed using template due to wrong parameter assert: that: - r is failed - name: Create pod using template (path parameter) kubernetes.core.k8s: template: path: "pod_template_one.j2" wait: yes vars: k8s_pod_name_one: pod-3 k8s_pod_namespace: "{{ template_namespace }}" register: r - name: Assert that pod creation succeeded using template assert: that: - r is successful - name: Create pod using template (different variable string) kubernetes.core.k8s: template: path: "pod_template_two.j2" variable_start_string: '[[' variable_end_string: ']]' wait: yes vars: k8s_pod_name_two: pod-4 k8s_pod_namespace: "[[ template_namespace ]]" ansible_python_interpreter: "[[ ansible_playbook_python ]]" register: r - name: Assert that pod creation succeeded using template assert: that: - r is successful - name: Create pods using multi-resource template kubernetes.core.k8s: template: path: "pod_template_three.j2" wait: yes vars: k8s_pod_name_three_one: pod-5 k8s_pod_name_three_two: pod-6 k8s_pod_namespace: "{{ template_namespace }}" register: r - name: Assert that pod creation succeeded using template assert: that: - r is successful - name: Create pods using list of template kubernetes.core.k8s: template: - pod_template_one.j2 - path: "pod_template_two.j2" variable_start_string: '[[' variable_end_string: ']]' - path: "pod_template_three.j2" wait: yes vars: k8s_pod_name_one: pod-7 k8s_pod_name_two: pod-8 k8s_pod_name_three_one: pod-9 k8s_pod_name_three_two: pod-10 k8s_pod_namespace: "template-test" register: r - name: Assert that pod creation succeeded using template assert: that: - r is successful # continue_on_error - name: define variable for test set_fact: k8s_pod_name_one: pod-11 k8s_pod_bad_name: pod-12 k8s_pod_namespace: "{{ template_namespace }}" k8s_pod_bad_namespace: "dummy-namespace-012345" - name: delete pod if it exists kubernetes.core.k8s: template: pod_template_one.j2 wait: true state: absent - name: create pod on bad namespace ( continue_on_error set to default(false) ) kubernetes.core.k8s: template: - pod_with_bad_namespace.j2 - pod_template_one.j2 register: resource ignore_errors: true - name: validate that creation failed assert: that: - resource is failed - '"Failed to create object" in resource.msg' - name: assert pod has not been created kubernetes.core.k8s_info: kind: "{{ item.kind }}" namespace: "{{ item.namespace }}" name: "{{ item.name }}" with_items: - kind: pod namespace: "{{ k8s_pod_bad_namespace }}" name: "{{ k8s_pod_bad_name }}" - kind: pod namespace: "{{ k8s_pod_name_one }}" name: "{{ k8s_pod_namespace }}" register: resource - name: check that resources creation failed assert: that: - '{{ resource.results[0].resources | length == 0 }}' - '{{ resource.results[1].resources | length == 0 }}' - name: create pod without namespace (continue_on_error = true) kubernetes.core.k8s: template: - pod_with_bad_namespace.j2 - pod_template_one.j2 continue_on_error: true wait: true register: resource ignore_errors: true - name: validate that creation succeeded assert: that: - resource is successful - name: validate resource creation succeeded for some and failed for others assert: that: - resource is successful - resource.result.results | selectattr('changed') | list | length == 1 - resource.result.results | selectattr('error', 'defined') | list | length == 1 - name: Remove Pod (Cleanup) kubernetes.core.k8s: api_version: v1 kind: Pod name: "pod-{{ item }}" namespace: "{{ template_namespace }}" state: absent wait: yes ignore_errors: yes loop: "{{ range(1, 12) | list }}" always: - name: Remove namespace (Cleanup) kubernetes.core.k8s: kind: Namespace name: "{{ template_namespace }}" state: absent