def attach_volume()

in libcloud/compute/drivers/kubevirt.py [0:0]


    def attach_volume(self, node, volume, device="disk", ex_bus="virtio", ex_name=None):
        """
        params: bus, name , device (disk or lun)
        """
        # volume must be bound to a claim

        if not volume.extra["is_bound"]:
            volume = self._bind_volume(volume, node.extra["namespace"])

            if volume is None:
                raise LibcloudError(
                    "Selected Volume (PV) could not be bound "
                    "(to a PVC), please select another volume",
                    driver=self,
                )

        claimName = volume.extra["pvc"]["name"]

        if ex_name is None:
            name = claimName
        else:
            name = ex_name
        namespace = volume.extra["pvc"]["namespace"]
        # check if vm is stopped
        self.stop_node(node)
        # check if it is the same namespace

        if node.extra["namespace"] != namespace:
            msg = "The PVC and the VM must be in the same namespace"
            raise ValueError(msg)
        vm = node.name
        req = KUBEVIRT_URL + "namespaces/" + namespace + "/virtualmachines/" + vm
        disk_dict = {device: {"bus": ex_bus}, "name": name}
        volumes_dict = {"persistentVolumeClaim": {"claimName": claimName}, "name": name}
        # Get all the volumes of the vm
        try:
            result = self.connection.request(req).object
        except Exception:
            raise
        disks = result["spec"]["template"]["spec"]["domain"]["devices"]["disks"]
        volumes = result["spec"]["template"]["spec"]["volumes"]
        disks.append(disk_dict)
        volumes.append(volumes_dict)
        # now patch the new volumes and disks lists into the resource
        headers = {"Content-Type": "application/merge-patch+json"}
        data = {
            "spec": {
                "template": {
                    "spec": {
                        "volumes": volumes,
                        "domain": {"devices": {"disks": disks}},
                    }
                }
            }
        }
        try:
            result = self.connection.request(
                req, method="PATCH", data=json.dumps(data), headers=headers
            )

            if "pvcs" in node.extra:
                node.extra["pvcs"].append(claimName)
            else:
                node.extra["pvcs"] = [claimName]

            return result in VALID_RESPONSE_CODES
        except Exception:
            raise