diff --git a/pkg/model/openstackmodel/context.go b/pkg/model/openstackmodel/context.go index bea9f46fc6..439e450b60 100644 --- a/pkg/model/openstackmodel/context.go +++ b/pkg/model/openstackmodel/context.go @@ -35,7 +35,7 @@ func (c *OpenstackModelContext) createCloud() (openstack.OpenstackCloud, error) if c.cloud == nil { tags := make(map[string]string) tags[openstack.TagClusterName] = c.ClusterName() - osCloud, err := openstack.NewOpenstackCloud(tags, &c.Cluster.Spec, "openstackmodel") + osCloud, err := openstack.NewOpenstackCloud(tags, c.Cluster, "openstackmodel") if err != nil { return nil, err } diff --git a/upup/pkg/fi/cloudup/new_cluster.go b/upup/pkg/fi/cloudup/new_cluster.go index c29c773e49..ca127a4fe9 100644 --- a/upup/pkg/fi/cloudup/new_cluster.go +++ b/upup/pkg/fi/cloudup/new_cluster.go @@ -196,7 +196,7 @@ func NewCluster(opt *NewClusterOptions, clientset simple.Clientset) (*NewCluster return nil, err } - cluster := api.Cluster{ + cluster := &api.Cluster{ ObjectMeta: v1.ObjectMeta{ Name: opt.ClusterName, }, @@ -213,7 +213,7 @@ func NewCluster(opt *NewClusterOptions, clientset simple.Clientset) (*NewCluster } cluster.Spec.ConfigBase = opt.ConfigBase - configBase, err := clientset.ConfigBaseFor(&cluster) + configBase, err := clientset.ConfigBaseFor(cluster) if err != nil { return nil, fmt.Errorf("error building ConfigBase for cluster: %v", err) } @@ -335,7 +335,7 @@ func NewCluster(opt *NewClusterOptions, clientset simple.Clientset) (*NewCluster } tags := make(map[string]string) tags[openstack.TagClusterName] = cluster.GetName() - osCloud, err := openstack.NewOpenstackCloud(tags, &cluster.Spec, "openstackmodel") + osCloud, err := openstack.NewOpenstackCloud(tags, cluster, "openstackmodel") if err != nil { return nil, err } @@ -361,27 +361,27 @@ func NewCluster(opt *NewClusterOptions, clientset simple.Clientset) (*NewCluster } } - err = setupVPC(opt, &cluster, cloud) + err = setupVPC(opt, cluster, cloud) if err != nil { return nil, err } - zoneToSubnetMap, err := setupZones(opt, &cluster, allZones) + zoneToSubnetMap, err := setupZones(opt, cluster, allZones) if err != nil { return nil, err } - err = setupNetworking(opt, &cluster) + err = setupNetworking(opt, cluster) if err != nil { return nil, err } - bastions, err := setupTopology(opt, &cluster, allZones) + bastions, err := setupTopology(opt, cluster, allZones) if err != nil { return nil, err } - controlPlanes, err := setupControlPlane(opt, &cluster, zoneToSubnetMap) + controlPlanes, err := setupControlPlane(opt, cluster, zoneToSubnetMap) if err != nil { return nil, err } @@ -396,12 +396,12 @@ func NewCluster(opt *NewClusterOptions, clientset simple.Clientset) (*NewCluster cluster.Spec.Karpenter = &api.KarpenterConfig{ Enabled: true, } - nodes, err = setupKarpenterNodes(opt, &cluster, zoneToSubnetMap) + nodes, err = setupKarpenterNodes(opt, cluster, zoneToSubnetMap) if err != nil { return nil, err } case "cloudgroups": - nodes, err = setupNodes(opt, &cluster, zoneToSubnetMap) + nodes, err = setupNodes(opt, cluster, zoneToSubnetMap) if err != nil { return nil, err } @@ -409,12 +409,12 @@ func NewCluster(opt *NewClusterOptions, clientset simple.Clientset) (*NewCluster return nil, fmt.Errorf("invalid value %q for --instance-manager", opt.InstanceManager) } - apiservers, err := setupAPIServers(opt, &cluster, zoneToSubnetMap) + apiservers, err := setupAPIServers(opt, cluster, zoneToSubnetMap) if err != nil { return nil, err } - err = setupAPI(opt, &cluster) + err = setupAPI(opt, cluster) if err != nil { return nil, err } @@ -435,7 +435,7 @@ func NewCluster(opt *NewClusterOptions, clientset simple.Clientset) (*NewCluster if err != nil { return nil, err } - instanceGroup.Spec.Image, err = defaultImage(&cluster, channel, architecture) + instanceGroup.Spec.Image, err = defaultImage(cluster, channel, architecture) if err != nil { return nil, err } @@ -445,7 +445,7 @@ func NewCluster(opt *NewClusterOptions, clientset simple.Clientset) (*NewCluster // TODO: Clean up if g.IsControlPlane() { if g.Spec.MachineType == "" { - g.Spec.MachineType, err = defaultMachineType(cloud, &cluster, ig) + g.Spec.MachineType, err = defaultMachineType(cloud, cluster, ig) if err != nil { return nil, fmt.Errorf("error assigning default machine type for control plane: %v", err) } @@ -453,7 +453,7 @@ func NewCluster(opt *NewClusterOptions, clientset simple.Clientset) (*NewCluster } } else if g.Spec.Role == api.InstanceGroupRoleBastion { if g.Spec.MachineType == "" { - g.Spec.MachineType, err = defaultMachineType(cloud, &cluster, g) + g.Spec.MachineType, err = defaultMachineType(cloud, cluster, g) if err != nil { return nil, fmt.Errorf("error assigning default machine type for bastions: %v", err) } @@ -463,7 +463,7 @@ func NewCluster(opt *NewClusterOptions, clientset simple.Clientset) (*NewCluster return nil, fmt.Errorf("apiserver nodes requires the APIServerNodes feature flag to be enabled") } if g.Spec.MachineType == "" { - g.Spec.MachineType, err = defaultMachineType(cloud, &cluster, g) + g.Spec.MachineType, err = defaultMachineType(cloud, cluster, g) if err != nil { return nil, fmt.Errorf("error assigning default machine type for nodes: %v", err) } @@ -518,7 +518,7 @@ func NewCluster(opt *NewClusterOptions, clientset simple.Clientset) (*NewCluster } result := NewClusterResult{ - Cluster: &cluster, + Cluster: cluster, InstanceGroups: instanceGroups, Channel: channel, } @@ -574,7 +574,7 @@ func setupVPC(opt *NewClusterOptions, cluster *api.Cluster, cloud fi.Cloud) erro if cluster.Spec.Networking.NetworkID == "" && len(opt.SubnetIDs) > 0 { tags := make(map[string]string) tags[openstack.TagClusterName] = cluster.Name - osCloud, err := openstack.NewOpenstackCloud(tags, &cluster.Spec, "new-cluster-setupvpc") + osCloud, err := openstack.NewOpenstackCloud(tags, cluster, "new-cluster-setupvpc") if err != nil { return fmt.Errorf("error loading cloud: %v", err) } @@ -718,7 +718,7 @@ func setupZones(opt *NewClusterOptions, cluster *api.Cluster, allZones sets.Stri if len(opt.Zones) > 0 && len(opt.SubnetIDs) > 0 { tags := make(map[string]string) tags[openstack.TagClusterName] = cluster.Name - zoneToSubnetProviderID, err = getOpenstackZoneToSubnetProviderID(&cluster.Spec, allZones.List(), opt.SubnetIDs, tags) + zoneToSubnetProviderID, err = getOpenstackZoneToSubnetProviderID(cluster, allZones.List(), opt.SubnetIDs, tags) if err != nil { return nil, err } @@ -783,20 +783,20 @@ func getAWSZoneToSubnetProviderID(VPCID string, region string, subnetIDs []strin return res, nil } -func getOpenstackZoneToSubnetProviderID(spec *api.ClusterSpec, zones []string, subnetIDs []string, tags map[string]string) (map[string]string, error) { +func getOpenstackZoneToSubnetProviderID(cluster *api.Cluster, zones []string, subnetIDs []string, tags map[string]string) (map[string]string, error) { res := make(map[string]string) - osCloud, err := openstack.NewOpenstackCloud(tags, spec, "new-cluster-zone-to-subnet") + osCloud, err := openstack.NewOpenstackCloud(tags, cluster, "new-cluster-zone-to-subnet") if err != nil { return res, fmt.Errorf("error loading cloud: %v", err) } osCloud.UseZones(zones) - networkInfo, err := osCloud.FindVPCInfo(spec.Networking.NetworkID) + networkInfo, err := osCloud.FindVPCInfo(cluster.Spec.Networking.NetworkID) if err != nil { return res, fmt.Errorf("error describing Network: %v", err) } if networkInfo == nil { - return res, fmt.Errorf("network %q not found", spec.Networking.NetworkID) + return res, fmt.Errorf("network %q not found", cluster.Spec.Networking.NetworkID) } subnetByID := make(map[string]*fi.SubnetInfo) @@ -807,7 +807,7 @@ func getOpenstackZoneToSubnetProviderID(spec *api.ClusterSpec, zones []string, s for _, subnetID := range subnetIDs { subnet, ok := subnetByID[subnetID] if !ok { - return res, fmt.Errorf("subnet %s not found in network %s", subnetID, spec.Networking.NetworkID) + return res, fmt.Errorf("subnet %s not found in network %s", subnetID, cluster.Spec.Networking.NetworkID) } if res[subnet.Zone] != "" { @@ -1212,7 +1212,7 @@ func setupTopology(opt *NewClusterOptions, cluster *api.Cluster, allZones sets.S case api.CloudProviderOpenstack: tags := make(map[string]string) tags[openstack.TagClusterName] = cluster.Name - zoneToSubnetProviderID, err = getOpenstackZoneToSubnetProviderID(&cluster.Spec, allZones.List(), opt.UtilitySubnetIDs, tags) + zoneToSubnetProviderID, err = getOpenstackZoneToSubnetProviderID(cluster, allZones.List(), opt.UtilitySubnetIDs, tags) if err != nil { return nil, err } diff --git a/upup/pkg/fi/cloudup/openstack/cloud.go b/upup/pkg/fi/cloudup/openstack/cloud.go index b04c4b6f29..9f949022f3 100644 --- a/upup/pkg/fi/cloudup/openstack/cloud.go +++ b/upup/pkg/fi/cloudup/openstack/cloud.go @@ -55,7 +55,6 @@ import ( "k8s.io/kops/dnsprovider/pkg/dnsprovider/providers/openstack/designate" "k8s.io/kops/pkg/apis/kops" "k8s.io/kops/pkg/cloudinstances" - "k8s.io/kops/pkg/dns" "k8s.io/kops/upup/pkg/fi" "k8s.io/kops/util/pkg/vfs" ) @@ -321,7 +320,7 @@ var _ fi.Cloud = &openstackCloud{} var openstackCloudInstances = make(map[string]OpenstackCloud) -func NewOpenstackCloud(tags map[string]string, spec *kops.ClusterSpec, uagent string) (OpenstackCloud, error) { +func NewOpenstackCloud(tags map[string]string, cluster *kops.Cluster, uagent string) (OpenstackCloud, error) { config := vfs.OpenstackConfig{} region, err := config.GetRegion() @@ -348,9 +347,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.CloudProvider.Openstack != nil && spec.CloudProvider.Openstack.InsecureSkipVerify != nil { + if cluster != nil && cluster.Spec.CloudProvider.Openstack != nil && cluster.Spec.CloudProvider.Openstack.InsecureSkipVerify != nil { tlsconfig := &tls.Config{} - tlsconfig.InsecureSkipVerify = fi.ValueOf(spec.CloudProvider.Openstack.InsecureSkipVerify) + tlsconfig.InsecureSkipVerify = fi.ValueOf(cluster.Spec.CloudProvider.Openstack.InsecureSkipVerify) transport := &http.Transport{TLSClientConfig: tlsconfig} provider.HTTPClient = http.Client{ Transport: transport, @@ -364,10 +363,11 @@ func NewOpenstackCloud(tags map[string]string, spec *kops.ClusterSpec, uagent st return nil, fmt.Errorf("error building openstack authenticated client: %v", err) } - return buildClients(provider, tags, spec.CloudProvider.Openstack, config, region) + hasDNS := !cluster.IsGossip() && !cluster.UsesNoneDNS() + return buildClients(provider, tags, cluster.Spec.CloudProvider.Openstack, config, region, hasDNS) } -func buildClients(provider *gophercloud.ProviderClient, tags map[string]string, spec *kops.OpenstackSpec, config vfs.OpenstackConfig, region string) (OpenstackCloud, error) { +func buildClients(provider *gophercloud.ProviderClient, tags map[string]string, spec *kops.OpenstackSpec, config vfs.OpenstackConfig, region string, hasDNS bool) (OpenstackCloud, error) { cinderClient, err := os.NewBlockStorageV3(provider, gophercloud.EndpointOpts{ Type: "volumev3", Region: region, @@ -403,7 +403,7 @@ func buildClients(provider *gophercloud.ProviderClient, tags map[string]string, } var dnsClient *gophercloud.ServiceClient - if !dns.IsGossipClusterName(tags[TagClusterName]) { + if hasDNS { // TODO: This should be replaced with the environment variable methods as done above endpointOpt, err := config.GetServiceConfig("Designate") if err != nil { diff --git a/upup/pkg/fi/cloudup/openstack/cloud_test.go b/upup/pkg/fi/cloudup/openstack/cloud_test.go index fac80f582c..eafc470b8d 100644 --- a/upup/pkg/fi/cloudup/openstack/cloud_test.go +++ b/upup/pkg/fi/cloudup/openstack/cloud_test.go @@ -541,7 +541,7 @@ func Test_BuildClients(t *testing.T) { t.Run(g.name, func(t *testing.T) { - cloud, err := buildClients(provider, tags, g.spec, vfs.OpenstackConfig{}, "") + cloud, err := buildClients(provider, tags, g.spec, vfs.OpenstackConfig{}, "", false) if g.expectError { if err != nil { return diff --git a/upup/pkg/fi/cloudup/utils.go b/upup/pkg/fi/cloudup/utils.go index fe05b98dba..26b210316e 100644 --- a/upup/pkg/fi/cloudup/utils.go +++ b/upup/pkg/fi/cloudup/utils.go @@ -128,7 +128,7 @@ func BuildCloud(cluster *kops.Cluster) (fi.Cloud, error) { case kops.CloudProviderOpenstack: { cloudTags := map[string]string{openstack.TagClusterName: cluster.ObjectMeta.Name} - osc, err := openstack.NewOpenstackCloud(cloudTags, &cluster.Spec, "build-cloud") + osc, err := openstack.NewOpenstackCloud(cloudTags, cluster, "build-cloud") if err != nil { return nil, err }