Ansibleでタスクを実行する際に、30秒以上応答が返ってこない場合、タイムアウトでエラーとなり処理が中断されてしまう。その際に、以下のようなエラーが表示される。
2024-02-10 13:06:29,478 p=2302695 u=root n=ansible |
persistent connection idle timeout triggered, timeout value is 30 secs.
See the timeout setting options in the Network Debug and Troubleshooting Guide.
Ansibleのタイムアウトはデフォルトで30秒と設定されているが、タスクによっては時間を要するものがあり、タイムアウトを長くしたい場合がある。
本記事では、Ansibleでタスク単位でタイムアウトを設定する方法を記載する。
環境
今回の設定を確認した環境は以下の通り。
- OS : AlmaLinux release 8.5
- Ansible : ansible [core 2.15.3]
タスク単位でタイムアウトを設定する方法
タスク単位でタイムアウトを設定する場合は、タスクにvars
設定を追加し、ansible_command_timeout
を設定する。
以下例はVyOSのファイアウォール設定のタスクとなるが、ルール数が多い場合、30秒では設定は完了しないことがあるため、120秒に時間を延ばしている。
# ファイアウォールルール設定
- name: Set firewall rules
vyos.vyos.vyos_firewall_rules:
config:
- afi: ipv4
rule_sets:
- name: OUTSIDE-IN-RULE
default_action: drop
rules: "{{ vyos_firewall_rule_outside }}"
- name: INSIDE-IN-RULE
default_action: drop
rules: "{{ vyos_firewall_rule_inside }}"
state: replaced
vars:
ansible_command_timeout: 120
【参考】デフォルトのタイムアウト時間を変更する方法
ansible.cfg
で以下を記載することで、デフォルトのタイムアウト時間を変更することができる。
[persistent_connection]
command_timeout = 30
以上で、Ansibleでタスク単位でタイムアウトを設定する方法は完了となる。
0 件のコメント:
コメントを投稿