如何在Ansible中创建默认的空dict来组合过滤器


我写了一个角色。在默认/main.yml中,我有:
sysctl:
net.inet.ip.forwarding: 1
vm.swappiness: 10

tasks/main.yml:

- name: Setup sysctl.conf
sysctl: name="{{ item.0 }}" value="{{ item.1 }}" state=present
become: yes
loop: "{{ sysctl_default | combine(sysctl) | dictsort }} "

如果用户未在变量中定义sysctl,则ansible将引发错误。如果用户跳过此设置,则必须设置默认参数。如果用户在他的剧本中提交了sysctl设置,如何创建空字典?这样的表达式{{ sysctl_default | combine(sysctl | default({})) | dictsort }}不起作用:

fatal: [192.168.140.96]: FAILED! => {"msg": "|combine expects dictionaries, got AnsibleUndefined"}

Q:"{{sysctl_default|combine(sysctl|default({}(|dictsort}}不工作">

A:。。。因为缺少右括号"("。正确的语法是

{{ sysctl_default | combine(sysctl|default({})) | dictsort }}

Q:"再次此操作不起作用:致命:192.168.140.96]:失败!=>{"msg":"|组合需要字典,得到AnsibleUndefined"}">

A:下一个问题是未定义的变量sysctl_default。例如播放

vars:
sysctl_default:
net.inet.ip.forwarding: 1
vm.swappiness: 10
tasks:
- debug:
msg: "name={{ item.0 }} value={{ item.1 }} state=present"
loop: "{{ sysctl_default | combine(sysctl|default({})) | dictsort }}"

给出

"msg": "name=net.inet.ip.forwarding value=1 state=present"
"msg": "name=vm.swappiness value=10 state=present"

最新更新