mirror of https://github.com/kubernetes/kops.git
openstack: Refactor DNS client initialization
This commit is contained in:
parent
61fd1289cd
commit
d9d78df5e7
|
@ -35,7 +35,7 @@ func (c *OpenstackModelContext) createCloud() (openstack.OpenstackCloud, error)
|
||||||
if c.cloud == nil {
|
if c.cloud == nil {
|
||||||
tags := make(map[string]string)
|
tags := make(map[string]string)
|
||||||
tags[openstack.TagClusterName] = c.ClusterName()
|
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 {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
|
|
|
@ -196,7 +196,7 @@ func NewCluster(opt *NewClusterOptions, clientset simple.Clientset) (*NewCluster
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
|
|
||||||
cluster := api.Cluster{
|
cluster := &api.Cluster{
|
||||||
ObjectMeta: v1.ObjectMeta{
|
ObjectMeta: v1.ObjectMeta{
|
||||||
Name: opt.ClusterName,
|
Name: opt.ClusterName,
|
||||||
},
|
},
|
||||||
|
@ -213,7 +213,7 @@ func NewCluster(opt *NewClusterOptions, clientset simple.Clientset) (*NewCluster
|
||||||
}
|
}
|
||||||
|
|
||||||
cluster.Spec.ConfigBase = opt.ConfigBase
|
cluster.Spec.ConfigBase = opt.ConfigBase
|
||||||
configBase, err := clientset.ConfigBaseFor(&cluster)
|
configBase, err := clientset.ConfigBaseFor(cluster)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, fmt.Errorf("error building ConfigBase for cluster: %v", err)
|
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 := make(map[string]string)
|
||||||
tags[openstack.TagClusterName] = cluster.GetName()
|
tags[openstack.TagClusterName] = cluster.GetName()
|
||||||
osCloud, err := openstack.NewOpenstackCloud(tags, &cluster.Spec, "openstackmodel")
|
osCloud, err := openstack.NewOpenstackCloud(tags, cluster, "openstackmodel")
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
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 {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
|
|
||||||
zoneToSubnetMap, err := setupZones(opt, &cluster, allZones)
|
zoneToSubnetMap, err := setupZones(opt, cluster, allZones)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
|
|
||||||
err = setupNetworking(opt, &cluster)
|
err = setupNetworking(opt, cluster)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
|
|
||||||
bastions, err := setupTopology(opt, &cluster, allZones)
|
bastions, err := setupTopology(opt, cluster, allZones)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
|
|
||||||
controlPlanes, err := setupControlPlane(opt, &cluster, zoneToSubnetMap)
|
controlPlanes, err := setupControlPlane(opt, cluster, zoneToSubnetMap)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
|
@ -396,12 +396,12 @@ func NewCluster(opt *NewClusterOptions, clientset simple.Clientset) (*NewCluster
|
||||||
cluster.Spec.Karpenter = &api.KarpenterConfig{
|
cluster.Spec.Karpenter = &api.KarpenterConfig{
|
||||||
Enabled: true,
|
Enabled: true,
|
||||||
}
|
}
|
||||||
nodes, err = setupKarpenterNodes(opt, &cluster, zoneToSubnetMap)
|
nodes, err = setupKarpenterNodes(opt, cluster, zoneToSubnetMap)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
case "cloudgroups":
|
case "cloudgroups":
|
||||||
nodes, err = setupNodes(opt, &cluster, zoneToSubnetMap)
|
nodes, err = setupNodes(opt, cluster, zoneToSubnetMap)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
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)
|
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 {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
|
|
||||||
err = setupAPI(opt, &cluster)
|
err = setupAPI(opt, cluster)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
|
@ -435,7 +435,7 @@ func NewCluster(opt *NewClusterOptions, clientset simple.Clientset) (*NewCluster
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
instanceGroup.Spec.Image, err = defaultImage(&cluster, channel, architecture)
|
instanceGroup.Spec.Image, err = defaultImage(cluster, channel, architecture)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
|
@ -445,7 +445,7 @@ func NewCluster(opt *NewClusterOptions, clientset simple.Clientset) (*NewCluster
|
||||||
// TODO: Clean up
|
// TODO: Clean up
|
||||||
if g.IsControlPlane() {
|
if g.IsControlPlane() {
|
||||||
if g.Spec.MachineType == "" {
|
if g.Spec.MachineType == "" {
|
||||||
g.Spec.MachineType, err = defaultMachineType(cloud, &cluster, ig)
|
g.Spec.MachineType, err = defaultMachineType(cloud, cluster, ig)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, fmt.Errorf("error assigning default machine type for control plane: %v", err)
|
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 {
|
} else if g.Spec.Role == api.InstanceGroupRoleBastion {
|
||||||
if g.Spec.MachineType == "" {
|
if g.Spec.MachineType == "" {
|
||||||
g.Spec.MachineType, err = defaultMachineType(cloud, &cluster, g)
|
g.Spec.MachineType, err = defaultMachineType(cloud, cluster, g)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, fmt.Errorf("error assigning default machine type for bastions: %v", err)
|
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")
|
return nil, fmt.Errorf("apiserver nodes requires the APIServerNodes feature flag to be enabled")
|
||||||
}
|
}
|
||||||
if g.Spec.MachineType == "" {
|
if g.Spec.MachineType == "" {
|
||||||
g.Spec.MachineType, err = defaultMachineType(cloud, &cluster, g)
|
g.Spec.MachineType, err = defaultMachineType(cloud, cluster, g)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, fmt.Errorf("error assigning default machine type for nodes: %v", err)
|
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{
|
result := NewClusterResult{
|
||||||
Cluster: &cluster,
|
Cluster: cluster,
|
||||||
InstanceGroups: instanceGroups,
|
InstanceGroups: instanceGroups,
|
||||||
Channel: channel,
|
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 {
|
if cluster.Spec.Networking.NetworkID == "" && len(opt.SubnetIDs) > 0 {
|
||||||
tags := make(map[string]string)
|
tags := make(map[string]string)
|
||||||
tags[openstack.TagClusterName] = cluster.Name
|
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 {
|
if err != nil {
|
||||||
return fmt.Errorf("error loading cloud: %v", err)
|
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 {
|
if len(opt.Zones) > 0 && len(opt.SubnetIDs) > 0 {
|
||||||
tags := make(map[string]string)
|
tags := make(map[string]string)
|
||||||
tags[openstack.TagClusterName] = cluster.Name
|
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 {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
|
@ -783,20 +783,20 @@ func getAWSZoneToSubnetProviderID(VPCID string, region string, subnetIDs []strin
|
||||||
return res, nil
|
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)
|
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 {
|
if err != nil {
|
||||||
return res, fmt.Errorf("error loading cloud: %v", err)
|
return res, fmt.Errorf("error loading cloud: %v", err)
|
||||||
}
|
}
|
||||||
osCloud.UseZones(zones)
|
osCloud.UseZones(zones)
|
||||||
|
|
||||||
networkInfo, err := osCloud.FindVPCInfo(spec.Networking.NetworkID)
|
networkInfo, err := osCloud.FindVPCInfo(cluster.Spec.Networking.NetworkID)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return res, fmt.Errorf("error describing Network: %v", err)
|
return res, fmt.Errorf("error describing Network: %v", err)
|
||||||
}
|
}
|
||||||
if networkInfo == nil {
|
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)
|
subnetByID := make(map[string]*fi.SubnetInfo)
|
||||||
|
@ -807,7 +807,7 @@ func getOpenstackZoneToSubnetProviderID(spec *api.ClusterSpec, zones []string, s
|
||||||
for _, subnetID := range subnetIDs {
|
for _, subnetID := range subnetIDs {
|
||||||
subnet, ok := subnetByID[subnetID]
|
subnet, ok := subnetByID[subnetID]
|
||||||
if !ok {
|
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] != "" {
|
if res[subnet.Zone] != "" {
|
||||||
|
@ -1212,7 +1212,7 @@ func setupTopology(opt *NewClusterOptions, cluster *api.Cluster, allZones sets.S
|
||||||
case api.CloudProviderOpenstack:
|
case api.CloudProviderOpenstack:
|
||||||
tags := make(map[string]string)
|
tags := make(map[string]string)
|
||||||
tags[openstack.TagClusterName] = cluster.Name
|
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 {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
|
|
|
@ -55,7 +55,6 @@ import (
|
||||||
"k8s.io/kops/dnsprovider/pkg/dnsprovider/providers/openstack/designate"
|
"k8s.io/kops/dnsprovider/pkg/dnsprovider/providers/openstack/designate"
|
||||||
"k8s.io/kops/pkg/apis/kops"
|
"k8s.io/kops/pkg/apis/kops"
|
||||||
"k8s.io/kops/pkg/cloudinstances"
|
"k8s.io/kops/pkg/cloudinstances"
|
||||||
"k8s.io/kops/pkg/dns"
|
|
||||||
"k8s.io/kops/upup/pkg/fi"
|
"k8s.io/kops/upup/pkg/fi"
|
||||||
"k8s.io/kops/util/pkg/vfs"
|
"k8s.io/kops/util/pkg/vfs"
|
||||||
)
|
)
|
||||||
|
@ -321,7 +320,7 @@ var _ fi.Cloud = &openstackCloud{}
|
||||||
|
|
||||||
var openstackCloudInstances = make(map[string]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{}
|
config := vfs.OpenstackConfig{}
|
||||||
|
|
||||||
region, err := config.GetRegion()
|
region, err := config.GetRegion()
|
||||||
|
@ -348,9 +347,9 @@ func NewOpenstackCloud(tags map[string]string, spec *kops.ClusterSpec, uagent st
|
||||||
provider.UserAgent = ua
|
provider.UserAgent = ua
|
||||||
klog.V(4).Infof("Using user-agent %s", ua.Join())
|
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 := &tls.Config{}
|
||||||
tlsconfig.InsecureSkipVerify = fi.ValueOf(spec.CloudProvider.Openstack.InsecureSkipVerify)
|
tlsconfig.InsecureSkipVerify = fi.ValueOf(cluster.Spec.CloudProvider.Openstack.InsecureSkipVerify)
|
||||||
transport := &http.Transport{TLSClientConfig: tlsconfig}
|
transport := &http.Transport{TLSClientConfig: tlsconfig}
|
||||||
provider.HTTPClient = http.Client{
|
provider.HTTPClient = http.Client{
|
||||||
Transport: transport,
|
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 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{
|
cinderClient, err := os.NewBlockStorageV3(provider, gophercloud.EndpointOpts{
|
||||||
Type: "volumev3",
|
Type: "volumev3",
|
||||||
Region: region,
|
Region: region,
|
||||||
|
@ -403,7 +403,7 @@ func buildClients(provider *gophercloud.ProviderClient, tags map[string]string,
|
||||||
}
|
}
|
||||||
|
|
||||||
var dnsClient *gophercloud.ServiceClient
|
var dnsClient *gophercloud.ServiceClient
|
||||||
if !dns.IsGossipClusterName(tags[TagClusterName]) {
|
if hasDNS {
|
||||||
// TODO: This should be replaced with the environment variable methods as done above
|
// TODO: This should be replaced with the environment variable methods as done above
|
||||||
endpointOpt, err := config.GetServiceConfig("Designate")
|
endpointOpt, err := config.GetServiceConfig("Designate")
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
|
|
@ -541,7 +541,7 @@ func Test_BuildClients(t *testing.T) {
|
||||||
|
|
||||||
t.Run(g.name, func(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 g.expectError {
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return
|
return
|
||||||
|
|
|
@ -128,7 +128,7 @@ func BuildCloud(cluster *kops.Cluster) (fi.Cloud, error) {
|
||||||
case kops.CloudProviderOpenstack:
|
case kops.CloudProviderOpenstack:
|
||||||
{
|
{
|
||||||
cloudTags := map[string]string{openstack.TagClusterName: cluster.ObjectMeta.Name}
|
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 {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue