Open8
ansible playbookの書き方 サンプル
ansibleでよく使うコードをメモしていく
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"
リトライ処理:
特定の文字が表示されるまで繰り返しコマンドを実行する
- 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
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
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
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"
カレントディレクトリを取得
- name: ls
command: "ls {{ lookup('env', 'PWD') }}"
ワイルドカードを使って複数ファイルを削除する
- name: Clean up
file:
path: "{{ item }}"
state: absent
with_fileglob:
- "{{ lookup('env', 'PWD') }}/*.zip"