in selftest/selftest.py [0:0]
def get_imds_metadata() -> Dict:
"""Fetch IMDS metadata using urllib."""
url = "http://169.254.169.254/metadata/instance?api-version=2021-02-01"
headers = {"Metadata": "true"}
req = urllib.request.Request(url, headers=headers)
last_error = None
deadline = time.time() + 300
while time.time() < deadline:
try:
with urllib.request.urlopen(req, timeout=60) as response:
if response.status != 200:
raise urllib.error.HTTPError(
url,
response.status,
"Failed to fetch metadata",
response.headers,
None,
)
metadata = json.load(response)
logger.debug("fetched IMDS metadata: %r", metadata)
return metadata
except urllib.error.URLError as error:
last_error = error
logger.error("error fetching IMDS metadata: %r", error)
time.sleep(1)
raise RuntimeError(f"failed to fetch IMDS metadata: {last_error}")