---
- name: setup host is present
  cs_host:
    name: sim
    url: "http://sim/c0-basic/h2"
    cluster: C0-adv
    pod: POD0-adv
    username: root
    password: password
    hypervisor: Simulator
    allocation_state: enabled
    zone: "{{ cs_common_zone_adv }}"
  register: host
- name: verify setup host is present
  assert:
    that:
      - host is successful

- name: setup storage pool is absent
  cs_storage_pool:
    name: "storage_pool_adv"
    zone: "{{ cs_common_zone_adv }}"
    state: absent
  register: sp
- name: verify setup storage pool is absent
  assert:
    that:
      - sp is successful

- name: test fail if missing params
  cs_storage_pool:
  register: sp
  ignore_errors: true
- name: verify results of fail if missing params
  assert:
    that:
      - sp is failed
      - "sp.msg == 'missing required arguments: name'"

- name: test fail if provider unknown
  cs_storage_pool:
    name: "storage_pool_adv"
    zone: "{{ cs_common_zone_adv }}"
    storage_url: rbd://admin:SECRET@ceph-mons.domain/poolname
    provider: DNE
    scope: cluster
    cluster: C0-adv
    pod: POD0-adv
  register: sp
  ignore_errors: true
- name: verify test fail if provider unknown
  assert:
    that:
      - sp is failed
      - "sp.msg == 'Storage provider DNE not found'"

- name: test fail if cluster unknown
  cs_storage_pool:
    name: "storage_pool_adv"
    zone: "{{ cs_common_zone_adv }}"
    storage_url: rbd://admin:SECRET@ceph-mons.domain/poolname
    scope: cluster
    cluster: DNE
    pod: POD0-adv
  register: sp
  ignore_errors: true
- name: verify test fail if cluster unknown
  assert:
    that:
      - sp is failed
      - "sp.msg == 'Cluster DNE not found'"

- name: test fail if pod unknown
  cs_storage_pool:
    name: "storage_pool_adv"
    zone: "{{ cs_common_zone_adv }}"
    storage_url: rbd://admin:SECRET@ceph-mons.domain/poolname
    scope: cluster
    cluster: C0-adv
    pod: DNE
  register: sp
  ignore_errors: true
- name: verify test fail if pod unknown
  assert:
    that:
      - sp is failed
      - "sp.msg == 'Pod DNE not found'"

- name: create storage pool in check mode
  cs_storage_pool:
    name: "storage_pool_adv"
    zone: "{{ cs_common_zone_adv }}"
    storage_url: rbd://admin:SECRET@ceph-mons.domain/poolname
    scope: cluster
    cluster: C0-adv
    pod: POD0-adv
  register: sp
  check_mode: true
- name: verify create storage pool in check mode
  assert:
    that:
      - sp is successful
      - sp is changed

- name: create storage pool
  cs_storage_pool:
    name: "storage_pool_adv"
    zone: "{{ cs_common_zone_adv }}"
    storage_url: rbd://admin:SECRET@ceph-mons.domain/poolname
    scope: cluster
    cluster: C0-adv
    pod: POD0-adv
  register: sp
- name: verify create storage pool
  assert:
    that:
      - sp is successful
      - sp is changed
      - sp.cluster == "C0-adv"
      - sp.pod == "POD0-adv"
      - sp.storage_url == "RBD://ceph-mons.domain/poolname"

- name: create storage pool idempotence
  cs_storage_pool:
    name: "storage_pool_adv"
    zone: "{{ cs_common_zone_adv }}"
    storage_url: rbd://admin:SECRET@ceph-mons.domain/poolname
    cluster: C0-adv
    pod: POD0-adv
  register: sp
- name: verify create storage pool idempotence
  assert:
    that:
      - sp is successful
      - sp is not changed
      - sp.cluster == "C0-adv"
      - sp.pod == "POD0-adv"
      - sp.storage_url == "RBD://ceph-mons.domain/poolname"

- name: disable storage pool in check mode
  cs_storage_pool:
    name: "storage_pool_adv"
    zone: "{{ cs_common_zone_adv }}"
    storage_url: rbd://admin:SECRET@ceph-mons.domain/poolname
    cluster: C0-adv
    pod: POD0-adv
    allocation_state: disabled
  check_mode: true
  register: sp
- name: verify disable storage pool in check mode
  assert:
    that:
      - sp is successful
      - sp is changed
      - sp.allocation_state == 'enabled'
      - sp.cluster == "C0-adv"
      - sp.pod == "POD0-adv"
      - sp.storage_url == "RBD://ceph-mons.domain/poolname"

- name: disable storage pool
  cs_storage_pool:
    name: "storage_pool_adv"
    zone: "{{ cs_common_zone_adv }}"
    storage_url: rbd://admin:SECRET@ceph-mons.domain/poolname
    scope: cluster
    cluster: C0-adv
    pod: POD0-adv
    allocation_state: disabled
  register: sp
