qemu-ga
命令行格式:virsh qemu-agent-command domain_name '{"execute":"guest-run-command","arguments":{"command":"ls -al"}}'
接口:virDomainQemuAgentCommand,cmd参数{\"execute\":\"guest-run-command\",-------},反正就是上面的双引号前面加转义字符
tools设计思考:
1. 设置虚拟机IP的时候需要使用nbd或libguestfs挂给主机,然后通过主机来设置。最好的做法是把相关的配置写入到配置文件,然后在虚拟机开启启动tools的时候去执行这个配置文件。
为什么一定要挂给主机呢?
开机运行的时候走的是qemu-ga流程,使用串口写入到虚拟机内部。
方案一: 管理平台先把配置文件写到主机本地的某一目录,等虚拟机启动的时候去读取这个文件,然后通过tools写入到虚拟机。
这样做需要不停的检查castools状态,那检查多长时间才算呢? 有些虚拟机启动比较慢,或者有些虚拟机没有安装tools,这样会给管理平台带来很多逻辑,虚拟机多的时候启动的定时器可能非常多。
方案二: libguestfs挂给主机,然后直接修改虚拟机网卡配置文件。
似乎是可行的。 目前实现方案中也是通过检查网络接口配置文件来区分不同的操作系统。
当前的方案:使用nbd或libguestfs挂给主机,然后使用脚本写入qemu-agent命令到qemu-agent目录下runonce文件,然后在虚拟机启动的时候qemu-ga会判断是否有这一文件,然后来设置IP。
我想的方案:
写一个shell脚本,主机和虚拟机上都有一份,开机情况下设置IP使用虚拟机内部的shell脚本去写配置文件;关机情况下使用主机上的这个脚本去写虚拟机内部配置文件。 逻辑都放在shell脚本中,关机状态下只需要ssh连到该主机,然后执行脚本; 开机情况下通过执行guest-run-command来实现。