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,315 @@
- hosts: localhost
connection: local
gather_facts: False
vars_files:
- test_vars.yml
tasks:
- block:
## Generating the testname for zfs localpv controller high-availability 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 the no of replicas in zfs-controller statefulset
shell: >
kubectl get sts openebs-zfs-controller -n kube-system -o jsonpath='{.status.replicas}'
args:
executable: /bin/bash
register: controller_rep_count
- name: Record the replica count of zfs-controller
set_fact:
zfs_ctrl_replicas: "{{ controller_rep_count.stdout }}"
- name: Get the list of names of all the nodes in cluster
shell: >
kubectl get nodes --no-headers -o custom-columns=:.metadata.name
args:
executable: /bin/bash
register: node_list
- name: Get the count of the schedulable nodes, which don't have `NoSchedule` taints
shell: >
kubectl get nodes --no-headers -o custom-columns=:.spec.taints
| grep -v NoSchedule | wc -l
args:
executable: /bin/bash
register: schedulable_nodes_count
- name: Record the number of schedulable nodes in cluster
set_fact:
no_of_schedulable_nodes: "{{ schedulable_nodes_count.stdout }}"
- name: scale down the replicas to zero of zfs-controller statefulset
shell: >
kubectl scale sts openebs-zfs-controller -n kube-system --replicas=0
args:
executable: /bin/bash
register: status
failed_when: "status.rc != 0"
- name: check that zfs-controller pods has been terminated successfully
shell: >
kubectl get pods -n kube-system -l app=openebs-zfs-controller
args:
executable: /bin/bash
register: ctrl_pods
until: "'No resources found' in ctrl_pods.stderr"
delay: 3
retries: 40
- name: Provision a test volume when zfs-controller is not active
shell: >
kubectl apply -f busybox_app.yml
args:
executable: /bin/bash
- name: check the pvc status, it should be in pending state
shell: >
kubectl get pvc pvcha -n e2e -o jsonpath='{.status.phase}'
args:
executable: /bin/bash
register: pvc_status
failed_when: "'Pending' not in pvc_status.stdout"
- name: Manual wait for 15 seconds, pvc should not get bound in this time
shell: sleep 15
- name: again check the pvc status
shell: >
kubectl get pvc pvcha -n e2e -o jsonpath='{.status.phase}'
args:
executable: /bin/bash
register: pvc_status
failed_when: "'Pending' not in pvc_status.stdout"
- block:
- name: scale up the zfs-controller statefulset with +1 no of replica count
shell: >
kubectl scale sts openebs-zfs-controller -n kube-system
--replicas="{{ zfs_ctrl_replicas|int + 1 }}"
args:
executable: /bin/bash
- name: check that zfs-controller statefulset replicas are up and running
shell: >
kubectl get pods -n kube-system -l app=openebs-zfs-controller --no-headers
-o custom-columns=:.status.phase | grep Running | wc -l
args:
executable: /bin/bash
register: ready_replicas
until: "{{ ready_replicas.stdout|int }} == {{ zfs_ctrl_replicas|int + 1 }}"
delay: 3
retries: 50
- name: check the pvc status after zfs controller is up and running
shell: >
kubectl get pvc pvcha -n e2e -o jsonpath='{.status.phase}'
args:
executable: /bin/bash
register: pvc_status
until: "'Bound' in pvc_status.stdout"
delay: 3
retries: 40
- name: Get the application pod name
shell: >
kubectl get pods -n e2e -o jsonpath='{.items[?(@.metadata.labels.app=="test_ha")].metadata.name}'
args:
executable: /bin/bash
register: app_pod_name
- name: Check if the application pod is in running state.
shell: >
kubectl get pods -n e2e -o jsonpath='{.items[?(@.metadata.labels.app=="test_ha")].status.phase}'
register: pod_status
until: "'Running' in pod_status.stdout"
delay: 3
retries: 40
- name: Get the name of the controller pod replica which is active as master at present
shell: >
kubectl get lease zfs-csi-openebs-io -n kube-system -o jsonpath='{.spec.holderIdentity}'
args:
executable: /bin/bash
register: master_replica
- name: Taint all nodes with `NoSchedule` to keep replica {{ master_replica.stdout }} out of action
shell: >
kubectl taint node {{ item }} key=value:NoSchedule
args:
executable: /bin/bash
register: taint_status
until: "'tainted' in taint_status.stdout "
with_items: "{{ node_list.stdout_lines }}"
- name: Delete the {{ master_replica.stdout }} replica pod
shell: >
kubectl delete pod {{ master_replica.stdout }} -n kube-system
args:
executable: /bin/bash
register: status
failed_when: "status.rc != 0"
- name: Get the new replica name which is in action as master for zfs-controller
shell: >
kubectl get lease zfs-csi-openebs-io -n kube-system -o jsonpath='{.spec.holderIdentity}'
args:
executable: /bin/bash
register: new_master_replica
retries: 40
delay: 3
until: master_replica.stdout != new_master_replica.stdout
- name: Get the zfs-volume name from the pvc name
shell: >
kubectl get pvc pvcha -n e2e -o jsonpath='{.spec.volumeName}'
args:
executable: /bin/bash
register: zfsvol_name
- name: Deprovision the application
shell: >
kubectl delete -f busybox_app.yml
args:
executable: /bin/bash
- name: Verify that application pods have been deleted successfully
shell: >
kubectl get pods -n e2e
args:
executable: /bin/bash
register: app_pod
until: "'{{ app_pod_name.stdout }}' not in app_pod.stdout"
delay: 3
retries: 40
- name: verify that pvc has been deleted successfully
shell: >
kubectl get pvc -n e2e
args:
executable: /bin/bash
register: pvc_status
until: "'pvcha' not in pvc_status.stdout"
delay: 3
retries: 40
- name: verify that zfsvol has been deleted successfully
shell: >
kubectl get zv -n {{ zfs_operator_ns }}
args:
executable: /bin/bash
register: zfsvol_status
until: "zfsvol_name.stdout not in zfsvol_status.stdout"
delay: 3
retries: 40
when: "{{ zfs_ctrl_replicas|int + 1 }} <= {{no_of_schedulable_nodes|int}}"
- set_fact:
flag: "Pass"
rescue:
- set_fact:
flag: "Fail"
always:
- name: Remove the taint from the nodes
shell: >
kubectl taint node {{ item }} key-
args:
executable: /bin/bash
register: status
failed_when: "status.rc != 0"
with_items: "{{ node_list.stdout_lines }}"
ignore_errors: true
- block:
- name: Scale up the zfs-controller with same no of replica count
shell: >
kubectl scale sts openebs-zfs-controller -n kube-system --replicas={{ zfs_ctrl_replicas }}
args:
executable: /bin/bash
register: status
failed_when: "status.rc != 0"
- name: Verify that the zfs-controller pod and zfs-node daemonset pods are running
shell: >
kubectl get pods -n kube-system -l role=openebs-zfs
--no-headers -o custom-columns=:status.phase | sort | uniq
args:
executable: /bin/bash
register: zfs_driver_components
until: "zfs_driver_components.stdout == 'Running'"
delay: 3
retries: 50
- name: Get the zfs-volume name from the pvc name
shell: >
kubectl get pvc pvcha -n e2e -o jsonpath='{.spec.volumeName}'
args:
executable: /bin/bash
register: zfsvol_name
- name: Deprovision the application
shell: >
kubectl delete -f busybox_app.yml
args:
executable: /bin/bash
- name: Verify that application pods have been deleted successfully
shell: >
kubectl get pods -n e2e -l app=test_ha
args:
executable: /bin/bash
register: app_pod
until: "'No resources found' in app_pod.stderr"
delay: 3
retries: 40
- name: verify that pvc has been deleted successfully
shell: >
kubectl get pvc -n e2e
args:
executable: /bin/bash
register: pvc_status
until: "'pvcha' not in pvc_status.stdout"
delay: 3
retries: 40
- name: verify that zfsvol has been deleted successfully
shell: >
kubectl get zv -n {{ zfs_operator_ns }}
args:
executable: /bin/bash
register: zfsvol_status
until: "zfsvol_name.stdout not in zfsvol_status.stdout"
delay: 3
retries: 40
when: "{{ zfs_ctrl_replicas|int + 1 }} > {{no_of_schedulable_nodes|int}}"
- name: Verify that the zfs-controller pod and zfs-node daemonset pods are running
shell: >
kubectl get pods -n kube-system -l role=openebs-zfs
--no-headers -o custom-columns=:status.phase | sort | uniq
args:
executable: /bin/bash
register: zfs_driver_components
until: "zfs_driver_components.stdout == 'Running'"
delay: 3
retries: 50
## RECORD END-OF-TEST IN e2e RESULT CR
- include_tasks: /e2e-tests/hack/update_e2e_result_resource.yml
vars:
status: 'EOT'