Salt を使用して Junos OS を実行しているデバイスにファイルをコピーする
Salt は、デバイスとの SSH 経由の NETCONF セッションを確立するプロキシ ミニオンを介して、Junos OS を実行しているデバイスを管理できます。プロキシ ミニオンを使用する場合、デバイスは salt ミニオン プロセスを直接実行しないため、標準の Salt 関数を使用してデバイス上でファイル コピー操作を実行することはできません。 salt.modules.junos.file_copy
実行機能と salt.states.junos.file_copy
状態機能を使用すると、Salt マスター サーバまたはプロキシ ミニオン サーバから、Junos OSを実行している管理対象デバイスにファイルをコピーできます。
junos.file_copy 関数の構文
salt.modules.junos.file_copy
実行関数の構文は次のとおりです。
salt 'target' junos.file_copy src dest
salt.states.junos.file_copy
状態関数の構文は次のとおりです。
src: junos.file_copy: - dest: dest
どこ:
src
- ソース ファイルのパス。Salt マスターでパスを指定するには、 salt:// 表記を使用します。プロキシ ミニオン サーバー上のパスを指定するには、絶対パスを使用します。dest
—Junos OS を実行しているデバイス上の宛先ファイルの絶対パスまたは相対パス。ターゲット・デバイスで絶対パスを指定しない場合、パスは現在の作業ディレクトリー(ユーザーのホーム・ディレクトリー)からの相対パスになります。
junos.file_copy実行機能でファイルをコピーする方法
junos.file_copy
実行機能を使用すると、Salt マスター サーバまたはプロキシ ミニオン サーバから Junos OS を実行しているデバイスにファイルをすばやくコピーできます。
たとえば、次のコマンドは、 bgp.slax ファイルをSaltマスターからJunos OSを実行しているターゲットデバイスであるrouter1にコピーし、ファイルの名前を bgp-neighbors.slaxに変更します。
saltuser@salt-master:~$ sudo salt 'router1' junos.file_copy salt://scripts/op/bgp.slax bgp-neighbors.slax router1: ---------- message: Successfully copied file from salt://scripts/op/bgp.slax to bgp-neighbors.slax out: True
コマンドでは宛先ファイルの絶対パスが指定されていないため、ファイルはユーザーのホームディレクトリにコピーされます。
saltuser@router1> file list ~ /var/home/saltuser: .ssh/ bgp-neighbors.slax
ファイルを特定の場所にコピーするには、ターゲット・デバイスの絶対パスを指定します。
saltuser@salt-master:~$ sudo salt 'router1' junos.file_copy salt://scripts/op/bgp.slax /var/db/scripts/op/bgp-neighbors.slax router1: ---------- message: Successfully copied file from salt://scripts/op/bgp.slax to /var/db/scripts/op/bgp-neighbors.slax out: True
saltuser@router1> file list /var/db/scripts/op/ /var/db/scripts/op: bgp-neighbors.slax
junos.file_copy State 関数でファイルをコピーする方法
Salt ステート ファイル内で junos.file_copy
ステート機能を使用して、Salt マスター サーバまたはプロキシ ミニオン サーバから Junos OS を実行しているデバイスにファイルをコピーできます。これにより、ファイルのマスター セットを 1 つの中央リポジトリに格納し、特定のミニオンにコピーするファイルを定義する状態を宣言できます。状態を適用または適用すると、Salt は必要なファイルをリポジトリからデバイスにコピーします。
次の状態ファイルは、2つのスクリプトを、Saltマスターサーバー上の /srv/salt/scripts/op ディレクトリから、Junos OSを実行しているデバイスの /var/db/scripts/op ディレクトリにコピーします。
saltuser@salt-master:~$ cat /srv/salt/junos_copy_op_scripts.sls salt://scripts/op/bgp.slax: junos.file_copy: - dest: /var/db/scripts/op/bgp.slax salt://scripts/op/ospf.slax: junos.file_copy: - dest: /var/db/scripts/op/ospf.slax
状態をターゲットデバイスに適用すると、各スクリプトが指定された場所にコピーされます。
saltuser@salt-master:~$ sudo salt 'router1' state.apply junos_copy_op_scripts router1: ---------- ID: salt://scripts/op/bgp.slax Function: junos.file_copy Result: True Comment: Started: 17:37:10.050920 Duration: 993.378 ms Changes: ---------- message: Successfully copied file from salt://scripts/op/bgp.slax to /var/db/scripts/op/bgp.slax out: True ---------- ID: salt://scripts/op/ospf.slax Function: junos.file_copy Result: True Comment: Started: 17:37:11.044443 Duration: 454.666 ms Changes: ---------- message: Successfully copied file from salt://scripts/op/ospf.slax to /var/db/scripts/op/ospf.slax out: True Summary for router1 ------------ Succeeded: 2 (changed=2) Failed: 0 ------------ Total states run: 2 Total run time: 1.448 s
別の例として、Salt マスターの /srv/salt/scripts ディレクトリにスクリプト ファイルのライブラリがあり、特定のスクリプトが Junos OS を実行している管理対象デバイスに確実にコピーされるとします。
saltuser@salt-master:/srv/salt/scripts$ ls -R .: commit op ./commit: bgp-config.slax ./op: bgp.slax ospf.slax
Salt マスターでは、スクリプト情報をピラー データとして指定し、ピラー トップ ファイル内の適切なミニオンがアクセスできるようにすることができます。
saltuser@salt-master:~$ cat /srv/pillar/junos_scripts.sls junos_scripts: script_path: salt://scripts type: commit: - bgp-config.slax op: - bgp.slax - ospf.slax
saltuser@salt-master:~$ cat /srv/pillar/top.sls base: 'router1': - router1-proxy 'router2': - router2-proxy 'os_family:junos': - match: grain - junos_scripts
その後、Jinjaテンプレートを使用してスクリプトタイプとスクリプト名を反復処理するSalt Stateファイルを作成し、スクリプトをターゲットデバイスにコピーするための適切な命令を生成できます。
saltuser@salt-master:~$ cat /srv/salt/junos_copy_scripts.sls {% for script_type, scripts in pillar['junos_scripts']['type'].items() %} {% for script in scripts %} {{ pillar['junos_scripts']['script_path'] }}/{{ script_type }}/{{ script }}: junos.file_copy: - dest: /var/db/scripts/{{ script_type }}/{{ script }} {% endfor %} {% endfor %}
Jinja の構文は、Salt が使用する Python のバージョンによって異なる場合があります。
レンダリングされた状態ファイルは次のようになります。
salt://scripts/commit/bgp-config.slax: junos.file_copy: - dest: /var/db/scripts/commit/bgp-config.slax salt://scripts/op/bgp.slax: junos.file_copy: - dest: /var/db/scripts/op/bgp.slax salt://scripts/op/ospf.slax: junos.file_copy: - dest: /var/db/scripts/op/ospf.slax
ターゲットデバイスに状態を適用すると、各スクリプトがそのスクリプトタイプのデバイス上の適切なディレクトリにコピーされます。
saltuser@salt-master:~$ sudo salt 'router1' state.apply junos_copy_scripts router1: ---------- ID: salt://scripts/commit/bgp-config.slax Function: junos.file_copy Result: True Comment: Started: 17:23:19.049243 Duration: 1110.873 ms Changes: ---------- message: Successfully copied file from salt://scripts/commit/bgp-config.slax to /var/db/scripts/commit/bgp-config.slax out: True ---------- ID: salt://scripts/op/bgp.slax Function: junos.file_copy Result: True Comment: Started: 17:23:20.160245 Duration: 837.084 ms Changes: ---------- message: Successfully copied file from salt://scripts/op/bgp.slax to /var/db/scripts/op/bgp.slax out: True ---------- ID: salt://scripts/op/ospf.slax Function: junos.file_copy Result: True Comment: Started: 17:23:20.997516 Duration: 854.307 ms Changes: ---------- message: Successfully copied file from salt://scripts/op/ospf.slax to /var/db/scripts/op/ospf.slax out: True Summary for router1 ------------ Succeeded: 3 (changed=3) Failed: 0 ------------ Total states run: 3 Total run time: 2.802 s