Esempio n. 1
0
    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
                }
Esempio n. 2
0
  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)
Esempio n. 3
0
  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)
Esempio n. 4
0
    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)
Esempio n. 5
0
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)
Esempio n. 6
0
    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]
Esempio n. 7
0
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))
Esempio n. 8
0
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
Esempio n. 9
0
    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
        }
Esempio n. 10
0
  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)
Esempio n. 11
0
    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)
Esempio n. 12
0
    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))
Esempio n. 13
0
    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):