Могу ли я запустить встроенную команду оболочки с Puppet?
Я хочу ~/.bashrc
будет source
всякий раз, когда меняют его содержание. Я создал класс bashrc с чем-то вроде этого:
file { "/root/.bashrc":
ensure => present,
owner => root,
group => root,
mode => 0644,
source => "puppet:///bashrc/root/.bashrc"
}
exec { "root_bashrc":
command => "source /root/.bashrc",
subscribe => File["/root/.bashrc"],
}
но, как вы знаете, source
это встроенная команда оболочки, поэтому я получил следующую ошибку при запуске агента:
# puppet agent --no-daemonize --verbose
notice: Starting Puppet client version 2.7.1
info: Caching catalog for svr051-4170
info: Applying configuration version '1311563901'
err: /Stage[main]/Bashrc/Exec[root_bashrc]/returns: change from notrun to 0 failed: Could not find command 'source'
notice: Finished catalog run in 2.28 seconds
notice: Caught INT; calling stop
Есть ли обходной путь для этого?
3 ответа
Там нет смысла повторноsource
новый .bashrc
в Puppet, потому что он будет работать в подоболочке, и изменения не будут распространяться на вашу текущую оболочку (что, я полагаю, то, что вы пытаетесь сделать). Вы не можете делать то, что (я думаю) вы хотите сделать.
Вы также можете часто предварять вашу команду true &&
или использовать provider => shell
,
Смотрите это и это для дополнительного обсуждения.
Это должно быть:
file { "/root/.bashrc":
ensure => present,
owner => root,
group => root,
mode => 0644,
source => "puppet:///bashrc/root/.bashrc" }
exec { "root_bashrc":
command => "source /root/.bashrc",
provider => shell,
subscribe => File["/root/.bashrc"],
}
Технически, вы можете использовать:
exec { "root_bashrc":
command => "bash -c 'source /root/.bashrc'",
subscribe => File["/root/.bashrc"],
refreshonly => true,
}
Однако, как уже указывал womble, нет смысла в поиске.bashrc подобного рода; это влияет только на оболочку bash, запущенную в этой команде, а не на все запущенные оболочки bash.
Вы могли бы установить PROMPT_COMMAND="source /root/.bashrc"
перезапускать.bashrc каждый раз, когда в любых запущенных в данный момент интерактивных оболочках отображается приглашение, но это кажется немного ресурсоемким. Я никогда не пробовал это, но я думаю, что это сработает.