ec2_snapshot_copy: Add wait_timeout module parameter (#38072) (#38243)

* ec2_snapshot_copy: add wait_timeout parameter
This commit is contained in:
Julien PRIGENT 2018-04-06 01:40:16 +01:00 committed by Will Thames
commit 1f3b480142

View file

@ -41,6 +41,11 @@ options:
- Wait for the copied Snapshot to be in 'Available' state before returning. - Wait for the copied Snapshot to be in 'Available' state before returning.
type: bool type: bool
default: 'no' default: 'no'
wait_timeout:
version_added: "2.6"
description:
- How long before wait gives up, in seconds.
default: 600
tags: tags:
description: description:
- A hash/dictionary of tags to add to the new Snapshot; '{"key":"value"}' and '{"key":"value","key":"value"}' - A hash/dictionary of tags to add to the new Snapshot; '{"key":"value"}' and '{"key":"value","key":"value"}'
@ -65,6 +70,7 @@ EXAMPLES = '''
region: eu-west-1 region: eu-west-1
source_snapshot_id: snap-xxxxxxx source_snapshot_id: snap-xxxxxxx
wait: yes wait: yes
wait_timeout: 1200 # Default timeout is 600
register: snapshot_id register: snapshot_id
# Tagged Snapshot copy # Tagged Snapshot copy
@ -135,7 +141,14 @@ def copy_snapshot(module, ec2):
try: try:
snapshot_id = ec2.copy_snapshot(**params)['SnapshotId'] snapshot_id = ec2.copy_snapshot(**params)['SnapshotId']
if module.params.get('wait'): if module.params.get('wait'):
ec2.get_waiter('snapshot_completed').wait(SnapshotIds=[snapshot_id]) delay = 15
# Add one to max_attempts as wait() increment
# its counter before assessing it for time.sleep()
max_attempts = (module.params.get('wait_timeout') // delay) + 1
ec2.get_waiter('snapshot_completed').wait(
SnapshotIds=[snapshot_id],
WaiterConfig=dict(Delay=delay, MaxAttempts=max_attempts)
)
if module.params.get('tags'): if module.params.get('tags'):
ec2.create_tags( ec2.create_tags(
Resources=[snapshot_id], Resources=[snapshot_id],
@ -159,6 +172,7 @@ def main():
encrypted=dict(type='bool', default=False, required=False), encrypted=dict(type='bool', default=False, required=False),
kms_key_id=dict(type='str', required=False), kms_key_id=dict(type='str', required=False),
wait=dict(type='bool', default=False), wait=dict(type='bool', default=False),
wait_timeout=dict(type='int', default=600),
tags=dict(type='dict'))) tags=dict(type='dict')))
module = AnsibleModule(argument_spec=argument_spec) module = AnsibleModule(argument_spec=argument_spec)