Open8

ansible playbookの書き方 サンプル

ziggsziggs

assert モジュール:
コマンド結果から期待する値("helloworld")が出力されているか確認する

---
- hosts: localhost
  tasks:
    - name: run "echo helloworld"
      command: echo helloworld
      register: result

    - name: check pattern1
      assert:
        that: check_word in result.stdout
      vars:
        check_word: "helloworld"

    - name: check pattern2
      assert:
        that: result.stdout.find(check_word) != -1
      vars:
        check_word: "helloworld"
ziggsziggs

リトライ処理:
特定の文字が表示されるまで繰り返しコマンドを実行する

  • until: 条件にマッチするまで繰り返す
  • retries: リトライ回数を指定(デフォルト3回)
  • delay: 待ち時間を指定(デフォルト5秒)
- hosts: localhost
  tasks:
    - name: wait open 8080 (by lsof)
      shell: lsof -i:8080
      register: result
      until: "ok_word in result.stdout"
      vars:
        ok_word: "TCP *:8080 (LISTEN)"
      retries: 30
      delay: 10
      changed_when: false
ziggsziggs

stat モジュール: ファイルの存在チェック
特定ファイル名が存在するかを確認し、状態によって処理を振り分ける

- hosts: localhost
  tasks:
    - name: Check that the /etc/hosts exists
      stat:
        path: /etc/hosts
      register: result

    - debug:
        msg: "File exists"
      when: result.stat.exists

    - debug:
        msg: "File does not exist"
      when: not result.stat.exists
ziggsziggs

with_items(ループ処理)と組み合わせる場合

- hosts: localhost
  tasks:
    - name: Check that the vspca.crt exists
      stat:
        path: "/etc/{{ item }}"
      with_items:
        - hosts
        - hostname
      register: result

    - debug:
        msg: '{{ item.stat.path }} exists'
      with_items: "{{ result.results }}"
      when: item.stat.exists

    - debug:
        msg: '{{ item.stat.path }} does not exist'
      with_items: "{{ result.results }}"
      when: not item.stat.exists
ziggsziggs

hosts(group)ごとに処理を振り分ける
⇒ when: "'<グループ名>' in group_names を使う

hosts 例

group1:
  hosts: 
      ansible_host: 192.168.1.10
      ansible_host: 192.168.1.20
      ansible_host: 192.168.1.30

group2:
  hosts: 
      ansible_host: 192.168.2.10
      ansible_host: 192.168.2.20
      ansible_host: 192.168.2.30

group3:
  hosts: 
      ansible_host: 192.168.3.10
      ansible_host: 192.168.3.20
      ansible_host: 192.168.3.30
- name: test
  hosts:
    - group1
    - group2
    - group3
  - task: 
    - name: group1でのみコマンドを実行する
      command: echo hogehoge
      when: "'group1' in group_names"

    - name: group2 またはgroup3 でのみコマンドを実行する
      command: echo hogehoge
      when: "'group2' in group_names or 'group3' in group_names"
ziggsziggs

カレントディレクトリを取得

  - name: ls
    command: "ls {{ lookup('env', 'PWD') }}"
ziggsziggs

ワイルドカードを使って複数ファイルを削除する

  - name: Clean up
    file:
      path: "{{ item }}"
      state: absent
    with_fileglob:
      - "{{ lookup('env', 'PWD') }}/*.zip"