Beispiel #1
0
  def _RunUpdate(self, original, args):
    messages = secrets_api.GetMessages(
        version=secrets_util.GetVersionFromReleasePath(self.ReleaseTrack()))
    secret_ref = args.CONCEPTS.secret.Parse()

    # Collect the list of update masks
    update_mask = []

    labels_diff = labels_util.Diff.FromUpdateArgs(args)
    if labels_diff.MayHaveUpdates():
      update_mask.append('labels')

    # Validations
    if not update_mask:
      raise exceptions.InvalidArgumentException(
          'labels', self.NO_CHANGES_MESSAGE.format(secret=secret_ref.Name()))

    labels_update = labels_diff.Apply(messages.Secret.LabelsValue,
                                      original.labels)
    labels = original.labels
    if labels_update.needs_update:
      labels = labels_update.labels

    secret = secrets_api.Secrets(
        version=secrets_util.GetVersionFromReleasePath(
            self.ReleaseTrack())).Update(
                secret_ref=secret_ref, labels=labels, update_mask=update_mask)
    secrets_log.Secrets().Updated(secret_ref)

    return secret
Beispiel #2
0
    def Run(self, args):
        messages = secrets_api.GetMessages(
            version=secrets_util.GetVersionFromReleasePath(
                self.ReleaseTrack()))
        secret_ref = args.CONCEPTS.secret.Parse()

        # List all secret versions and parse their refs
        versions = secrets_api.Versions(
            version=secrets_util.GetVersionFromReleasePath(
                self.ReleaseTrack())).ListWithPager(secret_ref=secret_ref,
                                                    limit=9999)
        active_version_count = 0
        for version in versions:
            if version.state != messages.SecretVersion.StateValueValuesEnum.DESTROYED:
                active_version_count += 1

        msg = self.CONFIRM_DELETE_MESSAGE.format(
            secret=secret_ref.Name(), num_versions=active_version_count)
        console_io.PromptContinue(msg,
                                  throw_if_unattended=True,
                                  cancel_on_no=True)

        result = secrets_api.Secrets(
            version=secrets_util.GetVersionFromReleasePath(
                self.ReleaseTrack())).Delete(secret_ref)
        secrets_log.Secrets().Deleted(secret_ref)
        return result
Beispiel #3
0
 def Run(self, args):
     version_ref = args.CONCEPTS.version.Parse()
     result = secrets_api.Versions(
         version=secrets_util.GetVersionFromReleasePath(
             self.ReleaseTrack())).Enable(version_ref)
     secrets_log.Versions().Enabled(version_ref)
     return result
Beispiel #4
0
 def Run(self, args):
     project_ref = args.CONCEPTS.project.Parse()
     if not project_ref:
         raise exceptions.RequiredArgumentException(
             'project',
             'Please set a project with "--project" flag or "gcloud config set project <project_id>".'
         )
     return secrets_api.Locations(
         version=secrets_util.GetVersionFromReleasePath(
             self.ReleaseTrack())).ListWithPager(project_ref=project_ref,
                                                 limit=args.limit)
Beispiel #5
0
    def Run(self, args):
        version_ref = args.CONCEPTS.version.Parse()

        # Destructive action, prompt to continue
        console_io.PromptContinue(self.CONFIRM_DESTROY_MESSAGE.format(
            version=version_ref.Name(), secret=version_ref.Parent().Name()),
                                  throw_if_unattended=True,
                                  cancel_on_no=True)

        result = secrets_api.Versions(
            version=secrets_util.GetVersionFromReleasePath(
                self.ReleaseTrack())).Destroy(version_ref)
        secrets_log.Versions().Destroyed(version_ref)
        return result
Beispiel #6
0
  def Run(self, args):
    secret_ref = args.CONCEPTS.secret.Parse()
    # Attempt to get the secret
    secret = secrets_api.Secrets(
        version=secrets_util.GetVersionFromReleasePath(
            self.ReleaseTrack())).GetOrNone(secret_ref)

    # Secret does not exist
    if secret is None:
      raise exceptions.InvalidArgumentException(
          'secret',
          self.SECRET_MISSING_MESSAGE.format(secret=secret_ref.Name()))

    # The secret exists, update it
    return self._RunUpdate(secret, args)
