設定テンプレートの 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に指示します。 |
例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 }}
したがって、この例では、変数名として and SNMP_Host_IP_Address を使用する場合Trap_Group_Name、コマンドの Jinja 構文は次のようになります。
set snmp trap-group {{ Trap_Group_Name }} targets {{ SNMP_Host_IP_Address }}
これを [Add コンフィグテンプレート] ワークフローの [Template Configuration] セクションに貼り付けると、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
これを [Add コンフィグテンプレート] ワークフローの [Template Configuration] セクションに貼り付けると、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_Zone
のRelay_Group_Name
Relay_Interface
複数の値セットを構成できるようにするステートメントを追加します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_Zone
のRelay_Group_Name
Relay_Interface
2 組の値を含むパラメータの値を指定すると、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}}
上記の例の説明は次のとおりです。
この パラメータの属性を使用して
VLAN_Id
、Junos OS の設定パラメータvlans
とvlan-id
を設定します。pool
コンフィグテンプレートの追加ワークフローの [テンプレート設定(Template Configuration)] セクションに Jinja コマンド
set groups MIST vlans V-{{pool.VLAN_Id}} vlan-id {{pool.VLAN_Id}}
を貼り付けると、CSO は次のようにパラメータを検出します。パラメーター
pool VLAN_Id
これは、ドット (.) 演算子を使用してパラメーター
pool
の属性VLAN_Id
を参照したためです。プレビュー機能を使用して設定をレンダリングし(Juniper という名前の OpCo と Test という名前の設定テンプレートの場合)、に
VLAN_Id
値 120 を指定すると、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
がそれぞれ および120
に設定されているV-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 つの変数 Dhcp_Server_Name と Interfaceを使用して という変数pool_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
LA_dhcp_srvrと ge-0/1/2Interface
を指定すると、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 と連結して、Junos OS コンフィギュレーション コマンドで使用される文字列 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
。
例 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 %}
上記の例の説明は次のとおりです。
このパラメータ
NewNetwork.VLAN_Id
を 2 つの条件でテストします。パラメーターが定義されているかどうか (条件
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
に
VLAN_Id
値 65 を指定すると、条件の 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