willsh1997's picture
:wrench: remove codecarbon install, add slightly modified codecarbon pkg to repo
deb7c43
Raw
History Blame Contribute Delete
2.41 kB
from typing import Any, Dict, Optional
import requests
from codecarbon.external.logger import logger
def postprocess_gcp_cloud_metadata(cloud_metadata: Dict[str, Any]) -> Dict[str, Any]:
# Attributes contains custom metadata and also contains Kubernetes config,
# startup script and secrets, filter it out
if "attributes" in cloud_metadata:
del cloud_metadata["attributes"]
return cloud_metadata
CLOUD_METADATA_MAPPING: Dict[str, Dict[str, Any]] = {
"AWS": {
"url": "http://169.254.169.254/latest/dynamic/instance-identity/document",
"headers": {},
},
"Azure": {
"url": "http://169.254.169.254/metadata/instance?api-version=2019-08-15",
"headers": {"Metadata": "true"},
},
"GCP": {
"url": "http://169.254.169.254/computeMetadata/v1/instance/?recursive=true&alt=json", # noqa: E501
"headers": {"Metadata-Flavor": "Google"},
"postprocess_function": postprocess_gcp_cloud_metadata,
},
}
def get_env_cloud_details(timeout: int = 1) -> Optional[Any]:
"""
>>> get_env_cloud_details()
{'provider': 'AWS',
'metadata': {'accountId': '26550917306',
'architecture': 'x86_64',
'availabilityZone': 'us-east-1b',
'billingProducts': None,
'devpayProductCodes': None,
'marketplaceProductCodes': None,
'imageId': 'ami-025ed45832b817a35',
'instanceId': 'i-7c3e81fed58d8f7f7',
'instanceType': 'g4dn.2xlarge',
'kernelId': None,
'pendingTime': '2020-01-23T20:44:53Z',
'privateIp': '172.156.72.143',
'ramdiskId': None,
'region': 'us-east-1',
'version': '2017-09-30'}}
"""
for provider in CLOUD_METADATA_MAPPING.keys():
try:
params = CLOUD_METADATA_MAPPING[provider]
response = requests.get(
params["url"], headers=params["headers"], timeout=timeout
)
response.raise_for_status()
response_data = response.json()
postprocess_function = params.get("postprocess_function")
if postprocess_function is not None:
response_data = postprocess_function(response_data)
return {"provider": provider, "metadata": response_data}
except requests.exceptions.RequestException:
logger.debug("Not running on %s", provider)
return None