mirror of
https://github.com/TECHNOFAB11/zfs-localpv.git
synced 2025-12-12 14:30:12 +01:00
304 lines
11 KiB
YAML
304 lines
11 KiB
YAML
|
|
- hosts: localhost
|
||
|
|
connection: local
|
||
|
|
gather_facts: False
|
||
|
|
|
||
|
|
vars_files:
|
||
|
|
- test_vars.yml
|
||
|
|
|
||
|
|
tasks:
|
||
|
|
- block:
|
||
|
|
|
||
|
|
## Generating the testname for zfspv custom-topology support test
|
||
|
|
- include_tasks: /e2e-tests/hack/create_testname.yml
|
||
|
|
|
||
|
|
## Record SOT (start of test) in e2e result e2e-cr (e2e-custom-resource)
|
||
|
|
- include_tasks: /e2e-tests/hack/update_e2e_result_resource.yml
|
||
|
|
vars:
|
||
|
|
status: 'SOT'
|
||
|
|
|
||
|
|
- name: Get any of the two nodes from cluster which are not having `noSchedule` taints
|
||
|
|
shell: >
|
||
|
|
kubectl get nodes --no-headers -o custom-columns=:.metadata.name,:.spec.taints |
|
||
|
|
grep -v NoSchedule | shuf -n 2 | awk '{print $1}'
|
||
|
|
args:
|
||
|
|
executable: /bin/bash
|
||
|
|
register: node_list
|
||
|
|
|
||
|
|
- name: Label the nodes with custom labels
|
||
|
|
shell: >
|
||
|
|
kubectl label node {{ item }} {{ node_label }}
|
||
|
|
args:
|
||
|
|
executable: /bin/bash
|
||
|
|
register: status
|
||
|
|
failed_when: "status.rc != 0"
|
||
|
|
with_items: "{{ node_list.stdout_lines }}"
|
||
|
|
|
||
|
|
- name: Split the node label into key and values
|
||
|
|
set_fact:
|
||
|
|
lkey: "{{ node_label.split('=')[0] }}"
|
||
|
|
lvalue: "{{ node_label.split('=')[1] }}"
|
||
|
|
|
||
|
|
- name: Update the storage_class template with test specific values
|
||
|
|
template:
|
||
|
|
src: storage_class.j2
|
||
|
|
dest: storage_class.yml
|
||
|
|
|
||
|
|
- name: Create the storage class yaml
|
||
|
|
shell: kubectl create -f storage_class.yml
|
||
|
|
args:
|
||
|
|
executable: /bin/bash
|
||
|
|
register: status
|
||
|
|
failed_when: "status.rc != 0"
|
||
|
|
|
||
|
|
- name: Create namespace
|
||
|
|
shell: kubectl create ns {{ app_ns }}-immediate
|
||
|
|
args:
|
||
|
|
executable: /bin/bash
|
||
|
|
|
||
|
|
- name: Apply the script for generating multiple busybox application yamls
|
||
|
|
shell: bash app_gen_immediate.sh
|
||
|
|
args:
|
||
|
|
executable: /bin/bash
|
||
|
|
|
||
|
|
- name: Apply the busybox yamls
|
||
|
|
shell: >
|
||
|
|
kubectl apply -f app_yamls_immediate/ -n {{ app_ns}}-immediate
|
||
|
|
args:
|
||
|
|
executable: /bin/bash
|
||
|
|
register: status
|
||
|
|
failed_when: "status.rc != 0"
|
||
|
|
|
||
|
|
- name: Get the pvc list
|
||
|
|
shell: kubectl get pvc -n {{ app_ns }}-immediate --no-headers -o custom-columns=:.metadata.name
|
||
|
|
args:
|
||
|
|
executable: /bin/bash
|
||
|
|
register: pvc_list
|
||
|
|
|
||
|
|
- name: Check the PVC status.
|
||
|
|
shell: kubectl get pvc {{ item }} -n {{ app_ns }}-immediate --no-headers -o custom-columns=:.status.phase
|
||
|
|
args:
|
||
|
|
executable: /bin/bash
|
||
|
|
register: pvc_status
|
||
|
|
with_items: "{{ pvc_list.stdout_lines }}"
|
||
|
|
until: " pvc_status.stdout == 'Bound'"
|
||
|
|
delay: 5
|
||
|
|
retries: 30
|
||
|
|
|
||
|
|
- name: Get the application pod list
|
||
|
|
shell: kubectl get pods -n {{ app_ns }}-immediate -l test=zfspv-custom-topology --no-headers -o custom-columns=:.metadata.name
|
||
|
|
args:
|
||
|
|
executable: /bin/bash
|
||
|
|
register: app_pod_list
|
||
|
|
|
||
|
|
- name: Check the application pod status
|
||
|
|
shell: >
|
||
|
|
kubectl get pods {{ item }} -n {{ app_ns }}-immediate --no-headers -o custom-columns=:.status.phase
|
||
|
|
args:
|
||
|
|
executable: /bin/bash
|
||
|
|
register: app_pod_status
|
||
|
|
with_items: "{{ app_pod_list.stdout_lines }}"
|
||
|
|
until: "app_pod_status.stdout == 'Running'"
|
||
|
|
delay: 5
|
||
|
|
retries: 20
|
||
|
|
|
||
|
|
- name: Check the container status
|
||
|
|
shell: >
|
||
|
|
kubectl get pods {{ item }} -n {{ app_ns }}-immediate --no-headers -o custom-columns=:.status.containerStatuses[*].state
|
||
|
|
args:
|
||
|
|
executable: /bin/bash
|
||
|
|
register: container_status
|
||
|
|
with_items: "{{ app_pod_list.stdout_lines }}"
|
||
|
|
until: "'running' in container_status.stdout"
|
||
|
|
delay: 2
|
||
|
|
retries: 30
|
||
|
|
|
||
|
|
- name: Verify that application pod is scheduled on node on which custom label is applied
|
||
|
|
shell: kubectl get pods {{ item }} -n {{ app_ns }}-immediate --no-headers -o custom-columns=:.spec.nodeName
|
||
|
|
args:
|
||
|
|
executable: /bin/bash
|
||
|
|
register: node_name
|
||
|
|
with_items: "{{ app_pod_list.stdout_lines }}"
|
||
|
|
failed_when: "'{{ node_name.stdout }}' not in node_list.stdout"
|
||
|
|
|
||
|
|
- name: Deprovision the application
|
||
|
|
shell: kubectl delete -f app_yamls_immediate/ -n {{ app_ns}}-immediate
|
||
|
|
args:
|
||
|
|
executable: /bin/bash
|
||
|
|
register: deprovision_status
|
||
|
|
failed_when: "deprovision_status.rc != 0"
|
||
|
|
|
||
|
|
- name: Delete the namespace
|
||
|
|
shell: kubectl delete ns {{ app_ns }}-immediate
|
||
|
|
args:
|
||
|
|
executable: /bin/bash
|
||
|
|
register: namespace_status
|
||
|
|
failed_when: "namespace_status.rc != 0"
|
||
|
|
|
||
|
|
- name: Create namespace
|
||
|
|
shell: kubectl create ns {{ app_ns}}-wfc
|
||
|
|
args:
|
||
|
|
executable: /bin/bash
|
||
|
|
|
||
|
|
- name: Apply the script for generating multiple busybox application yamls
|
||
|
|
shell: bash app_gen_wfc.sh
|
||
|
|
args:
|
||
|
|
executable: /bin/bash
|
||
|
|
|
||
|
|
- name: Apply the busybox yamls
|
||
|
|
shell: >
|
||
|
|
kubectl apply -f app_yamls_wfc/ -n {{ app_ns }}-wfc
|
||
|
|
args:
|
||
|
|
executable: /bin/bash
|
||
|
|
register: status
|
||
|
|
failed_when: "status.rc != 0"
|
||
|
|
|
||
|
|
## Restart of node-agent pods is required to get aware of node_labels
|
||
|
|
## Meanwhile PVC will be remain in pending state.
|
||
|
|
|
||
|
|
- name: Check all the pvc is in pending state.
|
||
|
|
shell: kubectl get pvc -n {{ app_ns }}-wfc --no-headers -o custom-columns=:.status.phase | sort | uniq
|
||
|
|
args:
|
||
|
|
executable: /bin/bash
|
||
|
|
register: pvc_status
|
||
|
|
failed_when: "pvc_status.stdout != 'Pending'"
|
||
|
|
|
||
|
|
- name: Restart the zfs node-agent pods in kube-system namespace
|
||
|
|
shell: kubectl delete pods -n kube-system -l app=openebs-zfs-node
|
||
|
|
args:
|
||
|
|
executable: /bin/bash
|
||
|
|
|
||
|
|
- name: Wait for 10 sec
|
||
|
|
shell:
|
||
|
|
sleep 10
|
||
|
|
|
||
|
|
- name: Check for the zfs node-agent pods to come into Running state
|
||
|
|
shell: >
|
||
|
|
kubectl get pods -n kube-system -l app=openebs-zfs-node
|
||
|
|
--no-headers -o custom-columns=:.status.phase | sort | uniq
|
||
|
|
args:
|
||
|
|
executable: /bin/bash
|
||
|
|
register: zfs_node_pod_status
|
||
|
|
until: "zfs_node_pod_status.stdout == 'Running'"
|
||
|
|
delay: 5
|
||
|
|
retries: 20
|
||
|
|
|
||
|
|
- name: Verify new topology key is now available in csi_nodes
|
||
|
|
shell: kubectl get csinode {{ item }} --no-headers -o custom-columns=:.spec.drivers[*].topologyKeys
|
||
|
|
args:
|
||
|
|
executable: /bin/bash
|
||
|
|
register: csi_node_keys
|
||
|
|
until: "'{{ lkey }}' in csi_node_keys.stdout"
|
||
|
|
delay: 2
|
||
|
|
retries: 20
|
||
|
|
with_items: "{{ node_list.stdout_lines }}"
|
||
|
|
|
||
|
|
- name: Get the pvc list
|
||
|
|
shell: kubectl get pvc -n {{ app_ns }}-wfc --no-headers -o custom-columns=:.metadata.name
|
||
|
|
args:
|
||
|
|
executable: /bin/bash
|
||
|
|
register: pvc_list
|
||
|
|
|
||
|
|
- name: Check the status of pvc
|
||
|
|
shell: kubectl get pvc {{ item }} -n {{ app_ns }}-wfc --no-headers -o custom-columns=:.status.phase
|
||
|
|
args:
|
||
|
|
executable: /bin/bash
|
||
|
|
register: pvc_status
|
||
|
|
with_items: "{{ pvc_list.stdout_lines }}"
|
||
|
|
until: "pvc_status.stdout == 'Bound'"
|
||
|
|
delay: 2
|
||
|
|
retries: 30
|
||
|
|
|
||
|
|
- name: Get the application pod list
|
||
|
|
shell: kubectl get pods -n {{ app_ns }}-wfc -l test=zfspv-custom-topology --no-headers -o custom-columns=:.metadata.name
|
||
|
|
args:
|
||
|
|
executable: /bin/bash
|
||
|
|
register: app_pod_list
|
||
|
|
|
||
|
|
- name: Check the application pod status
|
||
|
|
shell: >
|
||
|
|
kubectl get pods {{ item }} -n {{ app_ns }}-wfc --no-headers -o custom-columns=:.status.phase
|
||
|
|
args:
|
||
|
|
executable: /bin/bash
|
||
|
|
register: app_pod_status
|
||
|
|
with_items: "{{ app_pod_list.stdout_lines }}"
|
||
|
|
until: "app_pod_status.stdout == 'Running'"
|
||
|
|
delay: 5
|
||
|
|
retries: 20
|
||
|
|
|
||
|
|
- name: Check the container status
|
||
|
|
shell: >
|
||
|
|
kubectl get pods {{ item }} -n {{ app_ns }}-wfc --no-headers -o custom-columns=:.status.containerStatuses[*].state
|
||
|
|
args:
|
||
|
|
executable: /bin/bash
|
||
|
|
register: container_status
|
||
|
|
with_items: "{{ app_pod_list.stdout_lines }}"
|
||
|
|
until: "'running' in container_status.stdout"
|
||
|
|
delay: 2
|
||
|
|
retries: 30
|
||
|
|
|
||
|
|
- name: Verify that application pod is scheduled on node on which custom label is applied
|
||
|
|
shell: kubectl get pods {{ item }} -n {{ app_ns }}-wfc --no-headers -o custom-columns=:.spec.nodeName
|
||
|
|
args:
|
||
|
|
executable: /bin/bash
|
||
|
|
register: node_name
|
||
|
|
with_items: "{{ app_pod_list.stdout_lines }}"
|
||
|
|
failed_when: "'{{ node_name.stdout }}' not in node_list.stdout"
|
||
|
|
|
||
|
|
- name: Deprovision the application
|
||
|
|
shell: kubectl delete -f app_yamls_wfc/ -n {{ app_ns}}-wfc
|
||
|
|
args:
|
||
|
|
executable: /bin/bash
|
||
|
|
register: deprovision_status
|
||
|
|
failed_when: "deprovision_status.rc != 0"
|
||
|
|
|
||
|
|
- name: Delete the namespace
|
||
|
|
shell: kubectl delete ns {{ app_ns }}-wfc
|
||
|
|
args:
|
||
|
|
executable: /bin/bash
|
||
|
|
register: namespace_status
|
||
|
|
failed_when: "namespace_status.rc != 0"
|
||
|
|
|
||
|
|
- set_fact:
|
||
|
|
flag: "Pass"
|
||
|
|
|
||
|
|
rescue:
|
||
|
|
- set_fact:
|
||
|
|
flag: "Fail"
|
||
|
|
|
||
|
|
always:
|
||
|
|
|
||
|
|
- name: Remove the labels from node after end of test
|
||
|
|
shell: kubectl label node {{ item }} {{ lkey }}-
|
||
|
|
args:
|
||
|
|
executable: /bin/bash
|
||
|
|
register: label_status
|
||
|
|
with_items: "{{ node_list.stdout_lines }}"
|
||
|
|
failed_when: "label_status.rc != 0"
|
||
|
|
|
||
|
|
- name: Restart the zfs node-agent pods in kube-system namespace to remove label from csi-nodes
|
||
|
|
shell: kubectl delete pods -n kube-system -l app=openebs-zfs-node
|
||
|
|
args:
|
||
|
|
executable: /bin/bash
|
||
|
|
|
||
|
|
- name: Check for the zfs node-agent pods to come into Running state
|
||
|
|
shell: >
|
||
|
|
kubectl get pods -n kube-system -l app=openebs-zfs-node
|
||
|
|
--no-headers -o custom-columns=:.status.phase | sort | uniq
|
||
|
|
args:
|
||
|
|
executable: /bin/bash
|
||
|
|
register: zfs_node_pod_status
|
||
|
|
until: "zfs_node_pod_status.stdout == 'Running'"
|
||
|
|
delay: 5
|
||
|
|
retries: 20
|
||
|
|
|
||
|
|
- name: Delete the storage class
|
||
|
|
shell: kubectl delete -f storage_class.yml
|
||
|
|
args:
|
||
|
|
executable: /bin/bash
|
||
|
|
register: status
|
||
|
|
failed_when: "status.rc != 0"
|
||
|
|
|
||
|
|
# RECORD END-OF-TEST IN e2e RESULT CR
|
||
|
|
- include_tasks: /e2e-tests/hack/update_e2e_result_resource.yml
|
||
|
|
vars:
|
||
|
|
status: 'EOT'
|