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

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

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

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

Q&A

解決済

2回答

2966閲覧

Ansibleでプレイブック実行時に日本語が含まれるファイルの中身をstdoutに出力させたい

Hikky0001

総合スコア1

Ansible

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

0グッド

0クリップ

投稿2021/06/23 01:28

前提・実現したいこと

■前提条件:

  • コントロールノード(Ansibleサーバ):

  ・サーバOS:CentOS Linux release 8.4.2105
・Ansibleバージョン:ansible 2.9.21
・Pythonバージョン:3.6.8
・可読性の観点からansible.cfgにて出力形式を「stdout_callback = yaml」に指定

  • マネージドノード(構築対象サーバ):

  ・サーバOS:CentOS Linux release 8.4.2105
・Pythonバージョン:3.6.8

■実現したいこと:
ansible-playbook実行時に、日本語が含まれるファイルの内容を戻り値「stdout」に出力したい
(shellモジュールを用いて日本語が含まれるファイルをcatする)
※ユースケースとしては、構築対象サーバの設定ファイルの中身をログに出力させて証跡として残すため

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

下記の通り、戻り値「stdout」で日本語が表示されない

[root@AnsibleController work]# ansible-playbook -i rhel_inventory playbook.yml -v Using /work/ansible.cfg as config file PLAY [dev_rhel] ***************************************************************************************************** TASK [rhel : Display Japanese Text] ********************************************************************************* changed: [172.16.1.201] => changed=true ansible_facts: discovered_interpreter_python: /usr/libexec/platform-python cmd: cat /tmp/nihongo.txt delta: '0:00:00.003316' end: '2021-05-14 10:35:29.877294' rc: 0 start: '2021-05-14 10:35:29.873978' stderr: '' stderr_lines: <omitted> stdout: |2+ stdout_lines: <omitted> PLAY RECAP ********************************************************************************************************** 172.16.1.201 : ok=1 changed=1 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0

該当のソースコード

Playbook

1- name: Display Japanese Text 2 shell: cat /tmp/nihongo.txt
#nihongo.txt これは 日本語で 書かれた ファイルです。

試したこと

・debugモジュールを用いて「stdout_lines」の中身を出力したところ問題なくリストに格納されていた

[root@AnsibleController work]# ansible-playbook -i rhel_inventory playbook.yml -v Using /work/ansible.cfg as config file PLAY [dev_rhel] ***************************************************************************************************** TASK [rhel : Display Japanese Text] ********************************************************************************* changed: [172.16.1.201] => changed=true ansible_facts: discovered_interpreter_python: /usr/libexec/platform-python cmd: cat /tmp/nihongo.txt delta: '0:00:00.003377' end: '2021-05-14 10:40:40.254176' rc: 0 start: '2021-05-14 10:40:40.250799' stderr: '' stderr_lines: <omitted> stdout: |2+ stdout_lines: <omitted> TASK [rhel : Debug] ************************************************************************************************* ok: [172.16.1.201] => result.stdout_lines: - これは - 日本語で - 書かれた - ファイルです。 PLAY RECAP ********************************************************************************************************** 172.16.1.201 : ok=2 changed=1 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0

 

・「stdout_callback」にてデフォルトの「skippy」を指定すると問題なく日本語は表示される

[root@AnsibleController work]# ansible-playbook -i rhel_inventory playbook.yml -v Using /work/ansible.cfg as config file PLAY [dev_rhel] ***************************************************************************************************** TASK [rhel : Display Japanese Text] ********************************************************************************* changed: [172.16.1.201] => {"ansible_facts": {"discovered_interpreter_python": "/usr/libexec/platform-python"}, "changed": true, "cmd": "cat /tmp/nihongo.txt", "delta": "0:00:00.004166", "end": "2021-05-14 10:46:47.755621", "rc": 0, "start": "2021-05-14 10:46:47.751455", "stderr": "", "stderr_lines": [], "stdout": "これは\n日本語で\n書かれた\nファイルです。", "stdout_lines": ["これは", "日本語で", "書かれた", "ファイルです。"]} TASK [rhel : Debug] ************************************************************************************************* ok: [172.16.1.201] => { "result.stdout_lines": [ "これは", "日本語で", "書かれた", "ファイルです。" ] } PLAY RECAP ********************************************************************************************************** 172.16.1.201 : ok=2 changed=1 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0

 
・日本語が一行の場合も問題なく表示される

