Я знаю, что Facter не предназначен для этого, но я был бы рад узнать, как написать собственный факт для копирования файлов с клиентов Puppet на главный сервер Puppet. Спасибо.
Копирование файлы как факт? Почему вы хотите это сделать? Вы можете просто Exec
к scp
или ftp
файл в другом месте.
Если вам нужно проверить содержимое файла на предмет фактов, возьмите это в качестве примера:
# etcgroup.rb
Facter.add("etcgroup") do
setcode do
File.read('/etc/group')
end
end
Затем вы можете использовать функции регулярных выражений для извлечения информации изнутри. Обратите внимание, что это отправляется как часть URL-адреса запроса GET, который обычно ограничен количеством символов. у меня есть LimitRequestLine 30000
в моем apache2.conf
именно по такой причине.
Если вам действительно нужно скопировать файл, вы можете сделать что-то вроде этого:
# etcgroup.rb
Facter.add("etcgroup") do
setcode do
%{ scp -i /path/to/identity /etc/group user@puppet:/path && echo ok || echo not ok}.chomp
end
end
Он отправит файл scp
, используя удостоверение, чтобы избежать передачи паролей, а затем вернуть либо ok
или not ok
как факт.
Я думаю, что лучшим способом было бы использовать аудит с удаленным файловым хранилищем (я считаю, что для этого вам понадобится версия 2.6.5+).
Что-то вроде:
filebucket { "server":
server => "your.puppet.server";
}
file { "/etc/group":
audit => content;
backup => server;
}
Это приводит к тому, что / etc / group загружается на сервер, когда (а) он изменяется или (б) его раньше не видели. Затем на сервере вы можете использовать утилиту puppet filebucket для проверки данных, отправленных клиентами. Это лучше, чем констатировать.