Puppetで最初のステップを実行していて、問題が発生しました。LinuxサーバーにPHPをインストールしましたが、ファイルに少し変更を加えたいと思いphp.ini
ます。ファイル全体をリポジトリからのファイルで上書きしたくはありませんini
。1つの単純な構成値を変更/作成するだけです。
upload_max_filesize
のプロパティのphp.ini
値が。であることを確認したいと思います10M
。
どうすればこれを達成できますか?
Puppetで最初のステップを実行していて、問題が発生しました。LinuxサーバーにPHPをインストールしましたが、ファイルに少し変更を加えたいと思いphp.ini
ます。ファイル全体をリポジトリからのファイルで上書きしたくはありませんini
。1つの単純な構成値を変更/作成するだけです。
upload_max_filesize
のプロパティのphp.ini
値が。であることを確認したいと思います10M
。
どうすればこれを達成できますか?
私の好みのオプションは、php.iniをそのままにして、puppetに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つのオプションがあります。
次のように、puppetで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",
];
}
「augtoolls/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のセクションを理解しないため、まだ存在しない変数を追加するには、追加の作業が必要になります。変数が複数のセクションに表示される場合、これは間違ったことをします(しかし、私が見ている例はすべて一意の変数名を持っているように見えます)。これは、存在するがセミコロンでコメントアウトされている変数に対して機能するはずです。
source => 'puppet:///...'
かcontent => template(...)
、ファイルを完全に置き換えます。stdlibモジュールにあるfile_lineリソースを使用することもできます。
file_line{ 'php_upload_max_filesize':
path => '/path/to/php.ini',
line => "upload_max_filesize = 10M",
}
これは、完全に一致する行が存在しない場合にファイルに行を追加し、構成値の最後のインスタンスがファイルの前のインスタンスよりも優先されるため、機能します。変更することがいくつかある場合、これが私が行う方法です。
WebサーバーとしてApacheを使用している場合の別のアプローチは、Apache仮想ホストファイル(おそらくPuppetマニフェストディレクトリのどこかにある)にphp変数を設定することです。
例えば:
<VirtualHost *:80>
ServerName app.dev
DocumentRoot /srv/app/public
## etc...
php_value upload_max_filesize 10M
</VirtualHost>
これは実際にはphp.iniを変更しませんが、セットアップによっては、同じ効果を実現する簡単な方法である可能性があります。