如何使用 jinja2 在 Ansible 中加入引号?

问题描述 投票:0回答:4

我有一个 ansible 列表值:

hosts = ["site1", "site2", "site3"]

如果我尝试这个:

hosts | join(", ")

我得到:

site1, site2, site3

但我想得到:

"site1", "site2", "site3"
ansible
4个回答
11
投票

您只需将其加上引号即可。只需确保整个表达式用引号引起来即可获得左外引号和右外引号。根据您的情况:

"{{ hosts | join('", "') }}"

'"' + hosts | join('", "') + '"'

"'\"' + hosts | join('\", \"') + '\"'"

此解决方案的缺点是,如果列表为空,则外部引号将保留。


4
投票

如果列表为空,则先前的答案将留下

""
。还有另一种方法可能更稳健,例如用于将连接列表作为字符串分配给不同的变量(带单引号的示例):

{{ hosts | map("regex_replace","(.+)","\'\\1\'") | join(',')}}

4
投票

Ansible 的过滤器中有

to_json
to_nice_json
to_yaml

{{ some_variable | to_json }}
{{ some_variable | to_yaml }}

如果您输出 JSON/YAML 甚至(这有点厚颜无耻,但 JSON 大多数情况下都有效)Python 配置文件(即 Django 设置),这很有用。

供参考:https://docs.ansible.com/ansible/latest/user_guide/playbooks_filters.html#filters-for-formatting-data


0
投票

来自 json 文件 file_name.json 数组,如下所示

"hosts": [
    "site1",
    "site2",
    "site3"
]

从 json 文件设置_fact

- name: Set variables from parameters file
  set_fact:
    vars_from_json: "{{ lookup('file', 'file_name.json') | from_json }}"

使用带双引号和逗号的连接,并用双引号括起来

- name: Create host list
  set_fact:    
    host_list: "{{ '\"' + vars_from_json.hosts | join('\"'', ''\"') + '\"' }}"
© www.soinside.com 2019 - 2024. All rights reserved.