gpt4 book ai didi

Python libvirt API - 创建虚拟机

转载 作者:太空狗 更新时间:2023-10-30 02:29:09 25 4
gpt4 key购买 nike

我正在尝试创建一个 python 脚本来处理基本的 VM 操作,例如:创建 VM、删除 VM、启动、停止等。

目前我相当“卡在”create

从命令行你会做这样的事情:

qemu-img create -f qcow2 vdisk.img <size>
virt-install --virt-type kvm --name testVM --ram 1024
--cdrom=ubuntu.iso --disk /path/to/virtual/drive,size=10,format=qcow2
--network network=default --graphics vnc,listen=0.0.0.0 --noautoconsole
--os-type=linux

这将创建一个名为 testVM 的新 VM,并将其安装在先前定义的 vdisk.img

但我想在 python 中完成这一切;我知道如何处理第二部分:

  1. 从 VM 的 XML 模板开始

  2. 打开 libvirt 连接并使用连接处理程序创建 VM

    但我想知道第一部分,您必须在其中创建虚拟磁盘。

是否有您可以使用的libvirt API 调用

或者,您必须对 qemu-img create 进行系统调用以创建虚拟磁盘?

最佳答案

我终于找到并解决了我的问题 - 所以我将解决方案发布在这里,以防有人遇到同样的问题。

libvirt 连接对象可以与存储池一起使用。

来自 libvirt.org:“存储池是由管理员(通常是专门的存储管理员)留出的一定数量的存储空间,供虚拟机使用。存储池分为存储卷,或者由存储管理员或系统管理员,并将卷作为 block 设备分配给 VM。"

基本上,一个卷就是 quemu-img create 创建的。在所有 .img(使用 qemu-img 创建)文件所在的目录中创建存储池后;使用 qemu-img 创建的文件被视为卷。

以下代码将列出所有现有卷,包括使用 qemu-img

创建的卷
conn = libvirt.open()

pools = conn.listAllStoragePools(0)

for pool in pools:

#check if pool is active
if pool.isActive() == 0:
#activate pool
pool.create()

stgvols = pool.listVolumes()
print('Storage pool: '+pool.name())
for stgvol in stgvols :
print(' Storage vol: '+stgvol)

创建存储池:

def createStoragePool(conn):        
xmlDesc = """
<pool type='dir'>
<name>guest_images_storage_pool</name>
<uuid>8c79f996-cb2a-d24d-9822-ac7547ab2d01</uuid>
<capacity unit='bytes'>4306780815</capacity>
<allocation unit='bytes'>237457858</allocation>
<available unit='bytes'>4069322956</available>
<source>
</source>
<target>
<path>/path/to/guest_images</path>
<permissions>
<mode>0755</mode>
<owner>-1</owner>
<group>-1</group>
</permissions>
</target>
</pool>"""


pool = conn.storagePoolDefineXML(xmlDesc, 0)

#set storage pool autostart
pool.setAutostart(1)
return pool

创建卷:

def createStoragePoolVolume(pool, name):    
stpVolXml = """
<volume>
<name>"""+name+""".img</name>
<allocation>0</allocation>
<capacity unit="G">10</capacity>
<target>
<path>/path/to/guest_images/"""+name+""".img</path>
<permissions>
<owner>107</owner>
<group>107</group>
<mode>0744</mode>
<label>virt_image_t</label>
</permissions>
</target>
</volume>"""

stpVol = pool.createXML(stpVolXml, 0)
return stpVol

关于Python libvirt API - 创建虚拟机,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33892909/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com