auto try later AMI

This commit is contained in:
Sagar Karandikar 2023-06-13 17:00:31 -07:00
parent 546ad3f29f
commit 6d48d2ef2a
1 changed files with 29 additions and 3 deletions

View File

@ -48,7 +48,23 @@ def get_f1_ami_name() -> str:
else: else:
if cuser != "centos": if cuser != "centos":
print("Unknown $USER (expected centos/amzn). Defaulting to the Centos AWS EC2 AMI.") print("Unknown $USER (expected centos/amzn). Defaulting to the Centos AWS EC2 AMI.")
return "FPGA Developer AMI - 1.12.2-40257ab5-6688-4c95-97d1-e251a40fd1fc" return "FPGA Developer AMI - 1.12.1-40257ab5-6688-4c95-97d1-e251a40fd1fc"
def get_incremented_f1_ami_name(ami_name: str, increment: int) -> str:
""" For an ami_name of the format "STUFF - X.Y.Z-hash-stuff",
return ami_name, but with Z incremented by increment for auto-bumping
the AMI on hotfix releases. """
base_name = get_f1_ami_name()
split1 = base_name.split(" - ")
prefix = split1[0] + " - "
split2 = split1[1].split("-")
suffix = "-" + "-".join(split2[1:])
version_number = list(map(int, split2[0].split(".")))
version_number[-1] += increment
version_number = ".".join(map(str, version_number))
return prefix + version_number + suffix
class MockBoto3Instance: class MockBoto3Instance:
""" This is used for testing without actually launching instances. """ """ This is used for testing without actually launching instances. """
@ -286,13 +302,23 @@ def awsinit() -> None:
else: else:
rootLogger.info("You did not supply an email address. No notifications will be sent.") rootLogger.info("You did not supply an email address. No notifications will be sent.")
# AMIs are region specific # AMIs are region specific
def get_f1_ami_id() -> str: def get_f1_ami_id() -> str:
""" Get the AWS F1 Developer AMI by looking up the image name -- should be region independent. """ Get the AWS F1 Developer AMI by looking up the image name -- should be region independent.
""" """
client = boto3.client('ec2') client = boto3.client('ec2')
response = client.describe_images(Filters=[{'Name': 'name', 'Values': [get_f1_ami_name()]}]) # Try up to MAX_ATTEMPTS additional hotfix versions of an AMI if the
# initial one fails.
MAX_ATTEMPTS = 10
for increment in range(MAX_ATTEMPTS):
ami_search_name = get_incremented_f1_ami_name(get_f1_ami_name(), increment)
if increment > 0:
rootLogger.warning(f"AMI {get_f1_ami_name()} not found. Trying: {ami_search_name}.")
response = client.describe_images(Filters=[{'Name': 'name', 'Values': [ami_search_name]}])
if len(response['Images']) >= 1:
if increment > 0:
rootLogger.warning(f"AMI {get_f1_ami_name()} not found. Successfully found: {ami_search_name}.")
break
assert len(response['Images']) == 1 assert len(response['Images']) == 1
return response['Images'][0]['ImageId'] return response['Images'][0]['ImageId']