Permalink

Comparing changes

Choose two branches to see what’s changed or to start a new pull request. If you need to, you can also .

Open a pull request

Create a new pull request by comparing changes across two branches. If you need to, you can also .
Choose a Base Repository
kubevirt/kubevirt
Akrog/kubevirt
AlertBear/kubevirt
AlexxNica/kubevirt
AllenShi/kubevirt
AlonaKaplan/kubevirt
CretanCivil/kubevirt
Ethan-2017/kubevirt
FengYang/kubevirt
Glip-/kubevirt
HYDPublic/kubevirt
ILpinto/kubevirt
IsolationWyn/kubevirt
JiejunLi/kubevirt
Kryndex/kubevirt
MalloZup/kubevirt
MarSik/kubevirt
MegaByte875/kubevirt
Oliverlyn/kubevirt
RikTheunis/kubevirt
SchSeba/kubevirt
aburdenthehand/kubevirt
adityaramteke/kubevirt
admiyo/kubevirt
aglitke/kubevirt
ahadas/kubevirt
alexismonville/kubevirt
alexxa/kubevirt
alvaroaleman/kubevirt
annie2010/kubevirt
arilivigni/kubevirt
artmello/kubevirt
aslanbekirov/kubevirt
ateleshev/kubevirt
awels/kubevirt
awesome-docker/kubevirt
awesome-p2p/kubevirt
benwatcisco/kubevirt
berrange/kubevirt
bestwpw/kubevirt
bhavin192/kubevirt
bond95/kubevirt
booxter/kubevirt
bronhaim/kubevirt
cgvarela/kubevirt
chessbyte/kubevirt
chitteshsham/kubevirt
cliffy94/kubevirt
codevulture/kubevirt
coolsvap/kubevirt
ctrlaltdel/kubevirt
curx/kubevirt
cynepco3hahue/kubevirt
danielBelenky/kubevirt
danielerez/kubevirt
dankenigsberg/kubevirt
davidmr001/kubevirt
davidvossel/kubevirt
denverwilliams/kubevirt
derekwaynecarr/kubevirt
devconf-2017-forks/kubevirt
duyanyan/kubevirt
dzr0001/kubevirt
eedri/kubevirt
fabiand/kubevirt
fhaoquan/kubevirt
firemanxbr/kubevirt
fnet123/kubevirt
fromanirh/kubevirt
fuseknt/kubevirt
gbenhaim/kubevirt
gbraad/kubevirt
georgekuruvillak/kubevirt
gliptak/kubevirt
gofalconers/kubevirt
gonzolino/kubevirt
gouyang/kubevirt
grafuls/kubevirt
gszasz/kubevirt
guangxuli/kubevirt
gyliu513/kubevirt
humblec/kubevirt
ifireball/kubevirt
igoihman/kubevirt
imjoey/kubevirt
itamarh/kubevirt
j-griffith/kubevirt
jasonbrooks/kubevirt
jcpowermac/kubevirt
jerry7z/kubevirt
jhernand/kubevirt
jihoon5/kubevirt
jlevon/kubevirt
jmpq/kubevirt
jnaulty/kubevirt
jniederm/kubevirt
karmab/kubevirt
kenzhaoyihui/kubevirt
krishna2nd/kubevirt
krsacme/kubevirt
ksimon1/kubevirt
leongold/kubevirt
liangxia/kubevirt__kubevirt
liayan/kubevirt
livsky87/kubevirt
lkpdn/kubevirt
lowang-bh/kubevirt
lukas-bednar/kubevirt
machacekondra/kubevirt
mareklibra/kubevirt
matobet/kubevirt
mcastelino/kubevirt
mdshuai/kubevirt
mfrances17/kubevirt
mfranczy/kubevirt
mhenriks/kubevirt
michalskrivanek/kubevirt
mkim2001/kubevirt
mlsorensen/kubevirt
mmirecki/kubevirt
mpolednik/kubevirt
mureinik/kubevirt
myakove/kubevirt
myang32/kubevirt
mz-pdm/kubevirt
navinrio/kubevirt
nellyc/kubevirt
nertpinx/kubevirt
netroby/kubevirt
ngavrilo/kubevirt
norpol/kubevirt
odra/kubevirt
onesourceintegrations/kubevirt
oourfali/kubevirt
ousleyp/kubevirt
pcbailey/kubevirt
petrkotas/kubevirt
phoracek/kubevirt
pkliczewski/kubevirt
pro3spb/kubevirt
qwang1/kubevirt
radishgz/kubevirt
raghavendra-talur/kubevirt
raghavendrachari08/kubevirt
rancheral/kubevirt
ravisantoshgudimetla/kubevirt
ravitri/kubevirt
rawagner/kubevirt
rbramwell/kubevirt
reachkrr/kubevirt
rhevm-qe-automation/kubevirt
rmohr/kubevirt
rollandf/kubevirt
rootfs/kubevirt
rowhit/kubevirt
rthallisey/kubevirt
rwsu/kubevirt
ryancee/kubevirt
sahid/kubevirt
scollier/kubevirt
senior7515/kubevirt
shiywang/kubevirt
sjas/kubevirt
slaykovsky/kubevirt
slintes/kubevirt
splitwood/kubevirt
stu-gott/kubevirt
stvnrsnbrg/kubevirt
sungwonh/kubevirt
surajnarwade/kubevirt
syswu/kubevirt
tanskann/kubevirt
tchughesiv/kubevirt
thiagodasilva/kubevirt
tiraboschi/kubevirt
tripledes/kubevirt
tylerauerbeck/kubevirt
unmeshdesale/kubevirt
vanloswang/kubevirt
vatsalparekh/kubevirt
vefimova/kubevirt
vinaygupta1234/kubevirt
virtlib/kubevirt
visheshtanksale/kubevirt
vladikr/kubevirt
warmchang/kubevirt
waynesun09/kubevirt
weiwang-linda/kubevirt
xsgordon/kubevirt
yanirq/kubevirt
yarntime/kubevirt
yuvalif/kubevirt
zvikorn/kubevirt
Nothing to show
Choose a Head Repository
kubevirt/kubevirt
Akrog/kubevirt
AlertBear/kubevirt
AlexxNica/kubevirt
AllenShi/kubevirt
AlonaKaplan/kubevirt
CretanCivil/kubevirt
Ethan-2017/kubevirt
FengYang/kubevirt
Glip-/kubevirt
HYDPublic/kubevirt
ILpinto/kubevirt
IsolationWyn/kubevirt
JiejunLi/kubevirt
Kryndex/kubevirt
MalloZup/kubevirt
MarSik/kubevirt
MegaByte875/kubevirt
Oliverlyn/kubevirt
RikTheunis/kubevirt
SchSeba/kubevirt
aburdenthehand/kubevirt
adityaramteke/kubevirt
admiyo/kubevirt
aglitke/kubevirt
ahadas/kubevirt
alexismonville/kubevirt
alexxa/kubevirt
alvaroaleman/kubevirt
annie2010/kubevirt
arilivigni/kubevirt
artmello/kubevirt
aslanbekirov/kubevirt
ateleshev/kubevirt
awels/kubevirt
awesome-docker/kubevirt
awesome-p2p/kubevirt
benwatcisco/kubevirt
berrange/kubevirt
bestwpw/kubevirt
bhavin192/kubevirt
bond95/kubevirt
booxter/kubevirt
bronhaim/kubevirt
cgvarela/kubevirt
chessbyte/kubevirt
chitteshsham/kubevirt
cliffy94/kubevirt
codevulture/kubevirt
coolsvap/kubevirt
ctrlaltdel/kubevirt
curx/kubevirt
cynepco3hahue/kubevirt
danielBelenky/kubevirt
danielerez/kubevirt
dankenigsberg/kubevirt
davidmr001/kubevirt
davidvossel/kubevirt
denverwilliams/kubevirt
derekwaynecarr/kubevirt
devconf-2017-forks/kubevirt
duyanyan/kubevirt
dzr0001/kubevirt
eedri/kubevirt
fabiand/kubevirt
fhaoquan/kubevirt
firemanxbr/kubevirt
fnet123/kubevirt
fromanirh/kubevirt
fuseknt/kubevirt
gbenhaim/kubevirt
gbraad/kubevirt
georgekuruvillak/kubevirt
gliptak/kubevirt
gofalconers/kubevirt
gonzolino/kubevirt
gouyang/kubevirt
grafuls/kubevirt
gszasz/kubevirt
guangxuli/kubevirt
gyliu513/kubevirt
humblec/kubevirt
ifireball/kubevirt
igoihman/kubevirt
imjoey/kubevirt
itamarh/kubevirt
j-griffith/kubevirt
jasonbrooks/kubevirt
jcpowermac/kubevirt
jerry7z/kubevirt
jhernand/kubevirt
jihoon5/kubevirt
jlevon/kubevirt
jmpq/kubevirt
jnaulty/kubevirt
jniederm/kubevirt
karmab/kubevirt
kenzhaoyihui/kubevirt
krishna2nd/kubevirt
krsacme/kubevirt
ksimon1/kubevirt
leongold/kubevirt
liangxia/kubevirt__kubevirt
liayan/kubevirt
livsky87/kubevirt
lkpdn/kubevirt
lowang-bh/kubevirt
lukas-bednar/kubevirt
machacekondra/kubevirt
mareklibra/kubevirt
matobet/kubevirt
mcastelino/kubevirt
mdshuai/kubevirt
mfrances17/kubevirt
mfranczy/kubevirt
mhenriks/kubevirt
michalskrivanek/kubevirt
mkim2001/kubevirt
mlsorensen/kubevirt
mmirecki/kubevirt
mpolednik/kubevirt
mureinik/kubevirt
myakove/kubevirt
myang32/kubevirt
mz-pdm/kubevirt
navinrio/kubevirt
nellyc/kubevirt
nertpinx/kubevirt
netroby/kubevirt
ngavrilo/kubevirt
norpol/kubevirt
odra/kubevirt
onesourceintegrations/kubevirt
oourfali/kubevirt
ousleyp/kubevirt
pcbailey/kubevirt
petrkotas/kubevirt
phoracek/kubevirt
pkliczewski/kubevirt
pro3spb/kubevirt
qwang1/kubevirt
radishgz/kubevirt
raghavendra-talur/kubevirt
raghavendrachari08/kubevirt
rancheral/kubevirt
ravisantoshgudimetla/kubevirt
ravitri/kubevirt
rawagner/kubevirt
rbramwell/kubevirt
reachkrr/kubevirt
rhevm-qe-automation/kubevirt
rmohr/kubevirt
rollandf/kubevirt
rootfs/kubevirt
rowhit/kubevirt
rthallisey/kubevirt
rwsu/kubevirt
ryancee/kubevirt
sahid/kubevirt
scollier/kubevirt
senior7515/kubevirt
shiywang/kubevirt
sjas/kubevirt
slaykovsky/kubevirt
slintes/kubevirt
splitwood/kubevirt
stu-gott/kubevirt
stvnrsnbrg/kubevirt
sungwonh/kubevirt
surajnarwade/kubevirt
syswu/kubevirt
tanskann/kubevirt
tchughesiv/kubevirt
thiagodasilva/kubevirt
tiraboschi/kubevirt
tripledes/kubevirt
tylerauerbeck/kubevirt
unmeshdesale/kubevirt
vanloswang/kubevirt
vatsalparekh/kubevirt
vefimova/kubevirt
vinaygupta1234/kubevirt
virtlib/kubevirt
visheshtanksale/kubevirt
vladikr/kubevirt
warmchang/kubevirt
waynesun09/kubevirt
weiwang-linda/kubevirt
xsgordon/kubevirt
yanirq/kubevirt
yarntime/kubevirt
yuvalif/kubevirt
zvikorn/kubevirt
Nothing to show
  • 5 commits
  • 3 files changed
  • 0 commit comments
  • 2 contributors
