Как вы настраиваете Puppet exec для выполнения другой команды как часть - PullRequest
0 голосов
/ 12 сентября 2018

Я пишу модуль Puppet для развертывания Hyperic, при этом последняя часть выполняет hq-agent.sh start , если служба не запущена.Чтобы определить, запущена ли служба, я могу выполнить hq-agent.sh status , который содержит текст «Агент HQ запущен».

Документация Puppet гласит, что только сработало бы, однако должно возвращать код выхода 1, если работает, и 0, если не работает;Какая команда bash (?) применяется для преобразования?

Псевдокод => if («hq-agent.sh status» содержит «выполняется») return 1;иначе вернуть 0;

1 Ответ

0 голосов
/ 12 сентября 2018

Это очень похоже на то, что должно моделироваться с помощью ресурса Service, а не Exec.Для этого не требуется управление службой через обычную подсистему управления службами системы (initscripts, systemd, ...), хотя я, безусловно, рекомендую организовать это, даже если вам придется самостоятельно писать соответствующие сценарии или файлы конфигурации.,В этом случае, однако, скрипт hq-agent.sh звучит так, как будто он имеет интерфейс, похожий, если не идентичный, традиционному initscript.Если это так, то, вероятно, было бы довольно легко настроить ее как обычный системный сервис.Если вы это сделаете, то управлять им будет так же просто, как

service { 'hq-agent':
  ensure => 'running',
  enable => true,
}

Но если вы просто хотите использовать ad hoc сценарии для управления службой, Puppet может это поддержать.В частности, ресурс Service имеет атрибуты start, restart, status и stop, с помощью которых можно указать произвольные команды для управления службой.Например,

service { 'hq-agent':
  ensure     => 'running',
  provider   => 'service',
  hasstatus  => false,
  hasrestart => false,
  status     => 'hq-agent.sh status',
  start      => 'hq-agent.sh start',
  stop       => 'hq-agent.sh stop',
  path       => '/path/to/hyperic/bin',
  # no 'enable' attribute specified
}

Этот конкретный пример делает некоторые предположения о кодах выхода скрипта hq-agent.sh, основываясь на его внешнем сходстве со стандартным initscript SysV.В частности, предполагается, что они соответствуют спецификациям LSB .Если на самом деле это не так, так что вам нужно протестировать вывод скрипта вместо его кодов выхода, тогда типичным подходом было бы перенаправить вывод в grep.Например,

  status => 'hq-agent.sh status | grep -q running'

Однако остерегайтесь того, что вам может потребоваться проверить стандартную ошибку сценария вместо его стандартного вывода.

...