Salt を使用して Junos OS を搭載したデバイスにファイルをコピーする
Saltは、デバイスとSSH経由でNETCONFセッションを確立するプロキシミニオンを通して、Junos OSを実行しているデバイスを管理できます。プロキシミニオンを使用する場合、デバイスはsalt-minionプロセスを直接実行しないため、標準の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:// 表記を使用します。プロキシミニオンサーバー上のパスを指定するには、絶対パスを使用します。dest
- Junos OS を実行しているデバイス上の宛先ファイルの絶対パスまたは相対パス。ターゲット・デバイス上の絶対パスを指定しない場合、パスは現在の作業ディレクトリ(ユーザーのホーム・ディレクトリ)に対する相対パスになります。
junos.file_copy実行機能でファイルをコピーする方法
junos.file_copy
実行機能を使用すると、SaltマスターまたはプロキシミニオンサーバーからJunos OSを実行しているデバイスにファイルをすばやくコピーできます。
例えば、次のコマンドは、 bgp.slax ファイルをソルトマスターからJunos OS、ルーター1を実行しているターゲットデバイスにコピーし、ファイル名を 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状態関数を使用してファイルをコピーする方法
Saltステートファイル内でstate機能を使用して、SaltマスターまたはプロキシミニオンサーバーからJunos OSを実行するデバイスにファイルをコピーできます junos.file_copy
。これにより、ファイルのマスターセットを単一の中央リポジトリに保存し、特定のミニオンにコピーするファイルを定義する状態を宣言できます。状態を適用または適用すると、Salt は必要なファイルをリポジトリからデバイスにコピーします。
以下のステートファイルは、Salt マスターサーバー上の /srv/salt/scripts/op ディレクトリから Junos OS を実行しているデバイスの /var/db/ scripts/op ディレクトリに 2 つのスクリプトをコピー します 。
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 状態ファイルを作成できます。
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