--- - name: setup instance to be absent cs_instance: name: "{{ cs_resource_prefix }}-vm-{{ instance_number }}" state: expunged register: instance - name: verify instance to be absent assert: that: - instance is successful - name: test create instance in check mode cs_instance: name: "{{ cs_resource_prefix }}-vm-{{ instance_number }}" template: "{{ test_cs_instance_template }}" service_offering: "{{ test_cs_instance_offering_1 }}" affinity_group: "{{ cs_resource_prefix }}-ag" security_group: "{{ cs_resource_prefix }}-sg" ssh_key: "{{ cs_resource_prefix }}-sshkey" user_data: | #cloud-config package_upgrade: true packages: - tmux tags: [] register: instance check_mode: true - name: verify create instance in check mode assert: that: - instance is successful - instance is changed - name: test create instance cs_instance: name: "{{ cs_resource_prefix }}-vm-{{ instance_number }}" template: "{{ test_cs_instance_template }}" service_offering: "{{ test_cs_instance_offering_1 }}" affinity_group: "{{ cs_resource_prefix }}-ag" security_group: "{{ cs_resource_prefix }}-sg" ssh_key: "{{ cs_resource_prefix }}-sshkey" user_data: | #cloud-config package_upgrade: true packages: - tmux tags: [] register: instance - name: verify create instance assert: that: - instance is successful - instance is changed - instance.name == "{{ cs_resource_prefix }}-vm-{{ instance_number }}" - instance.display_name == "{{ cs_resource_prefix }}-vm-{{ instance_number }}" - instance.service_offering == "{{ test_cs_instance_offering_1 }}" - instance.state == "Running" - instance.ssh_key == "{{ cs_resource_prefix }}-sshkey" - not instance.tags - name: test create instance idempotence cs_instance: name: "{{ cs_resource_prefix }}-vm-{{ instance_number }}" template: "{{ test_cs_instance_template }}" service_offering: "{{ test_cs_instance_offering_1 }}" affinity_group: "{{ cs_resource_prefix }}-ag" security_group: "{{ cs_resource_prefix }}-sg" ssh_key: "{{ cs_resource_prefix }}-sshkey" user_data: | #cloud-config package_upgrade: true packages: - tmux tags: [] register: instance - name: verify create instance idempotence assert: that: - instance is successful - instance is not changed - instance.name == "{{ cs_resource_prefix }}-vm-{{ instance_number }}" - instance.display_name == "{{ cs_resource_prefix }}-vm-{{ instance_number }}" - instance.service_offering == "{{ test_cs_instance_offering_1 }}" - instance.state == "Running" - instance.ssh_key == "{{ cs_resource_prefix }}-sshkey" - not instance.tags - name: gather host facts of running instance cs_instance_facts: name: "{{ cs_resource_prefix }}-vm-{{ instance_number }}" - name: test running instance not updated in check mode cs_instance: name: "{{ cs_resource_prefix }}-vm-{{ instance_number }}" service_offering: "{{ test_cs_instance_offering_2 }}" register: instance check_mode: true - name: verify running instance not updated in check mode assert: that: - instance is successful - instance is not changed - instance.name == "{{ cs_resource_prefix }}-vm-{{ instance_number }}" - instance.display_name == "{{ cs_resource_prefix }}-vm-{{ instance_number }}" - instance.service_offering == "{{ test_cs_instance_offering_1 }}" - instance.state == "Running" - name: test running instance not updated cs_instance: name: "{{ cs_resource_prefix }}-vm-{{ instance_number }}" service_offering: "{{ test_cs_instance_offering_2 }}" register: instance - name: verify running instance not updated assert: that: - instance is successful - instance is not changed - instance.name == "{{ cs_resource_prefix }}-vm-{{ instance_number }}" - instance.display_name == "{{ cs_resource_prefix }}-vm-{{ instance_number }}" - instance.service_offering == "{{ test_cs_instance_offering_1 }}" - instance.state == "Running" - name: test stopping instance in check mode cs_instance: name: "{{ cs_resource_prefix }}-vm-{{ instance_number }}" state: stopped register: instance check_mode: true - name: verify stopping instance in check mode assert: that: - instance is successful - instance is changed - instance.name == "{{ cs_resource_prefix }}-vm-{{ instance_number }}" - instance.display_name == "{{ cs_resource_prefix }}-vm-{{ instance_number }}" - instance.service_offering == "{{ test_cs_instance_offering_1 }}" - instance.state == "Running" - name: test stopping instance cs_instance: name: "{{ cs_resource_prefix }}-vm-{{ instance_number }}" state: stopped register: instance - name: verify stopping instance assert: that: - instance is successful - instance is changed - instance.name == "{{ cs_resource_prefix }}-vm-{{ instance_number }}" - instance.display_name == "{{ cs_resource_prefix }}-vm-{{ instance_number }}" - instance.service_offering == "{{ test_cs_instance_offering_1 }}" - instance.state == "Stopped" - name: test stopping instance idempotence cs_instance: name: "{{ cs_resource_prefix }}-vm-{{ instance_number }}" state: stopped register: instance - name: verify stopping instance idempotence assert: that: - instance is successful - instance is not changed - instance.state == "Stopped" - name: test updating stopped instance in check mode cs_instance: name: "{{ cs_resource_prefix }}-vm-{{ instance_number }}" display_name: "{{ cs_resource_prefix }}-display-{{ instance_number }}" service_offering: "{{ test_cs_instance_offering_2 }}" register: instance check_mode: true - name: verify updating stopped instance in check mode assert: that: - instance is successful - instance is changed - instance.name == "{{ cs_resource_prefix }}-vm-{{ instance_number }}" - instance.display_name == "{{ cs_resource_prefix }}-vm-{{ instance_number }}" - instance.service_offering == "{{ test_cs_instance_offering_1 }}" - instance.state == "Stopped" - name: test updating stopped instance cs_instance: name: "{{ cs_resource_prefix }}-vm-{{ instance_number }}" display_name: "{{ cs_resource_prefix }}-display-{{ instance_number }}" service_offering: "{{ test_cs_instance_offering_2 }}" register: instance - name: verify updating stopped instance assert: that: - instance is successful - instance is changed - instance.name == "{{ cs_resource_prefix }}-vm-{{ instance_number }}" - instance.display_name == "{{ cs_resource_prefix }}-display-{{ instance_number }}" - instance.service_offering == "{{ test_cs_instance_offering_2 }}" - instance.state == "Stopped" - name: test updating stopped instance idempotence cs_instance: name: "{{ cs_resource_prefix }}-vm-{{ instance_number }}" display_name: "{{ cs_resource_prefix }}-display-{{ instance_number }}" service_offering: "{{ test_cs_instance_offering_2 }}" register: instance - name: verify updating stopped instance idempotence assert: that: - instance is successful - instance is not changed - instance.name == "{{ cs_resource_prefix }}-vm-{{ instance_number }}" - instance.display_name == "{{ cs_resource_prefix }}-display-{{ instance_number }}" - instance.service_offering == "{{ test_cs_instance_offering_2 }}" - instance.state == "Stopped" - name: setup zone facts cs_zone_facts: name: "{{ cs_common_zone_basic }}" - name: setup find the host name shell: cs listHosts type=routing zoneid="{{ cloudstack_zone.id }}" args: chdir: "{{ playbook_dir }}" register: host - name: host convert from json set_fact: host_json: "{{ host.stdout | from_json }}" - name: select a host on which the instance is not running on set_fact: host: "{{ host_json | json_query('host[?name!=`' + cloudstack_instance.host + '`] | [0]') }}" - name: test starting instance in check mode cs_instance: name: "{{ cs_resource_prefix }}-vm-{{ instance_number }}" host: "{{ host.name }}" state: started register: instance check_mode: true - name: verify starting instance in check mode assert: that: - instance is successful - instance is changed - instance.name == "{{ cs_resource_prefix }}-vm-{{ instance_number }}" - instance.display_name == "{{ cs_resource_prefix }}-display-{{ instance_number }}" - instance.service_offering == "{{ test_cs_instance_offering_2 }}" - instance.host is not defined - instance.state == "Stopped" - name: test starting instance cs_instance: name: "{{ cs_resource_prefix }}-vm-{{ instance_number }}" host: "{{ host.name }}" state: started register: instance - name: verify starting instance assert: that: - instance is successful - instance is changed - instance.name == "{{ cs_resource_prefix }}-vm-{{ instance_number }}" - instance.display_name == "{{ cs_resource_prefix }}-display-{{ instance_number }}" - instance.service_offering == "{{ test_cs_instance_offering_2 }}" # TODO: this fails randomly, cloudstack issue? #- instance.host == "{{ host.name }}" - instance.state == "Running" - name: test starting instance idempotence cs_instance: name: "{{ cs_resource_prefix }}-vm-{{ instance_number }}" host: "{{ host.name }}" state: started register: instance - name: verify starting instance idempotence assert: that: - instance is successful - instance is not changed - instance.name == "{{ cs_resource_prefix }}-vm-{{ instance_number }}" - instance.display_name == "{{ cs_resource_prefix }}-display-{{ instance_number }}" - instance.service_offering == "{{ test_cs_instance_offering_2 }}" # TODO: this fails randomly, cloudstack issue? #- instance.host == "{{ host.name }}" - instance.state == "Running" - name: select a host on which the instance is not running on set_fact: host: "{{ host_json | json_query('host[?name!=`' + instance.host + '`] | [0]') }}" - name: test force update running instance in check mode cs_instance: name: "{{ cs_resource_prefix }}-vm-{{ instance_number }}" service_offering: "{{ test_cs_instance_offering_1 }}" host: "{{ host.name }}" force: true register: instance check_mode: true - name: verify force update running instance in check mode assert: that: - instance is successful - instance is changed - instance.name == "{{ cs_resource_prefix }}-vm-{{ instance_number }}" - instance.display_name == "{{ cs_resource_prefix }}-display-{{ instance_number }}" - instance.service_offering == "{{ test_cs_instance_offering_2 }}" - instance.host != "{{ host.name }}" - instance.state == "Running" - name: test force update running instance cs_instance: name: "{{ cs_resource_prefix }}-vm-{{ instance_number }}" service_offering: "{{ test_cs_instance_offering_1 }}" host: "{{ host.name }}" force: true register: instance - name: verify force update running instance assert: that: - instance is successful - instance is changed - instance.name == "{{ cs_resource_prefix }}-vm-{{ instance_number }}" - instance.display_name == "{{ cs_resource_prefix }}-display-{{ instance_number }}" - instance.service_offering == "{{ test_cs_instance_offering_1 }}" - instance.host == "{{ host.name }}" - instance.state == "Running" - name: test force update running instance idempotence cs_instance: name: "{{ cs_resource_prefix }}-vm-{{ instance_number }}" service_offering: "{{ test_cs_instance_offering_1 }}" host: "{{ host.name }}" force: true register: instance - name: verify force update running instance idempotence assert: that: - instance is successful - instance is not changed - instance.name == "{{ cs_resource_prefix }}-vm-{{ instance_number }}" - instance.display_name == "{{ cs_resource_prefix }}-display-{{ instance_number }}" - instance.service_offering == "{{ test_cs_instance_offering_1 }}" - instance.host == "{{ host.name }}" - instance.state == "Running" - name: test restore instance in check mode cs_instance: name: "{{ cs_resource_prefix }}-vm-{{ instance_number }}" template: "{{ test_cs_instance_template }}" state: restored register: instance check_mode: true - name: verify restore instance in check mode assert: that: - instance is successful - instance is changed - instance.name == "{{ cs_resource_prefix }}-vm-{{ instance_number }}" - instance.display_name == "{{ cs_resource_prefix }}-display-{{ instance_number }}" - instance.service_offering == "{{ test_cs_instance_offering_1 }}" - name: test restore instance cs_instance: name: "{{ cs_resource_prefix }}-vm-{{ instance_number }}" template: "{{ test_cs_instance_template }}" state: restored register: instance - name: verify restore instance assert: that: - instance is successful - instance is changed - instance.name == "{{ cs_resource_prefix }}-vm-{{ instance_number }}" - instance.display_name == "{{ cs_resource_prefix }}-display-{{ instance_number }}" - instance.service_offering == "{{ test_cs_instance_offering_1 }}"