def get_service_instances_needing_update( marathon_clients: MarathonClients, instances: Collection[Tuple[str, str]], cluster: str, ) -> List[Tuple[str, str, MarathonServiceConfig, str]]: marathon_apps = {} for marathon_client in marathon_clients.get_all_clients(): marathon_apps.update( {app.id: app for app in get_all_marathon_apps(marathon_client)}) marathon_app_ids = marathon_apps.keys() service_instances = [] for service, instance in instances: try: config = load_marathon_service_config_no_cache( service=service, instance=instance, cluster=cluster, soa_dir=DEFAULT_SOA_DIR, ) config_app = config.format_marathon_app_dict() app_id = "/{}".format(config_app["id"]) # Not ideal but we rely on a lot of user input to create the app dict # and we really can't afford to bail if just one app definition is malformed except Exception as e: print("ERROR: Skipping {}.{} because: '{}'".format( service, instance, str(e))) continue if (app_id not in marathon_app_ids or marathon_apps[app_id].instances != config_app["instances"]): service_instances.append((service, instance, config, app_id)) return service_instances
def get_service_instances_needing_update( marathon_clients: MarathonClients, instances: Collection[Tuple[str, str]], cluster: str, ) -> List[Tuple[str, str]]: marathon_apps = {} for marathon_client in marathon_clients.get_all_clients(): marathon_apps.update( {app.id: app for app in get_all_marathon_apps(marathon_client)}) marathon_app_ids = marathon_apps.keys() service_instances = [] for service, instance in instances: try: config = load_marathon_service_config_no_cache( service=service, instance=instance, cluster=cluster, soa_dir=DEFAULT_SOA_DIR, ) config_app = config.format_marathon_app_dict() app_id = '/{}'.format(config_app['id']) except (NoDockerImageError, InvalidJobNameError, NoDeploymentsAvailable) as e: print("DEBUG: Skipping %s.%s because: '%s'" % (service, instance, str(e))) continue if app_id not in marathon_app_ids: service_instances.append((service, instance)) elif marathon_apps[app_id].instances != config_app['instances']: service_instances.append((service, instance)) return service_instances