Help us improve your experience.

Let us know what you think.

Do you have time for a two-minute survey?

 
 

設定テンプレートの Jinja 構文と例

CSO設定テンプレートは、3つのコンポーネントで構成されています。

  • Jinja テンプレート設定には、設定テンプレートのロジックと設定が含まれています。(Jinja は Python 用のテンプレート エンジンであり、Web 上にはいくつかの Jinja リソースがあります。

  • 設定スキーマの記述子を含む Yang データ モデル ファイル。

  • ViewDef (ビュー定義) ファイルは、構成テンプレートの GUI の側面を指定するために使用される JavaScript Object Notation (JSON) ファイルです。

コンフィグテンプレートの追加ワークフローを使用してテンプレートを追加する場合は、Jinja テンプレート言語を使用してテンプレートの設定とロジックを指定します。その後、CSOは、指定したテンプレート設定とロジックに基づいて、YangデータモデルとViewDefファイルを自動的に生成します。Yang ファイルと ViewDef ファイルの生成はユーザーに対して透過的であり、ユーザーの介入は必要ありません。

Jinja構文とCSOキーワード

以下の表は、設定テンプレートで一般的に使用される Jinja 構文と、設定テンプレートで使用されるキーワードをそれぞれリストしています。

表 1: 構成テンプレートで使用される一般的な Jinja 構文

構文

説明

{{ }}

テンプレート出力に出力される変数または式を示します。例えば:

{{tenant_name}}
手記:

ハイフンはCSOテンプレートエンジンでは認識されないため、変数または式にはアンダースコア(_)を使用します。

{# #}

テンプレート出力に含まれないコメントを示します。例えば:

{# This is an example of comment in Jinja syntax #}

{% %}

条件付きロジックの作成に使用されるステートメントを示します。

  • ステートメントは {%- -%} 、出力から空白文字を削除します。

  • if条件が真の場合に、一連のコマンド(および endif キーワードでif囲む)を実行するために使用されるステートメント。

    {% if <condition> %}
    ...
    ...
    ...
    {% endif %}
  • - ステートメントはif、条件が真の場合に一連のコマンド(および if else キーワードで囲まれる)を実行し、条件が偽のときに異なる一連のコマンド(および else endif キーワードで囲まれる)を実行するために使用されます。else

    {% if <condition> %}
    ...
    ...
    {% else %}
    ...
    ...
    {% endif %}
  • この for ステートメントは、条件が真の場合に、一連のコマンド(と for endfor キーワードで囲まれた)をループするために使用されます。

    {% for <condition> %}
    ...
    ..
    ...
    {% endfor %}

ドット (.)

ドット [演算子] は、変数の属性を参照するために使用されます。次の例は、 for 複数のプレフィックスを追加できるループを示しています。

{% for prefix in Trusted_Network_Prefix_List %}
set groups trusted‐prefix policy‐options prefix‐list re‐ssh {{prefix.Trusted_Network_Prefix_List}}
{% endfor %}
手記:

設定テンプレートの詳細モードを有効にした場合、設定テンプレートのキーワードを使用できます。

表 2: コンフィグテンプレートのキーワード

キーワード

説明

post_config

後続の変数がデータ型であることを CSO に示します。

pre_config

デバイスに関連づけられている現在の設定をCSOに示します。pre_configキーワードは、変数フィールドの値を比較し、ターゲット・デバイスから既存の構成を変更または削除するために使用されます。

diff_config

pre_configとpost_configを比較し、レンダリングされた新しい構成を作成してからターゲットデバイスにプッシュすることをCSOに指示します。

例1:単一のJunos OSコマンドをJinja構文に変換する

単一の Junos OS コマンドを Jinja 構文に変換して設定テンプレートで使用する場合、以下を行います。

  1. Junos OS コマンドで構成する変数を識別します。

    たとえば、コマンド set snmp trap-group CSO-Trp-Grp targets 192.0.2.100では、設定される変数は CSO-Trp-Grp と 192.0.2.100 です。

  2. 次のように各変数を二重中括弧で囲んで、Junos OS CLI コマンドを Jinja 構文に変換します。 {{ Variable_Name }}

    したがって、この例では、変数名として and SNMP_Host_IP_Address を使用する場合Trap_Group_Name、コマンドの Jinja 構文は次のようになります。

  3. これを [Add コンフィグテンプレート] ワークフローの [Template Configuration] セクションに貼り付けると、CSO は次のようにパラメータを検出します。

    パラメーター

  4. プレビュー機能を使用して設定をレンダリングする場合(Juniperという名前のOpCoとTestという名前の設定テンプレートの場合)、最初のステップで示した値を使用して、CSOは次のように設定をレンダリングします。

    1つのJunos OSコマンドにJInja構文を指定しましたが、CSOが設定にコマンドを追加していることに注意してください。これは、デフォルトでは、CSOがJunos OSグループを使用して設定を生成するためです。Junos OSグループを使用すると、設定の適用と削除が簡単になります。詳細については、 Junos OSの設定グループを理解するを参照してください。

    Junos OSグループを使用したくない場合は、Jinja構文で設定を指定する際に、設定テンプレートで詳細モードをオンにする必要があります。

例2:Junos OS設定スニペットをJinja構文に変換する

この例では、次の Junos OS 設定スニペットを、設定テンプレートで使用するために Jinja 構文に変換します。

Junos OS の設定を Jinja 構文に変換するには:

  1. Junos OS コマンドで設定されている変数を識別します。理解しやすいように、以下の例では、変数を角括弧(<>)で囲んでいます。

    手記:

    この例では、DHCP-SERVER を変数として考慮していません。

  2. 変数を識別し、各変数の名前を指定し、各変数を二重中括弧で囲むことで、各Junos OS CLIコマンドをJinja構文に変換します。したがって、この場合、Jinja構文は次のとおりです。

  3. これを [Add コンフィグテンプレート] ワークフローの [Template Configuration] セクションに貼り付けると、CSO は次のようにパラメータを検出します。

    パラメーター

  4. プレビュー機能を使用して設定をレンダリングする場合(Juniper という名前の OpCo と Test という名前の設定テンプレートの場合)、この例の値を使用すると、CSO は設定を次のようにレンダリングします。

例 3: 条件付きロジックを使用する

この例は、前の例の修正版であり、構成テンプレートで条件付きロジック (ifforおよび ステートメント) を使用する方法を説明します。

上記の例の説明は次のとおりです。

  1. この例では、ステートメントを追加し if 、そのステートメント内に設定を次のように囲みます。

    つまり、enable_Forwarding_Optionsが True の場合にのみ設定が適用されます。enable_Forwarding_Options が False の場合、構成は適用されません。

    先端:

    enable_Forwarding_Options が False のときに別の設定を適用する場合は、ステートメント else を使用できます。

  2. 次に、および 変数Relay_ZoneRelay_Group_NameRelay_Interface複数の値セットを構成できるようにするステートメントを追加しますfor

    ステートメントを使用すると for 、CSOによってレンダリングされたGUI(プレビュー機能を使用する場合)に、テーブル(グリッド)に変数が表示されます。その後、[追加] アイコン (+) を使用してテーブルに行を追加し、必要に応じて 1 つ以上の値セットを設定できます。

  3. コンフィグテンプレートの追加ワークフローの「テンプレート設定」セクションにJinjaコマンドを貼り付けると、CSOは次のようにパラメータを検出します。

    パラメーター

  4. プレビュー機能を使用して設定をレンダリングし(Juniper という名前の OpCo と Test という名前の設定テンプレートの場合)、、、および Relay_ZoneRelay_Group_NameRelay_Interface2 組の値を含むパラメータの値を指定すると、CSOは設定を次のようにレンダリングします。

例 4: 変数置換を使用する

この例では、変数に指定した 値が コマンドで使用されるように、設定コマンドの一部として変数を使用します。

上記の例の説明は次のとおりです。

  1. この パラメータの属性を使用してVLAN_Id、Junos OS の設定パラメータ vlansvlan-idを設定します。pool

  2. コンフィグテンプレートの追加ワークフローの [テンプレート設定(Template Configuration)] セクションに Jinja コマンド set groups MIST vlans V-{{pool.VLAN_Id}} vlan-id {{pool.VLAN_Id}} を貼り付けると、CSO は次のようにパラメータを検出します。

    パラメーター

    これは、ドット (.) 演算子を使用してパラメーターpoolの属性VLAN_Idを参照したためです。

  3. プレビュー機能を使用して設定をレンダリングし(Juniper という名前の OpCo と Test という名前の設定テンプレートの場合)、に VLAN_Id値 120 を指定すると、CSO は設定を次のようにレンダリングします。

    レンダリングされた構成コマンドでは、VLAN_Id パラメーターに指定した値に基づいて、パラメーターvlansvlan-id がそれぞれ および 120 に設定されているV-120ことがわかります。

例 5: フィルター、連結、および変数の設定を使用する

この例では、連結とフィルターを使用して変数を設定し、その変数を Junos OS の設定コマンドで使用する方法を見ていきます。

上記の例の説明は次のとおりです。

  1. Jinja ステートメント{% set pool_name = Dhcp_Server_Name + ’_’ + Interface | replace(“/”,”_”) %}は、以下のように、他の 2 つの変数 Dhcp_Server_NameInterfaceを使用して という変数pool_nameを設定するために使用されます。

    1. | (パイプ)演算子は、変数を変更する関数であるフィルターから変数を分離するために使用されます。この例では、フィルターを使用してreplace(“/”,”_”)、/ (スラッシュ) 文字を _ (アンダースコア) 文字に置き換えることで変数を変更しますInterface

    2. 次に、演算子を使用して + 、結果の文字列を変数 Dhcp_Server_Nameと連結します。

      手記:

      演算子 + は通常、数値を加算するために使用されますが、値が文字列の場合、文字列は連結されます。

    3. 最後に、タグ set を (演算子と共に = ) 使用して、呼び出され pool_name た変数を連結された変数に設定します。

  2. 次に、Junos OS コマンドを使用してset system services dhcp-local-server overrides process-inform pool {{pool_name}}、前のステップで設定した変数pool_nameを使用して Junos OS 設定ステートメントpoolを構成します。

  3. コンフィグテンプレートの追加ワークフローの「テンプレート設定」セクションにJinjaコマンドを貼り付けると、CSOは次のようにパラメータを検出します。

    パラメーター

    ご覧のとおり、Junos OSコマンドや pool_name 変数は表示されていません。これは、 InterfaceDhcp_Server_Name 変数を使用して最終的なJunos OS設定に到達しているためです。

  4. プレビュー機能を使用して設定をレンダリングし(Juniper という名前の OpCo と Test という名前の設定テンプレートの場合)、に の値 Dhcp_Server_Name LA_dhcp_srvrと ge-0/1/2 Interfaceを指定すると、CSO は設定を次のようにレンダリングします。

    前のステップで説明したように、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: 値をテストする

この例では、値をテストし、テスト条件の結果に基づいてアクションを実行する方法を見ていきます。

上記の例の説明は次のとおりです。

  1. このパラメータ NewNetwork.VLAN_Id を 2 つの条件でテストします。

    1. パラメーターが定義されているかどうか (条件 NewNetwork.VLAN_Id is defined を使用)

    2. パラメーターの長さが 2 より大きいかどうか (条件 (NewNetwork.VLAN_Id | count) > 2を使用)

    キーワード andを使用するため:

    • 両方の条件が当てはまる場合、設定set vlan-id {{NewNetwork.VLAN_Id}}コマンドが(CSOが生成する)設定に追加されます。

    • いずれかの条件がfalseの場合、設定 set vlans VL-{{NewNetwork.VLAN_Id}} が設定に追加されます。

  2. コンフィグテンプレートの追加ワークフローの「テンプレート設定」セクションにJinjaコマンドを貼り付けると、CSOは次のようにパラメータを検出します。

    パラメーター

  3. プレビュー機能を使用して設定をレンダリングする場合(Juniperという名前のOpCoとTestという名前の設定テンプレートの場合)、および

    • に値 125 VLAN_Idを指定すると、両方の条件が当てはまるため、CSOは次のように設定をレンダリングします。

    • VLAN_Id値 65 を指定すると、条件の 1 つが偽(パラメータの長さが 2 以下)であるため、CSOは設定を次のようにレンダリングします。