LoginSignup
0
0

More than 5 years have passed since last update.

ansibleで適用するファイルの文字列にバリデーションチェックをかける

Last updated at Posted at 2018-01-13

1. 概要

ansibleでnginxのconfファイルをサーバに配置する際、
ファイルの中身にバリデーションチェックをかけて、
引っかかった場合に処理を止める方法をお伝えします。

問題

nginxでIPアドレスによってアクセス制御をかけたいことがありましたが、
必ず許容しなければならないIPアドレスもあり、間違って設定してしまう恐れがありました。

解決方法

ファイル適用前に、文字列でバリデーションチェックをかけました。
成功した場合、confファイルを配置し、
失敗した場合、処理を止めるようymlファイルを修正しました。

2. 詳細

ソース

- hosts: server1,server2
  become: yes

    - name: Apply file
      copy: src=file.conf dest=/etc/nginx/conf.d/ owner=nginx group=nginx

    - systemd: name=nginx state=reloaded

このままだと、file.confに書いてある内容がそのまま反映され、リロードされてしまいます。

修正箇所

failed_whenを使用し、バリデーションタスクを追加しました。

- hosts: server1,server2
  become: yes

  vars:
    contents: "{{ lookup('file', 'file.conf') }}"

  tasks:
    - name: Validate file.conf
      debug: msg="value of {{ contents }}"
      failed_when: ('123\\.456\\.789\\.000' in contents) or
                   ('123\\.456\\.789\\.001' in contents) or
                   ('123\\.456\\.789\\.002' in contents)

    - name: Apply blacklist
      copy: src=file.conf dest=/etc/nginx/conf.d/ owner=nginx group=nginx

    - systemd: name=nginx state=reloaded

confファイルの中身がエスケープ文字なので、さらにエスケープを重ねなければなりません。

3. まとめ

ファイルの中身の文字列についてバリデーションをかけたいときは
ファイルを変数に格納し、in contents、failed_whenを使用すれば可能となります。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0