in libcloud/compute/drivers/digitalocean.py [0:0]
def _to_node(self, data):
extra_keys = [
"memory",
"vcpus",
"disk",
"image",
"size",
"size_slug",
"locked",
"created_at",
"networks",
"kernel",
"backup_ids",
"snapshot_ids",
"features",
"tags",
]
if "status" in data:
state = self.NODE_STATE_MAP.get(data["status"], NodeState.UNKNOWN)
else:
state = NodeState.UNKNOWN
created = parse_date(data["created_at"])
networks = data["networks"]
private_ips = []
public_ips = []
if networks:
for net in networks["v4"]:
if net["type"] == "private":
private_ips = [net["ip_address"]]
if net["type"] == "public":
public_ips = [net["ip_address"]]
extra = {}
for key in extra_keys:
if key in data:
extra[key] = data[key]
extra["region"] = data.get("region", {}).get("name")
# Untouched extra values, backwards compatibility
resolve_data = data.get("image")
if resolve_data:
image = self._to_image(resolve_data)
else:
image = None
resolve_data = extra.get("size")
if resolve_data:
size = self._to_size(resolve_data)
else:
size = None
node = Node(
id=data["id"],
name=data["name"],
state=state,
image=image,
size=size,
public_ips=public_ips,
private_ips=private_ips,
created_at=created,
driver=self,
extra=extra,
)
return node