Techdebt: Improve EC2 region handling (#4690)

This commit is contained in:
Bert Blommers 2021-12-15 08:57:42 -01:00 committed by GitHub
parent 878f150141
commit ecc00606c4
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
66 changed files with 169475 additions and 74 deletions

View File

@ -28,10 +28,11 @@ jobs:
uses: actions/cache@v2 uses: actions/cache@v2
with: with:
path: '~/.cache' path: '~/.cache'
key: 'terraformcache3' key: 'terraformcache_download'
- name: Download - name: Download
env: env:
DOWNLOAD_TEST_BIN: 1 DOWNLOAD_TEST_BIN: 1
TEST_BIN_URL: "https://moto-terraform-test.s3.amazonaws.com/aws.test"
if: ${{ steps.terraformcache.outputs.cache-hit != 'true' }} if: ${{ steps.terraformcache.outputs.cache-hit != 'true' }}
run: | run: |
cd moto-terraform-tests cd moto-terraform-tests
@ -286,7 +287,7 @@ jobs:
uses: actions/cache@v2 uses: actions/cache@v2
with: with:
path: '~/.cache' path: '~/.cache'
key: 'terraformcache3' key: 'terraformcache_download'
- name: Start MotoServer - name: Start MotoServer
run: | run: |
python setup.py sdist python setup.py sdist

View File

@ -199,9 +199,10 @@ for location_type in listdir(root / offerings_path):
INSTANCE_TYPE_OFFERINGS[location_type] = {} INSTANCE_TYPE_OFFERINGS[location_type] = {}
for _region in listdir(root / offerings_path / location_type): for _region in listdir(root / offerings_path / location_type):
full_path = offerings_path + "/" + location_type + "/" + _region full_path = offerings_path + "/" + location_type + "/" + _region
INSTANCE_TYPE_OFFERINGS[location_type][ res = load_resource(__name__, full_path)
_region.replace(".json", "") for instance in res:
] = load_resource(__name__, full_path) instance["LocationType"] = location_type
INSTANCE_TYPE_OFFERINGS[location_type][_region.replace(".json", "")] = res
if "MOTO_AMIS_PATH" in environ: if "MOTO_AMIS_PATH" in environ:
@ -1392,7 +1393,7 @@ class InstanceTypeOfferingBackend(object):
def describe_instance_type_offerings(self, location_type=None, filters=None): def describe_instance_type_offerings(self, location_type=None, filters=None):
location_type = location_type or "region" location_type = location_type or "region"
matches = INSTANCE_TYPE_OFFERINGS[location_type] matches = INSTANCE_TYPE_OFFERINGS[location_type]
matches = matches[self.region_name] matches = matches.get(self.region_name, [])
def matches_filters(offering, filters): def matches_filters(offering, filters):
def matches_filter(key, values): def matches_filter(key, values):
@ -1412,7 +1413,7 @@ class InstanceTypeOfferingBackend(object):
return all([matches_filter(key, values) for key, values in filters.items()]) return all([matches_filter(key, values) for key, values in filters.items()])
matches = [o for o in matches if matches_filters(o, filters)] matches = [o for o in matches if matches_filters(o, filters or {})]
return matches return matches
@ -2221,10 +2222,11 @@ class RegionsAndZonesBackend(object):
return ret return ret
def describe_availability_zones(self): def describe_availability_zones(self):
return self.zones[self.region_name] # We might not have any zones for the current region, if it was introduced recently
return self.zones.get(self.region_name, [])
def get_zone_by_name(self, name): def get_zone_by_name(self, name):
for zone in self.zones[self.region_name]: for zone in self.describe_availability_zones():
if zone.name == name: if zone.name == name:
return zone return zone
@ -6551,7 +6553,7 @@ class SpotFleetBackend(object):
class SpotPriceBackend(object): class SpotPriceBackend(object):
def describe_spot_price_history(self, instance_types=None, filters=None): def describe_spot_price_history(self, instance_types=None, filters=None):
matches = INSTANCE_TYPE_OFFERINGS["availability-zone"] matches = INSTANCE_TYPE_OFFERINGS["availability-zone"]
matches = matches[self.region_name] matches = matches.get(self.region_name, [])
def matches_filters(offering, filters): def matches_filters(offering, filters):
def matches_filter(key, values): def matches_filter(key, values):

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@ -53,9 +53,12 @@ def main():
) )
instances.extend(offerings["InstanceTypeOfferings"]) instances.extend(offerings["InstanceTypeOfferings"])
next_token = offerings.get("NextToken", None) next_token = offerings.get("NextToken", None)
for i in instances:
del i["LocationType"] # This can be reproduced, no need to persist it
instances = sorted(instances, key=lambda i: (i['Location'], i["InstanceType"]))
print("Writing data to {0}".format(dest)) print("Writing data to {0}".format(dest))
with open(dest, "w+") as open_file: with open(dest, "w+") as open_file:
json.dump(instances, open_file, sort_keys=True) json.dump(instances, open_file, indent=1)
except Exception as e: except Exception as e:
print("Unable to write data to {0}".format(dest)) print("Unable to write data to {0}".format(dest))
print(e) print(e)