我有工作 Ruby 代码来查询 DNS 详细信息并创建 Puppet 自定义事实(puppet 5,Facter 3.11.6)但是我正在尝试修改它以从查询获得的键/值对创建嵌套事实。
用于使用键名设置单个事实的代码是:
require 'resolv'
Resolv::DNS::Config.default_config_hash.each do | key, value |
if !value.nil?
Facter.add("dns_#{key}") do
if value.is_a?(Array)
setcode { value.join(',') }
else
setcode { value }
end
end
end
end
从而创造了个人事实:
dns_nameserver => 192.168.1.1,192.168.1.2
dns_ndots => 1
dns_search => test.domain
到目前为止,我在“DNS”的父事实下创建嵌套事实的失败尝试是:
require 'resolv'
Facter.add("dns") do
value ={}
Resolv::DNS::Config.default_config_hash.each do | key, result |
if !result.nil?
if result.is_a?(Array)
setcode { value['#{key}'] = result.join(',') }
else
setcode { value['#{key}'] = result }
end
end
end
end
这给出了一个有限的结果:
dns => 1
我尝试过的其他代码似乎将数组输出放入字符串中,并且多个 IP 在方括号内被引用超过 2 行,而不是按照页面顶部的第一个代码块输出。
我试图实现的事实结构(通过修改页面顶部的代码)是:
dns => {
nameserver => 192.168.1.1,192.168.1.2,
ndots => 1,
search => test.domain,
}
提前感谢您的任何帮助。