---
- name: setup network
  cs_network:
    name: "net_nic"
    zone: "{{ cs_common_zone_adv }}"
    network_offering: DefaultSharedNetworkOffering
    network_domain: example.com
    vlan: 1234
    start_ip: 10.100.123.11
    end_ip: 10.100.123.250
    gateway: 10.100.123.1
    netmask: 255.255.255.0
  register: net
- name: verify setup network
  assert:
    that:
    - net is successful
    - net.name == "net_nic"

- name: setup instance
  cs_instance:
    name: "instance-nic-vm"
    template: "{{ cs_common_template }}"
    service_offering: "{{ cs_common_service_offering }}"
    zone: "{{ cs_common_zone_adv }}"
    network: "net_nic"
    state: stopped
  register: instance
- name: verify setup instance
  assert:
    that:
    - instance is successful
    - instance.name == "instance-nic-vm"
    - instance.state == "Stopped"

- name: setup network 2
  cs_network:
    name: "net_nic2"
    zone: "{{ cs_common_zone_adv }}"
    network_offering: DefaultSharedNetworkOffering
    network_domain: example.com
    vlan: 1235
    start_ip: 10.100.124.11
    end_ip: 10.100.124.250
    gateway: 10.100.124.1
    netmask: 255.255.255.0
  register: net
- name: verify setup network 2
  assert:
    that:
    - net is successful
    - net.name == "net_nic2"

- name: setup nic
  cs_instance_nic:
    vm: "instance-nic-vm"
    network: "net_nic2"
    ip_address: 10.100.124.42
    zone: "{{ cs_common_zone_adv }}"
  register: nic
- name: verify test create nic
  assert:
    that:
    - nic is successful
    - nic.ip_address == "10.100.124.42"
    - nic.netmask == "255.255.255.0"
    - nic.network == "net_nic2"
    - nic.vm == "instance-nic-vm"
    - nic.zone == "{{ cs_common_zone_adv }}"
    - nic.mac_address is defined

- name: setup remove secondary ip
  cs_instance_nic_secondaryip:
    vm: "instance-nic-vm"
    network: "net_nic2"
    vm_guest_ip: 10.100.124.43
    zone: "{{ cs_common_zone_adv }}"
    state: absent
  register: sip
- name: verify setup remove secondary ip
  assert:
    that:
    - sip is successful

- name: test add secondary ip in check mode
  cs_instance_nic_secondaryip:
    vm: "instance-nic-vm"
    network: "net_nic2"
    vm_guest_ip: 10.100.124.43
    zone: "{{ cs_common_zone_adv }}"
  check_mode: true
  register: sip
- name: verify test add secondary ip in check mode
  assert:
    that:
    - sip is successful
    - sip is changed
    - sip.network == "net_nic2"
    - sip.vm == "instance-nic-vm"
    - sip.zone == "{{ cs_common_zone_adv }}"

- name: test add secondary ip
  cs_instance_nic_secondaryip:
    vm: "instance-nic-vm"
    network: "net_nic2"
    vm_guest_ip: 10.100.124.43
    zone: "{{ cs_common_zone_adv }}"
  register: sip
- name: verify test add secondary ip
  assert:
    that:
    - sip is successful
    - sip is changed
    - sip.vm_guest_ip == "10.100.124.43"
    - sip.network == "net_nic2"
    - sip.vm == "instance-nic-vm"
    - sip.zone == "{{ cs_common_zone_adv }}"

- name: test add secondary ip idempotence
  cs_instance_nic_secondaryip:
    vm: "instance-nic-vm"
    network: "net_nic2"
    vm_guest_ip: 10.100.124.43
    zone: "{{ cs_common_zone_adv }}"
  register: sip
- name: verify test add secondary ip idempotence
  assert:
    that:
    - sip is successful
    - sip is not changed
    - sip.vm_guest_ip == "10.100.124.43"
    - sip.network == "net_nic2"
    - sip.vm == "instance-nic-vm"
    - sip.zone == "{{ cs_common_zone_adv }}"

- name: test remove secondary ip in check mode
  cs_instance_nic_secondaryip:
    vm: "instance-nic-vm"
    network: "net_nic2"
    vm_guest_ip: 10.100.124.43
    zone: "{{ cs_common_zone_adv }}"
    state: absent
  check_mode: true
  register: sip
- name: verify test remove secondary ip in check mode
  assert:
    that:
    - sip is successful
    - sip is changed
    - sip.vm_guest_ip == "10.100.124.43"
    - sip.network == "net_nic2"
    - sip.vm == "instance-nic-vm"
    - sip.zone == "{{ cs_common_zone_adv }}"

- name: test remove secondary ip
  cs_instance_nic_secondaryip:
    vm: "instance-nic-vm"
    network: "net_nic2"
    vm_guest_ip: 10.100.124.43
    zone: "{{ cs_common_zone_adv }}"
    state: absent
  register: sip
- name: verify test remove secondary ip
  assert:
    that:
    - sip is successful
    - sip is changed
    - sip.vm_guest_ip == "10.100.124.43"
    - sip.network == "net_nic2"
    - sip.vm == "instance-nic-vm"
    - sip.zone == "{{ cs_common_zone_adv }}"

- name: test remove secondary ip idempotence
  cs_instance_nic_secondaryip:
    vm: "instance-nic-vm"
    network: "net_nic2"
    vm_guest_ip: 10.100.124.43
    zone: "{{ cs_common_zone_adv }}"
    state: absent
  register: sip
- name: verify test remove secondary ip idempotence
  assert:
    that:
    - sip is successful
    - sip is not changed
    - sip.network == "net_nic2"
    - sip.vm == "instance-nic-vm"
    - sip.zone == "{{ cs_common_zone_adv }}"

- name: cleanup instance
  cs_instance:
    name: "instance-nic-vm"
    state: expunged
  register: instance
- name: verify cleanup instance
  assert:
    that:
    - instance is successful

- name: cleanup network
  cs_network:
    name: "net_nic"
    zone: "{{ cs_common_zone_adv }}"
    state: absent
  register: net
- name: verify cleanup network
  assert:
    that:
    - net is successful

- name: cleanup network 2
  cs_network:
    name: "net_nic2"
    zone: "{{ cs_common_zone_adv }}"
    state: absent
  register: net
- name: verify cleanup network 2
  assert:
    that:
    - net is successful
