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