我使用 Ansible 构建 ini 格式的配置文件。当我使用ini_file
带有选项和值对的模块时,它可以按预期工作,例如:
- name: Create configuration file
ini_file:
path: /tmp/test.conf
state: present
section: lol
option: foo
value: bar
结果是:
[lol]
foo = bar
但是我希望存在一个没有选项的特定部分,如下所示:
- name: Create configuration file
ini_file:
path: /tmp/test.conf
state: present
section: lol
但它所做的只是报告ok
任务并继续下一个任务。
当我使用详细模式时,我可以看到:ok: [localhost] => {"changed": false, "msg": "OK", "path": "/tmp/test.conf", "state": "absent"}
如何使用模块创建无选项的部分?
答案1
ini 是一个非正式标准,但据我所知,没有选项的部分没有多大意义。这是我的第一个猜测,为什么它在 Ansible 中没有实现。
ini
我建议不要使用 -Module,而是使用lineinfile 模块确保 ini 文件中存在某个部分。
答案2
对于构建配置文件,使用模板是一种正确的方法。ini_file
仅在编辑文件时使用模块。尽量避免使用 lineinfile 模块,将其作为最后的手段。
规则 0)如果可能的话,请使用模板模块,它可以为您提供完全的控制和验证。Brian Coca(Red Hat Ansible 高级软件工程师)
答案3
解决方法是使用不允许值,并在选项中使用空白/注释代码。
- ini_file:
dest: '/tmp/telegraf.conf'
section: '[inputs.interrupts]'
option: ' ## no configuration'
allow_no_value: yes
但是如果您的部分中已经有值,那么您必须将其删除(state: absent
如果您想要没有选项和值的部分)。然后添加。抱歉,但我也没有找到真正的答案。