在模块/lib/facter/* 下的文件中找到的事实将按什么顺序加载到 puppet 客户端上?

问题描述

我有以下文件结构:

lib
└── facter
    ├── rackspace.rb
    ├── system_load.rb
    └── users.rb

我想在我正在编写并在 system_load.rb 中定义的另一个自定义事实中使用在 :system_me 中找到的自定义事实值(我们称之为 users.rb 事实)。像这样:

# users.rb

Facter.add('sogood') do
  you = ''
  me = Facter.value(:system_me)
  if me == 'foo'
    you = 'bar'
  end
  setcode do
    you
  end
end

但是,我担心如果在客户端尝试运行 system_me 之前 sogood 事实值还不存在会发生什么。

所以我的问题是:

  1. 当我运行 rackspace.rb -> system_load.rb -> users.rb 时,是否会按照文件名 (puppet apply —facterpath=module/lib/facter ) 的字母顺序加载上述 lib 文件夹结构中的事实文件

解决方法

如果事实解析尝试为另一个尚未加载的事实获取 Facter.value(),则 Facter 将立即尝试加载所需的事实。这意味着

  • 不,事实文件不一定按字母顺序加载,但是
  • 您仍然不必担心事实加载顺序。

您确实需要避免在事实之间创建依赖循环,但是依赖于内置事实的自定义事实永远不会导致这样的循环。