Skip to content

Commit ddbc9fd

Browse files
committed
decommission "data centers" in favor of "regions"
1 parent ba55312 commit ddbc9fd

4 files changed

Lines changed: 47 additions & 126 deletions

File tree

netfoundry/ctl.py

Lines changed: 9 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -523,17 +523,17 @@ def get(cli, echo: bool = True, spinner: object = None):
523523
else:
524524
cli.log.error("need --network=ACMENet")
525525
sysexit(1)
526-
if cli.args.resource_type == "data-center":
526+
if cli.args.resource_type == "region":
527527
if 'id' in query_keys:
528-
cli.log.warn("data centers fetched by ID may not support this network's product version, try provider or locationCode params for safety")
528+
cli.log.warn("regions fetched by ID may not support this network's product version, try provider or locationCode params for safety")
529529
if len(query_keys) > 1:
530530
query_keys.remove('id')
531531
cli.log.warn(f"using 'id' only, ignoring params: '{', '.join(query_keys)}'")
532-
match = network.get_data_center_by_id(id=cli.args.query['id'])
532+
match = network.get_region_by_id(id=cli.args.query['id'])
533533
else:
534-
matches = network.find_edge_router_data_centers(**cli.args.query)
534+
matches = networks.find_regions(**cli.args.query)
535535
if len(matches) == 1:
536-
match = network.get_data_center_by_id(id=matches[0]['id'])
536+
match = network.get_region_by_id(id=matches[0]['id'])
537537
else:
538538
if 'id' in query_keys:
539539
if len(query_keys) > 1:
@@ -618,7 +618,7 @@ def list(cli, echo: bool = True, spinner: object = None):
618618
cli.log.debug("got spinner as function param")
619619
if RESOURCE_ABBREV.get(cli.args.resource_type):
620620
cli.args.resource_type = RESOURCE_ABBREV[cli.args.resource_type].name
621-
if cli.args.accept and not MUTABLE_NET_RESOURCES.get(cli.args.resource_type): # mutable excludes data-centers
621+
if cli.args.accept and not MUTABLE_NET_RESOURCES.get(cli.args.resource_type):
622622
cli.log.warn("the --as=ACCEPT param is not applicable to resources outside the network domain")
623623
if cli.args.query and cli.args.query.get('id'):
624624
cli.log.warn("try 'get' command to get by id")
@@ -676,10 +676,7 @@ def list(cli, echo: bool = True, spinner: object = None):
676676
else:
677677
cli.log.error("first configure a network: '--network=ACMENet'")
678678
sysexit(1)
679-
if cli.args.resource_type == "data-centers":
680-
matches = network.find_edge_router_data_centers(**cli.args.query)
681-
else:
682-
matches = network.find_resources(type=cli.args.resource_type, accept=cli.args.accept, params=cli.args.query)
679+
matches = network.find_resources(type=cli.args.resource_type, accept=cli.args.accept, params=cli.args.query)
683680

684681
if len(matches) == 0:
685682
spinner.fail(f"Found no {cli.args.resource_type} by '{', '.join(query_keys)}'")
@@ -978,8 +975,8 @@ def demo(cli):
978975
# a list of locations to place a hosted router
979976
fabric_placements = []
980977
for region in cli.config.demo.regions:
981-
dc_matches = network.find_edge_router_data_centers(provider=cli.config.demo.provider, location_code=region)
982-
if not len(dc_matches) == 1:
978+
region_matches = networks.find_regions(provider=cli.config.demo.provider, location_code=region)
979+
if not len(region_matches) == 1:
983980
raise RuntimeError(f"invalid region '{region}'")
984981
else:
985982
existing_count = len([er for er in hosted_edge_routers if er['provider'] == cli.config.demo.provider and er['region'] == region])

netfoundry/network.py

Lines changed: 19 additions & 54 deletions
Original file line numberDiff line numberDiff line change
@@ -265,59 +265,25 @@ def validate_entity_roles(self, entities: list, type: str):
265265

266266
return(valid_entities)
267267

