# Copyright 2025 Google LLC
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
#     http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.

apiVersion: apiextensions.k8s.io/v1
kind: CustomResourceDefinition
metadata:
  annotations:
    cnrm.cloud.google.com/version: 1.128.0
  creationTimestamp: null
  labels:
    cnrm.cloud.google.com/managed-by-kcc: "true"
    cnrm.cloud.google.com/stability-level: stable
    cnrm.cloud.google.com/system: "true"
    cnrm.cloud.google.com/tf2crd: "true"
  name: storagetransferjobs.storagetransfer.cnrm.cloud.google.com
spec:
  group: storagetransfer.cnrm.cloud.google.com
  names:
    categories:
    - gcp
    kind: StorageTransferJob
    plural: storagetransferjobs
    shortNames:
    - gcpstoragetransferjob
    - gcpstoragetransferjobs
    singular: storagetransferjob
  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: v1beta1
    schema:
      openAPIV3Schema:
        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/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/api-conventions.md#types-kinds'
            type: string
          metadata:
            type: object
          spec:
            properties:
              description:
                description: Unique description to identify the Transfer Job.
                type: string
              notificationConfig:
                description: Notification configuration.
                properties:
                  eventTypes:
                    description: Event types for which a notification is desired.
                      If empty, send notifications for all event types. The valid
                      types are "TRANSFER_OPERATION_SUCCESS", "TRANSFER_OPERATION_FAILED",
                      "TRANSFER_OPERATION_ABORTED".
                    items:
                      type: string
                    type: array
                  payloadFormat:
                    description: The desired format of the notification message payloads.
                      One of "NONE" or "JSON".
                    type: string
                  topicRef:
                    description: The PubSubTopic to which to publish notifications.
                    oneOf:
                    - not:
                        required:
                        - external
                      required:
                      - name
                    - not:
                        anyOf:
                        - required:
                          - name
                        - required:
                          - namespace
                      required:
                      - external
                    properties:
                      external:
                        description: 'Allowed value: string of the format `projects/{{project}}/topics/{{value}}`,
                          where {{value}} is the `name` field of a `PubSubTopic` 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
                required:
                - payloadFormat
                - topicRef
                type: object
              resourceID:
                description: Immutable. Optional. The service-generated name of the
                  resource. Used for acquisition only. Leave unset to create a new
                  resource.
                type: string
              schedule:
                description: Schedule specification defining when the Transfer Job
                  should be scheduled to start, end and what time to run.
                properties:
                  repeatInterval:
                    description: 'Interval between the start of each scheduled transfer.
                      If unspecified, the default value is 24 hours. This value may
                      not be less than 1 hour. A duration in seconds with up to nine
                      fractional digits, terminated by ''s''. Example: "3.5s".'
                    type: string
                  scheduleEndDate:
                    description: The last day the recurring transfer will be run.
                      If schedule_end_date is the same as schedule_start_date, the
                      transfer will be executed only once.
                    properties:
                      day:
                        description: Day of month. Must be from 1 to 31 and valid
                          for the year and month.
                        type: integer
                      month:
                        description: Month of year. Must be from 1 to 12.
                        type: integer
                      year:
                        description: Year of date. Must be from 1 to 9999.
                        type: integer
                    required:
                    - day
                    - month
                    - year
                    type: object
                  scheduleStartDate:
                    description: The first day the recurring transfer is scheduled
                      to run. If schedule_start_date is in the past, the transfer
                      will run for the first time on the following day.
                    properties:
                      day:
                        description: Day of month. Must be from 1 to 31 and valid
                          for the year and month.
                        type: integer
                      month:
                        description: Month of year. Must be from 1 to 12.
                        type: integer
                      year:
                        description: Year of date. Must be from 1 to 9999.
                        type: integer
                    required:
                    - day
                    - month
                    - year
                    type: object
                  startTimeOfDay:
                    description: The time in UTC at which the transfer will be scheduled
                      to start in a day. Transfers may start later than this time.
                      If not specified, recurring and one-time transfers that are
                      scheduled to run today will run immediately; recurring transfers
                      that are scheduled to run on a future date will start at approximately
                      midnight UTC on that date. Note that when configuring a transfer
                      with the Cloud Platform Console, the transfer's start time in
                      a day is specified in your local timezone.
                    properties:
                      hours:
                        description: Hours of day in 24 hour format. Should be from
                          0 to 23.
                        type: integer
                      minutes:
                        description: Minutes of hour of day. Must be from 0 to 59.
                        type: integer
                      nanos:
                        description: Fractions of seconds in nanoseconds. Must be
                          from 0 to 999,999,999.
                        type: integer
                      seconds:
                        description: Seconds of minutes of the time. Must normally
                          be from 0 to 59.
                        type: integer
                    required:
                    - hours
                    - minutes
                    - nanos
                    - seconds
                    type: object
                required:
                - scheduleStartDate
                type: object
              status:
                description: 'Status of the job. Default: ENABLED. NOTE: The effect
                  of the new job status takes place during a subsequent job run. For
                  example, if you change the job status from ENABLED to DISABLED,
                  and an operation spawned by the transfer is running, the status
                  change would not affect the current operation.'
                type: string
              transferSpec:
                description: Transfer specification.
                properties:
                  awsS3DataSource:
                    description: An AWS S3 data source.
                    properties:
                      awsAccessKey:
                        description: AWS credentials block.
                        properties:
                          accessKeyId:
                            description: AWS Key ID.
                            oneOf:
                            - not:
                                required:
                                - valueFrom
                              required:
                              - value
                            - not:
                                required:
                                - value
                              required:
                              - valueFrom
                            properties:
                              value:
                                description: Value of the field. Cannot be used if
                                  'valueFrom' is specified.
                                type: string
                              valueFrom:
                                description: Source for the field's value. Cannot
                                  be used if 'value' is specified.
                                properties:
                                  secretKeyRef:
                                    description: Reference to a value with the given
                                      key in the given Secret in the resource's namespace.
                                    properties:
                                      key:
                                        description: Key that identifies the value
                                          to be extracted.
                                        type: string
                                      name:
                                        description: Name of the Secret to extract
                                          a value from.
                                        type: string
                                    required:
                                    - name
                                    - key
                                    type: object
                                type: object
                            type: object
                          secretAccessKey:
                            description: AWS Secret Access Key.
                            oneOf:
                            - not:
                                required:
                                - valueFrom
                              required:
                              - value
                            - not:
                                required:
                                - value
                              required:
                              - valueFrom
                            properties:
                              value:
                                description: Value of the field. Cannot be used if
                                  'valueFrom' is specified.
                                type: string
                              valueFrom:
                                description: Source for the field's value. Cannot
                                  be used if 'value' is specified.
                                properties:
                                  secretKeyRef:
                                    description: Reference to a value with the given
                                      key in the given Secret in the resource's namespace.
                                    properties:
                                      key:
                                        description: Key that identifies the value
                                          to be extracted.
                                        type: string
                                      name:
                                        description: Name of the Secret to extract
                                          a value from.
                                        type: string
                                    required:
                                    - name
                                    - key
                                    type: object
                                type: object
                            type: object
                        required:
                        - accessKeyId
                        - secretAccessKey
                        type: object
                      bucketName:
                        description: S3 Bucket name.
                        type: string
                      path:
                        description: S3 Bucket path in bucket to transfer.
                        type: string
                      roleArn:
                        description: The Amazon Resource Name (ARN) of the role to
                          support temporary credentials via 'AssumeRoleWithWebIdentity'.
                          For more information about ARNs, see [IAM ARNs](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_identifiers.html#identifiers-arns).
                          When a role ARN is provided, Transfer Service fetches temporary
                          credentials for the session using a 'AssumeRoleWithWebIdentity'
                          call for the provided role using the [GoogleServiceAccount][]
                          for this project.
                        type: string
                    required:
                    - bucketName
                    type: object
                  azureBlobStorageDataSource:
                    description: An Azure Blob Storage data source.
                    properties:
                      azureCredentials:
                        description: ' Credentials used to authenticate API requests
                          to Azure.'
                        properties:
                          sasToken:
                            description: Azure shared access signature.
                            oneOf:
                            - not:
                                required:
                                - valueFrom
                              required:
                              - value
                            - not:
                                required:
                                - value
                              required:
                              - valueFrom
                            properties:
                              value:
                                description: Value of the field. Cannot be used if
                                  'valueFrom' is specified.
                                type: string
                              valueFrom:
                                description: Source for the field's value. Cannot
                                  be used if 'value' is specified.
                                properties:
                                  secretKeyRef:
                                    description: Reference to a value with the given
                                      key in the given Secret in the resource's namespace.
                                    properties:
                                      key:
                                        description: Key that identifies the value
                                          to be extracted.
                                        type: string
                                      name:
                                        description: Name of the Secret to extract
                                          a value from.
                                        type: string
                                    required:
                                    - name
                                    - key
                                    type: object
                                type: object
                            type: object
                        required:
                        - sasToken
                        type: object
                      container:
                        description: The container to transfer from the Azure Storage
                          account.
                        type: string
                      path:
                        description: Root path to transfer objects. Must be an empty
                          string or full path name that ends with a '/'. This field
                          is treated as an object prefix. As such, it should generally
                          not begin with a '/'.
                        type: string
                      storageAccount:
                        description: The name of the Azure Storage account.
                        type: string
                    required:
                    - azureCredentials
                    - container
                    - storageAccount
                    type: object
                  gcsDataSink:
                    description: A Google Cloud Storage data sink.
                    properties:
                      bucketRef:
                        oneOf:
                        - not:
                            required:
                            - external
                          required:
                          - name
                        - not:
                            anyOf:
                            - required:
                              - name
                            - required:
                              - namespace
                          required:
                          - external
                        properties:
                          external:
                            description: 'Allowed value: The `name` field of a `StorageBucket`
                              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
                      path:
                        description: Google Cloud Storage path in bucket to transfer.
                        type: string
                    required:
                    - bucketRef
                    type: object
                  gcsDataSource:
                    description: A Google Cloud Storage data source.
                    properties:
                      bucketRef:
                        oneOf:
                        - not:
                            required:
                            - external
                          required:
                          - name
                        - not:
                            anyOf:
                            - required:
                              - name
                            - required:
                              - namespace
                          required:
                          - external
                        properties:
                          external:
                            description: 'Allowed value: The `name` field of a `StorageBucket`
                              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
                      path:
                        description: Google Cloud Storage path in bucket to transfer.
                        type: string
                    required:
                    - bucketRef
                    type: object
                  httpDataSource:
                    description: A HTTP URL data source.
                    properties:
                      listUrl:
                        description: The URL that points to the file that stores the
                          object list entries. This file must allow public access.
                          Currently, only URLs with HTTP and HTTPS schemes are supported.
                        type: string
                    required:
                    - listUrl
                    type: object
                  objectConditions:
                    description: Only objects that satisfy these object conditions
                      are included in the set of data source and data sink objects.
                      Object conditions based on objects' last_modification_time do
                      not exclude objects in a data sink.
                    properties:
                      excludePrefixes:
                        description: exclude_prefixes must follow the requirements
                          described for include_prefixes.
                        items:
                          type: string
                        type: array
                      includePrefixes:
                        description: If include_refixes is specified, objects that
                          satisfy the object conditions must have names that start
                          with one of the include_prefixes and that do not start with
                          any of the exclude_prefixes. If include_prefixes is not
                          specified, all objects except those that have names starting
                          with one of the exclude_prefixes must satisfy the object
                          conditions.
                        items:
                          type: string
                        type: array
                      lastModifiedBefore:
                        description: 'If specified, only objects with a "last modification
                          time" before this timestamp and objects that don''t have
                          a "last modification time" are transferred. A timestamp
                          in RFC3339 UTC "Zulu" format, with nanosecond resolution
                          and up to nine fractional digits. Examples: "2014-10-02T15:01:23Z"
                          and "2014-10-02T15:01:23.045123456Z".'
                        type: string
                      lastModifiedSince:
                        description: 'If specified, only objects with a "last modification
                          time" on or after this timestamp and objects that don''t
                          have a "last modification time" are transferred. A timestamp
                          in RFC3339 UTC "Zulu" format, with nanosecond resolution
                          and up to nine fractional digits. Examples: "2014-10-02T15:01:23Z"
                          and "2014-10-02T15:01:23.045123456Z".'
                        type: string
                      maxTimeElapsedSinceLastModification:
                        description: 'A duration in seconds with up to nine fractional
                          digits, terminated by ''s''. Example: "3.5s".'
                        type: string
                      minTimeElapsedSinceLastModification:
                        description: 'A duration in seconds with up to nine fractional
                          digits, terminated by ''s''. Example: "3.5s".'
                        type: string
                    type: object
                  posixDataSink:
                    description: A POSIX filesystem data sink.
                    properties:
                      rootDirectory:
                        description: Root directory path to the filesystem.
                        type: string
                    required:
                    - rootDirectory
                    type: object
                  posixDataSource:
                    description: A POSIX filesystem data source.
                    properties:
                      rootDirectory:
                        description: Root directory path to the filesystem.
                        type: string
                    required:
                    - rootDirectory
                    type: object
                  sinkAgentPoolName:
                    description: Immutable. Specifies the agent pool name associated
                      with the posix data source. When unspecified, the default name
                      is used.
                    type: string
                  sourceAgentPoolName:
                    description: Immutable. Specifies the agent pool name associated
                      with the posix data source. When unspecified, the default name
                      is used.
                    type: string
                  transferOptions:
                    description: Characteristics of how to treat files from datasource
                      and sink during job. If the option delete_objects_unique_in_sink
                      is true, object conditions based on objects' last_modification_time
                      are ignored and do not exclude objects in a data source or a
                      data sink.
                    properties:
                      deleteObjectsFromSourceAfterTransfer:
                        description: Whether objects should be deleted from the source
                          after they are transferred to the sink. Note that this option
                          and delete_objects_unique_in_sink are mutually exclusive.
                        type: boolean
                      deleteObjectsUniqueInSink:
                        description: Whether objects that exist only in the sink should
                          be deleted. Note that this option and delete_objects_from_source_after_transfer
                          are mutually exclusive.
                        type: boolean
                      overwriteObjectsAlreadyExistingInSink:
                        description: Whether overwriting objects that already exist
                          in the sink is allowed.
                        type: boolean
                      overwriteWhen:
                        description: When to overwrite objects that already exist
                          in the sink. If not set, overwrite behavior is determined
                          by overwriteObjectsAlreadyExistingInSink.
                        type: string
                    type: object
                type: object
            required:
            - description
            - transferSpec
            type: object
          status:
            properties:
              conditions:
                description: Conditions represent the latest available observation
                  of the resource'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
              creationTime:
                description: When the Transfer Job was created.
                type: string
              deletionTime:
                description: When the Transfer Job was deleted.
                type: string
              lastModificationTime:
                description: When the Transfer Job was last modified.
                type: string
              name:
                description: The name of the Transfer Job.
                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.
                type: integer
            type: object
        required:
        - spec
        type: object
    served: true
    storage: true
    subresources:
      status: {}
status:
  acceptedNames:
    kind: ""
    plural: ""
  conditions: []
  storedVersions: []
