前提・実現したいこと
ansibleでESXiサーバのパッチ適用、再起動を行います。
5台のESXiホストで構成しているvSphereクラスタが10個あります。
シリアル処理だと時間がかかるため、並列処理させたいのですが
ansibleグループをvSphereクラスタ単位とし、forksで並列処理すると、
グループ内で並列処理となるため、同一クラスタ内のホストが同時に再起動し、
サービス影響が出てしまいます。
そのため、クラスタ内では1台1台シリアル処理だが、
別のクラスタ同士では同時(並列)に処理を行うことは可能でしょうか。
補足情報
クラスタ毎にを分けたplaybookを複数同時実行
forks=1にすれば実現可能??
気になる質問をクリップする
クリップした質問は、後からいつでもMYページで確認できます。
またクリップした質問に回答があった際、通知やメールを受け取ることができます。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
回答2件
0
ベストアンサー
2点ほど考えてみました。
以下のサンプルインベントリとPlaybookを例にして回答します。
サンプルインベントリ
[cluster1] esxi01.example esxi02.example [cluster2] esxi03.example esxi04.example [cluster3] esxi05.example esxi06.example [all:vars] ansible_python_interpreter=/path.../python ansible_connection=local esxi_username=root esxi_password=secret
サンプルPlaybook
yaml
1--- 2- name: Sample Playbook 3 hosts: all 4 gather_facts: false 5 tasks: 6 - name: Sample task 7 vmware_host_facts: 8 hostname: "{{ ansible_host }}" 9 username: "{{ esxi_username }}" 10 password: "{{ esxi_password }}" 11 validate_certs: false 12 esxi_hostname: "{{ ansible_host }}" 13 register: result
1 cluster毎でグループを分けて、グループ単位でリミットをかけて実行
クラスタ毎にを分けたplaybookを複数同時実行
forks=1にすれば実現可能??
この内容とほぼ被っていますが、クラスタ毎にグループを分けてPlaybookをリミット指定(またはfork)で実行することで可能かと思います。
以下はPlaybookの serial
を 1
にした例です。
yaml
1- name: Sample Playbook 2 hosts: all 3 gather_facts: false 4 serial: 1 5(snip)
以下はクラスタ単位でコマンドを実行する例です。
$ ansible-playbook -i inventory sample.yml -l cluster1 $ ansible-playbook -i inventory sample.yml -l cluster2 $ ansible-playbook -i inventory sample.yml -l cluster3
2 hostsにホストを正規表現で指定
以下のようにhostsで実行したい単位の内容で正規表現を書いて、同時に実行したいserialを記述します。
以下ではクラスタが分かれている esxi01,03,05
esxi02,04,06
単位で実行する例です。
yaml
1--- 2- name: Sample Playbook 3 hosts: "*0[1|3|5]*,*0[2|4|6]*" 4 serial: 3 5 gather_facts: false 6(snip)
または hosts
を all
にして1と同じようにリミットを使用しても良いです。
$ ansible-playbook -i inventory sample.yml -l "*0[1|3|5]*,*0[2|4|6]*"
以下の結果のようにそれぞれのクラスタで1台ずつ実行されます。
bash
1$ ansible-playbook -i inventory sample.yml 2 3PLAY [Sample Playbook] ********************************************************************************************************************************************************************************** 4 5TASK [Sample task] ************************************************************************************************************************************************************************************** 6ok: [esxi05.example] 7ok: [esxi03.example] 8ok: [esxi01.example] 9 10PLAY [Sample Playbook] ********************************************************************************************************************************************************************************** 11 12TASK [Sample task] ************************************************************************************************************************************************************************************** 13ok: [esxi06.example] 14ok: [esxi04.example] 15ok: [esxi02.example] 16 17PLAY RECAP ********************************************************************************************************************************************************************************************** 18esxi01.example : ok=1 changed=0 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0 19esxi02.example : ok=1 changed=0 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0 20esxi03.example : ok=1 changed=0 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0 21esxi04.example : ok=1 changed=0 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0 22esxi05.example : ok=1 changed=0 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0 23esxi06.example : ok=1 changed=0 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0
投稿2021/05/09 13:50
総合スコア44
0
https://airhand.hatenablog.com/entry/2018/08/12/100201
方法2. delegate_to + run_once
投稿2021/05/01 15:38
総合スコア1
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
あなたの回答
tips
太字
斜体
打ち消し線
見出し
引用テキストの挿入
コードの挿入
リンクの挿入
リストの挿入
番号リストの挿入
表の挿入
水平線の挿入
プレビュー
質問の解決につながる回答をしましょう。 サンプルコードなど、より具体的な説明があると質問者の理解の助けになります。 また、読む側のことを考えた、分かりやすい文章を心がけましょう。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2021/05/14 11:05
2021/05/30 09:55