kvm自动给虚拟机分配IP 作者: 灯小笼 时间: 2017-12-07 分类: 工具 kvm生成一台新机器后,并不能自动分配新的ip。本文介绍了基于php语言,结合libvirt一系列的工具,实现通过命令行对虚拟机进行克隆和自动ip分配的方案。 ## 前置条件 克隆来源的domain里边的文件已经被删除:/etc/udev/rules.d/70-persistent-net.rules。 ## 实现流程 ![process.png][1] ## 实现代码 ```php ([^<]+)<#', $line, $ms)) { $uuid = $ms[1]; } elseif (preg_match('#address\=\'([^\']+)\'#', $line, $ms)) { $mac = $ms[1]; } } var_dump($uuid, $mac); unset($lines); echo "获取网卡配置".PHP_EOL; $domFile = '/etc/sysconfig/network-scripts/ifcfg-eth0'; $cmd = sprintf('virt-cat -d %s %s', $new, $domFile); echo $cmd.PHP_EOL; exec($cmd, $lines, $status); if ($status !== 0) { die('获取网卡配置失败'); } foreach($lines as &$line) { list($key, $value) = explode('=', $line); switch($key) { case 'HWADDR': $line = $key.'='.$mac; break; case 'IPADDR': $line = $key.'='.$ip; break; case 'UUID': $line = $key.'='.$uuid; break; } } $ethFile = __DIR__.'/tmp/'.$new.'/ifcfg-eth0'; if (!is_dir(dirname($ethFile))) { mkdir(dirname($ethFile), 0755, true); } file_put_contents($ethFile, implode("\n", $lines)); unset($lines); echo "替换网卡文件".PHP_EOL; $cmd = sprintf('virt-copy-in -d %s %s %s', $new, $ethFile, dirname($domFile)); echo $cmd.PHP_EOL; system($cmd, $status); if ($status !==0) { die("写入网卡文件失败"); } echo "写入网卡文件成功".PHP_EOL; echo "克隆成功!".PHP_EOL; ``` [1]: https://dengxiaolong.com/usr/uploads/2018/08/3048149289.png 标签: php, kvm