apiVersion: apiextensions.k8s.io/v1
kind: CustomResourceDefinition
metadata:
  annotations:
    cnrm.cloud.google.com/version: 0.0.0-dev
  creationTimestamp: null
  labels:
    cnrm.cloud.google.com/managed-by-kcc: "true"
    cnrm.cloud.google.com/system: "true"
  name: batchjobs.batch.cnrm.cloud.google.com
spec:
  group: batch.cnrm.cloud.google.com
  names:
    categories:
    - gcp
    kind: BatchJob
    listKind: BatchJobList
    plural: batchjobs
    shortNames:
    - gcpbatchjob
    - gcpbatchjobs
    singular: batchjob
  preserveUnknownFields: false
  scope: Namespaced
  versions:
  - additionalPrinterColumns:
    - jsonPath: .metadata.creationTimestamp
      name: Age
      type: date
    - description: When 'True', the most recent reconcile of the resource succeeded
      jsonPath: .status.conditions[?(@.type=='Ready')].status
      name: Ready
      type: string
    - description: The reason for the value in 'Ready'
      jsonPath: .status.conditions[?(@.type=='Ready')].reason
      name: Status
      type: string
    - description: The last transition time for the value in 'Status'
      jsonPath: .status.conditions[?(@.type=='Ready')].lastTransitionTime
      name: Status Age
      type: date
    name: v1alpha1
    schema:
      openAPIV3Schema:
        description: BatchJob is the Schema for the BatchJob API
        properties:
          apiVersion:
            description: 'APIVersion defines the versioned schema of this representation
              of an object. Servers should convert recognized schemas to the latest
              internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources'
            type: string
          kind:
            description: 'Kind is a string value representing the REST resource this
              object represents. Servers may infer this from the endpoint the client
              submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds'
            type: string
          metadata:
            type: object
          spec:
            description: BatchJobSpec defines the desired state of BatchJob
            properties:
              allocationPolicy:
                description: Compute resource allocation for all TaskGroups in the
                  Job.
                properties:
                  instances:
                    description: Describe instances that can be created by this AllocationPolicy.
                      Only instances[0] is supported now.
                    items:
                      properties:
                        blockProjectSSHKeys:
                          description: |-
                            Optional. Set this field to `true` if you want Batch to block
                             project-level SSH keys from accessing this job's VMs.  Alternatively, you
                             can configure the job to specify a VM instance template that blocks
                             project-level SSH keys. In either case, Batch blocks project-level SSH
                             keys while creating the VMs for this job.

                             Batch allows project-level SSH keys for a job's VMs only if all
                             the following are true:

                               SSH keys.

                             Notably, you can override this behavior by manually updating a VM to
                             block or allow project-level SSH keys. For more information about
                             blocking project-level SSH keys, see the Compute Engine documentation:
                             https://cloud.google.com/compute/docs/connect/restrict-ssh-keys#block-keys
                          type: boolean
                        installGpuDrivers:
                          description: |-
                            Set this field true if you want Batch to help fetch drivers from a third
                             party location and install them for GPUs specified in
                             `policy.accelerators` or `instance_template` on your behalf. Default is
                             false.

                             For Container-Optimized Image cases, Batch will install the
                             accelerator driver following milestones of
                             https://cloud.google.com/container-optimized-os/docs/release-notes. For
                             non Container-Optimized Image cases, following
                             https://github.com/GoogleCloudPlatform/compute-gpu-installation/blob/main/linux/install_gpu_driver.py.
                          type: boolean
                        installOpsAgent:
                          description: Optional. Set this field true if you want Batch
                            to install Ops Agent on your behalf. Default is false.
                          type: boolean
                        instanceTemplate:
                          description: |-
                            Name of an instance template used to create VMs.
                             Named the field as 'instance_template' instead of 'template' to avoid
                             C++ keyword conflict.

                             Batch only supports global instance templates from the same project as
                             the job.
                             You can specify the global instance template as a full or partial URL.
                          type: string
                        policy:
                          description: InstancePolicy.
                          properties:
                            accelerators:
                              description: The accelerators attached to each VM instance.
                              items:
                                properties:
                                  count:
                                    description: The number of accelerators of this
                                      type.
                                    format: int64
                                    type: integer
                                  driverVersion:
                                    description: |-
                                      Optional. The NVIDIA GPU driver version that should be installed for this
                                       type.

                                       You can define the specific driver version such as "470.103.01",
                                       following the driver version requirements in
                                       https://cloud.google.com/compute/docs/gpus/install-drivers-gpu#minimum-driver.
                                       Batch will install the specific accelerator driver if qualified.
                                    type: string
                                  installGpuDrivers:
                                    description: 'Deprecated: please use instances[0].install_gpu_drivers
                                      instead.'
                                    type: boolean
                                  type:
                                    description: The accelerator type. For example,
                                      "nvidia-tesla-t4". See `gcloud compute accelerator-types
                                      list`.
                                    type: string
                                type: object
                              type: array
                            bootDisk:
                              description: Boot disk to be created and attached to
                                each VM by this InstancePolicy. Boot disk will be
                                deleted when the VM is deleted. Batch API now only
                                supports booting from image.
                              properties:
                                diskInterface:
                                  description: Local SSDs are available through both
                                    "SCSI" and "NVMe" interfaces. If not indicated,
                                    "NVMe" will be the default one for local ssds.
                                    This field is ignored for persistent disks as
                                    the interface is chosen automatically. See https://cloud.google.com/compute/docs/disks/persistent-disks#choose_an_interface.
                                  type: string
                                imageRef:
                                  description: |-
                                    URL for a VM image to use as the data source for this disk.
                                     For example, the following are all valid URLs:

                                     * Specify the image by its family name:
                                     projects/{project}/global/images/family/{image_family}
                                     * Specify the image version:
                                     projects/{project}/global/images/{image_version}

                                     You can also use Batch customized image in short names.
                                     The following image values are supported for a boot disk:

                                     * `batch-debian`: use Batch Debian images.
                                     * `batch-cos`: use Batch Container-Optimized images.
                                     * `batch-hpc-rocky`: use Batch HPC Rocky Linux images.
                                  oneOf:
                                  - not:
                                      required:
                                      - external
                                    required:
                                    - name
                                    - kind
                                  - not:
                                      anyOf:
                                      - required:
                                        - name
                                      - required:
                                        - namespace
                                      - required:
                                        - kind
                                    required:
                                    - external
                                  properties:
                                    external:
                                      description: The external name of the referenced
                                        resource
                                      type: string
                                    kind:
                                      description: Kind of the referent.
                                      type: string
                                    name:
                                      description: 'Name of the referent. More info:
                                        https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names'
                                      type: string
                                    namespace:
                                      description: 'Namespace of the referent. More
                                        info: https://kubernetes.io/docs/concepts/overview/working-with-objects/namespaces/'
                                      type: string
                                  type: object
                                sizeGB:
                                  description: |-
                                    Disk size in GB.

                                     **Non-Boot Disk**:
                                     If the `type` specifies a persistent disk, this field
                                     is ignored if `data_source` is set as `image` or `snapshot`.
                                     If the `type` specifies a local SSD, this field should be a multiple of
                                     375 GB, otherwise, the final size will be the next greater multiple of
                                     375 GB.

                                     **Boot Disk**:
                                     Batch will calculate the boot disk size based on source
                                     image and task requirements if you do not speicify the size.
                                     If both this field and the `boot_disk_mib` field in task spec's
                                     `compute_resource` are defined, Batch will only honor this field.
                                     Also, this field should be no smaller than the source disk's
                                     size when the `data_source` is set as `snapshot` or `image`.
                                     For example, if you set an image as the `data_source` field and the
                                     image's default disk size 30 GB, you can only use this field to make the
                                     disk larger or equal to 30 GB.
                                  format: int64
                                  type: integer
                                snapshot:
                                  description: Name of a snapshot used as the data
                                    source. Snapshot is not supported as boot disk
                                    now.
                                  type: string
                                type:
                                  description: Disk type as shown in `gcloud compute
                                    disk-types list`. For example, local SSD uses
                                    type "local-ssd". Persistent disks and boot disks
                                    use "pd-balanced", "pd-extreme", "pd-ssd" or "pd-standard".
                                    If not specified, "pd-standard" will be used as
                                    the default type for non-boot disks, "pd-balanced"
                                    will be used as the default type for boot disks.
                                  type: string
                              type: object
                            disks:
                              description: Non-boot disks to be attached for each
                                VM created by this InstancePolicy. New disks will
                                be deleted when the VM is deleted. A non-boot disk
                                is a disk that can be of a device with a file system
                                or a raw storage drive that is not ready for data
                                storage and accessing.
                              items:
                                properties:
                                  deviceName:
                                    description: Device name that the guest operating
                                      system will see. It is used by Runnable.volumes
                                      field to mount disks. So please specify the
                                      device_name if you want Batch to help mount
                                      the disk, and it should match the device_name
                                      field in volumes.
                                    type: string
                                  existingDisk:
                                    description: Name of an existing PD.
                                    type: string
                                  newDisk:
                                    properties:
                                      diskInterface:
                                        description: Local SSDs are available through
                                          both "SCSI" and "NVMe" interfaces. If not
                                          indicated, "NVMe" will be the default one
                                          for local ssds. This field is ignored for
                                          persistent disks as the interface is chosen
                                          automatically. See https://cloud.google.com/compute/docs/disks/persistent-disks#choose_an_interface.
                                        type: string
                                      imageRef:
                                        description: |-
                                          URL for a VM image to use as the data source for this disk.
                                           For example, the following are all valid URLs:

                                           * Specify the image by its family name:
                                           projects/{project}/global/images/family/{image_family}
                                           * Specify the image version:
                                           projects/{project}/global/images/{image_version}

                                           You can also use Batch customized image in short names.
                                           The following image values are supported for a boot disk:

                                           * `batch-debian`: use Batch Debian images.
                                           * `batch-cos`: use Batch Container-Optimized images.
                                           * `batch-hpc-rocky`: use Batch HPC Rocky Linux images.
                                        oneOf:
                                        - not:
                                            required:
                                            - external
                                          required:
                                          - name
                                          - kind
                                        - not:
                                            anyOf:
                                            - required:
                                              - name
                                            - required:
                                              - namespace
                                            - required:
                                              - kind
                                          required:
                                          - external
                                        properties:
                                          external:
                                            description: The external name of the
                                              referenced resource
                                            type: string
                                          kind:
                                            description: Kind of the referent.
                                            type: string
                                          name:
                                            description: 'Name of the referent. More
                                              info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names'
                                            type: string
                                          namespace:
                                            description: 'Namespace of the referent.
                                              More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/namespaces/'
                                            type: string
                                        type: object
                                      sizeGB:
                                        description: |-
                                          Disk size in GB.

                                           **Non-Boot Disk**:
                                           If the `type` specifies a persistent disk, this field
                                           is ignored if `data_source` is set as `image` or `snapshot`.
                                           If the `type` specifies a local SSD, this field should be a multiple of
                                           375 GB, otherwise, the final size will be the next greater multiple of
                                           375 GB.

                                           **Boot Disk**:
                                           Batch will calculate the boot disk size based on source
                                           image and task requirements if you do not speicify the size.
                                           If both this field and the `boot_disk_mib` field in task spec's
                                           `compute_resource` are defined, Batch will only honor this field.
                                           Also, this field should be no smaller than the source disk's
                                           size when the `data_source` is set as `snapshot` or `image`.
                                           For example, if you set an image as the `data_source` field and the
                                           image's default disk size 30 GB, you can only use this field to make the
                                           disk larger or equal to 30 GB.
                                        format: int64
                                        type: integer
                                      snapshot:
                                        description: Name of a snapshot used as the
                                          data source. Snapshot is not supported as
                                          boot disk now.
                                        type: string
                                      type:
                                        description: Disk type as shown in `gcloud
                                          compute disk-types list`. For example, local
                                          SSD uses type "local-ssd". Persistent disks
                                          and boot disks use "pd-balanced", "pd-extreme",
                                          "pd-ssd" or "pd-standard". If not specified,
                                          "pd-standard" will be used as the default
                                          type for non-boot disks, "pd-balanced" will
                                          be used as the default type for boot disks.
                                        type: string
                                    type: object
                                type: object
                              type: array
                            machineType:
                              description: The Compute Engine machine type.
                              type: string
                            minCPUPlatform:
                              description: The minimum CPU platform. See https://cloud.google.com/compute/docs/instances/specify-min-cpu-platform.
                              type: string
                            provisioningModel:
                              description: The provisioning model.
                              type: string
                            reservation:
                              description: Optional. If not specified (default), VMs
                                will consume any applicable reservation. If "NO_RESERVATION"
                                is specified, VMs will not consume any reservation.
                                Otherwise, if specified, VMs will consume only the
                                specified reservation.
                              type: string
                          type: object
                      type: object
                    type: array
                  labels:
                    additionalProperties:
                      type: string
                    description: |-
                      Custom labels to apply to the job and all the Compute Engine resources
                       that both are created by this allocation policy and support labels.

                       Use labels to group and describe the resources they are applied to. Batch
                       automatically applies predefined labels and supports multiple `labels`
                       fields for each job, which each let you apply custom labels to various
                       resources. Label names that start with "goog-" or "google-" are
                       reserved for predefined labels. For more information about labels with
                       Batch, see
                       [Organize resources using
                       labels](https://cloud.google.com/batch/docs/organize-resources-using-labels).
                    type: object
                  location:
                    description: Location where compute resources should be allocated
                      for the Job.
                    properties:
                      allowedLocations:
                        description: |-
                          A list of allowed location names represented by internal URLs.

                           Each location can be a region or a zone.
                           Only one region or multiple zones in one region is supported now.
                           For example,
                           ["regions/us-central1"] allow VMs in any zones in region us-central1.
                           ["zones/us-central1-a", "zones/us-central1-c"] only allow VMs
                           in zones us-central1-a and us-central1-c.

                           Mixing locations from different regions would cause errors.
                           For example,
                           ["regions/us-central1", "zones/us-central1-a", "zones/us-central1-b",
                           "zones/us-west1-a"] contains locations from two distinct regions:
                           us-central1 and us-west1. This combination will trigger an error.
                        items:
                          type: string
                        type: array
                    type: object
                  network:
                    description: |-
                      The network policy.

                       If you define an instance template in the `InstancePolicyOrTemplate` field,
                       Batch will use the network settings in the instance template instead of
                       this field.
                    properties:
                      networkInterfaces:
                        description: Network configurations.
                        items:
                          properties:
                            networkRef:
                              description: |-
                                The URL of an existing network resource.
                                 You can specify the network as a full or partial URL.

                                 For example, the following are all valid URLs:

                                 * https://www.googleapis.com/compute/v1/projects/{project}/global/networks/{network}
                                 * projects/{project}/global/networks/{network}
                                 * global/networks/{network}
                              oneOf:
                              - not:
                                  required:
                                  - external
                                required:
                                - name
                              - not:
                                  anyOf:
                                  - required:
                                    - name
                                  - required:
                                    - namespace
                                required:
                                - external
                              properties:
                                external:
                                  description: A reference to an externally managed
                                    Compute Network resource. Should be in the format
                                    `projects/{{projectID}}/global/networks/{{network}}`.
                                  type: string
                                name:
                                  description: The `name` field of a `ComputeNetwork`
                                    resource.
                                  type: string
                                namespace:
                                  description: The `namespace` field of a `ComputeNetwork`
                                    resource.
                                  type: string
                              type: object
                            noExternalIPAddress:
                              description: Default is false (with an external IP address).
                                Required if no external public IP address is attached
                                to the VM. If no external public IP address, additional
                                configuration is required to allow the VM to access
                                Google Services. See https://cloud.google.com/vpc/docs/configure-private-google-access
                                and https://cloud.google.com/nat/docs/gce-example#create-nat
                                for more information.
                              type: boolean
                            subnetworkRef:
                              description: |-
                                The URL of an existing subnetwork resource in the network.
                                 You can specify the subnetwork as a full or partial URL.

                                 For example, the following are all valid URLs:

                                 * https://www.googleapis.com/compute/v1/projects/{project}/regions/{region}/subnetworks/{subnetwork}
                                 * projects/{project}/regions/{region}/subnetworks/{subnetwork}
                                 * regions/{region}/subnetworks/{subnetwork}
                              oneOf:
                              - not:
                                  required:
                                  - external
                                required:
                                - name
                              - not:
                                  anyOf:
                                  - required:
                                    - name
                                  - required:
                                    - namespace
                                required:
                                - external
                              properties:
                                external:
                                  description: The ComputeSubnetwork selflink of form
                                    "projects/{{project}}/regions/{{region}}/subnetworks/{{name}}",
                                    when not managed by Config Connector.
                                  type: string
                                name:
                                  description: The `name` field of a `ComputeSubnetwork`
                                    resource.
                                  type: string
                                namespace:
                                  description: The `namespace` field of a `ComputeSubnetwork`
                                    resource.
                                  type: string
                              type: object
                          type: object
                        type: array
                    type: object
                  placement:
                    description: The placement policy.
                    properties:
                      collocation:
                        description: UNSPECIFIED vs. COLLOCATED (default UNSPECIFIED).
                          Use COLLOCATED when you want VMs to be located close to
                          each other for low network latency between the VMs. No placement
                          policy will be generated when collocation is UNSPECIFIED.
                        type: string
                      maxDistance:
                        description: When specified, causes the job to fail if more
                          than max_distance logical switches are required between
                          VMs. Batch uses the most compact possible placement of VMs
                          even when max_distance is not specified. An explicit max_distance
                          makes that level of compactness a strict requirement. Not
                          yet implemented
                        format: int64
                        type: integer
                    type: object
                  serviceAccount:
                    description: |-
                      Defines the service account for Batch-created VMs. If omitted, the [default
                       Compute Engine service
                       account](https://cloud.google.com/compute/docs/access/service-accounts#default_service_account)
                       is used. Must match the service account specified in any used instance
                       template configured in the Batch job.

                       Includes the following fields:
                        * email: The service account's email address. If not set, the default
                        Compute Engine service account is used.
                        * scopes: Additional OAuth scopes to grant the service account, beyond the
                        default cloud-platform scope. (list of strings)
                    oneOf:
                    - not:
                        required:
                        - external
                      required:
                      - name
                    - not:
                        anyOf:
                        - required:
                          - name
                        - required:
                          - namespace
                      required:
                      - external
                    properties:
                      external:
                        description: The `email` field of an `IAMServiceAccount` resource.
                        type: string
                      name:
                        description: 'Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names'
                        type: string
                      namespace:
                        description: 'Namespace of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/namespaces/'
                        type: string
                    type: object
                  tags:
                    description: |-
                      Optional. Tags applied to the VM instances.

                       The tags identify valid sources or targets for network firewalls.
                       Each tag must be 1-63 characters long, and comply with
                       [RFC1035](https://www.ietf.org/rfc/rfc1035.txt).
                    items:
                      type: string
                    type: array
                type: object
              labels:
                additionalProperties:
                  type: string
                description: |-
                  Custom labels to apply to the job and any Cloud Logging
                   [LogEntry](https://cloud.google.com/logging/docs/reference/v2/rest/v2/LogEntry)
                   that it generates.

                   Use labels to group and describe the resources they are applied to. Batch
                   automatically applies predefined labels and supports multiple `labels`
                   fields for each job, which each let you apply custom labels to various
                   resources. Label names that start with "goog-" or "google-" are
                   reserved for predefined labels. For more information about labels with
                   Batch, see
                   [Organize resources using
                   labels](https://cloud.google.com/batch/docs/organize-resources-using-labels).
                type: object
              location:
                description: Immutable. The location where the alloydb cluster should
                  reside.
                type: string
              logsPolicy:
                description: Log preservation policy for the Job.
                properties:
                  cloudLoggingOption:
                    description: Optional. When `destination` is set to `CLOUD_LOGGING`,
                      you can optionally set this field to configure additional settings
                      for Cloud Logging.
                    properties:
                      useGenericTaskMonitoredResource:
                        description: Optional. Set this field to `true` to change
                          the [monitored resource type](https://cloud.google.com/monitoring/api/resources)
                          for Cloud Logging logs generated by this Batch job from
                          the [`batch.googleapis.com/Job`](https://cloud.google.com/monitoring/api/resources#tag_batch.googleapis.com/Job)
                          type to the formerly used [`generic_task`](https://cloud.google.com/monitoring/api/resources#tag_generic_task)
                          type.
                        type: boolean
                    type: object
                  destination:
                    description: If and where logs should be saved.
                    type: string
                  logsPath:
                    description: When `destination` is set to `PATH`, you must set
                      this field to the path where you want logs to be saved. This
                      path can point to a local directory on the VM or (if congifured)
                      a directory under the mount path of any Cloud Storage bucket,
                      network file system (NFS), or writable persistent disk that
                      is mounted to the job. For example, if the job has a bucket
                      with `mountPath` set to `/mnt/disks/my-bucket`, you can write
                      logs to the root directory of the `remotePath` of that bucket
                      by setting this field to `/mnt/disks/my-bucket/`.
                    type: string
                type: object
              notifications:
                description: Notification configurations.
                items:
                  properties:
                    message:
                      description: The attribute requirements of messages to be sent
                        to this Pub/Sub topic. Without this field, no message will
                        be sent.
                      properties:
                        newJobState:
                          description: The new job state.
                          type: string
                        newTaskState:
                          description: The new task state.
                          type: string
                        type:
                          description: The message type.
                          type: string
                      type: object
                    pubsubTopicRef:
                      description: |-
                        The Pub/Sub topic where notifications for the job, like state
                         changes, will be published. If undefined, no Pub/Sub notifications
                         are sent for this job.

                         Specify the topic using the following format:
                         `projects/{project}/topics/{topic}`.
                         Notably, if you want to specify a Pub/Sub topic that is in a
                         different project than the job, your administrator must grant your
                         project's Batch service agent permission to publish to that topic.

                         For more information about configuring Pub/Sub notifications for
                         a job, see
                         https://cloud.google.com/batch/docs/enable-notifications.
                      oneOf:
                      - not:
                          required:
                          - external
                        required:
                        - name
                      - not:
                          anyOf:
                          - required:
                            - name
                          - required:
                            - namespace
                        required:
                        - external
                      properties:
                        external:
                          description: If provided must be in the format `projects/[project_id]/topics/[topic_id]`.
                          type: string
                        name:
                          description: The `metadata.name` field of a `PubSubTopic`
                            resource.
                          type: string
                        namespace:
                          description: The `metadata.namespace` field of a `PubSubTopic`
                            resource.
                          type: string
                      type: object
                  type: object
                type: array
              priority:
                description: Priority of the Job. The valid value range is [0, 100).
                  Default value is 0. Higher value indicates higher priority. A job
                  with higher priority value is more likely to run earlier if all
                  other requirements are satisfied.
                format: int64
                type: integer
              projectRef:
                description: The project that this resource belongs to.
                oneOf:
                - not:
                    required:
                    - external
                  required:
                  - name
                - not:
                    anyOf:
                    - required:
                      - name
                    - required:
                      - namespace
                  required:
                  - external
                properties:
                  external:
                    description: The `projectID` field of a project, when not managed
                      by Config Connector.
                    type: string
                  kind:
                    description: The kind of the Project resource; optional but must
                      be `Project` if provided.
                    type: string
                  name:
                    description: The `name` field of a `Project` resource.
                    type: string
                  namespace:
                    description: The `namespace` field of a `Project` resource.
                    type: string
                type: object
              resourceID:
                description: The BatchJob name. If not given, the metadata.name will
                  be used.
                type: string
              taskGroups:
                description: Required. TaskGroups in the Job. Only one TaskGroup is
                  supported now.
                items:
                  properties:
                    parallelism:
                      description: 'Max number of tasks that can run in parallel.
                        Default to min(task_count, parallel tasks per job limit).
                        See: [Job Limits](https://cloud.google.com/batch/quotas#job_limits).
                        Field parallelism must be 1 if the scheduling_policy is IN_ORDER.'
                      format: int64
                      type: integer
                    permissiveSSH:
                      description: When true, Batch will configure SSH to allow passwordless
                        login between VMs running the Batch tasks in the same TaskGroup.
                      type: boolean
                    requireHostsFile:
                      description: When true, Batch will populate a file with a list
                        of all VMs assigned to the TaskGroup and set the BATCH_HOSTS_FILE
                        environment variable to the path of that file. Defaults to
                        false. The host file supports up to 1000 VMs.
                      type: boolean
                    runAsNonRoot:
                      description: Optional. If not set or set to false, Batch uses
                        the root user to execute runnables. If set to true, Batch
                        runs the runnables using a non-root user. Currently, the non-root
                        user Batch used is generated by OS Login. For more information,
                        see [About OS Login](https://cloud.google.com/compute/docs/oslogin).
                      type: boolean
                    schedulingPolicy:
                      description: Scheduling policy for Tasks in the TaskGroup. The
                        default value is AS_SOON_AS_POSSIBLE.
                      type: string
                    taskCount:
                      description: Number of Tasks in the TaskGroup. Default is 1.
                      format: int64
                      type: integer
                    taskCountPerNode:
                      description: Max number of tasks that can be run on a VM at
                        the same time. If not specified, the system will decide a
                        value based on available compute resources on a VM and task
                        requirements.
                      format: int64
                      type: integer
                    taskEnvironments:
                      description: |-
                        An array of environment variable mappings, which are passed to Tasks with
                         matching indices. If task_environments is used then task_count should
                         not be specified in the request (and will be ignored). Task count will be
                         the length of task_environments.

                         Tasks get a BATCH_TASK_INDEX and BATCH_TASK_COUNT environment variable, in
                         addition to any environment variables set in task_environments, specifying
                         the number of Tasks in the Task's parent TaskGroup, and the specific Task's
                         index in the TaskGroup (0 through BATCH_TASK_COUNT - 1).
                      items:
                        properties:
                          encryptedVariables:
                            description: An encrypted JSON dictionary where the key/value
                              pairs correspond to environment variable names and their
                              values.
                            properties:
                              cipherText:
                                description: The value of the cipherText response
                                  from the `encrypt` method.
                                type: string
                              kmsKeyRef:
                                description: The name of the KMS key that will be
                                  used to decrypt the cipher text.
                                oneOf:
                                - not:
                                    required:
                                    - external
                                  required:
                                  - name
                                - not:
                                    anyOf:
                                    - required:
                                      - name
                                    - required:
                                      - namespace
                                  required:
                                  - external
                                properties:
                                  external:
                                    description: A reference to an externally managed
                                      KMSCryptoKey. Should be in the format `projects/[kms_project_id]/locations/[region]/keyRings/[key_ring_id]/cryptoKeys/[key]`.
                                    type: string
                                  name:
                                    description: The `name` of a `KMSCryptoKey` resource.
                                    type: string
                                  namespace:
                                    description: The `namespace` of a `KMSCryptoKey`
                                      resource.
                                    type: string
                                type: object
                            type: object
                          secretVariables:
                            additionalProperties:
                              type: string
                            description: A map of environment variable names to Secret
                              Manager secret names. The VM will access the named secrets
                              to set the value of each environment variable.
                            type: object
                          variables:
                            additionalProperties:
                              type: string
                            description: A map of environment variable names to values.
                            type: object
                        type: object
                      type: array
                    taskSpec:
                      description: Required. Tasks in the group share the same task
                        spec.
                      properties:
                        computeResource:
                          description: ComputeResource requirements.
                          properties:
                            bootDiskMiB:
                              description: Extra boot disk size in MiB for each task.
                              format: int64
                              type: integer
                            cpuMilli:
                              description: |-
                                The milliCPU count.

                                 `cpuMilli` defines the amount of CPU resources per task in milliCPU units.
                                 For example, `1000` corresponds to 1 vCPU per task. If undefined, the
                                 default value is `2000`.

                                 If you also define the VM's machine type using the `machineType` in
                                 [InstancePolicy](https://cloud.google.com/batch/docs/reference/rest/v1/projects.locations.jobs#instancepolicy)
                                 field or inside the `instanceTemplate` in the
                                 [InstancePolicyOrTemplate](https://cloud.google.com/batch/docs/reference/rest/v1/projects.locations.jobs#instancepolicyortemplate)
                                 field, make sure the CPU resources for both fields are compatible with each
                                 other and with how many tasks you want to allow to run on the same VM at
                                 the same time.

                                 For example, if you specify the `n2-standard-2` machine type, which has 2
                                 vCPUs each, you are recommended to set `cpuMilli` no more than `2000`, or
                                 you are recommended to run two tasks on the same VM if you set `cpuMilli`
                                 to `1000` or less.
                              format: int64
                              type: integer
                            memoryMiB:
                              description: |-
                                Memory in MiB.

                                 `memoryMib` defines the amount of memory per task in MiB units.
                                 If undefined, the default value is `2000`.
                                 If you also define the VM's machine type using the `machineType` in
                                 [InstancePolicy](https://cloud.google.com/batch/docs/reference/rest/v1/projects.locations.jobs#instancepolicy)
                                 field or inside the `instanceTemplate` in the
                                 [InstancePolicyOrTemplate](https://cloud.google.com/batch/docs/reference/rest/v1/projects.locations.jobs#instancepolicyortemplate)
                                 field, make sure the memory resources for both fields are compatible with
                                 each other and with how many tasks you want to allow to run on the same VM
                                 at the same time.

                                 For example, if you specify the `n2-standard-2` machine type, which has 8
                                 GiB each, you are recommended to set `memoryMib` to no more than `8192`,
                                 or you are recommended to run two tasks on the same VM if you set
                                 `memoryMib` to `4096` or less.
                              format: int64
                              type: integer
                          type: object
                        environment:
                          description: Environment variables to set before running
                            the Task.
                          properties:
                            encryptedVariables:
                              description: An encrypted JSON dictionary where the
                                key/value pairs correspond to environment variable
                                names and their values.
                              properties:
                                cipherText:
                                  description: The value of the cipherText response
                                    from the `encrypt` method.
                                  type: string
                                kmsKeyRef:
                                  description: The name of the KMS key that will be
                                    used to decrypt the cipher text.
                                  oneOf:
                                  - not:
                                      required:
                                      - external
                                    required:
                                    - name
                                  - not:
                                      anyOf:
                                      - required:
                                        - name
                                      - required:
                                        - namespace
                                    required:
                                    - external
                                  properties:
                                    external:
                                      description: A reference to an externally managed
                                        KMSCryptoKey. Should be in the format `projects/[kms_project_id]/locations/[region]/keyRings/[key_ring_id]/cryptoKeys/[key]`.
                                      type: string
                                    name:
                                      description: The `name` of a `KMSCryptoKey`
                                        resource.
                                      type: string
                                    namespace:
                                      description: The `namespace` of a `KMSCryptoKey`
                                        resource.
                                      type: string
                                  type: object
                              type: object
                            secretVariables:
                              additionalProperties:
                                type: string
                              description: A map of environment variable names to
                                Secret Manager secret names. The VM will access the
                                named secrets to set the value of each environment
                                variable.
                              type: object
                            variables:
                              additionalProperties:
                                type: string
                              description: A map of environment variable names to
                                values.
                              type: object
                          type: object
                        environments:
                          additionalProperties:
                            type: string
                          description: 'Deprecated: please use environment(non-plural)
                            instead.'
                          type: object
                        lifecyclePolicies:
                          description: Lifecycle management schema when any task in
                            a task group is failed. Currently we only support one
                            lifecycle policy. When the lifecycle policy condition
                            is met, the action in the policy will execute. If task
                            execution result does not meet with the defined lifecycle
                            policy, we consider it as the default policy. Default
                            policy means if the exit code is 0, exit task. If task
                            ends with non-zero exit code, retry the task with max_retry_count.
                          items:
                            properties:
                              action:
                                description: Action to execute when ActionCondition
                                  is true. When RETRY_TASK is specified, we will retry
                                  failed tasks if we notice any exit code match and
                                  fail tasks if no match is found. Likewise, when
                                  FAIL_TASK is specified, we will fail tasks if we
                                  notice any exit code match and retry tasks if no
                                  match is found.
                                type: string
                              actionCondition:
                                description: Conditions that decide why a task failure
                                  is dealt with a specific action.
                                properties:
                                  exitCodes:
                                    description: Exit codes of a task execution. If
                                      there are more than 1 exit codes, when task
                                      executes with any of the exit code in the list,
                                      the condition is met and the action will be
                                      executed.
                                    items:
                                      format: int32
                                      type: integer
                                    type: array
                                type: object
                            type: object
                          type: array
                        maxRetryCount:
                          description: Maximum number of retries on failures. The
                            default, 0, which means never retry. The valid value range
                            is [0, 10].
                          format: int32
                          type: integer
                        maxRunDuration:
                          description: Maximum duration the task should run before
                            being automatically retried (if enabled) or automatically
                            failed. Format the value of this field as a time limit
                            in seconds followed by `s`&mdash;for example, `3600s`
                            for 1 hour. The field accepts any value between 0 and
                            the maximum listed for the `Duration` field type at https://protobuf.dev/reference/protobuf/google.protobuf/#duration;
                            however, the actual maximum run time for a job will be
                            limited to the maximum run time for a job listed at https://cloud.google.com/batch/quotas#max-job-duration.
                          type: string
                        runnables:
                          description: |-
                            Required. The sequence of one or more runnables (executable scripts,
                             executable containers, and/or barriers) for each task in this task group to
                             run. Each task runs this list of runnables in order. For a task to succeed,
                             all of its script and container runnables each must meet at least one of
                             the following conditions:

                               `ignore_exit_status` subfield.
                          items:
                            properties:
                              alwaysRun:
                                description: |-
                                  By default, after a Runnable fails, no further Runnable are executed. This
                                   flag indicates that this Runnable must be run even if the Task has already
                                   failed. This is useful for Runnables that copy output files off of the VM
                                   or for debugging.

                                   The always_run flag does not override the Task's overall max_run_duration.
                                   If the max_run_duration has expired then no further Runnables will execute,
                                   not even always_run Runnables.
                                type: boolean
                              background:
                                description: |-
                                  Normally, a runnable that doesn't exit causes its task to fail. However,
                                   you can set this field to `true` to configure a background runnable.
                                   Background runnables are allowed continue running in the background while
                                   the task executes subsequent runnables. For example, background runnables
                                   are useful for providing services to other runnables or providing
                                   debugging-support tools like SSH servers.

                                   Specifically, background runnables are killed automatically (if they have
                                   not already exited) a short time after all foreground runnables have
                                   completed. Even though this is likely to result in a non-zero exit status
                                   for the background runnable, these automatic kills are not treated as task
                                   failures.
                                type: boolean
                              barrier:
                                description: Barrier runnable.
                                properties:
                                  name:
                                    description: Barriers are identified by their
                                      index in runnable list. Names are not required,
                                      but if present should be an identifier.
                                    type: string
                                type: object
                              container:
                                description: Container runnable.
                                properties:
                                  blockExternalNetwork:
                                    description: If set to true, external network
                                      access to and from container will be blocked,
                                      containers that are with block_external_network
                                      as true can still communicate with each other,
                                      network cannot be specified in the `container.options`
                                      field.
                                    type: boolean
                                  commands:
                                    description: Required for some container images.
                                      Overrides the `CMD` specified in the container.
                                      If there is an `ENTRYPOINT` (either in the container
                                      image or with the `entrypoint` field below)
                                      then these commands are appended as arguments
                                      to the `ENTRYPOINT`.
                                    items:
                                      type: string
                                    type: array
                                  enableImageStreaming:
                                    description: |-
                                      Optional. If set to true, this container runnable uses Image streaming.

                                       Use Image streaming to allow the runnable to initialize without
                                       waiting for the entire container image to download, which can
                                       significantly reduce startup time for large container images.

                                       When `enableImageStreaming` is set to true, the container
                                       runtime is [containerd](https://containerd.io/) instead of Docker.
                                       Additionally, this container runnable only supports the following
                                       `container` subfields: `imageUri`,
                                       `commands[]`, `entrypoint`, and
                                       `volumes[]`; any other `container` subfields are ignored.

                                       For more information about the requirements and limitations for using
                                       Image streaming with Batch, see the [`image-streaming`
                                       sample on
                                       GitHub](https://github.com/GoogleCloudPlatform/batch-samples/tree/main/api-samples/image-streaming).
                                    type: boolean
                                  entrypoint:
                                    description: Required for some container images.
                                      Overrides the `ENTRYPOINT` specified in the
                                      container.
                                    type: string
                                  imageURI:
                                    description: Required. The URI to pull the container
                                      image from.
                                    type: string
                                  options:
                                    description: Required for some container images.
                                      Arbitrary additional options to include in the
                                      `docker run` command when running this container&mdash;for
                                      example, `--network host`. For the `--volume`
                                      option, use the `volumes` field for the container.
                                    type: string
                                  username:
                                    description: |-
                                      Required if the container image is from a private Docker registry. The
                                       username to login to the Docker registry that contains the image.

                                       You can either specify the username directly by using plain text or
                                       specify an encrypted username by using a Secret Manager secret:
                                       `projects/*/secrets/*/versions/*`. However, using a secret is
                                       recommended for enhanced security.

                                       Caution: If you specify the username using plain text, you risk the
                                       username being exposed to any users who can view the job or its logs.
                                       To avoid this risk, specify a secret that contains the username instead.

                                       Learn more about [Secret
                                       Manager](https://cloud.google.com/secret-manager/docs/) and [using
                                       Secret Manager with
                                       Batch](https://cloud.google.com/batch/docs/create-run-job-secret-manager).
                                    type: string
                                  volumes:
                                    description: |-
                                      Volumes to mount (bind mount) from the host machine files or directories
                                       into the container, formatted to match `--volume` option for the
                                       `docker run` command&mdash;for example, `/foo:/bar` or `/foo:/bar:ro`.

                                       If the `TaskSpec.Volumes` field is specified but this field is not, Batch
                                       will mount each volume from the host machine to the container with the
                                       same mount path by default. In this case, the default mount option for
                                       containers will be read-only (`ro`) for existing persistent disks and
                                       read-write (`rw`) for other volume types, regardless of the original
                                       mount options specified in `TaskSpec.Volumes`. If you need different
                                       mount settings, you can explicitly configure them in this field.
                                    items:
                                      type: string
                                    type: array
                                type: object
                              displayName:
                                description: Optional. DisplayName is an optional
                                  field that can be provided by the caller. If provided,
                                  it will be used in logs and other outputs to identify
                                  the script, making it easier for users to understand
                                  the logs. If not provided the index of the runnable
                                  will be used for outputs.
                                type: string
                              environment:
                                description: Environment variables for this Runnable
                                  (overrides variables set for the whole Task or TaskGroup).
                                properties:
                                  encryptedVariables:
                                    description: An encrypted JSON dictionary where
                                      the key/value pairs correspond to environment
                                      variable names and their values.
                                    properties:
                                      cipherText:
                                        description: The value of the cipherText response
                                          from the `encrypt` method.
                                        type: string
                                      kmsKeyRef:
                                        description: The name of the KMS key that
                                          will be used to decrypt the cipher text.
                                        oneOf:
                                        - not:
                                            required:
                                            - external
                                          required:
                                          - name
                                        - not:
                                            anyOf:
                                            - required:
                                              - name
                                            - required:
                                              - namespace
                                          required:
                                          - external
                                        properties:
                                          external:
                                            description: A reference to an externally
                                              managed KMSCryptoKey. Should be in the
                                              format `projects/[kms_project_id]/locations/[region]/keyRings/[key_ring_id]/cryptoKeys/[key]`.
                                            type: string
                                          name:
                                            description: The `name` of a `KMSCryptoKey`
                                              resource.
                                            type: string
                                          namespace:
                                            description: The `namespace` of a `KMSCryptoKey`
                                              resource.
                                            type: string
                                        type: object
                                    type: object
                                  secretVariables:
                                    additionalProperties:
                                      type: string
                                    description: A map of environment variable names
                                      to Secret Manager secret names. The VM will
                                      access the named secrets to set the value of
                                      each environment variable.
                                    type: object
                                  variables:
                                    additionalProperties:
                                      type: string
                                    description: A map of environment variable names
                                      to values.
                                    type: object
                                type: object
                              ignoreExitStatus:
                                description: Normally, a runnable that returns a non-zero
                                  exit status fails and causes the task to fail. However,
                                  you can set this field to `true` to allow the task
                                  to continue executing its other runnables even if
                                  this runnable fails.
                                type: boolean
                              labels:
                                additionalProperties:
                                  type: string
                                description: Labels for this Runnable.
                                type: object
                              script:
                                description: Script runnable.
                                properties:
                                  path:
                                    description: |-
                                      The path to a script file that is accessible from the host VM(s).

                                       Unless the script file supports the default `#!/bin/sh` shell
                                       interpreter, you must specify an interpreter by including a
                                       [shebang line](https://en.wikipedia.org/wiki/Shebang_(Unix) as the
                                       first line of the file. For example, to execute the script using bash,
                                       include `#!/bin/bash` as the first line of the file. Alternatively,
                                       to execute the script using Python3, include `#!/usr/bin/env python3`
                                       as the first line of the file.
                                    type: string
                                  text:
                                    description: |-
                                      The text for a script.

                                       Unless the script text supports the default `#!/bin/sh` shell
                                       interpreter, you must specify an interpreter by including a
                                       [shebang line](https://en.wikipedia.org/wiki/Shebang_(Unix) at the
                                       beginning of the text. For example, to execute the script using bash,
                                       include `#!/bin/bash\n` at the beginning of the text. Alternatively,
                                       to execute the script using Python3, include `#!/usr/bin/env python3\n`
                                       at the beginning of the text.
                                    type: string
                                type: object
                              timeout:
                                description: Timeout for this Runnable.
                                type: string
                            type: object
                          type: array
                        volumes:
                          description: Volumes to mount before running Tasks using
                            this TaskSpec.
                          items:
                            properties:
                              deviceName:
                                description: Device name of an attached disk volume,
                                  which should align with a device_name specified
                                  by job.allocation_policy.instances[0].policy.disks[i].device_name
                                  or defined by the given instance template in job.allocation_policy.instances[0].instance_template.
                                type: string
                              gcs:
                                description: A Google Cloud Storage (GCS) volume.
                                properties:
                                  remotePath:
                                    description: 'Remote path, either a bucket name
                                      or a subdirectory of a bucket, e.g.: bucket_name,
                                      bucket_name/subdirectory/'
                                    type: string
                                type: object
                              mountOptions:
                                description: |-
                                  Mount options vary based on the type of storage volume:

                                   * For a Cloud Storage bucket, all the mount options provided
                                   by
                                     the [`gcsfuse` tool](https://cloud.google.com/storage/docs/gcsfuse-cli)
                                     are supported.
                                   * For an existing persistent disk, all mount options provided by the
                                     [`mount` command](https://man7.org/linux/man-pages/man8/mount.8.html)
                                     except writing are supported. This is due to restrictions of
                                     [multi-writer
                                     mode](https://cloud.google.com/compute/docs/disks/sharing-disks-between-vms).
                                   * For any other disk or a Network File System (NFS), all the
                                     mount options provided by the `mount` command are supported.
                                items:
                                  type: string
                                type: array
                              mountPath:
                                description: The mount path for the volume, e.g. /mnt/disks/share.
                                type: string
                              nfs:
                                description: A Network File System (NFS) volume. For
                                  example, a Filestore file share.
                                properties:
                                  remotePath:
                                    description: Remote source path exported from
                                      the NFS, e.g., "/share".
                                    type: string
                                  server:
                                    description: The IP address of the NFS.
                                    type: string
                                type: object
                            type: object
                          type: array
                      type: object
                  type: object
                type: array
            required:
            - location
            - projectRef
            type: object
          status:
            description: BatchJobStatus defines the config connector machine state
              of BatchJob
            properties:
              conditions:
                description: Conditions represent the latest available observations
                  of the object's current state.
                items:
                  properties:
                    lastTransitionTime:
                      description: Last time the condition transitioned from one status
                        to another.
                      type: string
                    message:
                      description: Human-readable message indicating details about
                        last transition.
                      type: string
                    reason:
                      description: Unique, one-word, CamelCase reason for the condition's
                        last transition.
                      type: string
                    status:
                      description: Status is the status of the condition. Can be True,
                        False, Unknown.
                      type: string
                    type:
                      description: Type is the type of the condition.
                      type: string
                  type: object
                type: array
              externalRef:
                description: A unique specifier for the BatchJob resource in GCP.
                type: string
              observedGeneration:
                description: ObservedGeneration is the generation of the resource
                  that was most recently observed by the Config Connector controller.
                  If this is equal to metadata.generation, then that means that the
                  current reported status reflects the most recent desired state of
                  the resource.
                format: int64
                type: integer
              observedState:
                description: ObservedState is the state of the resource as most recently
                  observed in GCP.
                properties:
                  createTime:
                    description: Output only. When the Job was created.
                    type: string
                  name:
                    description: 'Output only. Job name. For example: "projects/123456/locations/us-central1/jobs/job01".'
                    type: string
                  status:
                    description: Output only. Job status. It is read only for users.
                    properties:
                      runDuration:
                        description: The duration of time that the Job spent in status
                          RUNNING.
                        type: string
                      state:
                        description: Job state
                        type: string
                      statusEvents:
                        description: Job status events
                        items:
                          properties:
                            description:
                              description: Description of the event.
                              type: string
                            eventTime:
                              description: The time this event occurred.
                              type: string
                            taskExecution:
                              description: Task Execution. This field is only defined
                                for task-level status events where the task fails.
                              properties:
                                exitCode:
                                  description: |-
                                    The exit code of a finished task.

                                     If the task succeeded, the exit code will be 0. If the task failed but not
                                     due to the following reasons, the exit code will be 50000.

                                     Otherwise, it can be from different sources:
                                     * Batch known failures:
                                     https://cloud.google.com/batch/docs/troubleshooting#reserved-exit-codes.
                                     * Batch runnable execution failures; you can rely on Batch logs to further
                                     diagnose: https://cloud.google.com/batch/docs/analyze-job-using-logs. If
                                     there are multiple runnables failures, Batch only exposes the first error.
                                  format: int32
                                  type: integer
                              type: object
                            taskState:
                              description: Task State. This field is only defined
                                for task-level status events.
                              type: string
                            type:
                              description: Type of the event.
                              type: string
                          type: object
                        type: array
                    type: object
                  taskGroups:
                    description: Required. TaskGroups in the Job. Only one TaskGroup
                      is supported now.
                    items:
                      properties:
                        name:
                          description: 'Output only. TaskGroup name. The system generates
                            this field based on parent Job name. For example: "projects/123456/locations/us-west1/jobs/job01/taskGroups/group01".'
                          type: string
                      type: object
                    type: array
                  uid:
                    description: Output only. A system generated unique ID for the
                      Job.
                    type: string
                  updateTime:
                    description: Output only. The last time the Job was updated.
                    type: string
                type: object
            type: object
        required:
        - spec
        type: object
    served: true
    storage: true
    subresources:
      status: {}