- name: verify disable storage pool
  assert:
    that:
      - sp is successful
      - sp is changed
      - sp.allocation_state == 'disabled'
      - sp.cluster == "C0-adv"
      - sp.pod == "POD0-adv"
      - sp.storage_url == "RBD://ceph-mons.domain/poolname"

- name: disable storage pool idempotence
  cs_storage_pool:
    name: "storage_pool_adv"
    zone: "{{ cs_common_zone_adv }}"
    storage_url: rbd://admin:SECRET@ceph-mons.domain/poolname
    scope: cluster
    cluster: C0-adv
    pod: POD0-adv
    allocation_state: disabled
  register: sp
- name: verify disable storage pool idempotence
  assert:
    that:
      - sp is successful
      - sp is not changed
      - sp.allocation_state == 'disabled'
      - sp.cluster == "C0-adv"
      - sp.pod == "POD0-adv"
      - sp.storage_url == "RBD://ceph-mons.domain/poolname"

- name: update while storage pool disabled in check mode
  cs_storage_pool:
    name: "storage_pool_adv"
    zone: "{{ cs_common_zone_adv }}"
    storage_url: rbd://admin:SECRET@ceph-mons.domain/poolname
    scope: cluster
    cluster: C0-adv
    pod: POD0-adv
    storage_tags:
      - eco
      - ssd
  check_mode: true
  register: sp
- name: verify update while storage pool disabled in check mode
  assert:
    that:
      - sp is successful
      - sp is changed
      - sp.allocation_state == 'disabled'
      - sp.storage_tags == []
      - sp.cluster == "C0-adv"
      - sp.pod == "POD0-adv"
      - sp.storage_url == "RBD://ceph-mons.domain/poolname"

- name: update while storage pool disabled
  cs_storage_pool:
    name: "storage_pool_adv"
    zone: "{{ cs_common_zone_adv }}"
    storage_url: rbd://admin:SECRET@ceph-mons.domain/poolname
    scope: cluster
    cluster: C0-adv
    pod: POD0-adv
    storage_tags:
      - eco
      - ssd
  register: sp
- name: verify update while storage pool disabled
  assert:
    that:
      - sp is successful
      - sp is changed
      - sp.allocation_state == 'disabled'
      - sp.storage_tags == ['eco', 'ssd']
      - sp.cluster == "C0-adv"
      - sp.pod == "POD0-adv"
      - sp.storage_url == "RBD://ceph-mons.domain/poolname"

- name: update while storage pool disabled idempotence
  cs_storage_pool:
    name: "storage_pool_adv"
    zone: "{{ cs_common_zone_adv }}"
    storage_url: rbd://admin:SECRET@ceph-mons.domain/poolname
    scope: cluster
    cluster: C0-adv
    pod: POD0-adv
    storage_tags:
      - eco
      - ssd
  register: sp
- name: verify update while storage pool disabled idempotence
  assert:
    that:
      - sp is successful
      - sp is not changed
      - sp.allocation_state == 'disabled'
      - sp.storage_tags == ['eco', 'ssd']
      - sp.cluster == "C0-adv"
      - sp.pod == "POD0-adv"
      - sp.storage_url == "RBD://ceph-mons.domain/poolname"

- name: put storage in maintenance pool in check mode
  cs_storage_pool:
    name: "storage_pool_adv"
    zone: "{{ cs_common_zone_adv }}"
    storage_url: rbd://admin:SECRET@ceph-mons.domain/poolname
    scope: cluster
    cluster: C0-adv
    pod: POD0-adv
    allocation_state: maintenance
  check_mode: true
  register: sp
- name: verify put storage in maintenance pool in check mode
  assert:
    that:
      - sp is successful
      - sp is changed
      - sp.allocation_state == 'disabled'
      - sp.cluster == "C0-adv"
      - sp.pod == "POD0-adv"
      - sp.storage_url == "RBD://ceph-mons.domain/poolname"

- name: put storage in maintenance pool
  cs_storage_pool:
    name: "storage_pool_adv"
    zone: "{{ cs_common_zone_adv }}"
    storage_url: rbd://admin:SECRET@ceph-mons.domain/poolname
    scope: cluster
    cluster: C0-adv
    pod: POD0-adv
    allocation_state: maintenance
  register: sp
- name: verify put storage in maintenance pool
  assert:
    that:
      - sp is successful
      - sp is changed
      - sp.allocation_state == 'maintenance'
      - sp.cluster == "C0-adv"
      - sp.pod == "POD0-adv"
      - sp.storage_url == "RBD://ceph-mons.domain/poolname"

