Fix cluster validation dependency on local kubeconfig

This commit is contained in:
Charles-Edouard Brétéché 2020-11-11 21:11:54 +01:00
parent f7e8458e31
commit 709e1b6cbd
5 changed files with 11 additions and 19 deletions

View File

@ -265,7 +265,7 @@ func RunDeleteInstance(ctx context.Context, f *util.Factory, out io.Writer, opti
var clusterValidator validation.ClusterValidator
if !options.CloudOnly {
clusterValidator, err = validation.NewClusterValidator(cluster, cloud, list, k8sClient)
clusterValidator, err = validation.NewClusterValidator(cluster, cloud, list, config, k8sClient)
if err != nil {
return fmt.Errorf("cannot create cluster validator: %v", err)
}

View File

@ -426,7 +426,7 @@ func RunRollingUpdateCluster(ctx context.Context, f *util.Factory, out io.Writer
var clusterValidator validation.ClusterValidator
if !options.CloudOnly {
clusterValidator, err = validation.NewClusterValidator(cluster, cloud, list, k8sClient)
clusterValidator, err = validation.NewClusterValidator(cluster, cloud, list, config, k8sClient)
if err != nil {
return fmt.Errorf("cannot create cluster validator: %v", err)
}

View File

@ -155,7 +155,7 @@ func RunValidateCluster(ctx context.Context, f *util.Factory, cmd *cobra.Command
timeout := time.Now().Add(options.wait)
pollInterval := 10 * time.Second
validator, err := validation.NewClusterValidator(cluster, cloud, list, k8sClient)
validator, err := validation.NewClusterValidator(cluster, cloud, list, config, k8sClient)
if err != nil {
return nil, fmt.Errorf("unexpected error creating validatior: %v", err)
}

View File

@ -24,13 +24,13 @@ import (
"strings"
"k8s.io/apimachinery/pkg/runtime"
"k8s.io/client-go/rest"
"k8s.io/client-go/tools/pager"
"k8s.io/kops/upup/pkg/fi"
v1 "k8s.io/api/core/v1"
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
"k8s.io/client-go/kubernetes"
"k8s.io/client-go/tools/clientcmd"
"k8s.io/klog/v2"
"k8s.io/kops/pkg/apis/kops"
"k8s.io/kops/pkg/cloudinstances"
@ -60,6 +60,7 @@ type clusterValidatorImpl struct {
cluster *kops.Cluster
cloud fi.Cloud
instanceGroups []*kops.InstanceGroup
config *rest.Config
k8sClient kubernetes.Interface
}
@ -77,15 +78,7 @@ type ValidationNode struct {
}
// hasPlaceHolderIP checks if the API DNS has been updated.
func hasPlaceHolderIP(clusterName string) (bool, error) {
config, err := clientcmd.NewNonInteractiveDeferredLoadingClientConfig(
clientcmd.NewDefaultClientConfigLoadingRules(),
&clientcmd.ConfigOverrides{CurrentContext: clusterName}).ClientConfig()
if err != nil {
return false, fmt.Errorf("error building configuration: %v", err)
}
func hasPlaceHolderIP(config *rest.Config) (bool, error) {
apiAddr, err := url.Parse(config.Host)
if err != nil {
return true, fmt.Errorf("unable to parse Kubernetes cluster API URL: %v", err)
@ -104,7 +97,7 @@ func hasPlaceHolderIP(clusterName string) (bool, error) {
return false, nil
}
func NewClusterValidator(cluster *kops.Cluster, cloud fi.Cloud, instanceGroupList *kops.InstanceGroupList, k8sClient kubernetes.Interface) (ClusterValidator, error) {
func NewClusterValidator(cluster *kops.Cluster, cloud fi.Cloud, instanceGroupList *kops.InstanceGroupList, config *rest.Config, k8sClient kubernetes.Interface) (ClusterValidator, error) {
var instanceGroups []*kops.InstanceGroup
for i := range instanceGroupList.Items {
@ -120,6 +113,7 @@ func NewClusterValidator(cluster *kops.Cluster, cloud fi.Cloud, instanceGroupLis
cluster: cluster,
cloud: cloud,
instanceGroups: instanceGroups,
config: config,
k8sClient: k8sClient,
}, nil
}
@ -133,9 +127,7 @@ func (v *clusterValidatorImpl) Validate() (*ValidationCluster, error) {
// Do not use if we are running gossip
if !dns.IsGossipHostname(clusterName) {
contextName := clusterName
hasPlaceHolderIPAddress, err := hasPlaceHolderIP(contextName)
hasPlaceHolderIPAddress, err := hasPlaceHolderIP(v.config)
if err != nil {
return nil, err
}

View File

@ -121,7 +121,7 @@ func testValidate(t *testing.T, groups map[string]*cloudinstances.CloudInstanceG
mockcloud := BuildMockCloud(t, groups, cluster, instanceGroups)
validator, err := NewClusterValidator(cluster, mockcloud, &kopsapi.InstanceGroupList{Items: instanceGroups}, fake.NewSimpleClientset(objects...))
validator, err := NewClusterValidator(cluster, mockcloud, &kopsapi.InstanceGroupList{Items: instanceGroups}, nil, fake.NewSimpleClientset(objects...))
if err != nil {
return nil, err
}
@ -145,7 +145,7 @@ func Test_ValidateCloudGroupMissing(t *testing.T) {
mockcloud := BuildMockCloud(t, nil, cluster, instanceGroups)
validator, err := NewClusterValidator(cluster, mockcloud, &kopsapi.InstanceGroupList{Items: instanceGroups}, fake.NewSimpleClientset())
validator, err := NewClusterValidator(cluster, mockcloud, &kopsapi.InstanceGroupList{Items: instanceGroups}, nil, fake.NewSimpleClientset())
require.NoError(t, err)
v, err := validator.Validate()
require.NoError(t, err)