Files
kubernetes.core/molecule/default/tasks/template.yml
Mike Graves c11a255026 Fix apply on Ansible 2.9 (#135)
* Fix apply on Ansible 2.9

For some reason the apply function can't be correctly imported in
Ansible 2.9. This just renames it to get it to import. I've also added
molecule testing on multiple Ansible versions.

* Add changelog fragment
2021-06-16 11:28:46 -04:00

259 lines
7.1 KiB
YAML

---
- 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