Ansibleインベントリから2つのリストをマージしました:
set_fact:
fact1: "{{ groups['group1'] + groups[group2']|list }}
出力は次のとおりです。
fact1:
- server01
- server02
- server03
上記の結果では、各要素の前にhttps://
を、後ろにポート番号を追加する必要があります。次に、サーバー構成のコンマ区切りリストに変換する必要があります。
この例では、https://server01:8000,https://server02:8000,https://server03:8000
が必要です。
結合を使用してみました:
set_fact:
fact2: "{{ fact1|join(':8000,') }}"
一部は機能しましたが、最後のサーバーにポートがありませんでした。
どうすれば目標を達成できますか?
ソリューション
set_fact:
fact2: "{{ fact1 | map('regex_replace', '(.*)', 'https://\\1:8000') | join(',') }}"
説明
map
filter フィルターを適用します(regex_replace
)リストの個々の要素に。
regex_replace
filter (次の正規表現を使用)は、prefix
およびsuffix
を文字列に追加します。
current_list | map('regex_replace', '(.*)', 'prefix\\1suffix')
join
filter 出力のリストをカンマ区切りの文字列に変換します。
代替
別の可能な解決策(すでに知っていることを基にして構築)は、ターゲット文字列に直接Jinja2を使用することです。
set_fact:
fact2: "{{ 'https://' + fact1|join(':8000,https://') + ':8000' }}"
また、3値フィルターを使用できます。
set_fact:
fact2: "{% for it in fact1 %}https://{{ it }}:8000{{ loop.last | ternary('', ',') }}{% endfor %}"