- hosts: localhost
  connection: local
  gather_facts: False

  vars_files:
    - test_vars.yml
    
  tasks:
    - block:

          ## Generating the testname for zfs volume properties verify 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 zvolume name
            shell: >
              kubectl get pvc {{ pvc_name }} -n {{ app_ns }} --no-headers
              -o custom-columns=:.spec.volumeName
            args: 
              executable: /bin/bash
            register: zvol_name

          - name: Record the zvolume name
            set_fact:
              zv_name: "{{ zvol_name.stdout }}"

          - name: Get the storage class name used to create volume
            shell: >
              kubectl get pvc {{ pvc_name }} -n {{ app_ns }} --no-headers
              -o custom-columns=:.spec.storageClassName
            args: 
              executable: /bin/bash
            register: stg_class_name

          - name: Record the storage class name
            set_fact:
              sc_name: "{{ stg_class_name.stdout }}"

          - name: Get the value of compression parameter from the storage class
            shell: >
              kubectl get sc {{ sc_name }} --no-headers 
              -o custom-columns=:.parameters.compression
            args:
              executable: /bin/bash
            register: compression_parameter

          - name: Compare this value with the compression field in zvolume
            shell: > 
              kubectl get zv {{ zv_name }} -n {{ zfs_operator_ns }} --no-headers
              -o custom-columns=:.spec.compression
            args: 
              executable: /bin/bash
            register: result
            failed_when: compression_parameter.stdout != result.stdout
            
          - name: Get the value of dedup parameter from the storage class
            shell: >
              kubectl get sc {{ sc_name }} --no-headers
              -o custom-columns=:.parameters.dedup
            args:
              executable: /bin/bash
            register: dedup_parameter

          - name: Compare this value with the dedup field in zvolume
            shell: > 
              kubectl get zv {{ zv_name }} -n {{ zfs_operator_ns }} --no-headers
              -o custom-columns=:.spec.dedup
            args: 
              executable: /bin/bash
            register: result
            failed_when: dedup_parameter.stdout != result.stdout

          - name: Get the file system type to be created on application mount from the storage class
            shell: >
              kubectl get sc {{ sc_name }} --no-headers
              -o custom-columns=:.parameters.fstype
            args:
              executable: /bin/bash
            register: fstype_parameter

          - name: Compare this value with the fstype field in zvolume
            shell: > 
              kubectl get zv {{ zv_name }} -n {{ zfs_operator_ns }} --no-headers
              -o custom-columns=:.spec.fsType
            args: 
              executable: /bin/bash
            register: result  
            failed_when: fstype_parameter.stdout != result.stdout          
         
          - block:

            - name: Get the value of recordsize from the storage class when fstype is zfs
              shell: >
                kubectl get sc {{ sc_name }} --no-headers
                -o custom-columns=:.parameters.recordsize
              args:
                executable: /bin/bash
              register: recordsize_parameter

            - name: Compare this value with the recordsize field in zvolume
              shell: >
                kubectl get zv {{ zv_name }} -n {{ zfs_operator_ns }} --no-headers
                -o custom-columns=:.spec.recordsize
              args: 
                executable: /bin/bash
              register: result
              failed_when: recordsize_parameter.stdout != result.stdout

            when: fstype_parameter.stdout == "zfs"

          - block:

            - name: Get the value of volblocksize from the storage class when fstype is xfs or ext
              shell: >
                kubectl get sc {{ sc_name }} --no-headers
                -o custom-columns=:.parameters.volblocksize
              args:
                executable: /bin/bash
              register: volblocksize_parameter

            - name: Compare this value with the volblocksize field in the zvolume
              shell: >
                kubectl get zv {{ zv_name }} -n {{ zfs_operator_ns }} --no-headers
                -o custom-columns=:.spec.volblocksize
              args:
                executable: /bin/bash
              register: result
              failed_when: volblocksize_parameter.stdout != result.stdout

            when: 
            - fstype_parameter.stdout == "xfs" or fstype_parameter.stdout == "ext4" or
              fstype_parameter.stdout == "ext3" or fstype_parameter.stdout == "ext2" or
              fstype_parameter.stdout == "btrfs"
              
          - 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'           