2016-12-12 8 views
1

Я пытаюсь найти способ запуска команды в файле SELinux .te, который находится на марионеточном сервере, но не клиенте (Я использую модуль puppet-selinux от puppetforge для компиляции файла .te в файл модуля .pp, поэтому мне не нужен он на клиентском сервере). Моя основная идея что-то вроде:Выполнение команды BASH на файле, расположенном на сервере Puppet, а не на клиенте

class security::selinux_module { 

    exec { 'selinux_module_check': 
    command => "grep module selinux_module_source.te | awk '{print $3}' | sed 's/;//' > /tmp/selinux_module_check.txt", 
    source => 'puppet:///modules/security/selinux_module_source.te', 
    } 
} 

Хотя при попытке запустить его на сервере клиента, я получаю:

Error: Could not retrieve catalog from remote server: Error 400 on SERVER: Invalid parameter source on Exec[selinux_module_check] at /etc/puppet/environments/master/security/manifests/selinux_module.pp:3 on node client.domain.com 
Warning: Not using cache on failed catalog 
Error: Could not retrieve catalog; skipping run 

Любая помощь по этому вопросу будет весьма признателен.

ответ

1

Вы можете использовать функцию Puppet generate() для выполнения команд на главном устройстве во время компиляции каталога и получения их вывода, но это редко бывает хорошо, особенно если эти команды стоят дорого. Если вы намерены передать полученный результат клиенту для своего рода использования, вам также необходимо обратить особое внимание на то, чтобы он был подходящим для клиента, что может быть не так, если клиент слишком сильно отличается от сервер.

Я пытаюсь найти способ для запуска команды на .te файл SELinux, который находится на кукольном сервере, но не клиент (я использую марионеточный-SELinux модуль из puppetforge скомпилировать. т.е файл в файл модуля .pp, поэтому мне не нужно на сервере клиентского

Самый простой подход будет запускать нужную команду непосредственно, один раз для всех, от интерактивной оболочки, и поместить результат в файл, из которого агент может его получить, через Puppet или иначе. Только если файл принудительного ввода типа был динамически сгенерирован, было бы целесообразно скомпилировать его каждый раз, когда вы bui в каталоге.

Я предлагаю вам создать пакет (RPM, DEB, что угодно), содержащий файл политики selinux и любые необходимые установочные скрипты. Поместите этот пакет в свой локальный репозиторий и управляйте им через ресурс Package.

+0

Можете упомянуть, что если вы пытаетесь сделать что-либо на мастере во время компиляции каталога, функции в значительной степени подходят. Непонятно, если упоминать проблемы с попыткой использовать 'source' с' exec' и использовать не-абсолютные исполняемые файлы в 'exec'. –