【发布时间】:2022-10-24 06:50:28
【问题描述】:
我正在解析 zabix 配置文件以获取变量,这可以在单独的任务中完成,但我想在一个任务中完成。我需要将命令的输出放入字典中。如何从文件中注册这个变量?
角色
# tasks file for roles/test
- name: Read vars
shell: egrep -v -e "^#|^$" /etc/zabbix/zabbix_agentd.conf
register: zbaconfig
- name: Debug 1
debug:
msg:
- "{{ zbaconfig.stdout_lines }}"
- name: Register vars
set_fact:
zba: "{{ dict(zbaconfig.stdout | split('\\n') | select() | map('split','=') | list) }}"
- name: Debug 2
debug:
msg:
- "{{ zba.Hostname }}"
- "{{ zba.ServerActive }}"
- "{{ zba.Server }}"
标准输出
TASK [test : Debug 1]
ok: [10.100.0.52] => {
"msg": [
[
"PidFile=/run/zabbix/zabbix_agentd.pid",
"LogFile=/var/log/zabbix/zabbix_agentd.log",
"LogFileSize=0",
"Server=zabbix.domain.com.ua",
"ServerActive=zabbix.domain.com.ua",
"Hostname=vs-net-dk01",
"Include=/etc/zabbix/zabbix_agentd.d/*.conf"
],
TASK [test : Register vars]
fatal: [10.100.0.52]: FAILED! => {"msg": "template error while templating string: no filter named 'split'. String: {{ dict(zbaconfig.stdout | split('\n') | select() | map('split','=') | list) }}"}
【问题讨论】:
-
具有讽刺意味的是,您在调试下方询问
| split,您知道.stdout_lines是一些 :chefs_kiss: 但无论如何,请注意map("split",因为正如所写的那样,它会对"Alpha=Beta=Charlie"做坏事,你可能想要的是map("split", "=", 1)告诉它你只希望它在第一个=上拆分而不是全部其中
标签: ansible