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