Puppet Facter&Facts

在 Puppet 中,我们可以在 Facter 的帮助下将多个值作为环境变量。 Facter 是 puppet 的一个工具,用来保持环境级别的变量。它就像 Bash 或 Linux。有时存储在facts中的信息和机器的环境变量可能会重叠。

puppet的键值对 被称为事实。每个资源都有自己的事实,我们可以在 Puppet 中构建Custom Facts。

Facter

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

$ facter

Puppet Facter and Facts

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

$ facter {variable name}

示例:

Puppet Facter and Facts

puppet 中的 facter 和 facter 的主要特点是它们在整个 puppet 代码中都可以作为"全局变量"使用,这意味着我们可以根据需要在代码的任何部分使用它。

在 puppet 中,三个可以使用的事实类型:

  • Core Facts
  • Custom Facts
  • External Facts

Core Facts

在顶层,Custom Facts被描述,并且在代码中的任何一点都可供所有人使用。一些基本Custom Facts的列表是:

Custom Facts
Modern Facts Legacy Facts
cloud legacy
disks bios_version
facterversion domain
identity fqdn
gce hostname
memory id
os ipaddress
path interfaces
ruby macaddress
virtual netmask
networking system32
partitions memorysize
processors memoryfree
kernelversion uuid

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

$ run puppet facts

Puppet Facter and Facts Puppet Facter and Facts

Custom Facts

我们也可以通过以下方式将Custom Facts添加到节点中:

  • 使用"export FACTER ...语法"
$ export FACTER_{fact's name} syntax

示例:

$ export FACTER_tallest_mountain="Everest" 
$ facter tallest_mountain Everest

Puppet Facter and Facts Puppet Facter and Facts

  • 使用 $LOAD_PATH 设置

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

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

$ ruby-e 'puts $LOAD_PATH'
/usr/share/rubygems-integration/all/gems/did_you_mean-1.2.0/lib
/usr/local/lib/site_ruby/2.5.0
/usr/local/lib/x86_64-linux-gnu/site_ruby
/usr/local/lib/site_ruby
/usr/lib/ruby/vendor_ruby/2.5.0
/usr/lib/x86_64-linux-gnu/ruby/vendor_ruby/2.5.0
/usr/lib/ruby/vendor_ruby
/usr/lib/ruby/2.5.0
/usr/lib/x86_64-linux-gnu/ruby/2.5.0

Puppet Facter and Facts

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

[nikita@puppetClient ~]$ cd /usr/lib/ruby/site_ruby/ 
[nikita@puppetClient site_ruby]$ mkdir facter 
[nikita@puppetClient site_ruby]$ cd facter/ 
[nikita@puppetClient facter]$ ls 
[nikita@puppetClient facter]$ touch newadded_facts.rb

在custom_facts.rb文件中添加以下内容:

[nikita@puppetClient facter]$ cat newadded_facts.rb 
Facter.add('tallest_mountain') do 
   setcode "echo Everest" 
end

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

FACTERLIB

FACTERLIB 是类似的到 $LOAD_PATH。两者只有一个区别,即 FACTERLIB 是操作系统级别的环境参数,而 $LOAD_PATH 是 Ruby 特殊变量。

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

$ env | grep "FACTERLIB"

Puppet Facter and Facts

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

创建一个名为 test_facts 的目录。

Puppet Facter and Facts Puppet Facter and Facts

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

$ tree /tmp/test_facts/

Puppet Facter and Facts

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

$ vi computer_father.rb
Facter.add('computer_father') do
        setcode "echo 'Charles Babbage'"
end

Puppet Facter and Facts

$ vi best_tutorial.rb
Facter.add('best_tutorial') do
        setcode "echo 'lidihuo'"
end

Puppet Facter and Facts

现在,使用导出语句:

$ export FACTERLIB="/tmp/test_facts/father:/tmp/test_facts/tutorial"
$ env | grep "FACTERLIB"
FACTERLIB=/tmp/test_facts/father:/tmp/test_facts/tutorial

Puppet Facter and Facts

现在,测试新的 Factor:

$ facter computer_father
$ facter best_tutorial

Puppet Facter and Facts

External Facts

如果您想应用在配置阶段创建的一些新事实,那么您可以使用External Facts。External Facts是在配置时将元数据应用到虚拟机(VM) 的最佳方式。例如,OpenStack、vSphere、AWS 等。

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

下一章:Puppet 文件服务器

正如我们所知,Puppet 使用客户端和服务器模型,其中一个系统用作称为 puppet 服务器的服务器,另一个用作称为 puppet 代理的客户端或傀儡客户。文件服务器的此功能允许在多个系统中复制文件。 Puppe ...