読者です 読者をやめる 読者になる 読者になる

ksaitoの日記

日々試したことの覚え書き

httpd.confへのProxyPass設定をansibleで自動化

ansibleでProxyPassの設定をするサンプルです。

ソース

lineinfileモジュールを使います。

createを指定することで、ファイルがない場合は作成します。

regexpでポートの部分を指定することで、ポート番号変更の際にエントリが増えてしまうことを防ぎます。

$ cat roles/app/tasks/main.yml
---
- name: lineinfile sample
  lineinfile:
    dest: /tmp/test.txt
    regexp: '^ProxyPass /aaa ajp://localhost:[0-9]*/aaa'
    line:    'ProxyPass /aaa ajp://localhost:{{port}}/aaa'
    create: yes
$ 

実行

最初にファイルがない状態で実行するとファイルを作成してエントリを追加します。

$ ls /tmp/test.txt
ls: /tmp/test.txt にアクセスできません: そのようなファイルやディレクトリはありません
$ ansible-playbook -i hosts -l appserv1 site.yml --extra-vars="port=99"; cat /tmp/test.txt

PLAY ***************************************************************************

TASK [setup] *******************************************************************
ok: [appserv1]

TASK [app : lineinfile sample] *************************************************
changed: [appserv1]

PLAY RECAP *********************************************************************
appserv1                   : ok=2    changed=1    unreachable=0    failed=0   

ProxyPass /aaa ajp://localhost:99/aaa
$ 

再度、ポートを変更して実行すると最初の行が書き換えられます。

$ ansible-playbook -i hosts -l appserv1 site.yml --extra-vars="port=8080"; cat /tmp/test.txt

PLAY ***************************************************************************

TASK [setup] *******************************************************************
ok: [appserv1]

TASK [app : lineinfile sample] *************************************************
changed: [appserv1]

PLAY RECAP *********************************************************************
appserv1                   : ok=2    changed=1    unreachable=0    failed=0   

ProxyPass /aaa ajp://localhost:8080/aaa
$