Skip to content

Commit bf09517

Browse files
authored
refactor KubeVirt options parsing and add KubeVirt cloud config (kubermatic#1045)
Signed-off-by: Marcin Franczyk <[email protected]>
1 parent 7397c05 commit bf09517

File tree

3 files changed

+54
-10
lines changed

3 files changed

+54
-10
lines changed

pkg/cloudprovider/provider/kubevirt/provider.go

Lines changed: 19 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -71,7 +71,8 @@ func New(configVarResolver *providerconfig.ConfigVarResolver) cloudprovidertypes
7171
}
7272

7373
type Config struct {
74-
Kubeconfig rest.Config
74+
Kubeconfig string
75+
RestConfig *rest.Config
7576
DNSConfig *corev1.PodDNSConfig
7677
DNSPolicy corev1.DNSPolicy
7778
CPUs string
@@ -132,9 +133,9 @@ func (p *provider) getConfig(s v1alpha1.ProviderSpec) (*Config, *providerconfigt
132133
return nil, nil, err
133134
}
134135
config := Config{}
135-
configString, err := p.configVarResolver.GetConfigVarStringValueOrEnv(rawConfig.Kubeconfig, "KUBEVIRT_KUBECONFIG")
136+
config.Kubeconfig, err = p.configVarResolver.GetConfigVarStringValueOrEnv(rawConfig.Kubeconfig, "KUBEVIRT_KUBECONFIG")
136137
if err != nil {
137-
return nil, nil, fmt.Errorf(`failed to get value of "config" field: %v`, err)
138+
return nil, nil, fmt.Errorf(`failed to get value of "kubeconfig" field: %v`, err)
138139
}
139140
config.CPUs, err = p.configVarResolver.GetConfigVarStringValue(rawConfig.CPUs)
140141
if err != nil {
@@ -163,11 +164,10 @@ func (p *provider) getConfig(s v1alpha1.ProviderSpec) (*Config, *providerconfigt
163164
if err != nil {
164165
return nil, nil, fmt.Errorf(`failed to get value of "storageClassName" field: %v`, err)
165166
}
166-
restConfig, err := clientcmd.RESTConfigFromKubeConfig([]byte(configString))
167+
config.RestConfig, err = clientcmd.RESTConfigFromKubeConfig([]byte(config.Kubeconfig))
167168
if err != nil {
168169
return nil, nil, fmt.Errorf("failed to decode kubeconfig: %v", err)
169170
}
170-
config.Kubeconfig = *restConfig
171171

172172
dnsPolicyString, err := p.configVarResolver.GetConfigVarStringValue(rawConfig.DNSPolicy)
173173
if err != nil {
@@ -194,7 +194,7 @@ func (p *provider) Get(machine *v1alpha1.Machine, _ *cloudprovidertypes.Provider
194194
Message: fmt.Sprintf("Failed to parse MachineSpec, due to %v", err),
195195
}
196196
}
197-
sigClient, err := client.New(&c.Kubeconfig, client.Options{})
197+
sigClient, err := client.New(c.RestConfig, client.Options{})
198198
if err != nil {
199199
return nil, fmt.Errorf("failed to get kubevirt client: %v", err)
200200
}
@@ -255,7 +255,7 @@ func (p *provider) Validate(spec v1alpha1.MachineSpec) error {
255255
if _, err := parseResources(c.CPUs, c.Memory); err != nil {
256256
return err
257257
}
258-
sigClient, err := client.New(&c.Kubeconfig, client.Options{})
258+
sigClient, err := client.New(c.RestConfig, client.Options{})
259259
if err != nil {
260260
return fmt.Errorf("failed to get kubevirt client: %v", err)
261261
}
@@ -281,7 +281,16 @@ func (p *provider) AddDefaults(spec v1alpha1.MachineSpec) (v1alpha1.MachineSpec,
281281
}
282282

283283
func (p *provider) GetCloudConfig(spec v1alpha1.MachineSpec) (config string, name string, err error) {
284-
return "", "", nil
284+
c, _, err := p.getConfig(spec.ProviderSpec)
285+
if err != nil {
286+
return "", "", fmt.Errorf("failed to parse config: %v", err)
287+
}
288+
cc := kubevirttypes.CloudConfig{
289+
Kubeconfig: c.Kubeconfig,
290+
}
291+
ccs, err := cc.String()
292+
293+
return ccs, string(providerconfigtypes.CloudProviderExternal), err
285294
}
286295

287296
func (p *provider) MachineMetricsLabels(machine *v1alpha1.Machine) (map[string]string, error) {
@@ -425,7 +434,7 @@ func (p *provider) Create(machine *v1alpha1.Machine, _ *cloudprovidertypes.Provi
425434
},
426435
}
427436

428-
sigClient, err := client.New(&c.Kubeconfig, client.Options{})
437+
sigClient, err := client.New(c.RestConfig, client.Options{})
429438
if err != nil {
430439
return nil, fmt.Errorf("failed to get kubevirt client: %v", err)
431440
}
@@ -458,7 +467,7 @@ func (p *provider) Cleanup(machine *v1alpha1.Machine, _ *cloudprovidertypes.Prov
458467
Message: fmt.Sprintf("Failed to parse MachineSpec, due to %v", err),
459468
}
460469
}
461-
sigClient, err := client.New(&c.Kubeconfig, client.Options{})
470+
sigClient, err := client.New(c.RestConfig, client.Options{})
462471
if err != nil {
463472
return false, fmt.Errorf("failed to get kubevirt client: %v", err)
464473
}
Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,34 @@
1+
/*
2+
Copyright 2021 The Machine Controller Authors.
3+
4+
Licensed under the Apache License, Version 2.0 (the "License");
5+
you may not use this file except in compliance with the License.
6+
You may obtain a copy of the License at
7+
8+
http://www.apache.org/licenses/LICENSE-2.0
9+
10+
Unless required by applicable law or agreed to in writing, software
11+
distributed under the License is distributed on an "AS IS" BASIS,
12+
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13+
See the License for the specific language governing permissions and
14+
limitations under the License.
15+
*/
16+
17+
package types
18+
19+
import (
20+
"gopkg.in/yaml.v3"
21+
)
22+
23+
type CloudConfig struct {
24+
// Kubeconfig used to connect to the cluster that runs KubeVirt
25+
Kubeconfig string `yaml:"kubeconfig"`
26+
}
27+
28+
func (c *CloudConfig) String() (string, error) {
29+
out, err := yaml.Marshal(c)
30+
if err != nil {
31+
return "", err
32+
}
33+
return string(out), nil
34+
}

pkg/providerconfig/types/types.go

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -59,6 +59,7 @@ const (
5959
CloudProviderAnexia CloudProvider = "anexia"
6060
CloudProviderScaleway CloudProvider = "scaleway"
6161
CloudProviderBaremetal CloudProvider = "baremetal"
62+
CloudProviderExternal CloudProvider = "external"
6263
)
6364

6465
var (

0 commit comments

Comments
 (0)