Jinja の構成テンプレートの構文と例
CSO 構成テンプレートは、次の 3 つのコンポーネントで構成されています。
構成テンプレートのロジックと構成を含む Jinja テンプレート構成。(Jinja は Python 用のテンプレート エンジンで、Web 上でいくつかの Jinja リソースを見つけることができます。
構成スキーマの記述子を含む Yang データ・モデル・ファイル。
ViewDef(ビュー定義)ファイルは、構成テンプレートの GUI の側面を指定するために使用される JavaScript Object Notation (JSON) ファイルです。
構成テンプレートの追加ワークフローを使用してテンプレートを追加する場合は、Jinja テンプレート言語を使用してテンプレートの構成とロジックを指定します。CSO は、指定したテンプレート構成とロジックに基づいて、Yang データ モデルと ViewDef ファイルを自動的に生成します。Yang ファイルと ViewDef ファイルの生成はユーザーに対して透過的であり、ユーザーの介入は必要ありません。
Jinja構文とCSOキーワード
以下の表は、構成テンプレートで一般的に使用される Jinja 構文と、構成テンプレートで使用されるキーワードをそれぞれリストしています。
構文 |
説明 |
---|---|
|
テンプレート出力に出力される変数または式を示します。例えば: {{tenant_name}}
メモ:
ハイフンはCSOテンプレートエンジンでは認識されないため、変数または式にはアンダースコア(_)を使用します。 |
|
テンプレート出力に含まれないコメントを示します。例えば: {# This is an example of comment in Jinja syntax #} |
|
条件付きロジックの作成に使用されるステートメントを示します。
|
ドット (.) |
ドット [演算子] は、変数の属性を参照するために使用されます。次の例は、 {% for prefix in Trusted_Network_Prefix_List %} set groups trusted‐prefix policy‐options prefix‐list re‐ssh {{prefix.Trusted_Network_Prefix_List}} {% endfor %} |
設定テンプレートの詳細モードを有効にした場合、設定テンプレートのキーワードを使用できます。
キーワード |
説明 |
---|---|
post_config |
後続の変数がデータ型であることを CSO に示します。 |
pre_config |
デバイスに関連付けられている現在の設定を CSO に示します。pre_config キーワードは、変数フィールドの値を比較し、ターゲット デバイスから既存の構成を変更または削除するために使用されます。 |
diff_config |
pre_configとpost_configを比較すること、およびCSOが新しいレンダリングされたコンフィギュレーションを作成してターゲット・デバイスにプッシュすることをCSOに指示します。 |
例 1: 単一の Junos OS コマンドを Jinja 構文に変換する
単一のJunos OSコマンドを、構成テンプレートで使用するためにJinja構文に変換する場合:
Junos OS コマンドで構成されている変数を特定します。
例えば、 コマンド
set snmp trap-group CSO-Trp-Grp targets 192.0.2.100
では、設定されている変数はCSO-Trp-Grpと192.0.2.100です。Junos OS CLI コマンドを Jinja 構文に変換するには、次のように各変数を二重中括弧で囲みます。
{{ Variable_Name }}
したがって、この例では、変数名としてandSNMP_Host_IP_Addressを使用すると、Trap_Group_NameコマンドのJinja構文は次のようになります。
set snmp trap-group {{ Trap_Group_Name }} targets {{ SNMP_Host_IP_Address }}
これを設定テンプレートの追加ワークフローの「テンプレート設定」セクションに貼り付けると、CSOは次のようにパラメータを検出します。
パラメーター
SNMP_Host_IP_Addresses Trap_Group_Name
プレビュー機能を使用して(Juniperという名前のOpCoとTestという名前の構成テンプレート用に)設定をレンダリングする場合、CSOは最初のステップで示した値を使用して設定を次のようにレンダリングします。
delete groups default-domain_Juniper_Test delete apply-groups default-domain_Juniper_Test edit groups default-domain_Juniper_Test set snmp trap-group CSO-Trp-Grp targets 192.0.2.100 exit set apply-groups default-domain_Juniper_Test
1つのJunos OSコマンドに対してJInja構文を提供したにもかかわらず、CSOが設定に追加のコマンドを追加していることに注意してください。これは、デフォルトではCSOがJunos OSグループを使用して設定を生成するためです。Junos OSグループを使用すると、設定の適用と削除が容易になります。詳細については、 Junos OS設定グループについてを参照してください。
Junos OS グループを使用しない場合は、Jinja 構文で構成を指定するときに、構成テンプレートで詳細モードをオンにする必要があります。
例 2: Junos OS 構成スニペットを Jinja 構文に変換する
この例では、次の Junos OS 構成スニペットを、構成テンプレートで使用するために Jinja 構文に変換します。
set forwarding-options dhcp-relay server-group DHCP-SERVER 192.0.2.50 set forwarding-options dhcp-relay active-server-group DHCP-SERVER set forwarding-options dhcp-relay group CSO-Relay-Grp1 interface ge-0/0/2.0 set security zones security-zone trust host-inbound-traffic system-services dhcp
Junos OS の設定を Jinja 構文に変換するには、次の手順に従います。
Junos OSコマンドで構成されている変数を特定します。理解しやすいように、以下の例では、変数を角括弧(<>)で囲んでいます。
メモ:この例では、DHCP-SERVER を変数として考慮していません。
set forwarding-options dhcp-relay server-group DHCP-SERVER <Relay_IP> set forwarding-options dhcp-relay active-server-group DHCP-SERVER set forwarding-options dhcp-relay group <Relay_Group_Name> interface <Relay_Interface> set security zones security-zone <Relay_Zone> host-inbound-traffic system-services dhcp
各 Junos OS CLI コマンドを Jinja 構文に変換するには、変数を識別し、各変数の名前を指定し、各変数を二重中括弧で囲みます。したがって、この場合、Jinja構文は次のとおりです。
set forwarding-options dhcp-relay server-group DHCP-SERVER {{Relay_IP}} set forwarding-options dhcp-relay active-server-group DHCP-SERVER set forwarding-options dhcp-relay group {{Relay_Group_Name}} interface {{Relay_Interface}} set security zones security-zone {{Relay_Zone}} host-inbound-traffic system-services dhcp
これを設定テンプレートの追加ワークフローの「テンプレート設定」セクションに貼り付けると、CSOは次のようにパラメータを検出します。
パラメーター
Relay_IP Relay_Interface Relay_Zone Relay_Group_Name
プレビュー機能を使用して(Juniperという名前のOpCoとTestという名前の構成テンプレート用に)設定をレンダリングする場合、CSOはこの例の値を使用して設定を次のようにレンダリングします。
delete groups default-domain_Juniper_Test delete apply-groups default-domain_Juniper_Test edit groups default-domain_Juniper_Test set forwarding-options dhcp-relay server-group DHCP-SERVER 192.0.2.50 set forwarding-options dhcp-relay active-server-group DHCP-SERVER set forwarding-options dhcp-relay group CSO-Relay-Grp1 interface ge-0/0/2.0 set security zones security-zone trust host-inbound-traffic system-services dhcp exit set apply-groups default-domain_Juniper_Test
例 3: 条件付きロジックの使用
この例では、前の例の修正バージョンであり、構成テンプレートで条件付きロジック(if
for
およびステートメント)を使用する方法を説明します。
{%- if enable_Forwarding_Options %} set forwarding-options dhcp-relay server-group DHCP-SERVER {{RelayIP }} set forwarding-options dhcp-relay active-server-group DHCP-SERVER {% for relay in RelayOptions %} set forwarding-options dhcp-relay group {{ relay.Relay_Group_Name }} interface {{ relay.Relay_Interface }} set security zones security-zone {{ relay.Relay_Zone }} host-inbound-traffic system-services dhcp {% endfor %} {% endif %}
上記の例の説明は次のとおりです。
この例では、次のようにステートメントを追加し
if
、そのステートメント内で設定を囲みます。{%- if enable_Forwarding_Options %} ... ... {% endif %}
つまり、enable_Forwarding_Optionsが True の場合にのみ構成が適用されます。enable_Forwarding_Options が False の場合、構成は適用されません。
ヒント:enable_Forwarding_Options が False のときに別の設定を適用する場合は、 ステートメントを使用できます
else
。次に、、 、 、
Relay_Interface
Relay_Zone
および 変数のRelay_Group_Name
複数の値セットの設定を有効にするステートメントを追加しますfor
。{% for relay in RelayOptions %} set forwarding-options dhcp-relay group {{ relay.Relay_Group_Name }} interface {{ relay.Relay_Interface }} set security zones security-zone {{ relay.Relay_Zone }} host-inbound-traffic system-services dhcp {% endfor %}
ステートメントを使用すると
for
、CSOによってレンダリングされるGUI(プレビュー機能を使用する場合)に、テーブル(グリッド)に変数が表示されます。その後、[追加] アイコン (+) を使用してテーブルに行を追加し、必要に応じて 1 つ以上の値セットを構成できます。設定テンプレートの追加ワークフローの「テンプレート設定」セクションに Jinja コマンドを貼り付けると、CSO は次のようにパラメータを検出します。
パラメーター
RelayIP enable_Forwarding_Options RelayOptions Relay_Interface Relay_Zone Relay_Group_Name
プレビュー機能を使用して(Juniperという名前のOpCoとTestという名前の構成テンプレートに対して)設定をレンダリングし、 、 、 の
Relay_Group_Name
2つの値セットを含むパラメーターの値を指定すると、Relay_Interface
Relay_Zone
CSOは次のように設定をレンダリングします。delete groups default-domain_BLR_SOLN_test delete apply-groups default-domain_BLR_SOLN_test edit groups default-domain_BLR_SOLN_test set forwarding-options dhcp-relay server-group DHCP-SERVER 192.0.2.50 set forwarding-options dhcp-relay active-server-group DHCP-SERVER set forwarding-options dhcp-relay group CSO-RelayGrp1 interface ge-0/0/2.0 set security zones security-zone trust host-inbound-traffic system-services dhcp set forwarding-options dhcp-relay group RelayGrp2 interface ge-1/0/2.0 set security zones security-zone untrust host-inbound-traffic system-services dhcp exit set apply-groups default-domain_BLR_SOLN_test
例4:変数置換の使用
この例では、コンフィギュレーションコマンドの一部として変数を使用し、変数に指定した 値が コマンドで使用されるようにします。
set groups MIST vlans V-{{pool.VLAN_Id}} vlan-id {{pool.VLAN_Id}}
上記の例の説明は次のとおりです。
パラメーターの
pool
属性を使用してVLAN_Id
、Junos OS 構成パラメーターvlans
とvlan-id
.構成テンプレートの追加ワークフローの「テンプレート構成」セクションに Jinja コマンド
set groups MIST vlans V-{{pool.VLAN_Id}} vlan-id {{pool.VLAN_Id}}
を貼り付けると、CSO は次のようにパラメーターを検出します。パラメーター
pool VLAN_Id
これは、ドット (.) 演算子を使用してパラメーター
pool
の属性VLAN_Id
を参照しているためです。プレビュー機能を使用して(Juniperという名前のOpCoとTestという名前の構成テンプレートに対して)設定をレンダリングし、 に値120
VLAN_Id
を指定すると、CSOは次のように設定をレンダリングします。delete groups default-domain_Juniper_Test delete apply-groups default-domain_Juniper_Test edit groups default-domain_Juniper_Test set groups MIST vlans V-120 vlan-id 120 exit set apply-groups default-domain_Juniper_Test
レンダリングされた構成コマンドでは、VLAN_Id パラメーターに指定した値に基づいて、パラメーター
vlans
vlan-id
V-120
と がそれぞれ および120
に設定されていることがわかります。
例5:フィルター,連結,およびセット変数の使用
この例では、連結とフィルターを使用して変数を設定し、Junos OS設定コマンドでその変数を使用する方法を見ていきます。
{% set pool_name = Dhcp_Server_Name + '_' + Interface | replace("/", "_") %} set system services dhcp-local-server overrides process-inform pool {{pool_name}}
上記の例の説明は次のとおりです。
Jinja ステートメント
{% set pool_name = Dhcp_Server_Name + ’_’ + Interface | replace(“/”,”_”) %}
は、次のように、他の 2 つの変数と Interfaceを使用して、 というpool_name変数Dhcp_Server_Nameを設定するために使用されます。|
(パイプ) 演算子は、変数を変更する関数であるフィルターから変数を分離するために使用されます。この例では、フィルターを使用してreplace(“/”,”_”)
、/ (スラッシュ) 文字を _ (アンダースコア) 文字に置き換えることで変数を変更しますInterface。次に、演算子を使用して
+
、結果の文字列を変数 Dhcp_Server_Nameと連結します。メモ:通常、演算子
+
は数値の加算に使用されますが、値が文字列の場合は、文字列が連結されます。最後に、タグ
set
が (演算子と共に=
) 使用され、呼び出され pool_name た変数を連結された変数に設定します。
次に、Junos OS コマンドを使用して
set system services dhcp-local-server overrides process-inform pool {{pool_name}}
、前の手順で設定した変数pool_name
を使用して Junos OS 構成ステートメントpool
を構成します。設定テンプレートの追加ワークフローの「テンプレート設定」セクションに Jinja コマンドを貼り付けると、CSO は次のようにパラメータを検出します。
パラメーター
Interface Dhcp_Server_Name
ご覧のとおり、Junos OSコマンドや pool_name 変数は表示されません。これは、 Interface および Dhcp_Server_Name 変数を使用して最終的なJunos OS設定に到達しているためです。
プレビュー機能を使用して(Juniperという名前のOpCoとTestという名前の構成テンプレートに対して)設定をレンダリングし、 に
Dhcp_Server_Name
と ge-0/1/2Interface
LA_dhcp_srvrの値を指定すると、CSOは次のように設定をレンダリングします。delete groups default-domain_Juniper_Test delete apply-groups default-domain_Juniper_Test edit groups default-domain_Juniper_Test set system services dhcp-local-server overrides process-inform pool LA_dhcp_srvr_ge-0_1_2 exit set apply-groups default-domain_Juniper_Test
前の手順で説明したように、ge-0/1/2 の / 文字は最初に _ 文字に置き換えられ、文字列が ge-0_1_2 に変更されます。この文字列を LA_dhcp_srvr と連結して文字列 LA_dhcp_srvr_ge-0_1_2 を生成し、Junos OS 設定コマンドで使用されます。
そのため、生成される
set system services dhcp-local-server overrides process-inform pool LA_dhcp_srvr_ge-0_1_2
Junos OS設定コマンドは です。
例 6: 値のテスト
この例では、値をテストし、テスト条件の結果に基づいてアクションを実行する方法について説明します。
{%- if NewNetwork.VLAN_Id is defined and (NewNetwork.VLAN_Id | count) > 2 -%} set vlan-id {{NewNetwork.VLAN_Id}} {% else %} set vlans VL-{{NewNetwork.VLAN_Id}} {% endif %}
上記の例の説明は次のとおりです。
2つの条件についてパラメータ
NewNetwork.VLAN_Id
をテストします。パラメーターが定義されているかどうか (条件を使用
NewNetwork.VLAN_Id is defined
)パラメーターの長さが 2 より大きいかどうか (条件
(NewNetwork.VLAN_Id | count) > 2
を使用)
キーワード
and
を使用するため:両方の条件が成り立つ場合、設定コマンドは
set vlan-id {{NewNetwork.VLAN_Id}}
(CSOが生成する)設定に追加されます。いずれかの条件が false の場合、その構成が構成
set vlans VL-{{NewNetwork.VLAN_Id}}
に追加されます。
設定テンプレートの追加ワークフローの「テンプレート設定」セクションに Jinja コマンドを貼り付けると、CSO は次のようにパラメータを検出します。
パラメーター
NewNetwork VLAN_Id
プレビュー機能を使用して(Juniperという名前のOpCoとTestという名前の構成テンプレートの場合)構成をレンダリングする場合、次のようになります。
に値 125
VLAN_Id
を指定すると、両方の条件が真になるため、CSO は構成を次のようにレンダリングします。delete groups default-domain_Juniper_Test delete apply-groups default-domain_Juniper_Test edit groups default-domain_Juniper_Testset vlan-id 125 exit set apply-groups default-domain_Juniper_Test
に値65
VLAN_Id
を指定すると、条件の1つが偽(パラメータの長さが2以下)であるため、CSOは設定を以下のようにレンダリングします。delete groups default-domain_BLR_SOLN_testtmp delete apply-groups default-domain_BLR_SOLN_testtmp edit groups default-domain_BLR_SOLN_testtmp set vlans VL-65 exit set apply-groups default-domain_BLR_SOLN_testtmp