gpt4 book ai didi

ansible - 为什么通知任务无法在ansible中执行?

转载 作者:行者123 更新时间:2023-12-03 23:27:44 25 4
gpt4 key购买 nike

我面临的问题很普遍,但是其他解决方案对我却不起作用。正如问题所暗示的,当我运行剧本时,只有第一个通知处理程序被执行。即仅重新启动firewalld,但未获取更新的bash配置文件。

有人建议使用通知链,但我不想合并两个目标完全不同的任务。例如,一项任务可能是将端口添加到firewalld,然后重新启动它。另一个可能是更新我的bash配置文件以使用history命令输出显示日期。

N.B.上面的代码片段不是我的完整.yml,只是其中的一部分,因此这可能有效,也可能无效。但是,原始文件确实可以工作。

---
tasks
- name: add port-80 to firewalld
firewalld: zone=drop port=80/tcp permanent=true state=enabled

- name: add port-443 to firewalld
firewalld: zone=drop port=443/tcp permanent=true state=enabled

- shell: firewall-cmd --reload
notify:
- Restart firewalld

- name: Enabling time display in history
blockinfile:
dest: ~/.bash_profile
block: |
export HISTTIMEFORMAT="%d/%m/%y %T "
notify:
- Source the updated Bash profile


handlers:
- name: Restart firewalld
service: name=firewalld state=restarted

- name: Source the updated Bash profile
shell: source ~/.bash_profile

...

最佳答案

最后,我借助评论找出了问题所在。

The notify handler will be executed if and only if state is changed as a result of the task.



我正在做的错误是尝试安装已安装的软件包。因此,状态并没有改变。

让我们看一个例子,
---
- hosts: varnish
remote_user: root

tasks:
- name: Install tree
yum: name=tree state=absent
notify:
- Do an echo

handlers:
- name: Do an echo
debug: msg="This will be printed"
...

我们将运行这本剧本两次。

第一次运行后,我们将获得:
TASK [Install tree] ************************************************************
changed: [192.***.***.**]

RUNNING HANDLER [Do an echo] ***************************************************
ok: [192.***.***.**] => {
"msg": "This will be printed"
}

PLAY RECAP *********************************************************************
192.***.***.** : ok=1 changed=1 unreachable=0 failed=0

当状态改变时(请查看 changed=1部分),将打印调试消息。

第二次运行后,我们将获得:
TASK [Install tree] ************************************************************
ok: [192.***.***.**]

PLAY RECAP *********************************************************************
192.***.***.** : ok=0 changed=0 unreachable=0 failed=0

要看的是处理程序没有像第一次运行那样被调用,因为在第二次运行中状态没有改变(树已经安装)。

我已将其发布为答案,它可能会对其他用户有所帮助。

关于ansible - 为什么通知任务无法在ansible中执行?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37292744/

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