【问题标题】:Updating /etc/ansible/hosts with ansible使用 ansible 更新 /etc/ansible/hosts
【发布时间】:2019-04-29 17:27:24
【问题描述】:

我想根据某些条件(例如网络属性的更改)仅更新库存文件 /etc/ansible/hosts 中的一个条目。从我的库存文件的这个 sn-p 中,我想更新 [south_side_hosts] 下的条目。有没有办法用ansible更新这个文件?我可以编写一个 python 脚本来解析和更新文件,但希望能找到 ansible 的解决方案。

[south_side_hosts]
sshost.eng.corp.com

[south_side_ips]
192.168.100.2

[num_hosts]
83

【问题讨论】:

  • 可能您可以为此使用replace 模块,但老实说,无论您的最终目标是什么,您的最终目标都是错误的。
  • 这可能有点矫枉过正,因为您只需要更新一个条目,但是您是否摒弃了 working with dynamic inventory 的标准 Ansible 方式?
  • @larsks 感谢您的提示。我将使用替换模块。 Michal - 我简要地查看了动态库存,但仅更新文件中的一个条目似乎工作量太大。
  • @larsks 在不了解用例的情况下,我会保留这个判断,也是因为解决方案非常简单,并且 Ansible 提供了在播放期间刷新库存的机制。直接进入动态库存是相当大的变化。
  • 欢迎大家发表自己的意见。我支持我,但我很高兴@linuxfan 找到了适合他们的解决方案。

标签: ansible ansible-inventory


【解决方案1】:

库存文件的格式为 INI,如 in the documentation 所述。

所以ini_file module 可以工作。使用allow_no_value: true,以及两个任务来删除旧的“选项”并添加新的:

- name: Remove host from 'south_side_hosts' group
  ini_file:
    path: /etc/ansible/hosts
    section: south_side_hosts
    option: sshost.eng.corp.com
    state: absent

- name: Add host to 'south_side_hosts' group
  ini_file:
    path: /etc/ansible/hosts
    section: south_side_hosts
    option: sshost2.eng.corp.com
    allow_no_value: true

如果您想从同一个 playbook 配置新主机,则需要在此之后刷新清单:

- name: Refresh the inventory
  meta: refresh_inventory

请注意,如果您打算使用在命令行上传递的随机主机名来执行此操作,那么从长远来看,动态清单可能确实是您正在寻找的。​​p>

【讨论】:

  • 此解决方案不会替换[south_side_hosts] 下的文本,而是在下一行添加一个新值newhostname 我错过了什么吗?从文档看来,我必须删除该部分并使用所需的值再次添加它。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-09-24
  • 2018-08-31
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多