Skip to content

Commit c1cabd2

Browse files
author
Joshua Reed
committed
Fixup after broken rebase.
1 parent 00dc243 commit c1cabd2

File tree

2 files changed

+49
-34
lines changed

2 files changed

+49
-34
lines changed

pkg/cloud/network.go

Lines changed: 42 additions & 33 deletions
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,7 @@ type NetworkIface interface {
3434
ResolveLoadBalancerRuleDetails(*infrav1.CloudStackCluster) error
3535
GetOrCreateLoadBalancerRule(*infrav1.CloudStackCluster) error
3636
GetOrCreateIsolatedNetwork(*infrav1.CloudStackCluster) error
37+
AssociatePublicIPAddress(*infrav1.CloudStackCluster) error
3738
}
3839

3940
const (
@@ -136,7 +137,7 @@ func (c *client) CreateIsolatedNewtork(csCluster *infrav1.CloudStackCluster) (re
136137
if err != nil {
137138
return err
138139
}
139-
c.addClusterTags(csCluster, zoneStatus.Network, addCreatedByTag)
140+
c.AddClusterTag(ResourceTypeNetwork, zoneStatus.Network.Id, csCluster, addCreatedByTag)
140141

141142
// Update Zone/Network status accordingly.
142143
netStatus.Id = resp.Id
@@ -163,8 +164,7 @@ func (c *client) ResolveNetworkStatuses(csCluster *infrav1.CloudStackCluster) (r
163164
for zoneName, zoneStatus := range csCluster.Status.Zones {
164165
if retErr = c.ResolveNetwork(csCluster, &zoneStatus.Network); retErr == nil { // Found network
165166
csCluster.Status.Zones[zoneName] = zoneStatus
166-
//zone.Network = zoneStatus.DeepCopy().Network
167-
c.addClusterTags(csCluster, zoneStatus.Network, doNotAddCreatedByTag)
167+
c.AddClusterTag(ResourceTypeNetwork, zoneStatus.Network.Id, csCluster, doNotAddCreatedByTag)
168168
} else if !strings.Contains(retErr.Error(), "No match found") { // Some other error.
169169
return retErr
170170
} // Network not found, so create it.
@@ -173,40 +173,17 @@ func (c *client) ResolveNetworkStatuses(csCluster *infrav1.CloudStackCluster) (r
173173
return nil
174174
}
175175

176-
func (c *client) addClusterTags(csCluster *infrav1.CloudStackCluster, net infrav1.Network, addCreatedBy bool) error {
177-
clusterTagName := generateNetworkTagName(csCluster)
178-
newTags := map[string]string{}
179-
180-
existingTags, err := c.GetNetworkTags(net.Id)
181-
if err != nil {
182-
return err
183-
}
184-
185-
if existingTags[clusterTagName] == "" {
186-
newTags[clusterTagName] = "1"
187-
}
188-
189-
if addCreatedBy && existingTags[createdByCapcTagName] == "" {
190-
newTags[createdByCapcTagName] = "1"
191-
}
192-
193-
if len(newTags) > 0 {
194-
return c.AddNetworkTags(net.Id, newTags)
195-
}
196-
197-
return nil
198-
}
199-
200176
func (c *client) RemoveClusterTagFromNetwork(csCluster *infrav1.CloudStackCluster, net infrav1.Network) (retError error) {
201-
tags, err := c.GetNetworkTags(net.Id)
177+
178+
tags, err := c.GetTags(ResourceTypeNetwork, net.Id)
202179
if err != nil {
203180
return err
204181
}
205-
sourceNAT := publicIP != nil && publicIP.Issourcenat
182+
// sourceNAT := publicIP != nil && publicIP.Issourcenat
206183

207184
clusterTagName := generateNetworkTagName(csCluster)
208185
if tagValue := tags[clusterTagName]; tagValue != "" {
209-
if err = c.DeleteNetworkTags(net.Id, map[string]string{clusterTagName: tagValue}); err != nil {
186+
if err = c.DeleteTags(ResourceTypeNetwork, net.Id, map[string]string{clusterTagName: tagValue}); err != nil {
210187
return err
211188
}
212189
}
@@ -215,7 +192,7 @@ func (c *client) RemoveClusterTagFromNetwork(csCluster *infrav1.CloudStackCluste
215192
}
216193

217194
func (c *client) DeleteNetworkIfNotInUse(csCluster *infrav1.CloudStackCluster, net infrav1.Network) (retError error) {
218-
tags, err := c.GetNetworkTags(net.Id)
195+
tags, err := c.GetTags(ResourceTypeNetwork, net.Id)
219196
if err != nil {
220197
return err
221198
}
@@ -227,7 +204,7 @@ func (c *client) DeleteNetworkIfNotInUse(csCluster *infrav1.CloudStackCluster, n
227204
}
228205
}
229206

230-
if clusterTagCount == 0 && tags[createdByCapcTagName] != "" {
207+
if clusterTagCount == 0 && tags[createdByCAPCTagName] != "" {
231208
return c.DestroyNetwork(net)
232209
}
233210

@@ -299,6 +276,38 @@ func (c *client) OpenFirewallRules(csCluster *infrav1.CloudStackCluster) (retErr
299276
return retErr
300277
}
301278

279+
func (c *client) DisassociatePublicIPAddress(csCluster *infrav1.CloudStackCluster) (retErr error) {
280+
// Remove the CAPC creation tag, so it won't be there the next time this address is associated.
281+
retErr = c.DeleteCreatedByCAPCTag(ResourceTypeIPAddress, csCluster.Status.PublicIPID)
282+
if retErr != nil {
283+
return retErr
284+
}
285+
286+
p := c.cs.Address.NewDisassociateIpAddressParams(csCluster.Status.PublicIPID)
287+
_, retErr = c.cs.Address.DisassociateIpAddress(p)
288+
return retErr
289+
}
290+
291+
func (c *client) DisassociatePublicIPAddressIfNotInUse(csCluster *infrav1.CloudStackCluster) (retError error) {
292+
tagsAllowDisposal, err := c.DoClusterTagsAllowDisposal(ResourceTypeIPAddress, csCluster.Status.PublicIPID)
293+
if err != nil {
294+
return err
295+
}
296+
297+
// Can't disassociate an address if it's the source NAT address.
298+
publicIP, _, err := c.cs.Address.GetPublicIpAddressByID(csCluster.Status.PublicIPID)
299+
if err != nil {
300+
return err
301+
}
302+
sourceNAT := publicIP != nil && publicIP.Issourcenat
303+
304+
if tagsAllowDisposal && !sourceNAT {
305+
return c.DisassociatePublicIPAddress(csCluster)
306+
}
307+
308+
return nil
309+
}
310+
302311
func (c *client) ResolveLoadBalancerRuleDetails(csCluster *infrav1.CloudStackCluster) (retErr error) {
303312
p := c.cs.LoadBalancer.NewListLoadBalancerRulesParams()
304313
p.SetPublicipid(csCluster.Status.PublicIPID)
@@ -377,7 +386,7 @@ func (c *client) GetOrCreateIsolatedNetwork(csCluster *infrav1.CloudStackCluster
377386
}
378387

379388
if csCluster.Status.PublicIPID == "" { // Don't try to get public IP again it's already been fetched.
380-
if err := c.AssociatePublicIpAddress(csCluster); err != nil {
389+
if err := c.AssociatePublicIPAddress(csCluster); err != nil {
381390
return err
382391
}
383392
}

pkg/cloud/tags.go

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -43,7 +43,13 @@ const (
4343

4444
// AddClusterTag adds cluster-related tags to a resource. One tag indicates that the resource is used by a given
4545
// cluster. The other tag, if applied, indicates that CAPC created the resource and may dispose of it later.
46-
func (c *client) AddClusterTag(resourceType ResourceType, resourceID string, csCluster *infrav1.CloudStackCluster, addCreatedByCAPCTag bool) error {
46+
func (c *client) AddClusterTag(
47+
resourceType ResourceType,
48+
resourceID string,
49+
csCluster *infrav1.CloudStackCluster,
50+
addCreatedByCAPCTag bool,
51+
) error {
52+
4753
clusterTagName := generateClusterTagName(csCluster)
4854
newTags := map[string]string{}
4955

0 commit comments

Comments
 (0)