示例#1
0
    def CreateDomainMapping(self, domain_mapping_ref, service_name):
        """Create a domain mapping.

    Args:
      domain_mapping_ref: Resource, domainmapping resource.
      service_name: str, the service to which to map domain.

    Returns:
      A domain_mapping.DomainMapping object.
    """
        messages = self._messages_module
        new_mapping = domain_mapping.DomainMapping.New(
            self._client, domain_mapping_ref.namespacesId)
        new_mapping.name = domain_mapping_ref.domainmappingsId
        new_mapping.route_name = service_name

        request = messages.RunNamespacesDomainmappingsCreateRequest(
            domainMapping=new_mapping.Message(),
            parent=domain_mapping_ref.Parent().RelativeName())
        with metrics.RecordDuration(metric_names.CREATE_DOMAIN_MAPPING):
            response = self._client.namespaces_domainmappings.Create(request)

        # 'run domain-mappings create' is synchronous. Poll for its completion.
        getter = functools.partial(self.GetDomainMapping, domain_mapping_ref)
        with progress_tracker.StagedProgressTracker(
                'Creating...',
                stages.DomainMappingStages(),
                failure_message='Domain mapping failed') as tracker:
            self.WaitForCondition(DomainMappingConditionPoller(
                getter, tracker))
        return domain_mapping.DomainMapping(response, messages)
  def CreateDomainMapping(self,
                          domain_mapping_ref,
                          service_name,
                          config_changes,
                          force_override=False):
    """Create a domain mapping.

    Args:
      domain_mapping_ref: Resource, domainmapping resource.
      service_name: str, the service to which to map domain.
      config_changes: list of ConfigChanger to modify the domainmapping with
      force_override: bool, override an existing mapping of this domain.

    Returns:
      A domain_mapping.DomainMapping object.
    """

    messages = self.messages_module
    new_mapping = domain_mapping.DomainMapping.New(
        self._client, domain_mapping_ref.namespacesId)
    new_mapping.name = domain_mapping_ref.domainmappingsId
    new_mapping.route_name = service_name
    new_mapping.force_override = force_override

    for config_change in config_changes:
      new_mapping = config_change.Adjust(new_mapping)

    request = messages.RunNamespacesDomainmappingsCreateRequest(
        domainMapping=new_mapping.Message(),
        parent=domain_mapping_ref.Parent().RelativeName())
    with metrics.RecordDuration(metric_names.CREATE_DOMAIN_MAPPING):
      try:
        response = self._client.namespaces_domainmappings.Create(request)
      except api_exceptions.HttpConflictError:
        raise serverless_exceptions.DomainMappingCreationError(
            'Domain mapping to [{}] for service [{}] already exists.'.format(
                domain_mapping_ref.Name(), service_name))
      # 'run domain-mappings create' is synchronous. Poll for its completion.x
      with progress_tracker.ProgressTracker('Creating...'):
        mapping = waiter.PollUntilDone(
            DomainMappingResourceRecordPoller(self), domain_mapping_ref)
      ready = mapping.conditions.get('Ready')
      message = None
      if ready and ready.get('message'):
        message = ready['message']
      if not mapping.records:
        if (mapping.ready_condition['reason'] ==
            domain_mapping.MAPPING_ALREADY_EXISTS_CONDITION_REASON):
          raise serverless_exceptions.DomainMappingAlreadyExistsError(
              'Domain mapping to [{}] is already in use elsewhere.'.format(
                  domain_mapping_ref.Name()))
        raise serverless_exceptions.DomainMappingCreationError(
            message or 'Could not create domain mapping.')
      if message:
        log.status.Print(message)
      return mapping

    return domain_mapping.DomainMapping(response, messages)
