Added GCP instance as well

This commit is contained in:
Shay Nehmad 2020-01-19 16:22:28 +02:00
parent 26355540bd
commit 422fe6ff06
3 changed files with 43 additions and 1 deletions

View File

@ -2,9 +2,10 @@ from typing import List
from common.cloud.aws.aws_instance import AwsInstance from common.cloud.aws.aws_instance import AwsInstance
from common.cloud.azure.azure_instance import AzureInstance from common.cloud.azure.azure_instance import AzureInstance
from common.cloud.gcp.gcp_instance import GcpInstance
from common.cloud.instance import CloudInstance from common.cloud.instance import CloudInstance
all_cloud_instances = [AwsInstance(), AzureInstance()] all_cloud_instances = [AwsInstance(), AzureInstance(), GcpInstance()]
def get_all_cloud_instances() -> List[CloudInstance]: def get_all_cloud_instances() -> List[CloudInstance]:

View File

View File

@ -0,0 +1,41 @@
import logging
import requests
from common.cloud.environment_names import GCP
from common.cloud.instance import CloudInstance
logger = logging.getLogger(__name__)
GCP_METADATA_SERVICE_URL = "http://metadata.google.internal/"
class GcpInstance(CloudInstance):
def is_instance(self):
return self.on_gcp
def get_cloud_provider_name(self) -> str:
return GCP
def __init__(self):
"""
Determines if on GCP.
"""
self.on_gcp = False
try:
# If not on GCP, this domain shouldn't resolve.
response = requests.get(GCP_METADATA_SERVICE_URL)
if response:
logger.debug("Got response, so probably on GCP. Trying to parse.")
self.on_gcp = True
if "Metadata-Flavor" not in response.headers:
logger.warning("Got unexpected GCP Metadata format")
else:
if not response.headers["Metadata-Flavor"] == "Google":
logger.warning("Got unexpected Metadata flavor: {}".format(response.headers["Metadata-Flavor"]))
else:
logger.warning("On GCP, but metadata response not ok: {}".format(response.status_code))
except requests.RequestException:
logger.debug("Failed to get response from GCP metadata service: This instance is not on GCP.")
self.on_gcp = False