在 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 ' }}"