我有 100 台装有 RHEL 的服务器,我想在这些服务器上运行 VMware 工具。我编写了一个可以安装 VMware 工具的 Puppet 模块,只需使用包 {}:
package { 'vmware-tools-esx-nox':
ensure => installed,
}
最好有一个未安装 vmware-tools 软件包的服务器列表。Puppet 如何帮助我找出哪些服务器未安装 VMware Tools?
答案1
如果您已将该模块应用于所有节点,则答案应该是“无”。puppetmaster 报告将告诉您每台服务器是否符合要求。
但是,vSphere 客户端会告诉您哪些虚拟机现在已安装了 vmware 工具。
下面是 PowerShell 中的一个示例(使用 VMWare 的 PowerCLI),列出了没有安装(或当前没有安装)工具的虚拟机:
get-VM | Get-View | `
? { $_.Guest.ToolsStatus -match "toolsNotInstalled" -or `
$_.Guest.ToolsVersionStatus -ne "guestToolsCurrent" } | `
select Name, `
@{Name="Status"; Expression={$_.Guest.ToolsStatus}}, `
@{Name="Version"; Expression={$_.Guest.ToolsVersionStatus}} | `
format-table
答案2
是的,您可以使用 Puppet 来执行此操作...您可以检查文件、服务或安装包。PowerCLI 方法也有效,但它在您的环境中可能不太有用。
另一个考虑是使用VMware 操作系统特定软件包(OSP)。
这样您就可以使用本机 RPM 和 YUM 来管理 VMware 工具包,而不是使用笨重的 vSphere 客户端方法。对于拥有大量系统的环境来说,这可能是一个好主意。
答案3
我确实意识到这可能会被理解为推销我自己的解决方案,但实际上我已经写了一个Puppet 模块(PuppetForge) 通过随 vSphere/ESX 分发的 tarball 存档来控制 VMware Tools 安装,而不是使用 OSP 或open-vm-tools
软件包。
一旦您使用该模块(或任何模块),您就可以轻松使用 vSphere 客户端查看哪些虚拟机没有配置和运行该工具。
答案4
我决定使用自己的自定义事实来分析多台服务器上的当前设置。这些数据将使用 PuppetDB 进行挖掘,并可以提供漂亮的报告。
/etc/puppet/modules/facter/lib/facter/extra_info.rb:
# vmware installed?
Facter.add("vmtools_installed") do
setcode do
File.exists?('/usr/bin/vmware-toolbox-cmd')
end
end
# vmware-running?
Facter.add("vmtools_version") do
setcode do
Facter::Util::Resolution::exec('/usr/bin/vmware-toolbox-cmd -v')
end
end
如果未安装 VMWare Tools,则另一个名为“VMTools”的模块会安装 VMWare Tools rpm 包(来自 RHN Satellite)。如果未运行最新版本的 VMware Tools,则同一模块会将 VMWare Tools 更新为最新包。