def _to_node()

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