設定テンプレートでの Jinja のサポート
コンフィグテンプレートでの Jinja の使用
前述したように、構成テンプレートは Jinja テンプレート構文の使用をサポートしています。Jinja2 テンプレート言語を使用して、デバイス コンテキスト機能とプロパティ セット機能を操作できます。これにより、高度な自動テンプレート評価とエンドデバイス設定のレンダリングが可能になります。Jinja構文でデバイスコンテキストプロパティを使用すると、基本的に、Apstraの信頼できる単一の情報源(SSOT)データベースに基づいて、設定テンプレート用に動的に構築された値を持つことができます。
これは、パラメータ化された値を持つ多数のスイッチやインターフェイスに設定テンプレートを適用するユースケースや、ブループリントからの動的データ(スイッチ自身のホスト名など)を設定テンプレートに含めたい場合に便利です。
Apstraデバイスコンテキストでの値へのアクセス
Apstraが各デバイスに対して保存しているすべてのキー値を表示するには、いくつかの方法があります。内部ノードに移動することで、[Staged] または [Active] トポロジ ビューで [Device Context] を選択できます。デバイスビューには、デフォルトで次のように表示されます。
また、設定テンプレートの作成中に デバイスコンテキスト をインタラクティブに表示することもできます。
最後に、API 経由でデバイス コンテキストにアクセスすることもできます。
<apstra-ip>/api/blueprints/<bp-id>/nodes/<system-node-id>/config-context
ブループリント UI を使用して、API 呼び出しに必要なデータにアクセスします。デバイスを選択し、URL のブループリント ID とノード ID をメモします。
構成テンプレートでの Jinja の使用例
ホスト名
次の例は、Junos 設定テンプレートの静的セクションを示しています。1つのJinjaテンプレートは、デバイスのホスト名変数を参照し、ホスト名はApstraグラフデータベースに保存されている値に置き換えられます。この値は、テンプレートがレンダリングされるときに渡されます。このJinjaと変数の使用は、Apstraから動的データを作成する際に役立ちます。
デバイスコンテキストからのBGP ASN
前の例と同様に、次の例は、デバイス プロパティのキー値を呼び出す方法を示しています。設定を動的に構築するために、キー値はApstraグラフデータベースに保存されます。ここでは、キー bgpService.asn と bgpService.router_id がApstraによって保存された値に置き換えられ、テンプレートのレンダリング時に渡されます。
router bgp {{ bgpService.asn }}
{{ bgpService.router_id }}
結果としてレンダリングされた構成:
router bgp 64512 10.0.0.2
ループで使用する変数の定義
場合によっては、構成テンプレートで直接変数を定義して保存すると便利な場合があります。Apstraは、設定をレンダリングする際にこれらの変数を参照します。次の例は、定義された変数を使用してアクセスリストを作成する方法を示しています。
{% set bgp_filters = {
'flb': {
'in': ('permit', '10.0.0.0/8'),
'out': ('deny', '6.6.0.0/16'),
}
} %}
{% for types, entries in bgp_filters.items() %}
{% for direction, entry in entries.items() %}
ip prefix-list BGP-vm-{{ direction }}-filter seq 1000 {{ entry.0 }} {{ entry.1 }}
{% endfor %}
{% endfor %}
レンダリングされた設定の結果
ip prefix-list BGP-vm-in-filter seq 1000 permit 10.0.0.0/8 ip prefix-list BGP-vm-out-filter seq 1000 deny 6.6.0.0/16
プロパティ セットと Jinja ループ
また、Jinja を使用して、要素のリストを含むプロパティ セットのデータ モデルをループして評価することもできます。以下の簡易ネットワーク管理プロトコル(SNMP)の設定例を考えてみましょう。プロパティ セット内の値を Jinja for ループと組み合わせて、複数の動的な構成行で最終構成をレンダリングできることに注意してください。
ip access-list SNMP_RO
{% for server in snmp_servers.split(',') %}
permit ip host {{server}} any
{% if loop.last %}
exit
{% endif %}
{% endfor %}
snmp-server source-interface traps loopback 0
snmp-server community tempPassword group network-operator
snmp-server community tempPassword use-ipv4acl SNMP_RO
{% for server in snmp_servers.split(',') %}
snmp-server host {{server}} traps version 2c mypass
{% endfor %}
プロパティセット:
レンダリングされた設定の結果
ip access-list standard SNMP_RO
permit host 203.0.113.100
permit host 203.0.113.101
exit
snmp-server source-interface loopback 0
snmp-server community tempPassword view mysystem ro SNMP_RO
snmp-server enable traps snmp authentication
snmp-server host 203.0.113.100 traps version 2c mypass
snmp-server host 203.0.113.101 traps version 2c mypass
Building and Testing Your Config Templates with Jinja
Freeformには、複数ペインの設定テンプレートエディターも用意されています。この革新的な機能は、統合開発環境 (IDE) と同様に機能し、構成テンプレートをリアルタイムで構築および編集します。
マルチペイン構成テンプレートエディター
テンプレート テキスト ペイン
名前が示すように、マルチペイン構成テンプレートエディターには、いくつかの編集ウィンドウがあります。メイン ウィンドウは [Template Text] 領域で、Config テンプレートを作成します。このテンプレートテクスチャ領域は、構文の強調表示、オートコンプリート、およびエラー通知をサポートします。
プレビューペイン
次のウィンドウは [Preview] ペインで、含まれている Jinja 構文を処理し、最終的な Config Template コンパイルをレンダリングします。これにより、最終的に処理された設定をリアルタイムで表示できます。完全な設定を表示するか、増分設定を表示するかを選択できます。
デバイスのコンテキスト ペイン
最後に、 デバイスのコンテキスト ペインには、選択したデバイスでApstraが使用できるすべてのグラフプロパティが表示されます。これにより、動的な変数置換のために設定テンプレートで使用できる値をすばやく確認して検索できます。
プレビューペインに Jinja テンプレートからレンダリングされた設定を正常に表示するには、Jinja テンプレートを読み込み、テスト対象のデバイスにアタッチする必要があります。