github.com/kyma-project/kyma-environment-broker@v0.0.1/internal/process/upgrade_kyma/avs_maintenance.go (about)

     1  package upgrade_kyma
     2  
     3  import (
     4  	"time"
     5  
     6  	"github.com/kyma-project/kyma-environment-broker/internal"
     7  	"github.com/kyma-project/kyma-environment-broker/internal/avs"
     8  	kebError "github.com/kyma-project/kyma-environment-broker/internal/error"
     9  	"github.com/kyma-project/kyma-environment-broker/internal/process"
    10  	"github.com/sirupsen/logrus"
    11  )
    12  
    13  func SetAvsStatusMaintenance(evaluationManager *avs.EvaluationManager, operationManager *process.UpgradeKymaOperationManager, operation internal.UpgradeKymaOperation, log logrus.FieldLogger) (internal.UpgradeKymaOperation, error) {
    14  	hasMonitors := evaluationManager.HasMonitors(operation.Avs)
    15  	inMaintenance := evaluationManager.InMaintenance(operation.Avs)
    16  	var err error = nil
    17  	var delay time.Duration = 0
    18  
    19  	if hasMonitors &&
    20  		!inMaintenance &&
    21  		evaluationManager.IsMaintenanceModeApplicableForGAID(operation.ProvisioningParameters.ErsContext.GlobalAccountID) {
    22  		log.Infof("setting AVS evaluations statuses to maintenance")
    23  		err = evaluationManager.SetMaintenanceStatus(&operation.Avs, log)
    24  		operation, delay, _ = operationManager.UpdateOperation(operation, func(op *internal.UpgradeKymaOperation) {
    25  			op.Avs.AvsInternalEvaluationStatus = operation.Avs.AvsInternalEvaluationStatus
    26  			op.Avs.AvsExternalEvaluationStatus = operation.Avs.AvsExternalEvaluationStatus
    27  		}, log)
    28  		if err == nil && delay > 0 {
    29  			err = kebError.NewTemporaryError("failed to update avs status in operation")
    30  		}
    31  	}
    32  
    33  	return operation, err
    34  }
    35  
    36  func RestoreAvsStatus(evaluationManager *avs.EvaluationManager, operationManager *process.UpgradeKymaOperationManager, operation internal.UpgradeKymaOperation, log logrus.FieldLogger) (internal.UpgradeKymaOperation, error) {
    37  	hasMonitors := evaluationManager.HasMonitors(operation.Avs)
    38  	inMaintenance := evaluationManager.InMaintenance(operation.Avs)
    39  	var err error = nil
    40  	var delay time.Duration = 0
    41  
    42  	if hasMonitors && inMaintenance {
    43  		log.Infof("clearing AVS maintenantce statuses and restoring original AVS evaluation statuses")
    44  		err = evaluationManager.RestoreStatus(&operation.Avs, log)
    45  		operation, delay, _ = operationManager.UpdateOperation(operation, func(op *internal.UpgradeKymaOperation) {
    46  			op.Avs.AvsInternalEvaluationStatus = operation.Avs.AvsInternalEvaluationStatus
    47  			op.Avs.AvsExternalEvaluationStatus = operation.Avs.AvsExternalEvaluationStatus
    48  		}, log)
    49  		if err == nil && delay > 0 {
    50  			err = kebError.NewTemporaryError("failed to update avs status in operation")
    51  		}
    52  	}
    53  
    54  	return operation, err
    55  }