- release_tracks: [ALPHA, BETA]

  help_text:
    brief: Create a backup plan.
    description: |
      Create a Backup for GKE backup plan.

      ## EXAMPLES

      To create a backup plan ``my-backup-plan'' in project ``my-project'' in location ``us-central1'', run:

        $ {command} my-backup-plan --project=my-project --location=us-central1 --cluster=projects/my-project/locations/us-central1/clusters/my-cluster --all-namespaces

  request:
    collection: gkebackup.projects.locations.backupPlans
    api_version: v1

  async:
    collection: gkebackup.projects.locations.operations

  arguments:
    resource:
      help_text: |
        Name of the backup plan to create. Once the plan is created, this name can't be changed.
        This must be 63 or fewer characters long and must be unique within the project and location.
        The name may be provided either as a relative name, e.g.
        `projects/<project>/locations/<location>/backupPlans/<backupPlan>`
        or as a single ID name (with the parent resources provided via options or through
        properties), e.g.
        `BACKUP_PLAN --project=<project> --location=<location>`.

      spec: !REF googlecloudsdk.command_lib.container.backup_restore.resources:positional_backup_plan

    params:
    - _REF_: googlecloudsdk.command_lib.container.backup_restore.flags:backup_plan_cluster
    - _REF_: googlecloudsdk.command_lib.container.backup_restore.flags:backup_plan_description
    - _REF_: googlecloudsdk.command_lib.container.backup_restore.flags:deactivated
    - _REF_: googlecloudsdk.command_lib.container.backup_restore.flags:backup_plan_tags
    # Retention policy
    - group:
        required: false
        params:
        - _REF_: googlecloudsdk.command_lib.container.backup_restore.flags:backup_delete_lock_days
        - _REF_: googlecloudsdk.command_lib.container.backup_restore.flags:backup_retain_days
        - _REF_: googlecloudsdk.command_lib.container.backup_restore.flags:locked
    # Backup schedule
    - group:
        params:
        - _REF_: googlecloudsdk.command_lib.container.backup_restore.flags:paused
        - group:
            params:
            - _REF_: googlecloudsdk.command_lib.container.backup_restore.flags:cron_schedule
            - group:
                params:
                - _REF_: googlecloudsdk.command_lib.container.backup_restore.flags:target_rpo_minutes
                  required: true
                - _REF_: googlecloudsdk.command_lib.container.backup_restore.flags:exclusion_windows_file
    # Backup scope
    - group:
        required: true
        mutex: true
        params:
        - _REF_: googlecloudsdk.command_lib.container.backup_restore.flags:all_namespaces
        - _REF_: googlecloudsdk.command_lib.container.backup_restore.flags:selected_namespaces
        - _REF_: googlecloudsdk.command_lib.container.backup_restore.flags:selected_applications
        - _REF_: googlecloudsdk.command_lib.container.backup_restore.flags:selected_namespace_labels
    # Backup config
    - group:
        params:
        - _REF_: googlecloudsdk.command_lib.container.backup_restore.flags:include_volume_data
        - _REF_: googlecloudsdk.command_lib.container.backup_restore.flags:include_secrets
        - _REF_: googlecloudsdk.command_lib.container.backup_restore.flags:encryption_key
        - _REF_: googlecloudsdk.command_lib.container.backup_restore.flags:permissive_mode

    labels:
      api_field: backupPlan.labels
