Documentation ¶
Overview ¶
Package v1alpha1 contains API Schema definitions for the v1alpha1 API group +kubebuilder:object:generate=true +groupName=openebs.io
Index ¶
- Constants
- Variables
- type BlockDevice
- type BlockDeviceClaim
- type BlockDeviceClaimList
- type BlockDeviceList
- type BlockDeviceNodeAttributes
- type BlockDeviceState
- type BlockDeviceVolumeMode
- type DeviceCapacity
- type DeviceClaimDetails
- type DeviceClaimPhase
- type DeviceClaimResources
- type DeviceClaimSpec
- type DeviceClaimState
- type DeviceClaimStatus
- type DeviceDetails
- type DeviceDevLink
- type DeviceSpec
- type DeviceStatus
- type FileSystemInfo
- type NodeAttribute
Constants ¶
const ( // ResourceStorage defines the storage required as v1.Quantity ResourceStorage v1.ResourceName = "storage" )
Variables ¶
var ( // BlockDeviceResourceKind is the kind of block device CRD BlockDeviceResourceKind = "BlockDevice" // BlockDeviceResourceListKind is the list kind for block device BlockDeviceResourceListKind = "BlockDeviceList" // BlockDeviceResourcePlural is the plural form used for block device BlockDeviceResourcePlural = "blockdevices" // BlockDeviceResourceShort is the short name used for block device CRD BlockDeviceResourceShort = "bd" // BlockDeviceResourceName is the name of the block device resource BlockDeviceResourceName = BlockDeviceResourcePlural + "." + GroupVersion.Group // BlockDeviceClaimResourceKind is the kind of block device claim CRD BlockDeviceClaimResourceKind = "BlockDeviceClaim" // BlockDeviceClaimResourceListKind is the list kind for block device claim BlockDeviceClaimResourceListKind = "BlockDeviceClaimList" // BlockDeviceClaimResourcePlural is the plural form used for block device claim BlockDeviceClaimResourcePlural = "blockdeviceclaims" // BlockDeviceClaimResourceShort is the short name used for block device claim CRD BlockDeviceClaimResourceShort = "bdc" // BlockDeviceClaimResourceName is the name of the block device claim resource BlockDeviceClaimResourceName = BlockDeviceClaimResourcePlural + "." + GroupVersion.Group )
var ( // GroupVersion is group version used to register these objects GroupVersion = schema.GroupVersion{Group: "openebs.io", Version: "v1alpha1"} // SchemeBuilder is used to add go types to the GroupVersionKind scheme SchemeBuilder = &scheme.Builder{GroupVersion: GroupVersion} // AddToScheme adds the types in this group-version to the given scheme. AddToScheme = SchemeBuilder.AddToScheme )
Functions ¶
This section is empty.
Types ¶
type BlockDevice ¶
type BlockDevice struct { metav1.TypeMeta `json:",inline"` metav1.ObjectMeta `json:"metadata,omitempty"` Spec DeviceSpec `json:"spec,omitempty"` Status DeviceStatus `json:"status,omitempty"` }
BlockDevice is the Schema for the blockdevices API +kubebuilder:printcolumn:name="NodeName",type="string",JSONPath=`.spec.nodeAttributes.nodeName` +kubebuilder:printcolumn:name="Path",type="string",JSONPath=`.spec.path`,priority=1 +kubebuilder:printcolumn:name="FSType",type="string",JSONPath=`.spec.filesystem.fsType`,priority=1 +kubebuilder:printcolumn:name="Size",type="string",JSONPath=`.spec.capacity.storage` +kubebuilder:printcolumn:name="ClaimState",type="string",JSONPath=`.status.claimState` +kubebuilder:printcolumn:name="Status",type=string,JSONPath=`.status.state` +kubebuilder:printcolumn:name="Age",type="date",JSONPath=`.metadata.creationTimestamp`
func (*BlockDevice) DeepCopy ¶
func (in *BlockDevice) DeepCopy() *BlockDevice
DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new BlockDevice.
func (*BlockDevice) DeepCopyInto ¶
func (in *BlockDevice) DeepCopyInto(out *BlockDevice)
DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
func (*BlockDevice) DeepCopyObject ¶
func (in *BlockDevice) DeepCopyObject() runtime.Object
DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object.
type BlockDeviceClaim ¶
type BlockDeviceClaim struct { metav1.TypeMeta `json:",inline"` metav1.ObjectMeta `json:"metadata,omitempty"` Spec DeviceClaimSpec `json:"spec,omitempty"` Status DeviceClaimStatus `json:"status,omitempty"` }
BlockDeviceClaim is the Schema for the blockdeviceclaims API +kubebuilder:object:root=true +kubebuilder:resource:scope=Namespaced,shortName=bdc +kubebuilder:printcolumn:name="BlockDeviceName",type="string",JSONPath=`.spec.blockDeviceName` +kubebuilder:printcolumn:name="Phase",type="string",JSONPath=`.status.phase` +kubebuilder:printcolumn:name="Age",type="date",JSONPath=`.metadata.creationTimestamp`
func (*BlockDeviceClaim) DeepCopy ¶
func (in *BlockDeviceClaim) DeepCopy() *BlockDeviceClaim
DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new BlockDeviceClaim.
func (*BlockDeviceClaim) DeepCopyInto ¶
func (in *BlockDeviceClaim) DeepCopyInto(out *BlockDeviceClaim)
DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
func (*BlockDeviceClaim) DeepCopyObject ¶
func (in *BlockDeviceClaim) DeepCopyObject() runtime.Object
DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object.
type BlockDeviceClaimList ¶
type BlockDeviceClaimList struct { metav1.TypeMeta `json:",inline"` metav1.ListMeta `json:"metadata,omitempty"` Items []BlockDeviceClaim `json:"items"` }
BlockDeviceClaimList contains a list of BlockDeviceClaim
func (*BlockDeviceClaimList) DeepCopy ¶
func (in *BlockDeviceClaimList) DeepCopy() *BlockDeviceClaimList
DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new BlockDeviceClaimList.
func (*BlockDeviceClaimList) DeepCopyInto ¶
func (in *BlockDeviceClaimList) DeepCopyInto(out *BlockDeviceClaimList)
DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
func (*BlockDeviceClaimList) DeepCopyObject ¶
func (in *BlockDeviceClaimList) DeepCopyObject() runtime.Object
DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object.
type BlockDeviceList ¶
type BlockDeviceList struct { metav1.TypeMeta `json:",inline"` metav1.ListMeta `json:"metadata,omitempty"` Items []BlockDevice `json:"items"` }
BlockDeviceList contains a list of BlockDevice
func (*BlockDeviceList) DeepCopy ¶
func (in *BlockDeviceList) DeepCopy() *BlockDeviceList
DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new BlockDeviceList.
func (*BlockDeviceList) DeepCopyInto ¶
func (in *BlockDeviceList) DeepCopyInto(out *BlockDeviceList)
DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
func (*BlockDeviceList) DeepCopyObject ¶
func (in *BlockDeviceList) DeepCopyObject() runtime.Object
DeepCopyObject is an autogenerated deepcopy function, copying the receiver, creating a new runtime.Object.
type BlockDeviceNodeAttributes ¶
type BlockDeviceNodeAttributes struct { // NodeName represents the name of the Kubernetes node resource // where the BD should be present NodeName string `json:"nodeName,omitempty"` // HostName represents the hostname of the Kubernetes node resource // where the BD should be present HostName string `json:"hostName,omitempty"` }
BlockDeviceNodeAttributes contains the attributes of the node from which the BD should be selected for claiming. A BDC can specify one or more attributes. When multiple values are specified, the NDM Operator will claim a Block Device that matches all the requested attributes.
func (*BlockDeviceNodeAttributes) DeepCopy ¶
func (in *BlockDeviceNodeAttributes) DeepCopy() *BlockDeviceNodeAttributes
DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new BlockDeviceNodeAttributes.
func (*BlockDeviceNodeAttributes) DeepCopyInto ¶
func (in *BlockDeviceNodeAttributes) DeepCopyInto(out *BlockDeviceNodeAttributes)
DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
type BlockDeviceState ¶
type BlockDeviceState string
BlockDeviceState defines the observed state of the disk
const ( // BlockDeviceActive is the state for a block device that is connected to the node BlockDeviceActive BlockDeviceState = "Active" // BlockDeviceInactive is the state for a block device that is disconnected from a node BlockDeviceInactive BlockDeviceState = "Inactive" // BlockDeviceUnknown is the state for a block device whose state (attached/detached) cannot // be determined at this time. BlockDeviceUnknown BlockDeviceState = "Unknown" )
type BlockDeviceVolumeMode ¶
type BlockDeviceVolumeMode string
BlockDeviceVolumeMode specifies the type in which the BlockDevice can be used
const ( // VolumeModeBlock specifies that the block device needs to be used as a raw block VolumeModeBlock BlockDeviceVolumeMode = "Block" // VolumeModeFileSystem specifies that block device will be used with a filesystem // already existing VolumeModeFileSystem BlockDeviceVolumeMode = "FileSystem" )
type DeviceCapacity ¶
type DeviceCapacity struct { // Storage is the blockdevice capacity in bytes Storage uint64 `json:"storage"` // PhysicalSectorSize is blockdevice physical-Sector size in bytes // +optional PhysicalSectorSize uint32 `json:"physicalSectorSize"` // LogicalSectorSize is blockdevice logical-sector size in bytes // +optional LogicalSectorSize uint32 `json:"logicalSectorSize"` }
DeviceCapacity defines the physical and logical size of the block device
func (*DeviceCapacity) DeepCopy ¶
func (in *DeviceCapacity) DeepCopy() *DeviceCapacity
DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new DeviceCapacity.
func (*DeviceCapacity) DeepCopyInto ¶
func (in *DeviceCapacity) DeepCopyInto(out *DeviceCapacity)
DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
type DeviceClaimDetails ¶
type DeviceClaimDetails struct { // BlockVolumeMode represents whether to claim a device in Block mode or Filesystem mode. // These are use cases of BlockVolumeMode: // 1) Not specified: VolumeMode check will not be effective // 2) VolumeModeBlock: BD should not have any filesystem or mountpoint // 3) VolumeModeFileSystem: BD should have a filesystem and mountpoint. If DeviceFormat is // specified then the format should match with the FSType in BD BlockVolumeMode BlockDeviceVolumeMode `json:"blockVolumeMode,omitempty"` //Format of the device required, eg:ext4, xfs DeviceFormat string `json:"formatType,omitempty"` //AllowPartition represents whether to claim a full block device or a device that is a partition AllowPartition bool `json:"allowPartition,omitempty"` }
DeviceClaimDetails defines the details of the block device that should be claimed
func (*DeviceClaimDetails) DeepCopy ¶
func (in *DeviceClaimDetails) DeepCopy() *DeviceClaimDetails
DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new DeviceClaimDetails.
func (*DeviceClaimDetails) DeepCopyInto ¶
func (in *DeviceClaimDetails) DeepCopyInto(out *DeviceClaimDetails)
DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
type DeviceClaimPhase ¶
type DeviceClaimPhase string
DeviceClaimPhase is a typed string for phase field of BlockDeviceClaim.
const ( // BlockDeviceClaimStatusEmpty represents that the BlockDeviceClaim was just created. BlockDeviceClaimStatusEmpty DeviceClaimPhase = "" // BlockDeviceClaimStatusPending represents BlockDeviceClaim has not been assigned devices yet. Rather // search is going on for matching devices. BlockDeviceClaimStatusPending DeviceClaimPhase = "Pending" // BlockDeviceClaimStatusInvalidCapacity represents BlockDeviceClaim has invalid capacity request i.e. 0/-1 // Deprecated BlockDeviceClaimStatusInvalidCapacity DeviceClaimPhase = "Invalid Capacity Request" // BlockDeviceClaimStatusDone represents BlockDeviceClaim has been assigned backing blockdevice and ready for use. BlockDeviceClaimStatusDone DeviceClaimPhase = "Bound" )
BlockDeviceClaim CR, when created pass through phases before it got some Devices Assigned. Given below table, have all phases which BlockDeviceClaim CR can go before it is marked done.
type DeviceClaimResources ¶
type DeviceClaimResources struct { // Requests describes the minimum resources required. eg: if storage resource of 10G is // requested minimum capacity of 10G should be available //TODO for validating Requests v1.ResourceList `json:"requests"` }
DeviceClaimResources defines the request by the claim, eg, Capacity, IOPS
func (*DeviceClaimResources) DeepCopy ¶
func (in *DeviceClaimResources) DeepCopy() *DeviceClaimResources
DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new DeviceClaimResources.
func (*DeviceClaimResources) DeepCopyInto ¶
func (in *DeviceClaimResources) DeepCopyInto(out *DeviceClaimResources)
DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
type DeviceClaimSpec ¶
type DeviceClaimSpec struct { // Selector is used to find block devices to be considered for claiming // +optional Selector *metav1.LabelSelector `json:"selector,omitempty"` // Resources will help with placing claims on Capacity, IOPS // +optional Resources DeviceClaimResources `json:"resources"` // DeviceType represents the type of drive like SSD, HDD etc., // +optional // +nullable DeviceType string `json:"deviceType"` // Node name from where blockdevice has to be claimed. // To be deprecated. Use NodeAttributes.HostName instead // +optional HostName string `json:"hostName"` // Details of the device to be claimed // +optional Details DeviceClaimDetails `json:"deviceClaimDetails,omitempty"` // BlockDeviceName is the reference to the block-device backing this claim // +optional BlockDeviceName string `json:"blockDeviceName,omitempty"` // BlockDeviceNodeAttributes is the attributes on the node from which a BD should // be selected for this claim. It can include nodename, failure domain etc. // +optional BlockDeviceNodeAttributes BlockDeviceNodeAttributes `json:"blockDeviceNodeAttributes,omitempty"` }
DeviceClaimSpec defines the request details for a BlockDevice
func (*DeviceClaimSpec) DeepCopy ¶
func (in *DeviceClaimSpec) DeepCopy() *DeviceClaimSpec
DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new DeviceClaimSpec.
func (*DeviceClaimSpec) DeepCopyInto ¶
func (in *DeviceClaimSpec) DeepCopyInto(out *DeviceClaimSpec)
DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
type DeviceClaimState ¶
type DeviceClaimState string
DeviceClaimState defines the observed state of BlockDevice
const ( // BlockDeviceUnclaimed represents that the block device is not bound to any BDC, // all cleanup jobs have been completed and is available for claiming. BlockDeviceUnclaimed DeviceClaimState = "Unclaimed" // BlockDeviceReleased represents that the block device is released from the BDC, // pending cleanup jobs BlockDeviceReleased DeviceClaimState = "Released" // BlockDeviceClaimed represents that the block device is bound to a BDC BlockDeviceClaimed DeviceClaimState = "Claimed" )
type DeviceClaimStatus ¶
type DeviceClaimStatus struct { // Phase represents the current phase of the claim Phase DeviceClaimPhase `json:"phase"` }
DeviceClaimStatus defines the observed state of BlockDeviceClaim
func (*DeviceClaimStatus) DeepCopy ¶
func (in *DeviceClaimStatus) DeepCopy() *DeviceClaimStatus
DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new DeviceClaimStatus.
func (*DeviceClaimStatus) DeepCopyInto ¶
func (in *DeviceClaimStatus) DeepCopyInto(out *DeviceClaimStatus)
DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
type DeviceDetails ¶
type DeviceDetails struct { // DeviceType represents the type of device like // sparse, disk, partition, lvm, crypt // +kubebuilder:validation:Enum:=disk;partition;sparse;loop;lvm;crypt;dm;mpath // +optional DeviceType string `json:"deviceType"` // DriveType is the type of backing drive, HDD/SSD // +kubebuilder:validation:Enum:=HDD;SSD;Unknown;"" // +optional DriveType string `json:"driveType"` // LogicalBlockSize is the logical block size in bytes // reported by /sys/class/block/sda/queue/logical_block_size // +optional LogicalBlockSize uint32 `json:"logicalBlockSize"` // PhysicalBlockSize is the physical block size in bytes // reported by /sys/class/block/sda/queue/physical_block_size // +optional PhysicalBlockSize uint32 `json:"physicalBlockSize"` // HardwareSectorSize is the hardware sector size in bytes // +optional HardwareSectorSize uint32 `json:"hardwareSectorSize"` // Model is model of disk // +optional Model string `json:"model"` // Compliance is standards/specifications version implemented by device firmware // such as SPC-1, SPC-2, etc // +optional Compliance string `json:"compliance"` // Serial is serial number of disk // +optional Serial string `json:"serial"` // Vendor is vendor of disk // +optional Vendor string `json:"vendor"` // FirmwareRevision is the disk firmware revision // +optional FirmwareRevision string `json:"firmwareRevision"` }
DeviceDetails represent certain hardware/static attributes of the block device
func (*DeviceDetails) DeepCopy ¶
func (in *DeviceDetails) DeepCopy() *DeviceDetails
DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new DeviceDetails.
func (*DeviceDetails) DeepCopyInto ¶
func (in *DeviceDetails) DeepCopyInto(out *DeviceDetails)
DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
type DeviceDevLink ¶
type DeviceDevLink struct { // Kind is the type of link like by-id or by-path. // +kubebuilder:validation:Enum:=by-id;by-path Kind string `json:"kind,omitempty"` // Links are the soft links Links []string `json:"links,omitempty"` }
DeviceDevLink holds the mapping between type and links like by-id type or by-path type link
func (*DeviceDevLink) DeepCopy ¶
func (in *DeviceDevLink) DeepCopy() *DeviceDevLink
DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new DeviceDevLink.
func (*DeviceDevLink) DeepCopyInto ¶
func (in *DeviceDevLink) DeepCopyInto(out *DeviceDevLink)
DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
type DeviceSpec ¶
type DeviceSpec struct { // AggregateDevice was intended to store the hierarchical // information in cases of LVM. However this is currently // not implemented and may need to be re-looked into for // better design. To be deprecated // +optional AggregateDevice string `json:"aggregateDevice,omitempty"` // Capacity Capacity DeviceCapacity `json:"capacity"` // ClaimRef is the reference to the BDC which has claimed this BD // +optional ClaimRef *v1.ObjectReference `json:"claimRef,omitempty"` // Details contain static attributes of BD like model,serial, and so forth // +optional Details DeviceDetails `json:"details"` // DevLinks contains soft links of a block device like // /dev/by-id/... // /dev/by-uuid/... DevLinks []DeviceDevLink `json:"devlinks"` // FileSystem contains mountpoint and filesystem type // +optional FileSystem FileSystemInfo `json:"filesystem,omitempty"` // NodeAttributes has the details of the node on which BD is attached NodeAttributes NodeAttribute `json:"nodeAttributes"` // ParentDevice was intended to store the UUID of the parent // Block Device as is the case for partitioned block devices. // // For example: // /dev/sda is the parent for /dev/sda1 // To be deprecated // +kubebuilder:validation:Pattern:`^/dev/[a-z]{3,4}$` // +optional ParentDevice string `json:"parentDevice,omitempty"` // Partitioned represents if BlockDevice has partitions or not (Yes/No) // Currently always default to No. // To be deprecated // +kubebuilder:validation:Enum:=Yes;No // +optional Partitioned string `json:"partitioned"` // Path contain devpath (e.g. /dev/sdb) // +kubebuilder:validation:Pattern:`^/dev/[a-z]{3,4}$` Path string `json:"path"` }
DeviceSpec defines the properties and runtime status of a BlockDevice
func (*DeviceSpec) DeepCopy ¶
func (in *DeviceSpec) DeepCopy() *DeviceSpec
DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new DeviceSpec.
func (*DeviceSpec) DeepCopyInto ¶
func (in *DeviceSpec) DeepCopyInto(out *DeviceSpec)
DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
type DeviceStatus ¶
type DeviceStatus struct { // ClaimState represents the claim state of the block device // +kubebuilder:validation:Enum:=Claimed;Unclaimed;Released ClaimState DeviceClaimState `json:"claimState"` // State is the current state of the blockdevice (Active/Inactive/Unknown) // +kubebuilder:validation:Enum:=Active;Inactive;Unknown State BlockDeviceState `json:"state"` }
DeviceStatus defines the observed state of BlockDevice
func (*DeviceStatus) DeepCopy ¶
func (in *DeviceStatus) DeepCopy() *DeviceStatus
DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new DeviceStatus.
func (*DeviceStatus) DeepCopyInto ¶
func (in *DeviceStatus) DeepCopyInto(out *DeviceStatus)
DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
type FileSystemInfo ¶
type FileSystemInfo struct { // Type represents the FileSystem type of the block device // +optional Type string `json:"fsType,omitempty"` //MountPoint represents the mountpoint of the block device. // +optional Mountpoint string `json:"mountPoint,omitempty"` }
FileSystemInfo defines the filesystem type and mountpoint of the device if it exists
func (*FileSystemInfo) DeepCopy ¶
func (in *FileSystemInfo) DeepCopy() *FileSystemInfo
DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new FileSystemInfo.
func (*FileSystemInfo) DeepCopyInto ¶
func (in *FileSystemInfo) DeepCopyInto(out *FileSystemInfo)
DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.
type NodeAttribute ¶
type NodeAttribute struct { // NodeName is the name of the Kubernetes node resource on which the device is attached // +optional NodeName string `json:"nodeName"` }
NodeAttribute defines the attributes of a node where the block device is attached.
Note: Prior to introducing NodeAttributes, the BD would only support gathering hostname and add it as a label to the BD resource.
In some use cases, the caller has access only to node name, not the hostname. node name and hostname are different in certain Kubernetes clusters.
NodeAttributes is added to contain attributes that are not available on the labels like - node name, uuid, etc.
The node attributes are helpful in querying for block devices based on node attributes. Also, adding this in the spec allows for displaying in node name in the `kubectl get bd`
Capture and add nodeUUID to BD, that can help in determining if the node was recreated with same node name.
func (*NodeAttribute) DeepCopy ¶
func (in *NodeAttribute) DeepCopy() *NodeAttribute
DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new NodeAttribute.
func (*NodeAttribute) DeepCopyInto ¶
func (in *NodeAttribute) DeepCopyInto(out *NodeAttribute)
DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil.