Skip to content

Commit a6cbcff

Browse files
more refactoring
1 parent ff2c11a commit a6cbcff

File tree

1 file changed

+20
-52
lines changed

1 file changed

+20
-52
lines changed

pkg/cloud/instance.go

Lines changed: 20 additions & 52 deletions
Original file line numberDiff line numberDiff line change
@@ -312,46 +312,23 @@ func (c *client) CheckLimits(
312312
return nil
313313
}
314314

315-
func (c *client) listPublicIPsInNetwork(networkID, ip string) ([]*cloudstack.PublicIpAddress, error) {
315+
func (c *client) isFreeIPAvailable(networkID, ip string) (bool, error) {
316316
params := c.cs.Address.NewListPublicIpAddressesParams()
317317
params.SetNetworkid(networkID)
318318
params.SetAllocatedonly(false)
319319
params.SetForvirtualnetwork(false)
320320
params.SetListall(true)
321+
321322
if ip != "" {
322323
params.SetIpaddress(ip)
323324
}
324325

325326
resp, err := c.cs.Address.ListPublicIpAddresses(params)
326327
if err != nil {
327-
return nil, errors.Wrapf(err, "failed to list public IP addresses for network %q", networkID)
328-
}
329-
330-
return resp.PublicIpAddresses, nil
331-
}
332-
333-
func (c *client) isIPAvailableInNetwork(ip, networkID string) (bool, error) {
334-
publicIPs, err := c.listPublicIPsInNetwork(networkID, ip)
335-
if err != nil {
336-
return false, err
337-
}
338-
339-
for _, addr := range publicIPs {
340-
if addr.State == "Free" {
341-
return true, nil
342-
}
343-
}
344-
345-
return false, nil
346-
}
347-
348-
func (c *client) hasFreeIPInNetwork(resolvedNet *cloudstack.Network) (bool, error) {
349-
publicIPs, err := c.listPublicIPsInNetwork(resolvedNet.Id, "")
350-
if err != nil {
351-
return false, err
328+
return false, errors.Wrapf(err, "failed to list public IP addresses for network %q", networkID)
352329
}
353330

354-
for _, addr := range publicIPs {
331+
for _, addr := range resp.PublicIpAddresses {
355332
if addr.State == "Free" {
356333
return true, nil
357334
}
@@ -360,42 +337,33 @@ func (c *client) hasFreeIPInNetwork(resolvedNet *cloudstack.Network) (bool, erro
360337
return false, nil
361338
}
362339

363-
func (c *client) buildStaticIPEntry(ip string, resolvedNet *cloudstack.Network) (map[string]string, error) {
364-
networkID := resolvedNet.Id
365-
if err := c.validateIPInCIDR(ip, resolvedNet, networkID); err != nil {
366-
return nil, err
367-
}
368-
369-
if resolvedNet.Type == "Shared" {
370-
isAvailable, err := c.isIPAvailableInNetwork(ip, networkID)
371-
if err != nil {
340+
func (c *client) buildIPEntry(resolvedNet *cloudstack.Network, ip string) (map[string]string, error) {
341+
if ip != "" {
342+
if err := c.validateIPInCIDR(ip, resolvedNet, resolvedNet.Id); err != nil {
372343
return nil, err
373344
}
374-
if !isAvailable {
375-
return nil, errors.Errorf("IP %q is already allocated in network %q or out of range", ip, networkID)
376-
}
377345
}
378346

379-
return map[string]string{
380-
"networkid": networkID,
381-
"ip": ip,
382-
}, nil
383-
}
384-
385-
func (c *client) buildDynamicIPEntry(resolvedNet *cloudstack.Network) (map[string]string, error) {
386347
if resolvedNet.Type == "Shared" {
387-
freeIPExists, err := c.hasFreeIPInNetwork(resolvedNet)
348+
isAvailable, err := c.isFreeIPAvailable(resolvedNet.Id, ip)
388349
if err != nil {
389350
return nil, err
390351
}
391-
if !freeIPExists {
352+
if !isAvailable {
353+
if ip != "" {
354+
return nil, errors.Errorf("IP %q is already allocated in network %q or out of range", ip, resolvedNet.Id)
355+
}
392356
return nil, errors.Errorf("no free IPs available in network %q", resolvedNet.Id)
393357
}
394358
}
395359

396-
return map[string]string{
360+
entry := map[string]string{
397361
"networkid": resolvedNet.Id,
398-
}, nil
362+
}
363+
if ip != "" {
364+
entry["ip"] = ip
365+
}
366+
return entry, nil
399367
}
400368

401369
func (c *client) resolveNetworkByName(name string) (*cloudstack.Network, error) {
@@ -420,12 +388,12 @@ func (c *client) buildIPToNetworkList(csMachine *infrav1.CloudStackMachine) ([]m
420388

421389
var entry map[string]string
422390
if net.IP != "" {
423-
entry, err = c.buildStaticIPEntry(net.IP, resolvedNet)
391+
entry, err = c.buildIPEntry(resolvedNet, net.IP)
424392
if err != nil {
425393
return nil, err
426394
}
427395
} else {
428-
entry, err = c.buildDynamicIPEntry(resolvedNet)
396+
entry, err = c.buildIPEntry(resolvedNet, "")
429397
if err != nil {
430398
return nil, err
431399
}

0 commit comments

Comments
 (0)