Commits on Jul 01, 2018
Delete RS VM's that have Finished state
Signed-off-by: Artyom Lukianov <alukiano@redhat.com>
Add functional tests
Signed-off-by: Artyom Lukianov <alukiano@redhat.com>
Move clean operation to separate method
Signed-off-by: Artyom Lukianov <alukiano@redhat.com>
Add unittest for cleanFinishedVmis method
Signed-off-by: Artyom Lukianov <alukiano@redhat.com>
Commits on Jul 03, 2018
Merge pull request #1237 from cynepco3hahue/fix_replica_set
Make sure that the VMI replica set will remove VM's in the final state
Showing with 135 additions and 16 deletions.
  1. +66 −10 pkg/virt-controller/watch/replicaset.go
  2. +33 −4 pkg/virt-controller/watch/replicaset_test.go
  3. +36 −2 tests/replicaset_test.go
@@ -185,8 +185,6 @@ func (c *VMIReplicaSet) execute(key string) error {
return err
}
vmis = c.filterActiveVMIs(vmis)
// If any adoptions are attempted, we should first recheck for deletion with
// an uncached quorum read sometime after listing VirtualMachines (see kubernetes/kubernetes#42639).
canAdoptFunc := controller.RecheckDeletionTimestamp(func() (v1.Object, error) {
@@ -205,24 +203,29 @@ func (c *VMIReplicaSet) execute(key string) error {
return err
}
finishedVmis := c.filterFinishedVMIs(vmis)
activeVmis := c.filterActiveVMIs(vmis)
var scaleErr error
// Scale up or down, if all expected creates and deletes were report by the listener
if needsSync && !rs.Spec.Paused && rs.ObjectMeta.DeletionTimestamp == nil {
scaleErr = c.scale(rs, vmis)
scaleErr = c.scale(rs, activeVmis)
if len(finishedVmis) > 0 && scaleErr == nil {
scaleErr = c.cleanFinishedVmis(rs, finishedVmis)
}
}
// If the controller is going to be deleted and the orphan finalizer is the next one, release the VMIs. Don't update the status
// TODO: Workaround for https://github.com/kubernetes/kubernetes/issues/56348, remove it once it is fixed
if rs.ObjectMeta.DeletionTimestamp != nil && controller.HasFinalizer(rs, v1.FinalizerOrphanDependents) {
return c.orphan(cm, rs, vmis)
return c.orphan(cm, rs, activeVmis)
}
if scaleErr != nil {
logger.Reason(err).Error("Scaling the replicaset failed.")
}
err = c.updateStatus(rs.DeepCopy(), vmis, scaleErr)
err = c.updateStatus(rs.DeepCopy(), activeVmis, scaleErr)
if err != nil {
logger.Reason(err).Error("Updating the replicaset status failed.")
}
@@ -258,8 +261,9 @@ func (c *VMIReplicaSet) orphan(cm *controller.VirtualMachineControllerRefManager
}
func (c *VMIReplicaSet) scale(rs *virtv1.VirtualMachineInstanceReplicaSet, vmis []*virtv1.VirtualMachineInstance) error {
log.Log.V(4).Object(rs).Info("Scale")
diff := c.calcDiff(rs, vmis)
rsKey, err := controller.KeyFunc(rs)
if err != nil {
log.Log.Object(rs).Reason(err).Error("Failed to extract rsKey from replicaset.")
@@ -280,6 +284,7 @@ func (c *VMIReplicaSet) scale(rs *virtv1.VirtualMachineInstanceReplicaSet, vmis
wg.Add(abs(diff))
if diff > 0 {
log.Log.V(4).Object(rs).Info("Delete excess VM's")
// We have to delete VMIs, use a very simple selection strategy for now
// TODO: Possible deletion order: not yet running VMIs < migrating VMIs < other
deleteCandidates := vmis[0:diff]
@@ -302,6 +307,7 @@ func (c *VMIReplicaSet) scale(rs *virtv1.VirtualMachineInstanceReplicaSet, vmis
}
} else if diff < 0 {
log.Log.V(4).Object(rs).Info("Add missing VM's")
// We have to create VMIs
c.expectations.ExpectCreations(rsKey, abs(diff))
basename := c.getVirtualMachineBaseName(rs)
@@ -341,7 +347,7 @@ func (c *VMIReplicaSet) scale(rs *virtv1.VirtualMachineInstanceReplicaSet, vmis
// filterActiveVMIs takes a list of VMIs and returns all VMIs which are not in a final state
func (c *VMIReplicaSet) filterActiveVMIs(vmis []*virtv1.VirtualMachineInstance) []*virtv1.VirtualMachineInstance {
return filter(vmis, func(vmi *virtv1.VirtualMachineInstance) bool {
return !vmi.IsFinal()
return !vmi.IsFinal() && vmi.DeletionTimestamp == nil
})
}
@@ -352,6 +358,13 @@ func (c *VMIReplicaSet) filterReadyVMIs(vmis []*virtv1.VirtualMachineInstance) [
})
}
// filterFinishedVMIs takes a list of VMIs and returns all VMIs which are in final state.
func (c *VMIReplicaSet) filterFinishedVMIs(vmis []*virtv1.VirtualMachineInstance) []*virtv1.VirtualMachineInstance {
return filter(vmis, func(vmi *virtv1.VirtualMachineInstance) bool {
return vmi.IsFinal() && vmi.DeletionTimestamp == nil
})
}
func filter(vmis []*virtv1.VirtualMachineInstance, f func(vmi *virtv1.VirtualMachineInstance) bool) []*virtv1.VirtualMachineInstance {
filtered := []*virtv1.VirtualMachineInstance{}
for _, vmi := range vmis {
@@ -632,9 +645,7 @@ func (c *VMIReplicaSet) removeCondition(rs *virtv1.VirtualMachineInstanceReplica
}
func (c *VMIReplicaSet) updateStatus(rs *virtv1.VirtualMachineInstanceReplicaSet, vmis []*virtv1.VirtualMachineInstance, scaleErr error) error {
diff := c.calcDiff(rs, vmis)
readyReplicas := int32(len(c.filterReadyVMIs(vmis)))
// check if we have reached the equilibrium
@@ -774,3 +785,48 @@ func (c *VMIReplicaSet) resolveControllerRef(namespace string, controllerRef *v1
}
return rs.(*virtv1.VirtualMachineInstanceReplicaSet)
}
func (c *VMIReplicaSet) cleanFinishedVmis(rs *virtv1.VirtualMachineInstanceReplicaSet, vmis []*virtv1.VirtualMachineInstance) error {
rsKey, err := controller.KeyFunc(rs)
if err != nil {
log.Log.Object(rs).Reason(err).Error("Failed to extract rsKey from replicaset.")
return nil
}
diff := limit(len(vmis), c.burstReplicas)
// Every delete request can fail, give the channel enough room, to not block the go routines
errChan := make(chan error, abs(diff))
var wg sync.WaitGroup
wg.Add(abs(diff))
log.Log.V(4).Object(rs).Info("Delete finished VM's")
deleteCandidates := vmis[0:diff]
c.expectations.ExpectDeletions(rsKey, controller.VirtualMachineKeys(deleteCandidates))
for i := 0; i < diff; i++ {
go func(idx int) {
defer wg.Done()
deleteCandidate := vmis[idx]
err := c.clientset.VirtualMachineInstance(rs.ObjectMeta.Namespace).Delete(deleteCandidate.ObjectMeta.Name, &v1.DeleteOptions{})
// Don't log an error if it is already deleted
if err != nil {
// We can't observe a delete if it was not accepted by the server
c.expectations.DeletionObserved(rsKey, controller.VirtualMachineKey(deleteCandidate))
c.recorder.Eventf(rs, k8score.EventTypeWarning, FailedDeleteVirtualMachineReason, "Error deleting finished virtual machine %s: %v", deleteCandidate.ObjectMeta.Name, err)
errChan <- err
return
}
c.recorder.Eventf(rs, k8score.EventTypeNormal, SuccessfulDeleteVirtualMachineReason, "Deleted finished virtual machine: %v", deleteCandidate.ObjectMeta.UID)
}(i)
}
wg.Wait()
select {
case err := <-errChan:
// Only return the first error which occurred, the others will most likely be equal errors
return err
default:
}
return nil
}
@@ -287,15 +287,16 @@ var _ = Describe("Replicaset", func() {
It("should be woken by a stopped VirtualMachineInstance and create a new one", func() {
rs, vmi := DefaultReplicaSet(1)
rs.Status.Replicas = 1
rs.Status.ReadyReplicas = 1
vmi.Status.Phase = v1.Running
rsCopy := rs.DeepCopy()
rsCopy.Status.Replicas = 0
rsCopy.Status.ReadyReplicas = 0
addReplicaSet(rs)
vmiFeeder.Add(vmi)
rsInterface.EXPECT().Update(rsCopy).Times(1)
// First make sure that we don't have to do anything
controller.Execute()
@@ -306,12 +307,13 @@ var _ = Describe("Replicaset", func() {
vmiFeeder.Modify(modifiedVMI)
// Expect the re-crate of the VirtualMachineInstance
rsInterface.EXPECT().Update(rsCopy).Times(1)
vmiInterface.EXPECT().Delete(vmi.ObjectMeta.Name, gomock.Any()).Return(nil)
vmiInterface.EXPECT().Create(gomock.Any()).Return(vmi, nil)
// Run the controller again
controller.Execute()
testutils.ExpectEvent(recorder, SuccessfulCreateVirtualMachineReason)
testutils.ExpectEvents(recorder, SuccessfulDeleteVirtualMachineReason, SuccessfulCreateVirtualMachineReason)
})
It("should be woken by a ready VirtualMachineInstance and update the readyReplicas counter", func() {
@@ -370,6 +372,33 @@ var _ = Describe("Replicaset", func() {
testutils.ExpectEvent(recorder, SuccessfulCreateVirtualMachineReason)
})
It("should delete VirtualMachineIstance in the final state", func() {
rs, vmi := DefaultReplicaSet(1)
rs.Status.Replicas = 1
rs.Status.ReadyReplicas = 1
vmi.Status.Phase = v1.Running
addReplicaSet(rs)
vmiFeeder.Add(vmi)
// First make sure that we don't have to do anything
controller.Execute()
// Move one VirtualMachineInstance to a final state
modifiedVMI := vmi.DeepCopy()
modifiedVMI.Status.Phase = v1.Failed
modifiedVMI.ResourceVersion = "1"
vmiFeeder.Modify(modifiedVMI)
// Expect the re-crate of the VirtualMachineInstance
vmiInterface.EXPECT().Delete(vmi.ObjectMeta.Name, gomock.Any()).Return(nil)
// Run the cleanFinishedVmis method
controller.cleanFinishedVmis(rs, []*v1.VirtualMachineInstance{modifiedVMI})
testutils.ExpectEvent(recorder, SuccessfulDeleteVirtualMachineReason)
})
It("should add a fail condition if scaling up fails", func() {
rs, vmi := DefaultReplicaSet(3)
View
@@ -77,7 +77,7 @@ var _ = Describe("VirtualMachineInstanceReplicaSet", func() {
rs, err = virtClient.ReplicaSet(tests.NamespaceTestDefault).Get(name, v12.GetOptions{})
Expect(err).ToNot(HaveOccurred())
return rs.Status.Replicas
}, 60, 1).Should(Equal(int32(scale)))
}, 90*time.Second, time.Second).Should(Equal(int32(scale)))
vmis, err := virtClient.VirtualMachineInstance(tests.NamespaceTestDefault).List(&v12.ListOptions{})
Expect(err).ToNot(HaveOccurred())
@@ -179,7 +179,7 @@ var _ = Describe("VirtualMachineInstanceReplicaSet", func() {
vmis, err := virtClient.VirtualMachineInstance(newRS.ObjectMeta.Namespace).List(&v12.ListOptions{})
Expect(err).ToNot(HaveOccurred())
return len(vmis.Items)
}, 60*time.Second, 1*time.Second).Should(BeZero())
}, 120*time.Second, 1*time.Second).Should(BeZero())
})
It("should remove owner references on the VirtualMachineInstance if it is orphan deleted", func() {
@@ -275,4 +275,38 @@ var _ = Describe("VirtualMachineInstanceReplicaSet", func() {
return rs.Status.Replicas
}, 10*time.Second, 1*time.Second).Should(Equal(int32(2)))
})
It("should remove the finished VM", func() {
By("Creating new replica set")
rs := newReplicaSet()
doScale(rs.ObjectMeta.Name, int32(2))
vmis, err := virtClient.VirtualMachineInstance(tests.NamespaceTestDefault).List(&v12.ListOptions{})
Expect(err).ToNot(HaveOccurred())
Expect(vmis.Items).ToNot(BeEmpty())
vmi := vmis.Items[0]
pods, err := virtClient.CoreV1().Pods(tests.NamespaceTestDefault).List(tests.UnfinishedVMIPodSelector(&vmi))
Expect(err).ToNot(HaveOccurred())
Expect(len(pods.Items)).To(Equal(1))
pod := pods.Items[0]
By("Deleting one of the RS VMS pods")
err = virtClient.CoreV1().Pods(tests.NamespaceTestDefault).Delete(pod.Name, &v12.DeleteOptions{})
Expect(err).ToNot(HaveOccurred())
By("Checking that the VM dissapeared")
Eventually(func() bool {
_, err := virtClient.VirtualMachineInstance(tests.NamespaceTestDefault).Get(vmi.Name, &v12.GetOptions{})
if errors.IsNotFound(err) {
return true
}
return false
}, 120*time.Second, time.Second).Should(Equal(true))
By("Checking number of RS VM's")
vmis, err = virtClient.VirtualMachineInstance(tests.NamespaceTestDefault).List(&v12.ListOptions{})
Expect(err).ToNot(HaveOccurred())
Expect(len(vmis.Items)).Should(Equal(2))
})
})

No commit comments for this range