Ansibleで特定サーバのみ振る舞いを変える

はじめに

Ansibleで構成管理をしていると、ある全台ではなくある特定のサーバだけ設定を変えたい時がある。WEBサーバ全体ではなく、その中の1台のみ実施したいという時だ。Ansibleのtipsを紹介。

Ansibleで特定サーバのみ振る舞いを変える

例えばcronをコメントアウトすることを例にする。

  1. Ansibleのinventoriesのhostsファイルを変更
    以下の通り
    [web]
    web01 ansible_host=192.168.10.10 ansible_ssh_private_key_file=~/.ssh/key
    web02 ansible_host=192.168.10.11 ansible_ssh_private_key_file=~/.ssh/key
    
    
  2. ansible-playlistを編集し、サーバ名を取得する。
    - name: check Hostname
    hostname:
    name: '{{ inventory_hostname }}'
    tags: edit_cron

    inventoriesでいうところのweb01やweb02がこれに該当する

  3. replaceを使う
    特定サーバの場合振る舞いを変える
    web02だけあるcronを変えたい場合
    - name: comment out for 02
    replace:
    path: /var/spool/cron/cronuser
    regexp: '^\* \* \* \* \* echo hello'
    replace: '#* * * * * echo hello'
    when: inventory_hostname is search("02")
    tags: edit_cron

    を定義することにより、02のecho helloだけコメントアウトされる