@@ -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