mirror of https://github.com/kubernetes/kops.git
Require fi.Cloud to implement kops.StatusStore
This commit is contained in:
parent
4090c07e01
commit
1dab19f499
|
@ -21,14 +21,7 @@ go_library(
|
|||
"//pkg/client/simple:go_default_library",
|
||||
"//pkg/commands/helpers:go_default_library",
|
||||
"//pkg/featureflag:go_default_library",
|
||||
"//pkg/resources/digitalocean:go_default_library",
|
||||
"//upup/pkg/fi/cloudup:go_default_library",
|
||||
"//upup/pkg/fi/cloudup/aliup:go_default_library",
|
||||
"//upup/pkg/fi/cloudup/awstasks:go_default_library",
|
||||
"//upup/pkg/fi/cloudup/awsup:go_default_library",
|
||||
"//upup/pkg/fi/cloudup/azure:go_default_library",
|
||||
"//upup/pkg/fi/cloudup/gce:go_default_library",
|
||||
"//upup/pkg/fi/cloudup/openstack:go_default_library",
|
||||
"//util/pkg/reflectutils:go_default_library",
|
||||
"//vendor/github.com/spf13/cobra:go_default_library",
|
||||
"//vendor/k8s.io/apimachinery/pkg/apis/meta/v1:go_default_library",
|
||||
|
|
|
@ -17,17 +17,8 @@ limitations under the License.
|
|||
package commands
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
|
||||
"k8s.io/kops/pkg/apis/kops"
|
||||
"k8s.io/kops/pkg/resources/digitalocean"
|
||||
"k8s.io/kops/upup/pkg/fi/cloudup"
|
||||
"k8s.io/kops/upup/pkg/fi/cloudup/aliup"
|
||||
"k8s.io/kops/upup/pkg/fi/cloudup/awstasks"
|
||||
"k8s.io/kops/upup/pkg/fi/cloudup/awsup"
|
||||
"k8s.io/kops/upup/pkg/fi/cloudup/azure"
|
||||
"k8s.io/kops/upup/pkg/fi/cloudup/gce"
|
||||
"k8s.io/kops/upup/pkg/fi/cloudup/openstack"
|
||||
)
|
||||
|
||||
// CloudDiscoveryStatusStore implements status.Store by inspecting cloud objects.
|
||||
|
@ -43,39 +34,7 @@ func (s *CloudDiscoveryStatusStore) GetApiIngressStatus(cluster *kops.Cluster) (
|
|||
return nil, err
|
||||
}
|
||||
|
||||
if aliCloud, ok := cloud.(aliup.ALICloud); ok {
|
||||
return aliCloud.GetApiIngressStatus(cluster)
|
||||
}
|
||||
|
||||
if gceCloud, ok := cloud.(gce.GCECloud); ok {
|
||||
return gceCloud.GetApiIngressStatus(cluster)
|
||||
}
|
||||
|
||||
if awsCloud, ok := cloud.(awsup.AWSCloud); ok {
|
||||
|
||||
var ingresses []kops.ApiIngressStatus
|
||||
if lbDnsName, err := awstasks.FindDNSName(awsCloud, cluster); err != nil {
|
||||
return nil, fmt.Errorf("error finding aws DNSName: %v", err)
|
||||
} else if lbDnsName != "" {
|
||||
ingresses = append(ingresses, kops.ApiIngressStatus{Hostname: lbDnsName})
|
||||
}
|
||||
|
||||
return ingresses, nil
|
||||
}
|
||||
|
||||
if azureCloud, ok := cloud.(azure.AzureCloud); ok {
|
||||
return azureCloud.GetApiIngressStatus(cluster)
|
||||
}
|
||||
|
||||
if osCloud, ok := cloud.(openstack.OpenstackCloud); ok {
|
||||
return osCloud.GetApiIngressStatus(cluster)
|
||||
}
|
||||
|
||||
if doCloud, ok := cloud.(*digitalocean.Cloud); ok {
|
||||
return doCloud.GetApiIngressStatus(cluster)
|
||||
}
|
||||
|
||||
return nil, fmt.Errorf("API Ingress Status not implemented for %T", cloud)
|
||||
return cloud.GetApiIngressStatus(cluster)
|
||||
}
|
||||
|
||||
// FindClusterStatus discovers the status of the cluster, by inspecting the cloud objects
|
||||
|
@ -85,28 +44,5 @@ func (s *CloudDiscoveryStatusStore) FindClusterStatus(cluster *kops.Cluster) (*k
|
|||
return nil, err
|
||||
}
|
||||
|
||||
if gceCloud, ok := cloud.(gce.GCECloud); ok {
|
||||
return gceCloud.FindClusterStatus(cluster)
|
||||
}
|
||||
|
||||
if awsCloud, ok := cloud.(awsup.AWSCloud); ok {
|
||||
return awsCloud.FindClusterStatus(cluster)
|
||||
}
|
||||
|
||||
if aliCloud, ok := cloud.(aliup.ALICloud); ok {
|
||||
return aliCloud.FindClusterStatus(cluster)
|
||||
}
|
||||
|
||||
if azureCloud, ok := cloud.(azure.AzureCloud); ok {
|
||||
return azureCloud.FindClusterStatus(cluster)
|
||||
}
|
||||
|
||||
if osCloud, ok := cloud.(openstack.OpenstackCloud); ok {
|
||||
return osCloud.FindClusterStatus(cluster)
|
||||
}
|
||||
|
||||
if doCloud, ok := cloud.(*digitalocean.Cloud); ok {
|
||||
return doCloud.FindClusterStatus(cluster)
|
||||
}
|
||||
return nil, fmt.Errorf("etcd Status not implemented for %T", cloud)
|
||||
return cloud.FindClusterStatus(cluster)
|
||||
}
|
||||
|
|
|
@ -24,6 +24,8 @@ import (
|
|||
)
|
||||
|
||||
type Cloud interface {
|
||||
kops.StatusStore
|
||||
|
||||
ProviderID() kops.CloudProviderID
|
||||
|
||||
DNS() (dnsprovider.Interface, error)
|
||||
|
|
|
@ -87,7 +87,6 @@ go_library(
|
|||
importpath = "k8s.io/kops/upup/pkg/fi/cloudup/awstasks",
|
||||
visibility = ["//visibility:public"],
|
||||
deps = [
|
||||
"//pkg/apis/kops:go_default_library",
|
||||
"//pkg/diff:go_default_library",
|
||||
"//pkg/featureflag:go_default_library",
|
||||
"//pkg/pki:go_default_library",
|
||||
|
|
|
@ -24,7 +24,6 @@ import (
|
|||
"github.com/aws/aws-sdk-go/aws"
|
||||
"github.com/aws/aws-sdk-go/service/route53"
|
||||
"k8s.io/klog/v2"
|
||||
"k8s.io/kops/pkg/apis/kops"
|
||||
"k8s.io/kops/upup/pkg/fi"
|
||||
"k8s.io/kops/upup/pkg/fi/cloudup/awsup"
|
||||
"k8s.io/kops/upup/pkg/fi/cloudup/cloudformation"
|
||||
|
@ -130,49 +129,6 @@ func (e *DNSName) Find(c *fi.Context) (*DNSName, error) {
|
|||
return actual, nil
|
||||
}
|
||||
|
||||
func FindDNSName(awsCloud awsup.AWSCloud, cluster *kops.Cluster) (string, error) {
|
||||
name := "api." + cluster.Name
|
||||
|
||||
lb, err := FindElasticLoadBalancerByNameTag(awsCloud, cluster)
|
||||
|
||||
if err != nil {
|
||||
return "", fmt.Errorf("error looking for AWS ELB: %v", err)
|
||||
}
|
||||
|
||||
if lb == nil {
|
||||
return "", nil
|
||||
}
|
||||
|
||||
lbDnsName := aws.StringValue(lb.getDNSName())
|
||||
|
||||
if lbDnsName == "" {
|
||||
return "", fmt.Errorf("found ELB %q, but it did not have a DNSName", name)
|
||||
}
|
||||
|
||||
return lbDnsName, nil
|
||||
}
|
||||
|
||||
func FindElasticLoadBalancerByNameTag(awsCloud awsup.AWSCloud, cluster *kops.Cluster) (DNSTarget, error) {
|
||||
name := "api." + cluster.Name
|
||||
if cluster.Spec.API == nil || cluster.Spec.API.LoadBalancer == nil {
|
||||
return nil, nil
|
||||
}
|
||||
if cluster.Spec.API.LoadBalancer.Class == kops.LoadBalancerClassClassic {
|
||||
if lb, err := awsCloud.FindELBByNameTag(name); err != nil {
|
||||
return nil, fmt.Errorf("error looking for AWS ELB: %v", err)
|
||||
} else if lb != nil {
|
||||
return &ClassicLoadBalancer{Name: fi.String(name), DNSName: lb.DNSName}, nil
|
||||
}
|
||||
} else if cluster.Spec.API.LoadBalancer.Class == kops.LoadBalancerClassNetwork {
|
||||
if lb, err := awsCloud.FindELBV2ByNameTag(name); err != nil {
|
||||
return nil, fmt.Errorf("error looking for AWS NLB: %v", err)
|
||||
} else if lb != nil {
|
||||
return &NetworkLoadBalancer{Name: fi.String(name), DNSName: lb.DNSName}, nil
|
||||
}
|
||||
}
|
||||
return nil, nil
|
||||
}
|
||||
|
||||
func findDNSTarget(cloud awsup.AWSCloud, aliasTarget *route53.AliasTarget, dnsName string, targetDNSName *string) (DNSTarget, error) {
|
||||
//TODO: I would like to search dnsName for presence of ".elb" or ".nlb" to simply searching, however both nlb and elb have .elb. in the name at present
|
||||
if ELB, err := findDNSTargetELB(cloud, aliasTarget, dnsName, targetDNSName); err != nil {
|
||||
|
|
|
@ -1868,6 +1868,42 @@ func findVPCInfo(c AWSCloud, vpcID string) (*fi.VPCInfo, error) {
|
|||
return vpcInfo, nil
|
||||
}
|
||||
|
||||
func (c *awsCloudImplementation) GetApiIngressStatus(cluster *kops.Cluster) ([]kops.ApiIngressStatus, error) {
|
||||
return getApiIngressStatus(c, cluster)
|
||||
}
|
||||
|
||||
func getApiIngressStatus(c AWSCloud, cluster *kops.Cluster) ([]kops.ApiIngressStatus, error) {
|
||||
var ingresses []kops.ApiIngressStatus
|
||||
if lbDnsName, err := findDNSName(c, cluster); err != nil {
|
||||
return nil, fmt.Errorf("error finding aws DNSName: %v", err)
|
||||
} else if lbDnsName != "" {
|
||||
ingresses = append(ingresses, kops.ApiIngressStatus{Hostname: lbDnsName})
|
||||
}
|
||||
|
||||
return ingresses, nil
|
||||
}
|
||||
|
||||
func findDNSName(c AWSCloud, cluster *kops.Cluster) (string, error) {
|
||||
name := "api." + cluster.Name
|
||||
if cluster.Spec.API == nil || cluster.Spec.API.LoadBalancer == nil {
|
||||
return "", nil
|
||||
}
|
||||
if cluster.Spec.API.LoadBalancer.Class == kops.LoadBalancerClassClassic {
|
||||
if lb, err := c.FindELBByNameTag(name); err != nil {
|
||||
return "", fmt.Errorf("error looking for AWS ELB: %v", err)
|
||||
} else if lb != nil {
|
||||
return aws.StringValue(lb.DNSName), nil
|
||||
}
|
||||
} else if cluster.Spec.API.LoadBalancer.Class == kops.LoadBalancerClassNetwork {
|
||||
if lb, err := c.FindELBV2ByNameTag(name); err != nil {
|
||||
return "", fmt.Errorf("error looking for AWS NLB: %v", err)
|
||||
} else if lb != nil {
|
||||
return aws.StringValue(lb.DNSName), nil
|
||||
}
|
||||
}
|
||||
return "", nil
|
||||
}
|
||||
|
||||
// DefaultInstanceType determines an instance type for the specified cluster & instance group
|
||||
func (c *awsCloudImplementation) DefaultInstanceType(cluster *kops.Cluster, ig *kops.InstanceGroup) (string, error) {
|
||||
var candidates []string
|
||||
|
|
|
@ -19,20 +19,19 @@ package awsup
|
|||
import (
|
||||
"fmt"
|
||||
|
||||
"github.com/aws/aws-sdk-go/service/elb"
|
||||
"github.com/aws/aws-sdk-go/service/elbv2"
|
||||
"github.com/aws/aws-sdk-go/service/eventbridge/eventbridgeiface"
|
||||
"github.com/aws/aws-sdk-go/service/sqs/sqsiface"
|
||||
|
||||
"github.com/aws/aws-sdk-go/aws"
|
||||
"github.com/aws/aws-sdk-go/service/autoscaling/autoscalingiface"
|
||||
"github.com/aws/aws-sdk-go/service/cloudformation"
|
||||
"github.com/aws/aws-sdk-go/service/ec2"
|
||||
"github.com/aws/aws-sdk-go/service/ec2/ec2iface"
|
||||
"github.com/aws/aws-sdk-go/service/elb"
|
||||
"github.com/aws/aws-sdk-go/service/elb/elbiface"
|
||||
"github.com/aws/aws-sdk-go/service/elbv2"
|
||||
"github.com/aws/aws-sdk-go/service/elbv2/elbv2iface"
|
||||
"github.com/aws/aws-sdk-go/service/eventbridge/eventbridgeiface"
|
||||
"github.com/aws/aws-sdk-go/service/iam/iamiface"
|
||||
"github.com/aws/aws-sdk-go/service/route53/route53iface"
|
||||
"github.com/aws/aws-sdk-go/service/sqs/sqsiface"
|
||||
v1 "k8s.io/api/core/v1"
|
||||
"k8s.io/klog/v2"
|
||||
"k8s.io/kops/dnsprovider/pkg/dnsprovider"
|
||||
|
@ -302,6 +301,10 @@ func (c *MockAWSCloud) FindVPCInfo(id string) (*fi.VPCInfo, error) {
|
|||
return findVPCInfo(c, id)
|
||||
}
|
||||
|
||||
func (c *MockAWSCloud) GetApiIngressStatus(cluster *kops.Cluster) ([]kops.ApiIngressStatus, error) {
|
||||
return getApiIngressStatus(c, cluster)
|
||||
}
|
||||
|
||||
// DefaultInstanceType determines an instance type for the specified cluster & instance group
|
||||
func (c *MockAWSCloud) DefaultInstanceType(cluster *kops.Cluster, ig *kops.InstanceGroup) (string, error) {
|
||||
switch ig.Spec.Role {
|
||||
|
|
Loading…
Reference in New Issue