![](/img/trans.png)
[英]Ansible: How to convert a dictionary (indeterminate number of key:value pairs) to a string?
[英]Ansible - Convert string to dictionary in Ansible
關於在 ansible 中創建動態字典,有一件事情困擾着我。 我嘗試了以下方法:
- name: Test
set_fact:
"available_boards":
- "{ '{{ 'X' if i % 2 == 0 else 'Y' }}' : {{ hostvars[item].ansible_host }}}"
loop: "{{groups['boards']}}"
loop_control:
index_var: i
假設{{groups['boards']
是 4 那么結果是:
ok: [localhost] => {
"available_boards": [
"{ 'X' : 10.10.112.90 }",
"{ 'Y' : 10.10.112.91 }",
"{ 'X' : 10.10.112.92 }",
"{ 'Y' : 10.10.112.93 }"
]
}
但是,正如您所看到的,這會產生一個字符串列表...事實是我希望字典更容易操作它們。
我用單引號/雙引號組合嘗試了一切,但沒有成功。 我不明白為什么這不會產生字典:
- name: Test
set_fact:
"available_boards":
- { "{{ 'X' if i % 2 == 0 else 'Y' }}" : "{{ hostvars[item].ansible_host }}" }
但這不會評估條件中的鍵並產生文字:
ok: [localhost] => {
"available_boards": [
{
"{{ 'X' if i % 2 == 0 else 'Y' }}": "00:15:e3:55:22:67",
},
代替
ok: [localhost] => {
"available_boards": [
{
'X': "00:15:e3:55:22:67",
},
是否有可能使神社中的這個變電站正常工作? 我整晚都在掙扎。
另一方面,我正在調查是否有一個過濾器可以將 sting 文字轉換為字典。 所以,如果你有清單:
ok: [localhost] => {
"available_boards": [
"{ 'X' : 10.10.112.90 }",
"{ 'Y' : 10.10.112.91 }",
"{ 'X' : 10.10.112.92 }",
"{ 'Y' : 10.10.112.93 }"
]
}
將其轉換為:
ok: [localhost] => {
"available_boards": [
{ 'X' : 10.10.112.90 },
{ 'Y' : 10.10.112.91 },
{ 'X' : 10.10.112.92 },
{ 'Y' : 10.10.112.93 }
]
}
所以列表的所有字符串元素都將轉換為字典。這個任務應該很容易嗎? 再次,jinja 中所有可用的過濾器都不起作用......
感謝您的先驗答案:)
嘗試使用字符串模板組合結構化數據類型,例如 JSON 或 YAML 是通往毀滅之路
- set_fact:
available_boards: >-
{%- set results = [] -%}
{%- for h in groups['boards'] -%}
{%- set _ = results.append({
'X' if loop.index % 2 == 0 else 'Y': hostvars[h].ansible_host
}) -%}
{%- endfor -%}
{{ results }}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.