A.11. VDSM Hook 执行
before_vm_start
脚本可以编辑域 XML,以便在达到 libvirt 之前更改虚拟机的 VDSM 定义。要这样做,必须谨慎操作。钩子脚本可能会破坏 VDSM 的操作,而 buggy 脚本可能会导致 Red Hat Virtualization 环境中断。特别是,请确保您永远不会更改域的 UUID,且不尝试在没有足够背景知识的情况下尝试从域中删除设备。
before_vdsm_start
和 after_vdsm_stop
hook 脚本都以 root
用户身份运行。需要系统 root
访问权限的其他钩子脚本必须写为使用 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 脚本。