如何在 Ansible 中将字符串转换为字典?
How to convert a string to dict in Ansible?
我想转换python的简单输出,我试着按照post .
但它在我的示例代码中似乎不起作用。 data
是来自 shell
任务输出的字符串。
如何使 minio_list1['test']
合法化?
---
- name: data test
hosts: localhost
vars:
data: "test: something"
tasks:
- name: get the list
set_fact:
minio_list1: "{{ minio_list1 | default({}) | combine ( { item.split(':')[0]: item.split(':')[1] } ) }}"
with_items:
- data
- name: print
debug:
msg: "{{ minio_list1 }}"
- name: print
debug:
msg: "{{ minio_list1['test'] }}"
既然 test: something
是一个有效的 YAML 片段,为什么不使用 Ansible 的 YAML 功能,所以过滤器 from_yaml
?
鉴于剧本:
- hosts: localhost
gather_facts: no
vars:
data: "test: something"
tasks:
- set_fact:
minio_list1: "{{ data | from_yaml }}"
- debug:
var: minio_list1['test'] # or minio_list1.test
这产生:
TASK [set_fact] *************************************************************
ok: [localhost]
TASK [debug] ****************************************************************
ok: [localhost] =>
minio_list1['test']: something
我想转换python的简单输出,我试着按照post
但它在我的示例代码中似乎不起作用。 data
是来自 shell
任务输出的字符串。
如何使 minio_list1['test']
合法化?
---
- name: data test
hosts: localhost
vars:
data: "test: something"
tasks:
- name: get the list
set_fact:
minio_list1: "{{ minio_list1 | default({}) | combine ( { item.split(':')[0]: item.split(':')[1] } ) }}"
with_items:
- data
- name: print
debug:
msg: "{{ minio_list1 }}"
- name: print
debug:
msg: "{{ minio_list1['test'] }}"
既然 test: something
是一个有效的 YAML 片段,为什么不使用 Ansible 的 YAML 功能,所以过滤器 from_yaml
?
鉴于剧本:
- hosts: localhost
gather_facts: no
vars:
data: "test: something"
tasks:
- set_fact:
minio_list1: "{{ data | from_yaml }}"
- debug:
var: minio_list1['test'] # or minio_list1.test
这产生:
TASK [set_fact] *************************************************************
ok: [localhost]
TASK [debug] ****************************************************************
ok: [localhost] =>
minio_list1['test']: something