11package kubevirt
22
33import (
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
342344func parseResources (cpus , memory string ) (* corev1.ResourceList , error ) {
0 commit comments