mirror of
https://github.com/ansible-collections/community.general.git
synced 2024-09-14 20:13:21 +02:00
cs_volume: add volumes extraction and upload features (#54111)
* cs_volume: add volumes extraction and upload features * cs_volume: Update doc, remove deprecated code * cs_volume: Add unit tests for extract and upload features
This commit is contained in:
parent
e69828e285
commit
aa32164d15
6 changed files with 612 additions and 340 deletions
|
@ -0,0 +1,2 @@
|
||||||
|
minor_changes:
|
||||||
|
- cs_volume - add volumes extraction and upload features.
|
|
@ -3,21 +3,7 @@
|
||||||
#
|
#
|
||||||
# (c) 2015, Jefferson Girão <jefferson@girao.net>
|
# (c) 2015, Jefferson Girão <jefferson@girao.net>
|
||||||
# (c) 2015, René Moser <mail@renemoser.net>
|
# (c) 2015, René Moser <mail@renemoser.net>
|
||||||
#
|
# GNU General Public License v3.0+ (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt)
|
||||||
# This file is part of Ansible
|
|
||||||
#
|
|
||||||
# Ansible is free software: you can redistribute it and/or modify
|
|
||||||
# it under the terms of the GNU General Public License as published by
|
|
||||||
# the Free Software Foundation, either version 3 of the License, or
|
|
||||||
# (at your option) any later version.
|
|
||||||
#
|
|
||||||
# Ansible is distributed in the hope that it will be useful,
|
|
||||||
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
||||||
# GNU General Public License for more details.
|
|
||||||
#
|
|
||||||
# You should have received a copy of the GNU General Public License
|
|
||||||
# along with Ansible. If not, see <http://www.gnu.org/licenses/>.
|
|
||||||
|
|
||||||
ANSIBLE_METADATA = {'metadata_version': '1.1',
|
ANSIBLE_METADATA = {'metadata_version': '1.1',
|
||||||
'status': ['stableinterface'],
|
'status': ['stableinterface'],
|
||||||
|
@ -29,120 +15,173 @@ DOCUMENTATION = '''
|
||||||
module: cs_volume
|
module: cs_volume
|
||||||
short_description: Manages volumes on Apache CloudStack based clouds.
|
short_description: Manages volumes on Apache CloudStack based clouds.
|
||||||
description:
|
description:
|
||||||
- Create, destroy, attach, detach volumes.
|
- Create, destroy, attach, detach, extract or upload volumes.
|
||||||
version_added: "2.1"
|
version_added: '2.1'
|
||||||
author:
|
author:
|
||||||
- "Jefferson Girão (@jeffersongirao)"
|
- Jefferson Girão (@jeffersongirao)
|
||||||
- "René Moser (@resmo)"
|
- René Moser (@resmo)
|
||||||
options:
|
options:
|
||||||
name:
|
name:
|
||||||
description:
|
description:
|
||||||
- Name of the volume.
|
- Name of the volume.
|
||||||
- C(name) can only contain ASCII letters.
|
- I(name) can only contain ASCII letters.
|
||||||
|
type: str
|
||||||
required: true
|
required: true
|
||||||
account:
|
account:
|
||||||
description:
|
description:
|
||||||
- Account the volume is related to.
|
- Account the volume is related to.
|
||||||
|
type: str
|
||||||
custom_id:
|
custom_id:
|
||||||
description:
|
description:
|
||||||
- Custom id to the resource.
|
- Custom id to the resource.
|
||||||
- Allowed to Root Admins only.
|
- Allowed to Root Admins only.
|
||||||
|
type: str
|
||||||
disk_offering:
|
disk_offering:
|
||||||
description:
|
description:
|
||||||
- Name of the disk offering to be used.
|
- Name of the disk offering to be used.
|
||||||
- Required one of C(disk_offering), C(snapshot) if volume is not already C(state=present).
|
- Required one of I(disk_offering), I(snapshot) if volume is not already I(state=present).
|
||||||
|
type: str
|
||||||
display_volume:
|
display_volume:
|
||||||
description:
|
description:
|
||||||
- Whether to display the volume to the end user or not.
|
- Whether to display the volume to the end user or not.
|
||||||
- Allowed to Root Admins only.
|
- Allowed to Root Admins only.
|
||||||
default: true
|
default: yes
|
||||||
type: bool
|
type: bool
|
||||||
domain:
|
domain:
|
||||||
description:
|
description:
|
||||||
- Name of the domain the volume to be deployed in.
|
- Name of the domain the volume to be deployed in.
|
||||||
|
type: str
|
||||||
max_iops:
|
max_iops:
|
||||||
description:
|
description:
|
||||||
- Max iops
|
- Max iops
|
||||||
|
type: int
|
||||||
min_iops:
|
min_iops:
|
||||||
description:
|
description:
|
||||||
- Min iops
|
- Min iops
|
||||||
|
type: int
|
||||||
project:
|
project:
|
||||||
description:
|
description:
|
||||||
- Name of the project the volume to be deployed in.
|
- Name of the project the volume to be deployed in.
|
||||||
|
type: str
|
||||||
size:
|
size:
|
||||||
description:
|
description:
|
||||||
- Size of disk in GB
|
- Size of disk in GB
|
||||||
|
type: int
|
||||||
snapshot:
|
snapshot:
|
||||||
description:
|
description:
|
||||||
- The snapshot name for the disk volume.
|
- The snapshot name for the disk volume.
|
||||||
- Required one of C(disk_offering), C(snapshot) if volume is not already C(state=present).
|
- Required one of I(disk_offering), I(snapshot) if volume is not already I(state=present).
|
||||||
|
type: str
|
||||||
force:
|
force:
|
||||||
description:
|
description:
|
||||||
- Force removal of volume even it is attached to a VM.
|
- Force removal of volume even it is attached to a VM.
|
||||||
- Considered on C(state=absent) only.
|
- Considered on I(state=absent) only.
|
||||||
default: false
|
default: no
|
||||||
type: bool
|
type: bool
|
||||||
shrink_ok:
|
shrink_ok:
|
||||||
description:
|
description:
|
||||||
- Whether to allow to shrink the volume.
|
- Whether to allow to shrink the volume.
|
||||||
default: false
|
default: no
|
||||||
type: bool
|
type: bool
|
||||||
vm:
|
vm:
|
||||||
description:
|
description:
|
||||||
- Name of the virtual machine to attach the volume to.
|
- Name of the virtual machine to attach the volume to.
|
||||||
|
type: str
|
||||||
zone:
|
zone:
|
||||||
description:
|
description:
|
||||||
- Name of the zone in which the volume should be deployed.
|
- Name of the zone in which the volume should be deployed.
|
||||||
- If not set, default zone is used.
|
- If not set, default zone is used.
|
||||||
|
type: str
|
||||||
state:
|
state:
|
||||||
description:
|
description:
|
||||||
- State of the volume.
|
- State of the volume.
|
||||||
|
- The choices C(extracted) and C(uploaded) were added in version 2.8.
|
||||||
|
type: str
|
||||||
default: present
|
default: present
|
||||||
choices: [ present, absent, attached, detached ]
|
choices: [ present, absent, attached, detached, extracted, uploaded ]
|
||||||
poll_async:
|
poll_async:
|
||||||
description:
|
description:
|
||||||
- Poll async jobs until job has finished.
|
- Poll async jobs until job has finished.
|
||||||
default: true
|
default: yes
|
||||||
type: bool
|
type: bool
|
||||||
tags:
|
tags:
|
||||||
description:
|
description:
|
||||||
- List of tags. Tags are a list of dictionaries having keys C(key) and C(value).
|
- List of tags. Tags are a list of dictionaries having keys I(key) and I(value).
|
||||||
- "To delete all tags, set a empty list e.g. C(tags: [])."
|
- "To delete all tags, set a empty list e.g. I(tags: [])."
|
||||||
aliases: [ 'tag' ]
|
type: list
|
||||||
version_added: "2.4"
|
aliases: [ tag ]
|
||||||
|
version_added: '2.4'
|
||||||
|
url:
|
||||||
|
description:
|
||||||
|
- URL to which the volume would be extracted on I(state=extracted)
|
||||||
|
- or the URL where to download the volume on I(state=uploaded).
|
||||||
|
- Only considered if I(state) is C(extracted) or C(uploaded).
|
||||||
|
type: str
|
||||||
|
version_added: '2.8'
|
||||||
|
mode:
|
||||||
|
description:
|
||||||
|
- Mode for the volume extraction.
|
||||||
|
- Only considered if I(state=extracted).
|
||||||
|
type: str
|
||||||
|
choices: [ http_download, ftp_upload ]
|
||||||
|
default: http_download
|
||||||
|
version_added: '2.8'
|
||||||
|
format:
|
||||||
|
description:
|
||||||
|
- The format for the volume.
|
||||||
|
- Only considered if I(state=uploaded).
|
||||||
|
type: str
|
||||||
|
choices: [ QCOW2, RAW, VHD, VHDX, OVA ]
|
||||||
|
version_added: '2.8'
|
||||||
extends_documentation_fragment: cloudstack
|
extends_documentation_fragment: cloudstack
|
||||||
'''
|
'''
|
||||||
|
|
||||||
EXAMPLES = '''
|
EXAMPLES = '''
|
||||||
- name: create volume within project and zone with specified storage options
|
- name: create volume within project and zone with specified storage options
|
||||||
local_action:
|
cs_volume:
|
||||||
module: cs_volume
|
|
||||||
name: web-vm-1-volume
|
name: web-vm-1-volume
|
||||||
project: Integration
|
project: Integration
|
||||||
zone: ch-zrh-ix-01
|
zone: ch-zrh-ix-01
|
||||||
disk_offering: PerfPlus Storage
|
disk_offering: PerfPlus Storage
|
||||||
size: 20
|
size: 20
|
||||||
|
delegate_to: localhost
|
||||||
|
|
||||||
- name: create/attach volume to instance
|
- name: create/attach volume to instance
|
||||||
local_action:
|
cs_volume:
|
||||||
module: cs_volume
|
|
||||||
name: web-vm-1-volume
|
name: web-vm-1-volume
|
||||||
disk_offering: PerfPlus Storage
|
disk_offering: PerfPlus Storage
|
||||||
size: 20
|
size: 20
|
||||||
vm: web-vm-1
|
vm: web-vm-1
|
||||||
state: attached
|
state: attached
|
||||||
|
delegate_to: localhost
|
||||||
|
|
||||||
- name: detach volume
|
- name: detach volume
|
||||||
local_action:
|
cs_volume:
|
||||||
module: cs_volume
|
|
||||||
name: web-vm-1-volume
|
name: web-vm-1-volume
|
||||||
state: detached
|
state: detached
|
||||||
|
delegate_to: localhost
|
||||||
|
|
||||||
- name: remove volume
|
- name: remove volume
|
||||||
local_action:
|
cs_volume:
|
||||||
module: cs_volume
|
|
||||||
name: web-vm-1-volume
|
name: web-vm-1-volume
|
||||||
state: absent
|
state: absent
|
||||||
|
delegate_to: localhost
|
||||||
|
|
||||||
|
# New in version 2.8
|
||||||
|
- name: Extract DATA volume to make it downloadable
|
||||||
|
cs_volume:
|
||||||
|
state: extracted
|
||||||
|
name: web-vm-1-volume
|
||||||
|
register: data_vol_out
|
||||||
|
delegate_to: localhost
|
||||||
|
|
||||||
|
- name: Create new volume by downloading source volume
|
||||||
|
cs_volume:
|
||||||
|
state: uploaded
|
||||||
|
name: web-vm-1-volume-2
|
||||||
|
format: VHD
|
||||||
|
url: "{{ data_vol_out.url }}"
|
||||||
|
delegate_to: localhost
|
||||||
'''
|
'''
|
||||||
|
|
||||||
RETURN = '''
|
RETURN = '''
|
||||||
|
@ -199,7 +238,7 @@ type:
|
||||||
size:
|
size:
|
||||||
description: Size of disk volume.
|
description: Size of disk volume.
|
||||||
returned: success
|
returned: success
|
||||||
type: str
|
type: int
|
||||||
sample: 20
|
sample: 20
|
||||||
vm:
|
vm:
|
||||||
description: Name of the vm the volume is attached to (not returned when detached)
|
description: Name of the vm the volume is attached to (not returned when detached)
|
||||||
|
@ -214,8 +253,14 @@ state:
|
||||||
device_id:
|
device_id:
|
||||||
description: Id of the device on user vm the volume is attached to (not returned when detached)
|
description: Id of the device on user vm the volume is attached to (not returned when detached)
|
||||||
returned: success
|
returned: success
|
||||||
type: str
|
type: int
|
||||||
sample: 1
|
sample: 1
|
||||||
|
url:
|
||||||
|
description: The url of the uploaded volume or the download url depending extraction mode.
|
||||||
|
returned: success when I(state=extracted)
|
||||||
|
type: str
|
||||||
|
sample: http://1.12.3.4/userdata/387e2c7c-7c42-4ecc-b4ed-84e8367a1965.vhd
|
||||||
|
version_added: '2.8'
|
||||||
'''
|
'''
|
||||||
|
|
||||||
from ansible.module_utils.basic import AnsibleModule
|
from ansible.module_utils.basic import AnsibleModule
|
||||||
|
@ -237,6 +282,7 @@ class AnsibleCloudStackVolume(AnsibleCloudStack):
|
||||||
'deviceid': 'device_id',
|
'deviceid': 'device_id',
|
||||||
'type': 'type',
|
'type': 'type',
|
||||||
'size': 'size',
|
'size': 'size',
|
||||||
|
'url': 'url',
|
||||||
}
|
}
|
||||||
self.volume = None
|
self.volume = None
|
||||||
|
|
||||||
|
@ -251,6 +297,10 @@ class AnsibleCloudStackVolume(AnsibleCloudStack):
|
||||||
'type': 'DATADISK',
|
'type': 'DATADISK',
|
||||||
'fetch_list': True,
|
'fetch_list': True,
|
||||||
}
|
}
|
||||||
|
# Do not filter on DATADISK when state=extracted
|
||||||
|
if self.module.params.get('state') == 'extracted':
|
||||||
|
del args['type']
|
||||||
|
|
||||||
volumes = self.query_api('listVolumes', **args)
|
volumes = self.query_api('listVolumes', **args)
|
||||||
if volumes:
|
if volumes:
|
||||||
volume_name = self.module.params.get('name')
|
volume_name = self.module.params.get('name')
|
||||||
|
@ -304,8 +354,6 @@ class AnsibleCloudStackVolume(AnsibleCloudStack):
|
||||||
}
|
}
|
||||||
if not self.module.check_mode:
|
if not self.module.check_mode:
|
||||||
res = self.query_api('createVolume', **args)
|
res = self.query_api('createVolume', **args)
|
||||||
if 'errortext' in res:
|
|
||||||
self.module.fail_json(msg="Failed: '%s'" % res['errortext'])
|
|
||||||
poll_async = self.module.params.get('poll_async')
|
poll_async = self.module.params.get('poll_async')
|
||||||
if poll_async:
|
if poll_async:
|
||||||
volume = self.poll_job(res, 'volume')
|
volume = self.poll_job(res, 'volume')
|
||||||
|
@ -398,6 +446,56 @@ class AnsibleCloudStackVolume(AnsibleCloudStack):
|
||||||
|
|
||||||
return volume
|
return volume
|
||||||
|
|
||||||
|
def extract_volume(self):
|
||||||
|
volume = self.get_volume()
|
||||||
|
if not volume:
|
||||||
|
self.module.fail_json(msg="Failed: volume not found")
|
||||||
|
|
||||||
|
args = {
|
||||||
|
'id': volume['id'],
|
||||||
|
'url': self.module.params.get('url'),
|
||||||
|
'mode': self.module.params.get('mode').upper(),
|
||||||
|
'zoneid': self.get_zone(key='id')
|
||||||
|
}
|
||||||
|
self.result['changed'] = True
|
||||||
|
|
||||||
|
if not self.module.check_mode:
|
||||||
|
res = self.query_api('extractVolume', **args)
|
||||||
|
poll_async = self.module.params.get('poll_async')
|
||||||
|
if poll_async:
|
||||||
|
volume = self.poll_job(res, 'volume')
|
||||||
|
self.volume = volume
|
||||||
|
|
||||||
|
return volume
|
||||||
|
|
||||||
|
def upload_volume(self):
|
||||||
|
volume = self.get_volume()
|
||||||
|
if not volume:
|
||||||
|
disk_offering_id = self.get_disk_offering(key='id')
|
||||||
|
|
||||||
|
self.result['changed'] = True
|
||||||
|
|
||||||
|
args = {
|
||||||
|
'name': self.module.params.get('name'),
|
||||||
|
'account': self.get_account(key='name'),
|
||||||
|
'domainid': self.get_domain(key='id'),
|
||||||
|
'projectid': self.get_project(key='id'),
|
||||||
|
'zoneid': self.get_zone(key='id'),
|
||||||
|
'format': self.module.params.get('format'),
|
||||||
|
'url': self.module.params.get('url'),
|
||||||
|
'diskofferingid': disk_offering_id,
|
||||||
|
}
|
||||||
|
if not self.module.check_mode:
|
||||||
|
res = self.query_api('uploadVolume', **args)
|
||||||
|
poll_async = self.module.params.get('poll_async')
|
||||||
|
if poll_async:
|
||||||
|
volume = self.poll_job(res, 'volume')
|
||||||
|
if volume:
|
||||||
|
volume = self.ensure_tags(resource=volume, resource_type='Volume')
|
||||||
|
self.volume = volume
|
||||||
|
|
||||||
|
return volume
|
||||||
|
|
||||||
|
|
||||||
def main():
|
def main():
|
||||||
argument_spec = cs_argument_spec()
|
argument_spec = cs_argument_spec()
|
||||||
|
@ -414,13 +512,23 @@ def main():
|
||||||
custom_id=dict(),
|
custom_id=dict(),
|
||||||
force=dict(type='bool', default=False),
|
force=dict(type='bool', default=False),
|
||||||
shrink_ok=dict(type='bool', default=False),
|
shrink_ok=dict(type='bool', default=False),
|
||||||
state=dict(choices=['present', 'absent', 'attached', 'detached'], default='present'),
|
state=dict(default='present', choices=[
|
||||||
|
'present',
|
||||||
|
'absent',
|
||||||
|
'attached',
|
||||||
|
'detached',
|
||||||
|
'extracted',
|
||||||
|
'uploaded',
|
||||||
|
]),
|
||||||
zone=dict(),
|
zone=dict(),
|
||||||
domain=dict(),
|
domain=dict(),
|
||||||
account=dict(),
|
account=dict(),
|
||||||
project=dict(),
|
project=dict(),
|
||||||
poll_async=dict(type='bool', default=True),
|
poll_async=dict(type='bool', default=True),
|
||||||
tags=dict(type='list', aliases=['tag']),
|
tags=dict(type='list', aliases=['tag']),
|
||||||
|
url=dict(),
|
||||||
|
mode=dict(choices=['http_download', 'ftp_upload'], default='http_download'),
|
||||||
|
format=dict(choices=['QCOW2', 'RAW', 'VHD', 'VHDX', 'OVA']),
|
||||||
))
|
))
|
||||||
|
|
||||||
module = AnsibleModule(
|
module = AnsibleModule(
|
||||||
|
@ -429,6 +537,9 @@ def main():
|
||||||
mutually_exclusive=(
|
mutually_exclusive=(
|
||||||
['snapshot', 'disk_offering'],
|
['snapshot', 'disk_offering'],
|
||||||
),
|
),
|
||||||
|
required_if=[
|
||||||
|
('state', 'uploaded', ['url', 'format']),
|
||||||
|
],
|
||||||
supports_check_mode=True
|
supports_check_mode=True
|
||||||
)
|
)
|
||||||
|
|
||||||
|
@ -442,6 +553,10 @@ def main():
|
||||||
volume = acs_vol.attached_volume()
|
volume = acs_vol.attached_volume()
|
||||||
elif state in ['detached']:
|
elif state in ['detached']:
|
||||||
volume = acs_vol.detached_volume()
|
volume = acs_vol.detached_volume()
|
||||||
|
elif state == 'extracted':
|
||||||
|
volume = acs_vol.extract_volume()
|
||||||
|
elif state == 'uploaded':
|
||||||
|
volume = acs_vol.upload_volume()
|
||||||
else:
|
else:
|
||||||
volume = acs_vol.present_volume()
|
volume = acs_vol.present_volume()
|
||||||
|
|
||||||
|
|
|
@ -1,6 +1,8 @@
|
||||||
---
|
---
|
||||||
test_cs_instance_1: "{{ cs_resource_prefix }}-vm1"
|
test_cs_instance_1: "{{ cs_resource_prefix }}-vm1"
|
||||||
test_cs_instance_2: "{{ cs_resource_prefix }}-vm2"
|
test_cs_instance_2: "{{ cs_resource_prefix }}-vm2"
|
||||||
|
test_cs_instance_3: "{{ cs_resource_prefix }}-vm3"
|
||||||
test_cs_instance_template: "{{ cs_common_template }}"
|
test_cs_instance_template: "{{ cs_common_template }}"
|
||||||
test_cs_instance_offering_1: Small Instance
|
test_cs_instance_offering_1: Small Instance
|
||||||
test_cs_disk_offering_1: Custom
|
test_cs_disk_offering_1: Custom
|
||||||
|
test_cs_volume_to_upload: http://dl.openvm.eu/cloudstack/macchinina/x86_64/macchinina-xen.vhd.bz2
|
||||||
|
|
296
test/integration/targets/cs_volume/tasks/common.yml
Normal file
296
test/integration/targets/cs_volume/tasks/common.yml
Normal file
|
@ -0,0 +1,296 @@
|
||||||
|
---
|
||||||
|
- name: setup
|
||||||
|
cs_volume: name={{ cs_resource_prefix }}_vol state=absent
|
||||||
|
register: vol
|
||||||
|
- name: verify setup
|
||||||
|
assert:
|
||||||
|
that:
|
||||||
|
- vol is successful
|
||||||
|
|
||||||
|
- name: setup instance 1
|
||||||
|
cs_instance:
|
||||||
|
name: "{{ test_cs_instance_1 }}"
|
||||||
|
template: "{{ test_cs_instance_template }}"
|
||||||
|
service_offering: "{{ test_cs_instance_offering_1 }}"
|
||||||
|
register: instance
|
||||||
|
- name: verify create instance
|
||||||
|
assert:
|
||||||
|
that:
|
||||||
|
- instance is successful
|
||||||
|
|
||||||
|
- name: setup instance 2
|
||||||
|
cs_instance:
|
||||||
|
name: "{{ test_cs_instance_2 }}"
|
||||||
|
template: "{{ test_cs_instance_template }}"
|
||||||
|
service_offering: "{{ test_cs_instance_offering_1 }}"
|
||||||
|
register: instance
|
||||||
|
- name: verify create instance
|
||||||
|
assert:
|
||||||
|
that:
|
||||||
|
- instance is successful
|
||||||
|
|
||||||
|
- name: test fail if missing name
|
||||||
|
action: cs_volume
|
||||||
|
register: vol
|
||||||
|
ignore_errors: true
|
||||||
|
- name: verify results of fail if missing name
|
||||||
|
assert:
|
||||||
|
that:
|
||||||
|
- vol is failed
|
||||||
|
- "vol.msg == 'missing required arguments: name'"
|
||||||
|
|
||||||
|
- name: test create volume in check mode
|
||||||
|
cs_volume:
|
||||||
|
name: "{{ cs_resource_prefix }}_vol"
|
||||||
|
disk_offering: "{{ test_cs_disk_offering_1 }}"
|
||||||
|
size: 20
|
||||||
|
register: vol
|
||||||
|
check_mode: true
|
||||||
|
- name: verify results test create volume in check mode
|
||||||
|
assert:
|
||||||
|
that:
|
||||||
|
- vol is changed
|
||||||
|
|
||||||
|
- name: test create volume
|
||||||
|
cs_volume:
|
||||||
|
name: "{{ cs_resource_prefix }}_vol"
|
||||||
|
disk_offering: "{{ test_cs_disk_offering_1 }}"
|
||||||
|
size: 20
|
||||||
|
register: vol
|
||||||
|
- name: verify results test create volume
|
||||||
|
assert:
|
||||||
|
that:
|
||||||
|
- vol is changed
|
||||||
|
- vol.size == 20 * 1024 ** 3
|
||||||
|
- vol.name == "{{ cs_resource_prefix }}_vol"
|
||||||
|
|
||||||
|
- name: test create volume idempotence
|
||||||
|
cs_volume:
|
||||||
|
name: "{{ cs_resource_prefix }}_vol"
|
||||||
|
disk_offering: "{{ test_cs_disk_offering_1 }}"
|
||||||
|
size: 20
|
||||||
|
register: vol
|
||||||
|
- name: verify results test create volume idempotence
|
||||||
|
assert:
|
||||||
|
that:
|
||||||
|
- vol is not changed
|
||||||
|
- vol.size == 20 * 1024 ** 3
|
||||||
|
- vol.name == "{{ cs_resource_prefix }}_vol"
|
||||||
|
|
||||||
|
- name: test shrink volume in check mode
|
||||||
|
cs_volume:
|
||||||
|
name: "{{ cs_resource_prefix }}_vol"
|
||||||
|
disk_offering: "{{ test_cs_disk_offering_1 }}"
|
||||||
|
size: 10
|
||||||
|
shrink_ok: yes
|
||||||
|
register: vol
|
||||||
|
check_mode: true
|
||||||
|
- name: verify results test create volume in check mode
|
||||||
|
assert:
|
||||||
|
that:
|
||||||
|
- vol is changed
|
||||||
|
- vol.size == 20 * 1024 ** 3
|
||||||
|
- vol.name == "{{ cs_resource_prefix }}_vol"
|
||||||
|
|
||||||
|
- name: test shrink volume
|
||||||
|
cs_volume:
|
||||||
|
name: "{{ cs_resource_prefix }}_vol"
|
||||||
|
disk_offering: "{{ test_cs_disk_offering_1 }}"
|
||||||
|
size: 10
|
||||||
|
shrink_ok: yes
|
||||||
|
register: vol
|
||||||
|
- name: verify results test create volume
|
||||||
|
assert:
|
||||||
|
that:
|
||||||
|
- vol is changed
|
||||||
|
- vol.size == 10 * 1024 ** 3
|
||||||
|
- vol.name == "{{ cs_resource_prefix }}_vol"
|
||||||
|
|
||||||
|
- name: test shrink volume idempotence
|
||||||
|
cs_volume:
|
||||||
|
name: "{{ cs_resource_prefix }}_vol"
|
||||||
|
disk_offering: "{{ test_cs_disk_offering_1 }}"
|
||||||
|
size: 10
|
||||||
|
shrink_ok: yes
|
||||||
|
register: vol
|
||||||
|
- name: verify results test create volume
|
||||||
|
assert:
|
||||||
|
that:
|
||||||
|
- vol is not changed
|
||||||
|
- vol.size == 10 * 1024 ** 3
|
||||||
|
- vol.name == "{{ cs_resource_prefix }}_vol"
|
||||||
|
|
||||||
|
- name: test attach volume in check mode
|
||||||
|
cs_volume:
|
||||||
|
name: "{{ cs_resource_prefix }}_vol"
|
||||||
|
vm: "{{ test_cs_instance_1 }}"
|
||||||
|
state: attached
|
||||||
|
register: vol
|
||||||
|
check_mode: true
|
||||||
|
- name: verify results test attach volume in check mode
|
||||||
|
assert:
|
||||||
|
that:
|
||||||
|
- vol is changed
|
||||||
|
- vol.name == "{{ cs_resource_prefix }}_vol"
|
||||||
|
- vol.attached is not defined
|
||||||
|
|
||||||
|
- name: test attach volume
|
||||||
|
cs_volume:
|
||||||
|
name: "{{ cs_resource_prefix }}_vol"
|
||||||
|
vm: "{{ test_cs_instance_1 }}"
|
||||||
|
state: attached
|
||||||
|
register: vol
|
||||||
|
- name: verify results test attach volume
|
||||||
|
assert:
|
||||||
|
that:
|
||||||
|
- vol is changed
|
||||||
|
- vol.name == "{{ cs_resource_prefix }}_vol"
|
||||||
|
- vol.vm == "{{ test_cs_instance_1 }}"
|
||||||
|
- vol.attached is defined
|
||||||
|
|
||||||
|
- name: test attach volume idempotence
|
||||||
|
cs_volume:
|
||||||
|
name: "{{ cs_resource_prefix }}_vol"
|
||||||
|
vm: "{{ test_cs_instance_1 }}"
|
||||||
|
state: attached
|
||||||
|
register: vol
|
||||||
|
- name: verify results test attach volume idempotence
|
||||||
|
assert:
|
||||||
|
that:
|
||||||
|
- vol is not changed
|
||||||
|
- vol.name == "{{ cs_resource_prefix }}_vol"
|
||||||
|
- vol.vm == "{{ test_cs_instance_1 }}"
|
||||||
|
- vol.attached is defined
|
||||||
|
|
||||||
|
- name: test attach attached volume to another vm in check mdoe
|
||||||
|
cs_volume:
|
||||||
|
name: "{{ cs_resource_prefix }}_vol"
|
||||||
|
vm: "{{ test_cs_instance_2 }}"
|
||||||
|
state: attached
|
||||||
|
register: vol
|
||||||
|
check_mode: true
|
||||||
|
- name: verify results test attach attached volume to another vm in check mode
|
||||||
|
assert:
|
||||||
|
that:
|
||||||
|
- vol is changed
|
||||||
|
- vol.name == "{{ cs_resource_prefix }}_vol"
|
||||||
|
- vol.vm == "{{ test_cs_instance_1 }}"
|
||||||
|
- vol.attached is defined
|
||||||
|
|
||||||
|
- name: test attach attached volume to another vm
|
||||||
|
cs_volume:
|
||||||
|
name: "{{ cs_resource_prefix }}_vol"
|
||||||
|
vm: "{{ test_cs_instance_2 }}"
|
||||||
|
state: attached
|
||||||
|
register: vol
|
||||||
|
- name: verify results test attach attached volume to another vm
|
||||||
|
assert:
|
||||||
|
that:
|
||||||
|
- vol is changed
|
||||||
|
- vol.name == "{{ cs_resource_prefix }}_vol"
|
||||||
|
- vol.vm == "{{ test_cs_instance_2 }}"
|
||||||
|
- vol.attached is defined
|
||||||
|
|
||||||
|
- name: test attach attached volume to another vm idempotence
|
||||||
|
cs_volume:
|
||||||
|
name: "{{ cs_resource_prefix }}_vol"
|
||||||
|
vm: "{{ test_cs_instance_2 }}"
|
||||||
|
state: attached
|
||||||
|
register: vol
|
||||||
|
- name: verify results test attach attached volume to another vm idempotence
|
||||||
|
assert:
|
||||||
|
that:
|
||||||
|
- vol is not changed
|
||||||
|
- vol.name == "{{ cs_resource_prefix }}_vol"
|
||||||
|
- vol.vm == "{{ test_cs_instance_2 }}"
|
||||||
|
- vol.attached is defined
|
||||||
|
|
||||||
|
- name: test detach volume in check mode
|
||||||
|
cs_volume:
|
||||||
|
name: "{{ cs_resource_prefix }}_vol"
|
||||||
|
state: detached
|
||||||
|
register: vol
|
||||||
|
check_mode: true
|
||||||
|
- name: verify results test detach volume in check mdoe
|
||||||
|
assert:
|
||||||
|
that:
|
||||||
|
- vol is changed
|
||||||
|
- vol.name == "{{ cs_resource_prefix }}_vol"
|
||||||
|
- vol.attached is defined
|
||||||
|
|
||||||
|
- name: test detach volume
|
||||||
|
cs_volume:
|
||||||
|
name: "{{ cs_resource_prefix }}_vol"
|
||||||
|
state: detached
|
||||||
|
register: vol
|
||||||
|
- name: verify results test detach volume
|
||||||
|
assert:
|
||||||
|
that:
|
||||||
|
- vol is changed
|
||||||
|
- vol.name == "{{ cs_resource_prefix }}_vol"
|
||||||
|
- vol.attached is undefined
|
||||||
|
|
||||||
|
- name: test detach volume idempotence
|
||||||
|
cs_volume:
|
||||||
|
name: "{{ cs_resource_prefix }}_vol"
|
||||||
|
state: detached
|
||||||
|
register: vol
|
||||||
|
- name: verify results test detach volume idempotence
|
||||||
|
assert:
|
||||||
|
that:
|
||||||
|
- vol is not changed
|
||||||
|
- vol.name == "{{ cs_resource_prefix }}_vol"
|
||||||
|
- vol.attached is undefined
|
||||||
|
|
||||||
|
- name: test delete volume in check mode
|
||||||
|
cs_volume:
|
||||||
|
name: "{{ cs_resource_prefix }}_vol"
|
||||||
|
state: absent
|
||||||
|
register: vol
|
||||||
|
check_mode: true
|
||||||
|
- name: verify results test create volume in check mode
|
||||||
|
assert:
|
||||||
|
that:
|
||||||
|
- vol is changed
|
||||||
|
- vol.name == "{{ cs_resource_prefix }}_vol"
|
||||||
|
|
||||||
|
- name: test delete volume
|
||||||
|
cs_volume:
|
||||||
|
name: "{{ cs_resource_prefix }}_vol"
|
||||||
|
state: absent
|
||||||
|
register: vol
|
||||||
|
- name: verify results test create volume
|
||||||
|
assert:
|
||||||
|
that:
|
||||||
|
- vol is changed
|
||||||
|
- vol.name == "{{ cs_resource_prefix }}_vol"
|
||||||
|
|
||||||
|
- name: test delete volume idempotence
|
||||||
|
cs_volume:
|
||||||
|
name: "{{ cs_resource_prefix }}_vol"
|
||||||
|
state: absent
|
||||||
|
register: vol
|
||||||
|
- name: verify results test delete volume idempotence
|
||||||
|
assert:
|
||||||
|
that:
|
||||||
|
- vol is not changed
|
||||||
|
|
||||||
|
- name: cleanup instance 1
|
||||||
|
cs_instance:
|
||||||
|
name: "{{ test_cs_instance_1 }}"
|
||||||
|
state: absent
|
||||||
|
register: instance
|
||||||
|
- name: verify create instance
|
||||||
|
assert:
|
||||||
|
that:
|
||||||
|
- instance is successful
|
||||||
|
|
||||||
|
- name: cleanup instance 2
|
||||||
|
cs_instance:
|
||||||
|
name: "{{ test_cs_instance_2 }}"
|
||||||
|
state: absent
|
||||||
|
register: instance
|
||||||
|
- name: verify create instance
|
||||||
|
assert:
|
||||||
|
that:
|
||||||
|
- instance is successful
|
150
test/integration/targets/cs_volume/tasks/extract_upload.yml
Normal file
150
test/integration/targets/cs_volume/tasks/extract_upload.yml
Normal file
|
@ -0,0 +1,150 @@
|
||||||
|
---
|
||||||
|
- name: setup
|
||||||
|
cs_volume:
|
||||||
|
zone: "{{ cs_common_zone_adv }}"
|
||||||
|
name: "{{ cs_resource_prefix }}_upload"
|
||||||
|
state: absent
|
||||||
|
register: uploaded_vol
|
||||||
|
- name: verify setup
|
||||||
|
assert:
|
||||||
|
that:
|
||||||
|
- uploaded_vol is successful
|
||||||
|
|
||||||
|
- name: setup instance
|
||||||
|
cs_instance:
|
||||||
|
zone: "{{ cs_common_zone_adv }}"
|
||||||
|
name: "{{ test_cs_instance_3 }}"
|
||||||
|
template: "{{ test_cs_instance_template }}"
|
||||||
|
service_offering: "{{ test_cs_instance_offering_1 }}"
|
||||||
|
register: instance
|
||||||
|
- name: verify setup instance
|
||||||
|
assert:
|
||||||
|
that:
|
||||||
|
- instance is successful
|
||||||
|
|
||||||
|
- name: setup stop instance
|
||||||
|
cs_instance:
|
||||||
|
zone: "{{ cs_common_zone_adv }}"
|
||||||
|
name: "{{ test_cs_instance_3 }}"
|
||||||
|
state: stopped
|
||||||
|
register: instance
|
||||||
|
- name: verify stop instance
|
||||||
|
assert:
|
||||||
|
that:
|
||||||
|
- instance is successful
|
||||||
|
- instance.state == 'Stopped'
|
||||||
|
|
||||||
|
- name: setup get instance facts
|
||||||
|
cs_instance_facts:
|
||||||
|
name: "{{ test_cs_instance_3 }}"
|
||||||
|
register: instance
|
||||||
|
- name: verify setup get instance facts
|
||||||
|
assert:
|
||||||
|
that:
|
||||||
|
- instance is successful
|
||||||
|
|
||||||
|
- name: test extract volume in check mode
|
||||||
|
cs_volume:
|
||||||
|
zone: "{{ cs_common_zone_adv }}"
|
||||||
|
state: extracted
|
||||||
|
name: "{{ instance.volumes[0].name }}"
|
||||||
|
check_mode: yes
|
||||||
|
register: extracted_vol
|
||||||
|
- name: verify test extract volume in check mode
|
||||||
|
assert:
|
||||||
|
that:
|
||||||
|
- extracted_vol is successful
|
||||||
|
- extracted_vol is changed
|
||||||
|
- extracted_vol.state == "Ready"
|
||||||
|
- extracted_vol.name == "{{ instance.volumes[0].name }}"
|
||||||
|
- extracted_vol.url is not defined
|
||||||
|
|
||||||
|
- name: test extract volume
|
||||||
|
cs_volume:
|
||||||
|
zone: "{{ cs_common_zone_adv }}"
|
||||||
|
state: extracted
|
||||||
|
name: "{{ instance.volumes[0].name }}"
|
||||||
|
register: extracted_vol
|
||||||
|
- name: verify test extract volume
|
||||||
|
assert:
|
||||||
|
that:
|
||||||
|
- extracted_vol is successful
|
||||||
|
- extracted_vol is changed
|
||||||
|
- extracted_vol.state == "DOWNLOAD_URL_CREATED"
|
||||||
|
- extracted_vol.name == "{{ instance.volumes[0].name }}"
|
||||||
|
- extracted_vol.url is defined
|
||||||
|
|
||||||
|
- name: test upload volume with missing param
|
||||||
|
cs_volume:
|
||||||
|
zone: "{{ cs_common_zone_adv }}"
|
||||||
|
state: uploaded
|
||||||
|
name: "{{ cs_resource_prefix }}_upload"
|
||||||
|
url: "{{ test_cs_volume_to_upload }}"
|
||||||
|
ignore_errors: yes
|
||||||
|
register: uploaded_vol
|
||||||
|
- name: verify upload volume with missing param
|
||||||
|
assert:
|
||||||
|
that:
|
||||||
|
- uploaded_vol is failed
|
||||||
|
- uploaded_vol is not changed
|
||||||
|
- 'uploaded_vol.msg == "state is uploaded but all of the following are missing: format"'
|
||||||
|
|
||||||
|
- name: test upload volume in check mode
|
||||||
|
cs_volume:
|
||||||
|
zone: "{{ cs_common_zone_adv }}"
|
||||||
|
state: uploaded
|
||||||
|
name: "{{ cs_resource_prefix }}_upload"
|
||||||
|
format: VHD
|
||||||
|
url: "{{ test_cs_volume_to_upload }}"
|
||||||
|
check_mode: yes
|
||||||
|
register: uploaded_vol
|
||||||
|
- name: verify upload volume in check mode
|
||||||
|
assert:
|
||||||
|
that:
|
||||||
|
- uploaded_vol is successful
|
||||||
|
- uploaded_vol is changed
|
||||||
|
- uploaded_vol.name is not defined
|
||||||
|
|
||||||
|
- name: test upload volume
|
||||||
|
cs_volume:
|
||||||
|
zone: "{{ cs_common_zone_adv }}"
|
||||||
|
state: uploaded
|
||||||
|
name: "{{ cs_resource_prefix }}_upload"
|
||||||
|
format: VHD
|
||||||
|
url: "{{ test_cs_volume_to_upload }}"
|
||||||
|
register: uploaded_vol
|
||||||
|
- name: verify upload volume
|
||||||
|
assert:
|
||||||
|
that:
|
||||||
|
- uploaded_vol is successful
|
||||||
|
- uploaded_vol is changed
|
||||||
|
- uploaded_vol.name == "{{ cs_resource_prefix }}_upload"
|
||||||
|
- uploaded_vol.state == "Uploaded"
|
||||||
|
|
||||||
|
- name: test upload volume idempotence
|
||||||
|
cs_volume:
|
||||||
|
zone: "{{ cs_common_zone_adv }}"
|
||||||
|
state: uploaded
|
||||||
|
name: "{{ cs_resource_prefix }}_upload"
|
||||||
|
format: VHD
|
||||||
|
url: "{{ test_cs_volume_to_upload }}"
|
||||||
|
register: uploaded_vol
|
||||||
|
- name: verify upload volume idempotence
|
||||||
|
assert:
|
||||||
|
that:
|
||||||
|
- uploaded_vol is successful
|
||||||
|
- uploaded_vol is not changed
|
||||||
|
- uploaded_vol.name == "{{ cs_resource_prefix }}_upload"
|
||||||
|
- uploaded_vol.state == "Uploaded"
|
||||||
|
|
||||||
|
- name: delete volume
|
||||||
|
cs_volume:
|
||||||
|
zone: "{{ cs_common_zone_adv }}"
|
||||||
|
state: absent
|
||||||
|
name: "{{ cs_resource_prefix }}_upload"
|
||||||
|
register: uploaded_vol
|
||||||
|
- name: verify delete volume
|
||||||
|
assert:
|
||||||
|
that:
|
||||||
|
- uploaded_vol is successful
|
||||||
|
- uploaded_vol is changed
|
|
@ -1,296 +1,3 @@
|
||||||
---
|
---
|
||||||
- name: setup
|
- include_tasks: common.yml
|
||||||
cs_volume: name={{ cs_resource_prefix }}_vol state=absent
|
- include_tasks: extract_upload.yml
|
||||||
register: vol
|
|
||||||
- name: verify setup
|
|
||||||
assert:
|
|
||||||
that:
|
|
||||||
- vol is successful
|
|
||||||
|
|
||||||
- name: setup instance 1
|
|
||||||
cs_instance:
|
|
||||||
name: "{{ test_cs_instance_1 }}"
|
|
||||||
template: "{{ test_cs_instance_template }}"
|
|
||||||
service_offering: "{{ test_cs_instance_offering_1 }}"
|
|
||||||
register: instance
|
|
||||||
- name: verify create instance
|
|
||||||
assert:
|
|
||||||
that:
|
|
||||||
- instance is successful
|
|
||||||
|
|
||||||
- name: setup instance 2
|
|
||||||
cs_instance:
|
|
||||||
name: "{{ test_cs_instance_2 }}"
|
|
||||||
template: "{{ test_cs_instance_template }}"
|
|
||||||
service_offering: "{{ test_cs_instance_offering_1 }}"
|
|
||||||
register: instance
|
|
||||||
- name: verify create instance
|
|
||||||
assert:
|
|
||||||
that:
|
|
||||||
- instance is successful
|
|
||||||
|
|
||||||
- name: test fail if missing name
|
|
||||||
action: cs_volume
|
|
||||||
register: vol
|
|
||||||
ignore_errors: true
|
|
||||||
- name: verify results of fail if missing name
|
|
||||||
assert:
|
|
||||||
that:
|
|
||||||
- vol is failed
|
|
||||||
- "vol.msg == 'missing required arguments: name'"
|
|
||||||
|
|
||||||
- name: test create volume in check mode
|
|
||||||
cs_volume:
|
|
||||||
name: "{{ cs_resource_prefix }}_vol"
|
|
||||||
disk_offering: "{{ test_cs_disk_offering_1 }}"
|
|
||||||
size: 20
|
|
||||||
register: vol
|
|
||||||
check_mode: true
|
|
||||||
- name: verify results test create volume in check mode
|
|
||||||
assert:
|
|
||||||
that:
|
|
||||||
- vol is changed
|
|
||||||
|
|
||||||
- name: test create volume
|
|
||||||
cs_volume:
|
|
||||||
name: "{{ cs_resource_prefix }}_vol"
|
|
||||||
disk_offering: "{{ test_cs_disk_offering_1 }}"
|
|
||||||
size: 20
|
|
||||||
register: vol
|
|
||||||
- name: verify results test create volume
|
|
||||||
assert:
|
|
||||||
that:
|
|
||||||
- vol is changed
|
|
||||||
- vol.size == 20 * 1024 ** 3
|
|
||||||
- vol.name == "{{ cs_resource_prefix }}_vol"
|
|
||||||
|
|
||||||
- name: test create volume idempotence
|
|
||||||
cs_volume:
|
|
||||||
name: "{{ cs_resource_prefix }}_vol"
|
|
||||||
disk_offering: "{{ test_cs_disk_offering_1 }}"
|
|
||||||
size: 20
|
|
||||||
register: vol
|
|
||||||
- name: verify results test create volume idempotence
|
|
||||||
assert:
|
|
||||||
that:
|
|
||||||
- vol is not changed
|
|
||||||
- vol.size == 20 * 1024 ** 3
|
|
||||||
- vol.name == "{{ cs_resource_prefix }}_vol"
|
|
||||||
|
|
||||||
- name: test shrink volume in check mode
|
|
||||||
cs_volume:
|
|
||||||
name: "{{ cs_resource_prefix }}_vol"
|
|
||||||
disk_offering: "{{ test_cs_disk_offering_1 }}"
|
|
||||||
size: 10
|
|
||||||
shrink_ok: yes
|
|
||||||
register: vol
|
|
||||||
check_mode: true
|
|
||||||
- name: verify results test create volume in check mode
|
|
||||||
assert:
|
|
||||||
that:
|
|
||||||
- vol is changed
|
|
||||||
- vol.size == 20 * 1024 ** 3
|
|
||||||
- vol.name == "{{ cs_resource_prefix }}_vol"
|
|
||||||
|
|
||||||
- name: test shrink volume
|
|
||||||
cs_volume:
|
|
||||||
name: "{{ cs_resource_prefix }}_vol"
|
|
||||||
disk_offering: "{{ test_cs_disk_offering_1 }}"
|
|
||||||
size: 10
|
|
||||||
shrink_ok: yes
|
|
||||||
register: vol
|
|
||||||
- name: verify results test create volume
|
|
||||||
assert:
|
|
||||||
that:
|
|
||||||
- vol is changed
|
|
||||||
- vol.size == 10 * 1024 ** 3
|
|
||||||
- vol.name == "{{ cs_resource_prefix }}_vol"
|
|
||||||
|
|
||||||
- name: test shrink volume idempotence
|
|
||||||
cs_volume:
|
|
||||||
name: "{{ cs_resource_prefix }}_vol"
|
|
||||||
disk_offering: "{{ test_cs_disk_offering_1 }}"
|
|
||||||
size: 10
|
|
||||||
shrink_ok: yes
|
|
||||||
register: vol
|
|
||||||
- name: verify results test create volume
|
|
||||||
assert:
|
|
||||||
that:
|
|
||||||
- vol is not changed
|
|
||||||
- vol.size == 10 * 1024 ** 3
|
|
||||||
- vol.name == "{{ cs_resource_prefix }}_vol"
|
|
||||||
|
|
||||||
- name: test attach volume in check mode
|
|
||||||
cs_volume:
|
|
||||||
name: "{{ cs_resource_prefix }}_vol"
|
|
||||||
vm: "{{ test_cs_instance_1 }}"
|
|
||||||
state: attached
|
|
||||||
register: vol
|
|
||||||
check_mode: true
|
|
||||||
- name: verify results test attach volume in check mode
|
|
||||||
assert:
|
|
||||||
that:
|
|
||||||
- vol is changed
|
|
||||||
- vol.name == "{{ cs_resource_prefix }}_vol"
|
|
||||||
- vol.attached is not defined
|
|
||||||
|
|
||||||
- name: test attach volume
|
|
||||||
cs_volume:
|
|
||||||
name: "{{ cs_resource_prefix }}_vol"
|
|
||||||
vm: "{{ test_cs_instance_1 }}"
|
|
||||||
state: attached
|
|
||||||
register: vol
|
|
||||||
- name: verify results test attach volume
|
|
||||||
assert:
|
|
||||||
that:
|
|
||||||
- vol is changed
|
|
||||||
- vol.name == "{{ cs_resource_prefix }}_vol"
|
|
||||||
- vol.vm == "{{ test_cs_instance_1 }}"
|
|
||||||
- vol.attached is defined
|
|
||||||
|
|
||||||
- name: test attach volume idempotence
|
|
||||||
cs_volume:
|
|
||||||
name: "{{ cs_resource_prefix }}_vol"
|
|
||||||
vm: "{{ test_cs_instance_1 }}"
|
|
||||||
state: attached
|
|
||||||
register: vol
|
|
||||||
- name: verify results test attach volume idempotence
|
|
||||||
assert:
|
|
||||||
that:
|
|
||||||
- vol is not changed
|
|
||||||
- vol.name == "{{ cs_resource_prefix }}_vol"
|
|
||||||
- vol.vm == "{{ test_cs_instance_1 }}"
|
|
||||||
- vol.attached is defined
|
|
||||||
|
|
||||||
- name: test attach attached volume to another vm in check mdoe
|
|
||||||
cs_volume:
|
|
||||||
name: "{{ cs_resource_prefix }}_vol"
|
|
||||||
vm: "{{ test_cs_instance_2 }}"
|
|
||||||
state: attached
|
|
||||||
register: vol
|
|
||||||
check_mode: true
|
|
||||||
- name: verify results test attach attached volume to another vm in check mode
|
|
||||||
assert:
|
|
||||||
that:
|
|
||||||
- vol is changed
|
|
||||||
- vol.name == "{{ cs_resource_prefix }}_vol"
|
|
||||||
- vol.vm == "{{ test_cs_instance_1 }}"
|
|
||||||
- vol.attached is defined
|
|
||||||
|
|
||||||
- name: test attach attached volume to another vm
|
|
||||||
cs_volume:
|
|
||||||
name: "{{ cs_resource_prefix }}_vol"
|
|
||||||
vm: "{{ test_cs_instance_2 }}"
|
|
||||||
state: attached
|
|
||||||
register: vol
|
|
||||||
- name: verify results test attach attached volume to another vm
|
|
||||||
assert:
|
|
||||||
that:
|
|
||||||
- vol is changed
|
|
||||||
- vol.name == "{{ cs_resource_prefix }}_vol"
|
|
||||||
- vol.vm == "{{ test_cs_instance_2 }}"
|
|
||||||
- vol.attached is defined
|
|
||||||
|
|
||||||
- name: test attach attached volume to another vm idempotence
|
|
||||||
cs_volume:
|
|
||||||
name: "{{ cs_resource_prefix }}_vol"
|
|
||||||
vm: "{{ test_cs_instance_2 }}"
|
|
||||||
state: attached
|
|
||||||
register: vol
|
|
||||||
- name: verify results test attach attached volume to another vm idempotence
|
|
||||||
assert:
|
|
||||||
that:
|
|
||||||
- vol is not changed
|
|
||||||
- vol.name == "{{ cs_resource_prefix }}_vol"
|
|
||||||
- vol.vm == "{{ test_cs_instance_2 }}"
|
|
||||||
- vol.attached is defined
|
|
||||||
|
|
||||||
- name: test detach volume in check mode
|
|
||||||
cs_volume:
|
|
||||||
name: "{{ cs_resource_prefix }}_vol"
|
|
||||||
state: detached
|
|
||||||
register: vol
|
|
||||||
check_mode: true
|
|
||||||
- name: verify results test detach volume in check mdoe
|
|
||||||
assert:
|
|
||||||
that:
|
|
||||||
- vol is changed
|
|
||||||
- vol.name == "{{ cs_resource_prefix }}_vol"
|
|
||||||
- vol.attached is defined
|
|
||||||
|
|
||||||
- name: test detach volume
|
|
||||||
cs_volume:
|
|
||||||
name: "{{ cs_resource_prefix }}_vol"
|
|
||||||
state: detached
|
|
||||||
register: vol
|
|
||||||
- name: verify results test detach volume
|
|
||||||
assert:
|
|
||||||
that:
|
|
||||||
- vol is changed
|
|
||||||
- vol.name == "{{ cs_resource_prefix }}_vol"
|
|
||||||
- vol.attached is undefined
|
|
||||||
|
|
||||||
- name: test detach volume idempotence
|
|
||||||
cs_volume:
|
|
||||||
name: "{{ cs_resource_prefix }}_vol"
|
|
||||||
state: detached
|
|
||||||
register: vol
|
|
||||||
- name: verify results test detach volume idempotence
|
|
||||||
assert:
|
|
||||||
that:
|
|
||||||
- vol is not changed
|
|
||||||
- vol.name == "{{ cs_resource_prefix }}_vol"
|
|
||||||
- vol.attached is undefined
|
|
||||||
|
|
||||||
- name: test delete volume in check mode
|
|
||||||
cs_volume:
|
|
||||||
name: "{{ cs_resource_prefix }}_vol"
|
|
||||||
state: absent
|
|
||||||
register: vol
|
|
||||||
check_mode: true
|
|
||||||
- name: verify results test create volume in check mode
|
|
||||||
assert:
|
|
||||||
that:
|
|
||||||
- vol is changed
|
|
||||||
- vol.name == "{{ cs_resource_prefix }}_vol"
|
|
||||||
|
|
||||||
- name: test delete volume
|
|
||||||
cs_volume:
|
|
||||||
name: "{{ cs_resource_prefix }}_vol"
|
|
||||||
state: absent
|
|
||||||
register: vol
|
|
||||||
- name: verify results test create volume
|
|
||||||
assert:
|
|
||||||
that:
|
|
||||||
- vol is changed
|
|
||||||
- vol.name == "{{ cs_resource_prefix }}_vol"
|
|
||||||
|
|
||||||
- name: test delete volume idempotence
|
|
||||||
cs_volume:
|
|
||||||
name: "{{ cs_resource_prefix }}_vol"
|
|
||||||
state: absent
|
|
||||||
register: vol
|
|
||||||
- name: verify results test delete volume idempotence
|
|
||||||
assert:
|
|
||||||
that:
|
|
||||||
- vol is not changed
|
|
||||||
|
|
||||||
- name: cleanup instance 1
|
|
||||||
cs_instance:
|
|
||||||
name: "{{ test_cs_instance_1 }}"
|
|
||||||
state: absent
|
|
||||||
register: instance
|
|
||||||
- name: verify create instance
|
|
||||||
assert:
|
|
||||||
that:
|
|
||||||
- instance is successful
|
|
||||||
|
|
||||||
- name: cleanup instance 2
|
|
||||||
cs_instance:
|
|
||||||
name: "{{ test_cs_instance_2 }}"
|
|
||||||
state: absent
|
|
||||||
register: instance
|
|
||||||
- name: verify create instance
|
|
||||||
assert:
|
|
||||||
that:
|
|
||||||
- instance is successful
|
|
||||||
|
|
Loading…
Reference in a new issue