A.11. 使用 VDSM hook

为了改变一个虚拟机的 VDSM 定义,before_vm_start 脚本可以在 libvirt 前修改 domain XML。如需这样做,您需要非常的小心。hook 脚本可能会影响到 VDSM 的正常运行,一个有 bug 的脚本可能会导致整个 Red Hat Enterprise Virtualization 环境出现故障。特别需要注意的是,永远不要更改域的 UUID;在没有足够背景知识的情况下不要试图从域中删除一个设备。
before_vdsm_startafter_vdsm_stop hook 脚本都是以 root 用户执行的。如果其它的 hook 脚本需要系统的 root 权限,您需要使用 sudo 命令来升级权限。因为 hook 脚本是以非交互的形式被运行的,您必须配置您的 /etc/sudoers 来允许 vdsm 用户在不需要重新输入密码的情况下使用 sudo

例 A.4. 为 VDSM hook 配置 sudo

在这个实例中,sudo 命令被配置为允许 vdsm 用户以 root 的身份运行 /bin/chown 命令。
  1. 使用 root 用户登录到虚拟主机。
  2. 在文本编辑器中打开 /etc/sudoers
  3. 把以下行添加到文件中:
    vdsm ALL=(ALL) NOPASSWD: /bin/chown
    它设定了 vdsm 用户可以以 root 用户的身份运行 /bin/chown 命令。NOPASSWD 参数指定了在调用 sudo 时,用户不会被提示输入密码。
在进行完这个配置后,VDSM hook 就可以使用 sudo 命令来以 root 用户的身份运行 /bin/chown。以下的这段 Python 代码在 /my_file 文件中使用 sudo 来以 root 用户的身份执行 /bin/chown
retcode = subprocess.call( ["/usr/bin/sudo", "/bin/chown", "root", "/my_file"] )
hook 脚本的标准错误输出会被保存在 VDSM 的日志文件中。这些信息可以被用来进行故障排除。