【发布时间】:2017-07-13 17:24:55
【问题描述】:
我定义了很多子元素的字典:
kernel:
vm:
swappiness: 0
dirty_background_ratio: 123
dirty_ratio: 123
dirty_expire_centisecs: 123
sys:
fs:
file_max: 123456
net:
ipv4:
tcp_max_syn_backlog: 123456
tcp_slow_start_after_idle: 0
tcp_abort_on_overflow: 1
core:
somaxconn: 123456
netdev_max_backlog: 123456
rmem_max: 123456
wmem_max: 123456
rmem_default: 123456
rmem_max: 123456
我在下面有一个任务(不工作)作为我尝试设置内核参数的示例。
- name: "Tune kernel parameters"
sysctl:
name: "{{ item.key }}"
value: "{{ item.value[item.key] }}"
state: present
sysctl_set: yes
with_subelements:
- kernel
如何在不命名每个键名的情况下设置dict的每个项目?
【问题讨论】:
-
你所说的“无需命名每个键名”究竟是什么意思?
-
@NPE 感谢您的快速回复。文档(docs.ansible.com/ansible/…)显示需要命名密钥的名称。例如:
{{ item.0.name }}中的“name”,即“alice”。我将不得不命名每个键。例如,我认为我必须做{{ item.0.net.core.somaxconn }}。由于可能会添加/删除更多子字典,我宁愿得到密钥,比如{{ item.key }},以及密钥的值,比如{{ item.value[item.key} }}。我不知道正确的语法是什么,或者它是否可能。我只需要键的名称及其值 -
这是另一个示例stackoverflow.com/questions/41908715/ansible-with-subelements,其中必须列出键的名称(姓氏、姓名和年龄)。我不想每次添加新的 dict+value 时都必须使用新的子元素的键名来更新任务。
-
我敢打赌,这只能通过 Ansible 的自定义过滤器插件实现,因为我认为没有其他方法可以将嵌套字典扁平化为点分隔字符串列表。
标签: ansible ansible-2.x