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条件が真の場合に、if一連のコマンド(と endif キーワードで囲んだ部分)を実行するために使用されるステートメント。

    {% if <condition> %}
    ...
    ...
    ...
    {% endif %}
  • - ステートメントはif、条件が true の場合に一連のコマンド(と else キーワードで囲んだもの)を実行し、条件が false のときに別のコマンド セット(と endif キーワードでelseif囲んだもの)を実行するelseために使用されます。

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

    {% 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が新しいレンダリングされたコンフィギュレーションを作成してターゲット・デバイスにプッシュすることを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 }}

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

  3. これを設定テンプレートの追加ワークフローの「テンプレート設定」セクションに貼り付けると、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. これを設定テンプレートの追加ワークフローの「テンプレート設定」セクションに貼り付けると、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_InterfaceRelay_Zoneおよび 変数のRelay_Group_Name複数の値セットの設定を有効にするステートメントを追加しますfor

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

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

    パラメーター

  4. プレビュー機能を使用して(Juniperという名前のOpCoとTestという名前の構成テンプレートに対して)設定をレンダリングし、 、 、 のRelay_Group_Name2つの値セットを含むパラメーターの値を指定すると、Relay_InterfaceRelay_ZoneCSOは次のように設定をレンダリングします。

例4:変数置換の使用

この例では、コンフィギュレーションコマンドの一部として変数を使用し、変数に指定した 値が コマンドで使用されるようにします。

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

  1. パラメーターのpool属性を使用してVLAN_Id、Junos OS 構成パラメーターvlansvlan-id.

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

    パラメーター

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

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

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

例5:フィルター,連結,およびセット変数の使用

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

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

  1. Jinja ステートメント{% set pool_name = Dhcp_Server_Name + ’_’ + Interface | replace(“/”,”_”) %}は、次のように、他の 2 つの変数と Interfaceを使用して、 というpool_name変数Dhcp_Server_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 変数は表示されません。これは、 Interface および Dhcp_Server_Name 変数を使用して最終的なJunos OS設定に到達しているためです。

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

    前の手順で説明したように、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_2Junos OS設定コマンドは です。

例 6: 値のテスト

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

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

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

    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 は構成を次のようにレンダリングします。

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