mirror of
https://github.com/TECHNOFAB11/zfs-localpv.git
synced 2025-12-12 22:40:12 +01:00
283 lines
10 KiB
YAML
283 lines
10 KiB
YAML
|
|
- hosts: localhost
|
||
|
|
connection: local
|
||
|
|
gather_facts: False
|
||
|
|
|
||
|
|
vars_files:
|
||
|
|
- test_vars.yml
|
||
|
|
- /mnt/parameters.yml
|
||
|
|
|
||
|
|
tasks:
|
||
|
|
- block:
|
||
|
|
|
||
|
|
## Generating the testname for zfspc clone directly from pvc 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'
|
||
|
|
|
||
|
|
- block:
|
||
|
|
|
||
|
|
- name: Get the application pod name
|
||
|
|
shell: >
|
||
|
|
kubectl get pod -n {{ app_ns }} -l {{ app_label }}
|
||
|
|
--no-headers -o custom-columns=:.metadata.name | shuf -n1
|
||
|
|
args:
|
||
|
|
executable: /bin/bash
|
||
|
|
register: app_pod_name
|
||
|
|
|
||
|
|
- name: Check if the application pod is in running state
|
||
|
|
shell: >
|
||
|
|
kubectl get pod {{ app_pod_name.stdout }} -n {{ app_ns }}
|
||
|
|
--no-headers -o custom-columns=:.status.phase
|
||
|
|
args:
|
||
|
|
executable: /bin/bash
|
||
|
|
register: app_pod_status
|
||
|
|
failed_when: "'Running' not in app_pod_status.stdout"
|
||
|
|
|
||
|
|
- name: Get the capacity size of parent pvc {{ parent_pvc_name }}
|
||
|
|
shell: >
|
||
|
|
kubectl get pvc {{ parent_pvc_name }} -n {{ app_ns }}
|
||
|
|
--no-headers -o custom-columns=:.status.capacity.storage
|
||
|
|
args:
|
||
|
|
executable: /bin/bash
|
||
|
|
register: parent_pvc_size
|
||
|
|
|
||
|
|
## clone pvc size should be same as parent pvc size
|
||
|
|
- name: Record clone pvc size
|
||
|
|
set_fact:
|
||
|
|
clone_pvc_size: "{{ parent_pvc_size.stdout }}"
|
||
|
|
|
||
|
|
- name: Get the storage class name used for provisioning {{ parent_pvc_name }} pvc
|
||
|
|
shell: >
|
||
|
|
kubectl get pvc {{ parent_pvc_name }} -n {{ app_ns }} --no-headers
|
||
|
|
-o custom-columns=:.spec.storageClassName
|
||
|
|
args:
|
||
|
|
executable: /bin/bash
|
||
|
|
register: stg_class
|
||
|
|
|
||
|
|
- name: Record the storage class name
|
||
|
|
set_fact:
|
||
|
|
storage_class: "{{ stg_class.stdout }}"
|
||
|
|
|
||
|
|
- block:
|
||
|
|
- name: Create some test data into the application
|
||
|
|
include_tasks: "/e2e-tests/utils/applications/busybox/busybox_data_persistence.yml"
|
||
|
|
vars:
|
||
|
|
status: 'LOAD'
|
||
|
|
ns: "{{ app_ns }}"
|
||
|
|
pod_name: "{{ app_pod_name.stdout }}"
|
||
|
|
when: data_persistence == 'busybox'
|
||
|
|
|
||
|
|
- block:
|
||
|
|
- name: Create some test data into the application
|
||
|
|
include_tasks: "/e2e-tests/utils/applications/mysql/mysql_data_persistence.yml"
|
||
|
|
vars:
|
||
|
|
status: 'LOAD'
|
||
|
|
ns: "{{ app_ns }}"
|
||
|
|
pod_name: "{{ app_pod_name.stdout }}"
|
||
|
|
when: data_persistence == 'mysql'
|
||
|
|
|
||
|
|
- name: Update the clone_pvc template with the test specific values to create clone
|
||
|
|
template:
|
||
|
|
src: clone_pvc.j2
|
||
|
|
dest: clone_pvc.yml
|
||
|
|
|
||
|
|
- name: Create the clone
|
||
|
|
shell: >
|
||
|
|
kubectl create -f clone_pvc.yml
|
||
|
|
args:
|
||
|
|
executable: /bin/bash
|
||
|
|
register: status
|
||
|
|
failed_when: "status.rc != 0"
|
||
|
|
|
||
|
|
- block:
|
||
|
|
- name: Update the {{ app_name }} deployment yaml with test specific values
|
||
|
|
template:
|
||
|
|
src: busybox.j2
|
||
|
|
dest: busybox.yml
|
||
|
|
|
||
|
|
- name: Deploy the {{ app_name }} application using cloned PVC
|
||
|
|
shell: >
|
||
|
|
kubectl create -f busybox.yml
|
||
|
|
args:
|
||
|
|
executable: /bin/bash
|
||
|
|
when: app_name == "busybox"
|
||
|
|
|
||
|
|
- block:
|
||
|
|
- name: Update the {{ app_name }} deployment yaml with test specific values
|
||
|
|
template:
|
||
|
|
src: percona.j2
|
||
|
|
dest: percona.yml
|
||
|
|
|
||
|
|
- name: Deploy the {{ app_name }} application using cloned PVC
|
||
|
|
shell: >
|
||
|
|
kubectl create -f percona.yml
|
||
|
|
args:
|
||
|
|
executable: /bin/bash
|
||
|
|
when: app_name == "percona"
|
||
|
|
|
||
|
|
- name: Check if the cloned PVC is bound
|
||
|
|
shell: >
|
||
|
|
kubectl get pvc {{ clone_pvc_name }} -n {{ app_ns }}
|
||
|
|
--no-headers -o custom-columns=:.status.phase
|
||
|
|
args:
|
||
|
|
executable: /bin/bash
|
||
|
|
register: clone_pvc_status
|
||
|
|
until: "'Bound' in clone_pvc_status.stdout"
|
||
|
|
delay: 3
|
||
|
|
retries: 50
|
||
|
|
|
||
|
|
- name: Get {{ app_name }} application pod name which is using clone pvc
|
||
|
|
shell: >
|
||
|
|
kubectl get pods -n {{ app_ns }} -l app=clone-app-from-pvc --no-headers
|
||
|
|
-o=custom-columns=NAME:".metadata.name"
|
||
|
|
args:
|
||
|
|
executable: /bin/bash
|
||
|
|
register: pod_name
|
||
|
|
|
||
|
|
- name: Record the {{ app_name }} application pod name
|
||
|
|
set_fact:
|
||
|
|
clone_pod_name: "{{ pod_name.stdout }}"
|
||
|
|
|
||
|
|
- name: Checking {{ app_name }} application pod is in running state
|
||
|
|
shell: >
|
||
|
|
kubectl get pods {{clone_pod_name}} -n {{ app_ns }}
|
||
|
|
-o jsonpath='{.status.phase}'
|
||
|
|
register: pod_status
|
||
|
|
until: "'Running' in pod_status.stdout"
|
||
|
|
delay: 3
|
||
|
|
retries: 50
|
||
|
|
|
||
|
|
- name: Get the container status of {{ app_name }} application pod
|
||
|
|
shell: >
|
||
|
|
kubectl get pods {{ clone_pod_name }} -n {{ app_ns }}
|
||
|
|
-o jsonpath='{.status.containerStatuses[].state}' | grep running
|
||
|
|
args:
|
||
|
|
executable: /bin/bash
|
||
|
|
register: containerStatus
|
||
|
|
until: "'running' in containerStatus.stdout"
|
||
|
|
delay: 2
|
||
|
|
retries: 50
|
||
|
|
|
||
|
|
- block:
|
||
|
|
- name: Verify the data persistency
|
||
|
|
include_tasks: "/e2e-tests/utils/applications/mysql/mysql_data_persistence.yml"
|
||
|
|
vars:
|
||
|
|
status: 'VERIFY'
|
||
|
|
ns: "{{ app_ns }}"
|
||
|
|
label: app=clone-app-from-pvc
|
||
|
|
pod_name: "{{ clone_pod_name }}"
|
||
|
|
when: data_persistence == 'mysql'
|
||
|
|
|
||
|
|
- block:
|
||
|
|
- name: Verify the data persistency
|
||
|
|
include_tasks: "/e2e-tests/utils/applications/busybox/busybox_data_persistence.yml"
|
||
|
|
vars:
|
||
|
|
status: 'VERIFY'
|
||
|
|
ns: "{{ app_ns }}"
|
||
|
|
label: app=clone-app-from-pvc
|
||
|
|
pod_name: "{{ clone_pod_name }}"
|
||
|
|
when: data_persistence == 'busybox'
|
||
|
|
|
||
|
|
when: lookup('env','ACTION') == 'provision'
|
||
|
|
|
||
|
|
- block:
|
||
|
|
- name: Get the ZV name for the cloned PVC
|
||
|
|
shell: >
|
||
|
|
kubectl get pvc {{ clone_pvc_name }} -n {{ app_ns }} -o jsonpath='{.spec.volumeName}'
|
||
|
|
args:
|
||
|
|
executable: /bin/bash
|
||
|
|
register: zv_name
|
||
|
|
|
||
|
|
- name: Get {{ app_name }} application pod name which is using cloned pvc
|
||
|
|
shell: >
|
||
|
|
kubectl get pods -n {{ app_ns }} -l app=clone-app-from-pvc --no-headers
|
||
|
|
-o=custom-columns=NAME:".metadata.name"
|
||
|
|
args:
|
||
|
|
executable: /bin/bash
|
||
|
|
register: clone_pod_name
|
||
|
|
|
||
|
|
- block:
|
||
|
|
- name: Update the {{ app_name }} deployment yaml with test specific values
|
||
|
|
template:
|
||
|
|
src: busybox.j2
|
||
|
|
dest: busybox.yml
|
||
|
|
|
||
|
|
- name: delete the {{ app_name }} application which is using cloned pvc
|
||
|
|
shell: >
|
||
|
|
kubectl delete -f busybox.yml
|
||
|
|
args:
|
||
|
|
executable: /bin/bash
|
||
|
|
register: status
|
||
|
|
failed_when: "status.rc != 0"
|
||
|
|
when: app_name == 'busybox'
|
||
|
|
|
||
|
|
- block:
|
||
|
|
- name: Update the {{ app_name }} deployment yaml with test specific values
|
||
|
|
template:
|
||
|
|
src: percona.j2
|
||
|
|
dest: percona.yml
|
||
|
|
|
||
|
|
- name: delete the {{ app_name }} application which is using cloned pvc
|
||
|
|
shell: >
|
||
|
|
kubectl delete -f percona.yml
|
||
|
|
args:
|
||
|
|
executable: /bin/bash
|
||
|
|
register: status
|
||
|
|
failed_when: "status.rc != 0"
|
||
|
|
when: app_name == 'percona'
|
||
|
|
|
||
|
|
- name: Check if the {{ app_name }} application pod which is using cloned pvc is deleted successfully
|
||
|
|
shell: >
|
||
|
|
kubectl get pods -n {{ app_ns }}
|
||
|
|
args:
|
||
|
|
executable: /bin/bash
|
||
|
|
register: app_status
|
||
|
|
until: "clone_pod_name.stdout not in app_status.stdout"
|
||
|
|
delay: 3
|
||
|
|
retries: 50
|
||
|
|
|
||
|
|
- name: Delete the cloned pvc
|
||
|
|
shell: >
|
||
|
|
kubectl delete pvc {{ clone_pvc_name }} -n {{ app_ns }}
|
||
|
|
args:
|
||
|
|
executable: /bin/bash
|
||
|
|
register: clone_pvc_status
|
||
|
|
failed_when: "clone_pvc_status.rc != 0"
|
||
|
|
|
||
|
|
- name: Check if the cloned pvc is deleted
|
||
|
|
shell: >
|
||
|
|
kubectl get pvc -n {{ app_ns }}
|
||
|
|
args:
|
||
|
|
executable: /bin/bash
|
||
|
|
register: clone_pvc_status
|
||
|
|
until: "clone_pvc_name not in clone_pvc_status.stdout"
|
||
|
|
delay: 3
|
||
|
|
retries: 50
|
||
|
|
|
||
|
|
- name: Check if the ZV for cloned pvc is deleted
|
||
|
|
shell: >
|
||
|
|
kubectl get zv -n {{ zfs_operator_ns }}
|
||
|
|
args:
|
||
|
|
executable: /bin/bash
|
||
|
|
register: zv_status
|
||
|
|
until: "zv_name.stdout not in zv_status.stdout"
|
||
|
|
delay: 3
|
||
|
|
retries: 30
|
||
|
|
|
||
|
|
when: lookup('env','ACTION') == 'deprovision'
|
||
|
|
|
||
|
|
- set_fact:
|
||
|
|
flag: "Pass"
|
||
|
|
|
||
|
|
rescue:
|
||
|
|
- set_fact:
|
||
|
|
flag: "Fail"
|
||
|
|
|
||
|
|
always:
|
||
|
|
## RECORD END-OF-TEST IN e2e RESULT CR
|
||
|
|
- include_tasks: /e2e-tests/hack/update_e2e_result_resource.yml
|
||
|
|
vars:
|
||
|
|
status: 'EOT'
|