我可以使用 Puppet 找出哪些节点没有安装 VMware 工具吗?

我可以使用 Puppet 找出哪些节点没有安装 VMware 工具吗?

我有 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)。

看:如何确保 VMware Tools 已安装并正在运行?

这样您就可以使用本机 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 更新为最新包。

相关内容