Junos OSコンポーネント向けSalt について
一般的な各種Saltコンポーネントと、Junos OSを実行するデバイスの管理に関連するコンポーネントについて理解します。
コンポーネントの概要
Salt を使用して、Junos OS を実行しているデバイスを管理できます。 表1 は、さまざまなSaltコンポーネントの概要を示しています。各コンポーネントについては、以下のセクションで詳しく説明します。
コンポーネント |
形容 |
|---|---|
ソルトマスター |
1 つ以上のミニオンを管理するメイン コントロール サーバー。 |
ソルトミニオン |
Salt で管理されるノード。 |
Salt プロキシ |
Salt マスターまたは別のサーバーで実行され、標準のソルト ミニオン プロセスをデバイス上で直接実行しないデバイスを Salt マスターが管理できるようにするプロセス。 Junosプロキシ(Salt用)を使用すると、SaltマスターでJunos OSを実行しているデバイスを管理できます。 |
穀類 |
ソルトミニオンに関する静的な情報または事実。 Saltは、Junos OSを実行しているデバイスに最初に接続した時点で、そのデバイスからファクトを取得します。Junos OS ファクトは Salt グレインに格納され、他のグレインと同じ方法でアクセスできます。 |
柱 |
ミニオンに関連付けられ、ミニオンからアクセスできるユーザー定義データ。 |
状態ファイル |
Salt システムで使用され、特定のターゲットに適用できるデータ構造を定義します。たとえば、柱のデータやシステムの状態を定義するために使用できます。 |
上位ファイル |
デバイスのグループを、特定の環境内で適用する必要がある Salt 状態ファイルにマッピングします。 |
実行モジュール |
Salt マスター コマンド ラインからミニオンに対してアドホック タスクを実行できるようにする実行関数を定義します。 Junos実行モジュール(Salt用)を使用すると、Junos OSを実行しているデバイス上で運用タスクと設定タスクを実行できます。 |
状態モジュール |
ミニオンの目的の状態を宣言して適用できる状態関数を定義します。 Junos ステート モジュール(Salt 用)は、Junos OS を実行するデバイスで特定のステートを宣言して適用するために、ソルト ステート ファイルで使用できる機能を提供します。 |
Junos syslogエンジン |
Junos OSを実行しているデバイスから送信されるシステムログメッセージを監視し、イベント情報を抽出して、SaltイベントバスにSalt形式で公開します。 |
原子炉 |
Salt イベントバスで受信した特定のイベントに対して実行するアクションを定義できます。 |
以下のSaltコンポーネントは、Saltソフトウェアと統合されており、Junos OSを実行するデバイスの管理に使用されます。
Salt マスター、ミニオン、プロキシ ミニオン
Salt マスターは、1 つ以上のノードまたは Salt ミニオンを管理するメイン制御サーバーです。Salt は通常、管理対象ノードが Salt ミニオン プロセスを実行するエージェントベースのアーキテクチャを使用します。一部のデバイス(ネットワークデバイスなど)では、Salt Minionプロセスをデバイスに直接インストールして実行できない場合があります。このような場合、Salt はプロキシ ミニオンを使用して、Salt ミニオンを直接実行できないが、別のプロトコル(NETCONF など)で管理できるデバイスを管理できます。ミニオン(プロキシまたはレギュラー)は、デバイスの管理に使用されるソフトウェア プロセスにすぎず、同じサーバー上で複数のプロセスを実行できます。プロキシ ミニオン プロセスは、Salt マスターまたは別のサーバで実行でき、デフォルトでは常に管理対象ノードに接続されます。
標準のSaltインストールには Junosプロキシ モジュールが含まれています。このモジュールを使用すると、SaltマスターはSaltプロキシミニオンを介してJunos OSを実行しているデバイスを管理できます。Junos プロキシ ミニオン プロセスは、Salt マスターまたは別のサーバーで実行でき、プロセスごとに約 40 MB から 100 MB の RAM を必要とします。Junos OS を実行している管理対象デバイスごとに 1 つのプロキシ ミニオン プロセスが必要です。Junosプロキシは、Junos OSを実行しているデバイス上で運用タスクと設定タスクを実行できる実行モジュールと状態モジュールを提供します。
Junosプロキシミニオンサーバーには、Junos PyEZライブラリと、 jxmlease および yamlordereddictloader Pythonモジュールがインストールされている必要があります。Junos PyEZは、Junos OS搭載デバイスの管理と自動化を可能にするPython用のマイクロフレームワークです。Junosプロキシミニオンは、ZeroMQイベントバスを使用してSalt Masterに接続し、Junos PyEZを使用してJunos OSを実行しているデバイスとのSSH経由のNETCONFセッションを確立します。 jxmlease モジュールは XML を Python データ構造に変換し、Python データ構造を XML に変換します。
穀類
グレインは、ソルトマスターがミニオンについて収集する静的なデータです。グレイン データには、デバイスのモデルやシリアル番号など、システムに関するプロパティが含まれます。Salt マスターは、コマンドを実行したり、状態を適用したりするときに、グレインを使用して特定のミニオン グループをターゲットにすることができます。たとえば、特定のオペレーティング システムまたはバージョンを実行しているすべてのミニオンに状態を適用できます。
Junos プロキシ ミニオンは、Junos OS を実行しているデバイスとの接続を確立すると、Junos OS ファクトを収集し、グレインに格納します。Junos OS ファクトには、他のグレインと同じ方法でアクセスできます。
junos_facts グレインを含む Junos OS を実行しているデバイスのグレインを表示するには、grains.items 関数を実行します。
saltuser@salt-master:~$ sudo salt 'router1' grains.items
router1:
----------
cpuarch:
x86_64
dns:
----------
domain:
ip4_nameservers:
- 198.51.100.252
ip6_nameservers:
nameservers:
- 198.51.100.252
options:
- edns0
search:
- example.com
sortlist:
...
junos_facts:
----------
2RE:
True
HOME:
/var/home/saltuser
RE0:
----------
last_reboot_reason:
0x1:power cycle/failure
mastership_state:
master
model:
RE-MX-104
status:
OK
up_time:
29 days, 2 hours, 35 minutes, 25 seconds
...
Junos OSファクトのみを表示する場合は、 junos_facts グレイン項目のみを要求できます。
saltuser@salt-master:~$ sudo salt 'router1' grains.item junos_facts
router1:
----------
junos_facts:
----------
2RE:
True
HOME:
/var/home/saltuser
RE0:
----------
last_reboot_reason:
0x1:power cycle/failure
mastership_state:
master
model:
RE-MX-104
status:
OK
up_time:
29 days, 2 hours, 37 minutes, 15 seconds
...
または、junos実行モジュールから facts 関数を実行することもできます。junos.facts 関数は、前のコマンドと同じデータを返します。
saltuser@salt-master:~$ sudo salt 'router1' junos.facts
router1:
----------
facts:
----------
2RE:
True
HOME:
/var/home/saltuser
RE0:
----------
last_reboot_reason:
0x1:power cycle/failure
mastership_state:
master
model:
RE-MX-104
status:
OK
up_time:
29 days, 2 hours, 37 minutes, 15 seconds
...
デバイスのファクトは、Junos プロキシ ミニオンが Junos OS を実行しているデバイスに接続するときに取得され、キャッシュされます。ファクトを表示すると、キャッシュから提供されます。その結果、すでにキャッシュされているファクトの値が変更されても、Salt システムで自動的には更新されません。デバイスからファクトをリロードして表示するには、 junos.facts_refresh 関数を呼び出します。
saltuser@salt-master:~$ sudo salt 'router1' junos.facts_refresh
グレインを使用して、タスクを実行するミニオンのセットを絞り込むことができます。例えば、以下のコマンドは、デュアルルーティングエンジンを搭載したJunos OSを実行しているデバイスでのみ、 show chassis routing-engine コマンドを実行します。
saltuser@salt-master:~$ sudo salt -G 'junos_facts:2RE:True' junos.cli 'show chassis routing-engine'
柱
ソルトピラーシステムを使用すると、ミニオンに配布できるデータを定義できます。Salt ピラーは、Salt マスターで定義され、ミニオンがアクセスできるユーザー定義データのツリーのような構造です。ピラー データでは、構成データ、ユーザ定義変数、またはミニオンに関連付けられた機密情報が定義される場合があります。ミニオンがアクセスできるピラー データを制限するには、ピラーをピラー トップ ファイル内の適切なターゲットにマッピングします。
ピラー データは単純な YAML ファイルで定義できますが、SQL などのデータベースに格納したり、データベースから取得したりすることもできます。デフォルトでは、ピラー データ ファイルは Salt マスターの /srv/pillar ディレクトリに保存されます。ピラー データの場所を変更するには、Salt マスター 構成ファイルの pillar_roots パラメータを目的のディレクトリに設定します。
Junos OSを実行するデバイスを管理する場合、ピラーを使用して、Junos OSが動作する特定のデバイスのホスト名や認証情報など、Junosプロキシのデータを定義します。次のサンプル ピラー ファイルには、Junos OS を実行するデバイスの Junos プロキシ設定が含まれています。
saltuser@salt-master:~$ cat /srv/pillar/router1-proxy.sls proxy: proxytype: junos host: router1.example.com username: saltuser password: lab123 port: 830 # NETCONF port
通常、/ srv/pillar/top.sls にある Salt ピラー トップ ファイルは、ミニオンがアクセスできるピラー データを定義します。Junos OSを実行しているデバイスを管理する場合、ピラートップファイルは、JunosプロキシミニオンIDを、Junos OSを実行している対応するデバイスのプロキシデータを含むピラーファイルにマッピングします。次の例では、最上位ファイルがプロキシ ミニオン ID router1 をベース環境の router1-proxy.sls ピラー ファイルにマッピングします。
saltuser@salt-master:~$ cat /srv/pillar/top.sls
base:
'router1': # proxy minion ID
- router1-proxy # State file name
'router2':
- router2-proxy
ミニオンのピラー データを表示するには、 pillar.items 関数を実行します。
saltuser@salt-master:~$ sudo salt 'router1' pillar.items
router1:
----------
proxy:
----------
host:
router1.example.com
password:
lab123
port:
830
proxytype:
junos
username:
saltuser
Salt State(SLS)ファイル
SaLt State(SLS)ファイルは、Salt システムがさまざまな目的で使用するデータ構造を定義します。たとえば、柱のデータやシステムの状態を定義するために使用できます。既定では、Salt 状態ファイルは YAML 形式で記述され、ファイル拡張子 .sls が使用されます。状態ファイルは、柔軟性を高めるために Jinja 構文を使用してサポートしています。
Salt を使用すると、管理下システムの設定を宣言的な方法で操作できます。 salt.states.junos、Junos state モジュール(Salt 用)は、状態ファイルで使用できる機能を提供し、Junos OS を実行しているデバイス上で特定の状態を宣言して適用します。例えば、機器構成に特定のステートメントセットが含まれていることや、またはデバイスが特定の動作状態を反映していることを確認したい場合があります。
管理対象デバイスの状態を定義する SLS ファイルの一般的な構造は次のとおりですが、これはモジュールと機能によって異なります。
State name:
module.function:
- param1: value1
- param2: value2
例えば、次の状態ファイルでは、 junos.install_config 関数を使用して、指定されたテンプレートの構成をJunos OSを実行しているターゲットデバイスに適用しています。
saltuser@salt-master:~$ cat /srv/salt/junos_bgp_config.sls
Apply BGP configuration:
junos.install_config:
- name: salt://configs/junos-config-bgp-template.set
- comment: Configuring BGP using Salt
- diffs_file: /var/log/salt/output/{{ grains['id'] }}_junos_bgp_config_diff
1つ以上のターゲット・デバイスに個別の状態を適用できます。例えば:
saltuser@salt-master:~$ sudo salt 'router1' state.apply junos_bgp_config
または、Salt top ファイルを使用して、 highstate の実行中に 1 つ以上の状態をミニオンに適用することもできます。
saltuser@salt-master:~$ cat /srv/salt/top.sls
base:
router1:
- junos_bgp_config
- junos_ospf_config
特定のターゲットで highstate を実行すると、Salt システムは、そのターゲットの top.sls ファイルで構成されているすべての状態を適用します。
saltuser@salt-master:~$ sudo salt 'router1' state.apply
Junosステートモジュールの詳細については、 Junos実行モジュールとステートソルトモジュールについてを参照してください。
トップファイル
Salt を使用してデバイスを管理する場合、ミニオンをさまざまなカテゴリまたは環境にグループ化できます。デフォルトでは、すべてのミニオンは基本環境にありますが、他のミニオンを開発環境または本番環境に配置することもできます。Salt Topファイルは 、デバイスまたはデバイスのグループを、それらに適用する必要がある状態ファイルと、特定の環境内でアクセスできるピラーデータにマッピングします。上位ファイルにはデフォルトで top.sls という名前が付けられ、Salt 状態ファイルを含むディレクトリ階層の最上位に存在します。
デフォルトでは、状態に使用される最上位ファイルは /srv/salt/top.sls にあります。次の構文を使用して、ターゲットデバイスを特定の環境内の対応する状態ファイルにマップします。このファイルでは、常に base 環境を定義する必要があります。
environment1:
target:
- state1
- state2
environment2:
target:
- state1
- state2
たとえば、次のトップ ファイルは、 core.sls および common_config.sls 状態ファイルを、ベース環境内の ID が「router」で始まるすべてのミニオンに適用します。
base:
'router*'
- core
- common_config
状態を適用するには、highstateを実行し、ターゲット・デバイスを指定します。
saltuser@salt-master:~$ sudo salt 'router1' state.apply
同様に、ピラー トップ ファイル (通常は /srv/pillar/top.sls にあります) は、ピラー ファイルを、そのファイル内のデータへのアクセスが許可されているミニオンにマップします。Junos OSを実行しているデバイスを管理する場合、「 ピラー 」セクションで説明しているように、ピラートップファイルは、JunosプロキシミニオンIDを、Junos OSを実行している対応するデバイスのピラーデータを含む状態ファイルにマッピングします。
実行モジュールと状態モジュール
Salt は、システムの状態を宣言および適用し、管理対象デバイス上で操作タスクと設定タスクを実行できるようにする、構成管理およびリモート実行ツールです。Salt 実行モジュールは、Salt ミニオンで実行される Python モジュールです。これらは、ミニオンでタスクを実行できるようにする機能を定義します。Salt マスターでアドホック コマンドを実行して、指定された関数を実行して結果を返すようにターゲット ミニオンに指示できます。同様に、Salt 状態モジュールは、ミニオンへの状態の適用を管理する関数を定義します。
たとえば、すべてのミニオンへの接続をテストするには、 test モジュールの ping 関数を実行し、ターゲットを '*' として指定して、すべてのミニオンを示します。
saltuser@master:~$ sudo salt '*' test.ping
router1:
True
router2:
True
Salt インストールには、Junos の実行モジュールと state モジュールが含まれています。これらのモジュールは、Junos OS を実行しているデバイス上で運用および設定タスクを実行し、状態の適用を管理できる機能を定義します。Junos実行モジュールと状態モジュールの使用方法の詳細については、 Junos実行モジュールと状態ソルトモジュールについてを参照してください。
Junos Syslogエンジン、Salt Event Bus、Salt Reactor
Salt アーキテクチャは、高パフォーマンスのイベント バスを中心としており、Salt マスターとミニオン間の通信のためのデフォルトのメッセージおよびイベント転送メカニズムとして ZeroMQ を使用します。コンポーネントはバスを介してメッセージを送信することで通信し、外部イベントをバスに挿入できます。ソルトマスターと各ソルトミニオンには、それぞれ独自のイベントバスがあります。
イベントシステムは、パブリッシュ/サブスクライブ(pub/sub)モデルを使用します。イベントはイベント バスで発行され、サブスクライバーは発行されたイベントをリッスンし、指示どおりに反応します。たとえば、ミニオンで関数を実行すると、Salt マスターはジョブ イベントを発行し、一致するミニオンがジョブを実行し、ジョブの結果を含むリターン イベントをバスに発生させます。Salt には、バスで外部イベントを公開し、イベントに反応するメソッドが用意されているため、Salt を使用してイベントをリアルタイムで監視および応答できます。
Salt エンジンは、Salt イベントバスでイベントをエクスポートまたはインポートできる外部システム プロセスです。Saltのインストールには、Junos syslogエンジン(Salt用)が含まれています。このエンジンは、Saltサーバーに送信されるJunos OSシステムログ(syslog)メッセージを監視して、Saltイベントバスに公開することができます。有効にすると、Junos syslog エンジンは、指定されたポートで Junos OS を実行している管理対象デバイスからの syslog イベントをリッスンします。Junos syslogエンジンは、イベントを受信すると、イベント情報を抽出してSalt形式に変換し、Saltイベントバスに公開します。
次の出力は、Junos OSを実行しているデバイスから送信され、Junos syslogエンジンによってSaltイベントバスに公開された UI_COMMIT_COMPLETED イベントの例です。
jnpr/syslog/router1/UI_COMMIT_COMPLETED {
"_stamp": "2019-07-24T17:17:30.390374",
"daemon": "mgd",
"event": "UI_COMMIT_COMPLETED",
"facility": 23,
"hostip": "198.51.100.2",
"hostname": "router1",
"message": "commit complete",
"pid": "5795",
"priority": 188,
"raw": "<188>Jul 24 10:17:38 router1 mgd[5795]: UI_COMMIT_COMPLETED: commit complete",
"severity": 4,
"timestamp": "2019-07-24 17:17:30"
Junos syslogエンジンをSaltリアクタと組み合わせて、Junos OSを実行するデバイスのイベントベースの状態管理に使用できます。 Salt リアクターを使用すると、Salt イベント バス上のイベントに応答してアクションを実行できます。Salt Reactor システムを有効にすると、Salt イベント バスが監視され、構成されたルールに基づいて一致するイベントのアクションがトリガーされます。Salt Reactor システムを有効にするには、Salt マスター 構成ファイルで reactor オプションを構成し、イベント タグを 1 つ以上のリアクター SLS ファイルに関連付けます。リアクタ ファイルは、そのイベントが発生したときに実行するアクションを定義します。
Junos syslog エンジンと Junos OS イベント用のリアクター作成の詳細については、以下を参照してください。