Junos PyEZ を使用して Junos デバイスを設定する
概要 Junos PyEZ Config
ユーティリティまたは Junos PyEZ テーブルとビューを使用して、Junos デバイスを設定できます。
Junos PyEZを使用すると、Junosデバイス上で構造化および非構造化の設定変更を行うことができます。構成の変更に使用するユーザー アカウントには、各デバイスの構成の関連部分を変更する権限が必要です。ユーザーを定義しない場合、ユーザーのデフォルト $USER
は になります。
以下のセクションでは、構造化と非構造化の設定変更を比較し、ユーティリティを使用して非構造化設定変更を行ったり、テーブルとビューを使用して構造化設定変更を行ったりする場合の Config
Junos PyEZ設定プロセスについて詳しく説明します。
構造化および非構造化設定の変更について
構造化されていない設定変更とは、ASCIIテキスト、Junos XML要素、Junos OS set
コマンド、または JavaScript Object Notation(JSON)としてフォーマットされた静的またはテンプレート化された設定データの読み込みで構成されており、この jnpr.junos.utils.config.Config
ユーティリティを使用して実行されます。対照的に、構造化された設定変更では、Junos PyEZ設定テーブルとビューを使用して、Junos OSユーザーアカウントなど、設定する特定のリソースを定義します。テーブルをJunos PyEZフレームワークに追加すると、Junos PyEZはリソースの設定クラスを動的に作成し、デバイス上でそのリソースをプログラムによって設定できるようになります。
このユーティリティを使用して Config
Junosデバイスで非構造化設定変更を行う場合、設定のどの部分でも変更できますが、設定データとして受け入れられている形式のいずれかを使用し、その形式に適した構文を使用する必要があります。サポートされている構成形式に精通していて、構成の任意の部分を変更するオプションを必要とするユーザーは、構成の変更にこの方法を好む場合があります。この Config
ユーティリティでは、以前にコミットした設定にロールバックしたり、既存のレスキュー設定を読み込むこともできます。
一方、構造化された設定の変更では、テーブルとビューを作成して特定のリソースを定義し、デバイス上で定義されたリソースのみを設定できるようにする必要があります。構造化リソースを定義する際、ユーザーがリソースに設定できる設定ステートメントを指定したり、タイプや制約のチェックを定義して、ユーザーがJunos PyEZアプリケーションのデータに受け入れ可能な値を提供できるようにすることもできます。テーブルとビューを作成すると、簡単に共有して再利用できます。Table ユーザーは、デバイス上のリソースをプログラムで構成でき、サポートされている構成形式や構文に関する知識は必要ありません。
表1 は、Junos PyEZが構成変更を行うためにサポートしている2つの方法をまとめたものです。
構成変更タイプ |
ユーティリティ |
スコープ |
構成データ形式 |
詳細な情報 |
---|---|---|---|---|
構造 |
テーブルとビュー |
テーブルとビューで定義された設定ステートメントに限定されます |
– |
ターゲットとする構成変更を行うために使用 構成形式や構文の知識は必要ありません |
非構造化 |
|
構成の任意の部分 |
|
サポート:
|
このトピックでは、一般的な構成プロセスと、両方の構成方法に共通する操作と要素について説明します。ユーティリティまたはテーブルとビューを使用して Config
構成を更新する方法の詳細については、その構成方法に固有のドキュメントを参照してください。
この Config
ユーティリティを使用して非構造化構成を変更する方法の詳細については、以下のトピックを参照してください。
構成テーブルとビューを使用して構造化された構成変更を行う方法の詳細については、以下のトピックを参照してください。
一般的な設定プロセスの理解
Junos PyEZを使用すると、Junosデバイスの設定を変更することができます。デバイスに正常に接続したら、希望する設定方法に応じて または Config
Table オブジェクトを作成し、それを Device
オブジェクトに関連付けます。例えば:
設定オブジェクト
from jnpr.junos import Device from jnpr.junos.utils.config import Config with Device(host='dc1a.example.com') as dev: cu = Config(dev)
テーブルオブジェクト
from jnpr.junos import Device from myTables.ConfigTables import ServicesConfigTable with Device(host='dc1a.example.com') as dev: sct = ServicesConfigTable(dev)
デフォルトでは、Junos PyEZは候補のグローバル構成( 共有構成データベースとも呼ばれます)を更新します。設定変更の基本的なプロセスは、設定データベースをロックし、設定変更を読み込み、設定をコミットしてアクティブにしてから、設定データベースのロックを解除することです。Junos PyEZ Config
ユーティリティを使用して、共有設定データベースの非構造化設定変更を行う場合、ここで概説する適切なインスタンスメソッドを呼び出すことで、以下のアクションを実行できます。
-
を使用して
lock()
構成をロックします。 -
次のいずれかの操作を実行して、構成を変更します。
-
新しい完全なコンフィギュレーションを読み込むとき、またはコンフィギュレーションの特定の部分を変更するときに呼び出す
load()
-
コール
rollback()
を以前にコミットした設定に戻す(設定のロールバックを参照)。 -
レスキュー設定を読み込むの説明に従って、レスキュー設定を読み込むための呼び出し
rescue()
-
-
「設定をコミットする」および「Junos PyEZ を使用して設定をコミットする」の説明に従って、を使用して設定を
commit()
コミットします。 -
次を使用して構成のロックを解除します。
unlock()
テーブルとビューを使用してデバイスの構造化された構成変更を行う場合は、 、 load()
、 、および unlock()
メソッドを個別に呼び出すlock()
か、これらのすべてのメソッドを自動的に呼び出すメソッドを呼び出すset()
commit()
かを選択できます。
このメソッドは load()
、Table オブジェクトと Config
オブジェクトに対して同じ機能を実行しますが、メソッドを呼び出すオブジェクトの種類に応じて異なるパラメーターを指定します。
構成モードを指定する方法
デフォルトでは、Junos PyEZは候補のグローバル設定を更新します。また、構成データベースを変更するときに使用する別の構成モードを指定することもできます。デフォルト以外のモードを指定するには、コンテキストマネージャー (with ... as
構文) を使用して または Table オブジェクトを作成しConfig
、引数をmode
目的のモードに設定する必要があります。サポートされているモードにはprivate
、 exclusive
dynamic
、 batch
ephemeral
、および が含まれます。
デフォルト以外のモードを指定すると、コンテキストマネージャはデータベースのオープンとロック、およびクローズとロック解除を処理します。これにより、意図せずにデータベースをロック状態のままにすることがなくなります。このような場合は、 および commit()
メソッドを呼び出すload()
だけでデバイスを構成できます。
次の例では、 モードを使用して configure private
設定を変更します。
from jnpr.junos import Device from jnpr.junos.utils.config import Config with Device(host='dc1a1.example.com') as dev: with Config(dev, mode='private') as cu: cu.load('set system services netconf traceoptions file test.log', format='set') cu.pdiff() cu.commit()
from jnpr.junos import Device from myTables.ConfigTables import ServicesConfigTable with Device(host='dc1a.example.com') as dev: with ServicesConfigTable(dev, mode='private') as sct: sct.ftp = True sct.ssh = True sct.telnet = True sct.append() sct.load() sct.pdiff() sct.commit()
コンテキストマネージャは、 、 、 、batch
または ephemeral
モードでの設定データベースのprivate
オープンdynamic
とロックを処理します。 exclusive
したがって、これらのモードのいずれかで or set()
メソッドを呼び出すlock()
と、LockError
例外が発生します。
Junos PyEZを使用すると、このデータベースをサポートするデバイス上の エフェメラル設定データベースを 更新できます。エフェメラルデータベースは、Junosデバイスで設定更新を実行するための高速なプログラムインターフェイスを提供する代替設定データベースです。
一時的な設定データベースは高度な機能であり、誤って使用するとデバイスの動作に深刻な悪影響を与える可能性があります。詳細については、「 エフェメラル構成データベースについて」を参照してください。
エフェメラル構成データベースの既定のインスタンスを開いて構成するには、引数を含めます mode='ephemeral'
。例えば:
from jnpr.junos import Device from jnpr.junos.utils.config import Config with Device(host='router1.example.com') as dev: with Config(dev, mode='ephemeral') as cu: cu.load('set protocols mpls label-switched-path to-hastings to 192.0.2.1', format='set') cu.commit()
エフェメラル構成データベースのユーザー定義インスタンスを開いて構成するには、引数を記述し mode='ephemeral'
、引数を ephemeral_instance
インスタンスの名前に設定します。
from jnpr.junos import Device from jnpr.junos.utils.config import Config with Device(host='router1.example.com') as dev: with Config(dev, mode='ephemeral', ephemeral_instance='eph1') as cu: cu.load('set protocols mpls label-switched-path to-hastings to 192.0.2.1', format='set') cu.commit()
ロード操作を指定する方法
Junos PyEZでは、Junos OS CLIでサポートされているものと同じロード操作の多くを使用して、設定変更をロードすることができます。目的のロード操作を指定するには、テーブルとビューを使用して構造化構成変更を行う場合の set()
メソッド、または構造化構成変更または非構造化構成変更のメソッドに load()
適切なパラメーターを含めるか省略します。 表 2 は、各タイプのロード操作に必要なパラメーター設定を要約したものです。
load override
and load update
操作には完全な構成が必要なため、overwrite=True
構成内の特定のステートメントのみを変更する tables を使用して構成を変更する場合は、 および update=True
引数を使用しないでください。
負荷動作 |
引数 |
説明 |
最初にサポートされた Junos PyEZ リリース |
---|---|---|---|
|
|
読み込んだコンフィギュレーションを既存のコンフィギュレーションとマージします。 |
1.0 |
|
|
コンフィギュレーション全体をロードしたコンフィギュレーションに置き換えます。 |
1.0 |
|
|
パッチ ファイルから構成データを読み込みます。 |
2.4.0 |
|
– |
読み込んだコンフィギュレーションを既存のコンフィギュレーションにマージしますが、既存のコンフィギュレーションのステートメントを、読み込んだコンフィギュレーションの というタグを指定した |
1.0 |
|
|
完全なコンフィギュレーションを読み込み、既存のコンフィギュレーションと比較します。読み込まれたコンフィギュレーションで異なる各構成要素は、既存のコンフィギュレーションの対応する要素を置き換えます。コミット操作中は、変更された構成要素の影響を受けるシステム プロセスのみが新しい設定を解析します。 |
2.1.0 |
Config オブジェクトまたは Table オブジェクトをデバイス インスタンスのプロパティとして作成する方法
class bind()
メソッドを使用するとDevice
、さまざまなインスタンスとメソッドをDevice
インスタンスにアタッチできます。Junos PyEZアプリケーションでは、 または TableオブジェクトをインスタンスにDevice
バインドConfig
するオプションがあります。メソッドの機能は変更されませんが、メソッドの実行は若干異なります。例えば:
スタンドアロン変数として:
with Device(host='dc1a.example.com') as dev: cu = Config(dev) cu.lock()
バインドされたプロパティとして:
with Device(host='dc1a.example.com') as dev: dev.bind( cu=Config ) dev.cu.lock()