known_hosts 模块报告更改,实际上没有更改

83次阅读
没有评论

问题描述

在使用Ansible的known_hosts模块时,遇到一个奇怪的问题。任务报告说已经发生了更改,但实际上没有进行任何更改。用户尝试了一些操作,但问题仍然存在,因此希望能够理解为什么Ansible会在没有实际更改的情况下报告任务已更改。

解决方案

根据用户的问题描述和已经提出的一些解决方案,我们可以尝试以下两种方法来解决这个问题。

方案1:使用 changed_when 属性

可以在任务中使用 changed_when 属性来手动控制何时将任务标记为已更改。这样,当 known_hosts 模块检测到没有实际更改时,你可以将 changed_when 设置为 False,这样 Ansible 就不会错误地报告任务已更改。

- name: Remove non existing host key from known_hosts file
  known_hosts:
    name: 192.168.122.230
    key: 192.168.122.230 ssh-rsa ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAACAQCbi2hyrvpTRKC37NOm46n4zCPBb9r6cKk8BPrN2eppFu/0PJlB4D+nRI5epHzs5+1LhPkppbOGLC2VIRl3phMDQci3RIszhEZx4lAyX/HAkM+2zdNJlH2WWs3cbw804B4iqfCvy/Gch5ZXl4qEfpVqMURCr/XjaMQETzbjbfgOoyYxw8M/5Kq8VQy+DzqxNNzPi4ElcFQztxxrKDFPwuDplFdxw3YK+iQ4JHxlLWSfgtwsFhg7Z7uM8/efP7ocB23i2GmmG67yM/T/8uAld9t73V8icfe9WnRk2WVY69p4TzC3tMl2KmUDVm5AwvH+FNm/67E9t2inWHgKZacdOaOrgJ7SimPz0ILYDKd4hXg4whz3vdp21M/acjX3jA+fiwx6/GDIofKhyWOP3SwaiprqHZb+rWxerIOZx1IeuIRDZBH5Hjz7UlE5yg1xnqPXXzrFMj9rsKp9S5VB3HGGDfuOU7VymhZiTHIAuGM+weV6r2cOjn5HgdqkU6ABuchMAJvzaj9a3E07Rzk6h/lgWfy5VT/yl7DA7sM0/YSqKPJKgxbstoaOAZl35SDxAx978T0xlomIxaJUehRefK+G1GgPeLMmk0QtpX1dMH8bD4qvKGoLQG1qeJ4W4HrnoTsGLCxsN5/ek3rnqCekYOSiJ/q9+sZyhcLN1hwrDrrFK5fRUw==
    state: absent
  register: reg_known_hosts
  changed_when: reg_known_hosts.diff.before != reg_known_hosts.diff.after

方案2:手动修改 known_hosts 文件

如果你已经确认 known_hosts 文件没有实际更改,你可以通过手动编辑该文件来解决问题。注意,这需要在实际操作之前备份该文件以防万一。

  1. 打开 .ssh/known_hosts 文件。
  2. 查找并删除与要删除的主机相关的条目。
  3. 保存文件。

请记住,这个方法不适用于自动化部署,而只适用于暂时解决问题。

以上是针对该问题的两种解决方案。你可以根据你的实际需求选择其中一种方法来解决 known_hosts 模块报告更改但未实际更改的问题。希望这能帮助你理解问题的原因并找到合适的解决方案。


注:
如果你对 Ansible 的内部工作机制感兴趣,你可以在 Ansible GitHub Issue #78598 中跟踪该问题的解决进展以及相关的讨论。

正文完