in libcloud/compute/drivers/vsphere.py [0:0]
def _to_node(self, vm_id_host, interfaces):
"""
id, name, state, public_ips, private_ips,
driver, size=None, image=None, extra=None, created_at=None)
"""
vm_id = vm_id_host[0]
req = "/rest/vcenter/vm/" + vm_id
vm = self._request(req).object["value"]
name = vm["name"]
state = self.NODE_STATE_MAP[vm["power_state"].lower()]
# IP's
private_ips = []
nic_macs = set()
for nic in vm["nics"]:
nic_macs.add(nic["value"]["mac_address"])
for interface in interfaces:
if interface["mac"] in nic_macs:
private_ips.append(interface["ip"])
nic_macs.remove(interface["mac"])
if len(nic_macs) == 0:
break
public_ips = [] # should default_getaway be the public?
driver = self.connection.driver
# size
total_size = 0
gb_converter = 1024**3
for disk in vm["disks"]:
total_size += int(int(disk["value"]["capacity"] / gb_converter))
ram = int(vm["memory"]["size_MiB"])
cpus = int(vm["cpu"]["count"])
id_to_hash = str(ram) + str(cpus) + str(total_size)
size_id = hashlib.md5(id_to_hash.encode("utf-8")).hexdigest() # nosec
size_name = name + "-size"
size_extra = {"cpus": cpus}
size = NodeSize(
id=size_id,
name=size_name,
ram=ram,
disk=total_size,
bandwidth=0,
price=0,
driver=driver,
extra=size_extra,
)
# image
image_name = vm["guest_OS"]
image_id = image_name + "_id"
image_extra = {"type": "guest_OS"}
image = NodeImage(id=image_id, name=image_name, driver=driver, extra=image_extra)
extra = {"snapshots": []}
if len(vm_id_host) > 1:
extra["host"] = vm_id_host[1].get("name", "")
return Node(
id=vm_id,
name=name,
state=state,
public_ips=public_ips,
private_ips=private_ips,
driver=driver,
size=size,
image=image,
extra=extra,
)