示例#3
0
    def GetDomainMapping(self, domain_mapping_ref):
        """Get a domain mapping.

    Args:
      domain_mapping_ref: Resource, domainmapping resource.

    Returns:
      A domain_mapping.DomainMapping object.
    """
        messages = self._messages_module
        request = messages.RunNamespacesDomainmappingsGetRequest(
            name=domain_mapping_ref.RelativeName())
        with metrics.RecordDuration(metric_names.GET_DOMAIN_MAPPING):
            response = self._client.namespaces_domainmappings.Get(request)
        return domain_mapping.DomainMapping(response, messages)
    def GetDomainMapping(self, domain_name):
        """Get a domain mapping.

    Args:
      domain_name: str, domain name.

    Returns:
      A domain_mapping.DomainMapping object.
    """
        messages = self._messages_module
        request = messages.RunNamespacesDomainmappingsGetRequest(
            name=domain_name)
        with metrics.record_duration(metrics.GET_DOMAIN_MAPPING):
            response = self._client.namespaces_domainmappings.Get(request)
        return domain_mapping.DomainMapping(response)
  def ListDomainMappings(self, namespace_ref):
    """List all domain mappings.

    Args:
      namespace_ref: Resource, namespace to list domain mappings in.

    Returns:
      A list of domain mappings.
    """
    messages = self.messages_module
    request = messages.RunNamespacesDomainmappingsListRequest(
        parent=namespace_ref.RelativeName())
    with metrics.RecordDuration(metric_names.LIST_DOMAIN_MAPPINGS):
      response = self._client.namespaces_domainmappings.List(request)
    return [domain_mapping.DomainMapping(item, messages)
            for item in response.items]
示例#6
0
    def CreateDomainMapping(self, domain_mapping_ref, service_name):
        """Create a domain mapping.

    Args:
      domain_mapping_ref: Resource, domainmapping resource.
      service_name: str, the service to which to map domain.

    Returns:
      A domain_mapping.DomainMapping object.
    """

        messages = self._messages_module
        new_mapping = domain_mapping.DomainMapping.New(
            self._client, domain_mapping_ref.namespacesId)
        new_mapping.name = domain_mapping_ref.domainmappingsId
        new_mapping.route_name = service_name

        request = messages.RunNamespacesDomainmappingsCreateRequest(
            domainMapping=new_mapping.Message(),
            parent=domain_mapping_ref.Parent().RelativeName())
        with metrics.RecordDuration(metric_names.CREATE_DOMAIN_MAPPING):
            try:
                response = self._client.namespaces_domainmappings.Create(
                    request)
            except api_exceptions.HttpConflictError:
                raise serverless_exceptions.DomainMappingCreationError(
                    'Domain mapping to [{}] for service [{}] already exists.'.
                    format(domain_mapping_ref.Name(), service_name))
            # 'run domain-mappings create' is synchronous. Poll for its completion.x
            with progress_tracker.ProgressTracker('Creating...'):
                mapping = waiter.PollUntilDone(
                    DomainMappingResourceRecordPoller(self),
                    domain_mapping_ref)
            ready = mapping.conditions.get('Ready')
            records = getattr(mapping.status, 'resourceRecords', None)
            message = None
            if ready and ready.get('message'):
                message = ready['message']
            if not records:
                raise serverless_exceptions.DomainMappingCreationError(
                    message or 'Could not create domain mapping.')
            if message:
                log.status.Print(message)
            return records

        return domain_mapping.DomainMapping(response, messages)
示例#7
0
  def CreateDomainMapping(self, domain_mapping_ref, service_name):
    """Create a domain mapping.

    Args:
      domain_mapping_ref: Resource, domainmapping resource.
      service_name: str, the service to which to map domain.

    Returns:
      A domain_mapping.DomainMapping object.
    """
    messages = self._messages_module
    new_mapping = domain_mapping.DomainMapping.New(
        self._client, domain_mapping_ref.namespacesId)
    new_mapping.name = domain_mapping_ref.domainmappingsId
    new_mapping.route_name = service_name

    request = messages.RunNamespacesDomainmappingsCreateRequest(
        domainMapping=new_mapping.Message(),
        parent=domain_mapping_ref.RelativeName())
    with metrics.record_duration(metrics.CREATE_DOMAIN_MAPPING):
      response = self._client.namespaces_domainmappings.Create(request)
    return domain_mapping.DomainMapping(response)