- release_tracks: [ALPHA, BETA]
  help_text:
    brief: Create a Rollout
    description: Create a Rollout
    examples: |-
      To create the Rollout, run:

      $ {command}
  arguments:
    params:
    - help_text: |-
        Identifier. The resource name (full URI of the resource) following the standard naming
        scheme:

          "projects/{project}/locations/{location}/rollout/{rollout_id}"
      is_positional: true
      is_primary_resource: true
      request_id_field: rolloutId
      resource_spec: !REF googlecloudsdk.command_lib.saas_runtime.resources:rollout
      required: true
    - group:
        mutex: true
        required: true
        params:
        - arg_name: release
          help_text: |-
            Name of the Release that gets rolled out to target Units.
            Required if no other type of release is specified.
          is_positional: false
          is_primary_resource: false
          resource_spec: !REF googlecloudsdk.command_lib.saas_runtime.resources:release
          resource_method_params:
            rollout.release: '{__relative_name__}'
          required: false
        - arg_name: flag-release
          help_text: |-
            Name of the Flag Release that gets rolled out to target Units.
            Required if no other type of release is specified.
          is_positional: false
          is_primary_resource: false
          release_tracks: [ALPHA]
          resource_spec: !REF googlecloudsdk.command_lib.saas_runtime.resources:flag_release
          resource_method_params:
            rollout.flagRelease: '{__relative_name__}'
          required: false
    - arg_name: rollout-orchestration-strategy
      api_field: rollout.rolloutOrchestrationStrategy
      required: false
      repeated: false
      help_text: |-
        The strategy to use for executing this rollout. If not provided, the
        strategy from Rollout Type will be used.
    - arg_name: unit-filter
      api_field: rollout.unitFilter
      required: false
      repeated: false
      help_text: |-
        CEL(https://github.com/google/cel-spec) formatted filter string against
        Unit. The filter will be applied to determine the eligible unit population.
        This filter can only reduce, but not expand the scope of the rollout. If
        not provided, the unit_filter from the RolloutType will be used.
    - arg_name: rollout-kind
      help_text: |-
        Name of the RolloutKind this rollout is stemming from and adhering to.
      is_positional: false
      is_primary_resource: false
      resource_spec: !REF googlecloudsdk.command_lib.saas_runtime.resources:rollout_kind
      resource_method_params:
        rollout.rolloutKind: '{__relative_name__}'
      required: false
    - group:
        api_field: rollout.control
        required: false
        help_text: |-
          RolloutControl provides a way to request a change to the execution of a
          Rollout by pausing or canceling it.
        params:
        - group:
            mutex: true
            help_text: |-
              Arguments for the action params.
            params:
            - group:
                api_field: rollout.control.runParams
                required: false
                help_text: |-
                  Parameters for the RUN action controlling the behavior of the rollout
                  when it is resumed from a PAUSED state.
                params:
                - arg_name: retry-failed-operations
                  api_field: rollout.control.runParams.retryFailedOperations
                  action: store_true_false
                  required: true
                  type: bool
                  help_text: |-
                    If true, the rollout will retry failed operations when resumed.
                    This is applicable only the current state of the Rollout is PAUSED and
                    the requested action is RUN.
        - arg_name: control-action
          api_field: rollout.control.action
          required: true
          help_text: |-
            Action to be performed on the Rollout.
            The default behavior is to run the rollout until it naturally reaches a
            terminal state.
          choices:
          - arg_value: run
            enum_value: ROLLOUT_ACTION_RUN
            help_text: |-
              Run the Rollout until it naturally reaches a terminal state.
              A rollout requested to run will progress through all natural Rollout
              States (such as RUNNING -> SUCCEEDED or RUNNING -> FAILED).
              If retriable errors are encountered during the rollout, the rollout
              will paused by default and can be resumed by re-requesting this RUN
              action.
          - arg_value: pause
            enum_value: ROLLOUT_ACTION_PAUSE
            help_text: |-
              Pause the Rollout until it is resumed (i.e. RUN is requested).
          - arg_value: cancel
            enum_value: ROLLOUT_ACTION_CANCEL
            help_text: |-
              Cancel the Rollout permanently.
    - arg_name: labels
      api_field: rollout.labels
      required: false
      repeated: true
      help_text: |-
        The labels on the resource, which can be used for categorization.
        similar to Kubernetes resource labels.
      spec:
      - api_field: key
      - api_field: value
  request:
    api_version: v1beta1
    collection:
    - saasservicemgmt.projects.locations.rollouts
