53 lines
1.5 KiB
Python
53 lines
1.5 KiB
Python
# Copyright: (c) 2018, Ansible Project
|
|
# GNU General Public License v3.0+ (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt)
|
|
try:
|
|
import botocore.waiter as core_waiter
|
|
except ImportError:
|
|
pass # caught by HAS_BOTO3
|
|
|
|
|
|
ec2_data = {
|
|
"version": 2,
|
|
"waiters": {
|
|
"RouteTableExists": {
|
|
"delay": 5,
|
|
"maxAttempts": 40,
|
|
"operation": "DescribeRouteTables",
|
|
"acceptors": [
|
|
{
|
|
"matcher": "path",
|
|
"expected": True,
|
|
"argument": "length(RouteTables[]) > `0`",
|
|
"state": "success"
|
|
},
|
|
{
|
|
"matcher": "error",
|
|
"expected": "InvalidRouteTableID.NotFound",
|
|
"state": "retry"
|
|
}
|
|
]
|
|
}
|
|
}
|
|
}
|
|
|
|
|
|
def model_for(name):
|
|
ec2_models = core_waiter.WaiterModel(waiter_config=ec2_data)
|
|
return ec2_models.get_waiter(name)
|
|
|
|
|
|
waiters_by_name = {
|
|
('EC2', 'route_table_exists'): lambda ec2: core_waiter.Waiter(
|
|
'route_table_exists',
|
|
model_for('RouteTableExists'),
|
|
ec2.describe_route_tables)
|
|
}
|
|
|
|
|
|
def get_waiter(client, waiter_name):
|
|
try:
|
|
return waiters_by_name[(client.__class__.__name__, waiter_name)](client)
|
|
except KeyError:
|
|
raise NotImplementedError("Waiter {0} could not be found for client {1}. Available waiters: {2}".format(
|
|
waiter_name, type(client), ', '.join(repr(k) for k in waiters_by_name.keys())))
|