in contrib/aks-engine/azure.py [0:0]
def get_k8s_cluster_info(working_dir, dns_prefix, location):
kube_config_path = "{0}/_output/{1}/kubeconfig/kubeconfig.{2}.json".format(working_dir, dns_prefix, location)
master_string = "opmaster"
worker_string = "opworker"
config.load_kube_config(config_file=kube_config_path)
api_instance = client.CoreV1Api()
pretty = 'true'
timeout_seconds = 56
master = dict()
worker = dict()
sku = None
gpu_enable = False
master_ip = None
master_ip_internal = None
worker_count = 0
worker_with_gpu = 0
try:
api_response = api_instance.list_node(pretty=pretty, timeout_seconds=timeout_seconds)
for node in api_response.items:
gpu_resource = 0
if 'nvidia.com/gpu' in node.status.allocatable:
gpu_resource = int(parse_quantity(node.status.allocatable['nvidia.com/gpu']))
if master_string in node.metadata.name:
master[node.metadata.name] = {
"cpu-resource": int(parse_quantity(node.status.allocatable['cpu'])) - 2,
"mem-resource": int(parse_quantity(node.status.allocatable['memory']) / 1024 / 1024 ) - 8 * 1024,
"gpu-resource": gpu_resource,
}
master[node.metadata.name]["hostname"] = node.metadata.name
for address in node.status.addresses:
if address.type == "Hostname":
continue
if master_ip == None:
master_ip = address.address
if address.type == "ExternalIP":
master_ip = address.address
if address.type == "InternalIP":
master[node.metadata.name]["ip"] = address.address
master_ip_internal = address.address
elif worker_string in node.metadata.name:
worker[node.metadata.name] = {
"cpu-resource": int(parse_quantity(node.status.allocatable['cpu'])) - 2,
"mem-resource": int(parse_quantity(node.status.allocatable['memory']) / 1024 / 1024 ) - 8 * 1024,
"gpu-resource": gpu_resource,
}
if sku is None:
sku = dict()
if gpu_resource != 0:
sku["gpu_resource"] = worker[node.metadata.name]["gpu-resource"]
sku["mem-unit"] = int(worker[node.metadata.name]["mem-resource"] / worker[node.metadata.name]["gpu-resource"])
sku["cpu-unit"] = int(worker[node.metadata.name]["cpu-resource"] / worker[node.metadata.name]["gpu-resource"])
else:
sku["cpu_resource"] = worker[node.metadata.name]["cpu-resource"]
sku["mem-unit"] = int(worker[node.metadata.name]["mem-resource"] / worker[node.metadata.name]["cpu-resource"])
worker_count = worker_count + 1
if worker[node.metadata.name]["gpu-resource"] != 0:
worker_with_gpu = worker_with_gpu + 1
gpu_enable = True
worker[node.metadata.name]["hostname"] = node.metadata.name
for address in node.status.addresses:
if address.type == "Hostname":
continue
if address.type == "InternalIP":
worker[node.metadata.name]["ip"] = address.address
except ApiException as e:
logger.error("Exception when calling CoreV1Api->list_node: %s\n" % e)
return {
"master": master,
"worker": worker,
"sku": sku,
"gpu": gpu_enable,
"gpu-ready": worker_count == worker_with_gpu,
"master_ip": master_ip,
"master_internal": master_ip_internal,
"working_dir": "{0}/{1}".format(working_dir, TEMPORARY_DIR_NAME),
"kube_config": "{0}/_output/{1}/kubeconfig/kubeconfig.{2}.json".format(working_dir, dns_prefix, location)
}