Puppet Facter & Facts

2025年3月17日 | 阅读 3 分钟

在 Puppet 中,我们可以借助 facter 将多个值作为环境变量。 Facter 是 puppet 的一个工具,用于维护环境变量。它与 BashLinux 的环境变量完全一样。 有时,存储在 facts 中的信息与机器的环境变量可能会重叠。

puppet 的键值对称为 fact。 每个资源都有其自身的 facts,我们可以在 Puppet 中构建自定义 facts。

Facter

此命令列出所有不同的环境变量及其相关值。


Puppet Facter and Facts

如果您只想查看一个变量,请使用以下命令

示例

Puppet Facter and Facts

facter 和 puppet 中的 facts 的主要特点是,它们在 puppet 代码中可用作“全局变量”,这意味着我们可以根据我们的要求在代码的任何部分中使用它。

在 puppet 中,可以使用三种类型的 fact

  • 核心 Facts
  • 自定义 Facts
  • 外部 Facts

核心 Facts

在顶层,核心 facts 被描述并且对代码中的任何人的任何时间都可用。 一些基本核心 facts 的列表是

核心 Facts
现代 Facts旧版 Facts
cloudlegacy
disksbios_version
facterversiondomain
identity (标识)fqdn
gcehostname
memoryid
osipaddress
pathinterfaces
rubymacaddress
virtualnetmask
networkingsystem32
partitionsmemorysize
processorsmemoryfree
kernelversionuuid (通用唯一识别码)

要查看 facts 和值的完整列表,请使用以下命令


Puppet Facter and Facts
Puppet Facter and Facts

自定义 Facts

我们还可以通过以下方式将自定义 facts 添加到节点

  • 使用“export FACTER ... Syntax”

示例


Puppet Facter and Facts
Puppet Facter and Facts
  • 使用 $LOAD_PATH 设置

Ruby 中,$LOAD_PATH 类似于 Bash $PATH 变量,但它不是环境变量;相反,它是一个预定义的变量。

在 $LOAD_PATH 中,"$" 变量是一个用于搜索和加载值的数组。


Puppet Facter and Facts

现在,创建一个目录 facter,添加一个 .pp 文件,并将内容附加到其中

将以下内容添加到 custom_facts.rb 文件

Facter 扫描 $LOAD_PATH 中列出的整个文件夹,并搜索名为 facter 的目录。 一旦它得到该特定目录,它就会将它们放置在目录结构中的任何位置。 如果找到此文件夹,则它会搜索该 facter 目录中的任何 Ruby 文件,并加载内存中所有指定的 facts。

FACTERLIB

FACTERLIB 类似于 $LOAD_PATH。 两者之间只有一个区别,即 FACTERLIB 是一个 OS 级别的环境变量,而 $LOAD_PATH 是一个 Ruby 特殊变量。

默认情况下可能未配置环境变量。 让我们检查一下


Puppet Facter and Facts

要测试 FACTERLIB,请使用以下步骤

创建一个名为 test_facts 的目录。

Puppet Facter and Facts
Puppet Facter and Facts

要查看目录结构,请执行以下命令


Puppet Facter and Facts

将以下内容复制到 .rb 文件


Puppet Facter and Facts

Puppet Facter and Facts

现在,使用 export 语句


Puppet Facter and Facts

现在,测试新的 facter


Puppet Facter and Facts

外部 Facts

如果要在配置阶段应用一些新创建的 facts,则可以使用外部 facts。 外部 facts 是在配置虚拟机 (VM) 时将元数据应用于虚拟机 (VM) 的最佳方法。 例如,OpenStack、vSphere、AWS 等。

Puppet 可以使用所有元数据及其生成的信息来决定应将哪些项目包含在将要应用的目录中。