@@ -262,7 +262,7 @@ func resourceInstanceRead(d *schema.ResourceData, meta interface{}) error {
262
262
263
263
networks , err := client .ListPrivateNetworksForServer (d .Id ())
264
264
if err != nil {
265
- return fmt .Errorf ("Error getting networks for instance (%s): %v" , d .Id (), err )
265
+ return fmt .Errorf ("Error getting private networks for instance (%s): %v" , d .Id (), err )
266
266
}
267
267
nets := make (map [string ]string )
268
268
var networkIDs []string
@@ -276,13 +276,32 @@ func resourceInstanceRead(d *schema.ResourceData, meta interface{}) error {
276
276
return fmt .Errorf ("OS ID must be an integer: %v" , err )
277
277
}
278
278
279
+ var size int
280
+ if instance .InternalIP != "" {
281
+ ipv4s , err := client .ListIPv4 (d .Id ())
282
+ if err != nil {
283
+ return fmt .Errorf ("Error getting IPv4 networks for instance (%s): %v" , d .Id (), err )
284
+ }
285
+ err = func () error {
286
+ for _ , n := range ipv4s {
287
+ if n .IP == instance .InternalIP {
288
+ size , _ = parseIPv4Mask (n .Netmask ).Size ()
289
+ return nil
290
+ }
291
+ }
292
+ return fmt .Errorf ("no matching address for %q in IPv4 list" , instance .InternalIP )
293
+ }()
294
+ if err != nil {
295
+ return fmt .Errorf ("Error finding private IPv4 subnet mask for instance (%s): %v" , d .Id (), err )
296
+ }
297
+ }
298
+
279
299
d .Set ("application_id" , instance .AppID )
280
300
d .Set ("cost_per_month" , instance .Cost )
281
301
d .Set ("default_password" , instance .DefaultPassword )
282
302
d .Set ("disk" , instance .Disk )
283
303
d .Set ("firewall_group_id" , instance .FirewallGroupID )
284
304
d .Set ("ipv4_address" , instance .MainIP )
285
- size , _ := parseIPv4Mask (instance .NetmaskV4 ).Size ()
286
305
d .Set ("ipv4_private_cidr" , fmt .Sprintf ("%s/%d" , instance .InternalIP , size ))
287
306
d .Set ("name" , instance .Name )
288
307
d .Set ("networks" , nets )
0 commit comments