def _RoutesNextHopToCell(route): """Returns the next hop value in a compact form.""" if route.get('nextHopInstance'): return path_simplifier.ScopedSuffix(route.get('nextHopInstance')) elif route.get('nextHopGateway'): return path_simplifier.ScopedSuffix(route.get('nextHopGateway')) elif route.get('nextHopIp'): return route.get('nextHopIp') else: return ''
def TransformScopedSuffixes(uris, undefined=''): """Get just the scoped part of the object the uri refers to.""" if uris: try: return sorted([path_simplifier.ScopedSuffix(uri) for uri in uris]) except TypeError: pass return undefined
def testScopedSuffix(self): expected_suffix = { 'global': 'my-name', 'regional': 'my-region/names/my-name', 'zonal': 'my-zone/names/my-name', } for object_type, path in six.iteritems(self.paths): suffix = path_simplifier.ScopedSuffix(path) self.assertEqual(expected_suffix[object_type], suffix)
def TransformScopedSuffixes(uris, undefined=''): """Get just the scoped part of the object the uri refers to.""" if uris: return [path_simplifier.ScopedSuffix(uri) for uri in uris] return undefined
def ComputeInstanceGroupManagerMembership( compute, resources, http, batch_url, items, filter_mode=(InstanceGroupFilteringMode.ALL_GROUPS)): """Add information if instance group is managed. Args: compute: GCE Compute API client, resources: resource registry, http: http client, batch_url: str, batch url items: list of instance group messages, filter_mode: InstanceGroupFilteringMode, managed/unmanaged filtering options Returns: list of instance groups with computed dynamic properties """ errors = [] items = list(items) zone_links = set([ig['zone'] for ig in items if 'zone' in ig]) project_to_zones = {} for zone in zone_links: zone_ref = resources.Parse( zone, params={ 'project': properties.VALUES.core.project.GetOrFail, }, collection='compute.zones') if zone_ref.project not in project_to_zones: project_to_zones[zone_ref.project] = set() project_to_zones[zone_ref.project].add(zone_ref.zone) zonal_instance_group_managers = [] for project, zones in project_to_zones.iteritems(): zonal_instance_group_managers.extend( lister.GetZonalResources(service=compute.instanceGroupManagers, project=project, requested_zones=zones, filter_expr=None, http=http, batch_url=batch_url, errors=errors)) regional_instance_group_managers = [] if hasattr(compute, 'regionInstanceGroups'): # regional instance groups are just in 'alpha' API region_links = set([ig['region'] for ig in items if 'region' in ig]) project_to_regions = {} for region in region_links: region_ref = resources.Parse(region, collection='compute.regions') if region_ref.project not in project_to_regions: project_to_regions[region_ref.project] = set() project_to_regions[region_ref.project].add(region_ref.region) for project, regions in project_to_regions.iteritems(): regional_instance_group_managers.extend( lister.GetRegionalResources( service=compute.regionInstanceGroupManagers, project=project, requested_regions=regions, filter_expr=None, http=http, batch_url=batch_url, errors=errors)) instance_group_managers = (list(zonal_instance_group_managers) + list(regional_instance_group_managers)) instance_group_managers_refs = set([ path_simplifier.ScopedSuffix(igm.selfLink) for igm in instance_group_managers ]) if errors: utils.RaiseToolException(errors) results = [] for item in items: self_link = item['selfLink'] igm_self_link = self_link.replace('/instanceGroups/', '/instanceGroupManagers/') scoped_suffix = path_simplifier.ScopedSuffix(igm_self_link) is_managed = scoped_suffix in instance_group_managers_refs if (is_managed and filter_mode == InstanceGroupFilteringMode.ONLY_UNMANAGED_GROUPS): continue elif (not is_managed and filter_mode == InstanceGroupFilteringMode.ONLY_MANAGED_GROUPS): continue item['isManaged'] = ('Yes' if is_managed else 'No') if is_managed: item['instanceGroupManagerUri'] = igm_self_link results.append(item) return results
def ComputeInstanceGroupManagerMembership( compute, project, http, batch_url, items, filter_mode=(InstanceGroupFilteringMode.ALL_GROUPS)): """Add information if instance group is managed. Args: compute: GCE Compute API client, project: str, project name http: http client, batch_url: str, batch url items: list of instance group messages, filter_mode: InstanceGroupFilteringMode, managed/unmanaged filtering options Returns: list of instance groups with computed dynamic properties """ errors = [] items = list(items) zone_names = set( [path_simplifier.Name(ig['zone']) for ig in items if 'zone' in ig]) region_names = set( [path_simplifier.Name(ig['region']) for ig in items if 'region' in ig]) if zone_names: zonal_instance_group_managers = lister.GetZonalResources( service=compute.instanceGroupManagers, project=project, requested_zones=zone_names, filter_expr=None, http=http, batch_url=batch_url, errors=errors) else: zonal_instance_group_managers = [] if region_names and hasattr(compute, 'regionInstanceGroups'): # regional instance groups are just in 'alpha' API regional_instance_group_managers = lister.GetRegionalResources( service=compute.regionInstanceGroupManagers, project=project, requested_regions=region_names, filter_expr=None, http=http, batch_url=batch_url, errors=errors) else: regional_instance_group_managers = [] instance_group_managers = (list(zonal_instance_group_managers) + list(regional_instance_group_managers)) instance_group_managers_refs = set([ path_simplifier.ScopedSuffix(igm.selfLink) for igm in instance_group_managers ]) if errors: utils.RaiseToolException(errors) results = [] for item in items: self_link = item['selfLink'] igm_self_link = self_link.replace('/instanceGroups/', '/instanceGroupManagers/') scoped_suffix = path_simplifier.ScopedSuffix(igm_self_link) is_managed = scoped_suffix in instance_group_managers_refs if (is_managed and filter_mode == InstanceGroupFilteringMode.ONLY_UNMANAGED_GROUPS): continue elif (not is_managed and filter_mode == InstanceGroupFilteringMode.ONLY_MANAGED_GROUPS): continue item['isManaged'] = ('Yes' if is_managed else 'No') if is_managed: item['instanceGroupManagerUri'] = igm_self_link results.append(item) return results