Help us improve your experience.

Let us know what you think.

Do you have time for a two-minute survey?

 
 

Ansibleを使用してJunosデバイスとの間でファイルを転送する

juniper.device.file_copyモジュールを使用して、AnsibleコントロールノードとJunosデバイス間でファイルをコピーします。

ジュニパーネットワークスは、AnsibleコントロールノードとJunosデバイス間でファイルを転送するために使用できるAnsibleモジュールを提供しています。 表1は 、利用可能なモジュールの概要を示しています。Ansible には、ファイル操作を処理するための標準組み込みモジュールも用意されています。このトピックでは、 juniper.device.file_copy モジュールの使用方法について説明します。

表1:ファイルをコピーするモジュール

コレクション

モジュールセット

モジュール名

juniper.device

juniper.device

juniper.device.file_copy

junipernetworks.junos

juniper.device.file_copy モジュールの概要

juniper.device.file_copyモジュールを使用して、AnsibleコントロールノードとJunosデバイス間でファイルを転送できます。表2は、モジュール引数の概要を示しています。転送の方向を指定するには、action引数を含める必要があります。また、転送するファイルのローカルディレクトリとリモートディレクトリ、およびファイル名も指定する必要があります。オプションで、転送プロトコルと宛先ファイル名を含めることができます。

表2:引数juniper.device.file_copy

モジュール引数

説明

action

実行するアクション。リモートデバイスとリモートデバイスからファイルをコピーするかどうかを指定します。

  • 値:

    • get—管理対象デバイスからAnsible制御ノードにファイルをコピーします。

    • put—Ansible制御ノードから管理対象デバイスにファイルをコピーします。

checksum

(オプション)ファイルのMD5チェックサムを検証するかどうかを指定します。

  • デフォルト: true

  • 値:

    • true—ファイルのMD5チェックサムを検証して、コピーされたファイルの整合性を検証します。

    • false—チェックサム検証をスキップします。

file

コピーするファイルのファイル名。

local_dir

ローカルAnsible制御ノード上のディレクトリ。

protocol

(オプション)ファイル転送に使用するプロトコル。

  • デフォルト: scp

  • 値:

    • ftp

    • scp

remote_dir

リモートデバイス上のディレクトリ。

transfer_filename

(オプション)コピー先ファイルのファイル名。このパラメーターを省略すると、コピー先ファイルはソースファイルと同じファイル名を使用します。

デフォルトでは、 juniper.device.file_copy モジュールはSCPプロトコルを使用してファイルのチェックサムを検証し、コピーされたファイルの整合性を検証します。モジュールがファイルをコピー先ディレクトリにコピーし、コピーされたファイルのチェックサムが元のファイルのチェックサムと一致する場合、 file_copy モジュールは転送の成功を報告します。

場合によっては、転送は成功しても、チェックサムが一致しないためにタスクが失敗したとモジュールが報告することがあります。転送中にファイルが破損した場合、チェックサムの不一致が発生する可能性があります。また、頻繁に更新される大きなログファイルを転送する場合にも発生する可能性があります。この場合、転送中にファイルが更新されると、転送されたファイルが元のファイルとわずかに異なり、チェックサムの不一致が発生する可能性があります。このような場合、チェックサム検証をスキップするように checksum: false を設定できます。ただし、ファイル転送についてはチェックサム検証を維持することをお勧めします。

リモートデバイスからファイルを転送する

juniper.device.file_copyモジュールを使用して、JunosデバイスからAnsibleコントロールノードにファイルをコピーできます。例えば、デバイス上の設定ファイルやログファイルを定期的にアーカイブすることができます。リモートデバイスからファイルを転送するには、action: getを指定します。

以下のプレイブックでは、インベントリグループの各デバイスから Ansible 制御ノードの logs ディレクトリにメッセージログファイルを転送します。モジュール引数は、デフォルトである scpとして転送プロトコルを明示的に指定します。このモジュールは、コピーされた各ファイルが前のファイルを上書きしないように、宛先ファイルごとに一意のホスト固有のファイル名を使用します。

プレイブックを実行すると、まず ログ ディレクトリが作成されます。その後、プレイブックは、各デバイスから メッセージ ログファイルをコピー先ディレクトリにコピーし、各ファイルを一意のファイル名で保存します。コピータスクはすべてのホストで失敗したように見えますが、実際にはファイル転送は成功しています。この場合、Junosデバイスは転送が行われる間にログファイルを更新し続けます。その結果、元のファイルとコピーされたファイルが若干異なるため、ローカルファイルとリモートファイル間のチェックサム比較は失敗します。

ログディレクトリを確認すると、メッセージログが各ホストに対してアーカイブされていることがわかります。

チェックサム検証が失敗することがわかっている場合は、オプションで検証をスキップする checksum: false を含めることができます。前のプレイブックを実行してチェックサム検証をスキップした場合、タスクはすべてのホストの "changed": true を報告します。

リモートデバイスへのファイルの転送

juniper.device.file_copyモジュールを使用して、AnsibleコントロールノードからJunosデバイスにファイルをコピーできます。リモートデバイスにファイルを転送するには、action: putを指定します。

次のプレイブックは、 bgp.slax スクリプトを Ansible 制御ノードから、指定されたインベントリグループの各ホストにコピーします。スクリプトは、プレイブックの スクリプト ディレクトリからJunosデバイスの /var/db/scripts/op ディレクトリにコピーされます。