てくなべ (tekunabe)

ansible / network automation / 学習メモ

[Ansible] 指定した文字数以内に文字を切り詰める truncate フィルター

はじめに

Ansible が内部で利用しているテンプレートエンジンの Jinja2 には、指定した文字数以内に切り詰める truncate フィルターがあります。

Ansible の filter のドキュメントページ には載っていないので知らなかったのですが、Jinja2 のリファレンスを眺めていたらたまたま見つけたので試してみます。

ほぼ、リファレンスの例をなぞるかたちです。


基本的な切り詰め

最初のオプションに、省略記号(デフォルト ...)を含めて何文字にするかを指定します。 ただし、デフォルトでは単語の途中では切り詰めずに、切のいいところで短めに切り詰めます。

    - name: truncate
      debug:
        msg: "{{ 'This is kingyo.' | truncate(9) }}"

結果

ok: [localhost] => {
    "msg": "This..."  
}

結果としては、This... という7文字になりました。


単語の途中でも切り詰める

2番目のオプションで、単語の途中でも切り詰めるかどうかを指定します。デフォルトは False です。

    - name: truncate
      debug:
        msg: "{{ 'This is kingyo.' | truncate(9, True) }}"

結果

ok: [localhost] => {
    "msg": "This i..."
}

結果としては、This i... という9文字になりました。isi で切れています。


省略記号を変更する

    - name: truncate
      debug:
        msg: "{{ 'This is kingyo.' | truncate(9, False, '..(略)..') }}"

結果

ok: [localhost] => {
    "msg": "Th..(略).."
}

結果としては、Th..(略).. という9文字になりました。指定した省略記号の文字数もちゃんと考慮されるようです。


番外編: スライスする

省略記号なし、単語判断なしの切り詰めで良ければ、Python のスライスでよさそうです。

    - name: truncate
      debug:
        msg: "{{ 'This is kingyo.'[:9] }}"

結果

***
ok: [localhost] => {
    "msg": "This is k"
}