# HG changeset patch # User Gregory Szorc # Date 2019-04-19 12:20:33 # Node ID dd6a9723ae2bc059e677b353da044f550ece31e9 # Parent fcb97cb91ff8e9c27f80a1c58662afd33eed0bec automation: don't create resources when deleting things Otherwise running these commands can result in resources being created. In the case of `purge-ec2-resources`, we will create resources only to delete them immediately afterwards! With this change, `purge-ec2-resources` now no-ops if no resources exist. # no-check-commit because foo_bar function name Differential Revision: https://phab.mercurial-scm.org/D6285 diff --git a/contrib/automation/hgautomation/__init__.py b/contrib/automation/hgautomation/__init__.py --- a/contrib/automation/hgautomation/__init__.py +++ b/contrib/automation/hgautomation/__init__.py @@ -53,7 +53,7 @@ class HGAutomation: return password - def aws_connection(self, region: str): + def aws_connection(self, region: str, ensure_ec2_state: bool=True): """Obtain an AWSConnection instance bound to a specific region.""" - return AWSConnection(self, region) + return AWSConnection(self, region, ensure_ec2_state=ensure_ec2_state) diff --git a/contrib/automation/hgautomation/aws.py b/contrib/automation/hgautomation/aws.py --- a/contrib/automation/hgautomation/aws.py +++ b/contrib/automation/hgautomation/aws.py @@ -180,7 +180,7 @@ Install-WindowsFeature -Name Net-Framewo class AWSConnection: """Manages the state of a connection with AWS.""" - def __init__(self, automation, region: str): + def __init__(self, automation, region: str, ensure_ec2_state: bool=True): self.automation = automation self.local_state_path = automation.state_path @@ -191,11 +191,12 @@ class AWSConnection: self.ec2resource = self.session.resource('ec2') self.iamclient = self.session.client('iam') self.iamresource = self.session.resource('iam') - - ensure_key_pairs(automation.state_path, self.ec2resource) + self.security_groups = {} - self.security_groups = ensure_security_groups(self.ec2resource) - ensure_iam_state(self.iamresource) + if ensure_ec2_state: + ensure_key_pairs(automation.state_path, self.ec2resource) + self.security_groups = ensure_security_groups(self.ec2resource) + ensure_iam_state(self.iamresource) def key_pair_path_private(self, name): """Path to a key pair private key file.""" diff --git a/contrib/automation/hgautomation/cli.py b/contrib/automation/hgautomation/cli.py --- a/contrib/automation/hgautomation/cli.py +++ b/contrib/automation/hgautomation/cli.py @@ -95,12 +95,12 @@ def build_all_windows_packages(hga: HGAu def terminate_ec2_instances(hga: HGAutomation, aws_region): - c = hga.aws_connection(aws_region) + c = hga.aws_connection(aws_region, ensure_ec2_state=False) aws.terminate_ec2_instances(c.ec2resource) def purge_ec2_resources(hga: HGAutomation, aws_region): - c = hga.aws_connection(aws_region) + c = hga.aws_connection(aws_region, ensure_ec2_state=False) aws.remove_resources(c)