mirror of
https://github.com/TECHNOFAB11/zfs-localpv.git
synced 2025-12-12 22:40:12 +01:00
248 lines
8.5 KiB
YAML
248 lines
8.5 KiB
YAML
|
|
- hosts: localhost
|
||
|
|
connection: local
|
||
|
|
gather_facts: False
|
||
|
|
|
||
|
|
vars_files:
|
||
|
|
- test_vars.yml
|
||
|
|
|
||
|
|
tasks:
|
||
|
|
- block:
|
||
|
|
|
||
|
|
## Generating the testname for zfspv raw block volume 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: Create the namespace for block-volume of zfspv
|
||
|
|
shell: >
|
||
|
|
kubectl create ns {{ app_ns }}
|
||
|
|
args:
|
||
|
|
executable: /bin/bash
|
||
|
|
|
||
|
|
- name: Update the busybox application template with the test specific values
|
||
|
|
template:
|
||
|
|
src: busybox.j2
|
||
|
|
dest: busybox.yml
|
||
|
|
|
||
|
|
- name: Deploy the application using block volume pvc
|
||
|
|
shell: >
|
||
|
|
kubectl create -f busybox.yml -n {{ app_ns }}
|
||
|
|
args:
|
||
|
|
executable: /bin/bash
|
||
|
|
|
||
|
|
- name: Check if the block volume PVC is bound
|
||
|
|
shell: >
|
||
|
|
kubectl get pvc block-vol-pvc -n {{ app_ns }}
|
||
|
|
--no-headers -o custom-columns=:.status.phase
|
||
|
|
args:
|
||
|
|
executable: /bin/bash
|
||
|
|
register: pvc_status
|
||
|
|
until: "'Bound' in pvc_status.stdout"
|
||
|
|
delay: 5
|
||
|
|
retries: 30
|
||
|
|
|
||
|
|
- name: Get the zvolume name
|
||
|
|
shell: kubectl get pvc block-vol-pvc -n {{ app_ns }} -o custom-columns=:.spec.volumeName
|
||
|
|
args:
|
||
|
|
executable: /bin/bash
|
||
|
|
register: zv_name
|
||
|
|
|
||
|
|
- name: Get the application pod name
|
||
|
|
shell: >
|
||
|
|
kubectl get pod -n {{ app_ns }} -l app=raw-block-vol
|
||
|
|
--no-headers -o custom-columns=:.metadata.name
|
||
|
|
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
|
||
|
|
register: pod_status
|
||
|
|
until: "'Running' in pod_status.stdout"
|
||
|
|
delay: 5
|
||
|
|
retries: 50
|
||
|
|
|
||
|
|
- name: Create some test data into the raw block device and take the md5sum of data
|
||
|
|
shell: >
|
||
|
|
kubectl exec -ti {{ app_pod_name.stdout }} -n {{ app_ns }}
|
||
|
|
-- sh -c "{{ item }}"
|
||
|
|
args:
|
||
|
|
executable: /bin/bash
|
||
|
|
register: result
|
||
|
|
failed_when: "result.rc != 0"
|
||
|
|
with_items:
|
||
|
|
- "dd if=/dev/urandom of=/dev/sdc bs=4k count=262144"
|
||
|
|
- "md5sum /dev/sdc > /busybox/pre-md5"
|
||
|
|
|
||
|
|
- name: Restart the busybox application
|
||
|
|
shell: kubectl delete pod {{ app_pod_name.stdout }} -n {{ app_ns }}
|
||
|
|
args:
|
||
|
|
executable: /bin/bash
|
||
|
|
|
||
|
|
- name: Get the application pod name after restart
|
||
|
|
shell: >
|
||
|
|
kubectl get pod -n {{ app_ns }} -l app=raw-block-vol
|
||
|
|
--no-headers -o custom-columns=:.metadata.name
|
||
|
|
args:
|
||
|
|
executable: /bin/bash
|
||
|
|
register: new_pod_name
|
||
|
|
|
||
|
|
- name: Check if the application pod is in running state
|
||
|
|
shell: >
|
||
|
|
kubectl get pod {{ new_pod_name.stdout }} -n {{ app_ns }}
|
||
|
|
--no-headers -o custom-columns=:.status.phase
|
||
|
|
register: pod_status
|
||
|
|
until: "'Running' in pod_status.stdout"
|
||
|
|
delay: 5
|
||
|
|
retries: 50
|
||
|
|
|
||
|
|
- name: Again take the md5sum of the data after restarting the application pod
|
||
|
|
shell: >
|
||
|
|
kubectl exec -ti {{ new_pod_name.stdout }} -n {{ app_ns }}
|
||
|
|
-- sh -c "md5sum /dev/sdc > /busybox/post-md5"
|
||
|
|
args:
|
||
|
|
executable: /bin/bash
|
||
|
|
register: result
|
||
|
|
failed_when: "result.rc != 0"
|
||
|
|
|
||
|
|
- name: Verify whether data is consistence after restarting the application pod
|
||
|
|
shell: >
|
||
|
|
kubectl exec -ti {{ new_pod_name.stdout }} -n {{ app_ns }}
|
||
|
|
-- sh -c "diff /busybox/pre-md5 /busybox/post-md5"
|
||
|
|
args:
|
||
|
|
executable: /bin/bash
|
||
|
|
register: result
|
||
|
|
failed_when: "result.rc != 0 or result.stdout != ''"
|
||
|
|
|
||
|
|
- name: Obtain the mount path for the application
|
||
|
|
shell: >
|
||
|
|
kubectl get pod {{ new_pod_name.stdout }} -n {{ app_ns }}
|
||
|
|
-o custom-columns=:.spec.containers[].volumeMounts[].mountPath --no-headers
|
||
|
|
args:
|
||
|
|
executable: /bin/bash
|
||
|
|
register: mount
|
||
|
|
|
||
|
|
- name: Fetch the Storage from PVC using namespace
|
||
|
|
shell: kubectl get pvc -n {{ app_ns }} -o jsonpath={.items[0].spec.resources.requests.storage}
|
||
|
|
args:
|
||
|
|
executable: /bin/bash
|
||
|
|
register: storage_capacity
|
||
|
|
|
||
|
|
- name: Fetch the alphabet(G,M,m,g) from storage capacity
|
||
|
|
shell: echo "{{ storage_capacity.stdout }}" | grep -o -E '[0-9]+'
|
||
|
|
args:
|
||
|
|
executable: /bin/bash
|
||
|
|
register: value_pvc
|
||
|
|
|
||
|
|
## Here we will resize the volume to double value of present pvc size
|
||
|
|
- set_fact:
|
||
|
|
desired_vol_size: '{{ (value_pvc.stdout | int * 2 | int) | int }}'
|
||
|
|
|
||
|
|
- name: Obtain the PVC spec
|
||
|
|
shell: >
|
||
|
|
kubectl get pvc block-vol-pvc -n {{ app_ns }}
|
||
|
|
--no-headers -o yaml > pvc.yml
|
||
|
|
args:
|
||
|
|
executable: /bin/bash
|
||
|
|
|
||
|
|
- name: Update the desired capacity in PVC spec
|
||
|
|
replace:
|
||
|
|
path: pvc.yml
|
||
|
|
before: 'storageClassName: {{ storage_class }}'
|
||
|
|
regexp: "storage: {{ pvc_size }}"
|
||
|
|
replace: "storage: {{ desired_vol_size }}Gi"
|
||
|
|
|
||
|
|
- name: Configure PVC with the new capacity
|
||
|
|
shell: kubectl apply -f pvc.yml
|
||
|
|
args:
|
||
|
|
executable: /bin/bash
|
||
|
|
register: result
|
||
|
|
failed_when: "result.rc != 0"
|
||
|
|
|
||
|
|
- name: Check if the desired PVC is bound
|
||
|
|
shell: >
|
||
|
|
kubectl get pvc block-vol-pvc -n {{ app_ns }} --no-headers
|
||
|
|
-o custom-columns=:.status.phase
|
||
|
|
args:
|
||
|
|
executable: /bin/bash
|
||
|
|
register: pvc_status
|
||
|
|
failed_when: "'Bound' not in pvc_status.stdout"
|
||
|
|
|
||
|
|
- name: Check if the storage capacity is updated in PVC
|
||
|
|
shell: >
|
||
|
|
kubectl get pvc block-vol-pvc -n {{ app_ns }} --no-headers
|
||
|
|
-o custom-columns=:status.capacity.storage
|
||
|
|
args:
|
||
|
|
executable: /bin/bash
|
||
|
|
register: capacity
|
||
|
|
until: "desired_vol_size in capacity.stdout"
|
||
|
|
delay: 10
|
||
|
|
retries: 50
|
||
|
|
|
||
|
|
## Here we will dump +1Gi data than to previous pvc size
|
||
|
|
- set_fact:
|
||
|
|
value_num: '{{ ( (value_pvc.stdout | int + 1 | int) * 1024) | int }}'
|
||
|
|
|
||
|
|
- name: Dump some more dummy data in the application mount point for using resized volume
|
||
|
|
shell: >
|
||
|
|
kubectl exec -it "{{ new_pod_name.stdout }}" -n "{{ app_ns }}"
|
||
|
|
-- sh -c "cd {{ mount.stdout }} && dd if=/dev/urandom of=volume.txt bs=1024k count={{ value_num }}"
|
||
|
|
args:
|
||
|
|
executable: /bin/bash
|
||
|
|
register: load
|
||
|
|
failed_when: "load.rc != 0"
|
||
|
|
|
||
|
|
- name: Deprovision the busybox application
|
||
|
|
shell: kubectl delete -f busybox.yml -n {{ app_ns }}
|
||
|
|
args:
|
||
|
|
executable: /bin/bash
|
||
|
|
|
||
|
|
- name: Verify that busybox application is successfully deprovisioned
|
||
|
|
shell: kubectl get pods -n {{ app_ns }}
|
||
|
|
args:
|
||
|
|
executable: /bin/bash
|
||
|
|
register: app_pod_status
|
||
|
|
until: "'new_app_pod.stdout' not in app_pod_status.stdout"
|
||
|
|
delay: 5
|
||
|
|
retries:
|
||
|
|
|
||
|
|
- name: Verify that pvc is deleted successfully
|
||
|
|
shell: kubectl get pvc -n {{ app_ns }}
|
||
|
|
args:
|
||
|
|
executable: /bin/bash
|
||
|
|
register: pvc_status
|
||
|
|
until: "'block-vol-pvc' not in pvc_status.stdout"
|
||
|
|
delay: 3
|
||
|
|
retries: 30
|
||
|
|
|
||
|
|
- name: Verify the zvolume is deleted successfully
|
||
|
|
shell: kubectl get zv -n {{ zfs_operator_ns }}
|
||
|
|
args:
|
||
|
|
executable: /bin/bash
|
||
|
|
register: zvol_list
|
||
|
|
until: "'zv_name.stdout' not in zvol_list.stdout"
|
||
|
|
delay: 3
|
||
|
|
retries: 30
|
||
|
|
|
||
|
|
- name: Delete the application namespace
|
||
|
|
shell: kubectl delete ns {{ app_ns }}
|
||
|
|
args:
|
||
|
|
executable: /bin/bash
|
||
|
|
|
||
|
|
- 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'
|