HEX
Server: Apache/2.4.65 (Ubuntu)
System: Linux ielts-store-v2 6.8.0-1036-gcp #38~22.04.1-Ubuntu SMP Thu Aug 14 01:19:18 UTC 2025 x86_64
User: root (0)
PHP: 7.2.34-54+ubuntu20.04.1+deb.sury.org+1
Disabled: pcntl_alarm,pcntl_fork,pcntl_waitpid,pcntl_wait,pcntl_wifexited,pcntl_wifstopped,pcntl_wifsignaled,pcntl_wifcontinued,pcntl_wexitstatus,pcntl_wtermsig,pcntl_wstopsig,pcntl_signal,pcntl_signal_get_handler,pcntl_signal_dispatch,pcntl_get_last_error,pcntl_strerror,pcntl_sigprocmask,pcntl_sigwaitinfo,pcntl_sigtimedwait,pcntl_exec,pcntl_getpriority,pcntl_setpriority,pcntl_async_signals,
Upload Files
File: //snap/google-cloud-cli/396/lib/surface/container/backup_restore/restores/create.py
# -*- coding: utf-8 -*- #
# Copyright 2021 Google Inc. All Rights Reserved.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
#    http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
"""Create command for Backup for GKE restore."""

from __future__ import absolute_import
from __future__ import division
from __future__ import unicode_literals

from googlecloudsdk.api_lib.container.backup_restore import util as api_util
from googlecloudsdk.calliope import base
from googlecloudsdk.command_lib.container.backup_restore import hooks
from googlecloudsdk.command_lib.container.backup_restore import resource_args
from googlecloudsdk.command_lib.util.args import labels_util


@base.DefaultUniverseOnly
@base.ReleaseTracks(base.ReleaseTrack.ALPHA, base.ReleaseTrack.BETA)
class Create(base.CreateCommand):
  """Creates a restore.

  Creates a Backup for GKE restore.

  ## EXAMPLES

  To create a restore ``my-restore'' in location ``us-central1'' under restore
  plan ``my-restore-plan'', run:

    $ {command} my-restore --project=my-project --location=us-central1
    --restore-plan=my-restore-plan
    --backup=projects/my-project/locations/us-east1/backupPlans/my-backup-plan/backups/my-backup
  """

  @staticmethod
  def Args(parser):
    resource_args.AddRestoreArg(parser)
    group = parser.add_group(mutex=True)
    group.add_argument(
        '--async',
        required=False,
        action='store_true',
        default=False,
        help="""
        Return immediately, without waiting for the operation in progress to
        complete.
        """,
    )
    group.add_argument(
        '--wait-for-completion',
        required=False,
        action='store_true',
        default=False,
        help='Wait for the created restore to complete.',
    )
    # TODO(b/205222596): Figure out if we can/should use the relative name of
    # the backup. This would potentially require the CLI to first get the backup
    # plan referenced in the parent restore plan and then concat it with the
    # user input relative name.
    parser.add_argument(
        '--backup',
        type=str,
        required=True,
        help="""
        Name of the backup from which to restore under the backup plan specified
        in restore plan.
        Format: projects/<project>/locations/<location>/backupPlans/<backupPlan>/backups/<backup>.
        """,
    )
    parser.add_argument(
        '--description',
        type=str,
        required=False,
        default=None,
        help='Optional text description for the restore.',
    )
    parser.add_argument(
        '--volume-data-restore-policy-overrides-file',
        required=False,
        default=None,
        help="""
        If provided, defines an array of volume data restore policy overrides
        from the given config file in yaml.
        """,
    )
    parser.add_argument(
        '--filter-file',
        required=False,
        default=None,
        help="""
        JSON/YAML file containing the configuration of the fine-grained
        restore filter which can be used to further refine the resource
        selection of the Restore beyond the coarse-grained scope defined
        in the RestorePlan.

        For more information about examples and how to use this filter,
        please refer to the Backup for GKE documentation:
        https://cloud.google.com/kubernetes-engine/docs/add-on/backup-for-gke/how-to/fine-grained-restore.
        """,
    )
    labels_util.AddCreateLabelsFlags(parser)

  def Run(self, args):
    labels = labels_util.GetUpdateLabelsDictFromArgs(args)
    vdrpo = hooks.ReadVolumeDataRestorePolicyOverridesFile(
        args.volume_data_restore_policy_overrides_file
    )
    restore_ref = args.CONCEPTS.restore.Parse()
    restore_filter = hooks.ReadRestoreFilterFile(args.filter_file)
    if args.IsSpecified('async'):
      return api_util.CreateRestore(
          restore_ref,
          backup=args.backup,
          description=args.description,
          labels=labels,
          volume_data_restore_policy_overrides=vdrpo,
          restore_filter=restore_filter,
      )
    api_util.CreateRestoreAndWaitForLRO(
        restore_ref=restore_ref,
        backup=args.backup,
        description=args.description,
        labels=labels,
        volume_data_restore_policy_overrides=vdrpo,
        restore_filter=restore_filter,
    )
    if not args.IsSpecified('wait_for_completion'):
      return []
    return api_util.WaitForRestoreToFinish(restore_ref.RelativeName())