Skip to content

Commit 81dad08

Browse files
committed
fix: inspecting arguments for backward compatibility.
Signed-off-by: Yuki Ito <yuki462@ibm.com>
1 parent de862c5 commit 81dad08

File tree

1 file changed

+63
-14
lines changed

1 file changed

+63
-14
lines changed

oper8/rollout_manager.py

Lines changed: 63 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@
66
# Standard
77
from functools import partial
88
from typing import Callable, Optional
9+
import inspect
910

1011
# First Party
1112
import alog
@@ -18,6 +19,9 @@
1819
from .session import Session
1920

2021
log = alog.use_channel("ROLMGR")
22+
# New argument introduced at oper8 v0.1.33 for after_deploy or after_verify functions.
23+
DEPLOY_COMPLETION_STATE_ARG_NAME = "deploy_completion_state"
24+
VERIFY_COMPLETION_STATE_ARG_NAME = "verify_completion_state"
2125

2226
## Rollout Functions ###########################################################
2327

@@ -325,11 +329,24 @@ def rollout( # pylint: disable=too-many-locals,too-many-statements
325329
if (not phase1_complete or phase1_failed) and self._after_deploy_unsuccessful:
326330
log.debug2("Running after-deploy-unsuccessful")
327331
try:
328-
is_after_deploy_unsuccessful_completed = (
329-
self._after_deploy_unsuccessful(
330-
self._session, phase1_failed, deploy_completion_state
332+
# Check DEPLOY_COMPLETION_STATE_ARG_NAME argument for backward compatibility.
333+
if (
334+
DEPLOY_COMPLETION_STATE_ARG_NAME
335+
in inspect.signature(self._after_deploy_unsuccessful).parameters
336+
):
337+
is_after_deploy_unsuccessful_completed = (
338+
self._after_deploy_unsuccessful(
339+
self._session, phase1_failed, deploy_completion_state
340+
)
331341
)
332-
)
342+
else:
343+
log.warning(
344+
"Detected old after_deploy function. Please migrate oper8 to ^0.1.33."
345+
)
346+
is_after_deploy_unsuccessful_completed = (
347+
self._after_deploy_unsuccessful(self._session, phase1_failed)
348+
)
349+
333350
if not is_after_deploy_unsuccessful_completed:
334351
phase2_exception = VerificationError(
335352
"After-deploy-unsuccessful verification failed"
@@ -346,9 +363,19 @@ def rollout( # pylint: disable=too-many-locals,too-many-statements
346363
if phase1_complete and self._after_deploy:
347364
log.debug2("Running after-deploy")
348365
try:
349-
phase2_complete = self._after_deploy(
350-
self._session, deploy_completion_state
351-
)
366+
if (
367+
DEPLOY_COMPLETION_STATE_ARG_NAME
368+
in inspect.signature(self._after_deploy).parameters
369+
):
370+
phase2_complete = self._after_deploy(
371+
self._session, deploy_completion_state
372+
)
373+
else:
374+
log.warning(
375+
"Detected old after_deploy function. Please migrate oper8 to ^0.1.33."
376+
)
377+
phase2_complete = self._after_deploy(self._session)
378+
352379
if not phase2_complete:
353380
phase2_exception = VerificationError(
354381
"After-deploy verification failed"
@@ -439,11 +466,23 @@ def rollout( # pylint: disable=too-many-locals,too-many-statements
439466
) and self._after_verify_unsuccessful:
440467
log.debug("Running after-verify-unsuccessful")
441468
try:
442-
is_after_verify_unsuccessful_completed = (
443-
self._after_verify_unsuccessful(
444-
self._session, phase3_failed, verify_completion_state
469+
if (
470+
VERIFY_COMPLETION_STATE_ARG_NAME
471+
in inspect.signature(self._after_verify_unsuccessful).parameters
472+
):
473+
is_after_verify_unsuccessful_completed = (
474+
self._after_verify_unsuccessful(
475+
self._session, phase3_failed, verify_completion_state
476+
)
445477
)
446-
)
478+
else:
479+
log.warning(
480+
"Detected old after_verify function. Please migrate oper8 to ^0.1.33."
481+
)
482+
is_after_verify_unsuccessful_completed = (
483+
self._after_verify_unsuccessful(self._session, phase3_failed)
484+
)
485+
447486
if not is_after_verify_unsuccessful_completed:
448487
phase4_exception = VerificationError(
449488
"After-verify-unsuccessful failed"
@@ -456,9 +495,19 @@ def rollout( # pylint: disable=too-many-locals,too-many-statements
456495
if phase3_complete and self._after_verify:
457496
log.debug("Running after-verify")
458497
try:
459-
phase4_complete = self._after_verify(
460-
self._session, verify_completion_state
461-
)
498+
if (
499+
VERIFY_COMPLETION_STATE_ARG_NAME
500+
in inspect.signature(self._after_verify).parameters
501+
):
502+
phase4_complete = self._after_verify(
503+
self._session, verify_completion_state
504+
)
505+
else:
506+
log.warning(
507+
"Detected old after_verify function. Please migrate oper8 to ^0.1.33."
508+
)
509+
phase4_complete = self._after_verify(self._session)
510+
462511
if not phase4_complete:
463512
phase4_exception = VerificationError("After-verify failed")
464513
except Exception as err: # pylint: disable=broad-except

0 commit comments

Comments
 (0)