in agent/framework/runpluginutil/runpluginutil.go [421:517]
func getStepExecutionOperation(
log log.T,
pluginName string,
pluginId string,
isKnown bool,
isSupported bool,
isPluginHandlerFound bool,
isPreconditionEnabled bool,
preconditions map[string][]contracts.PreconditionArgument,
shouldSkipStepDueToPriorFailedStep bool,
) (string, string) {
log.Debugf("isSupported flag = %t", isSupported)
log.Debugf("isPluginHandlerFound flag = %t", isPluginHandlerFound)
log.Debugf("isPreconditionEnabled flag = %t", isPreconditionEnabled)
if shouldSkipStepDueToPriorFailedStep {
return skipStep, fmt.Sprintf(
"Plugin with name %s and id %s skipped due to prior step with an exit condition",
pluginName,
pluginId)
}
if !isPreconditionEnabled {
// 1.x or 2.0 document
if !isKnown {
return failStep, fmt.Sprintf(
"Plugin with name %s is not supported by this version of ssm agent, please update to latest version. Step name: %s",
pluginName,
pluginId)
} else if !isSupported {
return failStep, fmt.Sprintf(
"Plugin with name %s is not supported in current platform. Step name: %s",
pluginName,
pluginId)
} else if len(preconditions) > 0 {
// if 1.x or 2.0 document contains precondition or plugin not found, failStep
return failStep, fmt.Sprintf(
"Precondition is not supported for document schema version prior to 2.2. Step name: %s",
pluginId)
} else if !isPluginHandlerFound {
return failStep, fmt.Sprintf(
"Plugin with name %s not found. Step name: %s",
pluginName,
pluginId)
} else {
return executeStep, ""
}
} else {
// 2.2 or higher (cross-platform) document
if len(preconditions) == 0 {
log.Debug("Cross-platform Precondition is not present")
// precondition is not present - if pluginFound executeStep, else skipStep
if !isKnown {
return failStep, fmt.Sprintf(
"Plugin with name %s is not supported by this version of ssm agent, please update to latest version. Step name: %s",
pluginName,
pluginId)
} else if isSupported && isPluginHandlerFound {
return executeStep, ""
} else {
return skipStep, fmt.Sprintf(
"Step execution skipped due to unsupported plugin: %s. Step name: %s",
pluginName,
pluginId)
}
} else {
log.Debugf("Cross-platform Precondition is present, precondition = %v", preconditions)
isAllowed, unrecognizedPreconditionList := evaluatePreconditions(log, preconditions)
if isAllowed && !isKnown {
return failStep, fmt.Sprintf(
"Plugin with name %s is not supported by this version of ssm agent, please update to latest version. Step name: %s",
pluginName,
pluginId)
} else if !isSupported || !isPluginHandlerFound {
return skipStep, fmt.Sprintf(
"Step execution skipped due to unsupported plugin: %s. Step name: %s",
pluginName,
pluginId)
} else if !isAllowed {
return skipStep, fmt.Sprintf(
"Step execution skipped due to unsatisfied preconditions: '%s'. Step name: %s",
strings.Join(unrecognizedPreconditionList, ", "),
pluginId)
} else if len(unrecognizedPreconditionList) > 0 {
return failStep, fmt.Sprintf(
"Unrecognized precondition(s): '%s', please update agent to latest version. Step name: %s",
strings.Join(unrecognizedPreconditionList, ", "),
pluginId)
} else {
return executeStep, ""
}
}
}
}