in src/ansible_collections/alibaba/apsarastack/plugins/modules/ali_image.py [0:0]
def create_image(module, ecs, snapshot_id, image_name, image_version, description, instance_id,
disk_mapping, client_token, wait, wait_timeout):
"""
Create a user-defined image with snapshots.
:param module: Ansible module object
:param ecs: authenticated ecs connection object
:param snapshot_id: A user-defined image is created from the specified snapshot.
:param image_name: image name which is to be created
:param image_version: version of image
:param description: description of the image
:param instance_id: the specified instance_id
:param disk_mapping: list relating device and disk
:param client_token: Used to ensure the idempotence of the request
:param wait: Used to indicate wait for instance to be running before running
:param wait_timeout: Used to indicate how long to wait, default 300
:return: id of image
"""
changed = False
if image_name:
if len(image_name) < 2 or len(image_name) > 128:
module.fail_json(msg='image_name must be 2 - 128 characters long')
if image_name.startswith('http://') or image_name.startswith('https://'):
module.fail_json(msg='image_name can not start with http:// or https://')
if image_version:
if image_version.isdigit():
if int(image_version) < 1 or int(image_version) > 40:
module.fail_json(msg='The permitted range of image_version is between 1 - 40')
else:
module.fail_json(msg='The permitted range of image_version is between 1 - 40, entered value is {0}'
.format(image_version))
if disk_mapping:
for mapping in disk_mapping:
if mapping:
if 'snapshot_id' not in mapping:
module.fail_json(msg='The snapshot_id of system disk is needed for disk mapping.')
if not('disk_size' in mapping or 'snapshot_id' in mapping):
module.fail_json(msg='The disk_size and snapshot_id parameters '
'are valid for disk mapping.')
if 'disk_size' in mapping:
map_disk = mapping['disk_size']
if map_disk:
if str(map_disk).isdigit():
if int(map_disk) < 5 or int(map_disk) > 2000:
module.fail_json(msg='The permitted range of disk-size is 5 GB - 2000 GB ')
else:
module.fail_json(msg='The disk_size must be an integer value, entered value is {0}'.format(
map_disk))
if not snapshot_id and not instance_id and not disk_mapping:
module.fail_json(msg='Either of SnapshotId or InstanceId or disk_mapping, must be present for '
'create image operation to get performed')
if (snapshot_id and instance_id) or (snapshot_id and disk_mapping) or (instance_id and disk_mapping):
module.fail_json(msg='Only 1 of SnapshotId or InstanceId or disk_mapping, must be present for '
'create image operation to get performed')
# call to create_image method in footmark
image_params = {'ImageName': image_name, 'ImageVersion': image_version, 'Description': description,
'InstanceId': instance_id, 'DiskDeviceMapping': disk_mapping, 'ClientToken': client_token,
}
response = do_create_image(module, image_params)
image_id = None
if response["asapiSuccess"]:
changed = True
image_id = response["ImageId"]
return changed, image_id, describe_image(module, image_id, wait, wait_timeout)