---
######################################################################################
# Example : Snapshot  Playbook
######################################################################################
- name: Snapshot Pair Module
  hosts: localhost
  gather_facts: false

  vars_files:
    - ../ansible_vault_vars/ansible_vault_storage_var.yml

  vars:
    # Common connection info for all tasks
    connection_info:
      address: "{{ storage_address }}"
      username: "{{ vault_storage_username }}"
      password: "{{ vault_storage_secret }}"

  tasks:
    ######################################################################################
    # Task Name : Create snapshot pair
    ######################################################################################
    - name: Create snapshot pair
      hitachivantara.vspone_block.vsp.hv_snapshot:
        connection_info: "{{ connection_info }}"
        state: "present"
        spec:
          primary_volume_id: 100
          pool_id: 15
          snapshot_group_name: "snapshot-group-name-1"

      register: result

    - name: Debug the result variable
      ansible.builtin.debug:
        var: result

    ##############################################################################################
    # Task Name : Create snapshot pair with a new consistency group
    ##############################################################################################
    - name: Create snapshot pair with a new consistency group
      hitachivantara.vspone_block.vsp.hv_snapshot:
        connection_info: "{{ connection_info }}"
        state: "present"
        spec:
          primary_volume_id: 100
          pool_id: 15
          snapshot_group_name: "snapshot-group-name-2"
          allocate_new_consistency_group: true
      register: result

    - name: Debug the result variable
      ansible.builtin.debug:
        var: result

    ######################################################################################
    # Task Name : Split snapshot pair
    ######################################################################################
    - name: Split snapshot pair
      hitachivantara.vspone_block.vsp.hv_snapshot:
        connection_info: "{{ connection_info }}"
        state: "split"
        spec:
          primary_volume_id: 100
          mirror_unit_id: 1
      register: result

    - name: Debug the result variable
      ansible.builtin.debug:
        var: result

    ######################################################################################
    # Task Name : Resync snapshot pair
    ######################################################################################
    - name: Resync snapshot pair
      hitachivantara.vspone_block.vsp.hv_snapshot:
        connection_info: "{{ connection_info }}"
        state: "sync"
        spec:
          primary_volume_id: 100
          mirror_unit_id: 1
      register: result

    - name: Debug the result variable
      ansible.builtin.debug:
        var: result

    ######################################################################################
    # Task Name : Create and Auto-Split snapshot pair
    ######################################################################################
    - name: Create and Auto-Split snapshot pair
      hitachivantara.vspone_block.vsp.hv_snapshot:
        connection_info: "{{ connection_info }}"
        state: "split"
        spec:
          primary_volume_id: 100
          pool_id: 1
          snapshot_group_name: "snapshot-group-name-4"
      register: result

    - name: Debug the result variable
      ansible.builtin.debug:
        var: result

    ######################################################################################
    # Task Name : Restore snapshot pair
    ######################################################################################
    - name: Restore snapshot pair
      hitachivantara.vspone_block.vsp.hv_snapshot:
        connection_info: "{{ connection_info }}"
        state: "restore"
        spec:
          primary_volume_id: 100
          mirror_unit_id: 5
      register: result

    - name: Debug the result variable
      ansible.builtin.debug:
        var: result

    ######################################################################################
    # Task Name : Create snapshot pair using existing consistency group
    ######################################################################################
    - name: Create snapshot pair using existing consistency group
      hitachivantara.vspone_block.vsp.hv_snapshot:
        connection_info: "{{ connection_info }}"
        state: "present"
        spec:
          primary_volume_id: 100
          pool_id: 1
          snapshot_group_name: "snapshot-group-name"
          is_data_reduction_force_copy: true
      register: result

    - name: Debug the result variable
      ansible.builtin.debug:
        var: result

    ######################################################################################
    # Task Name : Delete snapshot pair
    ######################################################################################
    - name: Delete snapshot pair
      hitachivantara.vspone_block.vsp.hv_snapshot:
        connection_info: "{{ connection_info }}"
        state: "absent"
        spec:
          primary_volume_id: 100
          mirror_unit_id: 5
      register: result

    - name: Debug the result variable
      ansible.builtin.debug:
        var: result

    ######################################################################################
    # Task Name : Delete Thin Image pairs by snapshot tree
    ######################################################################################
    - name: Delete Thin Image pairs by snapshot tree
      hitachivantara.vspone_block.vsp.hv_snapshot:
        connection_info: "{{ connection_info }}"
        state: "absent"
        spec:
          primary_volume_id: 100
          should_delete_tree: true
      register: result

    - name: Debug the result variable
      ansible.builtin.debug:
        var: result

    ######################################################################################
    # Task Name : Clone snapshot pair / Thin Image pair
    ######################################################################################
    - name: Clone snapshot pair
      hitachivantara.vspone_block.vsp.hv_snapshot:
        connection_info: "{{ connection_info }}"
        state: "clone"
        spec:
          primary_volume_id: 100
          mirror_unit_id: 5
      register: result

    - name: Debug the result variable
      ansible.builtin.debug:
        var: result

    ######################################################################################
    # Task Name : Create and clone snapshot pair
    ######################################################################################
    - name: Create and clone snapshot pair
      hitachivantara.vspone_block.vsp.hv_snapshot:
        connection_info: "{{ connection_info }}"
        state: "present"
        spec:
          primary_volume_id: 100
          pool_id: 5
          snapshot_group_name: "snapshot-group-name-1"
          is_clone: true
      register: result

    - name: Debug the result variable
      ansible.builtin.debug:
        var: result

    ######################################################################################
    # Task Name : Create and clone snapshot pair with copy speed and clones automation
    ######################################################################################
    - name: Create and clone snapshot pair with copy speed and clones automation
      hitachivantara.vspone_block.vsp.hv_snapshot:
        connection_info: "{{ connection_info }}"
        state: "present"
        spec:
          primary_volume_id: 100
          pool_id: 5
          snapshot_group_name: "snapshot-group-name-1"
          is_clone: true
          copy_speed: "FAST"
          clones_automation: true
      register: result

    - name: Debug the result variable
      ansible.builtin.debug:
        var: result

    ######################################################################################
    # Task Name : Create floating snapshot pair
    ######################################################################################
    - name: Create floating snapshot pair
      hitachivantara.vspone_block.vsp.hv_snapshot:
        connection_info: "{{ connection_info }}"
        state: "present"
        spec:
          primary_volume_id: 100
          secondary_volume_id: -1
          pool_id: 5
          snapshot_group_name: "snapshot-group-name-1"
          mirror_unit_id: 4
      register: result

    - name: Debug the result variable
      ansible.builtin.debug:
        var: result

    ######################################################################################
    # Task Name : Assign floating snapshot pair
    ######################################################################################
    - name: Assign floating snapshot pair
      hitachivantara.vspone_block.vsp.hv_snapshot:
        connection_info: "{{ connection_info }}"
        state: "present"
        spec:
          primary_volume_id: 100
          secondary_volume_id: 200
          mirror_unit_id: 1
      register: result

    - name: Debug the result variable
      ansible.builtin.debug:
        var: result

    ######################################################################################
    # Task Name : Unassign floating snapshot pair
    ######################################################################################
    - name: Unassign floating snapshot pair
      hitachivantara.vspone_block.vsp.hv_snapshot:
        connection_info: "{{ connection_info }}"
        state: "present"
        spec:
          primary_volume_id: 100
          secondary_volume_id: -1
          mirror_unit_id: 1
      register: result

    - name: Debug the result variable
      ansible.builtin.debug:
        var: result

    ######################################################################################
    # Task Name : Create Thin Image Advanced snapshot pair
    ######################################################################################
    - name: Create Thin Image Advanced snapshot pair
      hitachivantara.vspone_block.vsp.hv_snapshot:
        connection_info: "{{ connection_info }}"
        state: "present"
        spec:
          snapshot_group_name: "ssg_test_033001"
          primary_volume_id: 3111
          secondary_volume_id: 3112
          pool_id: 32
          is_data_reduction_force_copy: true
          can_cascade: true
      register: result

    - name: Debug the result variable
      ansible.builtin.debug:
        var: result

    ######################################################################################
    # Task Name : Set retention period of a existing snapshot pair
    ######################################################################################
    - name: Set retention period of a existing snapshot pair
      hitachivantara.vspone_block.vsp.hv_snapshot:
        connection_info: "{{ connection_info }}"
        state: "present"
        spec:
          primary_volume_id: 3111
          mirror_unit_id: 1
          retention_period: 30
      register: result

    - name: Debug the result variable
      ansible.builtin.debug:
        var: result

    ######################################################################################
    # Task Name : Set retention period of snapshot pair after split
    ######################################################################################
    - name: Set retention period of snapshot pair after split
      hitachivantara.vspone_block.vsp.hv_snapshot:
        connection_info: "{{ connection_info }}"
        state: "split"
        spec:
          primary_volume_id: 3111
          mirror_unit_id: 1
          retention_period: 30
      register: result

    - name: Debug the result variable
      ansible.builtin.debug:
        var: result

    ######################################################################################
    # Task Name : Set retention period of snapshot pair with auto split
    ######################################################################################
    - name: Set retention period of snapshot pair with auto split
      hitachivantara.vspone_block.vsp.hv_snapshot:
        connection_info: "{{ connection_info }}"
        state: "split"
        spec:
          primary_volume_id: 322
          retention_period: 60
          pool_id: 1
          snapshot_group_name: "snapshot-group-name-1"
      register: result

    - name: Debug the result variable
      ansible.builtin.debug:
        var: result

    ######################################################################################
    # Task Name : Deleting garbage data of all Thin Image pairs in a snapshot tree
    ######################################################################################
    - name: Deleting garbage data of all Thin Image pairs in a snapshot tree
      hitachivantara.vspone_block.vsp.hv_snapshot:
        connection_info: "{{ connection_info }}"
        state: "defragment"
        spec:
          primary_volume_id: 100
          operation_type: "start"
      register: result

    - name: Debug the result variable
      ansible.builtin.debug:
        var: result
