Skip to content

Commit 91cd71d

Browse files
committed
Clean up.
1 parent ad20608 commit 91cd71d

File tree

2 files changed

+28
-31
lines changed

2 files changed

+28
-31
lines changed

src/toil/lib/aws/ami.py

Lines changed: 18 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -97,9 +97,9 @@ def _fetch_flatcar_feed(architecture: str = "amd64", source: str = "stable") ->
9797
return cast(bytes, urllib.request.urlopen(JSON_FEED_URL).read())
9898

9999

100-
def flatcar_release_feed_amis(
100+
def flatcar_release_feed_ami(
101101
region: str, architecture: str = "amd64", source: str = "stable"
102-
) -> Iterator[str]:
102+
) -> Optional[str]:
103103
"""
104104
Yield AMI IDs for the given architecture from the Flatcar release feed.
105105
@@ -126,7 +126,7 @@ def flatcar_release_feed_amis(
126126
# Flatcar servers did not return the feed
127127
logger.exception(f"Could not retrieve {source} Flatcar release feed JSON")
128128
# This is probably a permanent error, or at least unlikely to go away immediately.
129-
return
129+
return None
130130
except json.JSONDecodeError:
131131
# Feed is not JSON
132132
logger.exception(f"Could not decode {source} Flatcar release feed JSON")
@@ -143,12 +143,12 @@ def flatcar_release_feed_amis(
143143
# We could not get the JSON
144144
logger.error(f"Could not get a readable {source} Flatcar release feed JSON")
145145
# Bail on this method
146-
return
146+
return None
147147

148148
for ami_record in feed.get("amis", []):
149149
# Scan the list of regions
150150
if ami_record.get("name") == region:
151-
return ami_record.get("hvm")
151+
return str(ami_record.get("hvm")) if ami_record.get("hvm") else None
152152
# We didn't find our region
153153
logger.warning(f"Flatcar {source} release feed does not have an image for region {region}")
154154

@@ -175,20 +175,20 @@ def feed_flatcar_ami_release(
175175

176176
region = ec2_client._client_config.region_name # type: ignore
177177

178-
for ami in flatcar_release_feed_amis(region, architecture, source):
179-
# verify it exists on AWS
180-
try:
181-
response = ec2_client.describe_images(Filters=[{"Name": "image-id", "Values": [ami]}]) # type: ignore
182-
if (len(response["Images"]) == 1 and response["Images"][0]["State"] == "available"):
183-
return ami
184-
else:
185-
logger.warning(f"Flatcar release feed suggests image {ami} which does not exist on AWS in {region}")
186-
except (ClientError, EndpointConnectionError):
187-
# Sometimes we get back nonsense like:
188-
# botocore.exceptions.ClientError: An error occurred (AuthFailure) when calling the DescribeImages operation: AWS was not able to validate the provided access credentials
189-
# Don't hold that against the AMI.
190-
logger.exception(f"Unable to check if AMI {ami} exists on AWS in {region}; assuming it does")
178+
ami = flatcar_release_feed_ami(region, architecture, source)
179+
# verify it exists on AWS
180+
try:
181+
response = ec2_client.describe_images(Filters=[{"Name": "image-id", "Values": [ami]}]) # type: ignore
182+
if (len(response["Images"]) == 1 and response["Images"][0]["State"] == "available"):
191183
return ami
184+
else:
185+
logger.warning(f"Flatcar release feed suggests image {ami} which does not exist on AWS in {region}")
186+
except (ClientError, EndpointConnectionError):
187+
# Sometimes we get back nonsense like:
188+
# botocore.exceptions.ClientError: An error occurred (AuthFailure) when calling the DescribeImages operation: AWS was not able to validate the provided access credentials
189+
# Don't hold that against the AMI.
190+
logger.exception(f"Unable to check if AMI {ami} exists on AWS in {region}; assuming it does")
191+
return ami
192192
# We didn't find it
193193
logger.warning(f"Flatcar release feed does not have an image for region {region} that exists on AWS")
194194

src/toil/test/lib/test_ec2.py

Lines changed: 10 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@
1919
from toil.lib.aws.ami import (
2020
aws_marketplace_flatcar_ami_search,
2121
feed_flatcar_ami_release,
22-
flatcar_release_feed_amis,
22+
flatcar_release_feed_ami,
2323
get_flatcar_ami,
2424
ReleaseFeedUnavailableError
2525
)
@@ -39,24 +39,21 @@ class FlatcarFeedTest(ToilTest):
3939

4040
def test_parse_archive_feed(self):
4141
"""Make sure we can get a Flatcar release from the Internet Archive."""
42-
amis = list(flatcar_release_feed_amis("us-west-2", "amd64", "archive"))
43-
for ami in amis:
44-
self.assertEqual(len(ami), len("ami-02b46c73fed689d1c"))
45-
self.assertTrue(ami.startswith("ami-"))
42+
ami = flatcar_release_feed_ami("us-west-2", "amd64", "archive")
43+
self.assertEqual(len(ami), len("ami-02b46c73fed689d1c"))
44+
self.assertTrue(ami.startswith("ami-"))
4645

4746
def test_parse_beta_feed(self):
4847
"""Make sure we can get a Flatcar release from the beta channel."""
49-
amis = list(flatcar_release_feed_amis("us-west-2", "amd64", "beta"))
50-
for ami in amis:
51-
self.assertEqual(len(ami), len("ami-02b46c73fed689d1c"))
52-
self.assertTrue(ami.startswith("ami-"))
48+
ami = flatcar_release_feed_ami("us-west-2", "amd64", "beta")
49+
self.assertEqual(len(ami), len("ami-02b46c73fed689d1c"))
50+
self.assertTrue(ami.startswith("ami-"))
5351

5452
def test_parse_stable_feed(self):
5553
"""Make sure we can get a Flatcar release from the stable channel."""
56-
amis = list(flatcar_release_feed_amis("us-west-2", "amd64", "stable"))
57-
for ami in amis:
58-
self.assertEqual(len(ami), len("ami-02b46c73fed689d1c"))
59-
self.assertTrue(ami.startswith("ami-"))
54+
ami = flatcar_release_feed_ami("us-west-2", "amd64", "stable")
55+
self.assertEqual(len(ami), len("ami-02b46c73fed689d1c"))
56+
self.assertTrue(ami.startswith("ami-"))
6057

6158

6259
@needs_aws_ec2

0 commit comments

Comments
 (0)