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

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

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

Linuxは、Unixをベースにして開発されたオペレーティングシステムです。日本では「リナックス」と呼ばれています。 主にWebサーバやDNSサーバ、イントラネットなどのサーバ用OSとして利用されています。 上位500のスーパーコンピュータの90%以上はLinuxを使用しています。 携帯端末用のプラットフォームAndroidは、Linuxカーネル上に構築されています。

Ansible

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

Q&A

2回答

315閲覧

ansible jinja templdtes : 変数の中身が空の時に1バイトの改行ファイルが生成される

a-syuji

総合スコア16

Linux

Linuxは、Unixをベースにして開発されたオペレーティングシステムです。日本では「リナックス」と呼ばれています。 主にWebサーバやDNSサーバ、イントラネットなどのサーバ用OSとして利用されています。 上位500のスーパーコンピュータの90%以上はLinuxを使用しています。 携帯端末用のプラットフォームAndroidは、Linuxカーネル上に構築されています。

Ansible

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

0グッド

0クリップ

投稿2023/12/16 04:27

実現したいこと

  • 変数の中身が空の場合には0バイトファイルを生成したい。

前提

ansibleでjinja templateモジュールを用いたロールを開発中。

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

1バイトの改行ファイルが生成される。

# cat -E /tmp/sample.txt $ #

該当のソースコード

tasks/main.yml

- name: サンプル template: src: sample.j2 dest: /tmp/sample.txt owner: "root" group: "root" mode: "0644"

templates/sample.j2

{% for item in rhel_sample['input'] %} {% for item is defined %} {{ item }} {% endif %} {% endfor %}

inventory.yml

rhel_sample: input: []

試したこと

デバッグ1

A {% for item in rhel_sample['input'] %} B {% for item is defined %} C {{ item }} D {% endif %} E {% endfor %} F

実行結果1

# cat -E /tmp/sample.txt A$ F$ #

デバッグ2

A {% for item in rhel_sample['input'] %} B {% for item is defined %} C {{ item }} D {% endif %} E {% endfor %}

実行結果2

# cat -E /tmp/sample.txt A$ #

デバッグ3 改行コードなし(0バイト)

# cat -E templates/sample.j2 #

実行結果3 改行コードなし(0バイト)

# cat -E /tmp/sample.txt #

デバッグ4 改行コードあり(1バイト)

# cat -E templates/sample.j2 $ #

実行結果4 改行コードあり(1バイト)

# cat -E /tmp/sample.txt $ #

補足情報(FW/ツールのバージョンなど)

  • rhel: 8.1
  • ansible: core 2.11.1
  • python: 3.6.8
  • jinja: 3.0.1

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

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

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

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

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

guest

回答2

0

タスクを2つに分割する方針はいかがでしょう? タスクでロジックをシンプルに表現できるので、template 内のロジックが複雑化することがない & 仕様に対する可読性が高いメリットがあるかなーと。

1つ目のタスク: when で変数を評価し、空でなければ template モジュールでファイル生成
2つ目のタスク. when で変数を評価し、空なら file モジュール の state: touch [1]で空ファイル生成

[1] https://docs.ansible.com/ansible/latest/collections/ansible/builtin/file_module.html

投稿2023/12/19 06:53

編集2023/12/19 06:54
__kina

総合スコア11

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

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

0

動かないサンプルほど意味がないものもないけど。。。
(j2ファイルの中身間違ってる)

今んとこ期待している動作はできないはずなので一応。
https://github.com/ansible/ansible/issues/69270

投稿2023/12/16 05:37

_raki

総合スコア82

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.42%

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

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

質問する

関連した質問