当未指定任何选项时,Ansible ini_file 模块不会创建部分

当未指定任何选项时,Ansible ini_file 模块不会创建部分

我使用 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如果您想要没有选项和值的部分)。然后添加。抱歉,但我也没有找到真正的答案。

相关内容