A.11. VDSM Hook 执行

before_vm_start 脚本可以编辑域 XML,以在到达 libvirt 之前更改虚拟机的 VDSM 定义。在进行操作时必须小心。hook 脚本可能会破坏 VDSM 的运作,而错误脚本可能会导致 Red Hat Virtualization 环境中断。特别是,请确保从未更改域的 UUID,且不会尝试在没有足够背景知识的情况下从域中删除设备。

before_vdsm_startafter_vdsm_stop hook 脚本都以 root 用户身份运行。需要 root 访问权限的系统的其他 hook 脚本必须编写为使用 sudo 命令进行特权升级。要支持此 /etc/sudoers,必须更新该 /etc/sudoers,以便 vdsm 用户无需重新输入密码即可使用 sudo。这是必要的,因为 hook 脚本以非交互方式执行。

例 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 代码使用 sudo 在文件 /my_file 上以 root 身份执行 /bin/chown

retcode = subprocess.call( ["/usr/bin/sudo", "/bin/chown", "root", "/my_file"] )

在 VDSM 的日志中收集了 hook 脚本的标准错误流。此信息用于调试 hook 脚本。