はじめに
2020/08/08 に、YouTube Live で「つまずき Ansible 【Part12】実行順序などの制御」という配信をしました。 実際に作業しながらエラーと戦って進めるシリーズです。
今回は、forksや、order など、実行の方式や順序などに関わる機能を試しました。
やったことや、わかったことをふりかえります。
動画
今回のテーマの特性上、このブログの文章をより動画を見ていただいたほうが分かりやすいと思います・・。
■ やったこと
forks による同時実行数の制御
設定名は DEFAULT_FORKS。
デフォルトは 5。
ansible-playook コマンドでは -f または --fork オプションで指定可能。
配信時は試してませんが、ansible.cfg の場合は以下の設定。
[defaults] forks=5
throttle による同時実行数の制限
Play や Task 単位で指定できる。たとえば、Play 全体では forks は 5 だが、特定のタスクだけ throttle: 1 を指定すると、そのタスクだけ 1ホストずつ実行できる。
- name: 2. sleep command: "sleep {{ wait }}" throttle: 1
order による実行ホスト順序の制御
各ホストの実行順序を制御できる。完了順(ログ表示順)ではないので注意。(fork 数を 1にすると、1ホストずつ実行するので、開始順=完了順になる)
デフォルトは inventory で、インベントリの定義順。
stragety による実行戦略の制御
デフォルトは linearで、1タスクごとに各ホストの完了を待って次のタスクに進む。
他には、free がある。
- 参考
serial による Play あたりの実行ホスト数の制御
1つの Play を何ホストずつ実行するかの指定。
参考
Playbook例(
serial: 1)
--- - hosts: sv gather_facts: false serial: 1 tasks: - name: 1. sleep command: "sleep {{ wait }}" - name: 2. sleep command: "sleep {{ wait }}" - name: 3. sleep command: "sleep {{ wait }}"
- 実行ログ
(a29) [root@2a5505f15a98 stumble]# ansible-playbook -i sv.ini server.yml PLAY [sv] ********************************************************************************************************* TASK [1. sleep] *************************************************************************************************** changed: [sv1] TASK [2. sleep] *************************************************************************************************** changed: [sv1] TASK [3. sleep] *************************************************************************************************** changed: [sv1] PLAY [sv] ********************************************************************************************************* TASK [1. sleep] *************************************************************************************************** changed: [sv2] TASK [2. sleep] *************************************************************************************************** changed: [sv2] TASK [3. sleep] *************************************************************************************************** changed: [sv2] PLAY [sv] ********************************************************************************************************* TASK [1. sleep] *************************************************************************************************** changed: [sv3] TASK [2. sleep] *************************************************************************************************** changed: [sv3] TASK [3. sleep] *************************************************************************************************** changed: [sv3] PLAY [sv] ********************************************************************************************************* TASK [1. sleep] *************************************************************************************************** changed: [sv4] TASK [2. sleep] *************************************************************************************************** changed: [sv4] TASK [3. sleep] *************************************************************************************************** changed: [sv4] PLAY RECAP ******************************************************************************************************** sv1 : ok=3 changed=3 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0 sv2 : ok=3 changed=3 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0 sv3 : ok=3 changed=3 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0 sv4 : ok=3 changed=3 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0
strategy: linear、strategy: free、serial: 1 の動きまとめ
まとめてくださいました。
てくなべで紹介されていた並列処理のモード、自分の理解を図にしてみました#tekunabe pic.twitter.com/TbGA3yk9D6
— z a k i 🌈🌉 (@zaki_hmkc) 2020年8月8日
Part13 にむけて
以下のネタを検討中です。気が向いたものをやります。
- connection: local ななにか
- Ansible Toewr / AWX をコマンドがら操作する
- ansible.cfg
- Jinja2、フィルター
- Windows