Beispiel #7
0
    def Run(self, args):
        secret_ref = args.CONCEPTS.secret.Parse()
        data = secrets_util.ReadFileOrStdin(args.data_file)

        # Differentiate between the flag being provided with an empty value and the
        # flag being omitted. See b/138796299 for info.
        if args.data_file == '':  # pylint: disable=g-explicit-bool-comparison
            raise exceptions.BadFileException(self.EMPTY_DATA_FILE_MESSAGE)

        version = secrets_api.Secrets(
            version=secrets_util.GetVersionFromReleasePath(
                self.ReleaseTrack())).AddVersion(secret_ref, data)
        version_ref = secrets_args.ParseVersionRef(version.name)
        secrets_log.Versions().Created(version_ref)
        return version
 def Run(self, args):
   secret_ref = args.CONCEPTS.secret.Parse()
   secret = secrets_api.Secrets(
       version=secrets_util.GetVersionFromReleasePath(
           self.ReleaseTrack())).Get(secret_ref)
   return secret
 def Run(self, args):
   location_ref = args.CONCEPTS.location.Parse()
   return secrets_api.Locations(
       version=secrets_util.GetVersionFromReleasePath(
           self.ReleaseTrack())).Get(location_ref)
 def Run(self, args):
     version_ref = args.CONCEPTS.version.Parse()
     return secrets_api.Versions(
         version=secrets_util.GetVersionFromReleasePath(
             self.ReleaseTrack())).Access(version_ref)
Beispiel #11
0
 def Run(self, args):
     secret_ref = args.CONCEPTS.secret.Parse()
     return secrets_api.Versions(
         version=secrets_util.GetVersionFromReleasePath(
             self.ReleaseTrack())).ListWithPager(secret_ref=secret_ref,
                                                 limit=args.limit)
    def Run(self, args):
        messages = secrets_api.GetMessages(
            version=secrets_util.GetVersionFromReleasePath(
                self.ReleaseTrack()))
        secret_ref = args.CONCEPTS.secret.Parse()
        data = secrets_util.ReadFileOrStdin(args.data_file)
        labels = labels_util.ParseCreateArgs(args, messages.Secret.LabelsValue)
        replication_policy = args.replication_policy
        if not replication_policy:
            replication_policy = properties.VALUES.secrets.replication_policy.Get(
            )

        if not replication_policy:
            raise exceptions.RequiredArgumentException(
                'replication-policy', self.MISSING_POLICY_MESSAGE)
        if replication_policy not in {'user-managed', 'automatic'}:
            if args.replication_policy:
                raise exceptions.InvalidArgumentException(
                    'replication-policy', self.INVALID_POLICY_MESSAGE)
            raise exceptions.InvalidArgumentException(
                'replication-policy', self.INVALID_POLICY_PROP_MESSAGE)

        locations = args.locations
        if not locations:
            # if locations weren't given, try to get them from properties
            locations = properties.VALUES.secrets.locations.Get()
            if locations:
                locations = locations.split(',')
        if replication_policy == 'user-managed' and not locations:
            raise exceptions.RequiredArgumentException(
                'locations', self.MANAGED_BUT_NO_LOCATIONS_MESSAGE)
        if replication_policy == 'automatic':
            if args.locations:
                # check args.locations separately from locations because we have
                # different error messages depending on whether the user used the
                # --locations flag or the secrets/locations property
                if args.replication_policy:
                    raise exceptions.InvalidArgumentException(
                        'locations', self.AUTOMATIC_AND_LOCATIONS_MESSAGE)
                raise exceptions.InvalidArgumentException(
                    'locations', self.AUTOMATIC_PROP_AND_LOCATIONS_MESSAGE)
            if locations:
                raise exceptions.InvalidArgumentException(
                    'replication-policy',
                    self.AUTOMATIC_AND_LOCATIONS_PROP_MESSAGE)
            locations = []

        # Differentiate between the flag being provided with an empty value and the
        # flag being omitted. See b/138796299 for info.
        if args.data_file == '':  # pylint: disable=g-explicit-bool-comparison
            raise exceptions.BadFileException(self.EMPTY_DATA_FILE_MESSAGE)
        # Create the secret
        response = secrets_api.Secrets(
            version=secrets_util.GetVersionFromReleasePath(
                self.ReleaseTrack())).Create(secret_ref,
                                             labels=labels,
                                             locations=locations,
                                             policy=replication_policy)

        if data:
            version = secrets_api.Secrets(
                version=secrets_util.GetVersionFromReleasePath(
                    self.ReleaseTrack())).AddVersion(secret_ref, data)
            version_ref = secrets_args.ParseVersionRef(version.name)
            secrets_log.Versions().Created(version_ref)
        else:
            secrets_log.Secrets().Created(secret_ref)

        return response