Skip to content

Commit cc24b29

Browse files
alvaroalemankubermatic-bot
authored andcommitted
Kubeivirt provider: Use dynamic client from controller-runtime (#462)
The main purpose of this change is to get rid of another transient dependency on a specific client-go version.
1 parent 1963cf4 commit cc24b29

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

61 files changed

+27
-8345
lines changed

Gopkg.lock

Lines changed: 3 additions & 28 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

pkg/cloudprovider/provider/kubevirt/provider.go

Lines changed: 24 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
package kubevirt
22

33
import (
4+
"context"
45
"encoding/json"
56
"fmt"
67
"strconv"
@@ -18,9 +19,9 @@ import (
1819
"k8s.io/apimachinery/pkg/types"
1920
"k8s.io/client-go/rest"
2021
"k8s.io/client-go/tools/clientcmd"
22+
"sigs.k8s.io/controller-runtime/pkg/client"
2123

2224
kubevirtv1 "kubevirt.io/kubevirt/pkg/api/v1"
23-
"kubevirt.io/kubevirt/pkg/kubecli"
2425

2526
"sigs.k8s.io/cluster-api/pkg/apis/cluster/common"
2627
"sigs.k8s.io/cluster-api/pkg/apis/cluster/v1alpha1"
@@ -133,19 +134,20 @@ func (p *provider) Get(machine *v1alpha1.Machine) (instance.Instance, error) {
133134
Message: fmt.Sprintf("Failed to parse MachineSpec, due to %v", err),
134135
}
135136
}
136-
client, err := kubecli.GetKubevirtClientFromRESTConfig(&c.Config)
137+
client, err := client.New(&c.Config, client.Options{})
137138
if err != nil {
138139
return nil, fmt.Errorf("failed to get kubevirt client: %v", err)
139140
}
141+
ctx := context.Background()
140142

141-
virtualMachineInstance, err := client.VirtualMachineInstance(c.Namespace).Get(machine.Name, &metav1.GetOptions{})
142-
if err != nil {
143+
virtualMachineInstance := &kubevirtv1.VirtualMachineInstance{}
144+
if err := client.Get(ctx, types.NamespacedName{Namespace: c.Namespace, Name: machine.Name}, virtualMachineInstance); err != nil {
143145
if !kerrors.IsNotFound(err) {
144146
return nil, fmt.Errorf("failed to get VirtualMachineInstance %s: %v", machine.Name, err)
145147
}
146148
return nil, cloudprovidererrors.ErrInstanceNotFound
147-
148149
}
150+
149151
// Deletion takes some time, so consider the VMI as deleted as soon as it has a DeletionTimestamp
150152
// because once the node got into status not ready its informers wont fire again
151153
// With the current approach we may run into a conflict when creating the VMI again, however this
@@ -160,7 +162,7 @@ func (p *provider) Get(machine *v1alpha1.Machine) (instance.Instance, error) {
160162
virtualMachineInstance.Status.Phase == kubevirtv1.Succeeded {
161163
// The pod got deleted, delete the VMI and return ErrNotFound so the VMI
162164
// will get recreated
163-
if err := client.VirtualMachine(c.Namespace).Delete(machine.Name, &metav1.DeleteOptions{}); err != nil {
165+
if err := client.Delete(ctx, virtualMachineInstance); err != nil {
164166
return nil, fmt.Errorf("failed to delete failed VMI %s: %v", machine.Name, err)
165167
}
166168
return nil, cloudprovidererrors.ErrInstanceNotFound
@@ -187,13 +189,13 @@ func (p *provider) Validate(spec v1alpha1.MachineSpec) error {
187189
if pc.OperatingSystem == providerconfig.OperatingSystemCoreos {
188190
return fmt.Errorf("CoreOS is not supported")
189191
}
190-
client, err := kubecli.GetKubevirtClientFromRESTConfig(&c.Config)
192+
client, err := client.New(&c.Config, client.Options{})
191193
if err != nil {
192194
return fmt.Errorf("failed to get kubevirt client: %v", err)
193195
}
194196
// Check if we can reach the API of the target cluster
195-
_, err = client.VirtualMachineInstance(c.Namespace).Get("not-expected-to-exist", &metav1.GetOptions{})
196-
if err != nil && !kerrors.IsNotFound(err) {
197+
vmi := &kubevirtv1.VirtualMachineInstance{}
198+
if err := client.Get(context.Background(), types.NamespacedName{Namespace: c.Namespace, Name: "not-expected-to-exist"}, vmi); err != nil && !kerrors.IsNotFound(err) {
197199
return fmt.Errorf("failed to request VirtualMachineInstances: %v", err)
198200
}
199201

@@ -288,30 +290,28 @@ func (p *provider) Create(machine *v1alpha1.Machine, _ *cloud.MachineCreateDelet
288290
},
289291
}
290292

291-
client, err := kubecli.GetKubevirtClientFromRESTConfig(&c.Config)
293+
client, err := client.New(&c.Config, client.Options{})
292294
if err != nil {
293295
return nil, fmt.Errorf("failed to get kubevirt client: %v", err)
294296
}
297+
ctx := context.Background()
295298

296-
createdVMI, err := client.VirtualMachineInstance(virtualMachineInstance.Namespace).
297-
Create(virtualMachineInstance)
298-
if err != nil {
299+
if err := client.Create(ctx, virtualMachineInstance); err != nil {
299300
return nil, fmt.Errorf("failed to create vmi: %v", err)
300301
}
301302

302303
secret := &corev1.Secret{
303304
ObjectMeta: metav1.ObjectMeta{
304305
Name: userdataSecretName,
305-
Namespace: createdVMI.Namespace,
306-
OwnerReferences: []metav1.OwnerReference{*metav1.NewControllerRef(createdVMI, kubevirtv1.VirtualMachineInstanceGroupVersionKind)},
306+
Namespace: virtualMachineInstance.Namespace,
307+
OwnerReferences: []metav1.OwnerReference{*metav1.NewControllerRef(virtualMachineInstance, kubevirtv1.VirtualMachineInstanceGroupVersionKind)},
307308
},
308309
Data: map[string][]byte{"userdata": []byte(userdata)},
309310
}
310-
_, err = client.CoreV1().Secrets(secret.Namespace).Create(secret)
311-
if err != nil {
311+
if err := client.Create(ctx, secret); err != nil {
312312
return nil, fmt.Errorf("failed to create secret for userdata: %v", err)
313313
}
314-
return &kubeVirtServer{vmi: *createdVMI}, nil
314+
return &kubeVirtServer{vmi: *virtualMachineInstance}, nil
315315

316316
}
317317

@@ -323,20 +323,22 @@ func (p *provider) Cleanup(machine *v1alpha1.Machine, _ *cloud.MachineCreateDele
323323
Message: fmt.Sprintf("Failed to parse MachineSpec, due to %v", err),
324324
}
325325
}
326-
client, err := kubecli.GetKubevirtClientFromRESTConfig(&c.Config)
326+
client, err := client.New(&c.Config, client.Options{})
327327
if err != nil {
328328
return false, fmt.Errorf("failed to get kubevirt client: %v", err)
329329
}
330-
_, err = client.VirtualMachineInstance(c.Namespace).Get(machine.Name, &metav1.GetOptions{})
331-
if err != nil {
330+
ctx := context.Background()
331+
332+
vmi := &kubevirtv1.VirtualMachineInstance{}
333+
if err := client.Get(ctx, types.NamespacedName{Namespace: c.Namespace, Name: machine.Name}, vmi); err != nil {
332334
if !kerrors.IsNotFound(err) {
333335
return false, fmt.Errorf("failed to get VirtualMachineInstance %s: %v", machine.Name, err)
334336
}
335337
// VMI is gone
336338
return true, nil
337339
}
338340

339-
return false, client.VirtualMachineInstance(c.Namespace).Delete(machine.Name, &metav1.DeleteOptions{})
341+
return false, client.Delete(ctx, vmi)
340342
}
341343

342344
func parseResources(cpus, memory string) (*corev1.ResourceList, error) {

vendor/github.com/golang/mock/AUTHORS

Lines changed: 0 additions & 12 deletions
This file was deleted.

vendor/github.com/golang/mock/CONTRIBUTORS

Lines changed: 0 additions & 37 deletions
This file was deleted.

0 commit comments

Comments
 (0)