Еще один вопрос, связанный с куклами.
Как часть моей установки с Puppet, я устанавливаю: —
Как часть класса PHP у меня есть следующее: —
package {[
'php5-fpm',
'php5-mysql',
'php5-cli',
'php5-mcrypt',
'php5-curl',
]:
ensure => present,
require => Exec['apt-get update'],
}
Эта часть отлично работает. Без вопросов.
Как только сервер завершит свою работу, я смогу запустить: —
php5enmod mcrypt
Это, опять же, работает без проблем, и mcrypt включен в установке php5-fpm. Проблема возникает со следующим блоком кода.
exec { 'enable-mcrypt':
command => 'php5enmod mcrypt',
path => '/usr/sbin',
require => [
Package['php5-mcrypt'],
Package['php5-fpm']
],
notify => [
Service['php5-fpm'],
Service['nginx'],
],
}
Я пытался запустить его в разных вариантах, и нет никаких проблем, связанных с синтаксисом или зависимостями для его выполнения.
Однако, когда я просматриваю отладочную информацию, я вижу это:
Debug: Exec[enable-mcrypt](provider=posix): Executing 'php5enmod pdo'
Debug: Executing 'php5enmod pdo'
Notice: /Stage[main]/Php/Exec[enable-mcrypt]/returns: /usr/sbin/php5enmod: 233: /usr/sbin/php5enmod: expr: not found
Notice: /Stage[main]/Php/Exec[enable-mcrypt]/returns: /usr/sbin/php5query: 181: /usr/sbin/php5query: expr: not found
Notice: /Stage[main]/Php/Exec[enable-mcrypt]/returns: /usr/sbin/php5query: 203: /usr/sbin/php5query: find: not found
Notice: /Stage[main]/Php/Exec[enable-mcrypt]/returns: WARNING:
Notice: /Stage[main]/Php/Exec[enable-mcrypt]/returns: usage: php5enmod [ -s ALL|sapi_name ] module_name [ module_name_2 ]
Error: php5enmod pdo returned 1 instead of one of [0]
Error: /Stage[main]/Php/Exec[enable-mcrypt]/returns: change from notrun to 0 failed: php5enmod pdo returned 1 instead of one of [0]
Я не могу сделать ни головы, ни хвосты этого. Может показаться, что php5enmod не видит передаваемый ему аргумент, поэтому WARNING: usage php5enmod [ -s ALL|sapi_name ]
так далее…
Я говорю это, потому что если я бегу phpenmod
без каких-либо аргументов, вы получите ту же ошибку.
Если у кого-то есть какие-либо идеи, я буду безмерно благодарен.
Похоже, что правильный способ сделать это (как указано в комментарии BMW) — убедиться, что Puppet знает, где находится команда «find», прежде чем пытаться выполнить php5enmod.
Моя конфигурация кукол ниже:
# Ensure Mcrypt is enabled
exec { "enablemcrypt":
path => [ "/bin/", "/sbin/" , "/usr/bin/", "/usr/sbin/" ],
command => "php5enmod mcrypt",
notify => Service["apache2"],
require => Package["php5-common"],
}
Как вы можете видеть, добавив «/ bin», «/ sbin», «/ usr / bin» и «/ usr / sbin» к параметру пути, puppet теперь может использовать команду «find», которую, похоже, использует внутренне при выполнении команд с аргументами. php5enmod теперь работает правильно для меня на Ubuntu 14.04 LTS.
К сожалению, я не смог заставить это работать так, как мне бы хотелось. Я не уверен, что Puppet просто не очень хорошо играет с php5enmod, или есть какие-то внутренние проблемы с php5enmod и способом его вызова скриптами Puppet.
Однако мне удалось вручную создать символическую ссылку и перезапустить службу со следующим блоком кода.
file { '/etc/php5/fpm/conf.d/20-mcrypt.ini':
ensure => 'link',
target => '/etc/php5/mods-available/mcrypt.ini',
require => [
Package['php5-mcrypt'],
Package['php5-fpm'],
],
notify => Service['php5-fpm'],
}
Надеюсь, это поможет кому-нибудь в будущем.