fix(agent): run Ansible executor in worker
Some checks failed
CD Pipeline / workflow-shape (push) Successful in 0s
CD Pipeline / cancel-stale-cd (push) Has been skipped
CD Pipeline / tests (push) Successful in 2m36s
CD Pipeline / post-deploy-checks (push) Has been cancelled
CD Pipeline / build-and-deploy (push) Has been cancelled
Some checks failed
CD Pipeline / workflow-shape (push) Successful in 0s
CD Pipeline / cancel-stale-cd (push) Has been skipped
CD Pipeline / tests (push) Successful in 2m36s
CD Pipeline / post-deploy-checks (push) Has been cancelled
CD Pipeline / build-and-deploy (push) Has been cancelled
This commit is contained in:
@@ -654,10 +654,14 @@ async def lifespan(_app: FastAPI) -> AsyncGenerator[None, None]:
|
||||
from src.jobs.awooop_ansible_check_mode_job import (
|
||||
run_awooop_ansible_check_mode_loop,
|
||||
)
|
||||
schedule_api_background_task(run_awooop_ansible_check_mode_loop())
|
||||
scheduled_task = schedule_api_background_task(
|
||||
run_awooop_ansible_check_mode_loop()
|
||||
)
|
||||
logger.info(
|
||||
"awooop_ansible_check_mode_worker_scheduled",
|
||||
"awooop_ansible_check_mode_worker_schedule_evaluated",
|
||||
enabled=settings.ENABLE_AWOOOP_ANSIBLE_CHECK_MODE_WORKER,
|
||||
scheduled_in_api_process=scheduled_task is not None,
|
||||
production_process_owner="awoooi-worker",
|
||||
interval_seconds=settings.AWOOOP_ANSIBLE_CHECK_MODE_INTERVAL_SECONDS,
|
||||
)
|
||||
except Exception as e:
|
||||
|
||||
@@ -390,6 +390,10 @@ async def _run_ansible_command(spec: AnsibleCommandSpec, *, timeout_seconds: int
|
||||
timed_out = True
|
||||
process.kill()
|
||||
stdout_bytes, stderr_bytes = await process.communicate()
|
||||
except asyncio.CancelledError:
|
||||
process.kill()
|
||||
await process.communicate()
|
||||
raise
|
||||
duration_ms = int((time.monotonic() - started) * 1000)
|
||||
return AnsibleRunResult(
|
||||
returncode=124 if timed_out else int(process.returncode or 0),
|
||||
|
||||
@@ -608,6 +608,21 @@ async def _main() -> None:
|
||||
|
||||
# Initialize and start worker
|
||||
worker = await init_signal_worker()
|
||||
ansible_check_mode_task: asyncio.Task[Any] | None = None
|
||||
if settings.ENABLE_AWOOOP_ANSIBLE_CHECK_MODE_WORKER:
|
||||
from src.jobs.awooop_ansible_check_mode_job import (
|
||||
run_awooop_ansible_check_mode_loop,
|
||||
)
|
||||
|
||||
ansible_check_mode_task = asyncio.create_task(
|
||||
run_awooop_ansible_check_mode_loop(),
|
||||
name="run_awooop_ansible_check_mode_loop",
|
||||
)
|
||||
logger.info(
|
||||
"signal_worker_ansible_check_mode_loop_started",
|
||||
interval_seconds=settings.AWOOOP_ANSIBLE_CHECK_MODE_INTERVAL_SECONDS,
|
||||
batch_limit=settings.AWOOOP_ANSIBLE_CHECK_MODE_BATCH_LIMIT,
|
||||
)
|
||||
|
||||
# Setup graceful shutdown
|
||||
shutdown_event = asyncio.Event()
|
||||
@@ -634,6 +649,12 @@ async def _main() -> None:
|
||||
|
||||
# Graceful shutdown
|
||||
logger.info("signal_worker_shutting_down")
|
||||
if ansible_check_mode_task is not None:
|
||||
ansible_check_mode_task.cancel()
|
||||
try:
|
||||
await ansible_check_mode_task
|
||||
except asyncio.CancelledError:
|
||||
pass
|
||||
await worker.stop()
|
||||
await close_worker_redis_pool() # 關閉 Worker 專屬連線
|
||||
await close_redis_pool()
|
||||
|
||||
Reference in New Issue
Block a user