如何获取服务器名称列表并为每个名称附加资源 URI 和端口



>我合并了 Ansible 库存中的两个列表:

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(',') }}"

解释

  1. map过滤器将过滤器(regex_replace)应用于列表的各个元素;

  2. regex_replace筛选器(使用以下正则表达式)向字符串添加prefixsuffix;

    current_list | map('regex_replace', '(.*)', 'prefix\1suffix')
    
  3. 筛选器join将列表转换为输出中的逗号分隔字符串。


另类

另一种可能的解决方案(建立在您已经知道的基础上)是使用 Jinja2 直接用于目标字符串:

set_fact:
  fact2: "{{ 'https://' + fact1|join(':8000,https://') + ':8000' }}"

您也可以使用三元过滤器:

set_fact:
  fact2: "{% for it in fact1 %}https://{{ it }}:8000{{ loop.last | ternary('', ',') }}{% endfor %}"

我有这个库存列表,我想这样做["服务器"]服务器01服务器02服务器03服务器04在这个例子中,我想要:

https://server01:8000;https://server02:8000],https://server03:8000;https://server04:8000]

相关内容

  • 没有找到相关文章

最新更新