mirror of
https://github.com/ansible-collections/kubernetes.core.git
synced 2026-07-29 10:54:41 +00:00
Issue #10: Move integration tests into molecule playbook.
This commit is contained in:
10
.github/workflows/ansible-test.yml
vendored
10
.github/workflows/ansible-test.yml
vendored
@@ -84,8 +84,12 @@ jobs:
|
|||||||
mkdir -p /home/runner/.ansible
|
mkdir -p /home/runner/.ansible
|
||||||
ln -s /home/runner/work/kubernetes /home/runner/.ansible/collections
|
ln -s /home/runner/work/kubernetes /home/runner/.ansible/collections
|
||||||
|
|
||||||
- name: Copy kubernetes integration test role into roles directory.
|
# TODO: Once community.general is on public Galaxy, drop the -s.
|
||||||
run: cp -R tests/integration/targets/kubernetes roles/
|
- name: Install community.general role to get json_query filter.
|
||||||
|
run: |
|
||||||
|
cp tests/integration/targets/kubernetes/files/manifest-example/MANIFEST.json MANIFEST.json
|
||||||
|
pip install jmespath
|
||||||
|
ansible-galaxy collection install -vvv -s https://sivel.eng.ansible.com/api community.general
|
||||||
|
|
||||||
- name: Run molecule default test scenario
|
- name: Run molecule default test scenario
|
||||||
run: molecule --debug test
|
run: molecule test
|
||||||
|
|||||||
@@ -23,12 +23,10 @@ provisioner:
|
|||||||
localhost:
|
localhost:
|
||||||
ansible_python_interpreter: '{{ ansible_playbook_python }}'
|
ansible_python_interpreter: '{{ ansible_playbook_python }}'
|
||||||
env:
|
env:
|
||||||
ANSIBLE_ROLES_PATH: ${ANSIBLE_ROLES_PATH}:../../tests/integration/targets
|
ANSIBLE_FORCE_COLOR: 'true'
|
||||||
scenario:
|
scenario:
|
||||||
name: default
|
name: default
|
||||||
test_sequence:
|
test_sequence:
|
||||||
# - lint
|
|
||||||
- syntax
|
- syntax
|
||||||
- converge
|
- converge
|
||||||
- idempotence
|
|
||||||
- verify
|
- verify
|
||||||
|
|||||||
@@ -7,17 +7,21 @@
|
|||||||
collections:
|
collections:
|
||||||
- community.kubernetes
|
- community.kubernetes
|
||||||
|
|
||||||
|
vars_files:
|
||||||
|
- vars/main.yml
|
||||||
|
|
||||||
tasks:
|
tasks:
|
||||||
- name: Testing.
|
- name: Verify cluster is working.
|
||||||
k8s_info:
|
k8s_info:
|
||||||
namespace: kube-system
|
namespace: kube-system
|
||||||
kind: Pod
|
kind: Pod
|
||||||
register: pod_list
|
register: pod_list
|
||||||
|
|
||||||
- name: Testing listing.
|
- name: Verify cluster has more than 5 pods running.
|
||||||
debug:
|
assert:
|
||||||
msg: "{{ pod_list.resources | count }}"
|
that: (pod_list.resources | count) > 5
|
||||||
|
|
||||||
- name: Include Kubernetes integration testing role.
|
- include_tasks: tasks/delete.yml
|
||||||
include_role:
|
- include_tasks: tasks/apply.yml
|
||||||
name: kubernetes
|
- include_tasks: tasks/waiter.yml
|
||||||
|
- include_tasks: tasks/full.yml
|
||||||
|
|||||||
@@ -1,14 +1,9 @@
|
|||||||
|
---
|
||||||
- block:
|
- block:
|
||||||
# TODO: Not available in ansible-base
|
|
||||||
# - python_requirements_info:
|
|
||||||
# dependencies:
|
|
||||||
# - openshift
|
|
||||||
# - kubernetes
|
|
||||||
|
|
||||||
- set_fact:
|
- set_fact:
|
||||||
apply_namespace: apply
|
apply_namespace: apply
|
||||||
|
|
||||||
- name: ensure namespace exists
|
- name: Ensure namespace exists
|
||||||
k8s:
|
k8s:
|
||||||
definition:
|
definition:
|
||||||
apiVersion: v1
|
apiVersion: v1
|
||||||
@@ -16,7 +11,7 @@
|
|||||||
metadata:
|
metadata:
|
||||||
name: "{{ apply_namespace }}"
|
name: "{{ apply_namespace }}"
|
||||||
|
|
||||||
- name: add a configmap
|
- name: Add a configmap
|
||||||
k8s:
|
k8s:
|
||||||
name: "apply-configmap"
|
name: "apply-configmap"
|
||||||
namespace: "{{ apply_namespace }}"
|
namespace: "{{ apply_namespace }}"
|
||||||
@@ -30,13 +25,13 @@
|
|||||||
apply: yes
|
apply: yes
|
||||||
register: k8s_configmap
|
register: k8s_configmap
|
||||||
|
|
||||||
- name: check configmap was created
|
- name: Check configmap was created
|
||||||
assert:
|
assert:
|
||||||
that:
|
that:
|
||||||
- k8s_configmap is changed
|
- k8s_configmap is changed
|
||||||
- k8s_configmap.result.metadata.annotations|default(False)
|
- k8s_configmap.result.metadata.annotations|default(False)
|
||||||
|
|
||||||
- name: add same configmap again
|
- name: Add same configmap again
|
||||||
k8s:
|
k8s:
|
||||||
definition:
|
definition:
|
||||||
kind: ConfigMap
|
kind: ConfigMap
|
||||||
@@ -51,12 +46,12 @@
|
|||||||
apply: yes
|
apply: yes
|
||||||
register: k8s_configmap_2
|
register: k8s_configmap_2
|
||||||
|
|
||||||
- name: check nothing changed
|
- name: Check nothing changed
|
||||||
assert:
|
assert:
|
||||||
that:
|
that:
|
||||||
- k8s_configmap_2 is not changed
|
- k8s_configmap_2 is not changed
|
||||||
|
|
||||||
- name: add same configmap again with check mode on
|
- name: Add same configmap again with check mode on
|
||||||
k8s:
|
k8s:
|
||||||
definition:
|
definition:
|
||||||
kind: ConfigMap
|
kind: ConfigMap
|
||||||
@@ -72,12 +67,12 @@
|
|||||||
check_mode: yes
|
check_mode: yes
|
||||||
register: k8s_configmap_check
|
register: k8s_configmap_check
|
||||||
|
|
||||||
- name: check nothing changed
|
- name: Check nothing changed
|
||||||
assert:
|
assert:
|
||||||
that:
|
that:
|
||||||
- k8s_configmap_check is not changed
|
- k8s_configmap_check is not changed
|
||||||
|
|
||||||
- name: add same configmap again but using name and namespace args
|
- name: Add same configmap again but using name and namespace args
|
||||||
k8s:
|
k8s:
|
||||||
name: "apply-configmap"
|
name: "apply-configmap"
|
||||||
namespace: "{{ apply_namespace }}"
|
namespace: "{{ apply_namespace }}"
|
||||||
@@ -91,12 +86,12 @@
|
|||||||
apply: yes
|
apply: yes
|
||||||
register: k8s_configmap_2a
|
register: k8s_configmap_2a
|
||||||
|
|
||||||
- name: check nothing changed
|
- name: Check nothing changed
|
||||||
assert:
|
assert:
|
||||||
that:
|
that:
|
||||||
- k8s_configmap_2a is not changed
|
- k8s_configmap_2a is not changed
|
||||||
|
|
||||||
- name: update configmap
|
- name: Update configmap
|
||||||
k8s:
|
k8s:
|
||||||
definition:
|
definition:
|
||||||
kind: ConfigMap
|
kind: ConfigMap
|
||||||
@@ -111,14 +106,14 @@
|
|||||||
apply: yes
|
apply: yes
|
||||||
register: k8s_configmap_3
|
register: k8s_configmap_3
|
||||||
|
|
||||||
- name: ensure that configmap has been correctly updated
|
- name: Ensure that configmap has been correctly updated
|
||||||
assert:
|
assert:
|
||||||
that:
|
that:
|
||||||
- k8s_configmap_3 is changed
|
- k8s_configmap_3 is changed
|
||||||
- "'four' in k8s_configmap_3.result.data"
|
- "'four' in k8s_configmap_3.result.data"
|
||||||
- "'two' not in k8s_configmap_3.result.data"
|
- "'two' not in k8s_configmap_3.result.data"
|
||||||
|
|
||||||
- name: add a service
|
- name: Add a service
|
||||||
k8s:
|
k8s:
|
||||||
definition:
|
definition:
|
||||||
apiVersion: v1
|
apiVersion: v1
|
||||||
@@ -136,7 +131,7 @@
|
|||||||
apply: yes
|
apply: yes
|
||||||
register: k8s_service
|
register: k8s_service
|
||||||
|
|
||||||
- name: add exactly same service
|
- name: Add exactly same service
|
||||||
k8s:
|
k8s:
|
||||||
definition:
|
definition:
|
||||||
apiVersion: v1
|
apiVersion: v1
|
||||||
@@ -154,12 +149,12 @@
|
|||||||
apply: yes
|
apply: yes
|
||||||
register: k8s_service_2
|
register: k8s_service_2
|
||||||
|
|
||||||
- name: check nothing changed
|
- name: Check nothing changed
|
||||||
assert:
|
assert:
|
||||||
that:
|
that:
|
||||||
- k8s_service_2 is not changed
|
- k8s_service_2 is not changed
|
||||||
|
|
||||||
- name: change service ports
|
- name: Change service ports
|
||||||
k8s:
|
k8s:
|
||||||
definition:
|
definition:
|
||||||
apiVersion: v1
|
apiVersion: v1
|
||||||
@@ -177,7 +172,7 @@
|
|||||||
apply: yes
|
apply: yes
|
||||||
register: k8s_service_3
|
register: k8s_service_3
|
||||||
|
|
||||||
- name: check ports are correct
|
- name: Check ports are correct
|
||||||
assert:
|
assert:
|
||||||
that:
|
that:
|
||||||
- k8s_service_3 is changed
|
- k8s_service_3 is changed
|
||||||
@@ -185,7 +180,7 @@
|
|||||||
- k8s_service_3.result.spec.ports[0].port == 8081
|
- k8s_service_3.result.spec.ports[0].port == 8081
|
||||||
|
|
||||||
always:
|
always:
|
||||||
- name: remove namespace
|
- name: Remove namespace
|
||||||
k8s:
|
k8s:
|
||||||
kind: Namespace
|
kind: Namespace
|
||||||
name: "{{ apply_namespace }}"
|
name: "{{ apply_namespace }}"
|
||||||
@@ -1,33 +1,28 @@
|
|||||||
# TODO: This is the only way I could get the kubeconfig, I don't know why. Running the lookup outside of debug seems to return an empty string
|
---
|
||||||
#- debug: msg={{ lookup('env', 'K8S_AUTH_KUBECONFIG') }}
|
|
||||||
# register: kubeconfig
|
|
||||||
|
|
||||||
# Kubernetes resources
|
|
||||||
|
|
||||||
- block:
|
- block:
|
||||||
- name: Create a namespace
|
- name: Create a namespace
|
||||||
k8s:
|
k8s:
|
||||||
name: crd
|
name: crd
|
||||||
kind: Namespace
|
kind: Namespace
|
||||||
|
|
||||||
- name: install custom resource definitions
|
- name: Install custom resource definitions
|
||||||
k8s:
|
k8s:
|
||||||
definition: "{{ lookup('file', role_path + '/files/setup-crd.yml') }}"
|
definition: "{{ lookup('file', kubernetes_role_path + '/files/setup-crd.yml') }}"
|
||||||
|
|
||||||
- name: pause 5 seconds to avoid race condition
|
- name: Pause 5 seconds to avoid race condition
|
||||||
pause:
|
pause:
|
||||||
seconds: 5
|
seconds: 5
|
||||||
|
|
||||||
- name: create custom resource definition
|
- name: create custom resource definition
|
||||||
k8s:
|
k8s:
|
||||||
definition: "{{ lookup('file', role_path + '/files/crd-resource.yml') }}"
|
definition: "{{ lookup('file', kubernetes_role_path + '/files/crd-resource.yml') }}"
|
||||||
namespace: crd
|
namespace: crd
|
||||||
apply: "{{ create_crd_with_apply | default(omit) }}"
|
apply: "{{ create_crd_with_apply | default(omit) }}"
|
||||||
register: create_crd
|
register: create_crd
|
||||||
|
|
||||||
- name: patch custom resource definition
|
- name: patch custom resource definition
|
||||||
k8s:
|
k8s:
|
||||||
definition: "{{ lookup('file', role_path + '/files/crd-resource.yml') }}"
|
definition: "{{ lookup('file', kubernetes_role_path + '/files/crd-resource.yml') }}"
|
||||||
namespace: crd
|
namespace: crd
|
||||||
register: recreate_crd
|
register: recreate_crd
|
||||||
ignore_errors: yes
|
ignore_errors: yes
|
||||||
@@ -40,14 +35,14 @@
|
|||||||
- block:
|
- block:
|
||||||
- name: recreate custom resource definition with merge_type
|
- name: recreate custom resource definition with merge_type
|
||||||
k8s:
|
k8s:
|
||||||
definition: "{{ lookup('file', role_path + '/files/crd-resource.yml') }}"
|
definition: "{{ lookup('file', kubernetes_role_path + '/files/crd-resource.yml') }}"
|
||||||
merge_type: merge
|
merge_type: merge
|
||||||
namespace: crd
|
namespace: crd
|
||||||
register: recreate_crd_with_merge
|
register: recreate_crd_with_merge
|
||||||
|
|
||||||
- name: recreate custom resource definition with merge_type list
|
- name: recreate custom resource definition with merge_type list
|
||||||
k8s:
|
k8s:
|
||||||
definition: "{{ lookup('file', role_path + '/files/crd-resource.yml') }}"
|
definition: "{{ lookup('file', kubernetes_role_path + '/files/crd-resource.yml') }}"
|
||||||
merge_type:
|
merge_type:
|
||||||
- strategic-merge
|
- strategic-merge
|
||||||
- merge
|
- merge
|
||||||
@@ -58,7 +53,7 @@
|
|||||||
|
|
||||||
- name: remove crd
|
- name: remove crd
|
||||||
k8s:
|
k8s:
|
||||||
definition: "{{ lookup('file', role_path + '/files/crd-resource.yml') }}"
|
definition: "{{ lookup('file', kubernetes_role_path + '/files/crd-resource.yml') }}"
|
||||||
namespace: crd
|
namespace: crd
|
||||||
state: absent
|
state: absent
|
||||||
|
|
||||||
@@ -1,13 +1,9 @@
|
|||||||
- name: ensure that there are actually some nodes
|
---
|
||||||
k8s_info:
|
|
||||||
kind: Node
|
|
||||||
register: nodes
|
|
||||||
|
|
||||||
- block:
|
- block:
|
||||||
- set_fact:
|
- set_fact:
|
||||||
delete_namespace: delete
|
delete_namespace: delete
|
||||||
|
|
||||||
- name: ensure namespace exists
|
- name: Ensure namespace exists
|
||||||
k8s:
|
k8s:
|
||||||
definition:
|
definition:
|
||||||
apiVersion: v1
|
apiVersion: v1
|
||||||
@@ -15,10 +11,10 @@
|
|||||||
metadata:
|
metadata:
|
||||||
name: "{{ delete_namespace }}"
|
name: "{{ delete_namespace }}"
|
||||||
|
|
||||||
- name: add a daemonset
|
- name: Add a daemonset
|
||||||
k8s:
|
k8s:
|
||||||
definition:
|
definition:
|
||||||
apiVersion: extensions/v1beta1
|
apiVersion: apps/v1
|
||||||
kind: DaemonSet
|
kind: DaemonSet
|
||||||
metadata:
|
metadata:
|
||||||
name: delete-daemonset
|
name: delete-daemonset
|
||||||
@@ -35,12 +31,12 @@
|
|||||||
k8s_pod_image: gcr.io/kuar-demo/kuard-amd64:1
|
k8s_pod_image: gcr.io/kuar-demo/kuard-amd64:1
|
||||||
register: ds
|
register: ds
|
||||||
|
|
||||||
- name: check that daemonset wait worked
|
- name: Check that daemonset wait worked
|
||||||
assert:
|
assert:
|
||||||
that:
|
that:
|
||||||
- ds.result.status.currentNumberScheduled == ds.result.status.desiredNumberScheduled
|
- ds.result.status.currentNumberScheduled == ds.result.status.desiredNumberScheduled
|
||||||
|
|
||||||
- name: check if pods exist
|
- name: Check if pods exist
|
||||||
k8s_info:
|
k8s_info:
|
||||||
namespace: "{{ delete_namespace }}"
|
namespace: "{{ delete_namespace }}"
|
||||||
kind: Pod
|
kind: Pod
|
||||||
@@ -50,12 +46,12 @@
|
|||||||
k8s_pod_name: delete-ds
|
k8s_pod_name: delete-ds
|
||||||
register: pods_create
|
register: pods_create
|
||||||
|
|
||||||
- name: assert that there are pods
|
- name: Assert that there are pods
|
||||||
assert:
|
assert:
|
||||||
that:
|
that:
|
||||||
- pods_create.resources
|
- pods_create.resources
|
||||||
|
|
||||||
- name: remove the daemonset
|
- name: Remove the daemonset
|
||||||
k8s:
|
k8s:
|
||||||
kind: DaemonSet
|
kind: DaemonSet
|
||||||
name: delete-daemonset
|
name: delete-daemonset
|
||||||
@@ -63,7 +59,7 @@
|
|||||||
state: absent
|
state: absent
|
||||||
wait: yes
|
wait: yes
|
||||||
|
|
||||||
- name: show status of pods
|
- name: Show status of pods
|
||||||
k8s_info:
|
k8s_info:
|
||||||
namespace: "{{ delete_namespace }}"
|
namespace: "{{ delete_namespace }}"
|
||||||
kind: Pod
|
kind: Pod
|
||||||
@@ -72,11 +68,11 @@
|
|||||||
vars:
|
vars:
|
||||||
k8s_pod_name: delete-ds
|
k8s_pod_name: delete-ds
|
||||||
|
|
||||||
- name: wait for background deletion
|
- name: Wait for background deletion
|
||||||
pause:
|
pause:
|
||||||
seconds: 30
|
seconds: 30
|
||||||
|
|
||||||
- name: check if pods still exist
|
- name: Check if pods still exist
|
||||||
k8s_info:
|
k8s_info:
|
||||||
namespace: "{{ delete_namespace }}"
|
namespace: "{{ delete_namespace }}"
|
||||||
kind: Pod
|
kind: Pod
|
||||||
@@ -86,16 +82,14 @@
|
|||||||
k8s_pod_name: delete-ds
|
k8s_pod_name: delete-ds
|
||||||
register: pods_delete
|
register: pods_delete
|
||||||
|
|
||||||
- name: assert that deleting the daemonset deleted the pods
|
- name: Assert that deleting the daemonset deleted the pods
|
||||||
assert:
|
assert:
|
||||||
that:
|
that:
|
||||||
- not pods_delete.resources
|
- not pods_delete.resources
|
||||||
|
|
||||||
always:
|
always:
|
||||||
- name: remove namespace
|
- name: Remove namespace
|
||||||
k8s:
|
k8s:
|
||||||
kind: Namespace
|
kind: Namespace
|
||||||
name: "{{ delete_namespace }}"
|
name: "{{ delete_namespace }}"
|
||||||
state: absent
|
state: absent
|
||||||
|
|
||||||
when: (nodes.resources | length) > 0
|
|
||||||
@@ -1,13 +1,4 @@
|
|||||||
# TODO: This is the only way I could get the kubeconfig, I don't know why. Running the lookup outside of debug seems to return an empty string
|
---
|
||||||
#- debug: msg={{ lookup('env', 'K8S_AUTH_KUBECONFIG') }}
|
|
||||||
# register: kubeconfig
|
|
||||||
|
|
||||||
# Kubernetes resources
|
|
||||||
|
|
||||||
- include_tasks: delete.yml
|
|
||||||
- include_tasks: apply.yml
|
|
||||||
- include_tasks: waiter.yml
|
|
||||||
|
|
||||||
- block:
|
- block:
|
||||||
- name: Create a namespace
|
- name: Create a namespace
|
||||||
k8s:
|
k8s:
|
||||||
@@ -19,24 +10,25 @@
|
|||||||
debug:
|
debug:
|
||||||
var: output
|
var: output
|
||||||
|
|
||||||
- name: Setting validate_certs to true causes a failure
|
# TODO: See https://github.com/ansible-collections/kubernetes/pull/22#issuecomment-585852073
|
||||||
k8s:
|
# - name: Setting validate_certs to true causes a failure
|
||||||
name: testing
|
# k8s:
|
||||||
kind: Namespace
|
# name: testing
|
||||||
validate_certs: yes
|
# kind: Namespace
|
||||||
ignore_errors: yes
|
# validate_certs: yes
|
||||||
register: output
|
# ignore_errors: yes
|
||||||
|
# register: output
|
||||||
- name: assert that validate_certs caused a failure (and therefore was correctly translated to verify_ssl)
|
#
|
||||||
assert:
|
# - name: assert that validate_certs caused a failure (and therefore was correctly translated to verify_ssl)
|
||||||
that:
|
# assert:
|
||||||
- output is failed
|
# that:
|
||||||
|
# - output is failed
|
||||||
|
|
||||||
- name: k8s_info works with empty resources
|
- name: k8s_info works with empty resources
|
||||||
k8s_info:
|
k8s_info:
|
||||||
kind: Deployment
|
kind: Deployment
|
||||||
namespace: testing
|
namespace: testing
|
||||||
api_version: extensions/v1beta1
|
api_version: apps/v1
|
||||||
register: k8s_info
|
register: k8s_info
|
||||||
|
|
||||||
- name: assert that k8s_info is in correct format
|
- name: assert that k8s_info is in correct format
|
||||||
@@ -134,7 +126,7 @@
|
|||||||
k8s:
|
k8s:
|
||||||
state: present
|
state: present
|
||||||
inline: &deployment
|
inline: &deployment
|
||||||
apiVersion: extensions/v1beta1
|
apiVersion: apps/v1
|
||||||
kind: Deployment
|
kind: Deployment
|
||||||
metadata:
|
metadata:
|
||||||
name: elastic
|
name: elastic
|
||||||
@@ -143,6 +135,11 @@
|
|||||||
service: elastic
|
service: elastic
|
||||||
namespace: testing
|
namespace: testing
|
||||||
spec:
|
spec:
|
||||||
|
replicas: 1
|
||||||
|
selector:
|
||||||
|
matchLabels:
|
||||||
|
app: galaxy
|
||||||
|
service: elastic
|
||||||
template:
|
template:
|
||||||
metadata:
|
metadata:
|
||||||
labels:
|
labels:
|
||||||
@@ -160,7 +157,6 @@
|
|||||||
- name: elastic-volume
|
- name: elastic-volume
|
||||||
persistentVolumeClaim:
|
persistentVolumeClaim:
|
||||||
claimName: elastic-volume
|
claimName: elastic-volume
|
||||||
replicas: 1
|
|
||||||
strategy:
|
strategy:
|
||||||
type: RollingUpdate
|
type: RollingUpdate
|
||||||
register: output
|
register: output
|
||||||
@@ -179,12 +175,6 @@
|
|||||||
assert:
|
assert:
|
||||||
that: not output.changed
|
that: not output.changed
|
||||||
|
|
||||||
- debug:
|
|
||||||
var: k8s_openshift
|
|
||||||
|
|
||||||
- include: openshift.yml
|
|
||||||
when: k8s_openshift | bool
|
|
||||||
|
|
||||||
### Type tests
|
### Type tests
|
||||||
- name: Create a namespace from a string
|
- name: Create a namespace from a string
|
||||||
k8s:
|
k8s:
|
||||||
@@ -1,13 +1,9 @@
|
|||||||
- name: ensure that there are actually some nodes
|
---
|
||||||
k8s_info:
|
|
||||||
kind: Node
|
|
||||||
register: nodes
|
|
||||||
|
|
||||||
- block:
|
- block:
|
||||||
- set_fact:
|
- set_fact:
|
||||||
wait_namespace: wait
|
wait_namespace: wait
|
||||||
|
|
||||||
- name: ensure namespace exists
|
- name: Ensure namespace exists
|
||||||
k8s:
|
k8s:
|
||||||
definition:
|
definition:
|
||||||
apiVersion: v1
|
apiVersion: v1
|
||||||
@@ -15,7 +11,7 @@
|
|||||||
metadata:
|
metadata:
|
||||||
name: "{{ wait_namespace }}"
|
name: "{{ wait_namespace }}"
|
||||||
|
|
||||||
- name: add a simple pod
|
- name: Add a simple pod
|
||||||
k8s:
|
k8s:
|
||||||
definition:
|
definition:
|
||||||
apiVersion: v1
|
apiVersion: v1
|
||||||
@@ -34,15 +30,15 @@
|
|||||||
register: wait_pod
|
register: wait_pod
|
||||||
ignore_errors: yes
|
ignore_errors: yes
|
||||||
|
|
||||||
- name: assert that pod creation succeeded
|
- name: Assert that pod creation succeeded
|
||||||
assert:
|
assert:
|
||||||
that:
|
that:
|
||||||
- wait_pod is successful
|
- wait_pod is successful
|
||||||
|
|
||||||
- name: add a daemonset
|
- name: Add a daemonset
|
||||||
k8s:
|
k8s:
|
||||||
definition:
|
definition:
|
||||||
apiVersion: extensions/v1beta1
|
apiVersion: apps/v1
|
||||||
kind: DaemonSet
|
kind: DaemonSet
|
||||||
metadata:
|
metadata:
|
||||||
name: wait-daemonset
|
name: wait-daemonset
|
||||||
@@ -60,15 +56,15 @@
|
|||||||
k8s_pod_image: gcr.io/kuar-demo/kuard-amd64:1
|
k8s_pod_image: gcr.io/kuar-demo/kuard-amd64:1
|
||||||
register: ds
|
register: ds
|
||||||
|
|
||||||
- name: check that daemonset wait worked
|
- name: Check that daemonset wait worked
|
||||||
assert:
|
assert:
|
||||||
that:
|
that:
|
||||||
- ds.result.status.currentNumberScheduled == ds.result.status.desiredNumberScheduled
|
- ds.result.status.currentNumberScheduled == ds.result.status.desiredNumberScheduled
|
||||||
|
|
||||||
- name: update a daemonset in check_mode
|
- name: Update a daemonset in check_mode
|
||||||
k8s:
|
k8s:
|
||||||
definition:
|
definition:
|
||||||
apiVersion: extensions/v1beta1
|
apiVersion: apps/v1
|
||||||
kind: DaemonSet
|
kind: DaemonSet
|
||||||
metadata:
|
metadata:
|
||||||
name: wait-daemonset
|
name: wait-daemonset
|
||||||
@@ -88,15 +84,15 @@
|
|||||||
k8s_pod_image: gcr.io/kuar-demo/kuard-amd64:2
|
k8s_pod_image: gcr.io/kuar-demo/kuard-amd64:2
|
||||||
register: update_ds_check_mode
|
register: update_ds_check_mode
|
||||||
|
|
||||||
- name: check that check_mode returned changed
|
- name: Check that check_mode returned changed
|
||||||
assert:
|
assert:
|
||||||
that:
|
that:
|
||||||
- update_ds_check_mode is changed
|
- update_ds_check_mode is changed
|
||||||
|
|
||||||
- name: update a daemonset
|
- name: Update a daemonset
|
||||||
k8s:
|
k8s:
|
||||||
definition:
|
definition:
|
||||||
apiVersion: extensions/v1beta1
|
apiVersion: apps/v1
|
||||||
kind: DaemonSet
|
kind: DaemonSet
|
||||||
metadata:
|
metadata:
|
||||||
name: wait-daemonset
|
name: wait-daemonset
|
||||||
@@ -116,7 +112,7 @@
|
|||||||
k8s_pod_image: gcr.io/kuar-demo/kuard-amd64:3
|
k8s_pod_image: gcr.io/kuar-demo/kuard-amd64:3
|
||||||
register: ds
|
register: ds
|
||||||
|
|
||||||
- name: get updated pods
|
- name: Get updated pods
|
||||||
k8s_info:
|
k8s_info:
|
||||||
api_version: v1
|
api_version: v1
|
||||||
kind: Pod
|
kind: Pod
|
||||||
@@ -125,13 +121,13 @@
|
|||||||
- app=wait-ds
|
- app=wait-ds
|
||||||
register: updated_ds_pods
|
register: updated_ds_pods
|
||||||
|
|
||||||
- name: check that daemonset wait worked
|
- name: Check that daemonset wait worked
|
||||||
assert:
|
assert:
|
||||||
that:
|
that:
|
||||||
- ds.result.status.currentNumberScheduled == ds.result.status.desiredNumberScheduled
|
- ds.result.status.currentNumberScheduled == ds.result.status.desiredNumberScheduled
|
||||||
- updated_ds_pods.resources[0].spec.containers[0].image.endswith(":3")
|
- updated_ds_pods.resources[0].spec.containers[0].image.endswith(":3")
|
||||||
|
|
||||||
- name: add a crashing pod
|
- name: Add a crashing pod
|
||||||
k8s:
|
k8s:
|
||||||
definition:
|
definition:
|
||||||
apiVersion: v1
|
apiVersion: v1
|
||||||
@@ -151,12 +147,12 @@
|
|||||||
register: crash_pod
|
register: crash_pod
|
||||||
ignore_errors: yes
|
ignore_errors: yes
|
||||||
|
|
||||||
- name: check that task failed
|
- name: Check that task failed
|
||||||
assert:
|
assert:
|
||||||
that:
|
that:
|
||||||
- crash_pod is failed
|
- crash_pod is failed
|
||||||
|
|
||||||
- name: use a non-existent image
|
- name: Use a non-existent image
|
||||||
k8s:
|
k8s:
|
||||||
definition:
|
definition:
|
||||||
apiVersion: v1
|
apiVersion: v1
|
||||||
@@ -174,15 +170,15 @@
|
|||||||
register: no_image_pod
|
register: no_image_pod
|
||||||
ignore_errors: yes
|
ignore_errors: yes
|
||||||
|
|
||||||
- name: check that task failed
|
- name: Check that task failed
|
||||||
assert:
|
assert:
|
||||||
that:
|
that:
|
||||||
- no_image_pod is failed
|
- no_image_pod is failed
|
||||||
|
|
||||||
- name: add a deployment
|
- name: Add a deployment
|
||||||
k8s:
|
k8s:
|
||||||
definition:
|
definition:
|
||||||
apiVersion: extensions/v1beta1
|
apiVersion: apps/v1
|
||||||
kind: Deployment
|
kind: Deployment
|
||||||
metadata:
|
metadata:
|
||||||
name: wait-deploy
|
name: wait-deploy
|
||||||
@@ -204,15 +200,15 @@
|
|||||||
|
|
||||||
register: deploy
|
register: deploy
|
||||||
|
|
||||||
- name: check that deployment wait worked
|
- name: Check that deployment wait worked
|
||||||
assert:
|
assert:
|
||||||
that:
|
that:
|
||||||
- deploy.result.status.availableReplicas == deploy.result.status.replicas
|
- deploy.result.status.availableReplicas == deploy.result.status.replicas
|
||||||
|
|
||||||
- name: update a deployment
|
- name: Update a deployment
|
||||||
k8s:
|
k8s:
|
||||||
definition:
|
definition:
|
||||||
apiVersion: extensions/v1beta1
|
apiVersion: apps/v1
|
||||||
kind: Deployment
|
kind: Deployment
|
||||||
metadata:
|
metadata:
|
||||||
name: wait-deploy
|
name: wait-deploy
|
||||||
@@ -233,7 +229,7 @@
|
|||||||
protocol: TCP
|
protocol: TCP
|
||||||
register: update_deploy
|
register: update_deploy
|
||||||
|
|
||||||
- name: get updated pods
|
- name: Get updated pods
|
||||||
k8s_info:
|
k8s_info:
|
||||||
api_version: v1
|
api_version: v1
|
||||||
kind: Pod
|
kind: Pod
|
||||||
@@ -242,16 +238,16 @@
|
|||||||
- app=wait-deploy
|
- app=wait-deploy
|
||||||
register: updated_deploy_pods
|
register: updated_deploy_pods
|
||||||
|
|
||||||
- name: check that deployment wait worked
|
- name: Check that deployment wait worked
|
||||||
assert:
|
assert:
|
||||||
that:
|
that:
|
||||||
- deploy.result.status.availableReplicas == deploy.result.status.replicas
|
- deploy.result.status.availableReplicas == deploy.result.status.replicas
|
||||||
- updated_deploy_pods.resources[0].spec.containers[0].image.endswith(":2")
|
- updated_deploy_pods.resources[0].spec.containers[0].image.endswith(":2")
|
||||||
|
|
||||||
- name: pause a deployment
|
- name: Pause a deployment
|
||||||
k8s:
|
k8s:
|
||||||
definition:
|
definition:
|
||||||
apiVersion: extensions/v1beta1
|
apiVersion: apps/v1
|
||||||
kind: Deployment
|
kind: Deployment
|
||||||
metadata:
|
metadata:
|
||||||
name: wait-deploy
|
name: wait-deploy
|
||||||
@@ -266,15 +262,15 @@
|
|||||||
reason: DeploymentPaused
|
reason: DeploymentPaused
|
||||||
register: pause_deploy
|
register: pause_deploy
|
||||||
|
|
||||||
- name: check that paused deployment wait worked
|
- name: Check that paused deployment wait worked
|
||||||
assert:
|
assert:
|
||||||
that:
|
that:
|
||||||
- condition.reason == "DeploymentPaused"
|
- condition.reason == "DeploymentPaused"
|
||||||
- condition.status == "Unknown"
|
- condition.status == "Unknown"
|
||||||
vars:
|
vars:
|
||||||
condition: '{{ pause_deploy.result.status.conditions | json_query("[?type==`Progressing`]") | first }}'
|
condition: '{{ pause_deploy.result.status.conditions | community.general.json_query("[?type==`Progressing`]") | first }}'
|
||||||
|
|
||||||
- name: add a service based on the deployment
|
- name: Add a service based on the deployment
|
||||||
k8s:
|
k8s:
|
||||||
definition:
|
definition:
|
||||||
apiVersion: v1
|
apiVersion: v1
|
||||||
@@ -294,15 +290,15 @@
|
|||||||
k8s_pod_name: wait-deploy
|
k8s_pod_name: wait-deploy
|
||||||
register: service
|
register: service
|
||||||
|
|
||||||
- name: assert that waiting for service works
|
- name: Assert that waiting for service works
|
||||||
assert:
|
assert:
|
||||||
that:
|
that:
|
||||||
- service is successful
|
- service is successful
|
||||||
|
|
||||||
- name: add a crashing deployment
|
- name: Add a crashing deployment
|
||||||
k8s:
|
k8s:
|
||||||
definition:
|
definition:
|
||||||
apiVersion: extensions/v1beta1
|
apiVersion: apps/v1
|
||||||
kind: Deployment
|
kind: Deployment
|
||||||
metadata:
|
metadata:
|
||||||
name: wait-crash-deploy
|
name: wait-crash-deploy
|
||||||
@@ -322,12 +318,12 @@
|
|||||||
register: wait_crash_deploy
|
register: wait_crash_deploy
|
||||||
ignore_errors: yes
|
ignore_errors: yes
|
||||||
|
|
||||||
- name: check that task failed
|
- name: Check that task failed
|
||||||
assert:
|
assert:
|
||||||
that:
|
that:
|
||||||
- wait_crash_deploy is failed
|
- wait_crash_deploy is failed
|
||||||
|
|
||||||
- name: remove Pod with very short timeout
|
- name: Remove Pod with very short timeout
|
||||||
k8s:
|
k8s:
|
||||||
api_version: v1
|
api_version: v1
|
||||||
kind: Pod
|
kind: Pod
|
||||||
@@ -340,16 +336,14 @@
|
|||||||
ignore_errors: yes
|
ignore_errors: yes
|
||||||
register: short_wait_remove_pod
|
register: short_wait_remove_pod
|
||||||
|
|
||||||
- name: check that task failed
|
- name: Check that task failed
|
||||||
assert:
|
assert:
|
||||||
that:
|
that:
|
||||||
- short_wait_remove_pod is failed
|
- short_wait_remove_pod is failed
|
||||||
|
|
||||||
always:
|
always:
|
||||||
- name: remove namespace
|
- name: Remove namespace
|
||||||
k8s:
|
k8s:
|
||||||
kind: Namespace
|
kind: Namespace
|
||||||
name: "{{ wait_namespace }}"
|
name: "{{ wait_namespace }}"
|
||||||
state: absent
|
state: absent
|
||||||
|
|
||||||
when: (nodes.resources | length) > 0
|
|
||||||
33
molecule/default/vars/main.yml
Normal file
33
molecule/default/vars/main.yml
Normal file
@@ -0,0 +1,33 @@
|
|||||||
|
---
|
||||||
|
recreate_crd_default_merge_expectation: recreate_crd is not failed
|
||||||
|
|
||||||
|
k8s_pod_metadata:
|
||||||
|
labels:
|
||||||
|
app: "{{ k8s_pod_name }}"
|
||||||
|
|
||||||
|
k8s_pod_spec:
|
||||||
|
containers:
|
||||||
|
- image: "{{ k8s_pod_image }}"
|
||||||
|
imagePullPolicy: Always
|
||||||
|
name: "{{ k8s_pod_name }}"
|
||||||
|
command: "{{ k8s_pod_command }}"
|
||||||
|
readinessProbe:
|
||||||
|
initialDelaySeconds: 15
|
||||||
|
exec:
|
||||||
|
command:
|
||||||
|
- /bin/true
|
||||||
|
resources:
|
||||||
|
limits:
|
||||||
|
cpu: "100m"
|
||||||
|
memory: "100Mi"
|
||||||
|
ports: "{{ k8s_pod_ports }}"
|
||||||
|
|
||||||
|
k8s_pod_command: []
|
||||||
|
|
||||||
|
k8s_pod_ports: []
|
||||||
|
|
||||||
|
k8s_pod_template:
|
||||||
|
metadata: "{{ k8s_pod_metadata }}"
|
||||||
|
spec: "{{ k8s_pod_spec }}"
|
||||||
|
|
||||||
|
kubernetes_role_path: ../../tests/integration/targets/kubernetes
|
||||||
@@ -1,32 +1,4 @@
|
|||||||
|
---
|
||||||
recreate_crd_default_merge_expectation: recreate_crd is not failed
|
recreate_crd_default_merge_expectation: recreate_crd is not failed
|
||||||
|
|
||||||
k8s_pod_metadata:
|
k8s_openshift: true
|
||||||
labels:
|
|
||||||
app: "{{ k8s_pod_name }}"
|
|
||||||
|
|
||||||
k8s_pod_spec:
|
|
||||||
containers:
|
|
||||||
- image: "{{ k8s_pod_image }}"
|
|
||||||
imagePullPolicy: Always
|
|
||||||
name: "{{ k8s_pod_name }}"
|
|
||||||
command: "{{ k8s_pod_command }}"
|
|
||||||
readinessProbe:
|
|
||||||
initialDelaySeconds: 15
|
|
||||||
exec:
|
|
||||||
command:
|
|
||||||
- /bin/true
|
|
||||||
resources:
|
|
||||||
limits:
|
|
||||||
cpu: "100m"
|
|
||||||
memory: "100Mi"
|
|
||||||
ports: "{{ k8s_pod_ports }}"
|
|
||||||
|
|
||||||
k8s_pod_command: []
|
|
||||||
|
|
||||||
k8s_pod_ports: []
|
|
||||||
|
|
||||||
k8s_pod_template:
|
|
||||||
metadata: "{{ k8s_pod_metadata }}"
|
|
||||||
spec: "{{ k8s_pod_spec }}"
|
|
||||||
|
|
||||||
k8s_openshift: yes
|
|
||||||
|
|||||||
@@ -0,0 +1,43 @@
|
|||||||
|
{
|
||||||
|
"collection_info": {
|
||||||
|
"namespace": "community",
|
||||||
|
"name": "kubernetes",
|
||||||
|
"version": "1.0.0",
|
||||||
|
"authors": [
|
||||||
|
"chouseknecht (https://github.com/chouseknecht)",
|
||||||
|
"geerlingguy (https://www.jeffgeerling.com/)",
|
||||||
|
"maxamillion (https://github.com/maxamillion)",
|
||||||
|
"jmontleon (https://github.com/jmontleon)",
|
||||||
|
"fabianvf (https://github.com/fabianvf)",
|
||||||
|
"willthames (https://github.com/willthames)",
|
||||||
|
"mmazur (https://github.com/mmazur)",
|
||||||
|
"jamescassell (https://github.com/jamescassell)"
|
||||||
|
],
|
||||||
|
"readme": "README.md",
|
||||||
|
"tags": [
|
||||||
|
"kubernetes",
|
||||||
|
"k8s",
|
||||||
|
"cloud",
|
||||||
|
"infrastructure",
|
||||||
|
"openshift",
|
||||||
|
"okd",
|
||||||
|
"cluster"
|
||||||
|
],
|
||||||
|
"description": "Kubernetes Collection for Ansible.",
|
||||||
|
"license": [],
|
||||||
|
"license_file": "LICENSE",
|
||||||
|
"dependencies": {},
|
||||||
|
"repository": "https://github.com/ansible-collections/kubernetes",
|
||||||
|
"documentation": "",
|
||||||
|
"homepage": "",
|
||||||
|
"issues": "https://github.com/ansible-collections/kubernetes/issues"
|
||||||
|
},
|
||||||
|
"file_manifest_file": {
|
||||||
|
"name": "FILES.json",
|
||||||
|
"ftype": "file",
|
||||||
|
"chksum_type": "sha256",
|
||||||
|
"chksum_sha256": "38d130899a6e46be25cbde550675c62b55827a79c3cfe29dc43fecd8e1de7ef6",
|
||||||
|
"format": 1
|
||||||
|
},
|
||||||
|
"format": 1
|
||||||
|
}
|
||||||
@@ -0,0 +1,5 @@
|
|||||||
|
# MANIFEST.json README
|
||||||
|
|
||||||
|
This manifest file is used in the test environment to overcome a bug currently in Ansible core: https://github.com/ansible/ansible/issues/67399
|
||||||
|
|
||||||
|
Once that bug is fixed, this file can be removed, along with the `cp` command used in the CI GitHub Actions workflow for this repository.
|
||||||
@@ -72,23 +72,10 @@
|
|||||||
state: absent
|
state: absent
|
||||||
no_log: yes
|
no_log: yes
|
||||||
|
|
||||||
# Run full test suite
|
# Test openshift
|
||||||
|
|
||||||
- pip:
|
- debug:
|
||||||
name:
|
var: k8s_openshift
|
||||||
- openshift>=0.9.2
|
|
||||||
- coverage
|
|
||||||
virtualenv: "{{ virtualenv }}"
|
|
||||||
virtualenv_command: "{{ virtualenv_command }}"
|
|
||||||
virtualenv_site_packages: no
|
|
||||||
|
|
||||||
- include_tasks: full_test.yml
|
- include: openshift.yml
|
||||||
vars:
|
when: k8s_openshift | bool
|
||||||
ansible_python_interpreter: "{{ virtualenv_interpreter }}"
|
|
||||||
create_crd_with_apply: no
|
|
||||||
playbook_namespace: ansible-test-k8s-full
|
|
||||||
|
|
||||||
- file:
|
|
||||||
path: "{{ virtualenv }}"
|
|
||||||
state: absent
|
|
||||||
no_log: yes
|
|
||||||
|
|||||||
Reference in New Issue
Block a user