---
- name: setup instance
  cs_instance:
    name: "{{ cs_resource_prefix }}-vm-snapshot"
    template: "{{ test_cs_instance_template }}"
    service_offering: "{{ test_cs_instance_offering_1 }}"
  register: instance
- name: verify create instance
  assert:
    that:
    - instance is successful

- name: ensure no snapshot exists
  cs_vmsnapshot:
    name: "{{ cs_resource_prefix }}_snapshot"
    vm: "{{ cs_resource_prefix }}-vm-snapshot"
    state: absent
  register: snap
- name: verify setup
  assert:
    that:
    - snap is successful

- name: test fail if missing name
  action: cs_vmsnapshot
  register: snap
  ignore_errors: true
- name: verify results of fail if missing params
  assert:
    that:
    - snap is failed
    - 'snap.msg.startswith("missing required arguments: ")'

- name: test create snapshot in check mode
  cs_vmsnapshot:
    name: "{{ cs_resource_prefix }}_snapshot"
    vm: "{{ cs_resource_prefix }}-vm-snapshot"
    snapshot_memory: yes
  register: snap
  check_mode: true
- name: verify test create snapshot in check mode
  assert:
    that:
    - snap is changed

- name: test create snapshot
  cs_vmsnapshot:
    name: "{{ cs_resource_prefix }}_snapshot"
    vm: "{{ cs_resource_prefix }}-vm-snapshot"
    snapshot_memory: yes
  register: snap
- name: verify test create snapshot
  assert:
    that:
    - snap is changed
    - snap.display_name == "{{ cs_resource_prefix }}_snapshot"

- name: test create snapshot idempotence
  cs_vmsnapshot:
    name: "{{ cs_resource_prefix }}_snapshot"
    vm: "{{ cs_resource_prefix }}-vm-snapshot"
    snapshot_memory: yes
  register: snap
- name: verify test create snapshot idempotence
  assert:
    that:
    - snap is not changed
    - snap.display_name == "{{ cs_resource_prefix }}_snapshot"

- name: test revert snapshot in check mode
  cs_vmsnapshot:
    name: "{{ cs_resource_prefix }}_snapshot"
    vm: "{{ cs_resource_prefix }}-vm-snapshot"
    state: revert
  register: snap
  check_mode: true
- name: verify test revert snapshot in check mode
  assert:
    that:
    - snap is changed
    - snap.display_name == "{{ cs_resource_prefix }}_snapshot"

- name: test fail revert unknown snapshot
  cs_vmsnapshot:
    name: "{{ cs_resource_prefix }}_snapshot_unknown"
    vm: "{{ cs_resource_prefix }}-vm-snapshot"
    state: revert
  register: snap
  ignore_errors: true
- name: verify test fail revert unknown snapshot
  assert:
    that:
    - snap is failed
    - snap.msg == "snapshot not found, could not revert VM"

- name: test revert snapshot
  cs_vmsnapshot:
    name: "{{ cs_resource_prefix }}_snapshot"
    vm: "{{ cs_resource_prefix }}-vm-snapshot"
    state: revert
  register: snap
- name: verify test revert snapshot
  assert:
    that:
    - snap is changed
    - snap.display_name == "{{ cs_resource_prefix }}_snapshot"

- name: test remove snapshot in check mode
  cs_vmsnapshot:
    name: "{{ cs_resource_prefix }}_snapshot"
    vm: "{{ cs_resource_prefix }}-vm-snapshot"
    state: absent
  register: snap
  check_mode: true
- name: verify test remove snapshot in check mode
  assert:
    that:
    - snap is changed
    - snap.display_name == "{{ cs_resource_prefix }}_snapshot"

- name: test remove snapshot
  cs_vmsnapshot:
    name: "{{ cs_resource_prefix }}_snapshot"
    vm: "{{ cs_resource_prefix }}-vm-snapshot"
    state: absent
  register: snap
- name: verify test remove snapshot
  assert:
    that:
    - snap is changed
    - snap.display_name == "{{ cs_resource_prefix }}_snapshot"

- name: test remove snapshot idempotence
  cs_vmsnapshot:
    name: "{{ cs_resource_prefix }}_snapshot"
    vm: "{{ cs_resource_prefix }}-vm-snapshot"
    state: absent
  register: snap
- name: verify test remove snapshot idempotence
  assert:
    that:
    - snap is not changed

- name: cleanup instance
  cs_instance:
    name: "{{ cs_resource_prefix }}-vm-snapshot"
    state: expunged
  register: instance
- name: verify destroy instance
  assert:
    that:
    - instance is successful
