获得系统的环境信息

In Paris they simply stared when I spoke to them in French. I never did succeed in making those idiots understand their language.

— Mark Twain

当地的知识是非常有用的。通常在 Puppet 的配置清单中,你需要知道一些所在机器的本地信息。 Puppet 的发行中包含了一个 Facter 工具,它提供了从环境中获取系统信息('facts') 的一种标准方法,这些信息包括:

  • 操作系统

  • 内存大小

  • 体系结构

  • 处理器数量

注记

要查看关于你的系统中可用的完整的 facts 列表,请运行如下命令:

# facter

虽然它可以方便地从命令行获得信息,但 Facter 的真正强大之处在于, 可以在你的 Puppet 配置清单中访问这些 facts。

操作步骤

  1. 在你的配置清单中可以像引用其他变量一样引用一个 Facter 的值,例如:

    notify { "This is $operatingsystem version
    $operatingsystemrelease, on $architecture architecture, kernel
    version $kernelversion": }
    
  2. 一旦运行 Puppet,它就会为当前节点填充适当的值:

    notice: This is Ubuntu version 10.04, on i386 architecture,
    kernel version 2.6.32
    

工作原理

Facter 为 Puppet 提供了一个抽象层,并在配置清单中提供了一种关于环境信息的标准方法。 当你在配置清单中引用一个 fact 值时,Puppet 就会通过查询 Facter 获得当前值, 并将其插入配置清单。

更多用法

你也可以在 ERB 模板中使用 facts。例如,你可能会在一个文件中插入一个节点的主机名, 或者基于一个节点的内存大小改变一个应用的配置设置。 当你在模板中使用 fact 的名字时,它们不需要前导的美元符号, 因为在 ERB 模板中使用的是 Ruby,而不是 Puppet:

$KLogPath <%= case kernelversion when "2.6.31" then "/var/run/rsyslog/
kmsg" else "/proc/kmsg" end %>

参见本书