在 Ansible 中的列表周围添加单引号
Add Single Quotes around a list in Ansible
我有一个项目服务列表,每个项目都需要用单引号括起来以配置一些参数。
我看到的最简单的解决方案是:
"{{services | match('quote') | join(' OR ')}}"
这仅将列表中的第一个元素用单引号引起来,而不会将其余元素引起来。
我还尝试了匹配正则表达式的一些变体。
最后我尝试在数据源中手动添加单引号,然后加入。第一个元素保留单引号但随后被剥离?这是怎么回事?
现在它们在库存中是静态的
即:
---
inventory:
hosts:
host1:
procs:
- splunkd.*
services:
- 'some service name'
- 'another service name'
- 'SplunkForwarder'
我需要最终结果是
"Name='some service name' OR Name='another service name'"
目前在变量中使用单引号的服务,引号被删除或忽略。
结果
Name=some service or Name=another service
您可以使用循环解决问题:
tasks:
- name: set var
set_fact:
result: "{{ result | d('') + _i + _o }}"
loop: "{{ services }}"
loop_control:
extended: yes
vars:
_i: "Name='{{ item }}'"
_o: "{{ '' if ansible_loop.last else ' OR ' }}"
- name: display result
debug:
var: result
结果:
ok: [localhost] => {
"result": "Name='some service name' OR Name='another service name' OR Name='SplunkForwarder'"
}
用你的变量:
- name: Join services
set_fact:
joined_services: "{{ joined_services | d('') + service + serviceAppend }}"
loop: "{{ services }}"
loop_control:
extended: yes
vars:
service: "'{{ item }}'"
serviceAppend: "{{ '' if ansible_loop.last else ' OR ' }}"
我有一个项目服务列表,每个项目都需要用单引号括起来以配置一些参数。
我看到的最简单的解决方案是:
"{{services | match('quote') | join(' OR ')}}"
这仅将列表中的第一个元素用单引号引起来,而不会将其余元素引起来。
我还尝试了匹配正则表达式的一些变体。
最后我尝试在数据源中手动添加单引号,然后加入。第一个元素保留单引号但随后被剥离?这是怎么回事?
现在它们在库存中是静态的 即:
---
inventory:
hosts:
host1:
procs:
- splunkd.*
services:
- 'some service name'
- 'another service name'
- 'SplunkForwarder'
我需要最终结果是
"Name='some service name' OR Name='another service name'"
目前在变量中使用单引号的服务,引号被删除或忽略。
结果
Name=some service or Name=another service
您可以使用循环解决问题:
tasks:
- name: set var
set_fact:
result: "{{ result | d('') + _i + _o }}"
loop: "{{ services }}"
loop_control:
extended: yes
vars:
_i: "Name='{{ item }}'"
_o: "{{ '' if ansible_loop.last else ' OR ' }}"
- name: display result
debug:
var: result
结果:
ok: [localhost] => {
"result": "Name='some service name' OR Name='another service name' OR Name='SplunkForwarder'"
}
用你的变量:
- name: Join services
set_fact:
joined_services: "{{ joined_services | d('') + service + serviceAppend }}"
loop: "{{ services }}"
loop_control:
extended: yes
vars:
service: "'{{ item }}'"
serviceAppend: "{{ '' if ansible_loop.last else ' OR ' }}"