我正嘗試使用基於{{ ansible_hostname }}
的第四個字符的包含變量的模板創建配置文件。Ansible條件模板變量替換
什麼工作:
劇本:
---
- hosts: spock
roles:
- templaterole
作用:
---
- name: testing autofs template on spock
template:
src=autofs
dest=/tmp/autofs
with_items:
- "{{ var_a }}"
when: ('{{ ansible_hostname }}' == "spock")
瓦爾/ main.yml:
var_a:
-
var_1: 'this is var_a1'
var_2: 'this is var_a2'
var_b:
-
var_1: 'this is var_b1'
var_2: 'this is var_b2'
模板:
{{ item.var_1 }}
#
{{ item.var_2 }}
#
可正常工作和輸出產生的/ tmp/autofs文件的斯波克主機看起來像:
this is var_a1
#
this is var_a2
#
現在,如果我嘗試根據嘗試拉出{{ ansible_hostname }}
的第4個字符來寫入該文件,該播放不會在條件上獲得匹配,也不會寫入該文件。我想這個條件在我的角色:
---
- name: testing autofs template on spock
template:
src=autofs
dest=/tmp/autofs
with_items:
- "{{ var_a }}"
when: ('{{ ansible_hostname }} | cut -c4' == "c") or
('{{ ansible_hostname }} | cut -c4' == "k")
播放跳過由於對條件不匹配這個任務。最終,我希望能夠拉我們主機名的任何第四個字符,因爲這將始終是可預測的(只能是4個已知字符中的一個,它定義了我的環境並允許我根據這些差異生產環境定義正確的模板變量。)
任何人都可以幫助我重新定義我的when語句,這樣我可以做或條件和拉出字符的定義ansible_hostname變量?
當您使用管道將其發送的第一個命令的結果....但這是一個變量而不是命令的名稱。所以最有可能的是使用未找到的命令。也許如果你剛剛在第四個位置得到了char {[ansible_hostname [3]}} ==「c」的字符,它將起作用 – surfer190
我不相信你第一個條件工作正常。它總會被評估爲假。請閱讀'when'指令的文檔。 – techraf