#nihongo.txt これは日本語で書かれたファイルです。
[root@AnsibleController work]# ansible-playbook -i rhel_inventory playbook.yml -v Using /work/ansible.cfg as config file PLAY [dev_rhel] ***************************************************************************************************** TASK [rhel : Display Japanese Text] ********************************************************************************* changed: [172.16.1.201] => changed=true ansible_facts: discovered_interpreter_python: /usr/libexec/platform-python cmd: cat /tmp/nihongo.txt delta: '0:00:00.003362' end: '2021-05-14 10:48:34.242203' rc: 0 start: '2021-05-14 10:48:34.238841' stderr: '' stderr_lines: <omitted> stdout: これは日本語で書かれたファイルです。 stdout_lines: <omitted> TASK [rhel : Debug] ************************************************************************************************* ok: [172.16.1.201] => result.stdout_lines: - これは日本語で書かれたファイルです。 PLAY RECAP ********************************************************************************************************** 172.16.1.201 : ok=2 changed=1 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0

補足情報

上記結果から改行文字「\n」が影響しているとあたりをつけていますが、
対処法について不明なためご教示頂けると幸いです。
情報不足しておりましたらご指摘ください。

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

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

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

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

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

guest

回答2

0

debug モジュールで目的の出力が得られるならそのようにお使いになるのがいいと思いました。

callback plugin を修正して使うこともできますが、そこまで手を掛けるようなことでもないように感じます。YAML で複数行のテキストを記述することはそもそもめんどくさいです。

投稿2021/06/23 23:04

SugiTK

総合スコア495

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

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

Hikky0001

2021/06/25 00:22

お忙しいところご回答頂きありがとうございます。 確かにdebugオプションを付けることにより、日本語出力自体は達成できているのですが、 やはりログへの出力量が多くなってしまうのが気になりまして。 デバッグオプション「-v」を付けなければshellモジュール自体の出力は簡素化できますが、 運用上プレイブック実行コマンドは固定化(毎回デバッグオプションを付ける)させておきたいというところがあります…。 callback pluginを修正することにより本問題の解決が可能になるということですね。 難易度の問題はありそうですが、少し調べてみようと思います。 ご回答ありがとうございました。
guest

0

ベストアンサー

若干フォーマットは変わりますが
stdout_callback = debug
とすれば表示されました。

# file /tmp/nihongo.txt /tmp/nihongo.txt: UTF-8 Unicode text # ansible-playbook -i localhost, -c local main.yml -v ... TASK [Display Japanese Text] ******************************************************************************************* changed: [localhost] => { "ansible_facts": { "discovered_interpreter_python": "/usr/bin/python" }, "changed": true, "cmd": "cat /tmp/nihongo.txt", "delta": "0:00:00.003229", "end": "2021-07-15 08:20:50.160097", "rc": 0, "start": "2021-07-15 08:20:50.156868" } STDOUT: これは 日本語で 書かれた ファイルです。 ...

環境
CentOS Linux 7 (Core)
ansible 2.9.10

投稿2021/07/14 23:40

hiroyuki_onoder

総合スコア9

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

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

Hikky0001

2021/07/15 00:47

ご回答ありがとうございます。 こちらの環境でも問題なく日本語が表示されることを確認しました! stdout_callback = yamlに出力が近く可読性も高いですね。 ひとまずこれで運用し、不都合が発生しないか今後確認していきたいと思います。 大変助かりました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問