Как установить config = значение в php.ini с помощью Puppet?
Я делаю первые шаги в Puppet и сталкивался с проблемой. Я установил PHP на сервере Linux, и я хочу немного внести изменения в файл php.ini
. Я не хочу перезаписывать весь файл ini
одним из репозитория, просто измените/создайте одно простое значение конфигурации.
Я хочу убедиться, что свойство upload_max_filesize
в php.ini
имеет значение 10M
.
Как я могу это достичь?
Ответы
Ответ 1
В основном 3 варианта:
-
Используйте поддержку augeas в марионетке (вам понадобятся библиотеки 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 в ваш кукольный репозиторий и используйте файл с
source => 'puppet:///...'
или content => template(...)
, чтобы полностью заменить файл, так как вы указали, что предпочитаете не делать.
Ответ 2
Мой предпочтительный вариант заключается в том, чтобы оставить php.ini в покое, а марионетка создаст файл в каталоге php conf.d, чтобы переопределить значения, которые вы хотите изменить.
Чем меньше изменений вы вносите в 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",
}
Ответ 3
Вы также можете использовать ресурс file_line, найденный в модуле stdlib.
file_line{ 'php_upload_max_filesize':
path => '/path/to/php.ini',
line => "upload_max_filesize = 10M",
}
Так как это добавит строку к файлу, если точно соответствующее ему не существует, а так как последний экземпляр значения конфигурации имеет приоритет над предыдущими в файле, он будет работать. Вот как я это делаю, когда у меня есть только пара вещей, которые нужно изменить.
Ответ 4
Альтернативный подход, если вы используете Apache в качестве вашего веб-сервера, заключается в установке переменной php в файл виртуального хоста Apache (который, вероятно, будет где-то в вашем каталоге манифеста Puppet).
Например:
<VirtualHost *:80>
ServerName app.dev
DocumentRoot /srv/app/public
## etc...
php_value upload_max_filesize 10M
</VirtualHost>
Это фактически не изменяет php.ini, но - в зависимости от вашей настройки - может быть простым способом достижения такого же эффекта.