Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby 附加多个结构化自定义事实_Ruby_Puppet_Facter - Fatal编程技术网

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)
替换输出json
put 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