Skip to content

Commit

Permalink
refactor kubevirt CCM config to hold infraKubeConfig path
Browse files Browse the repository at this point in the history
Signed-off-by: Sankalp Rangare <sankalprangare786@gmail.com>
  • Loading branch information
sankalp-r committed Jul 7, 2022
1 parent ec467b4 commit c672ba2
Show file tree
Hide file tree
Showing 4 changed files with 25 additions and 29 deletions.
5 changes: 2 additions & 3 deletions cmd/kubevirt-cloud-controller-manager/main.go
Original file line number Diff line number Diff line change
Expand Up @@ -23,8 +23,6 @@ package main
import (
"os"

"kubevirt.io/cloud-provider-kubevirt/pkg/provider"

"k8s.io/apimachinery/pkg/util/wait"
"k8s.io/cloud-provider"
"k8s.io/cloud-provider/app"
Expand All @@ -35,6 +33,8 @@ import (
_ "k8s.io/component-base/metrics/prometheus/clientgo" // load all the prometheus client-go plugins
_ "k8s.io/component-base/metrics/prometheus/version" // for version metric registration
"k8s.io/klog/v2"

_ "kubevirt.io/cloud-provider-kubevirt/pkg/provider"
)

func main() {
Expand All @@ -44,7 +44,6 @@ func main() {
}

fss := cliflag.NamedFlagSets{}
provider.AdditionalFlags(fss.FlagSet("additionalFlag"))
controllerInitializers := app.DefaultInitFuncConstructors

command := app.NewCloudControllerManagerCommand(ccmOptions, cloudInitializer, controllerInitializers, fss, wait.NeverStop)
Expand Down
2 changes: 1 addition & 1 deletion go.mod
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,6 @@ require (
github.com/golang/mock v1.6.0
github.com/onsi/ginkgo/v2 v2.1.4
github.com/onsi/gomega v1.19.0
github.com/spf13/pflag v1.0.5
gopkg.in/yaml.v2 v2.4.0
k8s.io/api v0.24.2
k8s.io/apimachinery v0.24.2
Expand Down Expand Up @@ -64,6 +63,7 @@ require (
github.com/prometheus/common v0.32.1 // indirect
github.com/prometheus/procfs v0.7.3 // indirect
github.com/spf13/cobra v1.4.0 // indirect
github.com/spf13/pflag v1.0.5 // indirect
go.etcd.io/etcd/api/v3 v3.5.1 // indirect
go.etcd.io/etcd/client/pkg/v3 v3.5.1 // indirect
go.etcd.io/etcd/client/v3 v3.5.1 // indirect
Expand Down
15 changes: 4 additions & 11 deletions pkg/provider/cloud.go
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,6 @@ import (
"io"
"os"

"github.com/spf13/pflag"
"gopkg.in/yaml.v2"
corev1 "k8s.io/api/core/v1"
"k8s.io/apimachinery/pkg/runtime"
Expand All @@ -22,10 +21,7 @@ const (
ProviderName = "kubevirt"
)

var (
scheme = runtime.NewScheme()
infraKubeConfigPath string
)
var scheme = runtime.NewScheme()

func init() {
cloudprovider.RegisterCloudProvider(ProviderName, kubevirtCloudProviderFactory)
Expand All @@ -40,6 +36,7 @@ type cloud struct {
}

type CloudConfig struct {
Kubeconfig string `yaml:"kubeconfig"`
LoadBalancer LoadBalancerConfig `yaml:"loadBalancer"`
InstancesV2 InstancesV2Config `yaml:"instancesV2"`
Namespace string `yaml:"namespace"`
Expand Down Expand Up @@ -94,7 +91,7 @@ func kubevirtCloudProviderFactory(config io.Reader) (cloudprovider.Interface, er
if err != nil {
return nil, fmt.Errorf("Failed to unmarshal cloud provider config: %v", err)
}
infraKubeConfig, err := getInfraKubeConfig()
infraKubeConfig, err := getInfraKubeConfig(cloudConf.Kubeconfig)
if err != nil {
return nil, err
}
Expand Down Expand Up @@ -186,11 +183,7 @@ func (c *cloud) HasClusterID() bool {
return true
}

func AdditionalFlags(fs *pflag.FlagSet) {
fs.StringVar(&infraKubeConfigPath, "infra-kubeconfig", infraKubeConfigPath, "The path to infra KubeConfig file")
}

var getInfraKubeConfig = func() (string, error) {
var getInfraKubeConfig = func(infraKubeConfigPath string) (string, error) {
config, err := os.Open(infraKubeConfigPath)
if err != nil {
return "", fmt.Errorf("Couldn't open infra-kubeconfig: %v", err)
Expand Down
32 changes: 18 additions & 14 deletions pkg/provider/cloud_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -30,14 +30,15 @@ users:
`

var (
ns = "aNamespace"
minimalConf = fmt.Sprintf("kubeconfig: |\n%s", indent(kubeconfig, " "))
loadbalancerConf = fmt.Sprintf("kubeconfig: |\n%s\nloadBalancer:\n enabled: %t\n creationPollInterval: %d", indent(kubeconfig, " "), false, 3)
instancesConf = fmt.Sprintf("kubeconfig: |\n%s\ninstancesV2:\n enabled: %t\n enableInstanceTypes: %t", indent(kubeconfig, " "), false, true)
zonesConf = fmt.Sprintf("kubeconfig: |\n%s\nzones:\n enabled: %t", indent(kubeconfig, " "), false)
namespaceConf = fmt.Sprintf("kubeconfig: |\n%s\nnamespace: %s", indent(kubeconfig, " "), ns)
allConf = fmt.Sprintf("kubeconfig: |\n%s\nloadBalancer:\n enabled: %t\ninstancesV2:\n enabled: %t\nnamespace: %s", indent(kubeconfig, " "), false, false, ns)
invalidKubeconf = "kubeconfig: bla"
ns = "aNamespace"
infraKubeConfigPath = "/testPath/infraKubeConfig"
minimalConf = fmt.Sprintf("kubeconfig: %s", infraKubeConfigPath)
loadbalancerConf = fmt.Sprintf("kubeconfig: %s\nloadBalancer:\n enabled: %t\n creationPollInterval: %d", infraKubeConfigPath, false, 3)
instancesConf = fmt.Sprintf("kubeconfig: %s\ninstancesV2:\n enabled: %t\n enableInstanceTypes: %t", infraKubeConfigPath, false, true)
zonesConf = fmt.Sprintf("kubeconfig: %s\nzones:\n enabled: %t", infraKubeConfigPath, false)
namespaceConf = fmt.Sprintf("kubeconfig: %s\nnamespace: %s", infraKubeConfigPath, ns)
allConf = fmt.Sprintf("kubeconfig: %s\nloadBalancer:\n enabled: %t\ninstancesV2:\n enabled: %t\nnamespace: %s", infraKubeConfigPath, false, false, ns)
invalidKubeconf = "bla"
)

func indent(s, indent string) string {
Expand All @@ -64,11 +65,11 @@ func TestNewCloudConfigFromBytes(t *testing.T) {
expectedCloudConfig CloudConfig
expectedError error
}{
{minimalConf, makeCloudConfig(kubeconfig, "", true, true, 5), nil},
{loadbalancerConf, makeCloudConfig(kubeconfig, "", false, true, 3), nil},
{instancesConf, makeCloudConfig(kubeconfig, "", true, false, 5), nil},
{namespaceConf, makeCloudConfig(kubeconfig, ns, true, true, 5), nil},
{allConf, makeCloudConfig(kubeconfig, ns, false, false, 5), nil},
{minimalConf, makeCloudConfig(infraKubeConfigPath, "", true, true, 5), nil},
{loadbalancerConf, makeCloudConfig(infraKubeConfigPath, "", false, true, 3), nil},
{instancesConf, makeCloudConfig(infraKubeConfigPath, "", true, false, 5), nil},
{namespaceConf, makeCloudConfig(infraKubeConfigPath, ns, true, true, 5), nil},
{allConf, makeCloudConfig(infraKubeConfigPath, ns, false, false, 5), nil},
}

for _, test := range tests {
Expand All @@ -91,7 +92,10 @@ func TestKubevirtCloudProviderFactory(t *testing.T) {
t.Errorf("Expected: 'No kubevirt cloud provider config file given', got '%v'", err)
}

_, err = kubevirtCloudProviderFactory(strings.NewReader(invalidKubeconf))
getInfraKubeConfig = func(infraKubeConfigPath string) (string, error) {
return invalidKubeconf, nil
}
_, err = kubevirtCloudProviderFactory(strings.NewReader(minimalConf))
if err == nil || !strings.Contains(err.Error(), "couldn't get version/kind; json parse error") {
t.Errorf("Expected error containing: 'couldn't get version/kind; json parse error', got '%v'", err)
}
Expand Down

0 comments on commit c672ba2

Please sign in to comment.