Назад | Перейти на главную страницу

Пользовательский факт для копирования файла панели со всех клиентов Puppet на главный сервер Puppet

Я знаю, что 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 для проверки данных, отправленных клиентами. Это лучше, чем констатировать.