I merged two lists from an Ansible inventory:
set_fact:
fact1: "{{ groups['group1'] + groups[group2']|list }}
The output is:
fact1:
- server01
- server02
- server03
With the above results, I need to append https://
to the front, and a port number to the back of each element.
Then I need to convert it to a comma delimited list for a server config.
In this example I want: https://server01:8000,https://server02:8000,https://server03:8000
.
I tried using a join:
set_fact:
fact2: "{{ fact1|join(':8000,') }}"
which partly worked but it left the last server without a port.
How can I achieve my goal?
Also you can use ternary filter:
Solution
Explanation
map
filter applies a filter (regex_replace
) to individual elements of the list;regex_replace
filter (with the following regular expression) adds aprefix
andsuffix
to a string;join
filter converts the list to comma-delimited string in the output.Alternative
Another possible solution (builds on what you already know) would be to use Jinja2 to directly for the target string: