feat(e2e-test): Add e2e-tests for zfs-localpv (#298)

Signed-off-by: w3aman <aman.gupta@mayadata.io>
This commit is contained in:
Aman Gupta 2021-06-09 21:21:39 +05:30 committed by GitHub
parent 53f872fcf1
commit 4e73638b5a
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
137 changed files with 8745 additions and 0 deletions

View file

@ -0,0 +1,304 @@
- 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'