質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.47%
Jinja2

Jinja2は、Python用のテンプレートエンジンです。テンプレートファイルの読込や文字列の埋込、分岐/ループの制御文のサポートなどの機能を持ちます。HTMLやXML生成によく使用されますが、どのような文書でも生成することが可能です。

Ansible

Ansibleは、Python で書かれたサーバーの設定を管理するための 構成管理ツールです。

Q&A

解決済

2回答

3604閲覧

ansible jinja2 空データの扱い方

pero012

総合スコア9

Jinja2

Jinja2は、Python用のテンプレートエンジンです。テンプレートファイルの読込や文字列の埋込、分岐/ループの制御文のサポートなどの機能を持ちます。HTMLやXML生成によく使用されますが、どのような文書でも生成することが可能です。

Ansible

Ansibleは、Python で書かれたサーバーの設定を管理するための 構成管理ツールです。

0グッド

0クリップ

投稿2021/10/07 13:33

前提・実現したいこと

ansibleにて、jinja2テンプレートとある変数を用い、
ある変数locationが空(もしくは jinja2側で偽と判定されるもの)である場合、
jinja2テンプレートに書き込まない
という処理をしたい。

発生している問題・エラーメッセージ

過去に使用した変数値が勝手に適応され、過去の変数値でテンプレートが作成されてしまう。

該当のソースコード

!roles/snmp_conf/template/switch_template.j2------------

{% if location %}
snmp-server location {{ location }}
{% endif %}
!-------------------------------------------------------
!roles/snmp_conf/vars/main/switch.yml-------------------

location:
!-------------------------------------------------------

試したこと

①locationの変数に
location: false
location: null
を適応したが、やはり一つ前に適応した変数がlocationに入ってきてしまう。

② varsディレクトリのlocation変数は空とし、roles/snmp_conf/default/main.yml内に
location: false
を定義したが、変わらない。

③locationを殻の状態で、ansibleサーバの再起動。
結果は同じ。

④ switch_template.j2の{% if location %}を外してみて、そもそもちゃんと空として渡しているか確認
switchにsshでcli_configでコマンドを渡したとき、 snmp-server location {変数}←ここが空になって、コマンドNG
よって、varsの中のlocationは空として渡している様子。

⑤ {% if location != "test" %} として、
location: test とした場合、挙動は空のデータを渡したときと同様、一つ前に適応したlocationの変数が適応されてしまい、
snmp-server locationコマンドをテンプレートに入れないという事ができない。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

いくつか不明な点がありますので教えてください。

  • roles/snmp_conf/vars/main/switch.yml は命名規則としては参照されませんが意図されたものはありますか。
  • 「過去に使用した変数値」の意味合いが読み取れないです。

投稿2021/10/08 02:47

SugiTK

総合スコア495

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

pero012

2021/10/09 15:28

ご回答いただいたのに、遅くなりました。 roles/snmp_conf/vars/main/switch.ymlの意図したところは、varsを機器ごとに分けて管理したかったからです。たとえば、他にもroles/snmp_conf/vars/main/switch_2.yml とか作り、ymlファイルを分けたかったからです。 過去に使用した変数値」の意味合いが読み取れないです。 → 具体的に、 !roles/snmp_conf/vars/main/switch.yml------------------- location: abcd !------------------------------------------------------- と値を入れたとします。 この状態で実行すると、 switchのconfig上に snmp-server location abcdとansibleから設定出来たとします。 この状態で、再度locationを空 に戻すと、 snmp-server location abcd この結果がswitch側のconfigに書き込まれてしまい、locationが空の時、 設定を入れない という動作ができないのです。。。
guest

0

自己解決

機器側のバグであることがわかりました。
snmp-serverのコマンドを入力すると、なぜかすべての設定が反映されてしまいました。。。

投稿2021/10/11 01:59

pero012

総合スコア9

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.47%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問