From 5dd89c097bbfc91341d9acb3c224bd981f86b6c7 Mon Sep 17 00:00:00 2001 From: ebenner Date: Fri, 6 Jan 2023 16:00:21 -0500 Subject: [PATCH 1/4] Fix issue regarding cache and region codes --- cloudinit/sources/DataSourceVultr.py | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/cloudinit/sources/DataSourceVultr.py b/cloudinit/sources/DataSourceVultr.py index 93b04829eca..943242e3b79 100644 --- a/cloudinit/sources/DataSourceVultr.py +++ b/cloudinit/sources/DataSourceVultr.py @@ -50,10 +50,12 @@ def _get_data(self): self.metadata = self.get_metadata() self.metadata["instance-id"] = self.metadata["instance-v2-id"] self.metadata["local-hostname"] = self.metadata["hostname"] - region = self.metadata["region"]["regioncode"] - if "countrycode" in self.metadata["region"]: - region = self.metadata["region"]["countrycode"] - self.metadata["region"] = region.lower() + # init-local uses a cache, region wont be a dict + if isinstance(self.metadata["region"], dict): + region = self.metadata["region"]["regioncode"] + if "countrycode" in self.metadata["region"]: + region = self.metadata["region"]["countrycode"] + self.metadata["region"] = region.lower() self.userdata_raw = self.metadata["user-data"] # Generate config and process data From bd3b8ec8ebaa88cf3e0f31933859193ec7a73d50 Mon Sep 17 00:00:00 2001 From: ebenner Date: Sat, 7 Jan 2023 01:13:04 -0500 Subject: [PATCH 2/4] Refactor how metadata is used --- cloudinit/sources/DataSourceVultr.py | 8 -------- cloudinit/sources/helpers/vultr.py | 14 +++++++++++++- 2 files changed, 13 insertions(+), 9 deletions(-) diff --git a/cloudinit/sources/DataSourceVultr.py b/cloudinit/sources/DataSourceVultr.py index 943242e3b79..a2c169915af 100644 --- a/cloudinit/sources/DataSourceVultr.py +++ b/cloudinit/sources/DataSourceVultr.py @@ -48,14 +48,6 @@ def _get_data(self): # Fetch metadata self.metadata = self.get_metadata() - self.metadata["instance-id"] = self.metadata["instance-v2-id"] - self.metadata["local-hostname"] = self.metadata["hostname"] - # init-local uses a cache, region wont be a dict - if isinstance(self.metadata["region"], dict): - region = self.metadata["region"]["regioncode"] - if "countrycode" in self.metadata["region"]: - region = self.metadata["region"]["countrycode"] - self.metadata["region"] = region.lower() self.userdata_raw = self.metadata["user-data"] # Generate config and process data diff --git a/cloudinit/sources/helpers/vultr.py b/cloudinit/sources/helpers/vultr.py index de2d0eb077e..30c8cfee8db 100644 --- a/cloudinit/sources/helpers/vultr.py +++ b/cloudinit/sources/helpers/vultr.py @@ -37,7 +37,9 @@ def get_metadata(url, timeout, retries, sec_between, agent, tmp_dir=None): # Fetch the metadata v1 = read_metadata(url, timeout, retries, sec_between, agent) - return json.loads(v1) + metadata = json.loads(v1) + refactor_metadata(metadata) + return metadata except ( NoDHCPLeaseError, subp.ProcessExecutionError, @@ -49,6 +51,16 @@ def get_metadata(url, timeout, retries, sec_between, agent, tmp_dir=None): raise exception +# Refactor metadata into acceptable format +def refactor_metadata(metadata): + metadata["instance-id"] = metadata["instance-v2-id"] + metadata["local-hostname"] = metadata["hostname"] + region = metadata["region"]["regioncode"] + if "countrycode" in metadata["region"]: + region = metadata["region"]["countrycode"] + metadata["region"] = region.lower() + + # Get interface list, sort, and clean def get_interface_list(): ifaces = [] From baac1c95d95d674474a4ada3e64ffc11577d1b84 Mon Sep 17 00:00:00 2001 From: ebenner Date: Sat, 7 Jan 2023 01:55:37 -0500 Subject: [PATCH 3/4] Refactor unittests --- tests/unittests/sources/test_vultr.py | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/tests/unittests/sources/test_vultr.py b/tests/unittests/sources/test_vultr.py index 27481e8e040..64a11bdd6e5 100644 --- a/tests/unittests/sources/test_vultr.py +++ b/tests/unittests/sources/test_vultr.py @@ -30,6 +30,9 @@ }, }, "hostname": "CLOUDINIT_1", + "local-hostname": "CLOUDINIT_1", + "instance-v2-id": "29bea708-2e6e-480a-90ad-0e6b5d5ad62f", + "instance-id": "29bea708-2e6e-480a-90ad-0e6b5d5ad62f", "instanceid": "42506325", "interfaces": [ { @@ -50,7 +53,7 @@ } ], "public-keys": ["ssh-rsa AAAAB3NzaC1y...IQQhv5PAOKaIl+mM3c= test3@key"], - "region": {"regioncode": "EWR"}, + "region": "US", "user-defined": [], "startup-script": "echo No configured startup script", "raid1-script": "", @@ -85,7 +88,9 @@ }, }, "hostname": "CLOUDINIT_2", + "local-hostname": "CLOUDINIT_2", "instance-v2-id": "29bea708-2e6e-480a-90ad-0e6b5d5ad62f", + "instance-id": "29bea708-2e6e-480a-90ad-0e6b5d5ad62f", "instanceid": "42872224", "interfaces": [ { @@ -121,7 +126,7 @@ }, ], "public-keys": ["ssh-rsa AAAAB3NzaC1y...IQQhv5PAOKaIl+mM3c= test3@key"], - "region": {"regioncode": "EWR"}, + "region": "US", "user-defined": [], "startup-script": "echo No configured startup script", "user-data": [], From be9ce958fea714d5fba1d9a1cfadadc459792f3d Mon Sep 17 00:00:00 2001 From: ebenner Date: Sat, 7 Jan 2023 06:56:33 -0500 Subject: [PATCH 4/4] Lowercase --- tests/unittests/sources/test_vultr.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/tests/unittests/sources/test_vultr.py b/tests/unittests/sources/test_vultr.py index 64a11bdd6e5..cfd2f376379 100644 --- a/tests/unittests/sources/test_vultr.py +++ b/tests/unittests/sources/test_vultr.py @@ -53,7 +53,7 @@ } ], "public-keys": ["ssh-rsa AAAAB3NzaC1y...IQQhv5PAOKaIl+mM3c= test3@key"], - "region": "US", + "region": "us", "user-defined": [], "startup-script": "echo No configured startup script", "raid1-script": "", @@ -126,7 +126,7 @@ }, ], "public-keys": ["ssh-rsa AAAAB3NzaC1y...IQQhv5PAOKaIl+mM3c= test3@key"], - "region": "US", + "region": "us", "user-defined": [], "startup-script": "echo No configured startup script", "user-data": [],