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