def _YieldPrintableTypesOrErrors(self, type_providers): """Yield dicts of types list, provider, and (optionally) an error message. Args: type_providers: A list of Type Provider names to grab Type Info messages for. Yields: A dict object with a list of types, a type provider, and (optionally) an error message for display. """ for type_provider in type_providers: request = (dm_beta_base.GetMessages(). DeploymentmanagerTypeProvidersListTypesRequest( project=self.project, typeProvider=type_provider)) try: paginated_types = dm_v2_util.YieldWithHttpExceptions( list_pager.YieldFromList(TypeProviderClient(), request, method='ListTypes', field='types', batch_size=self.page_size, limit=self.limit)) yield { 'types': list(paginated_types), 'provider': type_provider } except api_exceptions.HttpException as error: yield { 'types': [], 'provider': type_provider, 'error': error.message }
def Run(self, args): """Run 'types delete'. Args: args: argparse.Namespace, The arguments that this command was invoked with. Raises: HttpException: An http error response was received while executing api request. """ composite_type_ref = composite_types.GetReference(args.name) if not args.quiet: prompt_message = 'Are you sure you want to delete [{0}]?'.format( args.name) if not console_io.PromptContinue(message=prompt_message, default=False): raise exceptions.OperationError('Deletion aborted by user.') request = (dm_beta_base.GetMessages(). DeploymentmanagerCompositeTypesDeleteRequest( project=composite_type_ref.project, compositeType=args.name)) dm_write.Execute(request, args.async, dm_beta_base.GetClient().compositeTypes.Delete, LogResource)
def Run(self, args): """Runs 'type-proivders describe'. Args: args: argparse.Namespace, The arguments that this command was invoked with. Returns: The requested TypeProvider. Raises: HttpException: An http error response was received while executing the api request. InvalidArgumentException: The requested type provider could not be found. """ type_provider_ref = dm_beta_base.GetResources().Parse( args.provider_name, params={'project': properties.VALUES.core.project.GetOrFail}, collection='deploymentmanager.typeProviders') messages = dm_beta_base.GetMessages() request = messages.DeploymentmanagerTypeProvidersGetRequest( **type_provider_ref.AsDict()) client = dm_beta_base.GetClient() return client.typeProviders.Get(request)
def Run(self, args): """Run 'type-providers create'. Args: args: argparse.Namespace, The arguments that this command was invoked with. Raises: HttpException: An http error response was received while executing api request. """ messages = dm_beta_base.GetMessages() type_provider_ref = dm_beta_base.GetResources().Parse( args.provider_name, collection='deploymentmanager.typeProviders') update_labels_dict = labels_util.GetUpdateLabelsDictFromArgs(args) labels = dm_labels.UpdateLabels([], messages.TypeProviderLabelEntry, update_labels=update_labels_dict) type_provider = messages.TypeProvider( name=type_provider_ref.typeProvider, description=args.description, descriptorUrl=args.descriptor_url, labels=labels) type_providers.AddOptions(args.api_options_file, type_provider) request = messages.DeploymentmanagerTypeProvidersInsertRequest( project=type_provider_ref.project, typeProvider=type_provider) dm_write.Execute(request, args. async, dm_beta_base.GetClient().typeProviders.Insert, LogResource)
def TemplateContentsFor(template_path): """Build a TemplateContents message from a local template or url. Args: template_path: Path to the config yaml file, with an optional list of imports. Returns: The TemplateContents message from the template at template_path. Raises: Error if the provided file is not a template. """ config_obj = importer.BuildConfig(template_path, None) if not config_obj.IsTemplate(): raise exceptions.Error('The provided file must be a template.') template_name = config_obj.GetBaseName() schema_name = template_name + '.schema' file_type = 'JINJA' if template_name.endswith('.jinja') else 'PYTHON' imports = importer.CreateImports(dm_beta_base.GetMessages(), config_obj) template = '' schema = '' # Find schema and template from imports for item in imports: if item.name == template_name: template = item.content elif item.name == schema_name: schema = item.content # Remove schema and template from imports imports = [ item for item in imports if item.name not in [template_name, schema_name] ] return dm_beta_base.GetMessages().TemplateContents(imports=imports, schema=schema, template=template, interpreter=file_type)
def _GetTypeProviders(self): request = (dm_beta_base.GetMessages( ).DeploymentmanagerTypeProvidersListRequest(project=self.project)) providers = dm_v2_util.YieldWithHttpExceptions( list_pager.YieldFromList(TypeProviderClient(), request, field='typeProviders', batch_size=self.page_size, limit=self.limit)) return [provider.name for provider in providers]
def _InputMappingFrom(input_mapping_data): """Translate a dict of input mapping data into a message object. Args: input_mapping_data: A dict containing input mapping data. Returns: An InputMapping message object derived from options_data. """ return dm_beta_base.GetMessages().InputMapping( fieldName=input_mapping_data.get('fieldName', None), location=input_mapping_data.get('location', None), methodMatch=input_mapping_data.get('methodMatch', None), value=input_mapping_data.get('value', None))
def AddOptions(options_file, type_provider): """Parse api options from the file and add them to type_provider. Args: options_file: String path expression pointing to a type-provider options file. type_provider: A TypeProvider message on which the options will be set. Returns: The type_provider after applying changes. Raises: exceptions.ConfigError: the api options file couldn't be parsed as yaml """ if not options_file: return type_provider file_contents = files.GetFileContents(options_file) yaml_content = None try: yaml_content = yaml.safe_load(file_contents) except yaml.YAMLError as exc: raise exceptions.ConfigError( 'Could not load yaml file {0}: {1}'.format(options_file, exc)) if yaml_content: if 'collectionOverrides' in yaml_content: type_provider.collectionOverrides = [] for collection_override_data in yaml_content[ 'collectionOverrides']: collection_override = dm_beta_base.GetMessages( ).CollectionOverride( collection=collection_override_data['collection']) if 'options' in collection_override_data: collection_override.options = _OptionsFrom( collection_override_data['options']) type_provider.collectionOverrides.append(collection_override) if 'options' in yaml_content: type_provider.options = _OptionsFrom(yaml_content['options']) if 'credential' in yaml_content: type_provider.credential = _CredentialFrom( yaml_content['credential']) return type_provider
def Run(self, args): """Runs 'types describe'. Args: args: argparse.Namespace, The arguments that this command was invoked with. Returns: The requested TypeInfo. Raises: HttpException: An http error response was received while executing the api request. InvalidArgumentException: The requested type provider type could not be found. """ messages = dm_beta_base.GetMessages() client = dm_beta_base.GetClient() type_provider_ref = dm_beta_base.GetResources().Parse( args.provider, params={'project': properties.VALUES.core.project.GetOrFail}, collection='deploymentmanager.typeProviders') request = messages.DeploymentmanagerTypeProvidersGetTypeRequest( project=type_provider_ref.project, type=args.name, typeProvider=type_provider_ref.typeProvider) type_message = client.typeProviders.GetType(request) composite_type_message = 'This is not a composite type.' if type_provider_ref.typeProvider == 'composite': composite_request = messages.DeploymentmanagerCompositeTypesGetRequest( project=type_provider_ref.project, compositeType=args.name) composite_type_message = client.compositeTypes.Get( composite_request) log.status.Print( 'You can reference this type in Deployment Manager with ' '[{0}/{1}:{2}]'.format(type_provider_ref.project, type_provider_ref.typeProvider, args.name)) return { 'type_info': type_message, 'composite_type': composite_type_message }
def Run(self, args): """Run 'types update'. Args: args: argparse.Namespace, The arguments that this command was invoked with. Raises: HttpException: An http error response was received while executing api request. """ messages = dm_beta_base.GetMessages() composite_type_ref = composite_types.GetReference(args.name) get_request = messages.DeploymentmanagerCompositeTypesGetRequest( project=composite_type_ref.project, compositeType=args.name) existing_ct = dm_beta_base.GetClient().compositeTypes.Get(get_request) labels = dm_labels.UpdateLabels( existing_ct.labels, messages.CompositeTypeLabelEntry, labels_util.GetUpdateLabelsDictFromArgs(args), labels_util.GetRemoveLabelsListFromArgs(args)) composite_type = messages.CompositeType( name=args.name, description=args.description, status=args.status, templateContents=existing_ct.templateContents, labels=labels) update_request = messages.DeploymentmanagerCompositeTypesUpdateRequest( project=composite_type_ref.project, compositeType=args.name, compositeTypeResource=composite_type) dm_write.Execute(update_request, args.async, dm_beta_base.GetClient().compositeTypes.Update, LogResource)
def Run(self, args): """Run 'type-providers update'. Args: args: argparse.Namespace, The arguments that this command was invoked with. Raises: HttpException: An http error response was received while executing api request. """ messages = dm_beta_base.GetMessages() type_provider_ref = type_providers.GetReference(args.provider_name) project = type_provider_ref.project name = type_provider_ref.typeProvider get_request = messages.DeploymentmanagerTypeProvidersGetRequest( project=project, typeProvider=name) existing_tp = dm_beta_base.GetClient().typeProviders.Get(get_request) labels = dm_labels.UpdateLabels( existing_tp.labels, messages.TypeProviderLabelEntry, labels_util.GetUpdateLabelsDictFromArgs(args), labels_util.GetRemoveLabelsListFromArgs(args)) type_provider = messages.TypeProvider( name=name, description=args.description, descriptorUrl=(args.descriptor_url), labels=labels) type_providers.AddOptions(args.api_options_file, type_provider) update_request = messages.DeploymentmanagerTypeProvidersUpdateRequest( project=project, typeProvider=args.provider_name, typeProviderResource=type_provider) dm_write.Execute(update_request, args. async, dm_beta_base.GetClient().typeProviders.Update, LogResource)
def Run(self, args): """Run 'type-providers list'. Args: args: argparse.Namespace, The arguments that this command was invoked with. Returns: The list of type providers for this project. Raises: HttpException: An http error response was received while executing api request. """ project = dm_base.GetProject() request = (dm_beta_base.GetMessages(). DeploymentmanagerTypeProvidersListRequest(project=project)) return dm_v2_util.YieldWithHttpExceptions( list_pager.YieldFromList(dm_beta_base.GetClient().typeProviders, request, field='typeProviders', batch_size=args.page_size, limit=args.limit))
file_contents = files.GetFileContents(options_file) yaml_content = None try: yaml_content = yaml.safe_load(file_contents) except yaml.YAMLError, exc: raise exceptions.ConfigError( 'Could not load yaml file {0}: {1}'.format(options_file, exc)) if yaml_content: if 'collectionOverrides' in yaml_content: type_provider.collectionOverrides = [] for collection_override_data in yaml_content[ 'collectionOverrides']: collection_override = dm_beta_base.GetMessages( ).CollectionOverride( collection=collection_override_data['collection']) if 'options' in collection_override_data: collection_override.options = _OptionsFrom( collection_override_data['options']) type_provider.collectionOverrides.append(collection_override) if 'options' in yaml_content: type_provider.options = _OptionsFrom(yaml_content['options']) return type_provider def GetReference(name):