--- apiVersion: apiextensions.k8s.io/v1 kind: CustomResourceDefinition metadata: annotations: controller-gen.kubebuilder.io/version: v0.9.0 creationTimestamp: null name: replicationsources.volsync.backube spec: group: volsync.backube names: kind: ReplicationSource listKind: ReplicationSourceList plural: replicationsources singular: replicationsource scope: Namespaced versions: - additionalPrinterColumns: - jsonPath: .spec.sourcePVC name: Source type: string - format: date-time jsonPath: .status.lastSyncTime name: Last sync type: string - jsonPath: .status.lastSyncDuration name: Duration type: string - format: date-time jsonPath: .status.nextSyncTime name: Next sync type: string name: v1alpha1 schema: openAPIV3Schema: description: ReplicationSource defines the source for a replicated volume 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: spec is the desired state of the ReplicationSource, including the replication method to use and its configuration. properties: external: description: external defines the configuration when using an external replication provider. properties: parameters: additionalProperties: type: string description: parameters are provider-specific key/value configuration parameters. For more information, please see the documentation of the specific replication provider being used. type: object provider: description: 'provider is the name of the external replication provider. The name should be of the form: domain.com/provider.' type: string type: object paused: description: paused can be used to temporarily stop replication. Defaults to "false". type: boolean rclone: description: rclone defines the configuration when using Rclone-based replication. properties: accessModes: description: accessModes can be used to override the accessModes of the PiT image. items: type: string minItems: 1 type: array capacity: anyOf: - type: integer - type: string description: capacity can be used to override the capacity of the PiT image. pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ x-kubernetes-int-or-string: true copyMethod: description: copyMethod describes how a point-in-time (PiT) image of the source volume should be created. enum: - Direct - None - Clone - Snapshot type: string rcloneConfig: description: RcloneConfig is the rclone secret name type: string rcloneConfigSection: description: RcloneConfigSection is the section in rclone_config file to use for the current job. type: string rcloneDestPath: description: RcloneDestPath is the remote path to sync to. type: string storageClassName: description: storageClassName can be used to override the StorageClass of the PiT image. type: string volumeSnapshotClassName: description: volumeSnapshotClassName can be used to specify the VSC to be used if copyMethod is Snapshot. If not set, the default VSC is used. type: string type: object restic: description: restic defines the configuration when using Restic-based replication. properties: accessModes: description: accessModes can be used to override the accessModes of the PiT image. items: type: string minItems: 1 type: array cacheAccessModes: description: CacheAccessModes can be used to set the accessModes of restic metadata cache volume items: type: string type: array cacheCapacity: anyOf: - type: integer - type: string description: cacheCapacity can be used to set the size of the restic metadata cache volume pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ x-kubernetes-int-or-string: true cacheStorageClassName: description: cacheStorageClassName can be used to set the StorageClass of the restic metadata cache volume type: string capacity: anyOf: - type: integer - type: string description: capacity can be used to override the capacity of the PiT image. pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ x-kubernetes-int-or-string: true copyMethod: description: copyMethod describes how a point-in-time (PiT) image of the source volume should be created. enum: - Direct - None - Clone - Snapshot type: string pruneIntervalDays: description: PruneIntervalDays define how often to prune the repository format: int32 type: integer repository: description: Repository is the secret name containing repository info type: string retain: description: ResticRetainPolicy define the retain policy properties: daily: description: Daily defines the number of snapshots to be kept daily format: int32 type: integer hourly: description: Hourly defines the number of snapshots to be kept hourly format: int32 type: integer monthly: description: Monthly defines the number of snapshots to be kept monthly format: int32 type: integer weekly: description: Weekly defines the number of snapshots to be kept weekly format: int32 type: integer within: description: Within defines the number of snapshots to be kept Within the given time period type: string yearly: description: Yearly defines the number of snapshots to be kept yearly format: int32 type: integer type: object storageClassName: description: storageClassName can be used to override the StorageClass of the PiT image. type: string volumeSnapshotClassName: description: volumeSnapshotClassName can be used to specify the VSC to be used if copyMethod is Snapshot. If not set, the default VSC is used. type: string type: object rsync: description: rsync defines the configuration when using Rsync-based replication. properties: accessModes: description: accessModes can be used to override the accessModes of the PiT image. items: type: string minItems: 1 type: array address: description: address is the remote address to connect to for replication. type: string capacity: anyOf: - type: integer - type: string description: capacity can be used to override the capacity of the PiT image. pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ x-kubernetes-int-or-string: true copyMethod: description: copyMethod describes how a point-in-time (PiT) image of the source volume should be created. enum: - Direct - None - Clone - Snapshot type: string path: description: path is the remote path to rsync to. Defaults to "/" type: string port: description: port is the SSH port to connect to for replication. Defaults to 22. format: int32 maximum: 65535 minimum: 0 type: integer serviceType: description: serviceType determines the Service type that will be created for incoming SSH connections. type: string sshKeys: description: sshKeys is the name of a Secret that contains the SSH keys to be used for authentication. If not provided, the keys will be generated. type: string sshUser: description: sshUser is the username for outgoing SSH connections. Defaults to "root". type: string storageClassName: description: storageClassName can be used to override the StorageClass of the PiT image. type: string volumeSnapshotClassName: description: volumeSnapshotClassName can be used to specify the VSC to be used if copyMethod is Snapshot. If not set, the default VSC is used. type: string type: object sourcePVC: description: sourcePVC is the name of the PersistentVolumeClaim (PVC) to replicate. type: string syncthing: description: syncthing defines the configuration when using Syncthing-based replication. properties: configAccessModes: description: Used to set the accessModes of Syncthing config volume. items: type: string type: array configCapacity: anyOf: - type: integer - type: string description: Used to set the size of the Syncthing config volume. pattern: ^(\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))(([KMGTPE]i)|[numkMGTPE]|([eE](\+|-)?(([0-9]+(\.[0-9]*)?)|(\.[0-9]+))))?$ x-kubernetes-int-or-string: true configStorageClassName: description: Used to set the StorageClass of the Syncthing config volume. type: string peers: description: List of Syncthing peers to be connected for syncing items: description: SyncthingPeer Defines the necessary information needed by VolSync to configure a given peer with the running Syncthing instance. properties: ID: description: The peer's Syncthing ID. type: string address: description: The peer's address that our Syncthing node will connect to. type: string introducer: description: A flag that determines whether this peer should introduce us to other peers sharing this volume. It is HIGHLY recommended that two Syncthing peers do NOT set each other as introducers as you will have a difficult time disconnecting the two. type: boolean required: - ID - address - introducer type: object type: array serviceType: description: Type of service to be used when exposing the Syncthing peer type: string type: object trigger: description: trigger determines when the latest state of the volume will be captured (and potentially replicated to the destination). properties: manual: description: manual is a string value that schedules a manual trigger. Once a sync completes then status.lastManualSync is set to the same string value. A consumer of a manual trigger should set spec.trigger.manual to a known value and then wait for lastManualSync to be updated by the operator to the same value, which means that the manual trigger will then pause and wait for further updates to the trigger. type: string schedule: description: schedule is a cronspec (https://en.wikipedia.org/wiki/Cron#Overview) that can be used to schedule replication to occur at regular, time-based intervals. pattern: ^(\d+|\*)(/\d+)?(\s+(\d+|\*)(/\d+)?){4}$ type: string type: object type: object status: description: status is the observed state of the ReplicationSource as determined by the controller. properties: conditions: description: conditions represent the latest available observations of the source's state. items: description: "Condition contains details for one aspect of the current state of this API Resource. --- This struct is intended for direct use as an array at the field path .status.conditions. For example, type FooStatus struct{ // Represents the observations of a foo's current state. // Known .status.conditions.type are: \"Available\", \"Progressing\", and \"Degraded\" // +patchMergeKey=type // +patchStrategy=merge // +listType=map // +listMapKey=type Conditions []metav1.Condition `json:\"conditions,omitempty\" patchStrategy:\"merge\" patchMergeKey:\"type\" protobuf:\"bytes,1,rep,name=conditions\"` \n // other fields }" properties: lastTransitionTime: description: lastTransitionTime is the last time the condition transitioned from one status to another. This should be when the underlying condition changed. If that is not known, then using the time when the API field changed is acceptable. format: date-time type: string message: description: message is a human readable message indicating details about the transition. This may be an empty string. maxLength: 32768 type: string observedGeneration: description: observedGeneration represents the .metadata.generation that the condition was set based upon. For instance, if .metadata.generation is currently 12, but the .status.conditions[x].observedGeneration is 9, the condition is out of date with respect to the current state of the instance. format: int64 minimum: 0 type: integer reason: description: reason contains a programmatic identifier indicating the reason for the condition's last transition. Producers of specific condition types may define expected values and meanings for this field, and whether the values are considered a guaranteed API. The value should be a CamelCase string. This field may not be empty. maxLength: 1024 minLength: 1 pattern: ^[A-Za-z]([A-Za-z0-9_,:]*[A-Za-z0-9_])?$ type: string status: description: status of the condition, one of True, False, Unknown. enum: - "True" - "False" - Unknown type: string type: description: type of condition in CamelCase or in foo.example.com/CamelCase. --- Many .condition.type values are consistent across resources like Available, but because arbitrary conditions can be useful (see .node.status.conditions), the ability to deconflict is important. The regex it matches is (dns1123SubdomainFmt/)?(qualifiedNameFmt) maxLength: 316 pattern: ^([a-z0-9]([-a-z0-9]*[a-z0-9])?(\.[a-z0-9]([-a-z0-9]*[a-z0-9])?)*/)?(([A-Za-z0-9][-A-Za-z0-9_.]*)?[A-Za-z0-9])$ type: string required: - lastTransitionTime - message - reason - status - type type: object type: array external: additionalProperties: type: string description: external contains provider-specific status information. For more details, please see the documentation of the specific replication provider being used. type: object lastManualSync: description: lastManualSync is set to the last spec.trigger.manual when the manual sync is done. type: string lastSyncDuration: description: lastSyncDuration is the amount of time required to send the most recent update. type: string lastSyncStartTime: description: lastSyncStartTime is the time the most recent synchronization started. format: date-time type: string lastSyncTime: description: lastSyncTime is the time of the most recent successful synchronization. format: date-time type: string nextSyncTime: description: nextSyncTime is the time when the next volume synchronization is scheduled to start (for schedule-based synchronization). format: date-time type: string restic: description: restic contains status information for Restic-based replication. properties: lastPruned: description: lastPruned in the object holding the time of last pruned format: date-time type: string type: object rsync: description: rsync contains status information for Rsync-based replication. properties: address: description: address is the address to connect to for incoming SSH replication connections. type: string port: description: port is the SSH port to connect to for incoming SSH replication connections. format: int32 type: integer sshKeys: description: sshKeys is the name of a Secret that contains the SSH keys to be used for authentication. If not provided in .spec.rsync.sshKeys, SSH keys will be generated and the appropriate keys for the remote side will be placed here. type: string type: object syncthing: description: contains status information when Syncthing-based replication is used. properties: ID: description: Device ID of the current syncthing device type: string address: description: Service address where Syncthing is exposed to the rest of the world type: string peers: description: List of the Syncthing nodes we are currently connected to. items: description: SyncthingPeerStatus Is a struct that contains information pertaining to the status of a given Syncthing peer. properties: ID: description: ID Is the peer's Syncthing ID. type: string address: description: The address of the Syncthing peer. type: string connected: description: Flag indicating whether peer is currently connected. type: boolean introducedBy: description: The ID of the Syncthing peer that this one was introduced by. type: string name: description: A friendly name to associate the given device. type: string required: - ID - address - connected type: object type: array type: object type: object type: object served: true storage: true subresources: status: {}