📜  puppet事实与事实

📅  最后修改于: 2021-01-08 04:58:20             🧑  作者: Mango

木偶事实与事实

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

人偶的键值对称为事实。每个资源都有其自己的事实,我们可以在Puppet中构造自定义事实。

事实

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

$ facter

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

$ facter {variable name}

例:

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

在人偶中,可以使用三种类型的事实:

  • 核心事实
  • 自定义事实
  • 外部事实

核心事实

在顶层,对核心事实进行了描述,并在代码中的任何时候可供所有人使用。一些基本的核心事实清单是:

Core 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


自定义事实

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

  • 使用“导出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 'JavaTpoint'"
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 computer_father
$ facter best_tutorial

外部事实

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

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