Ruby 附加多个结构化自定义事实
我试图将多个结构化的Ruby 附加多个结构化自定义事实,ruby,puppet,facter,Ruby,Puppet,Facter,我试图将多个结构化的自定义事实附加到我的根键(这里称为rag),但它们总是替换当前值 Q1:这是Facter.add的预期行为吗? 因此,为了让它发挥作用,我创建了两个外部事实,在自定义事实上,我只需读取它们的结果并用type=>:aggregate添加到根 我确实得到了预期的结果,即: :~#facter-p rag 为了更好的维护(每个脚本输出一个键),我将它分为多个文件,但我觉得应该有更好的方法 Q2:有更好的方法吗?我的意思是,不必使用自定义事实来读取外部事实值并进行附加。 以下是有关代
自定义事实
附加到我的根键(这里称为rag
),但它们总是替换当前值
Q1:这是Facter.add的预期行为吗?
因此,为了让它发挥作用,我创建了两个外部事实
,在自定义事实
上,我只需读取它们的结果并用type=>:aggregate添加到根
我确实得到了预期的结果,即:
:~#facter-p rag
为了更好的维护(每个脚本输出一个键),我将它分为多个文件,但我觉得应该有更好的方法
Q2:有更好的方法吗?我的意思是,不必使用自定义事实来读取外部事实值并进行附加。
以下是有关代码的详细信息:
/opt/puppetlabs/puppet/cache/facts.d/rag_system_services.rb
/opt/puppetlabs/puppet/cache/facts.d/rag_role.rb
/opt/puppetlabs/puppet/cache/lib/facter/rag.rb
“我试图将多个结构化自定义事实附加到我的根键(这里称为rag),但它们总是替换当前值。”--我不清楚您在这里到底描述了什么。如果你想让我们分析那些不符合你期望的代码,那么我们需要看到代码——也就是说,一个演示问题的例子。“为了更好的维护,我将它分成多个文件(每个脚本输出一个键),但我觉得应该有一个更好的方法”——这是一个非常广泛的问题,而且似乎是基于观点的。“更好”是什么意思?@JohnBollinger“更好”是指不必使用自定义事实来读取外部事实值和附加。如果用Facter.add(:rag,:type=>:aggregate)
替换输出jsonput json.pretty\u generate(returno)
的行,并将脚本移动到rag.rb
所在的位置,则键rag.
将仅具有最后执行的文件的值。如果还不清楚,请告诉我,我会编辑这个问题。你是说你对每个外部事实文件都进行了这样的替换和移动吗?请注意,细节很重要,呈现反映问题的实际代码要比描述问题好得多。此外,就呈现的问题而言,我根本不理解为什么会涉及外部事实。
{
role => "win-mbox",
ambiente => "producao",
enabled_services => [
"auditd",
"lvm2-monitor",
"mdmonitor",
"rhsmcertd",
"rsyslog",
"sshd",
"syslog",
"sysstat",
]
}
#!/usr/bin/env ruby
require 'facter'
require 'json'
retorno = Hash.new { |h,k| h[k] = Hash.new(&h.default_proc) }
os_family = Facter.value(:osfamily)
if os_family == 'RedHat'
retorno[:rag_system_services] = `systemctl list-unit-files --no-legend --no-pager -t service --state=enabled`.scan(/(^.+?)\.service\s+enabled/i).flatten
else
retorno[:rag_system_services] = `rcconf --list | sort`.scan(/(^.+?)\s+on/i).flatten
end
puts JSON.pretty_generate(retorno)
#!/usr/bin/env ruby
require 'facter'
require 'json'
retorno = Hash.new { |h,k| h[k] = Hash.new(&h.default_proc) }
fqdn = Facter.value(:fqdn)
retorno[:rag_role] = if fqdn.start_with? 'win-'
case fqdn
when /-aio/ then 'win-aio'
when /-ldap/ then 'win-ldap'
when /-logger/ then 'win-logger'
when /-mbox/ then 'win-mbox'
when /-mta/ then 'win-mta'
when /-proxy/ then 'win-proxy'
end
elsif fqdn.include? 'lnx-'
case fqdn
when /balancer/ then 'lnx-balancer'
when /database/ then 'lnx-database'
when /nfs/ then 'lnx-nfs'
when /server/ then 'lnx-server'
end
else
case fqdn
when /^dns-/ then 'dns'
when /^elastic-/ then 'elastic'
when /^pre-auth/ then 'pre-auth'
when /^puppetserver/ then 'puppetserver'
end
end
puts JSON.pretty_generate(retorno)
Facter.add(:rag, :type => :aggregate) do
chunk(:ambiente) do
rag = {}
rag['ambiente'] = (Facter.value(:fqdn).include? 'hom-') ? 'homologacao' : 'producao'
rag
end
chunk(:enabled_services) do
rag = {}
rag['enabled_services'] = Facter.value(:rag_system_services)
rag
end
chunk(:role) do
rag = {}
rag['role'] = Facter.value(:rag_role)
rag
end
end