0128022654
* Add OpenNebula one_vm module * `one_vm` - module for managing VM instances instances on OpenNebula * Add integration tests
924 lines
27 KiB
YAML
924 lines
27 KiB
YAML
---
|
|
- name: 'Deploy a VM in check-mode with template_id'
|
|
one_vm:
|
|
template_id: '{{ one_template_id }}'
|
|
register: deployed_vm1
|
|
check_mode: yes
|
|
|
|
- name: Check if deployment in check-mode with template_id returns 'changed'
|
|
assert:
|
|
that:
|
|
- deployed_vm1 is changed
|
|
msg: Check mode doesn't return as 'changed' when deploying in check-mode with specified template_id
|
|
|
|
- name: Deploy a VM in check-mode with template_name
|
|
one_vm:
|
|
template_name: '{{ one_template_name }}'
|
|
register: deployed_vm2
|
|
check_mode: yes
|
|
|
|
- name: Check if deployment in check-mode with template_name returns 'changed'
|
|
assert:
|
|
that:
|
|
- deployed_vm2 is changed
|
|
msg: Check mode doesn't return as 'changed' when deploying in check-mode with specified template_name
|
|
|
|
- name: Deploy a VM in check-mode with non-existent template_name
|
|
one_vm:
|
|
template_name: 'unknown'
|
|
register: template_bad
|
|
failed_when: not template_bad is failed
|
|
|
|
- name: Check if it fails if we try to access a non-existent VM in check-mode
|
|
one_vm:
|
|
instance_ids: non-existent-vm-{{ ansible_date_time.iso8601_basic_short }}
|
|
register: vm_missing
|
|
failed_when: not vm_missing is failed
|
|
check_mode: yes
|
|
|
|
- name: Check if it fails if we try to access a non-existent VM
|
|
one_vm:
|
|
instance_ids: non-existent-vm-{{ ansible_date_time.iso8601_basic_short }}
|
|
register: vm_missing
|
|
failed_when: not vm_missing is failed
|
|
|
|
- block:
|
|
- name: Deploy a VM with networks, memory and cpu
|
|
one_vm:
|
|
template_id: '{{ one_template_id }}'
|
|
networks: '{{ one_networks_good }}'
|
|
memory: '{{ one_memory }}'
|
|
cpu: '{{ one_cpu }}'
|
|
register: deployed_vm
|
|
|
|
- name: Verify deploying of the VM
|
|
assert:
|
|
that:
|
|
- deployed_vm is changed
|
|
- deployed_vm.instances_ids|length == 1
|
|
- deployed_vm.instances|length == 1
|
|
- deployed_vm.instances[0].vm_id == deployed_vm.instances_ids[0]
|
|
- deployed_vm.instances[0].networks|length == one_networks_good|length
|
|
- deployed_vm.instances[0].memory == "4096 MB"
|
|
- deployed_vm.instances[0].cpu == "{{ one_cpu }}"
|
|
- deployed_vm.instances[0].state == "ACTIVE"
|
|
- deployed_vm.instances[0].lcm_state == "RUNNING"
|
|
|
|
- name: Delete a VM in check-mode
|
|
one_vm:
|
|
instance_ids: '{{ deployed_vm.instances[0].vm_id }}'
|
|
state: absent
|
|
register: delete_vm
|
|
check_mode: yes
|
|
|
|
- name: Check if delete in check-mode returns 'changed'
|
|
assert:
|
|
that: delete_vm is changed
|
|
|
|
- name: Wait for the VM to become RUNNING
|
|
one_vm:
|
|
attributes:
|
|
name: '{{ deployed_vm.instances[0].vm_name }}'
|
|
state: running
|
|
|
|
always:
|
|
- name: Delete the VM
|
|
one_vm:
|
|
instance_ids:
|
|
- '{{ deployed_vm.instances[0].vm_id }}'
|
|
state: absent
|
|
hard: yes
|
|
register: delete_vm
|
|
|
|
- name: Check if deletion has done
|
|
assert:
|
|
that:
|
|
- delete_vm is changed
|
|
- delete_vm.instances_ids|length == 1
|
|
- delete_vm.instances_ids[0] == deployed_vm.instances_ids[0]
|
|
msg: 'Deletion has not done'
|
|
|
|
- name: Delete the VM again to test idempotence
|
|
one_vm:
|
|
instance_ids:
|
|
- '{{ deployed_vm.instances[0].vm_id }}'
|
|
state: absent
|
|
register: delete_vm_idempotent
|
|
|
|
- name: Check if deletion is idempotent
|
|
assert:
|
|
that:
|
|
- not delete_vm_idempotent is changed
|
|
msg: 'Deletion is not idempotent'
|
|
|
|
- name: Delete a non-existent VM
|
|
one_vm:
|
|
instance_ids:
|
|
- non-existent-vm-{{ ansible_date_time.iso8601_basic_short }}
|
|
state: absent
|
|
register: delete_non_existent_vm
|
|
|
|
- name: Check if deletion is not executed
|
|
assert:
|
|
that:
|
|
- not delete_non_existent_vm is changed
|
|
msg: 'Deletion is bad, task has deleted non existent VM'
|
|
|
|
- block:
|
|
- name: Set the unique name of the VM
|
|
set_fact:
|
|
vm_unique_name: test-vm-name-{{ ansible_date_time.iso8601_basic_short }}
|
|
|
|
- name: Try to deploy an unique VM with exact_count but without count_attributes and count_labels
|
|
one_vm:
|
|
template_id: '{{ one_template_id }}'
|
|
attributes:
|
|
name: '{{ vm_unique_name }}'
|
|
exact_count: 1
|
|
register: one_exact_count_without_count_attrs
|
|
failed_when: not one_exact_count_without_count_attrs is failed
|
|
|
|
- name: Deploy an unique VM in check mode
|
|
one_vm:
|
|
template_id: '{{ one_template_id }}'
|
|
attributes:
|
|
name: '{{ vm_unique_name }}'
|
|
exact_count: 1
|
|
count_attributes:
|
|
name: '{{ vm_unique_name }}'
|
|
register: unique_vm_check_mode
|
|
check_mode: yes
|
|
|
|
- name: Check if deployment in check-mode returns as 'changed'
|
|
assert:
|
|
that:
|
|
- unique_vm_check_mode is changed
|
|
msg: 'Deploying an unique VM, that does not exist, in check-mode should return as changed.'
|
|
|
|
- name: Really deploy an unique VM
|
|
one_vm:
|
|
template_id: '{{ one_template_id }}'
|
|
attributes:
|
|
name: '{{ vm_unique_name }}'
|
|
exact_count: 1
|
|
count_attributes:
|
|
name: '{{ vm_unique_name }}'
|
|
register: unique_vm
|
|
|
|
- name: Verify deploying with unique name
|
|
assert:
|
|
that:
|
|
- unique_vm is changed
|
|
- unique_vm.instances_ids|length == 1
|
|
- unique_vm.instances|length == 1
|
|
- unique_vm.instances[0].vm_name == "{{ vm_unique_name }}"
|
|
msg: Deployment of the unique VM doesn't return as 'changed'
|
|
|
|
- name: Deploy an unique VM again to check idempotence
|
|
one_vm:
|
|
template_id: '{{ one_template_id }}'
|
|
attributes:
|
|
name: '{{ vm_unique_name }}'
|
|
exact_count: 1
|
|
count_attributes:
|
|
name: '{{ vm_unique_name }}'
|
|
register: unique_vm_idempotent
|
|
|
|
- name: Check idempotence of deployment with unique name
|
|
assert:
|
|
that:
|
|
- not unique_vm_idempotent is changed
|
|
msg: Deployment with unique name isn't idempotent
|
|
|
|
always:
|
|
- name: Delete the unique VM
|
|
one_vm:
|
|
instance_ids:
|
|
- '{{ unique_vm.tagged_instances[0].vm_id }}'
|
|
state: absent
|
|
hard: yes
|
|
|
|
- name: Try to deploy a VM with incorrect networks
|
|
one_vm:
|
|
template_name: '{{ one_template_name }}'
|
|
networks: '{{ one_networks_bad }}'
|
|
register: vm_with_bad_networks
|
|
failed_when: not vm_with_bad_networks is failed
|
|
|
|
- name: Try to deploy a VM with incorrect memory size
|
|
one_vm:
|
|
template_name: '{{ one_template_name }}'
|
|
memory: '{{ one_incorrect_memory }}'
|
|
register: vm_with_bad_memory_param
|
|
failed_when: not vm_with_bad_memory_param is failed
|
|
|
|
- name: Try to deploy a VM with incorrect disk size
|
|
one_vm:
|
|
template_name: '{{ one_template_name }}'
|
|
disk_size: '{{ one_incorrect_disk_size }}'
|
|
register: vm_with_bad_disk_size_param
|
|
failed_when: not vm_with_bad_disk_size_param is failed
|
|
|
|
- name: Try to deploy a VM, with disk size, whose template has more than one DISK
|
|
one_vm:
|
|
template_name: '{{ one_template_name_with_2_disks }}'
|
|
disk_size: '{{ one_disk_size }}'
|
|
register: vm_with_disk_size_and_more_disks
|
|
failed_when: not vm_with_disk_size_and_more_disks is failed
|
|
|
|
- name: Try to deploy a VM with incorrect name's format
|
|
one_vm:
|
|
template_name: '{{ one_template_name }}'
|
|
attributes:
|
|
name: 'foo#Vm###'
|
|
register: vm_with_bad_name
|
|
failed_when: not vm_with_bad_name is failed
|
|
|
|
- name: Try to deploy a VM with incorrect name's format
|
|
one_vm:
|
|
template_name: '{{ one_template_name }}'
|
|
attributes:
|
|
name: '###'
|
|
register: vm_with_bad_name
|
|
failed_when: not vm_with_bad_name is failed
|
|
|
|
- block:
|
|
- name: Deploy a VM and wait for it to become RUNNING
|
|
one_vm:
|
|
template_id: '{{ one_template_id }}'
|
|
register: vm_register
|
|
|
|
- name: Power-off the VM and wait for it to become POWEROFF
|
|
one_vm:
|
|
instance_ids:
|
|
- '{{ vm_register.instances[0].vm_id }}'
|
|
state: poweredoff
|
|
hard: yes
|
|
register: power_off_vm
|
|
|
|
- name: Check if VM went down properly
|
|
assert:
|
|
that:
|
|
- power_off_vm is changed
|
|
- power_off_vm.instances|length == 1
|
|
- power_off_vm.instances[0].state == "POWEROFF"
|
|
msg: Power-off of the VM doesn't work
|
|
|
|
- name: Power-off the VM again to check idempotence
|
|
one_vm:
|
|
instance_ids:
|
|
- '{{ vm_register.instances[0].vm_id }}'
|
|
state: poweredoff
|
|
register: power_off_vm_idempotent
|
|
|
|
- name: Check if power-off is idempotent
|
|
assert:
|
|
that:
|
|
- not power_off_vm_idempotent is changed
|
|
msg: Power-off of the VM is not idempotent
|
|
|
|
- name: Run a VM again in check-mode
|
|
one_vm:
|
|
instance_ids:
|
|
- '{{ vm_register.instances[0].vm_id }}'
|
|
state: running
|
|
register: run_vm_check_mode
|
|
check_mode: yes
|
|
|
|
- name: Check if running in check-mode returns as 'changed'
|
|
assert:
|
|
that:
|
|
- run_vm_check_mode is changed
|
|
|
|
- name: Run a VM and wait for it to become RUNNING
|
|
one_vm:
|
|
instance_ids:
|
|
- '{{ vm_register.instances[0].vm_id }}'
|
|
state: running
|
|
register: run_vm
|
|
|
|
- name: Check if VM is running again
|
|
assert:
|
|
that:
|
|
- run_vm is changed
|
|
- run_vm.instances_ids|length == 1
|
|
- run_vm.instances_ids[0] == vm_register.instances[0].vm_id
|
|
- run_vm.instances|length == 1
|
|
- run_vm.instances[0].state == "ACTIVE"
|
|
- run_vm.instances[0].lcm_state == "RUNNING"
|
|
|
|
- name: Reboot the running VM
|
|
one_vm:
|
|
instance_ids:
|
|
- '{{ vm_register.instances[0].vm_id }}'
|
|
state: rebooted
|
|
register: reboot_running_vm
|
|
|
|
- name: Check if reboot returns as changed
|
|
assert:
|
|
that:
|
|
- reboot_running_vm is changed
|
|
msg: Reboot should be done anyway
|
|
|
|
- name: Power-off the VM and wait for it to become POWEROFF
|
|
one_vm:
|
|
instance_ids:
|
|
- '{{ vm_register.instances[0].vm_id }}'
|
|
state: poweredoff
|
|
hard: yes
|
|
|
|
- name: Reboot the extinguished VM and wait for it to become RUNNING
|
|
one_vm:
|
|
instance_ids:
|
|
- '{{ vm_register.instances[0].vm_id }}'
|
|
state: rebooted
|
|
register: reboot_extinguished_vm
|
|
|
|
- name: Check if reboot started VM again
|
|
assert:
|
|
that:
|
|
- reboot_extinguished_vm is changed
|
|
- reboot_extinguished_vm.instances|length == 1
|
|
- reboot_extinguished_vm.instances[0].state == "ACTIVE"
|
|
- reboot_extinguished_vm.instances[0].lcm_state == "RUNNING"
|
|
msg: Rebooting the extinguished VM should run it
|
|
|
|
always:
|
|
- name: Delete the VM
|
|
one_vm:
|
|
instance_ids:
|
|
- '{{ vm_register.instances[0].vm_id }}'
|
|
state: absent
|
|
hard: yes
|
|
|
|
- block:
|
|
- name: Deploy 2 VMs with attributes in check-mode
|
|
one_vm:
|
|
template_id: '{{ one_template_id }}'
|
|
attributes:
|
|
name: aero
|
|
key: value
|
|
count: 2
|
|
register: deploy_vms_with_count_check_mode
|
|
check_mode: yes
|
|
|
|
- name: Check if deployment in check-mode returns as 'changed'
|
|
assert:
|
|
that:
|
|
- deploy_vms_with_count_check_mode is changed
|
|
|
|
- name: Deploy 2 VMs with attributes
|
|
one_vm:
|
|
template_id: '{{ one_template_id }}'
|
|
attributes:
|
|
name: aero
|
|
key: value
|
|
count: 2
|
|
register: deploy_vms_with_count
|
|
|
|
- name: Check if deployment in returns as 'changed'
|
|
assert:
|
|
that:
|
|
- deploy_vms_with_count is changed
|
|
- deploy_vms_with_count.instances_ids|length == 2
|
|
- deploy_vms_with_count.instances|length == 2
|
|
- deploy_vms_with_count.tagged_instances|length == 2
|
|
- deploy_vms_with_count.tagged_instances[0].vm_name == "aero"
|
|
- deploy_vms_with_count.tagged_instances[1].vm_name == "aero"
|
|
|
|
- name: Deploy 2 VMs with attributes to check it is not idempotent
|
|
one_vm:
|
|
template_id: '{{ one_template_id }}'
|
|
attributes:
|
|
name: aero
|
|
key: value
|
|
count: 2
|
|
register: deploy_vms_with_count_check_idempotence
|
|
|
|
- name: Check if deployment with count is not idempotent
|
|
assert:
|
|
that:
|
|
- deploy_vms_with_count_check_idempotence is changed
|
|
- deploy_vms_with_count_check_idempotence.instances_ids|length == 2
|
|
- deploy_vms_with_count_check_idempotence.instances|length == 2
|
|
|
|
always:
|
|
- name: Delete all VMs
|
|
one_vm:
|
|
instance_ids: '{{ deploy_vms_with_count.instances_ids | union(deploy_vms_with_count_check_idempotence.instances_ids) }}'
|
|
state: absent
|
|
hard: yes
|
|
register: delete_all_vms
|
|
|
|
- name: Verify deletion
|
|
assert:
|
|
that:
|
|
- delete_all_vms is changed
|
|
- delete_all_vms.instances_ids|length == 4
|
|
- delete_all_vms.instances|length == 4
|
|
- delete_all_vms.tagged_instances|length == 0
|
|
|
|
- block:
|
|
- name: Set VMs indexed format name
|
|
set_fact:
|
|
vms_indexed_name: 'aero-##'
|
|
|
|
- name: Terminate all VMs with name's format 'aero-##'
|
|
one_vm:
|
|
template_id: '{{ one_template_id }}'
|
|
count_attributes:
|
|
name: '{{ vms_indexed_name }}'
|
|
hard: yes
|
|
exact_count: 0
|
|
|
|
- name: Terminate all VMs with name's format 'aero-##' again to check-idempotence
|
|
one_vm:
|
|
template_id: '{{ one_template_id }}'
|
|
count_attributes:
|
|
name: '{{ vms_indexed_name }}'
|
|
hard: yes
|
|
exact_count: 0
|
|
|
|
- name: Terminate all VMs with name's format 'aero'
|
|
one_vm:
|
|
template_id: '{{ one_template_id }}'
|
|
exact_count: 0
|
|
count_attributes:
|
|
name: aero
|
|
hard: yes
|
|
|
|
- name: Fetch all VMs with name's format 'aero-##'
|
|
one_vm:
|
|
attributes:
|
|
name: '{{ vms_indexed_name }}'
|
|
register: all_aero_vms
|
|
failed_when: all_aero_vms.instances_ids|length > 0
|
|
|
|
- name: Deploy exact 3 instances with name's format 'aero-##'
|
|
one_vm:
|
|
template_id: '{{ one_template_id }}'
|
|
attributes:
|
|
name: '{{ vms_indexed_name }}'
|
|
exact_count: 3
|
|
count_attributes:
|
|
name: '{{ vms_indexed_name }}'
|
|
register: vms_with_hash
|
|
|
|
- name: Deploy exact 2 instances with name's format 'aero'
|
|
one_vm:
|
|
template_id: '{{ one_template_id }}'
|
|
attributes:
|
|
name: aero
|
|
exact_count: 2
|
|
count_attributes:
|
|
name: aero
|
|
register: vms_without_hash
|
|
|
|
- name: Fetch all VMs with name's format 'aero-#'
|
|
one_vm:
|
|
attributes:
|
|
name: aero-#
|
|
register: all_aero_vms_with_hash
|
|
|
|
- name: Check there are exactly 3 instances with name's format 'aero-#'
|
|
assert:
|
|
that:
|
|
- not all_aero_vms_with_hash is changed
|
|
- all_aero_vms_with_hash.tagged_instances|length == 3
|
|
|
|
- name: Decrement count of 'aero-#' instances
|
|
one_vm:
|
|
template_id: '{{ one_template_id }}'
|
|
exact_count: 2
|
|
count_attributes:
|
|
name: aero-#
|
|
register: aero_vms_with_hash_decremented
|
|
|
|
- name: Check if we terminated oldest one VM
|
|
assert:
|
|
that:
|
|
- aero_vms_with_hash_decremented is changed
|
|
- aero_vms_with_hash_decremented.instances_ids|length == 1
|
|
- vms_with_hash.instances_ids|min == aero_vms_with_hash_decremented.instances_ids[0]
|
|
|
|
- name: Deploy new one with name's format 'aero-#'
|
|
one_vm:
|
|
template_id: '{{ one_template_id }}'
|
|
attributes:
|
|
name: 'aero-#'
|
|
register: new_vm_with_hash
|
|
|
|
- name: Check if new VM has index 0
|
|
assert:
|
|
that:
|
|
- new_vm_with_hash is changed
|
|
- new_vm_with_hash.instances_ids|length == 1
|
|
- new_vm_with_hash.instances|length == 1
|
|
- new_vm_with_hash.tagged_instances|length == 1
|
|
- new_vm_with_hash.instances[0].vm_name|regex_replace('(\d+)$','\1')|int == 0
|
|
|
|
always:
|
|
- name: Terminate all VMs with name's format 'aero-##'
|
|
one_vm:
|
|
template_id: '{{ one_template_id }}'
|
|
count_attributes:
|
|
name: '{{ vms_indexed_name }}'
|
|
exact_count: 0
|
|
hard: yes
|
|
|
|
- name: Terminate all VMs with name's format 'aero'
|
|
one_vm:
|
|
template_id: '{{ one_template_id }}'
|
|
count_attributes:
|
|
name: aero
|
|
exact_count: 0
|
|
hard: yes
|
|
|
|
- block:
|
|
- name: Try to create negative count of VMs
|
|
one_vm:
|
|
template_id: '{{ one_template_id }}'
|
|
count: -3
|
|
register: negative_count_of_vms
|
|
failed_when: not negative_count_of_vms is failed
|
|
|
|
- name: Verify the fail message
|
|
assert:
|
|
that:
|
|
- negative_count_of_vms.msg == "`count` has to be grater than 0"
|
|
|
|
- name: Try to use hard parameter for running state
|
|
one_vm:
|
|
instance_ids:
|
|
- 123
|
|
- 456
|
|
hard: yes
|
|
state: running
|
|
register: hard_with_running
|
|
failed_when: not hard_with_running is failed
|
|
|
|
- name: Try to use count with count_attributes/count_labels
|
|
one_vm:
|
|
template_id: '{{ one_template_id }}'
|
|
count: 2
|
|
count_attributes:
|
|
key: val
|
|
count_labels:
|
|
- foo
|
|
register: use_count_with_count_attrs
|
|
failed_when: not use_count_with_count_attrs is failed
|
|
|
|
- name: Terminate all VMs with label 'foo'
|
|
one_vm:
|
|
template_id: '{{ one_template_id }}'
|
|
count_labels:
|
|
- foo
|
|
exact_count: 0
|
|
hard: yes
|
|
|
|
- name: Deploy exact 3 VMs with label 'foo'
|
|
one_vm:
|
|
template_id: '{{ one_template_id }}'
|
|
labels:
|
|
- foo
|
|
exact_count: 3
|
|
count_labels:
|
|
- foo
|
|
register: vms_with_foo_label
|
|
|
|
- name:
|
|
assert:
|
|
that:
|
|
- vms_with_foo_label is changed
|
|
- vms_with_foo_label.tagged_instances|length == 3
|
|
- vms_with_foo_label.tagged_instances[0].labels|length == 1
|
|
- vms_with_foo_label.tagged_instances[0].labels[0] == "foo"
|
|
|
|
- name: Try to use ids with exact_count and check if it fails
|
|
one_vm:
|
|
instance_ids: '{{ vms_with_foo_label.instances_ids }}'
|
|
exact_count: 2
|
|
register: failed_ids_and_exact_count
|
|
failed_when: not failed_ids_and_exact_count is failed
|
|
|
|
- name: Set special label for a new instance
|
|
set_fact:
|
|
vm_spec_label: spec-label-{{ ansible_date_time.iso8601_basic_short }}
|
|
|
|
- name: Add a new instance in the group of instances with label 'foo'
|
|
one_vm:
|
|
template_id: '{{ one_template_id }}'
|
|
labels:
|
|
- foo
|
|
- '{{ vm_spec_label }}'
|
|
exact_count: 4
|
|
count_labels:
|
|
- foo
|
|
register: new_vm_with_label
|
|
|
|
- name: Fetch all instances with special label
|
|
one_vm:
|
|
labels:
|
|
- '{{ vm_spec_label }}'
|
|
register: vm_with_special_label
|
|
|
|
- name: Check there is only one VM with the special label
|
|
assert:
|
|
that:
|
|
- not vm_with_special_label is changed
|
|
- vm_with_special_label.tagged_instances|length == 1
|
|
- vm_with_special_label.instances_ids|length == 1
|
|
- vm_with_special_label.instances_ids[0] == new_vm_with_label.instances_ids[0]
|
|
|
|
always:
|
|
- name: Fetch all VMs with label 'foo'
|
|
one_vm:
|
|
labels:
|
|
- foo
|
|
register: all_foo_instances
|
|
|
|
- name: Terminate all VMs with label 'foo'
|
|
one_vm:
|
|
instance_ids: '{{ all_foo_instances.instances_ids }}'
|
|
state: absent
|
|
hard: yes
|
|
when: all_foo_instances.instances_ids|length > 0
|
|
|
|
- block:
|
|
- name: Fetch all VMs with 'foo_app' key
|
|
one_vm:
|
|
attributes:
|
|
foo_app:
|
|
register: foo_app_instances
|
|
|
|
- name: Terminate all VMs with 'foo_app' key
|
|
one_vm:
|
|
instance_ids: '{{ foo_app_instances.instances_ids }}'
|
|
state: absent
|
|
hard: yes
|
|
when: foo_app_instances.instances_ids|length > 0
|
|
|
|
- name: Terminate all instances with name's format 'aeroXYZ-##' to test name parsing later
|
|
one_vm:
|
|
template_id: '{{ one_template_id }}'
|
|
exact_count: 0
|
|
count_attributes:
|
|
name: 'aeroXYZ-##'
|
|
hard: yes
|
|
|
|
- name: Deploy 2 instances with attributes
|
|
one_vm:
|
|
template_id: '{{ one_template_id }}'
|
|
attributes:
|
|
name: 'aero-###'
|
|
foo_app: foo
|
|
count: 2
|
|
|
|
- name: Deploy 2 instances with different value for attribute
|
|
one_vm:
|
|
template_id: '{{ one_template_id }}'
|
|
attributes:
|
|
name: 'aero-###'
|
|
foo_app: bar
|
|
count: 2
|
|
|
|
- name: Get all instances with attribute's key
|
|
one_vm:
|
|
attributes:
|
|
foo_app:
|
|
register: all_foo_app_vms
|
|
|
|
- name: Check there are 4 VMs with 'foo_app' key
|
|
assert:
|
|
that:
|
|
- all_foo_app_vms.tagged_instances|length == 4
|
|
|
|
- name: Decrement count of VMs with 'foo_app' key
|
|
one_vm:
|
|
template_id: '{{ one_template_id }}'
|
|
exact_count: 2
|
|
count_attributes:
|
|
foo_app:
|
|
register: foo_app_vms
|
|
|
|
# instances list contains affected instances
|
|
# tagged_instances list contains the remaining instances with the appropriate attributes
|
|
- name: Check are there 2 elements in instances list and 2 elements in tagged_instances list
|
|
assert:
|
|
that:
|
|
- foo_app_vms is changed
|
|
- foo_app_vms.instances|length == 2
|
|
- foo_app_vms.tagged_instances|length == 2
|
|
|
|
- name: Fetch all instances with name's format 'aeroXYZ-##' to check parsing
|
|
one_vm:
|
|
attributes:
|
|
name: 'aeroXYZ-##'
|
|
register: check_there_are_no_vms
|
|
failed_when: check_there_are_no_vms.instances_ids|length > 0
|
|
|
|
always:
|
|
- name: Fetch all VMs with 'foo_app' key
|
|
one_vm:
|
|
attributes:
|
|
foo_app:
|
|
register: foo_app_instances
|
|
|
|
- name: Terminate all VMs with 'foo_app' key
|
|
one_vm:
|
|
instance_ids: '{{ foo_app_instances.instances_ids }}'
|
|
state: absent
|
|
hard: yes
|
|
when: foo_app_instances.instances_ids|length > 0
|
|
|
|
- block:
|
|
- name: Set labels list
|
|
set_fact:
|
|
labels_list:
|
|
- bar1
|
|
- bar2
|
|
|
|
- name: Deploy an instance with name 'app1', attribute 'foo app' and labels 'bar1' and 'bar2'
|
|
one_vm:
|
|
template_id: '{{ one_template_id }}'
|
|
attributes:
|
|
name: app1
|
|
foo: app
|
|
labels: '{{ labels_list }}'
|
|
register: instance_with_labels
|
|
|
|
- name: Fetch the current instance
|
|
one_vm:
|
|
attributes:
|
|
name: app1
|
|
foo: app
|
|
labels: '{{ labels_list }}'
|
|
register: current_instance
|
|
|
|
- name: Check that the instance is fetched
|
|
assert:
|
|
that: current_instance.instances|length == 1
|
|
msg: There is no instance
|
|
|
|
- name: Check that labels are set correctly
|
|
assert:
|
|
that: instance_with_labels.instances[0].labels|difference(labels_list)|length == 0
|
|
msg: Labels are not correct
|
|
|
|
- name: Check that name is correct
|
|
assert:
|
|
that: instance_with_labels.instances[0].vm_name == 'app1'
|
|
msg: The instance name is incorrect
|
|
|
|
always:
|
|
- name: Terminate the instance
|
|
one_vm:
|
|
instance_ids: '{{ instance_with_labels.instances_ids }}'
|
|
state: absent
|
|
hard: yes
|
|
|
|
- name: Try to use letters for ids option
|
|
one_vm:
|
|
instance_ids:
|
|
- asd
|
|
- 123
|
|
state: running
|
|
register: ids_with_letters
|
|
failed_when: not ids_with_letters is failed
|
|
|
|
- name: Try to use letters for ids option when terminate vms
|
|
one_vm:
|
|
instance_ids:
|
|
- asd
|
|
- 123
|
|
state: absent
|
|
register: ids_with_letters
|
|
failed_when: ids_with_letters is failed
|
|
|
|
- name: Try to use restricted attributes when deploying
|
|
one_vm:
|
|
template_id: '{{ one_template_id }}'
|
|
attributes:
|
|
disk: 34 GB
|
|
template: foo
|
|
register: restricted_attributes
|
|
failed_when: not restricted_attributes is failed
|
|
|
|
- name: Verify the fail message
|
|
assert:
|
|
that:
|
|
- restricted_attributes.msg == "Restricted attribute `DISK` cannot be used when filtering VMs."
|
|
|
|
- name: Test images creation
|
|
block:
|
|
- name: Set fact image name
|
|
set_fact:
|
|
image_name: test-image-name-{{ ansible_date_time.iso8601_basic_short }}
|
|
|
|
- name: Deploy VM
|
|
one_vm:
|
|
template_id: '{{ one_template_id }}'
|
|
labels:
|
|
- test-image
|
|
attributes:
|
|
name: test-vm-image
|
|
register: vm_image
|
|
|
|
- name: Try to use disk_saveas option with labels and attributes
|
|
one_vm:
|
|
labels:
|
|
- test-image
|
|
attributes:
|
|
name: test-vm-image
|
|
disk_saveas:
|
|
name: '{{ image_name }}'
|
|
register: save_disk_labels
|
|
failed_when: not save_disk_labels is failed
|
|
|
|
- name: Try to save disk in running state to check if it will fail
|
|
one_vm:
|
|
instance_ids: '{{ vm_image.instances_ids }}'
|
|
disk_saveas:
|
|
name: '{{ image_name }}'
|
|
register: disk_save_as_running
|
|
failed_when: not disk_save_as_running
|
|
|
|
- name: Verify the fail message
|
|
assert:
|
|
that:
|
|
- disk_save_as_running.msg == "'disksaveas' option can be used only when the VM is in 'POWEROFF' state"
|
|
|
|
- name: Try to save disk without specified image name
|
|
one_vm:
|
|
instance_ids: '{{ vm_image.instances_ids }}'
|
|
disk_saveas: {}
|
|
register: disk_save_without_name
|
|
failed_when: not disk_save_without_name is failed
|
|
|
|
- name: Try to save disk of non-existent VM
|
|
one_vm:
|
|
attributes:
|
|
name: test-vm-{{ ansible_date_time.iso8601_basic_short }}
|
|
disk_saveas:
|
|
name: '{{ image_name }}'
|
|
register: disk_save_no_vm
|
|
failed_when: not disk_save_no_vm is failed
|
|
|
|
- name: Save disk of powered-off VM in check-mode
|
|
one_vm:
|
|
instance_ids: '{{ vm_image.instances_ids }}'
|
|
state: poweredoff
|
|
hard: yes
|
|
disk_saveas:
|
|
name: '{{ image_name }}'
|
|
check_mode: yes
|
|
register: vm_disk_saveas_check_mode
|
|
|
|
- name: Check if disk saving in check-mode is returned as 'changed'
|
|
assert:
|
|
that:
|
|
- vm_disk_saveas_check_mode is changed
|
|
|
|
- name: Check that image doesn't exist
|
|
one_image:
|
|
name: '{{ image_name }}'
|
|
failed_when: no
|
|
|
|
- name: Save disk of powered-off VM
|
|
one_vm:
|
|
instance_ids: '{{ vm_image.instances_ids }}'
|
|
state: poweredoff
|
|
hard: yes
|
|
disk_saveas:
|
|
name: '{{ image_name }}'
|
|
register: vm_disk_saveas
|
|
|
|
- name: Check if disk saving is returned as 'changed'
|
|
assert:
|
|
that:
|
|
- vm_disk_saveas is changed
|
|
|
|
- name: Check if image is created
|
|
one_image:
|
|
name: '{{ image_name }}'
|
|
|
|
- name: Try to save disk again with the same name
|
|
one_vm:
|
|
instance_ids: '{{ vm_image.instances_ids }}'
|
|
disk_saveas:
|
|
name: '{{ image_name }}'
|
|
register: disk_save_as_fail
|
|
failed_when: not disk_save_as_fail is failed
|
|
|
|
always:
|
|
- name: Delete the image
|
|
one_image:
|
|
name: '{{ image_name }}'
|
|
state: absent
|
|
|
|
- name: Delete the VM
|
|
one_vm:
|
|
instance_ids: '{{ vm_image.instances_ids }}'
|
|
state: absent
|
|
hard: yes
|
|
tags: test-image
|