豚足は焼いて食べるのが常識だと思っていた@volanjaです。
さて、Ansible 1.6でreplace(置換)モジュールが出ていたので試してみました。
replaceモジュールでは、複数行の置換を行う事ができます。
これまで、複数行の置換をしたい場合はakishin999さんのAnsible で複数行の文字列置換を参考にsedを使うか、templateモジュールを使ってファイルそのものを入れ替える必要がありました。
templateを使うことがほとんどだったのですが、これで便利になりそうです。
replaceを試す。
では、akishin999さんのAnsible で複数行の文字列置換を参考に、実際にどのようになるか試してみます。
実行環境
$ ansible --version
ansible 1.6.8 (release1.6.8 5a4f39bfbf) last updated 2014/07/30 23:46:08 (GMT +900)
対象環境
CentOS 6.4 64bit (virtualbox + vagrantで構築)
置換先ファイル
/tmp/test.conf
foo
bar
baz
bar
bar
bar
foo
ansibleスクリプト
replace.yml
---
- hosts: server
user: root
tasks:
- name: replace /tmp/test.conf
replace: dest=/tmp/test.conf regexp='^bar$' replace='BAR=9999' backup=yes
パラメータについてはreplace(置換)モジュールを参照してください。
parameter | 説明 |
---|---|
dest | 対象環境上の置換先ファイル |
regexp | 正規表現。pythonの正規表現ルールに従います。 |
replace | 正規表現にマッチした箇所をこの文字列に置換します。指定しない場合はマッチした箇所を削除します。 |
backup | yesの時は置換前にファイルをバックアップします。 |
$ cat hosts
[server]
192.168.0.135
実行
$ ansible-playbook replace.yml -i hosts
PLAY [server] *****************************************************************
GATHERING FACTS ***************************************************************
ok: [192.168.0.135]
TASK: [replace /tmp/test.conf] ************************************************
changed: [192.168.0.135]
PLAY RECAP ********************************************************************
192.168.0.135 : ok=2 changed=1 unreachable=0 failed=0
実行結果
/tmp/test.conf
foo
BAR=9999
baz
BAR=9999
BAR=9999
BAR=9999
foo
結論
複数行が置換できたことを確認できました!
おやすみなさいzzzz