268-
def get_data_center_by_id(self, id: str):
269-
"""Get data centers by UUIDv4.
268+
def get_region_by_id(self, id: str):
269+
"""Get data center region by UUIDv4.
270270
271271
:param id: required UUIDv4 of data center
272272
"""
273-
url = self.audience+'core/v2/data-centers/'+id
274-
headers = {"authorization": "Bearer " + self.token}
275-
try:
276-
data_center, status_symbol = get_generic_resource_by_url(url=url, headers=headers, proxies=self.proxies, verify=self.verify)
277-
except Exception as e:
278-
raise RuntimeError(f"failed to get data_center from url: '{url}', caught {e}")
279-
else:
280-
return(data_center)
273+
url = self.audience+'core/v2/regions/'+id
274+
data_center, status_symbol = get_generic_resource_by_url(setup=self, url=url)
275+
return(data_center)
276+
get_data_center_by_id = get_region_by_id
281277

282278
@docstring_parameters(providers=str(DC_PROVIDERS))
283-
def find_edge_router_data_centers(self, provider: str = None, location_code: str = None, **kwargs):
284-
"""Find data centers for hosting edge routers.
279+
def find_regions(self, **kwargs):
280+
"""Find regions for hosted router placement.
285281
286-
:param provider: optionally filter by data center provider, choices: {providers}
287-
:param location_code: provider-specific string identifying the data center location e.g. us-west-1
282+
:param provider: optionally filter by data-center region provider, choices: {providers}
288283
"""
289-
params = dict()
290-
for param in kwargs.keys():
291-
if param == 'region':
292-
location_code = kwargs[param]
293-
else:
294-
params[param] = kwargs[param]
295-
if not params.get('productVersion'):
296-
params["productVersion"] = self.product_version
297-
if not params.get('hostType'):
298-
params["hostType"] = "ER"
299-
300-
if location_code:
301-
params["locationCode"] = location_code
302-
elif params.get('locationCode'):
303-
location_code = params['locationCode'] # query param not yet implemented in API so store it in function to filter the list in response
304-
elif params.get('region'):
305-
location_code = params['region'] # alternatively, get the location_code from a 'region' query param
306-
if provider is not None:
307-
if provider in DC_PROVIDERS:
308-
params['provider'] = provider
309-
else:
310-
raise RuntimeError(f"unknown cloud provider '{provider}'. Need one of {str(DC_PROVIDERS)}")
311-
312-
url = self.audience+'core/v2/data-centers'
313-
data_centers = list()
314-
for i in find_generic_resources(setup=self, url=url, embedded=NET_RESOURCES['data-centers']._embedded, **params):
315-
data_centers.extend(i)
316-
if location_code:
317-
return [dc for dc in data_centers if dc['locationCode'] == location_code]
318-
else:
319-
return data_centers
320-
get_edge_router_data_centers = find_edge_router_data_centers
284+
return self.Networks.find_regions(**kwargs)
285+
get_edge_router_data_centers = find_regions
286+
find_edge_router_data_centers = find_regions
321287

