У меня есть рабочий код 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,
}
Заранее благодарим за любую помощь.