1

現在、libvirt KVM ドメインを作成するコードのスニペットを開発中です。現在、スクリプトは正常に動作していますが、自分のやり方に満足していません。現状では、PHPバインディングを使用してドメインXMLをロードし、手動で変更してから、ドメインの定義を解除して再定義し、すべてドメインタイプとVNCアドレスを変更する必要があります. 以下でこれを行っている方法に代わるより良い方法があるかどうかを知りたいです(満足できないコードは5行目と6行目です)。PHP バインディングのドキュメントが非常に不足しているように感じます。そのため、この問題の解決策はまだ見つかっていません。virt-manager がそれを実行できるので、自分がやりたいことを実行できるはずだとわかっています。

$vnc = "PGdyYXBoaWNzIHR5cGU9J3ZuYycgcG9ydD0nLTEnIGF1dG9wb3J0PSd5ZXMnIGxpc3Rlbj0nMC4wLjAuMCcgcGFzc3dkPSdfX1BBU1NfXyc+CiAgICAgIDxsaXN0ZW4gdHlwZT0nYWRkcmVzcycgYWRkcmVzcz0nMC4wLjAuMCcvPgogICAgPC9ncmFwaGljcz4="; // VNC config (base64)
$dom = libvirt_domain_lookup_by_name($c, $command['parameters']['name']); // Get domain resource
setBridge($dom, $command['parameters']['networks'][0]['mac']); // Replace network configuration with an interface bridge
setISO($dom, "/var/lib/libvirt/ISOs/Win7Pro.iso"); // Set the CD-ROM ISO
$xml = libvirt_domain_get_xml_desc($dom, null); // Get XML
domain_change_xml($c, $dom, str_ireplace("<domain type='qemu'>", "<domain type='kvm'>", str_ireplace("<graphics type='vnc' port='-1' autoport='yes'/>", str_ireplace("__PASS__", rand(10000000, 99999999), base64_decode($vnc)), $xml))); // Replace domain type and graphics block
libvirt_domain_create($dom); // Start the domain

function setBridge($dom, $mac) {
    libvirt_domain_update_device($dom, "<interface type='bridge'><mac address=".escapeshellarg($mac)."/><source bridge='br0'/><model type='e1000'/></interface>", VIR_DOMAIN_DEVICE_MODIFY_CONFIG);
}

function setISO($dom, $iso) {
    libvirt_domain_update_device($dom, "<disk type='file' device='cdrom'><driver name='qemu' type='raw'/><source file=".escapeshellarg($iso)."/><target dev='hdc' bus='ide'/><readonly/></disk>", VIR_DOMAIN_DEVICE_MODIFY_CONFIG);
}
4

0 に答える 0