Python 如何转换字符串“0”;键=值&引用;用ansible和字典配对?
本质上,我就是在寻找这个,但对于ansible/jinja2: 我从mariadb galera服务器wsrep_provider_选项中获得一个以分号分隔的键=值对列表:Python 如何转换字符串“0”;键=值&引用;用ansible和字典配对?,python,ansible,mariadb,jinja2,galera,Python,Ansible,Mariadb,Jinja2,Galera,本质上,我就是在寻找这个,但对于ansible/jinja2: 我从mariadb galera服务器wsrep_provider_选项中获得一个以分号分隔的键=值对列表: mariadb_wsrep_provider_options_output = 'base_dir = /var/lib/mysql/; base_host = 192.168.1.101; base_port = 4567;' 在使用ansibleregister存储该输出后,我尝试将其解析到字典中,如下所示: mari
mariadb_wsrep_provider_options_output = 'base_dir = /var/lib/mysql/; base_host = 192.168.1.101; base_port = 4567;'
在使用ansibleregister
存储该输出后,我尝试将其解析到字典中,如下所示:
mariadb\u wsrep\u提供程序\u选项\u输出:
基本目录:/var/lib/mysql/
基本主机:192.168.1.101
基本端口:4567
...
我尝试过类似的方法,但我不确定如何将其转换回dict
:
-调试:
msg:“{mariadb_wsrep_provider_options_output.split(“;”)%}{{item.split(“=”)}}{%endfor%}”
编辑:我让它处理以下任务,但它似乎很笨重:
-设置事实:
new|var:“{{new|var|d([])+[{'key':item.split('=')[0]| trim,'value':item.split('=')[1]| trim}}”
循环:“{mariadb_wsrep_provider_options_output.split(“;”)}”
-调试:
变量:新的变量项2
输出:
"new_var|items2dict": {
"base_dir": "/var/lib/mysql/",
"base_host": "192.168.100.153",
"base_port": "4567"
}
试试这个
-设置事实:
新的变量:{{dict({keys}zip({u vals))}
变量:
_arr:{mdb_out.split(';')| map('trim')| select()| list}
_键:“{{u arr | map('regex_replace','^(.*?=(.*)$,'\\1')| map('trim')| list}”
_VAL:“{{u arr | map('regex_replace','^(.*)=(.*)$,'\\2')| map('trim')| list}”
给予
new\u变量:
基本目录:/var/lib/mysql/
基本主机:192.168.1.101
基本端口:“4567”
您的代码只做了少量更改,也可以正常工作
-设置事实:
new_var:“{{new_var}d({}){combine({{u key:{u val})}”
循环:“{mdb_out.split(“;”)}”
时间:项目|长度>0
变量:
_键:“{item.split('=')[0]| trim}”
_val:{{item.split('=')[1]| trim}
谢谢!使用zip()和dict()比循环使用每个选项更容易输出