|
|
|
|
@ -69,6 +69,12 @@ options:
|
|
|
|
|
- Image ID to be deregistered.
|
|
|
|
|
required: false
|
|
|
|
|
default: null
|
|
|
|
|
device_mapping:
|
|
|
|
|
version_added: "1.9"
|
|
|
|
|
description:
|
|
|
|
|
- An optional list of devices with custom configurations (same block-device-mapping parameters)
|
|
|
|
|
required: false
|
|
|
|
|
default: null
|
|
|
|
|
delete_snapshot:
|
|
|
|
|
description:
|
|
|
|
|
- Whether or not to delete an AMI while deregistering it.
|
|
|
|
|
@ -110,6 +116,23 @@ EXAMPLES = '''
|
|
|
|
|
name: newtest
|
|
|
|
|
register: instance
|
|
|
|
|
|
|
|
|
|
# AMI Creation, with a custom root-device size and another EBS attached
|
|
|
|
|
- ec2_ami
|
|
|
|
|
aws_access_key: xxxxxxxxxxxxxxxxxxxxxxx
|
|
|
|
|
aws_secret_key: xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
|
|
|
|
|
instance_id: i-xxxxxx
|
|
|
|
|
name: newtest
|
|
|
|
|
device_mapping:
|
|
|
|
|
- device_name: /dev/sda1
|
|
|
|
|
size: XXX
|
|
|
|
|
delete_on_termination: true
|
|
|
|
|
volume_type: gp2
|
|
|
|
|
- device_name: /dev/sdb
|
|
|
|
|
size: YYY
|
|
|
|
|
delete_on_termination: false
|
|
|
|
|
volume_type: gp2
|
|
|
|
|
register: instance
|
|
|
|
|
|
|
|
|
|
# Deregister/Delete AMI
|
|
|
|
|
- ec2_ami:
|
|
|
|
|
aws_access_key: xxxxxxxxxxxxxxxxxxxxxxx
|
|
|
|
|
@ -136,6 +159,7 @@ import time
|
|
|
|
|
try:
|
|
|
|
|
import boto
|
|
|
|
|
import boto.ec2
|
|
|
|
|
from boto.ec2.blockdevicemapping import BlockDeviceType, BlockDeviceMapping
|
|
|
|
|
HAS_BOTO = True
|
|
|
|
|
except ImportError:
|
|
|
|
|
HAS_BOTO = False
|
|
|
|
|
@ -155,6 +179,7 @@ def create_image(module, ec2):
|
|
|
|
|
wait_timeout = int(module.params.get('wait_timeout'))
|
|
|
|
|
description = module.params.get('description')
|
|
|
|
|
no_reboot = module.params.get('no_reboot')
|
|
|
|
|
device_mapping = module.params.get('device_mapping')
|
|
|
|
|
tags = module.params.get('tags')
|
|
|
|
|
|
|
|
|
|
try:
|
|
|
|
|
@ -163,6 +188,17 @@ def create_image(module, ec2):
|
|
|
|
|
'description': description,
|
|
|
|
|
'no_reboot': no_reboot}
|
|
|
|
|
|
|
|
|
|
if device_mapping:
|
|
|
|
|
bdm = BlockDeviceMapping()
|
|
|
|
|
for device in device_mapping:
|
|
|
|
|
if 'device_name' not in device:
|
|
|
|
|
module.fail_json(msg = 'Device name must be set for volume')
|
|
|
|
|
device_name = device['device_name']
|
|
|
|
|
del device['device_name']
|
|
|
|
|
bd = BlockDeviceType(**device)
|
|
|
|
|
bdm[device_name] = bd
|
|
|
|
|
params['block_device_mapping'] = bdm
|
|
|
|
|
|
|
|
|
|
image_id = ec2.create_image(**params)
|
|
|
|
|
except boto.exception.BotoServerError, e:
|
|
|
|
|
if e.error_code == 'InvalidAMIName.Duplicate':
|
|
|
|
|
@ -257,8 +293,8 @@ def main():
|
|
|
|
|
description = dict(default=""),
|
|
|
|
|
no_reboot = dict(default=False, type="bool"),
|
|
|
|
|
state = dict(default='present'),
|
|
|
|
|
tags = dict(type='dict'),
|
|
|
|
|
|
|
|
|
|
device_mapping = dict(type='list'),
|
|
|
|
|
tags = dict(type='dict')
|
|
|
|
|
)
|
|
|
|
|
)
|
|
|
|
|
module = AnsibleModule(argument_spec=argument_spec)
|
|
|
|
|
@ -291,4 +327,3 @@ from ansible.module_utils.basic import *
|
|
|
|
|
from ansible.module_utils.ec2 import *
|
|
|
|
|
|
|
|
|
|
main()
|
|
|
|
|
|
|
|
|
|
|