Skip to content

Commit febdea9

Browse files
GCE: Also cleanup forwarding rules
1 parent cecc978 commit febdea9

File tree

3 files changed

+26
-2
lines changed

3 files changed

+26
-2
lines changed

README.md

+1-1
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,7 @@ PCW has two main flows :
3131
b. Snapshots in all region defined
3232
c. Volumes in all regions defined
3333
d. VPC's ( deletion of VPC means deletion of all assigned to VPC entities first ( security groups , networks etc. ))
34-
- For GCE deleting only images (check details in [ocw/lib/gce.py](ocw/lib/gce.py))
34+
- For GCE deleting disks, images & network resources (check details in [ocw/lib/gce.py](ocw/lib/gce.py))
3535
- For Openstack deleting instances, images & keypairs (check details in [ocw/lib/openstack.py](ocw/lib/openstack.py)
3636

3737

ocw/lib/gce.py

+17
Original file line numberDiff line numberDiff line change
@@ -39,6 +39,7 @@ def _delete_resource(self, api_call, resource_name, *_, **kwargs) -> None:
3939
resource_type = {
4040
self.compute_client().disks: "disk",
4141
self.compute_client().firewalls: "firewall",
42+
self.compute_client().forwardingRules: "forwardingRule",
4243
self.compute_client().images: "image",
4344
self.compute_client().instances: "instance",
4445
self.compute_client().networks: "network",
@@ -118,6 +119,7 @@ def cleanup_all(self) -> None:
118119
self.cleanup_disks()
119120
self.cleanup_images()
120121
self.cleanup_firewalls()
122+
self.cleanup_forwarding_rules()
121123
self.cleanup_routes()
122124
self.cleanup_subnetworks()
123125
self.cleanup_networks()
@@ -158,6 +160,21 @@ def cleanup_firewalls(self) -> None:
158160
self.compute_client().firewalls, firewall["name"], project=self.project, firewall=firewall["name"]
159161
)
160162

163+
def cleanup_forwarding_rules(self) -> None:
164+
self.log_dbg("Forwarding rules cleanup")
165+
for region in self.list_regions():
166+
rules = [
167+
rule for rule in self._paginated(self.compute_client().forwardingRules, project=self.project, region=region)
168+
if basename(rule["network"]) not in self.__skip_networks
169+
]
170+
self.log_dbg(f"{len(rules)} forwarding_rules found")
171+
for rule in rules:
172+
if self.is_outdated(parse(rule["creationTimestamp"]).astimezone(timezone.utc)):
173+
self._delete_resource(
174+
self.compute_client().forwardingRules, rule["name"],
175+
project=self.project, region=region, forwardingRule=rule["name"]
176+
)
177+
161178
def cleanup_routes(self) -> None:
162179
self.log_dbg("Routes cleanup")
163180
routes = [

tests/test_gce.py

+8-1
Original file line numberDiff line numberDiff line change
@@ -32,7 +32,7 @@ def list_next(self, *args, **kwargs):
3232
return self.responses.pop(0)
3333

3434
def delete(self, *args, **kwargs):
35-
for resource in ('image', 'disk', 'instance', 'firewall', 'route', 'network', 'subnetwork'):
35+
for resource in ('image', 'disk', 'instance', 'firewall', 'forwardingRule', 'route', 'network', 'subnetwork'):
3636
if resource in kwargs:
3737
self.deleted_resources.append(kwargs[resource])
3838
if len(self.responses) > 0:
@@ -50,6 +50,7 @@ def something():
5050
class MockClient:
5151
def disks(self): pass
5252
def firewalls(self): pass
53+
def forwardingRules(self): pass
5354
def images(self): pass
5455
def instances(self): pass
5556
def networks(self): pass
@@ -148,6 +149,10 @@ def test_cleanup_firewalls(gce):
148149
_test_cleanup(gce, "firewalls", gce.cleanup_firewalls)
149150

150151

152+
def test_cleanup_forwarding_rules(gce):
153+
_test_cleanup(gce, "forwardingRules", gce.cleanup_forwarding_rules)
154+
155+
151156
def test_cleanup_routes(gce):
152157
_test_cleanup(gce, "routes", gce.cleanup_routes)
153158

@@ -164,13 +169,15 @@ def test_cleanup_all(gce):
164169
gce.cleanup_disks = MagicMock()
165170
gce.cleanup_images = MagicMock()
166171
gce.cleanup_firewalls = MagicMock()
172+
gce.cleanup_forwarding_rules = MagicMock()
167173
gce.cleanup_routes = MagicMock()
168174
gce.cleanup_subnetworks = MagicMock()
169175
gce.cleanup_networks = MagicMock()
170176
gce.cleanup_all()
171177
gce.cleanup_disks.assert_called_once()
172178
gce.cleanup_images.assert_called_once()
173179
gce.cleanup_firewalls.assert_called_once()
180+
gce.cleanup_forwarding_rules.assert_called_once()
174181
gce.cleanup_routes.assert_called_once()
175182
gce.cleanup_networks.assert_called_once()
176183
gce.cleanup_subnetworks.assert_called_once()

0 commit comments

Comments
 (0)