A.11. VDSM Hook 执行
before_vm_start 脚本可以编辑域 XML,以在到达 libvirt 之前更改虚拟机的 VDSM 定义。在进行操作时必须小心。hook 脚本可能会破坏 VDSM 的运作,而错误脚本可能会导致 Red Hat Virtualization 环境中断。特别是,请确保从未更改域的 UUID,且不会尝试在没有足够背景知识的情况下从域中删除设备。
before_vdsm_start 和 after_vdsm_stop hook 脚本都以 root 用户身份运行。需要 root 访问权限的系统的其他 hook 脚本必须编写为使用 sudo
命令进行特权升级。要支持此 /etc/sudoers,必须更新该 /etc/sudoers,以便 vdsm 用户无需重新输入密码即可使用 sudo
。这是必要的,因为 hook 脚本以非交互方式执行。
例 A.4. 为 VDSM hook 配置 sudo
在本示例中,将把 sudo
命令配置为允许 vdsm 用户以 root 身份运行 /bin/chown
命令。
- 以 root 用户身份登录虚拟化主机。
- 在文本编辑器中打开 /etc/sudoers 文件。
将此行添加到文件中:
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 脚本。