322288
def share_endpoint(self, recipient, endpoint_id):
323289
"""
@@ -1687,12 +1653,11 @@ def find_regions(self, **kwargs):
16871653
for param in kwargs.keys():
16881654
params[param] = kwargs[param]
16891655

1656+
if params.get('provider') and not params['provider'] in DC_PROVIDERS:
1657+
raise RuntimeError(f"unknown cloud provider '{params['provider']}'. Need one of {str(DC_PROVIDERS)}")
1658+
16901659
url = self.audience+NET_RESOURCES['regions'].find_url
1691-
try:
1692-
regions = list()
1693-
for i in find_generic_resources(setup=self, url=url, embedded=NET_RESOURCES['data-centers']._embedded, **params):
1694-
regions.extend(i)
1695-
except Exception as e:
1696-
raise RuntimeError(f"failed to get data-centers from url: '{url}', caught {e}")
1697-
else:
1698-
return(regions)
1660+
regions = list()
1661+
for i in find_generic_resources(setup=self, url=url, embedded=NET_RESOURCES['regions']._embedded, **params):
1662+
regions.extend(i)
1663+
return(regions)

netfoundry/network_group.py

Lines changed: 19 additions & 39 deletions
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,6 @@ class NetworkGroup:
1313
def __init__(self, Organization: object, network_group_id: str = None, network_group_name: str = None, group: str = None):
1414
"""Initialize the network group class with a group name or ID."""
1515
self.logger = Organization.logger
16-
self.Networks = Networks(Organization)
1716
self.network_groups = Organization.find_network_groups_by_organization()
1817
if (not network_group_id and not network_group_name) and group:
1918
self.logger.debug(f"got 'group' = '{group}' which could be a short name or id")
@@ -70,13 +69,14 @@ def __init__(self, Organization: object, network_group_id: str = None, network_g
7069
for net in Organization.get_networks_by_group(network_group_id=self.network_group_id):
7170
self.network_ids_by_normal_name[normalize_caseless(net['name'])] = net['id']
7271

73-
def nc_data_centers_by_location(self):
74-
"""Get a controller data center by locationCode."""
75-
my_nc_data_centers_by_location = dict()
76-
for dc in self.get_controller_data_centers():
77-
my_nc_data_centers_by_location[dc['locationCode']] = dc['id']
72+
def map_region_id_by_location_code(self):
73+
"""Map all region ids by their location code e.g. us-west-1: id."""
74+
region_map = dict()
75+
for region in Networks.find_regions(provider='OCP') + Networks.find_regions(provider='AWS'):
76+
region_map[region['locationCode']] = region['id']
7877
# e.g. { us-east-1: 02f0eb51-fb7a-4d2e-8463-32bd9f6fa4d7 }
79-
return(my_nc_data_centers_by_location)
78+
return(region_map)
79+
nc_data_centers_by_location = map_region_id_by_location_code
8080

8181
# resolve network UUIDs by name
8282
def network_id_by_normal_name(self, name):
@@ -101,26 +101,10 @@ def network_exists(self, name: str, deleted: bool = False):
101101
else:
102102
return(False)
103103

104-
def nc_data_centers(self, **kwargs):
105-
"""Find network controller data centers."""
106-
# data centers returns a list of dicts (data center objects)
107-
params = dict()
108-
for param in kwargs.keys():
109-
params[param] = kwargs[param]
110-
params["productVersion"] = self.find_latest_network_version(is_active=True)
111-
params["hostType"] = "NC"
112-
params["provider"] = "AWS"
113-
114-
url = self.audience+'core/v2/data-centers'
115-
headers = {"authorization": "Bearer " + self.token}
116-
try:
117-
data_centers = list()
118-
for i in find_generic_resources(setup=self, url=url, embedded=NET_RESOURCES['data-centers']._embedded, **params):
119-
data_centers.extend(i)
120-
except Exception as e:
121-
raise RuntimeError(f"failed to get data-centers from url: '{url}', caught {e}")
122-
else:
123-
return(data_centers)
104+
def find_regions(self, **kwargs):
105+
"""Find network controller data center regions."""
106+
return(Networks.find_regions(**kwargs))
107+
nc_data_centers = find_regions
124108

125109
# provide a compatible alias
126110
get_controller_data_centers = nc_data_centers
@@ -133,19 +117,15 @@ def get_product_metadata(self, is_active: bool = True):
133117
:param product_version: semver string of a single version to get, default is all versions
134118
"""
135119
url = self.audience+'product-metadata/v2/download-urls.json'
136-
try:
137-
all_product_metadata, status_symbol = get_generic_resource_by_url(setup=self, url=url)
138-
except Exception as e:
139-
raise RuntimeError(f"failed to get product-metadata from url: '{url}', caught {e}")
120+
all_product_metadata, status_symbol = get_generic_resource_by_url(setup=self, url=url)
121+
if is_active:
122+
filtered_product_metadata = dict()
123+
for product in all_product_metadata.keys():
124+
if all_product_metadata[product]['active']:
125+
filtered_product_metadata[product] = all_product_metadata[product]
126+
return (filtered_product_metadata)
140127
else:
141-
if is_active:
142-
filtered_product_metadata = dict()
143-
for product in all_product_metadata.keys():
144-
if all_product_metadata[product]['active']:
145-
filtered_product_metadata[product] = all_product_metadata[product]
146-
return (filtered_product_metadata)
147-
else:
148-
return (all_product_metadata)
128+
return (all_product_metadata)
149129

150130
def find_network_versions(self, is_active: bool = True):
151131
"""Find active network versions."""

netfoundry/utility.py

Lines changed: 0 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -687,13 +687,6 @@ def __post_init__(self):
687687
status_symbols=PROCESS_STATUS_SYMBOLS,
688688
abbreviation='ex',
689689
),
690-
# 'processes': ResourceType( # not a fully-fledged resource type because there is no "find processes" operation at this time
691-
# name='processes',
692-
# domain='network',
693-
# mutable=False,
694-
# embeddable=False,
695-
# status_symbols=PROCESS_STATUS_SYMBOLS,
696-
# ),
697690
'regions': ResourceType(
698691
name='regions',
699692
domain='network',
@@ -708,13 +701,6 @@ def __post_init__(self):
708701
embeddable=False,
709702
_embedded='network-versions',
710703
),
711-
'data-centers': ResourceType(
712-
name='data-centers',
713-
domain='network',
714-
_embedded='dataCenters',
715-
mutable=False,
716-
embeddable=False,
717-
),
718704
'organizations': ResourceType(
719705
name='organizations',
720706
domain='identity',
@@ -729,13 +715,6 @@ def __post_init__(self):
729715
embeddable=False,
730716
find_url='rest/v1/network-groups',
731717
),
732-
# 'download-urls': ResourceType(
733-
# name='download-urls',
734-
# domain='network-group',
735-
# mutable=False,
736-
# embeddable=False,
737-
# find_url='product-metadata/v2',
738-
# ),
739718
'networks': ResourceType(
740719
name='networks',
741720
domain='network',

0 commit comments

Comments
 (0)