Exemple #1
0
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 ''
Exemple #2
0
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)
Exemple #4
0
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