From 8236b7089f8a64b0f38c408e3c22cf43b470654f Mon Sep 17 00:00:00 2001 From: Rohith Date: Tue, 2 Oct 2018 17:38:34 +0100 Subject: [PATCH] - adding the api components to define a additional volume spec --- pkg/apis/kops/instancegroup.go | 37 +++++- pkg/apis/kops/v1alpha1/instancegroup.go | 45 ++++++- .../kops/v1alpha1/zz_generated.deepcopy.go | 123 ++++++++++++++++++ pkg/apis/kops/v1alpha2/instancegroup.go | 38 +++++- .../kops/v1alpha2/zz_generated.deepcopy.go | 123 ++++++++++++++++++ pkg/apis/kops/zz_generated.deepcopy.go | 123 ++++++++++++++++++ 6 files changed, 483 insertions(+), 6 deletions(-) diff --git a/pkg/apis/kops/instancegroup.go b/pkg/apis/kops/instancegroup.go index 322726f8e5..2ea6861b61 100644 --- a/pkg/apis/kops/instancegroup.go +++ b/pkg/apis/kops/instancegroup.go @@ -44,6 +44,7 @@ type InstanceGroup struct { // +k8s:deepcopy-gen:interfaces=k8s.io/apimachinery/pkg/runtime.Object +// InstanceGroupList is a collection in instancegroups type InstanceGroupList struct { metav1.TypeMeta `json:",inline"` metav1.ListMeta `json:"metadata,omitempty"` @@ -55,8 +56,11 @@ type InstanceGroupList struct { type InstanceGroupRole string const ( - InstanceGroupRoleMaster InstanceGroupRole = "Master" - InstanceGroupRoleNode InstanceGroupRole = "Node" + // InstanceGroupRoleMaster defines the node as a master + InstanceGroupRoleMaster InstanceGroupRole = "Master" + // InstanceGroupRoleNode defines the node as a worker + InstanceGroupRoleNode InstanceGroupRole = "Node" + // InstanceGroupRoleBastion defines the node as a bastion host InstanceGroupRoleBastion InstanceGroupRole = "Bastion" ) @@ -87,6 +91,8 @@ type InstanceGroupSpec struct { RootVolumeIops *int32 `json:"rootVolumeIops,omitempty"` // RootVolumeOptimization enables EBS optimization for an instance RootVolumeOptimization *bool `json:"rootVolumeOptimization,omitempty"` + // Volumes is a collection of additional volumes to create for instances within this InstanceGroup + Volumes []*InstanceGroupVolumeSpec `json:"volumes,omitempty"` // Subnets is the names of the Subnets (as specified in the Cluster) where machines in this instance group should be placed Subnets []string `json:"subnets,omitempty"` // Zones is the names of the Zones where machines in this instance group should be placed @@ -137,6 +143,33 @@ type UserData struct { Content string `json:"content,omitempty"` } +// InstanceGroupVolumeSpec defined the spec for an additional volume attached to the instance group +type InstanceGroupVolumeSpec struct { + // DeviceName is an optional device name of the block device + DeviceName *string `json:"deviceName,omitempty"` + // Encrypted indicates you want to encrypt the volume + Encrypted *bool `json:"encrypted,omitempty"` + // Filesystem is the type of filesystem to create on the device + Filesystem *InstanceGroupVolumeFilesystemSpec `json:"filesystem,omitempty"` + // Iops is the provision iops for this iops (think io1 in aws) + Iops *int64 `json:"iops,omitempty"` + // Size is the size of the volume in GB + Size *int64 `json:"size,omitempty"` + // Type is the type of volume to create and is cloud specific + Type *string `json:"type,omitempty"` +} + +// InstanceGroupVolumeFilesystemSpec defines a specification for creating a filesystem +type InstanceGroupVolumeFilesystemSpec struct { + // Ext4 is the specification for a ext4 filesystem + Ext4 *Ext4FileSystemSpec `json:"ext4,omitempty"` + // Path is the location to mount the volume + Path string `json:"mountPath,omitempty"` +} + +// Ext4FileSystemSpec defines a specification for a ext4 filesystem on a instancegroup volume +type Ext4FileSystemSpec struct{} + // IAMProfileSpec is the AWS IAM Profile to attach to instances in this instance // group. Specify the ARN for the IAM instance profile (AWS only). type IAMProfileSpec struct { diff --git a/pkg/apis/kops/v1alpha1/instancegroup.go b/pkg/apis/kops/v1alpha1/instancegroup.go index a8cf11014a..1e1f15885d 100644 --- a/pkg/apis/kops/v1alpha1/instancegroup.go +++ b/pkg/apis/kops/v1alpha1/instancegroup.go @@ -33,6 +33,7 @@ type InstanceGroup struct { // +k8s:deepcopy-gen:interfaces=k8s.io/apimachinery/pkg/runtime.Object +// InstanceGroupList is a collection in instancegroups type InstanceGroupList struct { metav1.TypeMeta `json:",inline"` metav1.ListMeta `json:"metadata,omitempty"` @@ -44,10 +45,21 @@ type InstanceGroupList struct { type InstanceGroupRole string const ( + // InstanceGroupRoleMaster defines the node as a master InstanceGroupRoleMaster InstanceGroupRole = "Master" - InstanceGroupRoleNode InstanceGroupRole = "Node" + // InstanceGroupRoleNode defines the node as a worker + InstanceGroupRoleNode InstanceGroupRole = "Node" + // InstanceGroupRoleBastion defines the node as a bastion host + InstanceGroupRoleBastion InstanceGroupRole = "Bastion" ) +// AllInstanceGroupRoles is a slice of all valid InstanceGroupRole values +var AllInstanceGroupRoles = []InstanceGroupRole{ + InstanceGroupRoleNode, + InstanceGroupRoleMaster, + InstanceGroupRoleBastion, +} + // InstanceGroupSpec is the specification for a instanceGroup type InstanceGroupSpec struct { // Type determines the role of instances in this group: masters or nodes @@ -68,6 +80,8 @@ type InstanceGroupSpec struct { RootVolumeIops *int32 `json:"rootVolumeIops,omitempty"` // RootVolumeOptimization enables EBS optimization for an instance RootVolumeOptimization *bool `json:"rootVolumeOptimization,omitempty"` + // Volumes is a collection of additional volumes to create for instances within this InstanceGroup + Volumes []*InstanceGroupVolumeSpec `json:"volumes,omitempty"` // Hooks is a list of hooks for this instanceGroup, note: these can override the cluster wide ones if required Hooks []HookSpec `json:"hooks,omitempty"` // MaxPrice indicates this is a spot-pricing group, with the specified value as our max-price bid @@ -124,7 +138,34 @@ type UserData struct { Content string `json:"content,omitempty"` } -// LoadBalancers defines a load balancer +// InstanceGroupVolumeSpec defined the spec for an additional volume attached to the instance group +type InstanceGroupVolumeSpec struct { + // DeviceName is an optional device name of the block device + DeviceName *string `json:"deviceName,omitempty"` + // Encrypted indicates you want to encrypt the volume + Encrypted *bool `json:"encrypted,omitempty"` + // Filesystem is the type of filesystem to create on the device + Filesystem *InstanceGroupVolumeFilesystemSpec `json:"filesystem,omitempty"` + // Iops is the provision iops for this iops (think io1 in aws) + Iops *int32 `json:"iops,omitempty"` + // Size is the size of the volume in GB + Size *int32 `json:"size,omitempty"` + // Type is the type of volume to create and is cloud specific + Type *string `json:"type,omitempty"` +} + +// InstanceGroupVolumeFilesystemSpec defines a specification for creating a filesystem +type InstanceGroupVolumeFilesystemSpec struct { + // Ext4 is the specification for a ext4 filesystem + Ext4 *Ext4FileSystemSpec `json:"ext4,omitempty"` + // Path is the location to mount the volume + Path string `json:"mountPath,omitempty"` +} + +// Ext4FileSystemSpec defines a specification for a ext4 filesystem on a instancegroup volume +type Ext4FileSystemSpec struct{} + +// LoadBalancer defines a load balancer type LoadBalancer struct { // LoadBalancerName to associate with this instance group (AWS ELB) LoadBalancerName *string `json:"loadBalancerName,omitempty"` diff --git a/pkg/apis/kops/v1alpha1/zz_generated.deepcopy.go b/pkg/apis/kops/v1alpha1/zz_generated.deepcopy.go index 2ce5734065..71d82b1797 100644 --- a/pkg/apis/kops/v1alpha1/zz_generated.deepcopy.go +++ b/pkg/apis/kops/v1alpha1/zz_generated.deepcopy.go @@ -1110,6 +1110,22 @@ func (in *ExecContainerAction) DeepCopy() *ExecContainerAction { return out } +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *Ext4FileSystemSpec) DeepCopyInto(out *Ext4FileSystemSpec) { + *out = *in + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new Ext4FileSystemSpec. +func (in *Ext4FileSystemSpec) DeepCopy() *Ext4FileSystemSpec { + if in == nil { + return nil + } + out := new(Ext4FileSystemSpec) + in.DeepCopyInto(out) + return out +} + // DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. func (in *ExternalDNSConfig) DeepCopyInto(out *ExternalDNSConfig) { *out = *in @@ -1366,6 +1382,18 @@ func (in *InstanceGroupSpec) DeepCopyInto(out *InstanceGroupSpec) { *out = new(bool) **out = **in } + if in.Volumes != nil { + in, out := &in.Volumes, &out.Volumes + *out = make([]*InstanceGroupVolumeSpec, len(*in)) + for i := range *in { + if (*in)[i] == nil { + (*out)[i] = nil + } else { + (*out)[i] = new(InstanceGroupVolumeSpec) + (*in)[i].DeepCopyInto((*out)[i]) + } + } + } if in.Hooks != nil { in, out := &in.Hooks, &out.Hooks *out = make([]HookSpec, len(*in)) @@ -1469,6 +1497,101 @@ func (in *InstanceGroupSpec) DeepCopy() *InstanceGroupSpec { return out } +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *InstanceGroupVolumeFilesystemSpec) DeepCopyInto(out *InstanceGroupVolumeFilesystemSpec) { + *out = *in + if in.Ext4 != nil { + in, out := &in.Ext4, &out.Ext4 + if *in == nil { + *out = nil + } else { + *out = new(Ext4FileSystemSpec) + **out = **in + } + } + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new InstanceGroupVolumeFilesystemSpec. +func (in *InstanceGroupVolumeFilesystemSpec) DeepCopy() *InstanceGroupVolumeFilesystemSpec { + if in == nil { + return nil + } + out := new(InstanceGroupVolumeFilesystemSpec) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *InstanceGroupVolumeSpec) DeepCopyInto(out *InstanceGroupVolumeSpec) { + *out = *in + if in.DeviceName != nil { + in, out := &in.DeviceName, &out.DeviceName + if *in == nil { + *out = nil + } else { + *out = new(string) + **out = **in + } + } + if in.Encrypted != nil { + in, out := &in.Encrypted, &out.Encrypted + if *in == nil { + *out = nil + } else { + *out = new(bool) + **out = **in + } + } + if in.Filesystem != nil { + in, out := &in.Filesystem, &out.Filesystem + if *in == nil { + *out = nil + } else { + *out = new(InstanceGroupVolumeFilesystemSpec) + (*in).DeepCopyInto(*out) + } + } + if in.Iops != nil { + in, out := &in.Iops, &out.Iops + if *in == nil { + *out = nil + } else { + *out = new(int32) + **out = **in + } + } + if in.Size != nil { + in, out := &in.Size, &out.Size + if *in == nil { + *out = nil + } else { + *out = new(int32) + **out = **in + } + } + if in.Type != nil { + in, out := &in.Type, &out.Type + if *in == nil { + *out = nil + } else { + *out = new(string) + **out = **in + } + } + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new InstanceGroupVolumeSpec. +func (in *InstanceGroupVolumeSpec) DeepCopy() *InstanceGroupVolumeSpec { + if in == nil { + return nil + } + out := new(InstanceGroupVolumeSpec) + in.DeepCopyInto(out) + return out +} + // DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. func (in *KopeioAuthenticationSpec) DeepCopyInto(out *KopeioAuthenticationSpec) { *out = *in diff --git a/pkg/apis/kops/v1alpha2/instancegroup.go b/pkg/apis/kops/v1alpha2/instancegroup.go index c98188ba8f..b3b5e2e7da 100644 --- a/pkg/apis/kops/v1alpha2/instancegroup.go +++ b/pkg/apis/kops/v1alpha2/instancegroup.go @@ -33,6 +33,7 @@ type InstanceGroup struct { // +k8s:deepcopy-gen:interfaces=k8s.io/apimachinery/pkg/runtime.Object +// InstanceGroupList is a collection of instancegroups type InstanceGroupList struct { metav1.TypeMeta `json:",inline"` metav1.ListMeta `json:"metadata,omitempty"` @@ -44,11 +45,15 @@ type InstanceGroupList struct { type InstanceGroupRole string const ( - InstanceGroupRoleMaster InstanceGroupRole = "Master" - InstanceGroupRoleNode InstanceGroupRole = "Node" + // InstanceGroupRoleMaster defines the node as a master + InstanceGroupRoleMaster InstanceGroupRole = "Master" + // InstanceGroupRoleNode defines the node as a worker + InstanceGroupRoleNode InstanceGroupRole = "Node" + // InstanceGroupRoleBastion defines the node as a bastion host InstanceGroupRoleBastion InstanceGroupRole = "Bastion" ) +// AllInstanceGroupRoles is a slice of all valid InstanceGroupRole values var AllInstanceGroupRoles = []InstanceGroupRole{ InstanceGroupRoleNode, InstanceGroupRoleMaster, @@ -75,6 +80,8 @@ type InstanceGroupSpec struct { RootVolumeIops *int32 `json:"rootVolumeIops,omitempty"` // RootVolumeOptimization enables EBS optimization for an instance RootVolumeOptimization *bool `json:"rootVolumeOptimization,omitempty"` + // Volumes is a collection of additional volumes to create for instances within this InstanceGroup + Volumes []*InstanceGroupVolumeSpec `json:"volumes,omitempty"` // Subnets is the names of the Subnets (as specified in the Cluster) where machines in this instance group should be placed Subnets []string `json:"subnets,omitempty"` // Zones is the names of the Zones where machines in this instance group should be placed @@ -125,6 +132,33 @@ type UserData struct { Content string `json:"content,omitempty"` } +// InstanceGroupVolumeSpec defined the spec for an additional volume attached to the instance group +type InstanceGroupVolumeSpec struct { + // DeviceName is an optional device name of the block device + DeviceName *string `json:"deviceName,omitempty"` + // Encrypted indicates you want to encrypt the volume + Encrypted *bool `json:"encrypted,omitempty"` + // Filesystem is the type of filesystem to create on the device + Filesystem *InstanceGroupVolumeFilesystemSpec `json:"filesystem,omitempty"` + // Iops is the provision iops for this iops (think io1 in aws) + Iops *int64 `json:"iops,omitempty"` + // Size is the size of the volume in GB + Size *int64 `json:"size,omitempty"` + // Type is the type of volume to create and is cloud specific + Type *string `json:"type,omitempty"` +} + +// InstanceGroupVolumeFilesystemSpec defines a specification for creating a filesystem +type InstanceGroupVolumeFilesystemSpec struct { + // Ext4 is the specification for a ext4 filesystem + Ext4 *Ext4FileSystemSpec `json:"ext4,omitempty"` + // Path is the location to mount the volume + Path string `json:"mountPath,omitempty"` +} + +// Ext4FileSystemSpec defines a specification for a ext4 filesystem on a instancegroup volume +type Ext4FileSystemSpec struct{} + // IAMProfileSpec is the AWS IAM Profile to attach to instances in this instance // group. Specify the ARN for the IAM instance profile (AWS only). type IAMProfileSpec struct { diff --git a/pkg/apis/kops/v1alpha2/zz_generated.deepcopy.go b/pkg/apis/kops/v1alpha2/zz_generated.deepcopy.go index 01abb7b76f..915530a92e 100644 --- a/pkg/apis/kops/v1alpha2/zz_generated.deepcopy.go +++ b/pkg/apis/kops/v1alpha2/zz_generated.deepcopy.go @@ -1083,6 +1083,22 @@ func (in *ExecContainerAction) DeepCopy() *ExecContainerAction { return out } +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *Ext4FileSystemSpec) DeepCopyInto(out *Ext4FileSystemSpec) { + *out = *in + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new Ext4FileSystemSpec. +func (in *Ext4FileSystemSpec) DeepCopy() *Ext4FileSystemSpec { + if in == nil { + return nil + } + out := new(Ext4FileSystemSpec) + in.DeepCopyInto(out) + return out +} + // DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. func (in *ExternalDNSConfig) DeepCopyInto(out *ExternalDNSConfig) { *out = *in @@ -1339,6 +1355,18 @@ func (in *InstanceGroupSpec) DeepCopyInto(out *InstanceGroupSpec) { *out = new(bool) **out = **in } + if in.Volumes != nil { + in, out := &in.Volumes, &out.Volumes + *out = make([]*InstanceGroupVolumeSpec, len(*in)) + for i := range *in { + if (*in)[i] == nil { + (*out)[i] = nil + } else { + (*out)[i] = new(InstanceGroupVolumeSpec) + (*in)[i].DeepCopyInto((*out)[i]) + } + } + } if in.Subnets != nil { in, out := &in.Subnets, &out.Subnets *out = make([]string, len(*in)) @@ -1447,6 +1475,101 @@ func (in *InstanceGroupSpec) DeepCopy() *InstanceGroupSpec { return out } +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *InstanceGroupVolumeFilesystemSpec) DeepCopyInto(out *InstanceGroupVolumeFilesystemSpec) { + *out = *in + if in.Ext4 != nil { + in, out := &in.Ext4, &out.Ext4 + if *in == nil { + *out = nil + } else { + *out = new(Ext4FileSystemSpec) + **out = **in + } + } + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new InstanceGroupVolumeFilesystemSpec. +func (in *InstanceGroupVolumeFilesystemSpec) DeepCopy() *InstanceGroupVolumeFilesystemSpec { + if in == nil { + return nil + } + out := new(InstanceGroupVolumeFilesystemSpec) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *InstanceGroupVolumeSpec) DeepCopyInto(out *InstanceGroupVolumeSpec) { + *out = *in + if in.DeviceName != nil { + in, out := &in.DeviceName, &out.DeviceName + if *in == nil { + *out = nil + } else { + *out = new(string) + **out = **in + } + } + if in.Encrypted != nil { + in, out := &in.Encrypted, &out.Encrypted + if *in == nil { + *out = nil + } else { + *out = new(bool) + **out = **in + } + } + if in.Filesystem != nil { + in, out := &in.Filesystem, &out.Filesystem + if *in == nil { + *out = nil + } else { + *out = new(InstanceGroupVolumeFilesystemSpec) + (*in).DeepCopyInto(*out) + } + } + if in.Iops != nil { + in, out := &in.Iops, &out.Iops + if *in == nil { + *out = nil + } else { + *out = new(int64) + **out = **in + } + } + if in.Size != nil { + in, out := &in.Size, &out.Size + if *in == nil { + *out = nil + } else { + *out = new(int64) + **out = **in + } + } + if in.Type != nil { + in, out := &in.Type, &out.Type + if *in == nil { + *out = nil + } else { + *out = new(string) + **out = **in + } + } + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new InstanceGroupVolumeSpec. +func (in *InstanceGroupVolumeSpec) DeepCopy() *InstanceGroupVolumeSpec { + if in == nil { + return nil + } + out := new(InstanceGroupVolumeSpec) + in.DeepCopyInto(out) + return out +} + // DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. func (in *Keyset) DeepCopyInto(out *Keyset) { *out = *in diff --git a/pkg/apis/kops/zz_generated.deepcopy.go b/pkg/apis/kops/zz_generated.deepcopy.go index e5c7385a94..c10b4ab9b1 100644 --- a/pkg/apis/kops/zz_generated.deepcopy.go +++ b/pkg/apis/kops/zz_generated.deepcopy.go @@ -1249,6 +1249,22 @@ func (in *ExecContainerAction) DeepCopy() *ExecContainerAction { return out } +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *Ext4FileSystemSpec) DeepCopyInto(out *Ext4FileSystemSpec) { + *out = *in + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new Ext4FileSystemSpec. +func (in *Ext4FileSystemSpec) DeepCopy() *Ext4FileSystemSpec { + if in == nil { + return nil + } + out := new(Ext4FileSystemSpec) + in.DeepCopyInto(out) + return out +} + // DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. func (in *ExternalDNSConfig) DeepCopyInto(out *ExternalDNSConfig) { *out = *in @@ -1505,6 +1521,18 @@ func (in *InstanceGroupSpec) DeepCopyInto(out *InstanceGroupSpec) { *out = new(bool) **out = **in } + if in.Volumes != nil { + in, out := &in.Volumes, &out.Volumes + *out = make([]*InstanceGroupVolumeSpec, len(*in)) + for i := range *in { + if (*in)[i] == nil { + (*out)[i] = nil + } else { + (*out)[i] = new(InstanceGroupVolumeSpec) + (*in)[i].DeepCopyInto((*out)[i]) + } + } + } if in.Subnets != nil { in, out := &in.Subnets, &out.Subnets *out = make([]string, len(*in)) @@ -1613,6 +1641,101 @@ func (in *InstanceGroupSpec) DeepCopy() *InstanceGroupSpec { return out } +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *InstanceGroupVolumeFilesystemSpec) DeepCopyInto(out *InstanceGroupVolumeFilesystemSpec) { + *out = *in + if in.Ext4 != nil { + in, out := &in.Ext4, &out.Ext4 + if *in == nil { + *out = nil + } else { + *out = new(Ext4FileSystemSpec) + **out = **in + } + } + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new InstanceGroupVolumeFilesystemSpec. +func (in *InstanceGroupVolumeFilesystemSpec) DeepCopy() *InstanceGroupVolumeFilesystemSpec { + if in == nil { + return nil + } + out := new(InstanceGroupVolumeFilesystemSpec) + in.DeepCopyInto(out) + return out +} + +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *InstanceGroupVolumeSpec) DeepCopyInto(out *InstanceGroupVolumeSpec) { + *out = *in + if in.DeviceName != nil { + in, out := &in.DeviceName, &out.DeviceName + if *in == nil { + *out = nil + } else { + *out = new(string) + **out = **in + } + } + if in.Encrypted != nil { + in, out := &in.Encrypted, &out.Encrypted + if *in == nil { + *out = nil + } else { + *out = new(bool) + **out = **in + } + } + if in.Filesystem != nil { + in, out := &in.Filesystem, &out.Filesystem + if *in == nil { + *out = nil + } else { + *out = new(InstanceGroupVolumeFilesystemSpec) + (*in).DeepCopyInto(*out) + } + } + if in.Iops != nil { + in, out := &in.Iops, &out.Iops + if *in == nil { + *out = nil + } else { + *out = new(int64) + **out = **in + } + } + if in.Size != nil { + in, out := &in.Size, &out.Size + if *in == nil { + *out = nil + } else { + *out = new(int64) + **out = **in + } + } + if in.Type != nil { + in, out := &in.Type, &out.Type + if *in == nil { + *out = nil + } else { + *out = new(string) + **out = **in + } + } + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new InstanceGroupVolumeSpec. +func (in *InstanceGroupVolumeSpec) DeepCopy() *InstanceGroupVolumeSpec { + if in == nil { + return nil + } + out := new(InstanceGroupVolumeSpec) + in.DeepCopyInto(out) + return out +} + // DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. func (in *Keyset) DeepCopyInto(out *Keyset) { *out = *in