66# Standard
77from functools import partial
88from typing import Callable , Optional
9+ import inspect
910
1011# First Party
1112import alog
1819from .session import Session
1920
2021log = 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