Skip to content

Commit b5be698

Browse files
committed
virt, udn: always grab IPs from the vmi status
Signed-off-by: Miguel Duarte Barroso <[email protected]>
1 parent 3f76996 commit b5be698

File tree

1 file changed

+37
-43
lines changed

1 file changed

+37
-43
lines changed

test/extended/networking/livemigration.go

Lines changed: 37 additions & 43 deletions
Original file line numberDiff line numberDiff line change
@@ -104,7 +104,19 @@ var _ = Describe("[sig-network][OCPFeatureGate:PersistentIPsForVirtualization][F
104104
waitForVMReadiness(virtClient, vmCreationParams.VMNamespace, vmCreationParams.VMName)
105105

106106
By("Retrieving addresses before test operation")
107-
initialAddresses := obtainAddresses(virtClient, netConfig, vmName)
107+
var initialAddresses []string
108+
Eventually(func(g Gomega) []string {
109+
GinkgoHelper()
110+
111+
var err error
112+
initialAddresses, err = obtainAddresses(virtClient, vmName)
113+
g.Expect(err).NotTo(HaveOccurred(), "Failed to obtain IP addresses for VM")
114+
return initialAddresses
115+
}).
116+
WithPolling(time.Second).
117+
WithTimeout(5 * time.Minute).
118+
ShouldNot(BeEmpty())
119+
108120
expectedNumberOfAddresses := 1
109121
if isDualStack {
110122
expectedNumberOfAddresses = 2
@@ -119,7 +131,18 @@ var _ = Describe("[sig-network][OCPFeatureGate:PersistentIPsForVirtualization][F
119131
opCmd(virtClient, f.Namespace.Name, vmName)
120132

121133
By("Retrieving addresses after test operation")
122-
obtainedAddresses := obtainAddresses(virtClient, netConfig, vmName)
134+
var obtainedAddresses []string
135+
Eventually(func(g Gomega) []string {
136+
GinkgoHelper()
137+
138+
var err error
139+
obtainedAddresses, err = obtainAddresses(virtClient, vmName)
140+
g.Expect(err).NotTo(HaveOccurred(), "Failed to obtain IP addresses for VM after the migrate or restart operation")
141+
return obtainedAddresses
142+
}).
143+
WithPolling(time.Second).
144+
WithTimeout(5 * time.Minute).
145+
ShouldNot(BeEmpty())
123146
Expect(obtainedAddresses).To(ConsistOf(initialAddresses))
124147

125148
By("Check east/west after test operation")
@@ -338,53 +361,24 @@ func waitForVMIMSuccess(vmClient *kubevirt.Client, namespace, vmName string) {
338361
Expect(migrationFailedStr).To(BeEmpty())
339362
}
340363

341-
func addressFromStatus(cli *kubevirt.Client, vmName string) []string {
364+
func addressFromStatus(cli *kubevirt.Client, vmName string) ([]string, error) {
342365
var addresses []string
343-
Eventually(func(g Gomega) []string {
344-
GinkgoHelper()
345-
addressesStr, err := cli.GetJSONPath("vmi", vmName, "{@.status.interfaces[0].ipAddresses}")
346-
g.Expect(err).NotTo(HaveOccurred())
347-
348-
g.Expect(json.Unmarshal([]byte(addressesStr), &addresses)).To(Succeed())
349-
return addresses
350-
}).
351-
WithPolling(time.Second).
352-
WithTimeout(5 * time.Minute).
353-
Should(Equal("true"))
354-
return addresses
355-
}
356-
357-
func addressFromGuest(cli *kubevirt.Client, vmName string) []string {
358-
GinkgoHelper()
359-
Expect(cli.Login(vmName, vmName)).To(Succeed())
360-
output, err := cli.Console(vmName, "ip -j a show dev eth0")
361-
Expect(err).NotTo(HaveOccurred())
362-
// [{"ifindex":2,"ifname":"eth0","flags":["BROADCAST","MULTICAST","UP","LOWER_UP"],"mtu":1300,"qdisc":"fq_codel","operstate":"UP","group":"default","txqlen":1000,"link_type":"ether","address":"02:ba:c3:00:00:0a","broadcast":"ff:ff:ff:ff:ff:ff","altnames":["enp1s0"],"addr_info":[{"family":"inet","local":"100.10.0.1","prefixlen":24,"broadcast":"100.10.0.255","scope":"global","dynamic":true,"noprefixroute":true,"label":"eth0","valid_life_time":86313548,"preferred_life_time":86313548},{"family":"inet6","local":"fe80::ba:c3ff:fe00:a","prefixlen":64,"scope":"link","valid_life_time":4294967295,"preferred_life_time":4294967295}]}]
363-
type address struct {
364-
IP string `json:"local,omitempty"`
365-
Scope string `json:"scope,omitempty"`
366+
addressesStr, err := cli.GetJSONPath("vmi", vmName, "{@.status.interfaces[0].ipAddresses}")
367+
if err != nil {
368+
return nil, fmt.Errorf("failed to extract the IP addresses from VM %q: %w", vmName, err)
366369
}
367-
type iface struct {
368-
Name string `json:"ifname,omitempty"`
369-
Addresses []address `json:"addr_info,omitempty"`
370+
371+
if addressesStr == "" {
372+
return nil, nil
370373
}
371-
ifaces := []iface{}
372-
Expect(json.Unmarshal([]byte(output), &ifaces)).To(Succeed())
373-
addresses := []string{}
374-
Expect(ifaces).NotTo(BeEmpty())
375-
for _, address := range ifaces[0].Addresses {
376-
if address.Scope == "link" {
377-
continue
378-
}
379-
addresses = append(addresses, address.IP)
374+
375+
if err := json.Unmarshal([]byte(addressesStr), &addresses); err != nil {
376+
return nil, fmt.Errorf("failed to unmarshal addresses %q: %w", addressesStr, err)
380377
}
381-
return addresses
378+
return addresses, nil
382379
}
383380

384-
func obtainAddresses(virtClient *kubevirt.Client, netConfig networkAttachmentConfigParams, vmName string) []string {
385-
if netConfig.role == "primary" {
386-
return addressFromGuest(virtClient, vmName)
387-
}
381+
func obtainAddresses(virtClient *kubevirt.Client, vmName string) ([]string, error) {
388382
return addressFromStatus(virtClient, vmName)
389383
}
390384

0 commit comments

Comments
 (0)