我有一個專案服務串列,每個專案都需要用單引號括起來以配置一些引數。
我看到的最簡單的解決方案是:
"{{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
uj5u.com熱心網友回復:
你可以通過使用回圈來解決你的問題:
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 ' }}"
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/460372.html
