mirror of
https://github.com/ansible-collections/kubernetes.core.git
synced 2026-04-11 11:20:54 +00:00
Add more functionality coverage to k8s_rollback integration test (#950)
SUMMARY Resolves #344 This revision adds the following test coverage: Label Selectors: Tests rollback using label selectors to target specific deployments. No Rollout History: Tests the warning scenario when attempting to rollback a deployment with only one revision. Unsupported Resource Types: Tests error handling when trying to rollback unsupported resources like Services. Non-existent Resources: Tests behavior when attempting to rollback resources that don't exist. Multiple Resource Rollback: Tests bulk rollback operations using label selectors on multiple deployments. Return Value Validation: Comprehensive validation of the rollback_info structure and content. Field Selectors: Tests rollback using field selectors to target specific resources. Check Mode Validation: Additional validation of check mode behavior and return values. COMPONENT NAME tests/integration/targets/k8s_rollback/tasks/main.yml Reviewed-by: Alina Buzachis Reviewed-by: Bikouo Aubin Reviewed-by: Bianca Henderson <beeankha@gmail.com>
This commit is contained in:
@@ -0,0 +1,2 @@
|
|||||||
|
trivial:
|
||||||
|
- k8s_rollback - Increase integration test coverage for k8s_rollback module (https://github.com/ansible-collections/kubernetes.core/pull/950).
|
||||||
@@ -33,7 +33,6 @@
|
|||||||
ports:
|
ports:
|
||||||
- containerPort: 80
|
- containerPort: 80
|
||||||
|
|
||||||
|
|
||||||
- name: Crash the existing deployment
|
- name: Crash the existing deployment
|
||||||
k8s:
|
k8s:
|
||||||
state: present
|
state: present
|
||||||
@@ -228,7 +227,7 @@
|
|||||||
hostPath:
|
hostPath:
|
||||||
path: /var/lib/docker/containers
|
path: /var/lib/docker/containers
|
||||||
register: crash
|
register: crash
|
||||||
ignore_errors: true
|
ignore_errors: yes
|
||||||
|
|
||||||
- name: Assert that the Daemonset failed
|
- name: Assert that the Daemonset failed
|
||||||
assert:
|
assert:
|
||||||
@@ -291,6 +290,297 @@
|
|||||||
that:
|
that:
|
||||||
- failed_version | int + 1 == result.resources[0].metadata.annotations['deprecated.daemonset.template.generation'] | int
|
- failed_version | int + 1 == result.resources[0].metadata.annotations['deprecated.daemonset.template.generation'] | int
|
||||||
|
|
||||||
|
- name: Create deployment with specific labels for selector testing
|
||||||
|
k8s:
|
||||||
|
state: present
|
||||||
|
wait: yes
|
||||||
|
wait_timeout: "{{ k8s_wait_timeout }}"
|
||||||
|
definition:
|
||||||
|
apiVersion: apps/v1
|
||||||
|
kind: Deployment
|
||||||
|
metadata:
|
||||||
|
name: nginx-labeled
|
||||||
|
namespace: "{{ namespace }}"
|
||||||
|
labels:
|
||||||
|
app: nginx
|
||||||
|
test-group: label-selector-test
|
||||||
|
spec:
|
||||||
|
replicas: 2
|
||||||
|
selector:
|
||||||
|
matchLabels:
|
||||||
|
app: nginx-labeled
|
||||||
|
template:
|
||||||
|
metadata:
|
||||||
|
labels:
|
||||||
|
app: nginx-labeled
|
||||||
|
spec:
|
||||||
|
containers:
|
||||||
|
- name: nginx
|
||||||
|
image: nginx:1.17
|
||||||
|
ports:
|
||||||
|
- containerPort: 80
|
||||||
|
|
||||||
|
- name: Update deployment to create second revision
|
||||||
|
k8s:
|
||||||
|
state: present
|
||||||
|
wait: yes
|
||||||
|
wait_timeout: 30
|
||||||
|
definition:
|
||||||
|
apiVersion: apps/v1
|
||||||
|
kind: Deployment
|
||||||
|
metadata:
|
||||||
|
name: nginx-labeled
|
||||||
|
namespace: "{{ namespace }}"
|
||||||
|
labels:
|
||||||
|
app: nginx
|
||||||
|
test-group: label-selector-test
|
||||||
|
spec:
|
||||||
|
replicas: 2
|
||||||
|
selector:
|
||||||
|
matchLabels:
|
||||||
|
app: nginx-labeled
|
||||||
|
template:
|
||||||
|
metadata:
|
||||||
|
labels:
|
||||||
|
app: nginx-labeled
|
||||||
|
spec:
|
||||||
|
containers:
|
||||||
|
- name: nginx
|
||||||
|
image: nginx:1.18
|
||||||
|
ports:
|
||||||
|
- containerPort: 80
|
||||||
|
|
||||||
|
- name: Test rollback with label selectors
|
||||||
|
k8s_rollback:
|
||||||
|
api_version: apps/v1
|
||||||
|
kind: Deployment
|
||||||
|
name: nginx-labeled
|
||||||
|
namespace: "{{ namespace }}"
|
||||||
|
label_selectors:
|
||||||
|
- "test-group=label-selector-test"
|
||||||
|
register: result
|
||||||
|
|
||||||
|
- name: Assert label selector rollback worked
|
||||||
|
assert:
|
||||||
|
that:
|
||||||
|
- result is changed
|
||||||
|
- result.rollback_info | length == 1
|
||||||
|
- result.rollback_info[0].method == "patch"
|
||||||
|
|
||||||
|
- name: Create deployment with single revision
|
||||||
|
k8s:
|
||||||
|
state: present
|
||||||
|
wait: yes
|
||||||
|
wait_timeout: 30
|
||||||
|
definition:
|
||||||
|
apiVersion: apps/v1
|
||||||
|
kind: Deployment
|
||||||
|
metadata:
|
||||||
|
name: single-revision
|
||||||
|
namespace: "{{ namespace }}"
|
||||||
|
spec:
|
||||||
|
replicas: 1
|
||||||
|
selector:
|
||||||
|
matchLabels:
|
||||||
|
app: single-revision
|
||||||
|
template:
|
||||||
|
metadata:
|
||||||
|
labels:
|
||||||
|
app: single-revision
|
||||||
|
spec:
|
||||||
|
containers:
|
||||||
|
- name: nginx
|
||||||
|
image: nginx:1.17
|
||||||
|
ports:
|
||||||
|
- containerPort: 80
|
||||||
|
|
||||||
|
- name: Try to rollback deployment with no previous revisions
|
||||||
|
k8s_rollback:
|
||||||
|
api_version: apps/v1
|
||||||
|
kind: Deployment
|
||||||
|
name: single-revision
|
||||||
|
namespace: "{{ namespace }}"
|
||||||
|
register: result
|
||||||
|
|
||||||
|
- name: Assert warning is returned for no rollout history
|
||||||
|
assert:
|
||||||
|
that:
|
||||||
|
- not result.changed
|
||||||
|
- result.rollback_info[0].warnings is defined
|
||||||
|
- "'No rollout history found' in result.rollback_info[0].warnings[0]"
|
||||||
|
|
||||||
|
- name: Create a service for unsupported resource test
|
||||||
|
k8s:
|
||||||
|
state: present
|
||||||
|
definition:
|
||||||
|
apiVersion: v1
|
||||||
|
kind: Service
|
||||||
|
metadata:
|
||||||
|
name: test-service
|
||||||
|
namespace: "{{ namespace }}"
|
||||||
|
spec:
|
||||||
|
selector:
|
||||||
|
app: nginx
|
||||||
|
ports:
|
||||||
|
- port: 80
|
||||||
|
targetPort: 80
|
||||||
|
|
||||||
|
- name: Test rollback on unsupported resource type
|
||||||
|
k8s_rollback:
|
||||||
|
api_version: v1
|
||||||
|
kind: Service
|
||||||
|
name: test-service
|
||||||
|
namespace: "{{ namespace }}"
|
||||||
|
register: result
|
||||||
|
ignore_errors: yes
|
||||||
|
|
||||||
|
- name: Assert error message for unsupported resource
|
||||||
|
assert:
|
||||||
|
that:
|
||||||
|
- not result.changed
|
||||||
|
- "'Cannot perform rollback on resource of kind Service' in result.msg"
|
||||||
|
|
||||||
|
- name: Test rollback on non-existent deployment
|
||||||
|
k8s_rollback:
|
||||||
|
api_version: apps/v1
|
||||||
|
kind: Deployment
|
||||||
|
name: non-existent
|
||||||
|
namespace: "{{ namespace }}"
|
||||||
|
register: result
|
||||||
|
|
||||||
|
- name: Assert no resources found
|
||||||
|
assert:
|
||||||
|
that:
|
||||||
|
- not result.changed
|
||||||
|
- result.rollback_info | length == 0
|
||||||
|
|
||||||
|
- name: Create multiple deployments with same label
|
||||||
|
k8s:
|
||||||
|
state: present
|
||||||
|
wait: yes
|
||||||
|
wait_timeout: 30
|
||||||
|
definition:
|
||||||
|
apiVersion: apps/v1
|
||||||
|
kind: Deployment
|
||||||
|
metadata:
|
||||||
|
name: "multi-{{ item }}"
|
||||||
|
namespace: "{{ namespace }}"
|
||||||
|
labels:
|
||||||
|
group: multi-test
|
||||||
|
app: multi
|
||||||
|
spec:
|
||||||
|
replicas: 1
|
||||||
|
selector:
|
||||||
|
matchLabels:
|
||||||
|
app: "multi-{{ item }}"
|
||||||
|
template:
|
||||||
|
metadata:
|
||||||
|
labels:
|
||||||
|
app: "multi-{{ item }}"
|
||||||
|
spec:
|
||||||
|
containers:
|
||||||
|
- name: nginx
|
||||||
|
image: nginx:1.17
|
||||||
|
ports:
|
||||||
|
- containerPort: 80
|
||||||
|
loop: [1, 2, 3]
|
||||||
|
|
||||||
|
- name: Update multiple deployments to create second revisions
|
||||||
|
k8s:
|
||||||
|
state: present
|
||||||
|
wait: yes
|
||||||
|
wait_timeout: 30
|
||||||
|
definition:
|
||||||
|
apiVersion: apps/v1
|
||||||
|
kind: Deployment
|
||||||
|
metadata:
|
||||||
|
name: "multi-{{ item }}"
|
||||||
|
namespace: "{{ namespace }}"
|
||||||
|
labels:
|
||||||
|
group: multi-test
|
||||||
|
app: multi
|
||||||
|
spec:
|
||||||
|
replicas: 1
|
||||||
|
selector:
|
||||||
|
matchLabels:
|
||||||
|
app: "multi-{{ item }}"
|
||||||
|
template:
|
||||||
|
metadata:
|
||||||
|
labels:
|
||||||
|
app: "multi-{{ item }}"
|
||||||
|
spec:
|
||||||
|
containers:
|
||||||
|
- name: nginx
|
||||||
|
image: nginx:1.18
|
||||||
|
ports:
|
||||||
|
- containerPort: 80
|
||||||
|
loop: [1, 2, 3]
|
||||||
|
|
||||||
|
- name: Rollback multiple deployments using label selector
|
||||||
|
k8s_rollback:
|
||||||
|
api_version: apps/v1
|
||||||
|
kind: Deployment
|
||||||
|
name: "multi-{{ item }}"
|
||||||
|
namespace: "{{ namespace }}"
|
||||||
|
label_selectors:
|
||||||
|
- "group=multi-test"
|
||||||
|
register: result
|
||||||
|
loop: [1, 2, 3]
|
||||||
|
|
||||||
|
- name: Assert multiple resources were rolled back
|
||||||
|
assert:
|
||||||
|
that:
|
||||||
|
- result.results | length == 3
|
||||||
|
- result.results | selectattr('changed', 'equalto', true) | list | length == 3
|
||||||
|
- result.results | selectattr('rollback_info', 'defined') | list | length == 3
|
||||||
|
- result.results | map(attribute='rollback_info') | map('first') | map(attribute='method') | select('equalto', 'patch') | list | length == 3
|
||||||
|
|
||||||
|
- name: Validate rollback_info structure for deployment
|
||||||
|
assert:
|
||||||
|
that:
|
||||||
|
- result.results is defined
|
||||||
|
- result.results[0].rollback_info is defined
|
||||||
|
- result.results[0].rollback_info | length > 0
|
||||||
|
- result.results[0].rollback_info[0].method == "patch"
|
||||||
|
- result.results[0].rollback_info[0].body is defined
|
||||||
|
- result.results[0].rollback_info[0].resources is defined
|
||||||
|
- result.results[0].rollback_info[0].resources.metadata is defined
|
||||||
|
- result.results[0].rollback_info[0].resources.spec is defined
|
||||||
|
|
||||||
|
- name: Test rollback with field selectors
|
||||||
|
k8s_rollback:
|
||||||
|
api_version: apps/v1
|
||||||
|
kind: Deployment
|
||||||
|
name: multi-1
|
||||||
|
namespace: "{{ namespace }}"
|
||||||
|
field_selectors:
|
||||||
|
- "metadata.name=multi-1"
|
||||||
|
register: result
|
||||||
|
|
||||||
|
- name: Assert field selector rollback worked
|
||||||
|
assert:
|
||||||
|
that:
|
||||||
|
- result is changed
|
||||||
|
- result.rollback_info | length == 1
|
||||||
|
- result.rollback_info[0].resources.metadata.name == "multi-1"
|
||||||
|
|
||||||
|
- name: Test check mode return values
|
||||||
|
k8s_rollback:
|
||||||
|
api_version: apps/v1
|
||||||
|
kind: Deployment
|
||||||
|
name: multi-2
|
||||||
|
namespace: "{{ namespace }}"
|
||||||
|
register: result
|
||||||
|
check_mode: yes
|
||||||
|
|
||||||
|
- name: Validate check mode returns expected structure
|
||||||
|
assert:
|
||||||
|
that:
|
||||||
|
- result is changed
|
||||||
|
- result.rollback_info is defined
|
||||||
|
- result.rollback_info[0].method == "patch"
|
||||||
|
- result.rollback_info[0].body is defined
|
||||||
|
|
||||||
always:
|
always:
|
||||||
- name: Delete {{ namespace }} namespace
|
- name: Delete {{ namespace }} namespace
|
||||||
k8s:
|
k8s:
|
||||||
|
|||||||
Reference in New Issue
Block a user