Esempio n. 1
0
 def CreateGlobalReferences(self, resource_names, resource_type=None):
     """Returns a list of resolved global resource references."""
     resource_refs = []
     for resource_name in resource_names:
         resource_refs.append(
             self.resources.Parse(resource_name,
                                  collection=utils.GetApiCollection(
                                      resource_type or self.resource_type)))
     return resource_refs
 def CreateGlobalReferences(self, resource_names, resource_type=None):
   """Returns a list of resolved global resource references."""
   resource_refs = []
   for resource_name in resource_names:
     resource_refs.append(self.resources.Parse(
         resource_name,
         params={
             'project': properties.VALUES.core.project.GetOrFail,
         },
         collection=utils.GetApiCollection(
             resource_type or self.resource_type)))
   return resource_refs
    def PromptForMultiScopedReferences(self, resource_names, scope_names,
                                       scope_services, resource_types,
                                       flag_names):
        """Prompt for resources, which can be placed in several different scopes."""

        # one service and resource type per scope
        if len(scope_names) != len(scope_services) or (len(scope_names) !=
                                                       len(resource_types)):
            raise _InvalidPromptInvocation()

        resource_refs = []
        ambiguous_names = []
        for resource_name in resource_names:
            for resource_type in resource_types:
                collection = utils.GetApiCollection(resource_type)
                params = {
                    'project': properties.VALUES.core.project.GetOrFail,
                }
                collection_info = self.resources.GetCollectionInfo(collection)
                if 'zone' in collection_info.params:
                    params['zone'] = properties.VALUES.compute.zone.GetOrFail
                elif 'region' in collection_info.params:
                    params[
                        'region'] = properties.VALUES.compute.region.GetOrFail
                try:
                    resource_ref = self.resources.Parse(resource_name,
                                                        params=params,
                                                        collection=collection)
                except resources.WrongResourceCollectionException:
                    pass
                except (resources.RequiredFieldOmittedException,
                        properties.RequiredPropertyError):
                    ambiguous_names.append((resource_name, params, collection))
                else:
                    resource_refs.append(resource_ref)

        if ambiguous_names:
            resource_refs += self._PromptForScope(
                ambiguous_names=ambiguous_names,
                attributes=scope_names,
                services=scope_services,
                resource_type=resource_types[0],
                flag_names=flag_names,
                prefix_filter=None)

        return resource_refs
Esempio n. 4
0
    def CreateScopedReferences(self,
                               resource_names,
                               scope_name,
                               scope_arg,
                               scope_service,
                               resource_type,
                               flag_names,
                               prefix_filter=None):
        """Returns a list of resolved resource references for scoped resources."""
        resource_refs = []
        ambiguous_names = []
        resource_type = resource_type or self.resource_type
        collection = utils.GetApiCollection(resource_type)
        for resource_name in resource_names:
            params = {
                'project':
                properties.VALUES.core.project.GetOrFail,
                scope_name:
                (scope_arg
                 or getattr(properties.VALUES.compute, scope_name).GetOrFail)
            }
            try:
                resource_ref = self.resources.Parse(resource_name,
                                                    collection=collection,
                                                    params=params)
            except (resources.RequiredFieldOmittedException,
                    properties.RequiredPropertyError):
                ambiguous_names.append((resource_name, params, collection))
            else:
                resource_refs.append(resource_ref)

        has_default = utils.HasApiParamDefaultValue(self.resources,
                                                    resource_type, scope_name)
        if ambiguous_names and not scope_arg and not has_default:
            # We need to prompt.
            resource_refs += self._PromptForScope(
                ambiguous_names=ambiguous_names,
                attributes=[scope_name],
                services=[scope_service],
                resource_type=resource_type,
                flag_names=flag_names,
                prefix_filter=prefix_filter)

        return resource_refs
Esempio n. 5
0
    def PromptForMultiScopedReferences(self, resource_names, scope_names,
                                       scope_services, resource_types,
                                       flag_names):
        """Prompt for resources, which can be placed in several different scopes."""

        # one service and resource type per scope
        if len(scope_names) != len(scope_services) or (len(scope_names) !=
                                                       len(resource_types)):
            raise _InvalidPromptInvocation()

        resource_refs = []
        ambiguous_names = []
        for resource_name in resource_names:
            for resource_type in resource_types:
                collection = utils.GetApiCollection(resource_type)
                try:
                    resource_ref = self.resources.Parse(resource_name,
                                                        collection=collection,
                                                        params={})
                except resources.WrongResourceCollectionException:
                    pass
                except (resources.RequiredFieldOmittedException,
                        properties.RequiredPropertyError):
                    ambiguous_names.append((resource_name, {}, collection))
                else:
                    resource_refs.append(resource_ref)

        if ambiguous_names:
            resource_refs += self._PromptForScope(
                ambiguous_names=ambiguous_names,
                attributes=scope_names,
                services=scope_services,
                resource_type=resource_types[0],
                flag_names=flag_names,
                prefix_filter=None)

        return resource_refs