diff --git a/nodeup/pkg/model/cloudconfig.go b/nodeup/pkg/model/cloudconfig.go index d7e52e2794..225b30af2f 100644 --- a/nodeup/pkg/model/cloudconfig.go +++ b/nodeup/pkg/model/cloudconfig.go @@ -119,7 +119,7 @@ func (b *CloudConfigBuilder) build(c *fi.ModelBuilderContext, inTree bool) error } } case "openstack": - osc := cloudConfig.Openstack + osc := b.Cluster.Spec.CloudProvider.Openstack if osc == nil { break } diff --git a/pkg/apis/kops/cluster.go b/pkg/apis/kops/cluster.go index 8e0c94a9d6..58bf0cbed4 100644 --- a/pkg/apis/kops/cluster.go +++ b/pkg/apis/kops/cluster.go @@ -252,10 +252,6 @@ type DOSpec struct { type GCESpec struct { } -// OpenstackSpec configures the Openstack cloud provider. -type OpenstackSpec struct { -} - type KarpenterConfig struct { Enabled bool `json:"enabled,omitempty"` } diff --git a/pkg/apis/kops/componentconfig.go b/pkg/apis/kops/componentconfig.go index 5543c9922b..d524696761 100644 --- a/pkg/apis/kops/componentconfig.go +++ b/pkg/apis/kops/componentconfig.go @@ -812,8 +812,8 @@ type OpenstackMetadata struct { ConfigDrive *bool `json:"configDrive,omitempty"` } -// OpenstackConfiguration defines cloud config elements for the openstack cloud provider -type OpenstackConfiguration struct { +// OpenstackSpec defines cloud config elements for the openstack cloud provider +type OpenstackSpec struct { Loadbalancer *OpenstackLoadbalancerConfig `json:"loadbalancer,omitempty"` Monitor *OpenstackMonitor `json:"monitor,omitempty"` Router *OpenstackRouter `json:"router,omitempty"` @@ -865,8 +865,6 @@ type CloudConfiguration struct { // Spotinst cloud-config specs SpotinstProduct *string `json:"spotinstProduct,omitempty"` SpotinstOrientation *string `json:"spotinstOrientation,omitempty"` - // Openstack cloud-config options - Openstack *OpenstackConfiguration `json:"openstack,omitempty"` // AWSEBSCSIDriver is the config for the AWS EBS CSI driver AWSEBSCSIDriver *AWSEBSCSIDriver `json:"awsEBSCSIDriver,omitempty"` // GCPPDCSIDriver is the config for the GCP PD CSI driver diff --git a/pkg/apis/kops/v1alpha2/componentconfig.go b/pkg/apis/kops/v1alpha2/componentconfig.go index ea176c992b..f0e1d8eb32 100644 --- a/pkg/apis/kops/v1alpha2/componentconfig.go +++ b/pkg/apis/kops/v1alpha2/componentconfig.go @@ -811,8 +811,8 @@ type OpenstackMetadata struct { ConfigDrive *bool `json:"configDrive,omitempty"` } -// OpenstackConfiguration defines cloud config elements for the openstack cloud provider -type OpenstackConfiguration struct { +// OpenstackSpec defines cloud config elements for the openstack cloud provider +type OpenstackSpec struct { Loadbalancer *OpenstackLoadbalancerConfig `json:"loadbalancer,omitempty"` Monitor *OpenstackMonitor `json:"monitor,omitempty"` Router *OpenstackRouter `json:"router,omitempty"` @@ -886,7 +886,8 @@ type CloudConfiguration struct { SpotinstProduct *string `json:"spotinstProduct,omitempty"` SpotinstOrientation *string `json:"spotinstOrientation,omitempty"` // Openstack cloud-config options - Openstack *OpenstackConfiguration `json:"openstack,omitempty"` + // +k8s:conversion-gen=false + Openstack *OpenstackSpec `json:"openstack,omitempty"` // Azure cloud-config options // +k8s:conversion-gen=false Azure *AzureSpec `json:"azure,omitempty"` diff --git a/pkg/apis/kops/v1alpha2/conversion.go b/pkg/apis/kops/v1alpha2/conversion.go index 7a05e7d7a0..0f5a52ba7c 100644 --- a/pkg/apis/kops/v1alpha2/conversion.go +++ b/pkg/apis/kops/v1alpha2/conversion.go @@ -91,6 +91,11 @@ func Convert_v1alpha2_ClusterSpec_To_kops_ClusterSpec(in *ClusterSpec, out *kops out.CloudProvider.GCE = &kops.GCESpec{} case kops.CloudProviderOpenstack: out.CloudProvider.Openstack = &kops.OpenstackSpec{} + if in.CloudConfig != nil && in.CloudConfig.Openstack != nil { + if err := autoConvert_v1alpha2_OpenstackSpec_To_kops_OpenstackSpec(in.CloudConfig.Openstack, out.CloudProvider.Openstack, s); err != nil { + return err + } + } case "": default: return field.NotSupported(field.NewPath("spec").Child("cloudProvider"), in.LegacyCloudProvider, []string{ @@ -128,6 +133,16 @@ func Convert_kops_ClusterSpec_To_v1alpha2_ClusterSpec(in *kops.ClusterSpec, out if err := autoConvert_kops_AzureSpec_To_v1alpha2_AzureSpec(in.CloudProvider.Azure, out.CloudConfig.Azure, s); err != nil { return err } + case kops.CloudProviderOpenstack: + if out.CloudConfig == nil { + out.CloudConfig = &CloudConfiguration{} + } + if out.CloudConfig.Openstack == nil { + out.CloudConfig.Openstack = &OpenstackSpec{} + } + if err := autoConvert_kops_OpenstackSpec_To_v1alpha2_OpenstackSpec(in.CloudProvider.Openstack, out.CloudConfig.Openstack, s); err != nil { + return err + } } if in.TagSubnets != nil { out.TagSubnets = values.Bool(!*in.TagSubnets) diff --git a/pkg/apis/kops/v1alpha2/zz_generated.conversion.go b/pkg/apis/kops/v1alpha2/zz_generated.conversion.go index db2df2f6ac..d2964cd066 100644 --- a/pkg/apis/kops/v1alpha2/zz_generated.conversion.go +++ b/pkg/apis/kops/v1alpha2/zz_generated.conversion.go @@ -914,16 +914,6 @@ func RegisterConversions(s *runtime.Scheme) error { }); err != nil { return err } - if err := s.AddGeneratedConversionFunc((*OpenstackConfiguration)(nil), (*kops.OpenstackConfiguration)(nil), func(a, b interface{}, scope conversion.Scope) error { - return Convert_v1alpha2_OpenstackConfiguration_To_kops_OpenstackConfiguration(a.(*OpenstackConfiguration), b.(*kops.OpenstackConfiguration), scope) - }); err != nil { - return err - } - if err := s.AddGeneratedConversionFunc((*kops.OpenstackConfiguration)(nil), (*OpenstackConfiguration)(nil), func(a, b interface{}, scope conversion.Scope) error { - return Convert_kops_OpenstackConfiguration_To_v1alpha2_OpenstackConfiguration(a.(*kops.OpenstackConfiguration), b.(*OpenstackConfiguration), scope) - }); err != nil { - return err - } if err := s.AddGeneratedConversionFunc((*OpenstackLoadbalancerConfig)(nil), (*kops.OpenstackLoadbalancerConfig)(nil), func(a, b interface{}, scope conversion.Scope) error { return Convert_v1alpha2_OpenstackLoadbalancerConfig_To_kops_OpenstackLoadbalancerConfig(a.(*OpenstackLoadbalancerConfig), b.(*kops.OpenstackLoadbalancerConfig), scope) }); err != nil { @@ -974,6 +964,16 @@ func RegisterConversions(s *runtime.Scheme) error { }); err != nil { return err } + if err := s.AddGeneratedConversionFunc((*OpenstackSpec)(nil), (*kops.OpenstackSpec)(nil), func(a, b interface{}, scope conversion.Scope) error { + return Convert_v1alpha2_OpenstackSpec_To_kops_OpenstackSpec(a.(*OpenstackSpec), b.(*kops.OpenstackSpec), scope) + }); err != nil { + return err + } + if err := s.AddGeneratedConversionFunc((*kops.OpenstackSpec)(nil), (*OpenstackSpec)(nil), func(a, b interface{}, scope conversion.Scope) error { + return Convert_kops_OpenstackSpec_To_v1alpha2_OpenstackSpec(a.(*kops.OpenstackSpec), b.(*OpenstackSpec), scope) + }); err != nil { + return err + } if err := s.AddGeneratedConversionFunc((*PackagesConfig)(nil), (*kops.PackagesConfig)(nil), func(a, b interface{}, scope conversion.Scope) error { return Convert_v1alpha2_PackagesConfig_To_kops_PackagesConfig(a.(*PackagesConfig), b.(*kops.PackagesConfig), scope) }); err != nil { @@ -2101,15 +2101,7 @@ func autoConvert_v1alpha2_CloudConfiguration_To_kops_CloudConfiguration(in *Clou // INFO: in.VSphereCoreDNSServer opted out of conversion generation out.SpotinstProduct = in.SpotinstProduct out.SpotinstOrientation = in.SpotinstOrientation - if in.Openstack != nil { - in, out := &in.Openstack, &out.Openstack - *out = new(kops.OpenstackConfiguration) - if err := Convert_v1alpha2_OpenstackConfiguration_To_kops_OpenstackConfiguration(*in, *out, s); err != nil { - return err - } - } else { - out.Openstack = nil - } + // INFO: in.Openstack opted out of conversion generation // INFO: in.Azure opted out of conversion generation if in.AWSEBSCSIDriver != nil { in, out := &in.AWSEBSCSIDriver, &out.AWSEBSCSIDriver @@ -2148,15 +2140,6 @@ func autoConvert_kops_CloudConfiguration_To_v1alpha2_CloudConfiguration(in *kops out.ElbSecurityGroup = in.ElbSecurityGroup out.SpotinstProduct = in.SpotinstProduct out.SpotinstOrientation = in.SpotinstOrientation - if in.Openstack != nil { - in, out := &in.Openstack, &out.Openstack - *out = new(OpenstackConfiguration) - if err := Convert_kops_OpenstackConfiguration_To_v1alpha2_OpenstackConfiguration(*in, *out, s); err != nil { - return err - } - } else { - out.Openstack = nil - } if in.AWSEBSCSIDriver != nil { in, out := &in.AWSEBSCSIDriver, &out.AWSEBSCSIDriver *out = new(AWSEBSCSIDriver) @@ -6475,134 +6458,6 @@ func Convert_kops_OpenstackBlockStorageConfig_To_v1alpha2_OpenstackBlockStorageC return autoConvert_kops_OpenstackBlockStorageConfig_To_v1alpha2_OpenstackBlockStorageConfig(in, out, s) } -func autoConvert_v1alpha2_OpenstackConfiguration_To_kops_OpenstackConfiguration(in *OpenstackConfiguration, out *kops.OpenstackConfiguration, s conversion.Scope) error { - if in.Loadbalancer != nil { - in, out := &in.Loadbalancer, &out.Loadbalancer - *out = new(kops.OpenstackLoadbalancerConfig) - if err := Convert_v1alpha2_OpenstackLoadbalancerConfig_To_kops_OpenstackLoadbalancerConfig(*in, *out, s); err != nil { - return err - } - } else { - out.Loadbalancer = nil - } - if in.Monitor != nil { - in, out := &in.Monitor, &out.Monitor - *out = new(kops.OpenstackMonitor) - if err := Convert_v1alpha2_OpenstackMonitor_To_kops_OpenstackMonitor(*in, *out, s); err != nil { - return err - } - } else { - out.Monitor = nil - } - if in.Router != nil { - in, out := &in.Router, &out.Router - *out = new(kops.OpenstackRouter) - if err := Convert_v1alpha2_OpenstackRouter_To_kops_OpenstackRouter(*in, *out, s); err != nil { - return err - } - } else { - out.Router = nil - } - if in.BlockStorage != nil { - in, out := &in.BlockStorage, &out.BlockStorage - *out = new(kops.OpenstackBlockStorageConfig) - if err := Convert_v1alpha2_OpenstackBlockStorageConfig_To_kops_OpenstackBlockStorageConfig(*in, *out, s); err != nil { - return err - } - } else { - out.BlockStorage = nil - } - out.InsecureSkipVerify = in.InsecureSkipVerify - if in.Network != nil { - in, out := &in.Network, &out.Network - *out = new(kops.OpenstackNetwork) - if err := Convert_v1alpha2_OpenstackNetwork_To_kops_OpenstackNetwork(*in, *out, s); err != nil { - return err - } - } else { - out.Network = nil - } - if in.Metadata != nil { - in, out := &in.Metadata, &out.Metadata - *out = new(kops.OpenstackMetadata) - if err := Convert_v1alpha2_OpenstackMetadata_To_kops_OpenstackMetadata(*in, *out, s); err != nil { - return err - } - } else { - out.Metadata = nil - } - return nil -} - -// Convert_v1alpha2_OpenstackConfiguration_To_kops_OpenstackConfiguration is an autogenerated conversion function. -func Convert_v1alpha2_OpenstackConfiguration_To_kops_OpenstackConfiguration(in *OpenstackConfiguration, out *kops.OpenstackConfiguration, s conversion.Scope) error { - return autoConvert_v1alpha2_OpenstackConfiguration_To_kops_OpenstackConfiguration(in, out, s) -} - -func autoConvert_kops_OpenstackConfiguration_To_v1alpha2_OpenstackConfiguration(in *kops.OpenstackConfiguration, out *OpenstackConfiguration, s conversion.Scope) error { - if in.Loadbalancer != nil { - in, out := &in.Loadbalancer, &out.Loadbalancer - *out = new(OpenstackLoadbalancerConfig) - if err := Convert_kops_OpenstackLoadbalancerConfig_To_v1alpha2_OpenstackLoadbalancerConfig(*in, *out, s); err != nil { - return err - } - } else { - out.Loadbalancer = nil - } - if in.Monitor != nil { - in, out := &in.Monitor, &out.Monitor - *out = new(OpenstackMonitor) - if err := Convert_kops_OpenstackMonitor_To_v1alpha2_OpenstackMonitor(*in, *out, s); err != nil { - return err - } - } else { - out.Monitor = nil - } - if in.Router != nil { - in, out := &in.Router, &out.Router - *out = new(OpenstackRouter) - if err := Convert_kops_OpenstackRouter_To_v1alpha2_OpenstackRouter(*in, *out, s); err != nil { - return err - } - } else { - out.Router = nil - } - if in.BlockStorage != nil { - in, out := &in.BlockStorage, &out.BlockStorage - *out = new(OpenstackBlockStorageConfig) - if err := Convert_kops_OpenstackBlockStorageConfig_To_v1alpha2_OpenstackBlockStorageConfig(*in, *out, s); err != nil { - return err - } - } else { - out.BlockStorage = nil - } - out.InsecureSkipVerify = in.InsecureSkipVerify - if in.Network != nil { - in, out := &in.Network, &out.Network - *out = new(OpenstackNetwork) - if err := Convert_kops_OpenstackNetwork_To_v1alpha2_OpenstackNetwork(*in, *out, s); err != nil { - return err - } - } else { - out.Network = nil - } - if in.Metadata != nil { - in, out := &in.Metadata, &out.Metadata - *out = new(OpenstackMetadata) - if err := Convert_kops_OpenstackMetadata_To_v1alpha2_OpenstackMetadata(*in, *out, s); err != nil { - return err - } - } else { - out.Metadata = nil - } - return nil -} - -// Convert_kops_OpenstackConfiguration_To_v1alpha2_OpenstackConfiguration is an autogenerated conversion function. -func Convert_kops_OpenstackConfiguration_To_v1alpha2_OpenstackConfiguration(in *kops.OpenstackConfiguration, out *OpenstackConfiguration, s conversion.Scope) error { - return autoConvert_kops_OpenstackConfiguration_To_v1alpha2_OpenstackConfiguration(in, out, s) -} - func autoConvert_v1alpha2_OpenstackLoadbalancerConfig_To_kops_OpenstackLoadbalancerConfig(in *OpenstackLoadbalancerConfig, out *kops.OpenstackLoadbalancerConfig, s conversion.Scope) error { out.Method = in.Method out.Provider = in.Provider @@ -6731,6 +6586,134 @@ func Convert_kops_OpenstackRouter_To_v1alpha2_OpenstackRouter(in *kops.Openstack return autoConvert_kops_OpenstackRouter_To_v1alpha2_OpenstackRouter(in, out, s) } +func autoConvert_v1alpha2_OpenstackSpec_To_kops_OpenstackSpec(in *OpenstackSpec, out *kops.OpenstackSpec, s conversion.Scope) error { + if in.Loadbalancer != nil { + in, out := &in.Loadbalancer, &out.Loadbalancer + *out = new(kops.OpenstackLoadbalancerConfig) + if err := Convert_v1alpha2_OpenstackLoadbalancerConfig_To_kops_OpenstackLoadbalancerConfig(*in, *out, s); err != nil { + return err + } + } else { + out.Loadbalancer = nil + } + if in.Monitor != nil { + in, out := &in.Monitor, &out.Monitor + *out = new(kops.OpenstackMonitor) + if err := Convert_v1alpha2_OpenstackMonitor_To_kops_OpenstackMonitor(*in, *out, s); err != nil { + return err + } + } else { + out.Monitor = nil + } + if in.Router != nil { + in, out := &in.Router, &out.Router + *out = new(kops.OpenstackRouter) + if err := Convert_v1alpha2_OpenstackRouter_To_kops_OpenstackRouter(*in, *out, s); err != nil { + return err + } + } else { + out.Router = nil + } + if in.BlockStorage != nil { + in, out := &in.BlockStorage, &out.BlockStorage + *out = new(kops.OpenstackBlockStorageConfig) + if err := Convert_v1alpha2_OpenstackBlockStorageConfig_To_kops_OpenstackBlockStorageConfig(*in, *out, s); err != nil { + return err + } + } else { + out.BlockStorage = nil + } + out.InsecureSkipVerify = in.InsecureSkipVerify + if in.Network != nil { + in, out := &in.Network, &out.Network + *out = new(kops.OpenstackNetwork) + if err := Convert_v1alpha2_OpenstackNetwork_To_kops_OpenstackNetwork(*in, *out, s); err != nil { + return err + } + } else { + out.Network = nil + } + if in.Metadata != nil { + in, out := &in.Metadata, &out.Metadata + *out = new(kops.OpenstackMetadata) + if err := Convert_v1alpha2_OpenstackMetadata_To_kops_OpenstackMetadata(*in, *out, s); err != nil { + return err + } + } else { + out.Metadata = nil + } + return nil +} + +// Convert_v1alpha2_OpenstackSpec_To_kops_OpenstackSpec is an autogenerated conversion function. +func Convert_v1alpha2_OpenstackSpec_To_kops_OpenstackSpec(in *OpenstackSpec, out *kops.OpenstackSpec, s conversion.Scope) error { + return autoConvert_v1alpha2_OpenstackSpec_To_kops_OpenstackSpec(in, out, s) +} + +func autoConvert_kops_OpenstackSpec_To_v1alpha2_OpenstackSpec(in *kops.OpenstackSpec, out *OpenstackSpec, s conversion.Scope) error { + if in.Loadbalancer != nil { + in, out := &in.Loadbalancer, &out.Loadbalancer + *out = new(OpenstackLoadbalancerConfig) + if err := Convert_kops_OpenstackLoadbalancerConfig_To_v1alpha2_OpenstackLoadbalancerConfig(*in, *out, s); err != nil { + return err + } + } else { + out.Loadbalancer = nil + } + if in.Monitor != nil { + in, out := &in.Monitor, &out.Monitor + *out = new(OpenstackMonitor) + if err := Convert_kops_OpenstackMonitor_To_v1alpha2_OpenstackMonitor(*in, *out, s); err != nil { + return err + } + } else { + out.Monitor = nil + } + if in.Router != nil { + in, out := &in.Router, &out.Router + *out = new(OpenstackRouter) + if err := Convert_kops_OpenstackRouter_To_v1alpha2_OpenstackRouter(*in, *out, s); err != nil { + return err + } + } else { + out.Router = nil + } + if in.BlockStorage != nil { + in, out := &in.BlockStorage, &out.BlockStorage + *out = new(OpenstackBlockStorageConfig) + if err := Convert_kops_OpenstackBlockStorageConfig_To_v1alpha2_OpenstackBlockStorageConfig(*in, *out, s); err != nil { + return err + } + } else { + out.BlockStorage = nil + } + out.InsecureSkipVerify = in.InsecureSkipVerify + if in.Network != nil { + in, out := &in.Network, &out.Network + *out = new(OpenstackNetwork) + if err := Convert_kops_OpenstackNetwork_To_v1alpha2_OpenstackNetwork(*in, *out, s); err != nil { + return err + } + } else { + out.Network = nil + } + if in.Metadata != nil { + in, out := &in.Metadata, &out.Metadata + *out = new(OpenstackMetadata) + if err := Convert_kops_OpenstackMetadata_To_v1alpha2_OpenstackMetadata(*in, *out, s); err != nil { + return err + } + } else { + out.Metadata = nil + } + return nil +} + +// Convert_kops_OpenstackSpec_To_v1alpha2_OpenstackSpec is an autogenerated conversion function. +func Convert_kops_OpenstackSpec_To_v1alpha2_OpenstackSpec(in *kops.OpenstackSpec, out *OpenstackSpec, s conversion.Scope) error { + return autoConvert_kops_OpenstackSpec_To_v1alpha2_OpenstackSpec(in, out, s) +} + func autoConvert_v1alpha2_PackagesConfig_To_kops_PackagesConfig(in *PackagesConfig, out *kops.PackagesConfig, s conversion.Scope) error { out.HashAmd64 = in.HashAmd64 out.HashArm64 = in.HashArm64 diff --git a/pkg/apis/kops/v1alpha2/zz_generated.deepcopy.go b/pkg/apis/kops/v1alpha2/zz_generated.deepcopy.go index 18df8d5ee4..534bc87192 100644 --- a/pkg/apis/kops/v1alpha2/zz_generated.deepcopy.go +++ b/pkg/apis/kops/v1alpha2/zz_generated.deepcopy.go @@ -738,7 +738,7 @@ func (in *CloudConfiguration) DeepCopyInto(out *CloudConfiguration) { } if in.Openstack != nil { in, out := &in.Openstack, &out.Openstack - *out = new(OpenstackConfiguration) + *out = new(OpenstackSpec) (*in).DeepCopyInto(*out) } if in.Azure != nil { @@ -4526,57 +4526,6 @@ func (in *OpenstackBlockStorageConfig) DeepCopy() *OpenstackBlockStorageConfig { return out } -// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. -func (in *OpenstackConfiguration) DeepCopyInto(out *OpenstackConfiguration) { - *out = *in - if in.Loadbalancer != nil { - in, out := &in.Loadbalancer, &out.Loadbalancer - *out = new(OpenstackLoadbalancerConfig) - (*in).DeepCopyInto(*out) - } - if in.Monitor != nil { - in, out := &in.Monitor, &out.Monitor - *out = new(OpenstackMonitor) - (*in).DeepCopyInto(*out) - } - if in.Router != nil { - in, out := &in.Router, &out.Router - *out = new(OpenstackRouter) - (*in).DeepCopyInto(*out) - } - if in.BlockStorage != nil { - in, out := &in.BlockStorage, &out.BlockStorage - *out = new(OpenstackBlockStorageConfig) - (*in).DeepCopyInto(*out) - } - if in.InsecureSkipVerify != nil { - in, out := &in.InsecureSkipVerify, &out.InsecureSkipVerify - *out = new(bool) - **out = **in - } - if in.Network != nil { - in, out := &in.Network, &out.Network - *out = new(OpenstackNetwork) - (*in).DeepCopyInto(*out) - } - if in.Metadata != nil { - in, out := &in.Metadata, &out.Metadata - *out = new(OpenstackMetadata) - (*in).DeepCopyInto(*out) - } - return -} - -// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new OpenstackConfiguration. -func (in *OpenstackConfiguration) DeepCopy() *OpenstackConfiguration { - if in == nil { - return nil - } - out := new(OpenstackConfiguration) - in.DeepCopyInto(out) - return out -} - // DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. func (in *OpenstackLoadbalancerConfig) DeepCopyInto(out *OpenstackLoadbalancerConfig) { *out = *in @@ -4764,6 +4713,57 @@ func (in *OpenstackRouter) DeepCopy() *OpenstackRouter { return out } +// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. +func (in *OpenstackSpec) DeepCopyInto(out *OpenstackSpec) { + *out = *in + if in.Loadbalancer != nil { + in, out := &in.Loadbalancer, &out.Loadbalancer + *out = new(OpenstackLoadbalancerConfig) + (*in).DeepCopyInto(*out) + } + if in.Monitor != nil { + in, out := &in.Monitor, &out.Monitor + *out = new(OpenstackMonitor) + (*in).DeepCopyInto(*out) + } + if in.Router != nil { + in, out := &in.Router, &out.Router + *out = new(OpenstackRouter) + (*in).DeepCopyInto(*out) + } + if in.BlockStorage != nil { + in, out := &in.BlockStorage, &out.BlockStorage + *out = new(OpenstackBlockStorageConfig) + (*in).DeepCopyInto(*out) + } + if in.InsecureSkipVerify != nil { + in, out := &in.InsecureSkipVerify, &out.InsecureSkipVerify + *out = new(bool) + **out = **in + } + if in.Network != nil { + in, out := &in.Network, &out.Network + *out = new(OpenstackNetwork) + (*in).DeepCopyInto(*out) + } + if in.Metadata != nil { + in, out := &in.Metadata, &out.Metadata + *out = new(OpenstackMetadata) + (*in).DeepCopyInto(*out) + } + return +} + +// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new OpenstackSpec. +func (in *OpenstackSpec) DeepCopy() *OpenstackSpec { + if in == nil { + return nil + } + out := new(OpenstackSpec) + in.DeepCopyInto(out) + return out +} + // DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. func (in *PackagesConfig) DeepCopyInto(out *PackagesConfig) { *out = *in diff --git a/pkg/apis/kops/v1alpha3/cluster.go b/pkg/apis/kops/v1alpha3/cluster.go index c94743ce24..10fdec2c77 100644 --- a/pkg/apis/kops/v1alpha3/cluster.go +++ b/pkg/apis/kops/v1alpha3/cluster.go @@ -249,10 +249,6 @@ type DOSpec struct { type GCESpec struct { } -// OpenstackSpec configures the Openstack cloud provider. -type OpenstackSpec struct { -} - type KarpenterConfig struct { Enabled bool `json:"enabled,omitempty"` } diff --git a/pkg/apis/kops/v1alpha3/componentconfig.go b/pkg/apis/kops/v1alpha3/componentconfig.go index bf4234ec15..1953b5625d 100644 --- a/pkg/apis/kops/v1alpha3/componentconfig.go +++ b/pkg/apis/kops/v1alpha3/componentconfig.go @@ -809,8 +809,8 @@ type OpenstackMetadata struct { ConfigDrive *bool `json:"configDrive,omitempty"` } -// OpenstackConfiguration defines cloud config elements for the openstack cloud provider -type OpenstackConfiguration struct { +// OpenstackSpec defines cloud config elements for the openstack cloud provider +type OpenstackSpec struct { Loadbalancer *OpenstackLoadbalancerConfig `json:"loadbalancer,omitempty"` Monitor *OpenstackMonitor `json:"monitor,omitempty"` Router *OpenstackRouter `json:"router,omitempty"` @@ -862,8 +862,6 @@ type CloudConfiguration struct { // Spotinst cloud-config specs SpotinstProduct *string `json:"spotinstProduct,omitempty"` SpotinstOrientation *string `json:"spotinstOrientation,omitempty"` - // Openstack cloud-config options - Openstack *OpenstackConfiguration `json:"openstack,omitempty"` // AWSEBSCSIDriver is the config for the AWS EBS CSI driver AWSEBSCSIDriver *AWSEBSCSIDriver `json:"awsEBSCSIDriver,omitempty"` // GCPPDCSIDriver is the config for the GCP PD CSI driver diff --git a/pkg/apis/kops/v1alpha3/zz_generated.conversion.go b/pkg/apis/kops/v1alpha3/zz_generated.conversion.go index 26fbc5c6f8..4c587e6402 100644 --- a/pkg/apis/kops/v1alpha3/zz_generated.conversion.go +++ b/pkg/apis/kops/v1alpha3/zz_generated.conversion.go @@ -954,16 +954,6 @@ func RegisterConversions(s *runtime.Scheme) error { }); err != nil { return err } - if err := s.AddGeneratedConversionFunc((*OpenstackConfiguration)(nil), (*kops.OpenstackConfiguration)(nil), func(a, b interface{}, scope conversion.Scope) error { - return Convert_v1alpha3_OpenstackConfiguration_To_kops_OpenstackConfiguration(a.(*OpenstackConfiguration), b.(*kops.OpenstackConfiguration), scope) - }); err != nil { - return err - } - if err := s.AddGeneratedConversionFunc((*kops.OpenstackConfiguration)(nil), (*OpenstackConfiguration)(nil), func(a, b interface{}, scope conversion.Scope) error { - return Convert_kops_OpenstackConfiguration_To_v1alpha3_OpenstackConfiguration(a.(*kops.OpenstackConfiguration), b.(*OpenstackConfiguration), scope) - }); err != nil { - return err - } if err := s.AddGeneratedConversionFunc((*OpenstackLoadbalancerConfig)(nil), (*kops.OpenstackLoadbalancerConfig)(nil), func(a, b interface{}, scope conversion.Scope) error { return Convert_v1alpha3_OpenstackLoadbalancerConfig_To_kops_OpenstackLoadbalancerConfig(a.(*OpenstackLoadbalancerConfig), b.(*kops.OpenstackLoadbalancerConfig), scope) }); err != nil { @@ -2060,15 +2050,6 @@ func autoConvert_v1alpha3_CloudConfiguration_To_kops_CloudConfiguration(in *Clou out.ElbSecurityGroup = in.ElbSecurityGroup out.SpotinstProduct = in.SpotinstProduct out.SpotinstOrientation = in.SpotinstOrientation - if in.Openstack != nil { - in, out := &in.Openstack, &out.Openstack - *out = new(kops.OpenstackConfiguration) - if err := Convert_v1alpha3_OpenstackConfiguration_To_kops_OpenstackConfiguration(*in, *out, s); err != nil { - return err - } - } else { - out.Openstack = nil - } if in.AWSEBSCSIDriver != nil { in, out := &in.AWSEBSCSIDriver, &out.AWSEBSCSIDriver *out = new(kops.AWSEBSCSIDriver) @@ -2106,15 +2087,6 @@ func autoConvert_kops_CloudConfiguration_To_v1alpha3_CloudConfiguration(in *kops out.ElbSecurityGroup = in.ElbSecurityGroup out.SpotinstProduct = in.SpotinstProduct out.SpotinstOrientation = in.SpotinstOrientation - if in.Openstack != nil { - in, out := &in.Openstack, &out.Openstack - *out = new(OpenstackConfiguration) - if err := Convert_kops_OpenstackConfiguration_To_v1alpha3_OpenstackConfiguration(*in, *out, s); err != nil { - return err - } - } else { - out.Openstack = nil - } if in.AWSEBSCSIDriver != nil { in, out := &in.AWSEBSCSIDriver, &out.AWSEBSCSIDriver *out = new(AWSEBSCSIDriver) @@ -6439,134 +6411,6 @@ func Convert_kops_OpenstackBlockStorageConfig_To_v1alpha3_OpenstackBlockStorageC return autoConvert_kops_OpenstackBlockStorageConfig_To_v1alpha3_OpenstackBlockStorageConfig(in, out, s) } -func autoConvert_v1alpha3_OpenstackConfiguration_To_kops_OpenstackConfiguration(in *OpenstackConfiguration, out *kops.OpenstackConfiguration, s conversion.Scope) error { - if in.Loadbalancer != nil { - in, out := &in.Loadbalancer, &out.Loadbalancer - *out = new(kops.OpenstackLoadbalancerConfig) - if err := Convert_v1alpha3_OpenstackLoadbalancerConfig_To_kops_OpenstackLoadbalancerConfig(*in, *out, s); err != nil { - return err - } - } else { - out.Loadbalancer = nil - } - if in.Monitor != nil { - in, out := &in.Monitor, &out.Monitor - *out = new(kops.OpenstackMonitor) - if err := Convert_v1alpha3_OpenstackMonitor_To_kops_OpenstackMonitor(*in, *out, s); err != nil { - return err - } - } else { - out.Monitor = nil - } - if in.Router != nil { - in, out := &in.Router, &out.Router - *out = new(kops.OpenstackRouter) - if err := Convert_v1alpha3_OpenstackRouter_To_kops_OpenstackRouter(*in, *out, s); err != nil { - return err - } - } else { - out.Router = nil - } - if in.BlockStorage != nil { - in, out := &in.BlockStorage, &out.BlockStorage - *out = new(kops.OpenstackBlockStorageConfig) - if err := Convert_v1alpha3_OpenstackBlockStorageConfig_To_kops_OpenstackBlockStorageConfig(*in, *out, s); err != nil { - return err - } - } else { - out.BlockStorage = nil - } - out.InsecureSkipVerify = in.InsecureSkipVerify - if in.Network != nil { - in, out := &in.Network, &out.Network - *out = new(kops.OpenstackNetwork) - if err := Convert_v1alpha3_OpenstackNetwork_To_kops_OpenstackNetwork(*in, *out, s); err != nil { - return err - } - } else { - out.Network = nil - } - if in.Metadata != nil { - in, out := &in.Metadata, &out.Metadata - *out = new(kops.OpenstackMetadata) - if err := Convert_v1alpha3_OpenstackMetadata_To_kops_OpenstackMetadata(*in, *out, s); err != nil { - return err - } - } else { - out.Metadata = nil - } - return nil -} - -// Convert_v1alpha3_OpenstackConfiguration_To_kops_OpenstackConfiguration is an autogenerated conversion function. -func Convert_v1alpha3_OpenstackConfiguration_To_kops_OpenstackConfiguration(in *OpenstackConfiguration, out *kops.OpenstackConfiguration, s conversion.Scope) error { - return autoConvert_v1alpha3_OpenstackConfiguration_To_kops_OpenstackConfiguration(in, out, s) -} - -func autoConvert_kops_OpenstackConfiguration_To_v1alpha3_OpenstackConfiguration(in *kops.OpenstackConfiguration, out *OpenstackConfiguration, s conversion.Scope) error { - if in.Loadbalancer != nil { - in, out := &in.Loadbalancer, &out.Loadbalancer - *out = new(OpenstackLoadbalancerConfig) - if err := Convert_kops_OpenstackLoadbalancerConfig_To_v1alpha3_OpenstackLoadbalancerConfig(*in, *out, s); err != nil { - return err - } - } else { - out.Loadbalancer = nil - } - if in.Monitor != nil { - in, out := &in.Monitor, &out.Monitor - *out = new(OpenstackMonitor) - if err := Convert_kops_OpenstackMonitor_To_v1alpha3_OpenstackMonitor(*in, *out, s); err != nil { - return err - } - } else { - out.Monitor = nil - } - if in.Router != nil { - in, out := &in.Router, &out.Router - *out = new(OpenstackRouter) - if err := Convert_kops_OpenstackRouter_To_v1alpha3_OpenstackRouter(*in, *out, s); err != nil { - return err - } - } else { - out.Router = nil - } - if in.BlockStorage != nil { - in, out := &in.BlockStorage, &out.BlockStorage - *out = new(OpenstackBlockStorageConfig) - if err := Convert_kops_OpenstackBlockStorageConfig_To_v1alpha3_OpenstackBlockStorageConfig(*in, *out, s); err != nil { - return err - } - } else { - out.BlockStorage = nil - } - out.InsecureSkipVerify = in.InsecureSkipVerify - if in.Network != nil { - in, out := &in.Network, &out.Network - *out = new(OpenstackNetwork) - if err := Convert_kops_OpenstackNetwork_To_v1alpha3_OpenstackNetwork(*in, *out, s); err != nil { - return err - } - } else { - out.Network = nil - } - if in.Metadata != nil { - in, out := &in.Metadata, &out.Metadata - *out = new(OpenstackMetadata) - if err := Convert_kops_OpenstackMetadata_To_v1alpha3_OpenstackMetadata(*in, *out, s); err != nil { - return err - } - } else { - out.Metadata = nil - } - return nil -} - -// Convert_kops_OpenstackConfiguration_To_v1alpha3_OpenstackConfiguration is an autogenerated conversion function. -func Convert_kops_OpenstackConfiguration_To_v1alpha3_OpenstackConfiguration(in *kops.OpenstackConfiguration, out *OpenstackConfiguration, s conversion.Scope) error { - return autoConvert_kops_OpenstackConfiguration_To_v1alpha3_OpenstackConfiguration(in, out, s) -} - func autoConvert_v1alpha3_OpenstackLoadbalancerConfig_To_kops_OpenstackLoadbalancerConfig(in *OpenstackLoadbalancerConfig, out *kops.OpenstackLoadbalancerConfig, s conversion.Scope) error { out.Method = in.Method out.Provider = in.Provider @@ -6696,6 +6540,61 @@ func Convert_kops_OpenstackRouter_To_v1alpha3_OpenstackRouter(in *kops.Openstack } func autoConvert_v1alpha3_OpenstackSpec_To_kops_OpenstackSpec(in *OpenstackSpec, out *kops.OpenstackSpec, s conversion.Scope) error { + if in.Loadbalancer != nil { + in, out := &in.Loadbalancer, &out.Loadbalancer + *out = new(kops.OpenstackLoadbalancerConfig) + if err := Convert_v1alpha3_OpenstackLoadbalancerConfig_To_kops_OpenstackLoadbalancerConfig(*in, *out, s); err != nil { + return err + } + } else { + out.Loadbalancer = nil + } + if in.Monitor != nil { + in, out := &in.Monitor, &out.Monitor + *out = new(kops.OpenstackMonitor) + if err := Convert_v1alpha3_OpenstackMonitor_To_kops_OpenstackMonitor(*in, *out, s); err != nil { + return err + } + } else { + out.Monitor = nil + } + if in.Router != nil { + in, out := &in.Router, &out.Router + *out = new(kops.OpenstackRouter) + if err := Convert_v1alpha3_OpenstackRouter_To_kops_OpenstackRouter(*in, *out, s); err != nil { + return err + } + } else { + out.Router = nil + } + if in.BlockStorage != nil { + in, out := &in.BlockStorage, &out.BlockStorage + *out = new(kops.OpenstackBlockStorageConfig) + if err := Convert_v1alpha3_OpenstackBlockStorageConfig_To_kops_OpenstackBlockStorageConfig(*in, *out, s); err != nil { + return err + } + } else { + out.BlockStorage = nil + } + out.InsecureSkipVerify = in.InsecureSkipVerify + if in.Network != nil { + in, out := &in.Network, &out.Network + *out = new(kops.OpenstackNetwork) + if err := Convert_v1alpha3_OpenstackNetwork_To_kops_OpenstackNetwork(*in, *out, s); err != nil { + return err + } + } else { + out.Network = nil + } + if in.Metadata != nil { + in, out := &in.Metadata, &out.Metadata + *out = new(kops.OpenstackMetadata) + if err := Convert_v1alpha3_OpenstackMetadata_To_kops_OpenstackMetadata(*in, *out, s); err != nil { + return err + } + } else { + out.Metadata = nil + } return nil } @@ -6705,6 +6604,61 @@ func Convert_v1alpha3_OpenstackSpec_To_kops_OpenstackSpec(in *OpenstackSpec, out } func autoConvert_kops_OpenstackSpec_To_v1alpha3_OpenstackSpec(in *kops.OpenstackSpec, out *OpenstackSpec, s conversion.Scope) error { + if in.Loadbalancer != nil { + in, out := &in.Loadbalancer, &out.Loadbalancer + *out = new(OpenstackLoadbalancerConfig) + if err := Convert_kops_OpenstackLoadbalancerConfig_To_v1alpha3_OpenstackLoadbalancerConfig(*in, *out, s); err != nil { + return err + } + } else { + out.Loadbalancer = nil + } + if in.Monitor != nil { + in, out := &in.Monitor, &out.Monitor + *out = new(OpenstackMonitor) + if err := Convert_kops_OpenstackMonitor_To_v1alpha3_OpenstackMonitor(*in, *out, s); err != nil { + return err + } + } else { + out.Monitor = nil + } + if in.Router != nil { + in, out := &in.Router, &out.Router + *out = new(OpenstackRouter) + if err := Convert_kops_OpenstackRouter_To_v1alpha3_OpenstackRouter(*in, *out, s); err != nil { + return err + } + } else { + out.Router = nil + } + if in.BlockStorage != nil { + in, out := &in.BlockStorage, &out.BlockStorage + *out = new(OpenstackBlockStorageConfig) + if err := Convert_kops_OpenstackBlockStorageConfig_To_v1alpha3_OpenstackBlockStorageConfig(*in, *out, s); err != nil { + return err + } + } else { + out.BlockStorage = nil + } + out.InsecureSkipVerify = in.InsecureSkipVerify + if in.Network != nil { + in, out := &in.Network, &out.Network + *out = new(OpenstackNetwork) + if err := Convert_kops_OpenstackNetwork_To_v1alpha3_OpenstackNetwork(*in, *out, s); err != nil { + return err + } + } else { + out.Network = nil + } + if in.Metadata != nil { + in, out := &in.Metadata, &out.Metadata + *out = new(OpenstackMetadata) + if err := Convert_kops_OpenstackMetadata_To_v1alpha3_OpenstackMetadata(*in, *out, s); err != nil { + return err + } + } else { + out.Metadata = nil + } return nil } diff --git a/pkg/apis/kops/v1alpha3/zz_generated.deepcopy.go b/pkg/apis/kops/v1alpha3/zz_generated.deepcopy.go index f245a7d3d2..1121ca9af5 100644 --- a/pkg/apis/kops/v1alpha3/zz_generated.deepcopy.go +++ b/pkg/apis/kops/v1alpha3/zz_generated.deepcopy.go @@ -663,11 +663,6 @@ func (in *CloudConfiguration) DeepCopyInto(out *CloudConfiguration) { *out = new(string) **out = **in } - if in.Openstack != nil { - in, out := &in.Openstack, &out.Openstack - *out = new(OpenstackConfiguration) - (*in).DeepCopyInto(*out) - } if in.AWSEBSCSIDriver != nil { in, out := &in.AWSEBSCSIDriver, &out.AWSEBSCSIDriver *out = new(AWSEBSCSIDriver) @@ -768,7 +763,7 @@ func (in *CloudProviderSpec) DeepCopyInto(out *CloudProviderSpec) { if in.Openstack != nil { in, out := &in.Openstack, &out.Openstack *out = new(OpenstackSpec) - **out = **in + (*in).DeepCopyInto(*out) } return } @@ -4436,57 +4431,6 @@ func (in *OpenstackBlockStorageConfig) DeepCopy() *OpenstackBlockStorageConfig { return out } -// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. -func (in *OpenstackConfiguration) DeepCopyInto(out *OpenstackConfiguration) { - *out = *in - if in.Loadbalancer != nil { - in, out := &in.Loadbalancer, &out.Loadbalancer - *out = new(OpenstackLoadbalancerConfig) - (*in).DeepCopyInto(*out) - } - if in.Monitor != nil { - in, out := &in.Monitor, &out.Monitor - *out = new(OpenstackMonitor) - (*in).DeepCopyInto(*out) - } - if in.Router != nil { - in, out := &in.Router, &out.Router - *out = new(OpenstackRouter) - (*in).DeepCopyInto(*out) - } - if in.BlockStorage != nil { - in, out := &in.BlockStorage, &out.BlockStorage - *out = new(OpenstackBlockStorageConfig) - (*in).DeepCopyInto(*out) - } - if in.InsecureSkipVerify != nil { - in, out := &in.InsecureSkipVerify, &out.InsecureSkipVerify - *out = new(bool) - **out = **in - } - if in.Network != nil { - in, out := &in.Network, &out.Network - *out = new(OpenstackNetwork) - (*in).DeepCopyInto(*out) - } - if in.Metadata != nil { - in, out := &in.Metadata, &out.Metadata - *out = new(OpenstackMetadata) - (*in).DeepCopyInto(*out) - } - return -} - -// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new OpenstackConfiguration. -func (in *OpenstackConfiguration) DeepCopy() *OpenstackConfiguration { - if in == nil { - return nil - } - out := new(OpenstackConfiguration) - in.DeepCopyInto(out) - return out -} - // DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. func (in *OpenstackLoadbalancerConfig) DeepCopyInto(out *OpenstackLoadbalancerConfig) { *out = *in @@ -4677,6 +4621,41 @@ func (in *OpenstackRouter) DeepCopy() *OpenstackRouter { // DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. func (in *OpenstackSpec) DeepCopyInto(out *OpenstackSpec) { *out = *in + if in.Loadbalancer != nil { + in, out := &in.Loadbalancer, &out.Loadbalancer + *out = new(OpenstackLoadbalancerConfig) + (*in).DeepCopyInto(*out) + } + if in.Monitor != nil { + in, out := &in.Monitor, &out.Monitor + *out = new(OpenstackMonitor) + (*in).DeepCopyInto(*out) + } + if in.Router != nil { + in, out := &in.Router, &out.Router + *out = new(OpenstackRouter) + (*in).DeepCopyInto(*out) + } + if in.BlockStorage != nil { + in, out := &in.BlockStorage, &out.BlockStorage + *out = new(OpenstackBlockStorageConfig) + (*in).DeepCopyInto(*out) + } + if in.InsecureSkipVerify != nil { + in, out := &in.InsecureSkipVerify, &out.InsecureSkipVerify + *out = new(bool) + **out = **in + } + if in.Network != nil { + in, out := &in.Network, &out.Network + *out = new(OpenstackNetwork) + (*in).DeepCopyInto(*out) + } + if in.Metadata != nil { + in, out := &in.Metadata, &out.Metadata + *out = new(OpenstackMetadata) + (*in).DeepCopyInto(*out) + } return } diff --git a/pkg/apis/kops/validation/openstack.go b/pkg/apis/kops/validation/openstack.go index 8d1cbf5379..1bbf57561d 100644 --- a/pkg/apis/kops/validation/openstack.go +++ b/pkg/apis/kops/validation/openstack.go @@ -22,10 +22,10 @@ import ( ) func openstackValidateCluster(c *kops.Cluster) (errList field.ErrorList) { - if c.Spec.CloudConfig == nil || c.Spec.CloudConfig.Openstack == nil { + if c.Spec.CloudProvider.Openstack == nil { return errList } - if c.Spec.CloudConfig.Openstack.Router == nil || c.Spec.CloudConfig.Openstack.Router.ExternalNetwork == nil { + if c.Spec.CloudProvider.Openstack.Router == nil || c.Spec.CloudProvider.Openstack.Router.ExternalNetwork == nil { topology := c.Spec.Topology if topology == nil || topology.Nodes == kops.TopologyPublic { errList = append(errList, field.Forbidden(field.NewPath("spec", "topology", "nodes"), "Public topology requires an external network")) diff --git a/pkg/apis/kops/validation/openstack_test.go b/pkg/apis/kops/validation/openstack_test.go index 9f5c49f8fe..591bb8b2f1 100644 --- a/pkg/apis/kops/validation/openstack_test.go +++ b/pkg/apis/kops/validation/openstack_test.go @@ -31,8 +31,8 @@ func Test_ValidateTopology(t *testing.T) { }{ { Input: kops.ClusterSpec{ - CloudConfig: &kops.CloudConfiguration{ - Openstack: &kops.OpenstackConfiguration{}, + CloudProvider: kops.CloudProviderSpec{ + Openstack: &kops.OpenstackSpec{}, }, }, ExpectedErrors: []string{ @@ -42,8 +42,8 @@ func Test_ValidateTopology(t *testing.T) { }, { Input: kops.ClusterSpec{ - CloudConfig: &kops.CloudConfiguration{ - Openstack: &kops.OpenstackConfiguration{ + CloudProvider: kops.CloudProviderSpec{ + Openstack: &kops.OpenstackSpec{ Router: &kops.OpenstackRouter{}, }, }, @@ -55,8 +55,8 @@ func Test_ValidateTopology(t *testing.T) { }, { Input: kops.ClusterSpec{ - CloudConfig: &kops.CloudConfiguration{ - Openstack: &kops.OpenstackConfiguration{}, + CloudProvider: kops.CloudProviderSpec{ + Openstack: &kops.OpenstackSpec{}, }, Topology: &kops.TopologySpec{ Masters: kops.TopologyPrivate, @@ -67,8 +67,8 @@ func Test_ValidateTopology(t *testing.T) { }, { Input: kops.ClusterSpec{ - CloudConfig: &kops.CloudConfiguration{ - Openstack: &kops.OpenstackConfiguration{ + CloudProvider: kops.CloudProviderSpec{ + Openstack: &kops.OpenstackSpec{ Router: &kops.OpenstackRouter{ ExternalNetwork: fi.String("foo"), }, diff --git a/pkg/apis/kops/validation/validation.go b/pkg/apis/kops/validation/validation.go index cd61045825..275ad6826d 100644 --- a/pkg/apis/kops/validation/validation.go +++ b/pkg/apis/kops/validation/validation.go @@ -256,7 +256,7 @@ func validateClusterSpec(spec *kops.ClusterSpec, c *kops.Cluster, fieldPath *fie } if spec.CloudConfig != nil { - allErrs = append(allErrs, validateCloudConfiguration(spec.CloudConfig, fieldPath.Child("cloudConfig"))...) + allErrs = append(allErrs, validateCloudConfiguration(spec.CloudConfig, spec, fieldPath.Child("cloudConfig"))...) } if spec.WarmPool != nil { @@ -1636,10 +1636,10 @@ func validateAWSLoadBalancerController(cluster *kops.Cluster, spec *kops.AWSLoad return allErrs } -func validateCloudConfiguration(cloudConfig *kops.CloudConfiguration, fldPath *field.Path) (allErrs field.ErrorList) { - if cloudConfig.ManageStorageClasses != nil && cloudConfig.Openstack != nil && - cloudConfig.Openstack.BlockStorage != nil && cloudConfig.Openstack.BlockStorage.CreateStorageClass != nil { - if *cloudConfig.Openstack.BlockStorage.CreateStorageClass != *cloudConfig.ManageStorageClasses { +func validateCloudConfiguration(cloudConfig *kops.CloudConfiguration, spec *kops.ClusterSpec, fldPath *field.Path) (allErrs field.ErrorList) { + if cloudConfig.ManageStorageClasses != nil && spec.CloudProvider.Openstack != nil && + spec.CloudProvider.Openstack.BlockStorage != nil && spec.CloudProvider.Openstack.BlockStorage.CreateStorageClass != nil { + if *spec.CloudProvider.Openstack.BlockStorage.CreateStorageClass != *cloudConfig.ManageStorageClasses { allErrs = append(allErrs, field.Forbidden(fldPath.Child("manageStorageClasses"), "Management of storage classes and OpenStack block storage classes are both specified but disagree")) } diff --git a/pkg/apis/kops/validation/validation_test.go b/pkg/apis/kops/validation/validation_test.go index 0c7ef4e0b8..1677932489 100644 --- a/pkg/apis/kops/validation/validation_test.go +++ b/pkg/apis/kops/validation/validation_test.go @@ -1177,6 +1177,7 @@ func Test_Validate_CloudConfiguration(t *testing.T) { grid := []struct { Description string Input kops.CloudConfiguration + CloudProvider kops.CloudProviderSpec ExpectedErrors []string }{ { @@ -1197,8 +1198,9 @@ func Test_Validate_CloudConfiguration(t *testing.T) { }, { Description: "os false", - Input: kops.CloudConfiguration{ - Openstack: &kops.OpenstackConfiguration{ + Input: kops.CloudConfiguration{}, + CloudProvider: kops.CloudProviderSpec{ + Openstack: &kops.OpenstackSpec{ BlockStorage: &kops.OpenstackBlockStorageConfig{ CreateStorageClass: fi.Bool(false), }, @@ -1207,8 +1209,9 @@ func Test_Validate_CloudConfiguration(t *testing.T) { }, { Description: "os true", - Input: kops.CloudConfiguration{ - Openstack: &kops.OpenstackConfiguration{ + Input: kops.CloudConfiguration{}, + CloudProvider: kops.CloudProviderSpec{ + Openstack: &kops.OpenstackSpec{ BlockStorage: &kops.OpenstackBlockStorageConfig{ CreateStorageClass: fi.Bool(true), }, @@ -1219,7 +1222,9 @@ func Test_Validate_CloudConfiguration(t *testing.T) { Description: "all false, os false", Input: kops.CloudConfiguration{ ManageStorageClasses: fi.Bool(false), - Openstack: &kops.OpenstackConfiguration{ + }, + CloudProvider: kops.CloudProviderSpec{ + Openstack: &kops.OpenstackSpec{ BlockStorage: &kops.OpenstackBlockStorageConfig{ CreateStorageClass: fi.Bool(false), }, @@ -1230,7 +1235,9 @@ func Test_Validate_CloudConfiguration(t *testing.T) { Description: "all false, os true", Input: kops.CloudConfiguration{ ManageStorageClasses: fi.Bool(false), - Openstack: &kops.OpenstackConfiguration{ + }, + CloudProvider: kops.CloudProviderSpec{ + Openstack: &kops.OpenstackSpec{ BlockStorage: &kops.OpenstackBlockStorageConfig{ CreateStorageClass: fi.Bool(true), }, @@ -1242,7 +1249,9 @@ func Test_Validate_CloudConfiguration(t *testing.T) { Description: "all true, os false", Input: kops.CloudConfiguration{ ManageStorageClasses: fi.Bool(true), - Openstack: &kops.OpenstackConfiguration{ + }, + CloudProvider: kops.CloudProviderSpec{ + Openstack: &kops.OpenstackSpec{ BlockStorage: &kops.OpenstackBlockStorageConfig{ CreateStorageClass: fi.Bool(false), }, @@ -1254,7 +1263,9 @@ func Test_Validate_CloudConfiguration(t *testing.T) { Description: "all true, os true", Input: kops.CloudConfiguration{ ManageStorageClasses: fi.Bool(true), - Openstack: &kops.OpenstackConfiguration{ + }, + CloudProvider: kops.CloudProviderSpec{ + Openstack: &kops.OpenstackSpec{ BlockStorage: &kops.OpenstackBlockStorageConfig{ CreateStorageClass: fi.Bool(true), }, @@ -1266,7 +1277,10 @@ func Test_Validate_CloudConfiguration(t *testing.T) { for _, g := range grid { fldPath := field.NewPath("cloudConfig") t.Run(g.Description, func(t *testing.T) { - errs := validateCloudConfiguration(&g.Input, fldPath) + spec := &kops.ClusterSpec{ + CloudProvider: g.CloudProvider, + } + errs := validateCloudConfiguration(&g.Input, spec, fldPath) testErrors(t, g.Input, errs, g.ExpectedErrors) }) } diff --git a/pkg/apis/kops/zz_generated.deepcopy.go b/pkg/apis/kops/zz_generated.deepcopy.go index d6077f0159..bfce0d5864 100644 --- a/pkg/apis/kops/zz_generated.deepcopy.go +++ b/pkg/apis/kops/zz_generated.deepcopy.go @@ -760,11 +760,6 @@ func (in *CloudConfiguration) DeepCopyInto(out *CloudConfiguration) { *out = new(string) **out = **in } - if in.Openstack != nil { - in, out := &in.Openstack, &out.Openstack - *out = new(OpenstackConfiguration) - (*in).DeepCopyInto(*out) - } if in.AWSEBSCSIDriver != nil { in, out := &in.AWSEBSCSIDriver, &out.AWSEBSCSIDriver *out = new(AWSEBSCSIDriver) @@ -865,7 +860,7 @@ func (in *CloudProviderSpec) DeepCopyInto(out *CloudProviderSpec) { if in.Openstack != nil { in, out := &in.Openstack, &out.Openstack *out = new(OpenstackSpec) - **out = **in + (*in).DeepCopyInto(*out) } return } @@ -4711,57 +4706,6 @@ func (in *OpenstackBlockStorageConfig) DeepCopy() *OpenstackBlockStorageConfig { return out } -// DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. -func (in *OpenstackConfiguration) DeepCopyInto(out *OpenstackConfiguration) { - *out = *in - if in.Loadbalancer != nil { - in, out := &in.Loadbalancer, &out.Loadbalancer - *out = new(OpenstackLoadbalancerConfig) - (*in).DeepCopyInto(*out) - } - if in.Monitor != nil { - in, out := &in.Monitor, &out.Monitor - *out = new(OpenstackMonitor) - (*in).DeepCopyInto(*out) - } - if in.Router != nil { - in, out := &in.Router, &out.Router - *out = new(OpenstackRouter) - (*in).DeepCopyInto(*out) - } - if in.BlockStorage != nil { - in, out := &in.BlockStorage, &out.BlockStorage - *out = new(OpenstackBlockStorageConfig) - (*in).DeepCopyInto(*out) - } - if in.InsecureSkipVerify != nil { - in, out := &in.InsecureSkipVerify, &out.InsecureSkipVerify - *out = new(bool) - **out = **in - } - if in.Network != nil { - in, out := &in.Network, &out.Network - *out = new(OpenstackNetwork) - (*in).DeepCopyInto(*out) - } - if in.Metadata != nil { - in, out := &in.Metadata, &out.Metadata - *out = new(OpenstackMetadata) - (*in).DeepCopyInto(*out) - } - return -} - -// DeepCopy is an autogenerated deepcopy function, copying the receiver, creating a new OpenstackConfiguration. -func (in *OpenstackConfiguration) DeepCopy() *OpenstackConfiguration { - if in == nil { - return nil - } - out := new(OpenstackConfiguration) - in.DeepCopyInto(out) - return out -} - // DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. func (in *OpenstackLoadbalancerConfig) DeepCopyInto(out *OpenstackLoadbalancerConfig) { *out = *in @@ -4952,6 +4896,41 @@ func (in *OpenstackRouter) DeepCopy() *OpenstackRouter { // DeepCopyInto is an autogenerated deepcopy function, copying the receiver, writing into out. in must be non-nil. func (in *OpenstackSpec) DeepCopyInto(out *OpenstackSpec) { *out = *in + if in.Loadbalancer != nil { + in, out := &in.Loadbalancer, &out.Loadbalancer + *out = new(OpenstackLoadbalancerConfig) + (*in).DeepCopyInto(*out) + } + if in.Monitor != nil { + in, out := &in.Monitor, &out.Monitor + *out = new(OpenstackMonitor) + (*in).DeepCopyInto(*out) + } + if in.Router != nil { + in, out := &in.Router, &out.Router + *out = new(OpenstackRouter) + (*in).DeepCopyInto(*out) + } + if in.BlockStorage != nil { + in, out := &in.BlockStorage, &out.BlockStorage + *out = new(OpenstackBlockStorageConfig) + (*in).DeepCopyInto(*out) + } + if in.InsecureSkipVerify != nil { + in, out := &in.InsecureSkipVerify, &out.InsecureSkipVerify + *out = new(bool) + **out = **in + } + if in.Network != nil { + in, out := &in.Network, &out.Network + *out = new(OpenstackNetwork) + (*in).DeepCopyInto(*out) + } + if in.Metadata != nil { + in, out := &in.Metadata, &out.Metadata + *out = new(OpenstackMetadata) + (*in).DeepCopyInto(*out) + } return } diff --git a/pkg/model/components/cloudconfiguration.go b/pkg/model/components/cloudconfiguration.go index 566395f58b..c2c0899ab5 100644 --- a/pkg/model/components/cloudconfiguration.go +++ b/pkg/model/components/cloudconfiguration.go @@ -42,10 +42,10 @@ func (b *CloudConfigurationOptionsBuilder) BuildOptions(o interface{}) error { if c.ManageStorageClasses == nil { var manage *bool - if c.Openstack != nil && c.Openstack.BlockStorage != nil && c.Openstack.BlockStorage.CreateStorageClass != nil { + if clusterSpec.CloudProvider.Openstack != nil && clusterSpec.CloudProvider.Openstack.BlockStorage != nil && clusterSpec.CloudProvider.Openstack.BlockStorage.CreateStorageClass != nil { // Avoid a spurious conflict with a user-specified configuration for OpenStack by // adopting that more particular setting generally. - manage = c.Openstack.BlockStorage.CreateStorageClass + manage = clusterSpec.CloudProvider.Openstack.BlockStorage.CreateStorageClass } else { manage = fi.Bool(true) } diff --git a/pkg/model/components/cloudconfiguration_test.go b/pkg/model/components/cloudconfiguration_test.go index ee290baaaa..e9c3013414 100644 --- a/pkg/model/components/cloudconfiguration_test.go +++ b/pkg/model/components/cloudconfiguration_test.go @@ -94,11 +94,9 @@ func TestCloudConfigurationOptionsBuilder(t *testing.T) { } { t.Run(test.description, func(t *testing.T) { spec := kopsapi.ClusterSpec{ + CloudConfig: &kopsapi.CloudConfiguration{}, CloudProvider: kopsapi.CloudProviderSpec{ - Openstack: &kopsapi.OpenstackSpec{}, - }, - CloudConfig: &kopsapi.CloudConfiguration{ - Openstack: &kopsapi.OpenstackConfiguration{ + Openstack: &kopsapi.OpenstackSpec{ BlockStorage: &kopsapi.OpenstackBlockStorageConfig{}, }, }, @@ -107,7 +105,7 @@ func TestCloudConfigurationOptionsBuilder(t *testing.T) { spec.CloudConfig.ManageStorageClasses = p } if p := test.openStackManageSCs; p != nil { - spec.CloudConfig.Openstack.BlockStorage.CreateStorageClass = p + spec.CloudProvider.Openstack.BlockStorage.CreateStorageClass = p } if err := ob.BuildOptions(&spec); err != nil { t.Fatalf("failed to build options: %v", err) diff --git a/pkg/model/components/openstack.go b/pkg/model/components/openstack.go index 14298a4ef5..2ccb6cc7e9 100644 --- a/pkg/model/components/openstack.go +++ b/pkg/model/components/openstack.go @@ -22,17 +22,18 @@ import ( "k8s.io/kops/upup/pkg/fi/loader" ) -// OpenStackOptionsBulder adds options for OpenStack to the model -type OpenStackOptionsBulder struct { +// OpenStackOptionsBuilder adds options for OpenStack to the model +type OpenStackOptionsBuilder struct { Context *OptionsContext } -var _ loader.OptionsBuilder = &OpenStackOptionsBulder{} +var _ loader.OptionsBuilder = &OpenStackOptionsBuilder{} -func (b *OpenStackOptionsBulder) BuildOptions(o interface{}) error { +func (b *OpenStackOptionsBuilder) BuildOptions(o interface{}) error { clusterSpec := o.(*kops.ClusterSpec) + openstack := clusterSpec.CloudProvider.Openstack - if clusterSpec.GetCloudProvider() != kops.CloudProviderOpenstack { + if openstack == nil { return nil } @@ -40,22 +41,19 @@ func (b *OpenStackOptionsBulder) BuildOptions(o interface{}) error { clusterSpec.CloudConfig = &kops.CloudConfiguration{} } - if clusterSpec.CloudConfig.Openstack == nil { - clusterSpec.CloudConfig.Openstack = &kops.OpenstackConfiguration{} - } - if clusterSpec.CloudConfig.Openstack.BlockStorage == nil { - clusterSpec.CloudConfig.Openstack.BlockStorage = &kops.OpenstackBlockStorageConfig{} + if openstack.BlockStorage == nil { + openstack.BlockStorage = &kops.OpenstackBlockStorageConfig{} } - if clusterSpec.CloudConfig.Openstack.BlockStorage.CreateStorageClass == nil { - clusterSpec.CloudConfig.Openstack.BlockStorage.CreateStorageClass = fi.Bool(true) + if openstack.BlockStorage.CreateStorageClass == nil { + openstack.BlockStorage.CreateStorageClass = fi.Bool(true) } - if clusterSpec.CloudConfig.Openstack.Metadata == nil { - clusterSpec.CloudConfig.Openstack.Metadata = &kops.OpenstackMetadata{} + if openstack.Metadata == nil { + openstack.Metadata = &kops.OpenstackMetadata{} } - if clusterSpec.CloudConfig.Openstack.Metadata.ConfigDrive == nil { - clusterSpec.CloudConfig.Openstack.Metadata.ConfigDrive = fi.Bool(false) + if openstack.Metadata.ConfigDrive == nil { + openstack.Metadata.ConfigDrive = fi.Bool(false) } if clusterSpec.ExternalCloudControllerManager == nil { diff --git a/pkg/model/master_volumes.go b/pkg/model/master_volumes.go index e48f81ef03..603987bac7 100644 --- a/pkg/model/master_volumes.go +++ b/pkg/model/master_volumes.go @@ -299,8 +299,8 @@ func (b *MasterVolumeBuilder) addOpenstackVolume(c *fi.ModelBuilderContext, name tags[openstack.TagNameRolePrefix+"master"] = "1" // override zone - if b.Cluster.Spec.CloudConfig.Openstack.BlockStorage != nil && b.Cluster.Spec.CloudConfig.Openstack.BlockStorage.OverrideAZ != nil { - zone = fi.StringValue(b.Cluster.Spec.CloudConfig.Openstack.BlockStorage.OverrideAZ) + if b.Cluster.Spec.CloudProvider.Openstack.BlockStorage != nil && b.Cluster.Spec.CloudProvider.Openstack.BlockStorage.OverrideAZ != nil { + zone = fi.StringValue(b.Cluster.Spec.CloudProvider.Openstack.BlockStorage.OverrideAZ) } t := &openstacktasks.Volume{ Name: fi.String(name), diff --git a/pkg/model/openstackmodel/firewall.go b/pkg/model/openstackmodel/firewall.go index f5bef98c53..b7f041e626 100644 --- a/pkg/model/openstackmodel/firewall.go +++ b/pkg/model/openstackmodel/firewall.go @@ -50,10 +50,8 @@ type FirewallModelBuilder struct { var _ fi.ModelBuilder = &FirewallModelBuilder{} func (b *FirewallModelBuilder) usesOctavia() bool { - if b.Cluster.Spec.CloudConfig != nil && - b.Cluster.Spec.CloudConfig.Openstack != nil && - b.Cluster.Spec.CloudConfig.Openstack.Loadbalancer != nil { - return fi.BoolValue(b.Cluster.Spec.CloudConfig.Openstack.Loadbalancer.UseOctavia) + if b.Cluster.Spec.CloudProvider.Openstack.Loadbalancer != nil { + return fi.BoolValue(b.Cluster.Spec.CloudProvider.Openstack.Loadbalancer.UseOctavia) } return false } diff --git a/pkg/model/openstackmodel/network.go b/pkg/model/openstackmodel/network.go index 42a0d17892..68b4485050 100644 --- a/pkg/model/openstackmodel/network.go +++ b/pkg/model/openstackmodel/network.go @@ -34,7 +34,7 @@ var _ fi.ModelBuilder = &NetworkModelBuilder{} func (b *NetworkModelBuilder) Build(c *fi.ModelBuilderContext) error { clusterName := b.ClusterName() - osSpec := b.Cluster.Spec.CloudConfig.Openstack + osSpec := b.Cluster.Spec.CloudProvider.Openstack netName, err := b.GetNetworkName() if err != nil { diff --git a/pkg/model/openstackmodel/servergroup.go b/pkg/model/openstackmodel/servergroup.go index 70222b202e..ee2d7af33e 100644 --- a/pkg/model/openstackmodel/servergroup.go +++ b/pkg/model/openstackmodel/servergroup.go @@ -96,7 +96,7 @@ func (b *ServerGroupModelBuilder) buildInstances(c *fi.ModelBuilderContext, sg * securityGroupName := b.SecurityGroupName(ig.Spec.Role) securityGroups = append(securityGroups, b.LinkToSecurityGroup(securityGroupName)) - if b.Cluster.Spec.CloudConfig.Openstack.Loadbalancer == nil && ig.Spec.Role == kops.InstanceGroupRoleMaster { + if b.Cluster.Spec.CloudProvider.Openstack.Loadbalancer == nil && ig.Spec.Role == kops.InstanceGroupRoleMaster { securityGroups = append(securityGroups, b.LinkToSecurityGroup(b.Cluster.Spec.MasterPublicName)) } @@ -177,13 +177,13 @@ func (b *ServerGroupModelBuilder) buildInstances(c *fi.ModelBuilderContext, sg * Metadata: metaWithName, SecurityGroups: ig.Spec.AdditionalSecurityGroups, AvailabilityZone: az, - ConfigDrive: b.Cluster.Spec.CloudConfig.Openstack.Metadata.ConfigDrive, + ConfigDrive: b.Cluster.Spec.CloudProvider.Openstack.Metadata.ConfigDrive, } c.AddTask(instanceTask) // Associate a floating IP to the instances if we have external network in router // and respective topology is "public" - if b.Cluster.Spec.CloudConfig.Openstack != nil && b.Cluster.Spec.CloudConfig.Openstack.Router != nil { + if b.Cluster.Spec.CloudProvider.Openstack.Router != nil { if ig.Spec.AssociatePublicIP != nil && !fi.BoolValue(ig.Spec.AssociatePublicIP) { continue } @@ -260,7 +260,7 @@ func (b *ServerGroupModelBuilder) Build(c *fi.ModelBuilderContext) error { } } - if b.Cluster.Spec.CloudConfig.Openstack.Loadbalancer != nil { + if b.Cluster.Spec.CloudProvider.Openstack.Loadbalancer != nil { var lbSubnetName string var err error for _, sp := range b.Cluster.Spec.Subnets { diff --git a/pkg/model/openstackmodel/servergroup_test.go b/pkg/model/openstackmodel/servergroup_test.go index 53bd418acb..32529d52e9 100644 --- a/pkg/model/openstackmodel/servergroup_test.go +++ b/pkg/model/openstackmodel/servergroup_test.go @@ -50,8 +50,8 @@ func getServerGroupModelBuilderTestInput() []serverGroupModelBuilderTestInput { }, Spec: kops.ClusterSpec{ MasterPublicName: "master-public-name", - CloudConfig: &kops.CloudConfiguration{ - Openstack: &kops.OpenstackConfiguration{ + CloudProvider: kops.CloudProviderSpec{ + Openstack: &kops.OpenstackSpec{ Router: &kops.OpenstackRouter{ ExternalNetwork: fi.String("test"), }, @@ -107,8 +107,8 @@ func getServerGroupModelBuilderTestInput() []serverGroupModelBuilderTestInput { }, Spec: kops.ClusterSpec{ MasterPublicName: "master-public-name", - CloudConfig: &kops.CloudConfiguration{ - Openstack: &kops.OpenstackConfiguration{ + CloudProvider: kops.CloudProviderSpec{ + Openstack: &kops.OpenstackSpec{ Router: &kops.OpenstackRouter{ ExternalNetwork: fi.String("test"), }, @@ -192,8 +192,8 @@ func getServerGroupModelBuilderTestInput() []serverGroupModelBuilderTestInput { }, Spec: kops.ClusterSpec{ MasterPublicName: "master-public-name", - CloudConfig: &kops.CloudConfiguration{ - Openstack: &kops.OpenstackConfiguration{ + CloudProvider: kops.CloudProviderSpec{ + Openstack: &kops.OpenstackSpec{ Router: &kops.OpenstackRouter{ ExternalNetwork: fi.String("test"), }, @@ -313,8 +313,8 @@ func getServerGroupModelBuilderTestInput() []serverGroupModelBuilderTestInput { }, Spec: kops.ClusterSpec{ MasterPublicName: "master-public-name", - CloudConfig: &kops.CloudConfiguration{ - Openstack: &kops.OpenstackConfiguration{ + CloudProvider: kops.CloudProviderSpec{ + Openstack: &kops.OpenstackSpec{ Loadbalancer: &kops.OpenstackLoadbalancerConfig{}, Router: &kops.OpenstackRouter{ ExternalNetwork: fi.String("test"), @@ -441,8 +441,8 @@ func getServerGroupModelBuilderTestInput() []serverGroupModelBuilderTestInput { }, Spec: kops.ClusterSpec{ MasterPublicName: "master-public-name", - CloudConfig: &kops.CloudConfiguration{ - Openstack: &kops.OpenstackConfiguration{ + CloudProvider: kops.CloudProviderSpec{ + Openstack: &kops.OpenstackSpec{ Metadata: &kops.OpenstackMetadata{ ConfigDrive: fi.Bool(false), }, @@ -559,8 +559,8 @@ func getServerGroupModelBuilderTestInput() []serverGroupModelBuilderTestInput { }, Spec: kops.ClusterSpec{ MasterPublicName: "master-public-name", - CloudConfig: &kops.CloudConfiguration{ - Openstack: &kops.OpenstackConfiguration{ + CloudProvider: kops.CloudProviderSpec{ + Openstack: &kops.OpenstackSpec{ Router: &kops.OpenstackRouter{ ExternalNetwork: fi.String("test"), }, @@ -640,8 +640,8 @@ func getServerGroupModelBuilderTestInput() []serverGroupModelBuilderTestInput { }, Spec: kops.ClusterSpec{ MasterPublicName: "master-public-name", - CloudConfig: &kops.CloudConfiguration{ - Openstack: &kops.OpenstackConfiguration{ + CloudProvider: kops.CloudProviderSpec{ + Openstack: &kops.OpenstackSpec{ Router: &kops.OpenstackRouter{ ExternalNetwork: fi.String("test"), }, @@ -699,8 +699,8 @@ func getServerGroupModelBuilderTestInput() []serverGroupModelBuilderTestInput { }, Spec: kops.ClusterSpec{ MasterPublicName: "master-public-name", - CloudConfig: &kops.CloudConfiguration{ - Openstack: &kops.OpenstackConfiguration{ + CloudProvider: kops.CloudProviderSpec{ + Openstack: &kops.OpenstackSpec{ Router: &kops.OpenstackRouter{ ExternalNetwork: fi.String("test"), }, @@ -784,8 +784,8 @@ func getServerGroupModelBuilderTestInput() []serverGroupModelBuilderTestInput { }, Spec: kops.ClusterSpec{ MasterPublicName: "master-public-name", - CloudConfig: &kops.CloudConfiguration{ - Openstack: &kops.OpenstackConfiguration{ + CloudProvider: kops.CloudProviderSpec{ + Openstack: &kops.OpenstackSpec{ Metadata: &kops.OpenstackMetadata{ ConfigDrive: fi.Bool(false), }, @@ -827,8 +827,8 @@ func getServerGroupModelBuilderTestInput() []serverGroupModelBuilderTestInput { }, Spec: kops.ClusterSpec{ MasterPublicName: "master-public-name", - CloudConfig: &kops.CloudConfiguration{ - Openstack: &kops.OpenstackConfiguration{ + CloudProvider: kops.CloudProviderSpec{ + Openstack: &kops.OpenstackSpec{ Metadata: &kops.OpenstackMetadata{ ConfigDrive: fi.Bool(false), }, @@ -872,8 +872,8 @@ func getServerGroupModelBuilderTestInput() []serverGroupModelBuilderTestInput { }, Spec: kops.ClusterSpec{ MasterPublicName: "master-public-name", - CloudConfig: &kops.CloudConfiguration{ - Openstack: &kops.OpenstackConfiguration{ + CloudProvider: kops.CloudProviderSpec{ + Openstack: &kops.OpenstackSpec{ Metadata: &kops.OpenstackMetadata{ ConfigDrive: fi.Bool(false), }, @@ -915,8 +915,8 @@ func getServerGroupModelBuilderTestInput() []serverGroupModelBuilderTestInput { }, Spec: kops.ClusterSpec{ MasterPublicName: "master-public-name", - CloudConfig: &kops.CloudConfiguration{ - Openstack: &kops.OpenstackConfiguration{ + CloudProvider: kops.CloudProviderSpec{ + Openstack: &kops.OpenstackSpec{ Metadata: &kops.OpenstackMetadata{ ConfigDrive: fi.Bool(false), }, @@ -958,8 +958,8 @@ func getServerGroupModelBuilderTestInput() []serverGroupModelBuilderTestInput { }, Spec: kops.ClusterSpec{ MasterPublicName: "master-public-name", - CloudConfig: &kops.CloudConfiguration{ - Openstack: &kops.OpenstackConfiguration{ + CloudProvider: kops.CloudProviderSpec{ + Openstack: &kops.OpenstackSpec{ Metadata: &kops.OpenstackMetadata{ ConfigDrive: fi.Bool(false), }, @@ -1001,8 +1001,8 @@ func getServerGroupModelBuilderTestInput() []serverGroupModelBuilderTestInput { }, Spec: kops.ClusterSpec{ MasterPublicName: "master-public-name", - CloudConfig: &kops.CloudConfiguration{ - Openstack: &kops.OpenstackConfiguration{ + CloudProvider: kops.CloudProviderSpec{ + Openstack: &kops.OpenstackSpec{ Metadata: &kops.OpenstackMetadata{ ConfigDrive: fi.Bool(false), }, diff --git a/tests/integration/conversion/openstack/v1alpha2.yaml b/tests/integration/conversion/openstack/v1alpha2.yaml index 5a30ffb31e..a8e9aa02e1 100644 --- a/tests/integration/conversion/openstack/v1alpha2.yaml +++ b/tests/integration/conversion/openstack/v1alpha2.yaml @@ -12,6 +12,22 @@ spec: authorization: alwaysAllow: {} channel: stable + cloudConfig: + openstack: + blockStorage: + bs-version: test-bs-version + insecureSkipVerify: true + loadbalancer: + method: lb-method + metadata: + configDrive: true + monitor: + delay: 44s + network: + availabilityZoneHints: + - test-az-hints + router: + externalNetwork: test-external-network cloudProvider: openstack configBase: memfs://clusters.example.com/minimal.example.com etcdClusters: diff --git a/tests/integration/conversion/openstack/v1alpha3.yaml b/tests/integration/conversion/openstack/v1alpha3.yaml index d5c556fdb8..06eba98238 100644 --- a/tests/integration/conversion/openstack/v1alpha3.yaml +++ b/tests/integration/conversion/openstack/v1alpha3.yaml @@ -11,8 +11,23 @@ spec: authorization: alwaysAllow: {} channel: stable + cloudConfig: {} cloudProvider: - openstack: {} + openstack: + blockStorage: + bs-version: test-bs-version + insecureSkipVerify: true + loadbalancer: + method: lb-method + metadata: + configDrive: true + monitor: + delay: 44s + network: + availabilityZoneHints: + - test-az-hints + router: + externalNetwork: test-external-network configBase: memfs://clusters.example.com/minimal.example.com etcdClusters: - cpuRequest: 200m diff --git a/upup/models/cloudup/resources/addons/storage-openstack.addons.k8s.io/k8s-1.16.yaml.template b/upup/models/cloudup/resources/addons/storage-openstack.addons.k8s.io/k8s-1.16.yaml.template index bd889d5702..e925c00ab8 100644 --- a/upup/models/cloudup/resources/addons/storage-openstack.addons.k8s.io/k8s-1.16.yaml.template +++ b/upup/models/cloudup/resources/addons/storage-openstack.addons.k8s.io/k8s-1.16.yaml.template @@ -281,7 +281,7 @@ spec: - "--timeout=3m" - "--extra-create-metadata" - "--default-fstype=ext4" -{{ if WithDefaultBool .CloudConfig.Openstack.BlockStorage.CSITopologySupport false }} +{{ if WithDefaultBool .CloudProvider.Openstack.BlockStorage.CSITopologySupport false }} - --feature-gates=Topology=true {{ end }} env: @@ -328,7 +328,7 @@ spec: - mountPath: /var/lib/csi/sockets/pluginproxy/ name: socket-dir - name: cinder-csi-plugin - image: "{{- if .CloudConfig.Openstack.BlockStorage.CSIPluginImage -}} {{ .CloudConfig.Openstack.BlockStorage.CSIPluginImage }} {{- else -}} docker.io/k8scloudprovider/cinder-csi-plugin:{{OpenStackCSITag}} {{- end -}}" + image: "{{- if .CloudProvider.Openstack.BlockStorage.CSIPluginImage -}} {{ .CloudProvider.Openstack.BlockStorage.CSIPluginImage }} {{- else -}} docker.io/k8scloudprovider/cinder-csi-plugin:{{OpenStackCSITag}} {{- end -}}" args: - /bin/cinder-csi-plugin - "--nodeid=$(NODE_ID)" @@ -472,7 +472,7 @@ spec: capabilities: add: ["SYS_ADMIN"] allowPrivilegeEscalation: true - image: "{{- if .CloudConfig.Openstack.BlockStorage.CSIPluginImage -}} {{ .CloudConfig.Openstack.BlockStorage.CSIPluginImage }} {{- else -}} docker.io/k8scloudprovider/cinder-csi-plugin:{{OpenStackCSITag}} {{- end -}}" + image: "{{- if .CloudProvider.Openstack.BlockStorage.CSIPluginImage -}} {{ .CloudProvider.Openstack.BlockStorage.CSIPluginImage }} {{- else -}} docker.io/k8scloudprovider/cinder-csi-plugin:{{OpenStackCSITag}} {{- end -}}" args : - /bin/cinder-csi-plugin - "--nodeid=$(NODE_ID)" @@ -535,7 +535,7 @@ spec: - Persistent - Ephemeral -{{ if and (WithDefaultBool .CloudConfig.ManageStorageClasses true) (WithDefaultBool .CloudConfig.Openstack.BlockStorage.CreateStorageClass true) }} +{{ if and (WithDefaultBool .CloudConfig.ManageStorageClasses true) (WithDefaultBool .CloudProvider.Openstack.BlockStorage.CreateStorageClass true) }} --- apiVersion: storage.k8s.io/v1 kind: StorageClass diff --git a/upup/pkg/fi/cloudup/new_cluster.go b/upup/pkg/fi/cloudup/new_cluster.go index 328ca2e5c9..9833ed9344 100644 --- a/upup/pkg/fi/cloudup/new_cluster.go +++ b/upup/pkg/fi/cloudup/new_cluster.go @@ -276,7 +276,20 @@ func NewCluster(opt *NewClusterOptions, clientset simple.Clientset) (*NewCluster case api.CloudProviderGCE: cluster.Spec.CloudProvider.GCE = &api.GCESpec{} case api.CloudProviderOpenstack: - cluster.Spec.CloudProvider.Openstack = &api.OpenstackSpec{} + cluster.Spec.CloudProvider.Openstack = &api.OpenstackSpec{ + Router: &api.OpenstackRouter{ + ExternalNetwork: fi.String(opt.OpenstackExternalNet), + }, + BlockStorage: &api.OpenstackBlockStorageConfig{ + Version: fi.String("v3"), + IgnoreAZ: fi.Bool(opt.OpenstackStorageIgnoreAZ), + }, + Monitor: &api.OpenstackMonitor{ + Delay: fi.String("15s"), + Timeout: fi.String("10s"), + MaxRetries: fi.Int(3), + }, + } default: return nil, fmt.Errorf("unsupported cloud provider %s", opt.CloudProvider) } @@ -415,20 +428,6 @@ func setupVPC(opt *NewClusterOptions, cluster *api.Cluster) error { if cluster.Spec.CloudConfig == nil { cluster.Spec.CloudConfig = &api.CloudConfiguration{} } - cluster.Spec.CloudConfig.Openstack = &api.OpenstackConfiguration{ - Router: &api.OpenstackRouter{ - ExternalNetwork: fi.String(opt.OpenstackExternalNet), - }, - BlockStorage: &api.OpenstackBlockStorageConfig{ - Version: fi.String("v3"), - IgnoreAZ: fi.Bool(opt.OpenstackStorageIgnoreAZ), - }, - Monitor: &api.OpenstackMonitor{ - Delay: fi.String("15s"), - Timeout: fi.String("10s"), - MaxRetries: fi.Int(3), - }, - } if cluster.Spec.NetworkID == "" && len(opt.SubnetIDs) > 0 { tags := make(map[string]string) @@ -446,10 +445,10 @@ func setupVPC(opt *NewClusterOptions, cluster *api.Cluster) error { } if opt.OpenstackDNSServers != "" { - cluster.Spec.CloudConfig.Openstack.Router.DNSServers = fi.String(opt.OpenstackDNSServers) + cluster.Spec.CloudProvider.Openstack.Router.DNSServers = fi.String(opt.OpenstackDNSServers) } if opt.OpenstackExternalSubnet != "" { - cluster.Spec.CloudConfig.Openstack.Router.ExternalSubnet = fi.String(opt.OpenstackExternalSubnet) + cluster.Spec.CloudProvider.Openstack.Router.ExternalSubnet = fi.String(opt.OpenstackExternalSubnet) } case api.CloudProviderAzure: // TODO(kenji): Find a right place for this. @@ -1229,7 +1228,7 @@ func initializeOpenstackAPI(opt *NewClusterOptions, cluster *api.Cluster) { } } - cluster.Spec.CloudConfig.Openstack.Loadbalancer = &api.OpenstackLoadbalancerConfig{ + cluster.Spec.CloudProvider.Openstack.Loadbalancer = &api.OpenstackLoadbalancerConfig{ FloatingNetwork: fi.String(opt.OpenstackExternalNet), Method: fi.String("ROUND_ROBIN"), Provider: fi.String(provider), @@ -1237,7 +1236,7 @@ func initializeOpenstackAPI(opt *NewClusterOptions, cluster *api.Cluster) { } if opt.OpenstackLBSubnet != "" { - cluster.Spec.CloudConfig.Openstack.Loadbalancer.FloatingSubnet = fi.String(opt.OpenstackLBSubnet) + cluster.Spec.CloudProvider.Openstack.Loadbalancer.FloatingSubnet = fi.String(opt.OpenstackLBSubnet) } } } diff --git a/upup/pkg/fi/cloudup/openstack/cloud.go b/upup/pkg/fi/cloudup/openstack/cloud.go index 65df920ee5..746c0730ab 100644 --- a/upup/pkg/fi/cloudup/openstack/cloud.go +++ b/upup/pkg/fi/cloudup/openstack/cloud.go @@ -317,7 +317,7 @@ type openstackCloud struct { var _ fi.Cloud = &openstackCloud{} -var openstackCloudInstances map[string]OpenstackCloud = make(map[string]OpenstackCloud) +var openstackCloudInstances = make(map[string]OpenstackCloud) func NewOpenstackCloud(tags map[string]string, spec *kops.ClusterSpec, uagent string) (OpenstackCloud, error) { config := vfs.OpenstackConfig{} @@ -346,9 +346,9 @@ func NewOpenstackCloud(tags map[string]string, spec *kops.ClusterSpec, uagent st provider.UserAgent = ua klog.V(4).Infof("Using user-agent %s", ua.Join()) - if spec != nil && spec.CloudConfig != nil && spec.CloudConfig.Openstack != nil && spec.CloudConfig.Openstack.InsecureSkipVerify != nil { + if spec != nil && spec.CloudProvider.Openstack != nil && spec.CloudProvider.Openstack.InsecureSkipVerify != nil { tlsconfig := &tls.Config{} - tlsconfig.InsecureSkipVerify = fi.BoolValue(spec.CloudConfig.Openstack.InsecureSkipVerify) + tlsconfig.InsecureSkipVerify = fi.BoolValue(spec.CloudProvider.Openstack.InsecureSkipVerify) transport := &http.Transport{TLSClientConfig: tlsconfig} provider.HTTPClient = http.Client{ Transport: transport, @@ -424,42 +424,41 @@ func NewOpenstackCloud(tags map[string]string, spec *kops.ClusterSpec, uagent st octavia := false floatingEnabled := false if spec != nil && - spec.CloudConfig != nil && - spec.CloudConfig.Openstack != nil && - spec.CloudConfig.Openstack.Router != nil { + spec.CloudProvider.Openstack != nil && + spec.CloudProvider.Openstack.Router != nil { floatingEnabled = true - c.extNetworkName = spec.CloudConfig.Openstack.Router.ExternalNetwork + c.extNetworkName = spec.CloudProvider.Openstack.Router.ExternalNetwork - if spec.CloudConfig.Openstack.Router.ExternalSubnet != nil { - c.extSubnetName = spec.CloudConfig.Openstack.Router.ExternalSubnet + if spec.CloudProvider.Openstack.Router.ExternalSubnet != nil { + c.extSubnetName = spec.CloudProvider.Openstack.Router.ExternalSubnet } - if spec.CloudConfig.Openstack.Loadbalancer != nil && - spec.CloudConfig.Openstack.Loadbalancer.FloatingNetworkID == nil && - spec.CloudConfig.Openstack.Loadbalancer.FloatingNetwork != nil { + if spec.CloudProvider.Openstack.Loadbalancer != nil && + spec.CloudProvider.Openstack.Loadbalancer.FloatingNetworkID == nil && + spec.CloudProvider.Openstack.Loadbalancer.FloatingNetwork != nil { // This field is derived lbNet, err := c.ListNetworks(networks.ListOpts{ - Name: fi.StringValue(spec.CloudConfig.Openstack.Loadbalancer.FloatingNetwork), + Name: fi.StringValue(spec.CloudProvider.Openstack.Loadbalancer.FloatingNetwork), }) if err != nil || len(lbNet) != 1 { return c, fmt.Errorf("could not establish floating network id") } - spec.CloudConfig.Openstack.Loadbalancer.FloatingNetworkID = fi.String(lbNet[0].ID) + spec.CloudProvider.Openstack.Loadbalancer.FloatingNetworkID = fi.String(lbNet[0].ID) } - if spec.CloudConfig.Openstack.Loadbalancer != nil { - if spec.CloudConfig.Openstack.Loadbalancer.UseOctavia != nil { - octavia = fi.BoolValue(spec.CloudConfig.Openstack.Loadbalancer.UseOctavia) + if spec.CloudProvider.Openstack.Loadbalancer != nil { + if spec.CloudProvider.Openstack.Loadbalancer.UseOctavia != nil { + octavia = fi.BoolValue(spec.CloudProvider.Openstack.Loadbalancer.UseOctavia) } - if spec.CloudConfig.Openstack.Loadbalancer.FloatingSubnet != nil { - c.floatingSubnet = spec.CloudConfig.Openstack.Loadbalancer.FloatingSubnet + if spec.CloudProvider.Openstack.Loadbalancer.FloatingSubnet != nil { + c.floatingSubnet = spec.CloudProvider.Openstack.Loadbalancer.FloatingSubnet } } } c.floatingEnabled = floatingEnabled c.useOctavia = octavia var lbClient *gophercloud.ServiceClient - if spec != nil && spec.CloudConfig != nil && spec.CloudConfig.Openstack != nil { - if spec.CloudConfig.Openstack.Loadbalancer != nil && octavia { + if spec != nil && spec.CloudProvider.Openstack != nil { + if spec.CloudProvider.Openstack.Loadbalancer != nil && octavia { klog.V(2).Infof("Openstack using Octavia lbaasv2 api") lbClient, err = os.NewLoadBalancerV2(provider, gophercloud.EndpointOpts{ Region: region, @@ -467,7 +466,7 @@ func NewOpenstackCloud(tags map[string]string, spec *kops.ClusterSpec, uagent st if err != nil { return nil, fmt.Errorf("error building lb client: %v", err) } - } else if spec.CloudConfig.Openstack.Loadbalancer != nil { + } else if spec.CloudProvider.Openstack.Loadbalancer != nil { klog.V(2).Infof("Openstack using deprecated lbaasv2 api") lbClient, err = os.NewNetworkV2(provider, gophercloud.EndpointOpts{ Region: region, @@ -684,7 +683,7 @@ func (c *openstackCloud) GetApiIngressStatus(cluster *kops.Cluster) ([]fi.ApiIng } func getApiIngressStatus(c OpenstackCloud, cluster *kops.Cluster) ([]fi.ApiIngressStatus, error) { - if cluster.Spec.CloudConfig.Openstack.Loadbalancer != nil { + if cluster.Spec.CloudProvider.Openstack.Loadbalancer != nil { return getLoadBalancerIngressStatus(c, cluster) } else { return getIPIngressStatus(c, cluster) diff --git a/upup/pkg/fi/cloudup/openstack/cloud_test.go b/upup/pkg/fi/cloudup/openstack/cloud_test.go index 7e58867ac1..1d645b89bb 100644 --- a/upup/pkg/fi/cloudup/openstack/cloud_test.go +++ b/upup/pkg/fi/cloudup/openstack/cloud_test.go @@ -50,8 +50,8 @@ func Test_OpenstackCloud_GetApiIngressStatus(t *testing.T) { cluster: &kops.Cluster{ Spec: kops.ClusterSpec{ MasterPublicName: "master.k8s.local", - CloudConfig: &kops.CloudConfiguration{ - Openstack: &kops.OpenstackConfiguration{ + CloudProvider: kops.CloudProviderSpec{ + Openstack: &kops.OpenstackSpec{ Loadbalancer: &kops.OpenstackLoadbalancerConfig{}, }, }, @@ -86,8 +86,8 @@ func Test_OpenstackCloud_GetApiIngressStatus(t *testing.T) { cluster: &kops.Cluster{ Spec: kops.ClusterSpec{ MasterPublicName: "master.k8s.local", - CloudConfig: &kops.CloudConfiguration{ - Openstack: &kops.OpenstackConfiguration{ + CloudProvider: kops.CloudProviderSpec{ + Openstack: &kops.OpenstackSpec{ Loadbalancer: &kops.OpenstackLoadbalancerConfig{}, }, }, @@ -131,8 +131,8 @@ func Test_OpenstackCloud_GetApiIngressStatus(t *testing.T) { desc: "Loadbalancer configured master public name not set", cluster: &kops.Cluster{ Spec: kops.ClusterSpec{ - CloudConfig: &kops.CloudConfiguration{ - Openstack: &kops.OpenstackConfiguration{ + CloudProvider: kops.CloudProviderSpec{ + Openstack: &kops.OpenstackSpec{ Loadbalancer: &kops.OpenstackLoadbalancerConfig{}, }, }, @@ -147,8 +147,8 @@ func Test_OpenstackCloud_GetApiIngressStatus(t *testing.T) { Name: "cluster.k8s.local", }, Spec: kops.ClusterSpec{ - CloudConfig: &kops.CloudConfiguration{ - Openstack: &kops.OpenstackConfiguration{}, + CloudProvider: kops.CloudProviderSpec{ + Openstack: &kops.OpenstackSpec{}, }, }, }, @@ -219,8 +219,8 @@ func Test_OpenstackCloud_GetApiIngressStatus(t *testing.T) { Name: "cluster.k8s.local", }, Spec: kops.ClusterSpec{ - CloudConfig: &kops.CloudConfiguration{ - Openstack: &kops.OpenstackConfiguration{}, + CloudProvider: kops.CloudProviderSpec{ + Openstack: &kops.OpenstackSpec{}, }, }, }, diff --git a/upup/pkg/fi/cloudup/populate_cluster_spec.go b/upup/pkg/fi/cloudup/populate_cluster_spec.go index f52893a69e..43533ceda3 100644 --- a/upup/pkg/fi/cloudup/populate_cluster_spec.go +++ b/upup/pkg/fi/cloudup/populate_cluster_spec.go @@ -275,7 +275,7 @@ func (c *populateClusterSpec) run(clientset simple.Clientset) error { codeModels = append(codeModels, &components.CloudConfigurationOptionsBuilder{Context: optionsContext}) codeModels = append(codeModels, &components.CalicoOptionsBuilder{Context: optionsContext}) codeModels = append(codeModels, &components.CiliumOptionsBuilder{Context: optionsContext}) - codeModels = append(codeModels, &components.OpenStackOptionsBulder{Context: optionsContext}) + codeModels = append(codeModels, &components.OpenStackOptionsBuilder{Context: optionsContext}) codeModels = append(codeModels, &components.DiscoveryOptionsBuilder{OptionsContext: optionsContext}) codeModels = append(codeModels, &components.ClusterAutoscalerOptionsBuilder{OptionsContext: optionsContext}) codeModels = append(codeModels, &components.NodeTerminationHandlerOptionsBuilder{OptionsContext: optionsContext})