本文概述
在Puppet中, 我们可以在一个facter的帮助下将多个值作为环境变量。 Facter是Puppet的工具, 用于保持环境级别可变。它就像一个Bash或Linux的环境变量。有时, 存储在事实中的信息和机器的环境变量可能会重叠。
Puppet的键值对称为事实。每个资源都有其自己的事实, 我们可以在Puppet中构造自定义Fact。
facter
该命令列出了所有不同的环境变量及其相关值。
$ facter
如果只想查看一个变量, 请使用以下命令:
$ facter {variable name}
例子:
puppet中facter和facts的主要特征是, 它们在整个Puppet代码中都可以作为”全局变量”使用, 这意味着我们可以根据需要在代码的任何部分中使用它。
在Puppet中, 可以使用三种类型的事实:
- 核心Fact
- 自定义Fact
- 外部Fact
核心Fact
在顶层, 对核心Fact进行了描述, 并在代码中的任何时候可供所有人使用。一些基本的核心Fact清单是:
核心Fact | |
---|---|
现代Fact | 遗留Fact |
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
自定义Fact
我们还可以通过以下方式将自定义Fact添加到节点:
- 使用”导出FACTER …语法”
$ export FACTER_{fact's name} syntax
例子:
$ export FACTER_tallest_mountain="Everest"
$ facter tallest_mountain Everest
- 使用$ 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
现在, 创建目录创建者, 添加.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文件, 并将所有指定的Facts加载到内存中。
费特里布
FACTERLIB与$ LOAD_PATH类似。两者之间只有一个区别, 即FACTERLIB是操作系统级别的环境参数, 而$ LOAD_PATH是Ruby特殊变量。
默认情况下, 可能未配置环境变量。让我们检查:
$ env | grep "FACTERLIB"
要测试FACTERLIB, 请使用以下步骤:
创建一个名为test_facts的目录。
要查看目录结构, 请执行以下命令:
$ tree /tmp/test_facts/
将以下内容复制到.rb文件:
$ vi computer_father.rb
Facter.add('computer_father') do
setcode "echo 'Charles Babbage'"
end
$ vi best_tutorial.rb
Facter.add('best_tutorial') do
setcode "echo 'srcmini'"
end
现在, 使用export语句:
$ export FACTERLIB="/tmp/test_facts/father:/tmp/test_facts/tutorial"
$ env | grep "FACTERLIB"
FACTERLIB=/tmp/test_facts/father:/tmp/test_facts/tutorial
现在, 测试新的facter:
$ facter computer_father
$ facter best_tutorial
外部Fact
如果要应用在供应阶段创建的一些新事实, 则可以使用外部Fact。外部Fact是在配置时间将元数据应用于虚拟机(VM)的最佳方法。例如, OpenStack, vSphere, AWS等。
Puppet可以使用所有元数据及其生成的信息来决定应将哪些项目包括在目录中。
评论前必须登录!
注册