gpt4 book ai didi

windows - Ansible 处理程序在播放结束时运行两次

转载 作者:行者123 更新时间:2023-12-02 16:48:16 26 4
gpt4 key购买 nike

我遇到了一个以前从未见过的问题。我在 CI 环境中运行 Ansible 2.7.6。我的主机是 OpenStack 上的 Windows 10,来 self 使用 Packer 和 VirtualBox 创建的云镜像。到目前为止一直工作正常。我在许多任务中引入了第二个任务,我想通知我的重新启动处理程序,现在我得到了多次重新启动。

这是我的游戏和任务,为便于阅读而进行了一些清理。使用 win_shell 实现幂等性所需的错误处理并不漂亮:

- hosts: workstations
tasks:

...

- name: Enable Windows feature
include_role: name=win-config tasks_from=feature

- name: Install language pack
include_role: name=win-config tasks_from=language-pack

...

tasks/feature.yml:

- name: Inspect feature
win_shell: DISM /Online /Get-FeatureInfo /FeatureName:Microsoft-Hyper-V
register: check

- name: Enable Windows feature
win_shell: DISM /Online /Enable-Feature /All /FeatureName:Microsft-Hyper-V /NoRestart
notify: Reboot
when: '"Disabled" in check.stdout_lines[12]'

tasks/language-pack.yml:

- name: Check language pack
win_shell: |
Get-WindowsPackage -Online `
-PackagePath 'C:\Programdata\cab\Microsoft-Windows-Client-Language-Pack_x64_sv-se.cab' `
| Select-Object `
-ExpandProperty PackageState
register: check

- name: Install language pack
win_shell: |
Add-WindowsPackage -Online `
-PackagePath 'C:\Programdata\cab\Microsoft-Windows-Client-Language-Pack_x64_sv-se.cab' `
-NoRestart
when: '"Installed" not in check.stdout'
notify: Reboot

handlers/main.yml:

- name: Reboot
win_reboot:
post_reboot_delay: 60

结果:

tasks run with status `changed` and the end of play unfolds...
...
RUNNING HANDLER [win-config : Reboot] ******************************************
Sunday 20 October 2019 18:48:55 +0200 (0:00:00.057) 0:46:55.167 ********
changed: [node1.example.com]

RUNNING HANDLER [win-config : Reboot] ******************************************
Sunday 20 October 2019 18:51:11 +0200 (0:02:16.527) 0:49:11.695 ********
fatal: [node1.example.com]: FAILED! => {
"changed": false,
"reboot": false
}

MSG:

The WS-Management service cannot process the request because the request contained invalid selectors for the resource. (extended fault data: {'transport_message': 'Bad HTTP response returned from server. Code 500', 'http_status_code': 500, 'wsmanfault_code': '2150858843', 'fault_code': 's:Sender', 'fault_subcode': 'w:InvalidSelectors'})


NO MORE HOSTS LEFT *************************************************************

PLAY RECAP *********************************************************************
...

我被引导相信,除非有要求,否则处理程序的自动刷新应该只触发每个处理程序一次,即使在播放过程中被通知多次。

有人见过这种行为吗?我还有第二个角色,与处理程序一起,名字完全相同。我的第一个想法是 Ansible 也以某种方式调用了该处理程序,但排除其他角色或重命名处理程序并没有为我解决这个问题。

处理程序可以对有关“什么叫他们”的任何事情挑剔吗?来自特定文件的任务,例如 task/main.yml?或者 ONE play 中的所有通知都应该只触发处理程序一次吗?

最佳答案

您似乎遇到了以下问题中描述的行为:

https://github.com/ansible/ansible/issues/47374

这里似乎对这个主题进行了一些热烈的讨论:

https://github.com/ansible/ansible/pull/53644

我不清楚这个问题是否已在 Ansible 的后续版本中得到解决。

关于windows - Ansible 处理程序在播放结束时运行两次,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58476297/

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