mirror of
https://github.com/ansible-collections/community.general.git
synced 2026-04-21 11:19:00 +00:00
pacemaker: fix race condition on resource creation (#11750)
* remove pacemaker wait arg and fix race condition * fix up pacemaker resource and stonith polling * add changelog for pacemaker timeout bug * remove env from test case and fix changelog file name * Update changelogs/fragments/11750-pacemaker-wait-race-condition.yml Co-authored-by: Felix Fontein <felix@fontein.de> --------- Co-authored-by: Felix Fontein <felix@fontein.de>
This commit is contained in:
parent
afe9de7562
commit
6c809dd9db
8 changed files with 382 additions and 17 deletions
|
|
@ -5,6 +5,7 @@
|
|||
from __future__ import annotations
|
||||
|
||||
import re
|
||||
import time
|
||||
import typing as t
|
||||
|
||||
from ansible_collections.community.general.plugins.module_utils.cmd_runner import CmdRunner, cmd_runner_fmt
|
||||
|
|
@ -59,6 +60,22 @@ def get_pacemaker_maintenance_mode(runner: CmdRunner) -> bool:
|
|||
return bool(maintenance_mode_output)
|
||||
|
||||
|
||||
def wait_for_resource(runner: CmdRunner, cli_noun: str, name: str, wait: int, sleep_interval: int = 5) -> None:
|
||||
"""Poll ``pcs <cli_noun> status <name>`` until the resource reports Started or the wait budget expires.
|
||||
|
||||
Raises an exception if the resource does not reach the Started state within *wait* seconds.
|
||||
"""
|
||||
deadline = time.monotonic() + wait
|
||||
while True:
|
||||
with runner("cli_action state name") as ctx:
|
||||
rc, out, err = ctx.run(cli_action=cli_noun, state="status")
|
||||
if out and "Started" in out:
|
||||
return
|
||||
if time.monotonic() >= deadline:
|
||||
raise Exception(f"Timed out waiting {wait}s for {cli_noun} resource '{name}' to start")
|
||||
time.sleep(sleep_interval)
|
||||
|
||||
|
||||
def pacemaker_runner(module: AnsibleModule, **kwargs) -> CmdRunner:
|
||||
runner_command = ["pcs"]
|
||||
runner = CmdRunner(
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue