mirror of
https://github.com/ansible-collections/kubernetes.core.git
synced 2026-05-07 05:22:39 +00:00
k8s - add label_selectors options (#158)
k8s - add label_selectors options SUMMARY k8s now support label_selectors options same as k8s_info Resolves #43 ISSUE TYPE Feature Pull Request COMPONENT NAME k8s Reviewed-by: Mike Graves <mgraves@redhat.com> Reviewed-by: None <None>
This commit is contained in:
@@ -164,6 +164,14 @@
|
||||
tags:
|
||||
- always
|
||||
|
||||
- name: Include label_selectors.yml
|
||||
include_tasks:
|
||||
file: tasks/label_selectors.yml
|
||||
apply:
|
||||
tags: [ label_selectors, k8s ]
|
||||
tags:
|
||||
- always
|
||||
|
||||
- name: Include diff.yml
|
||||
include_tasks:
|
||||
file: tasks/diff.yml
|
||||
|
||||
657
molecule/default/tasks/label_selectors.yml
Normal file
657
molecule/default/tasks/label_selectors.yml
Normal file
@@ -0,0 +1,657 @@
|
||||
---
|
||||
- block:
|
||||
- set_fact:
|
||||
selector_namespace: "selector"
|
||||
selector_pod_delete: "pod-selector-delete"
|
||||
selector_pod_apply: "pod-selector-apply"
|
||||
selector_pod_create:
|
||||
- "pod-selector-apply-00"
|
||||
- "pod-selector-apply-01"
|
||||
- "pod-selector-apply-02"
|
||||
- "pod-selector-apply-03"
|
||||
|
||||
- name: Ensure namespace selector
|
||||
k8s:
|
||||
kind: namespace
|
||||
name: '{{ selector_namespace }}'
|
||||
|
||||
# Resource deletion using label selector (equality-based requirement)
|
||||
- name: Create simple pod
|
||||
k8s:
|
||||
namespace: '{{ selector_namespace }}'
|
||||
definition:
|
||||
apiVersion: v1
|
||||
kind: Pod
|
||||
metadata:
|
||||
name: '{{ selector_pod_delete }}-00'
|
||||
labels:
|
||||
ansible.dev/team: "cloud"
|
||||
ansible.release/version: upstream
|
||||
ansible.dev/test: "true"
|
||||
spec:
|
||||
containers:
|
||||
- name: c0
|
||||
image: busybox
|
||||
command:
|
||||
- /bin/sh
|
||||
- -c
|
||||
- while true;do date;sleep 5; done
|
||||
|
||||
- name: Delete all resource using selector
|
||||
k8s:
|
||||
state: absent
|
||||
kind: Pod
|
||||
namespace: '{{ selector_namespace }}'
|
||||
label_selectors:
|
||||
- ansible.dev/team=cloud
|
||||
wait: yes
|
||||
wait_timeout: 180
|
||||
|
||||
- name: Ensure resources have been deleted
|
||||
k8s_info:
|
||||
kind: Pod
|
||||
namespace: '{{ selector_namespace }}'
|
||||
label_selectors:
|
||||
- ansible.dev/team=cloud
|
||||
register: result
|
||||
|
||||
- assert:
|
||||
that:
|
||||
- result.resources == []
|
||||
|
||||
# Resource deletion using label selector (set-based requirement)
|
||||
- name: Create simple pod
|
||||
k8s:
|
||||
namespace: '{{ selector_namespace }}'
|
||||
definition:
|
||||
apiVersion: v1
|
||||
kind: Pod
|
||||
metadata:
|
||||
name: '{{ selector_pod_delete }}-01'
|
||||
labels:
|
||||
environment: production
|
||||
spec:
|
||||
containers:
|
||||
- name: c0
|
||||
image: alpine:3.14.0
|
||||
command:
|
||||
- /bin/sh
|
||||
- -c
|
||||
- while true;do date;sleep 5; done
|
||||
|
||||
- name: Delete all resource using selector
|
||||
k8s:
|
||||
state: absent
|
||||
kind: Pod
|
||||
namespace: '{{ selector_namespace }}'
|
||||
label_selectors:
|
||||
- environment in (test, qa)
|
||||
wait: yes
|
||||
wait_timeout: 180
|
||||
register: result
|
||||
|
||||
- name: check that no resources were deleted
|
||||
assert:
|
||||
that:
|
||||
- result is not changed
|
||||
|
||||
- name: Ensure resources have not been deleted
|
||||
k8s_info:
|
||||
kind: Pod
|
||||
namespace: '{{ selector_namespace }}'
|
||||
label_selectors:
|
||||
- environment in (production)
|
||||
register: result
|
||||
|
||||
- assert:
|
||||
that:
|
||||
- result.resources | list | length > 0
|
||||
|
||||
- name: Delete all resource using selector
|
||||
k8s:
|
||||
state: absent
|
||||
kind: Pod
|
||||
namespace: '{{ selector_namespace }}'
|
||||
label_selectors:
|
||||
- environment in (production)
|
||||
wait: yes
|
||||
wait_timeout: 180
|
||||
register: result
|
||||
|
||||
- name: check result is changed
|
||||
assert:
|
||||
that:
|
||||
- result is changed
|
||||
|
||||
- name: Ensure resources have not been deleted
|
||||
k8s_info:
|
||||
kind: Pod
|
||||
namespace: '{{ selector_namespace }}'
|
||||
label_selectors:
|
||||
- environment in (production)
|
||||
register: result
|
||||
|
||||
- assert:
|
||||
that:
|
||||
- result.resources | list | length == 0
|
||||
|
||||
# Resource creation using label selector
|
||||
- name: Create simple pod using label_selectors option (equality-based requirement)
|
||||
k8s:
|
||||
namespace: '{{ selector_namespace }}'
|
||||
label_selectors:
|
||||
- container.image=fedora
|
||||
definition: |
|
||||
---
|
||||
apiVersion: v1
|
||||
kind: Pod
|
||||
metadata:
|
||||
name: '{{ selector_pod_create[0] }}'
|
||||
labels:
|
||||
container.image: busybox
|
||||
spec:
|
||||
containers:
|
||||
- name: c0
|
||||
image: busybox
|
||||
command:
|
||||
- /bin/sh
|
||||
- -c
|
||||
- while true;do date;sleep 5; done
|
||||
---
|
||||
apiVersion: v1
|
||||
kind: Pod
|
||||
metadata:
|
||||
name: '{{ selector_pod_create[1] }}'
|
||||
labels:
|
||||
container.image: alpine
|
||||
spec:
|
||||
containers:
|
||||
- name: c0
|
||||
image: alpine
|
||||
command:
|
||||
- /bin/sh
|
||||
- -c
|
||||
- while true;do date;sleep 5; done
|
||||
---
|
||||
apiVersion: v1
|
||||
kind: Pod
|
||||
metadata:
|
||||
name: '{{ selector_pod_create[2] }}'
|
||||
labels:
|
||||
container.image: python
|
||||
release: dev
|
||||
spec:
|
||||
containers:
|
||||
- name: c0
|
||||
image: python
|
||||
command:
|
||||
- /bin/sh
|
||||
- -c
|
||||
- while true;do date;sleep 5; done
|
||||
---
|
||||
apiVersion: v1
|
||||
kind: Pod
|
||||
metadata:
|
||||
name: '{{ selector_pod_create[3] }}'
|
||||
labels:
|
||||
container.image: python
|
||||
release: dev
|
||||
spec:
|
||||
containers:
|
||||
- name: c0
|
||||
image: python
|
||||
command:
|
||||
- /bin/sh
|
||||
- -c
|
||||
- while true;do date;sleep 5; done
|
||||
register: result
|
||||
|
||||
- assert:
|
||||
that:
|
||||
- result is not changed
|
||||
|
||||
- name: Create simple pod using label_selectors option
|
||||
k8s:
|
||||
namespace: '{{ selector_namespace }}'
|
||||
label_selectors:
|
||||
- container.image==alpine
|
||||
definition: |
|
||||
---
|
||||
apiVersion: v1
|
||||
kind: Pod
|
||||
metadata:
|
||||
name: '{{ selector_pod_create[0] }}'
|
||||
labels:
|
||||
container.image: busybox
|
||||
spec:
|
||||
containers:
|
||||
- name: c0
|
||||
image: busybox
|
||||
command:
|
||||
- /bin/sh
|
||||
- -c
|
||||
- while true;do date;sleep 5; done
|
||||
---
|
||||
apiVersion: v1
|
||||
kind: Pod
|
||||
metadata:
|
||||
name: '{{ selector_pod_create[1] }}'
|
||||
labels:
|
||||
container.image: alpine
|
||||
spec:
|
||||
containers:
|
||||
- name: c0
|
||||
image: alpine
|
||||
command:
|
||||
- /bin/sh
|
||||
- -c
|
||||
- while true;do date;sleep 5; done
|
||||
---
|
||||
apiVersion: v1
|
||||
kind: Pod
|
||||
metadata:
|
||||
name: '{{ selector_pod_create[2] }}'
|
||||
labels:
|
||||
container.image: python
|
||||
environment: test
|
||||
spec:
|
||||
containers:
|
||||
- name: c0
|
||||
image: python
|
||||
command:
|
||||
- /bin/sh
|
||||
- -c
|
||||
- while true;do date;sleep 5; done
|
||||
---
|
||||
apiVersion: v1
|
||||
kind: Pod
|
||||
metadata:
|
||||
name: '{{ selector_pod_create[3] }}'
|
||||
labels:
|
||||
container.image: python
|
||||
environment: production
|
||||
spec:
|
||||
containers:
|
||||
- name: c0
|
||||
image: python
|
||||
command:
|
||||
- /bin/sh
|
||||
- -c
|
||||
- while true;do date;sleep 5; done
|
||||
register: result
|
||||
|
||||
- assert:
|
||||
that:
|
||||
- result is changed
|
||||
|
||||
- name: list pod created
|
||||
k8s_info:
|
||||
namespace: '{{ selector_namespace }}'
|
||||
kind: Pod
|
||||
label_selectors:
|
||||
- container.image
|
||||
register: pod_created
|
||||
|
||||
- name: Validate that pod with matching label was created
|
||||
assert:
|
||||
that:
|
||||
- pods_created | length == 1
|
||||
- selector_pod_create[1] in pods_created
|
||||
vars:
|
||||
pods_created: '{{ pod_created.resources | map(attribute="metadata.name") | list }}'
|
||||
|
||||
- name: Create simple pod using label_selectors option (set-based requirement)
|
||||
k8s:
|
||||
namespace: '{{ selector_namespace }}'
|
||||
label_selectors:
|
||||
- "!environment"
|
||||
definition: |
|
||||
---
|
||||
apiVersion: v1
|
||||
kind: Pod
|
||||
metadata:
|
||||
name: '{{ selector_pod_create[0] }}'
|
||||
labels:
|
||||
container.image: busybox
|
||||
spec:
|
||||
containers:
|
||||
- name: c0
|
||||
image: busybox
|
||||
command:
|
||||
- /bin/sh
|
||||
- -c
|
||||
- while true;do date;sleep 5; done
|
||||
---
|
||||
apiVersion: v1
|
||||
kind: Pod
|
||||
metadata:
|
||||
name: '{{ selector_pod_create[1] }}'
|
||||
labels:
|
||||
container.image: alpine
|
||||
spec:
|
||||
containers:
|
||||
- name: c0
|
||||
image: alpine
|
||||
command:
|
||||
- /bin/sh
|
||||
- -c
|
||||
- while true;do date;sleep 5; done
|
||||
---
|
||||
apiVersion: v1
|
||||
kind: Pod
|
||||
metadata:
|
||||
name: '{{ selector_pod_create[2] }}'
|
||||
labels:
|
||||
container.image: python
|
||||
environment: test
|
||||
spec:
|
||||
containers:
|
||||
- name: c0
|
||||
image: python
|
||||
command:
|
||||
- /bin/sh
|
||||
- -c
|
||||
- while true;do date;sleep 5; done
|
||||
---
|
||||
apiVersion: v1
|
||||
kind: Pod
|
||||
metadata:
|
||||
name: '{{ selector_pod_create[3] }}'
|
||||
labels:
|
||||
container.image: python
|
||||
environment: production
|
||||
spec:
|
||||
containers:
|
||||
- name: c0
|
||||
image: python
|
||||
command:
|
||||
- /bin/sh
|
||||
- -c
|
||||
- while true;do date;sleep 5; done
|
||||
register: result
|
||||
|
||||
- assert:
|
||||
that:
|
||||
- result is changed
|
||||
|
||||
- name: list pod created
|
||||
k8s_info:
|
||||
namespace: '{{ selector_namespace }}'
|
||||
kind: Pod
|
||||
label_selectors:
|
||||
- container.image
|
||||
register: pod_created
|
||||
|
||||
- name: Validate that pod with matching label was created
|
||||
assert:
|
||||
that:
|
||||
- pods_created | length == 2
|
||||
- selector_pod_create[0] in pods_created
|
||||
vars:
|
||||
pods_created: '{{ pod_created.resources | map(attribute="metadata.name") | list }}'
|
||||
|
||||
- name: Create simple pod using label_selectors option (set-based requirement)
|
||||
k8s:
|
||||
namespace: '{{ selector_namespace }}'
|
||||
label_selectors:
|
||||
- environment in (test)
|
||||
definition: |
|
||||
---
|
||||
apiVersion: v1
|
||||
kind: Pod
|
||||
metadata:
|
||||
name: '{{ selector_pod_create[0] }}'
|
||||
labels:
|
||||
container.image: busybox
|
||||
spec:
|
||||
containers:
|
||||
- name: c0
|
||||
image: busybox
|
||||
command:
|
||||
- /bin/sh
|
||||
- -c
|
||||
- while true;do date;sleep 5; done
|
||||
---
|
||||
apiVersion: v1
|
||||
kind: Pod
|
||||
metadata:
|
||||
name: '{{ selector_pod_create[1] }}'
|
||||
labels:
|
||||
container.image: alpine
|
||||
spec:
|
||||
containers:
|
||||
- name: c0
|
||||
image: alpine
|
||||
command:
|
||||
- /bin/sh
|
||||
- -c
|
||||
- while true;do date;sleep 5; done
|
||||
---
|
||||
apiVersion: v1
|
||||
kind: Pod
|
||||
metadata:
|
||||
name: '{{ selector_pod_create[2] }}'
|
||||
labels:
|
||||
container.image: python
|
||||
environment: test
|
||||
spec:
|
||||
containers:
|
||||
- name: c0
|
||||
image: python
|
||||
command:
|
||||
- /bin/sh
|
||||
- -c
|
||||
- while true;do date;sleep 5; done
|
||||
---
|
||||
apiVersion: v1
|
||||
kind: Pod
|
||||
metadata:
|
||||
name: '{{ selector_pod_create[3] }}'
|
||||
labels:
|
||||
container.image: python
|
||||
environment: production
|
||||
spec:
|
||||
containers:
|
||||
- name: c0
|
||||
image: python
|
||||
command:
|
||||
- /bin/sh
|
||||
- -c
|
||||
- while true;do date;sleep 5; done
|
||||
register: result
|
||||
|
||||
- assert:
|
||||
that:
|
||||
- result is changed
|
||||
|
||||
- name: list pod created
|
||||
k8s_info:
|
||||
namespace: '{{ selector_namespace }}'
|
||||
kind: Pod
|
||||
label_selectors:
|
||||
- container.image
|
||||
register: pod_created
|
||||
|
||||
- name: Validate that pod with matching label was created
|
||||
assert:
|
||||
that:
|
||||
- pods_created | length == 3
|
||||
- selector_pod_create[2] in pods_created
|
||||
vars:
|
||||
pods_created: '{{ pod_created.resources | map(attribute="metadata.name") | list }}'
|
||||
|
||||
- name: Create simple pod using label_selectors option (set-based requirement)
|
||||
k8s:
|
||||
namespace: '{{ selector_namespace }}'
|
||||
label_selectors:
|
||||
- environment notin (test)
|
||||
definition: |
|
||||
---
|
||||
apiVersion: v1
|
||||
kind: Pod
|
||||
metadata:
|
||||
name: '{{ selector_pod_create[0] }}'
|
||||
labels:
|
||||
container.image: busybox
|
||||
spec:
|
||||
containers:
|
||||
- name: c0
|
||||
image: busybox
|
||||
command:
|
||||
- /bin/sh
|
||||
- -c
|
||||
- while true;do date;sleep 5; done
|
||||
---
|
||||
apiVersion: v1
|
||||
kind: Pod
|
||||
metadata:
|
||||
name: '{{ selector_pod_create[1] }}'
|
||||
labels:
|
||||
container.image: alpine
|
||||
spec:
|
||||
containers:
|
||||
- name: c0
|
||||
image: alpine
|
||||
command:
|
||||
- /bin/sh
|
||||
- -c
|
||||
- while true;do date;sleep 5; done
|
||||
---
|
||||
apiVersion: v1
|
||||
kind: Pod
|
||||
metadata:
|
||||
name: '{{ selector_pod_create[2] }}'
|
||||
labels:
|
||||
container.image: python
|
||||
environment: test
|
||||
spec:
|
||||
containers:
|
||||
- name: c0
|
||||
image: python
|
||||
command:
|
||||
- /bin/sh
|
||||
- -c
|
||||
- while true;do date;sleep 5; done
|
||||
---
|
||||
apiVersion: v1
|
||||
kind: Pod
|
||||
metadata:
|
||||
name: '{{ selector_pod_create[3] }}'
|
||||
labels:
|
||||
container.image: python
|
||||
environment: production
|
||||
spec:
|
||||
containers:
|
||||
- name: c0
|
||||
image: python
|
||||
command:
|
||||
- /bin/sh
|
||||
- -c
|
||||
- while true;do date;sleep 5; done
|
||||
register: result
|
||||
|
||||
- assert:
|
||||
that:
|
||||
- result is changed
|
||||
|
||||
- name: list pod created
|
||||
k8s_info:
|
||||
namespace: '{{ selector_namespace }}'
|
||||
kind: Pod
|
||||
label_selectors:
|
||||
- container.image
|
||||
register: pod_created
|
||||
|
||||
- name: Validate that pod with matching label was created
|
||||
assert:
|
||||
that:
|
||||
- pods_created | length == 4
|
||||
- selector_pod_create[3] in pods_created
|
||||
vars:
|
||||
pods_created: '{{ pod_created.resources | map(attribute="metadata.name") | list }}'
|
||||
|
||||
# Resource update using apply
|
||||
- name: Create simple pod using apply
|
||||
k8s:
|
||||
namespace: '{{ selector_namespace }}'
|
||||
apply: yes
|
||||
definition:
|
||||
apiVersion: v1
|
||||
kind: Pod
|
||||
metadata:
|
||||
name: '{{ selector_pod_apply }}'
|
||||
labels:
|
||||
environment: test
|
||||
spec:
|
||||
containers:
|
||||
- name: c0
|
||||
image: busybox:1.31.0
|
||||
command:
|
||||
- /bin/sh
|
||||
- -c
|
||||
- while true;do date;sleep 5; done
|
||||
|
||||
- name: Apply new pod definition using label_selectors (no match)
|
||||
k8s:
|
||||
namespace: '{{ selector_namespace }}'
|
||||
apply: yes
|
||||
definition:
|
||||
apiVersion: v1
|
||||
kind: Pod
|
||||
metadata:
|
||||
name: '{{ selector_pod_apply }}'
|
||||
labels:
|
||||
environment: test
|
||||
spec:
|
||||
containers:
|
||||
- name: c0
|
||||
image: busybox:1.33.0
|
||||
command:
|
||||
- /bin/sh
|
||||
- -c
|
||||
- while true;do date;sleep 5; done
|
||||
label_selectors:
|
||||
- environment=qa
|
||||
register: result
|
||||
|
||||
- name: check task output
|
||||
assert:
|
||||
that:
|
||||
- result is not changed
|
||||
- '"filtered by label_selectors" in result.msg'
|
||||
|
||||
- name: Apply new pod definition using label_selectors
|
||||
k8s:
|
||||
namespace: '{{ selector_namespace }}'
|
||||
apply: yes
|
||||
definition:
|
||||
apiVersion: v1
|
||||
kind: Pod
|
||||
metadata:
|
||||
name: '{{ selector_pod_apply }}'
|
||||
labels:
|
||||
environment: test
|
||||
spec:
|
||||
containers:
|
||||
- name: c0
|
||||
image: busybox:1.33.0
|
||||
command:
|
||||
- /bin/sh
|
||||
- -c
|
||||
- while true;do date;sleep 5; done
|
||||
label_selectors:
|
||||
- environment!=qa
|
||||
register: result
|
||||
|
||||
- name: check task output
|
||||
assert:
|
||||
that:
|
||||
- result is changed
|
||||
|
||||
always:
|
||||
- name: Ensure namespace is deleted
|
||||
k8s:
|
||||
kind: Namespace
|
||||
name: '{{ selector_namespace }}'
|
||||
state: absent
|
||||
ignore_errors: true
|
||||
Reference in New Issue
Block a user