Skip to main content

利用 python libvirt API 以阻塞方式启动和停止 qemu-kvm 机器

项目描述

virsh-开始-停止

我想使用 systemd 单元启动和停止单个 libvirt 虚拟机。

呼叫virsh start %ivirsh stop %i从单位不会削减它。这是因为它在关闭时不会阻塞,所以你不知道机器是否真的关闭了,除非你将它全部包装在一个 bash 脚本中并使用virsh list | grep myVM.

启动机器也具有挑战性,因为virsh start退出状态 1 用于多种错误条件,包括“机器已在运行”。

此脚本的目的是通过 libvirt python 绑定以易于从 systemd 使用的方式启动/停止给定的虚拟机。这意味着我尝试优雅地处理“已经运行”的情况。关闭以阻塞方式发生,可以选择从机器上拔下虚拟电源线,以防它忽略我们的礼貌请求。

我还借此机会每秒发出关闭请求,直到机器停机。当虚拟机运行 libvirt 来宾代理时,这应该是不必要的,但有时它可以帮助说服 Windows 真正关闭而不是询问“真的关闭?” 在没有人的虚拟控制台上单击确定。

示例 systemd 单元文件:

[Unit]
Description=virsh start / stop %i
Requires=libvirtd.service
After=libvirtd.service

[Service]
Type=oneshot
RemainAfterExit=true
ExecStart=/opt/vollmerhaus.net/venv/bin/virsh-start-stop --machine %i --state started
ExecStop=/opt/vollmerhaus.net/venv/bin/virsh-start-stop --machine %i --state stopped --timeout 80

[Install]
WantedBy=default.target

项目详情


下载文件

下载适用于您平台的文件。如果您不确定要选择哪个,请了解有关安装包的更多信息。

源分布

virsh_start_stop-0.0.1.tar.gz (5.6 kB 查看哈希)

已上传 source

内置发行版

virsh_start_stop-0.0.1-py3.6.egg (5.4 kB 查看哈希

已上传 3 6

virsh_start_stop-0.0.1-py3-none-any.whl (4.9 kB 查看哈希

已上传 py3