Ansible:プレイブック中の長い1行を複数行に分割する
*ansible 2.10.4で動作を確認しています
Ansibleのdebugやshellモジュールを使う際に1行が長くなりすぎたため改行したい、という場合があります。
ブロックスタイルを使えば、yamlの中で文字列を複数行にわたり記載できます。
yamlの記法では「フロースタイル」と「ブロックスタイル」が存在するそうです。(以下のサイトを参考させていただきました)
フロースタイルの文字列はクォーテーションで囲まれた文字列です。ブロックスタイルは文字列を改行して記載します。以下のymlのdebugメッセージをブロックスタイルで記載しました。
--- - hosts: all tasks: - name: Pattern 1 [ | ] debug: # ブロックスタイル1 # 各行の改行を保存 msg: | aaaaa bbbbb ccccc - name: Pattern 2 [ |+ ] debug: # ブロックスタイル2 # 各行の改行を保存、最終行の次の行の改行も保存 msg: |+ aaaaa bbbbb ccccc - name: Pattern 3 [ |- ] debug: # ブロックスタイル3 # 各行の改行を保存、最終行の改行は取り除く msg: |- aaaaa bbbbb ccccc - name: Pattern 4 [ > ] debug: # ブロックスタイル4 # 最終行以外の改行を半角スペースに置換 msg: > aaaaa bbbbb ccccc - name: Pattern 5 [ >+ ] debug: # ブロックスタイル5 # 最終行以外の改行を半角スペースに置換、最終行の次の行の改行も保存 msg: >+ aaaaa bbbbb ccccc - name: Pattern 6 [ >- ] debug: # ブロックスタイル6 # 各行の改行を半角スペースに置換、最終行の改行は取り除く msg: >- aaaaa bbbbb ccccc
実行結果は以下になります。
# ansible-playbook -i hosts block_literal.yml PLAY [all] ************************************************************************************************************************************************** TASK [Gathering Facts] ************************************************************************************************************************************** ok: [CentOS7.6] TASK [Pattern 1 [ | ]] ************************************************************************************************************************************** ok: [CentOS7.6] => { "msg": "aaaaa\nbbbbb\nccccc\n" } TASK [Pattern 2 [ |+ ]] ************************************************************************************************************************************* ok: [CentOS7.6] => { "msg": "aaaaa\nbbbbb\nccccc\n\n" } TASK [Pattern 3 [ |- ]] ************************************************************************************************************************************* ok: [CentOS7.6] => { "msg": "aaaaa\nbbbbb\nccccc" } TASK [Pattern 4 [ > ]] ************************************************************************************************************************************** ok: [CentOS7.6] => { "msg": "aaaaa bbbbb ccccc\n" } TASK [Pattern 5 [ >+ ]] ************************************************************************************************************************************* ok: [CentOS7.6] => { "msg": "aaaaa bbbbb ccccc\n\n" } TASK [Pattern 6 [ >- ]] ************************************************************************************************************************************* ok: [CentOS7.6] => { "msg": "aaaaa bbbbb ccccc" } PLAY RECAP ************************************************************************************************************************************************** CentOS7.6 : ok=7 changed=0 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0
shellモジュールに渡すコマンドもブロックスタイルを使えば改行できます。他にも、jinja2の構文を使う際などに利用するとよさそうです。
--- - hosts: all tasks: - name: check root user shell: >- cat /etc/passwd | grep ^root | wc -l register: response - debug: msg: >- {% if response.stdout != "0" %} exist {% else %} not exist {% endif %}
# ansible-playbook -i hosts check_root_user.yml PLAY [all] ************************************************************************************************************************************************** TASK [Gathering Facts] ************************************************************************************************************************************** ok: [CentOS7.6] TASK [check root user] ******************************************************************************************************************************************* changed: [CentOS7.6] TASK [debug] ************************************************************************************************************************************************ ok: [CentOS7.6] => { "msg": "exist " } PLAY RECAP ************************************************************************************************************************************************** CentOS7.6 : ok=3 changed=1 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0