示例#1
0
    def get_waiter(self, waiter_name):
        config = self._get_waiter_config()
        if not config:
            raise ValueError("Waiter does not exist: %s" % waiter_name)
        model = waiter.WaiterModel(config)
        mapping = {}
        for name in model.waiter_names:
            mapping[xform_name(name)] = name
        if waiter_name not in mapping:
            raise ValueError("Waiter does not exist: %s" % waiter_name)

        return waiter.create_waiter_with_client(
            mapping[waiter_name], model, self)
示例#2
0
    def get(self, name):
        """
        :type name: str
        :param name: The name of the waiter

        :rtype: botocore.waiter.Waiter
        :return: The waiter object.
        """

        if not self.__has(name):
            config = self.model_configs.get(name)
            model = waiter.WaiterModel(config.get('model'))
            client = self.clients.get(config.get('client'))
            self.__create(name, model, client)

        return self.waiters.get(name)
示例#3
0
    def get_waiter(self, waiter_name):
        """Returns an object that can wait for some condition.

        :type waiter_name: str
        :param waiter_name: The name of the waiter to get. See the waiters
            section of the service docs for a list of available waiters.

        :returns: The specified waiter object.
        :rtype: botocore.waiter.Waiter
        """
        config = self._get_waiter_config()
        if not config:
            raise ValueError("Waiter does not exist: %s" % waiter_name)
        model = waiter.WaiterModel(config)
        mapping = {}
        for name in model.waiter_names:
            mapping[xform_name(name)] = name
        if waiter_name not in mapping:
            raise ValueError("Waiter does not exist: %s" % waiter_name)

        return waiter.create_waiter_with_client(mapping[waiter_name], model,
                                                self)
示例#4
0
    def get_dynamodb_scan_count_is(self, size):
        """
        :type size: int or str
        :param size: The number of expected scan items to find

        :rtype: botocore.waiter.Waiter
        :return: The waiter object.
        """
        name = "ScanCountIs" + str(size)

        if not self.__has(name):
            model = waiter.WaiterModel({
                "version": 2,
                "waiters": {
                    name: {
                        "delay":
                        15,
                        "operation":
                        "Scan",
                        "maxAttempts":
                        40,
                        "acceptors": [{
                            "expected":
                            True,
                            "matcher":
                            "path",
                            "state":
                            "success",
                            "argument":
                            "length(Items[]) == "
                            f"`{size}`"
                        }]
                    }
                }
            })
            self.__create(name, model, self.clients.get('dynamodb'))

        return self.get(name)
示例#5
0
 def get_waiter_model(self, service_name, api_version=None):
     loader = self.get_component('data_loader')
     waiter_config = loader.load_service_model(service_name, 'waiters-2',
                                               api_version)
     return waiter.WaiterModel(waiter_config)
示例#6
0
def model_for(name):
    ec2_models = core_waiter.WaiterModel(waiter_config=ec2_data)
    return ec2_models.get_waiter(name)
示例#7
0
def route53_model(name):
    route53_models = core_waiter.WaiterModel(waiter_config=_inject_limit_retries(route53_data))
    return route53_models.get_waiter(name)
示例#8
0
def elb_model(name):
    elb_models = core_waiter.WaiterModel(waiter_config=_inject_limit_retries(elb_data))
    return elb_models.get_waiter(name)
示例#9
0
def waf_model(name):
    waf_models = core_waiter.WaiterModel(waiter_config=_inject_limit_retries(waf_data))
    return waf_models.get_waiter(name)
示例#10
0
from botocore import waiter
import jmespath


ecs_model = waiter.WaiterModel({
    'version': 2,
    'waiters': {
        'ServiceDrained': {
            'operation': 'DescribeServices',
            'delay': 6,
            'maxAttempts': 150,
            'acceptors': [
                {
                    'expected': 0,
                    'matcher': 'pathAll',
                    'state': 'success',
                    'argument': 'services[].runningCount',
                },
            ]
        }
    }
})


class Cluster:
    def __init__(self, cluster, scheduler, worker, web, client):
        self.name = cluster
        self.scheduler = scheduler
        self.worker = worker
        self.web = web
        self.ecs = client
示例#11
0
def rds_model(name):
    rds_models = core_waiter.WaiterModel(waiter_config=rds_data)
    return rds_models.get_waiter(name)
示例#12
0
def eks_model(name):
    eks_models = core_waiter.WaiterModel(waiter_config=eks_data)
    return eks_models.get_waiter(name)
示例#13
0
def waf_model(name):
    waf_models = core_waiter.WaiterModel(waiter_config=waf_data)
    return waf_models.get_waiter(name)
示例#14
0
    def get_autoscaling_complete_for(self, instance_id, is_launching):
        """
        :rtype: botocore.waiter.Waiter
        :return: The waiter object.
        """

        if is_launching:
            desc = "Launching a new EC2 instance: " + instance_id
            name = "AutoscalingCompleteForLaunching" + instance_id
        else:
            desc = "Terminating EC2 instance: " + instance_id
            name = "AutoscalingCompleteForTerminating" + instance_id

        if not self.__has(name):
            model = waiter.WaiterModel({
                "version": 2,
                "waiters": {
                    name: {
                        "delay":
                        20,
                        "operation":
                        "DescribeScalingActivities",
                        "maxAttempts":
                        6,
                        "acceptors": [{
                            "expected":
                            True,
                            "matcher":
                            "path",
                            "state":
                            "failure",
                            "argument":
                            "length(Activities[?contains(Description, '"
                            f"{desc}"
                            "')]) < `1`"
                        }, {
                            "expected":
                            True,
                            "matcher":
                            "path",
                            "state":
                            "retry",
                            "argument":
                            "Activities[?contains(Description, '"
                            f"{desc}"
                            "')] | [0].Progress < `100`"
                        }, {
                            "expected":
                            True,
                            "matcher":
                            "path",
                            "state":
                            "success",
                            "argument":
                            "Activities[?contains(Description, '"
                            f"{desc}"
                            "')] | [0].Progress == `100`"
                        }]
                    }
                }
            })
            self.__create(name, model, self.clients.get('autoscaling'))

        return self.get(name)