如果这个问题之前已经有人问过,我很抱歉,但我在搜索中可能没有使用正确的术语......
在业余时间,我会使用 Ansible 管理有限数量的主机(运行 Debian Stretch 的台式机和笔记本电脑)。我的“安装程序剧本”在所有具有不同硬件的主机上创建单一配置,使管理变得更加容易。我现在不时手动运行更新程序角色,偶尔我会发现一个有用的调整,然后将其部署到在线的主机上。但是:其中一些很少来办公室,如果他们可以更新,确定我还需要在那台机器上部署哪些调整总是很麻烦……
我当然可以:
- 将纪元时间戳 (
{{ ansible_date_time.epoch }}
) 写入每个主机上的文件,该文件可以检索并设置为事实 - 为每个新调整创建一个新任务,添加带有纪元时间戳的标签以及一个条件来检查纪元事实 > 纪元标签
- 成功运行 playbook 后,更新主机上的纪元时间戳
应该这么做吗?
答案1
如果它们可以更新,那么确定我仍然需要在该机器上部署哪些调整总是很麻烦......
这不是使用 Ansible 的方式。你的剧本应该以一种方式编写,即如果你之前已经应用过配置集,它就不会受到影响(“幂等性”)。如果是,您只需应用最新版本的剧本,您的系统就会处于正确的状态。
答案2
这可能是一个很好的用例ansible-pull. 可以配置非永久在线的主机在连接到办公网络时运行 ansible-pull。
但是这不会改变创建幂等剧本和角色的需要。如果剧本的运行时间是一个问题,可以选择使用stat
模块设置条件以跳过运行时间较长的任务。
选择器在这里是一个选项,但需要手动管理。因此,加快剧本本身的执行时间可能会更好。