2024年2月24日土曜日

Ansibleでタスク単位でタイムアウトを設定する

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でタスク単位でタイムアウトを設定する方法は完了となる。

参考

ネットワークデバッグおよびトラブルシューティングガイド - Ansible Documentation

0 件のコメント:

コメントを投稿

人気の投稿