Как установить config= значение в php.ini с Puppet?
Я делаю свои первые шаги в Puppet и столкнулся с проблемой. Я установил PHP на сервер Linux и хочу внести некоторые изменения в php.ini
файл. Я не хочу перезаписывать весь ini
файл с одним из репозитория, просто измените / создайте одно простое значение конфигурации.
Я хочу убедиться, что собственность upload_max_filesize
в php.ini
имеет значение 10M
,
Как мне этого добиться?
4 ответа
Там в основном 3 варианта:
Используйте поддержку augeas в puppet (вам понадобятся установленные библиотеки ruby augeas), например:
augeas { "php.ini": notify => Service[httpd], require => Package[php], context => "/files/etc/php.ini/PHP", changes => [ "set post_max_size 10M", "set upload_max_filesize 10M", ]; }
Вы можете использовать "augtool ls /files/etc/php.ini", чтобы увидеть разделы, чтобы понять, как augeas выполняет синтаксический анализ файла, и использовать его для определения необходимых вам путей.
Вы можете использовать exec. Что-то вроде:
define set_php_var($value) { exec { "sed -i 's/^;*[[:space:]]*$name[[:space:]]*=.*$/$name = $value/g' /etc/php.ini": unless => "grep -xqe '$name[[:space:]]*=[[:space:]]*$value' -- /etc/php.ini", path => "/bin:/usr/bin", require => Package[php], notify => Service[httpd]; } } set_php_var { "post_max_size": value => '10M'; "upload_max_filesize": value => '10M'; }
К сожалению, это решение не понимает разделы в php.ini, поэтому добавление переменной, которой там еще нет, потребует дополнительных усилий. Это будет неправильно, если переменная появится в нескольких разделах (но примеры, на которые я смотрю, имеют все уникальные имена переменных). Это должно работать для переменной, которая присутствует, но закомментирована с точкой с запятой.
- Скопируйте оригинальный файл php.ini в ваш репозиторий Puppet и используйте файл с
source => 'puppet:///...'
или жеcontent => template(...)
полностью заменить файл, как вы указали, вы бы предпочли не делать.
Мой предпочтительный вариант - оставить php.ini в покое, и пусть puppet создаст файл в каталоге conf.d в php, чтобы переопределить значения, которые вы хотите изменить.
Чем меньше изменений вы вносите в php.ini, тем легче видеть, что происходит, когда вам необходимо объединить свои изменения с изменениями поставщиков пакетов при обновлении php.ini в будущем.
file {'/etc/php5/conf.d/upload_limits.conf':
ensure => present,
owner => root, group => root, mode => 444,
content => "post_max_size = 10M \nupload_max_filesize = 10M \n",
}
Вы также можете использовать ресурс file_line, находящийся в модуле stdlib.
file_line{ 'php_upload_max_filesize':
path => '/path/to/php.ini',
line => "upload_max_filesize = 10M",
}
Так как это добавит строку к файлу, если тот, который точно соответствует ему, не существует, и поскольку последний экземпляр значения конфигурации имеет приоритет над предыдущими в файле, он будет работать. Вот как я это делаю, когда у меня есть только пара вещей, чтобы измениться.
Альтернативный подход, если вы используете Apache в качестве веб-сервера, - это установить переменную php в вашем файле виртуального хоста Apache (который, вероятно, будет где-то в вашем каталоге Puppet-манифестов).
Например:
<VirtualHost *:80>
ServerName app.dev
DocumentRoot /srv/app/public
## etc...
php_value upload_max_filesize 10M
</VirtualHost>
Это на самом деле не меняет php.ini, но - в зависимости от вашей настройки - может быть простым способом достижения того же эффекта.