예제 #1
0
    def setUp(self):
        self.assignments = MagicMock(spec=Table)
        self.assignments._dynamizer = MagicMock()
        self.regions = MagicMock(spec=Table)
        self.services = MagicMock(spec=Table)
        self.stacks = MagicMock(spec=Table)
        self.status = MagicMock(spec=Table)

        self.db = FlotillaSchedulerDynamo(self.assignments, self.regions,
                                          self.services, self.stacks,
                                          self.status)
예제 #2
0
def wait_for_deployment(dynamo_cache, regions, service_name, rev_hash, timeout):
    logger.info('Waiting for %s in %s regions...', rev_hash, len(regions))

    # There can be only one!
    doctor_cache = {}
    for region in regions:
        tables = dynamo_cache[region]
        tables.setup(['status'])
        db = FlotillaSchedulerDynamo(None, None, tables.services, None,
                                     tables.status)
        elb = boto3.client('elb', region)
        doctor = ServiceDoctor(db, elb)
        doctor_cache[region] = doctor

    start_time = time()
    while True:
        all_healthy = True
        try:
            for region, doctor in doctor_cache.items():
                healthy = doctor.is_healthy_revision(service_name, rev_hash)
                if not healthy:
                    all_healthy = False
                    logger.info('Waiting for %s in %s...', rev_hash, region)
                    continue
                logger.info('Region %s has a health %s instance!', region,
                            rev_hash)
                doctor.db.make_only_revision(service_name, rev_hash)
        except ValueError:
            break

        if all_healthy:
            logger.info('All regions have a health %s instance!', rev_hash)
            return True
        if time() - start_time > timeout:
            break
        sleep(5)

    wait_time = time() - start_time
    logger.info('Revision %s not stable after %s seconds.', rev_hash, wait_time)
    for region, doctor in doctor_cache.items():
        service_item = doctor.db.get_service(service_name)
        if rev_hash in service_item and service_item[rev_hash] > 0:
            service_item[rev_hash] *= -1
            doctor.db.set_services([service_item])
예제 #3
0
    def setUp(self):
        self.assignments = MagicMock(spec=Table)
        self.assignments._dynamizer = MagicMock()
        self.regions = MagicMock(spec=Table)
        self.services = MagicMock(spec=Table)
        self.stacks = MagicMock(spec=Table)
        self.status = MagicMock(spec=Table)
        self.service_item = MagicMock(spec=Item)
        self.service_data = {'service_name': SERVICE, REVISION: 1}
        self.service_item.__getitem__.side_effect = \
            self.service_data.__getitem__
        self.service_item.__setitem__.side_effect = \
            self.service_data.__setitem__
        self.service_item.__contains__.side_effect = \
            self.service_data.__contains__
        self.service_item.items.side_effect = \
            self.service_data.items
        self.service_item.__delitem__.side_effect = \
            self.service_data.__delitem__

        self.db = FlotillaSchedulerDynamo(self.assignments, self.regions,
                                          self.services, self.stacks,
                                          self.status)