Puppet facter和fact

本文概述

  • facter
  • 核心Fact
  • 自定义Fact
  • 外部Fact
在Puppet中, 我们可以在一个facter的帮助下将多个值作为环境变量。 Facter是Puppet的工具, 用于保持环境级别可变。它就像一个Bash或Linux的环境变量。有时, 存储在事实中的信息和机器的环境变量可能会重叠。
Puppet的键值对称为事实。每个资源都有其自己的事实, 我们可以在Puppet中构造自定义Fact。
facter 该命令列出了所有不同的环境变量及其相关值。
$ facter

Puppet facter和fact

文章图片
如果只想查看一个变量, 请使用以下命令:
$ facter {variable name}

例子:
Puppet facter和fact

文章图片
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

Puppet facter和fact

文章图片
Puppet facter和fact

文章图片
自定义Fact 我们还可以通过以下方式将自定义Fact添加到节点:
  • 使用” 导出FACTER … 语法”
$ export FACTER_{fact's name} syntax

例子:
$ export FACTER_tallest_mountain="Everest" $ facter tallest_mountain Everest

Puppet facter和fact

文章图片
Puppet facter和fact

文章图片
  • 使用$ 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和fact

文章图片
现在, 创建目录创建者, 添加.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"

Puppet facter和fact

文章图片
要测试FACTERLIB, 请使用以下步骤:
创建一个名为test_facts的目录。
Puppet facter和fact

文章图片
Puppet facter和fact

文章图片
要查看目录结构, 请执行以下命令:
$ tree /tmp/test_facts/

Puppet facter和fact

文章图片
将以下内容复制到.rb文件:
$ vi computer_father.rb Facter.add('computer_father') do setcode "echo 'Charles Babbage'" end

Puppet facter和fact

文章图片
$ vi best_tutorial.rb Facter.add('best_tutorial') do setcode "echo 'srcmini'" end

Puppet facter和fact

文章图片
现在, 使用export语句:
$ export FACTERLIB="/tmp/test_facts/father:/tmp/test_facts/tutorial" $ env | grep "FACTERLIB" FACTERLIB=/tmp/test_facts/father:/tmp/test_facts/tutorial

Puppet facter和fact

文章图片
外部Fact 如果要应用在供应阶段创建的一些新事实, 则可以使用外部Fact。外部Fact是在配置时间将元数据应用于虚拟机(VM)的最佳方法。例如, OpenStack, vSphere, AWS等。
【Puppet facter和fact】Puppet可以使用所有元数据及其生成的信息来决定应将哪些项目包括在目录中。

    推荐阅读