gpt4 book ai didi

Ansible:更改=0

转载 作者:行者123 更新时间:2023-12-04 01:15:59 28 4
gpt4 key购买 nike

我想知道在某些情况下,即使剧本任务已成功执行并且 ok=2,ansible 也会显示“changed=0”。使用 Rest API 和 uri 模块时会发生这种情况。我试图找到解释但没有成功。谁能告诉我是什么原因?如果我在许多服务器上一起进行更改,而我没有手动检查更改是否已完成,这将是一个大问题。谢谢!

最佳答案

Ansible 中 'changed' 和 'ok' 的主要区别在于所有模块之间关于什么是 'ok' 和什么是 'changed' 的内部协议(protocol)。

当一个模块认为它的 Action 改变了某些东西(例如,一个主题在模块执行之前的状态和之后的状态不同),它需要向 Ansible 报告“改变”。如果没有有意义的变化(“有意义”的定义留给模块),则报告“正常”。有时模块可以提前检测是否需要更改(例如:不需要创建目录,因为它已经存在),有时只能在执行操作后检测到(例如,某些应用程序向尝试重新配置)。

现在让我们看看 url 模块。 url 模块如何在请求后猜测远程 http/s 服务器上是否已更改某些内容?事实是,它有时可以。如果服务器回答“已更新”之类的内容,则模块可以报告“已更改”。但是如果服务器回答是“200 OK”怎么办?所以,这里没有“改变”。

怎么办?

Ansible 有一个特性:您可以通过为“已更改”声明条件来覆盖默认模块“已更改”状态。

示例

这是我对 API 服务器的真实配置中的一个示例:

  uri:
method: POST
url: http://{{ api_address }}:{{api_port }}/config
body_format: raw
headers:
Content-Type: text/plain
body: '{{ {"global_config": global_config} |to_yaml }}'
status_code:
- 200
- 304
- 201
register: config_post
changed_when: config_post.status == 200 or config_post.status == 201

如您所见,我们同意“200 或 201”已“更改”,而“304”未更改(但可以)。该协议(protocol)由服务器和 Ansible 角色支持。

对于不太精确的情况,您可以只说 changed_when: True 并且您的任务将始终“更改”(失败和跳过除外)。

关于Ansible:更改=0,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54123693/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com