Ansible Network FAQ¶
トピック
ネットワークの Playbook のパフォーマンスを改善するにはどうすればよいですか?¶
複数のホストで実行している場合は、strategy: free
を検討¶
strategy
プラグインは、複数のホストで複数のタスクに順序を付ける方法を Ansible に指示します。ストラテジー は Playbook レベルに設定されます。
デフォルトのストラテジーは linear
です。ストラテジーを linear
に設定すると、Ansible は現在のタスクがすべてのホストで実行されるまで待ってから、ホストで次のタスクを開始します。Ansible にはフォークを解放できますが、すべてのホストが現在のタスクを完了するまで使用されません。次のタスクを実行する前に、Playbook の各タスクをすべてのホストで成功させる必要がある場合は、linear
ストラテジーを使用します。
free
ストラテジーを使用すると、Ansible は利用可能なフォークを使用して、できるだけ迅速に各ホストでタスクを実行します。以前のタスクがホストで実行している場合でも、Ansible は他のホストで後でタスクを実行します。free
ストラテジーは、利用可能なフォークをより効率的に使用します。各タスクで Playbook が停止し、単一の低速なホストが待機している場合に、全体のパフォーマンスを向上させるには、strategy: free
を使用することを検討してください。
絶対に必要な場合にのみ show running
を実行¶
show running
コマンドは、クエリーをネットワーク OS が処理する方法であるため、ネットワークデバイスで実行する最もリソース集約的なコマンドです。Ansible Playbook でこのコマンドを使用すると、特に大きなデバイスでパフォーマンスが大幅に低下します。これを繰り返すと、パフォーマンスへの影響が増大します。実行中の設定を確認する Playbook がある場合には、変更を実行してから、実行中の設定を再度確認すると、Playbook が非常に遅くなるはずです。
絶対に必要な場合にのみ ProxyCommand
を使用¶
ネットワークモジュールは、ProxyCommand
パラメーターを使用した プロキシーまたはジャンプホスト の<network_delegate_to_vs_ProxyCommand> 使用をサポートします。ただし、ジャンプホストを使用する場合、Ansible は、永続的な接続タイプ (network_cli
または netconf
) を使用している場合であっても、すべてのタスクに新しい SSH 接続を開く必要があります。バージョン 2.5 で導入された永続的な接続タイプによるパフォーマンスの利点を最大化するために、可能な場合はジャンプホストを使用しないでください。
ニーズに合わせて --forks
の設定¶
Ansible がタスクを実行するたびに、独自のプロセスをフォークします。--forks
パラメーターは、同時タスクの数を定義します。デフォルト設定 (--forks=5
) を保持し、Playbook を 10 台のホストで実行している場合、そのうちの 5 台は、フォークが利用可能になるまで待機する必要があります。当然ながら、許可するフォークが多くなると、Ansible が使用するメモリーおよび処理能力が増えます。ほとんどのネットワークタスクは制御ホスト上で実行されるため、ラップトップはすぐに CPU またはメモリーをバインドできます。
出力が ********
に置き換えられることがある理由¶
Ansible は、パスワードを含む no_log
とマークされたすべての文字列を、Ansible 出力の ********
に置き換えます。これは、機密データを保護するために設計上行われます。ほとんどのユーザーは、自身のパスワードが伏字になることを希望します。ただし、Ansible はパスワードと一致するすべての文字列を ******
に置き換えます。パスワードに共通する単語を使用する場合は、これが問題になる可能性があります。たとえば、パスワードとして Admin
を選択すると、Ansible は、出力の Admin
という単語の全インスタンスを ********
に置き換えます。これにより、出力が読みにくくなります。この問題を回避するには、Ansible 出力の別の場所では使用しない安全なパスワードを選択します。
省略されたコマンドで、*_config
モジュールが常に changed=true
を返す理由¶
ネットワークデバイスで直接コマンドを実行する場合は、短縮コマンドを使用できます。たとえば、int g1/0/11
と interface GigabitEthernet1/0/11
の動作は同じです。同様に shut
および shutdown
の動作も同じです。Ansible Network *_command
モジュールは、ネットワーク OS でコマンドを実行するため、省略形で機能します。
ただし、設定をコミットすると、ネットワーク OS は省略形を長い形式のコマンドに変換します。GigabitEthernet1/0/11
で shut
または shutdown
を使用しているかどうかに関わらず、設定の結果は同じ (shutdown
) になります。
Ansible Network *_config
モジュールは、lines
で指定するコマンドのテキストを、設定のテキストと比較します。タスクの lines
セクションで shut
を使用し、設定が shutdown
を読み込む場合は、設定がすでに正しくても、モジュールは changed=true
を返します。タスクを実行すると、毎回設定が更新されます。
この問題を回避するには、*_config
モジュールで長い形式のコマンドを使用します。
---
- hosts: all
gather_facts: no
tasks:
- ios_config:
lines:
- shutdown
parents: interface GigabitEthernet1/0/11