- name: put storage in maintenance pool idempotence
  cs_storage_pool:
    name: "storage_pool_adv"
    zone: "{{ cs_common_zone_adv }}"
    storage_url: rbd://admin:SECRET@ceph-mons.domain/poolname
    scope: cluster
    cluster: C0-adv
    pod: POD0-adv
    allocation_state: maintenance
  register: sp
- name: verify put storage in maintenance pool idempotence
  assert:
    that:
      - sp is successful
      - sp is not changed
      - sp.allocation_state == 'maintenance'
      - sp.cluster == "C0-adv"
      - sp.pod == "POD0-adv"
      - sp.storage_url == "RBD://ceph-mons.domain/poolname"

- name: update while in maintenance pool
  cs_storage_pool:
    name: "storage_pool_adv"
    zone: "{{ cs_common_zone_adv }}"
    storage_url: rbd://admin:SECRET@ceph-mons.domain/poolname
    scope: cluster
    cluster: C0-adv
    pod: POD0-adv
    storage_tag: perf
  register: sp
- name: verify update while in maintenance pool
  assert:
    that:
      - sp is successful
      - sp is changed
      - sp.allocation_state == 'maintenance'
      - sp.cluster == "C0-adv"
      - sp.pod == "POD0-adv"
      - sp.storage_url == "RBD://ceph-mons.domain/poolname"
      - sp.storage_tags == ['perf']

- name: remove storage pool in check mode
  cs_storage_pool:
    name: "storage_pool_adv"
    zone: "{{ cs_common_zone_adv }}"
    state: absent
  register: sp
  check_mode: true
- name: verify remove storage pool in check mode
  assert:
    that:
      - sp is successful
      - sp is changed
      - sp.cluster == "C0-adv"
      - sp.pod == "POD0-adv"
      - sp.storage_url == "RBD://ceph-mons.domain/poolname"

- name: remove storage pool
  cs_storage_pool:
    name: "storage_pool_adv"
    zone: "{{ cs_common_zone_adv }}"
    state: absent
  register: sp
- name: verify remove storage pool
  assert:
    that:
      - sp is successful
      - sp is changed
      - sp.cluster == "C0-adv"
      - sp.pod == "POD0-adv"
      - sp.storage_url == "RBD://ceph-mons.domain/poolname"

- name: remove storage pool idempotence
  cs_storage_pool:
    name: "storage_pool_adv"
    zone: "{{ cs_common_zone_adv }}"
    state: absent
  register: sp
- name: verify remove storage pool idempotence
  assert:
    that:
      - sp is successful
      - sp is not changed

- name: create storage pool in maintenance
  cs_storage_pool:
    name: "storage_pool_adv"
    zone: "{{ cs_common_zone_adv }}"
    storage_url: rbd://admin:SECRET@ceph-mons.domain/poolname
    scope: cluster
    cluster: C0-adv
    pod: POD0-adv
    allocation_state: maintenance
  register: sp
- name: verify create storage pool in maintenance
  assert:
    that:
      - sp is successful
      - sp is changed
      - sp.allocation_state == 'maintenance'
      - sp.cluster == "C0-adv"
      - sp.pod == "POD0-adv"
      - sp.storage_url == "RBD://ceph-mons.domain/poolname"

- name: remove storage pool in maintenance
  cs_storage_pool:
    name: "storage_pool_adv"
    zone: "{{ cs_common_zone_adv }}"
    state: absent
  register: sp
- name: verify storage pool in maintenance
  assert:
    that:
      - sp is successful
      - sp is changed
      - sp.allocation_state == 'maintenance'
      - sp.cluster == "C0-adv"
      - sp.pod == "POD0-adv"
      - sp.storage_url == "RBD://ceph-mons.domain/poolname"

- name: create storage pool disabled
  cs_storage_pool:
    name: "storage_pool_adv"
    zone: "{{ cs_common_zone_adv }}"
    storage_url: rbd://admin:SECRET@ceph-mons.domain/poolname
    scope: cluster
    cluster: C0-adv
    pod: POD0-adv
    allocation_state: disabled
  register: sp
- name: verify create storage pool in disabled
  assert:
    that:
      - sp is successful
      - sp is changed
      - sp.allocation_state == 'disabled'
      - sp.cluster == "C0-adv"
      - sp.pod == "POD0-adv"
      - sp.storage_url == "RBD://ceph-mons.domain/poolname"

- name: verify remove disabled storag e pool
  cs_storage_pool:
    name: "storage_pool_adv"
    zone: "{{ cs_common_zone_adv }}"
    state: absent
  register: sp
- name: verify remove disabled storage pool
  assert:
    that:
      - sp is successful
      - sp is changed
      - sp.allocation_state == 'disabled'
      - sp.cluster == "C0-adv"
      - sp.pod == "POD0-adv"
      - sp.storage_url == "RBD://ceph-mons.domain/poolname"
