引き続きansibleに関して。
設定ファイルの書き換え
サーバーのインストールとなるとソフトウェアのインストールだけではなくて、設定ファイルの書き換えなども合わせてやることが一般的です。
以下の方法がわかりやすいでしょう。/etc/php.iniのdate_timezoneを’Asia/Tokyo’に変える設定を書こうと思います。
ini_file
1 2 |
- name: "PHPの修正" ini_file: dest='/etc/php.ini' section=Date option=date.timezone value='"Asia/Tokyo"' backup=yes |
- dest :対象ファイル
- section:置換対象セクション名
- option:置換対象行
- value:置換後の値
- backup バックアップをとるかいなか(yes or no)でタイムスタンプの付いたバックアップファイルが作れます。
さらなる細かい設定は公式を
http://docs.ansible.com/ansible/ini_file_module.html
設定ファイル形式の場合にはこれがベターでしょう。
ちなみに拡張は別に.iniである必要はありません。
またsectionやoptionが元々ファイルにない場合は新たに作られます。
lineinfile
1 2 |
- name: "PHPの修正" lineinfile: dest='/etc/php.ini' regexp='date\.timezone.*' line='date.timezone="Asia/Tokyo"' backup=yes |
- dest :対象ファイル
- regexp:置換対象正規表現
- line:置換
- backup ini_fileに同じ
こちらは設定ファイルではなく、通常のテキストファイルなら正規表現を使っての置換ができます。置換だけではなく、特定行のあとに追加するなどもできます。
http://docs.ansible.com/ansible/lineinfile_module.html
似た表現でreplaceというものもあります。これは複数行の置換が可能です。
他に正規表現などをダイレクトに使うなどもありましたが、簡便なものに絞りました。
他参考リンク
複数の値の置換
パッケージのインストール、ファイルの置換ともに複数の変数をまとめてインストールしたいときなどあると思います。その時は下記のように書きます。
PHP系のソフトウェアを一気にインストール
1 2 3 4 5 6 |
- name: "PHPインストール" yum: name={{item}} state=latest with_items: - php - php-mbstring - php-mysql |
{{item}}部分が変数でwith_itemsで配列を定義しています。
設定ファイルの複数の置換
1 2 3 4 5 |
- name: "SSHの修正" replace: dest='/etc/ssh/sshd_config' regexp='{{item.pattern}}' replace='{{item.replaced_value}}' backup=yes with_items: - { pattern: '#Port 22', replaced_value: 'Port 2222' } - { pattern: 'PasswordAuthentication yes', replaced_value: 'PasswordAuthentication no' } |
こちらはハッシュのリストが置換対象となっているパターンです。設定ファイルはこの形式でしょう。
ファイル分割
管理するタスクが増えてくると1つのファイルでずらずらと書くことになり可読性、保守性が低下するでしょう。
その場合、プログラムのように複数ファイルに分割するのが一般的でしょう。
例えばmain.ymlというファイルが親でここは呼び出すだけにし、実際の処理はrecipe1.yml receipe2.ymlというファイルに処理が書かれているとします。
この場合、recipe1,2はいままでと同じですが、main.ymlには下記のように書いておけばrecipe1,2を呼び出せます。
1 2 |
- include: recipe1.yml - include: recipe2.yml |
実行時はansible-playbook main.yml でOKです。
ログ修正
ちなみにansibleの実行結果を見たい場合は設定ファイルでログを修正すればOKです。
1 2 3 4 |
vi /etc/ansible/ansible.cfg [default] ・・・ log_path = /var/log/ansible.log |
を追加orコメントアウトをはずす。
これで実行結果が記録されるようになります。