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)
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])
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)