问题描述
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
事实值还不存在会发生什么。
所以我的问题是:
- 当我运行
rackspace.rb -> system_load.rb -> users.rb
时,是否会按照文件名 (puppet apply —facterpath=module/lib/facter
) 的字母顺序加载上述 lib 文件夹结构中的事实文件?
解决方法
如果事实解析尝试为另一个尚未加载的事实获取 Facter.value()
,则 Facter 将立即尝试加载所需的事实。这意味着
- 不,事实文件不一定按字母顺序加载,但是
- 您仍然不必担心事实加载顺序。
您确实需要避免在事实之间创建依赖循环,但是依赖于内置事实的自定义事实永远不会导致这样的循环。