ec2_vpc_vpn: Add delay and wait_timeout parameter (#53940)
* ec2_vpc_vpn: Add delay and wait_timeout parameter Fixes: #53481 Signed-off-by: Abhijeet Kasurde <akasurde@redhat.com> * Fix unit tests Signed-off-by: Abhijeet Kasurde <akasurde@redhat.com>
This commit is contained in:
parent
231f3e138a
commit
3fa39ac818
2 changed files with 40 additions and 10 deletions
|
@ -110,6 +110,20 @@ options:
|
|||
description:
|
||||
- Whether or not to delete VPN connections routes that are not specified in the task.
|
||||
type: bool
|
||||
wait_timeout:
|
||||
description:
|
||||
- How long before wait gives up, in seconds.
|
||||
default: 600
|
||||
type: int
|
||||
required: false
|
||||
version_added: "2.8"
|
||||
delay:
|
||||
description:
|
||||
- The time to wait before checking operation again. in seconds.
|
||||
required: false
|
||||
type: int
|
||||
default: 15
|
||||
version_added: "2.8"
|
||||
"""
|
||||
|
||||
EXAMPLES = """
|
||||
|
@ -434,11 +448,10 @@ def find_connection_response(connections=None):
|
|||
return connections['VpnConnections'][0]
|
||||
|
||||
|
||||
def create_connection(connection, customer_gateway_id, static_only, vpn_gateway_id, connection_type, tunnel_options=None):
|
||||
def create_connection(connection, customer_gateway_id, static_only, vpn_gateway_id, connection_type, max_attempts, delay, tunnel_options=None):
|
||||
""" Creates a VPN connection """
|
||||
|
||||
options = {'StaticRoutesOnly': static_only}
|
||||
|
||||
if tunnel_options and len(tunnel_options) <= 2:
|
||||
t_opt = []
|
||||
for m in tunnel_options:
|
||||
|
@ -458,7 +471,10 @@ def create_connection(connection, customer_gateway_id, static_only, vpn_gateway_
|
|||
CustomerGatewayId=customer_gateway_id,
|
||||
VpnGatewayId=vpn_gateway_id,
|
||||
Options=options)
|
||||
connection.get_waiter('vpn_connection_available').wait(VpnConnectionIds=[vpn['VpnConnection']['VpnConnectionId']])
|
||||
connection.get_waiter('vpn_connection_available').wait(
|
||||
VpnConnectionIds=[vpn['VpnConnection']['VpnConnectionId']],
|
||||
WaiterConfig={'Delay': delay, 'MaxAttempts': max_attempts}
|
||||
)
|
||||
except WaiterError as e:
|
||||
raise VPNConnectionException(msg="Failed to wait for VPN connection {0} to be available".format(vpn['VpnConnection']['VpnConnectionId']),
|
||||
exception=e)
|
||||
|
@ -469,11 +485,14 @@ def create_connection(connection, customer_gateway_id, static_only, vpn_gateway_
|
|||
return vpn['VpnConnection']
|
||||
|
||||
|
||||
def delete_connection(connection, vpn_connection_id):
|
||||
def delete_connection(connection, vpn_connection_id, delay, max_attempts):
|
||||
""" Deletes a VPN connection """
|
||||
try:
|
||||
connection.delete_vpn_connection(VpnConnectionId=vpn_connection_id)
|
||||
connection.get_waiter('vpn_connection_deleted').wait(VpnConnectionIds=[vpn_connection_id])
|
||||
connection.get_waiter('vpn_connection_deleted').wait(
|
||||
VpnConnectionIds=[vpn_connection_id],
|
||||
WaiterConfig={'Delay': delay, 'MaxAttempts': max_attempts}
|
||||
)
|
||||
except WaiterError as e:
|
||||
raise VPNConnectionException(msg="Failed to wait for VPN connection {0} to be removed".format(vpn_connection_id),
|
||||
exception=e)
|
||||
|
@ -641,6 +660,8 @@ def ensure_present(connection, module_params, check_mode=False):
|
|||
""" Creates and adds tags to a VPN connection. If the connection already exists update tags. """
|
||||
vpn_connection = find_connection(connection, module_params)
|
||||
changed = False
|
||||
delay = module_params.get('delay')
|
||||
max_attempts = module_params.get('wait_timeout') // delay
|
||||
|
||||
# No match but vpn_connection_id was specified.
|
||||
if not vpn_connection and module_params.get('vpn_connection_id'):
|
||||
|
@ -665,7 +686,9 @@ def ensure_present(connection, module_params, check_mode=False):
|
|||
static_only=module_params.get('static_only'),
|
||||
vpn_gateway_id=module_params.get('vpn_gateway_id'),
|
||||
connection_type=module_params.get('connection_type'),
|
||||
tunnel_options=module_params.get('tunnel_options'))
|
||||
tunnel_options=module_params.get('tunnel_options'),
|
||||
max_attempts=max_attempts,
|
||||
delay=delay)
|
||||
changes = check_for_update(connection, module_params, vpn_connection['VpnConnectionId'])
|
||||
_ = make_changes(connection, vpn_connection['VpnConnectionId'], changes)
|
||||
|
||||
|
@ -685,8 +708,11 @@ def ensure_absent(connection, module_params, check_mode=False):
|
|||
if check_mode:
|
||||
return get_check_mode_results(connection, module_params, vpn_connection['VpnConnectionId'] if vpn_connection else None)
|
||||
|
||||
delay = module_params.get('delay')
|
||||
max_attempts = module_params.get('wait_timeout') // delay
|
||||
|
||||
if vpn_connection:
|
||||
delete_connection(connection, vpn_connection['VpnConnectionId'])
|
||||
delete_connection(connection, vpn_connection['VpnConnectionId'], delay=delay, max_attempts=max_attempts)
|
||||
changed = True
|
||||
else:
|
||||
changed = False
|
||||
|
@ -708,6 +734,8 @@ def main():
|
|||
purge_tags=dict(type='bool', default=False),
|
||||
routes=dict(type='list', default=[]),
|
||||
purge_routes=dict(type='bool', default=False),
|
||||
wait_timeout=dict(type='int', default=600),
|
||||
delay=dict(type='int', default=15),
|
||||
)
|
||||
module = AnsibleAWSModule(argument_spec=argument_spec,
|
||||
supports_check_mode=True)
|
||||
|
|
|
@ -96,7 +96,9 @@ def make_params(cgw, vgw, tags=None, filters=None, routes=None):
|
|||
'purge_tags': True,
|
||||
'tags': tags,
|
||||
'filters': filters,
|
||||
'routes': routes}
|
||||
'routes': routes,
|
||||
'delay': 15,
|
||||
'wait_timeout': 600}
|
||||
|
||||
|
||||
def make_conn(placeboify, module, connection):
|
||||
|
@ -111,7 +113,7 @@ def make_conn(placeboify, module, connection):
|
|||
|
||||
|
||||
def tear_down_conn(placeboify, connection, vpn_connection_id):
|
||||
ec2_vpc_vpn.delete_connection(connection, vpn_connection_id)
|
||||
ec2_vpc_vpn.delete_connection(connection, vpn_connection_id, delay=15, max_attempts=40)
|
||||
|
||||
|
||||
def test_find_connection_vpc_conn_id(placeboify, maybe_sleep):
|
||||
|
@ -251,7 +253,7 @@ def test_delete_connection(placeboify, maybe_sleep):
|
|||
|
||||
def test_delete_nonexistent_connection(placeboify, maybe_sleep):
|
||||
# create parameters and ensure any connection matching (None) is deleted
|
||||
params = {'filters': {'tags': {'ThisConnection': 'DoesntExist'}}}
|
||||
params = {'filters': {'tags': {'ThisConnection': 'DoesntExist'}}, 'delay': 15, 'wait_timeout': 600}
|
||||
m, conn = setup_mod_conn(placeboify, params)
|
||||
changed, vpn = ec2_vpc_vpn.ensure_absent(conn, m.params)
|
||||
|
||||
|
|
Loading…
Reference in a new issue