Skip to content

Commit a87dfc8

Browse files
authored
Merge pull request #29429 from maiqueb/persistent-ips-set-network-seg-feat-gate-on-udn-crd-tests
SDN-4930: virt, udn: read the primary UDN interface IPs from the vmi status (in an eventually block)
2 parents 3919ad8 + b5be698 commit a87dfc8

File tree

1 file changed

+37
-36
lines changed

1 file changed

+37
-36
lines changed

test/extended/networking/livemigration.go

Lines changed: 37 additions & 36 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,46 +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 {
342-
GinkgoHelper()
343-
addressesStr, err := cli.GetJSONPath("vmi", vmName, "{@.status.interfaces[0].ipAddresses}")
344-
Expect(err).NotTo(HaveOccurred())
364+
func addressFromStatus(cli *kubevirt.Client, vmName string) ([]string, error) {
345365
var addresses []string
346-
Expect(json.Unmarshal([]byte(addressesStr), &addresses)).To(Succeed())
347-
return addresses
348-
}
349-
350-
func addressFromGuest(cli *kubevirt.Client, vmName string) []string {
351-
GinkgoHelper()
352-
Expect(cli.Login(vmName, vmName)).To(Succeed())
353-
output, err := cli.Console(vmName, "ip -j a show dev eth0")
354-
Expect(err).NotTo(HaveOccurred())
355-
// [{"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}]}]
356-
type address struct {
357-
IP string `json:"local,omitempty"`
358-
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)
359369
}
360-
type iface struct {
361-
Name string `json:"ifname,omitempty"`
362-
Addresses []address `json:"addr_info,omitempty"`
370+
371+
if addressesStr == "" {
372+
return nil, nil
363373
}
364-
ifaces := []iface{}
365-
Expect(json.Unmarshal([]byte(output), &ifaces)).To(Succeed())
366-
addresses := []string{}
367-
Expect(ifaces).NotTo(BeEmpty())
368-
for _, address := range ifaces[0].Addresses {
369-
if address.Scope == "link" {
370-
continue
371-
}
372-
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)
373377
}
374-
return addresses
378+
return addresses, nil
375379
}
376380

377-
func obtainAddresses(virtClient *kubevirt.Client, netConfig networkAttachmentConfigParams, vmName string) []string {
378-
if netConfig.role == "primary" {
379-
return addressFromGuest(virtClient, vmName)
380-
}
381+
func obtainAddresses(virtClient *kubevirt.Client, vmName string) ([]string, error) {
381382
return addressFromStatus(virtClient, vmName)
382383
}
383384

0 commit comments

Comments
 (0)