in main/main.go [31:94]
func main() {
// parse extension environment
hEnv, handlerErr := vmextension.GetHandlerEnv()
if handlerErr != nil {
lg.eventError("Failed to parse handlerEnv file.", handlerErr)
os.Exit(failureCode)
}
// Note that this should be logging to: hEnv.HandlerEnvironment.LogFolder, but
// The original functionality had this logging at "./path" within the extension
// directory, and we don't want to break this.
lg = newLogger(logPath)
noopLogger = newNoopLogger()
// parse the command line arguments
flag.Parse()
cmd := parseCmd(flag.Args())
lg.with("Operation: ", cmd.name)
lg.customLog("Command: ", cmd.name)
seqNum, seqErr := vmextension.FindSeqNum(hEnv.HandlerEnvironment.ConfigFolder)
if seqErr != nil {
lg.eventError("failed to find sequence number", seqErr)
// only throw a fatal error if the command is not "install"
if cmd.name != "install" {
os.Exit(cmd.failExitCode)
}
}
lg.event("seqNum: " + strconv.Itoa(seqNum))
// check sub-command preconditions, if any, before executing
lg.event("start operation")
if cmd.pre != nil {
lg.event("pre-check")
if preErr := cmd.pre(lg, seqNum); preErr != nil {
lg.eventError("pre-check failed", preErr)
telemetry(TelemetryScenario, "enable pre-check failed: "+preErr.Error(), false, 0)
os.Exit(cmd.failExitCode)
}
}
// execute the command
lg.event("Reporting transitioning status...")
reportStatus(lg, hEnv, seqNum, status.StatusTransitioning, cmd, "Transitioning")
if cmdErr := cmd.f(lg, hEnv, seqNum); cmdErr != nil {
message := "Operation '" + cmd.name + "' failed."
lg.eventError(message, cmdErr)
telemetry(TelemetryScenario, message+" Error: '"+cmdErr.Error()+"'.", false, 0)
// Never fail on disable due to a current bug in the Guest Agent
if cmd.name != "disable" {
reportStatus(lg, hEnv, seqNum, status.StatusError, cmd, cmdErr.Error())
os.Exit(cmd.failExitCode)
}
} else {
message := "Operation '" + cmd.name + "' succeeded."
lg.event(message)
telemetry(TelemetryScenario, message, false, 0)
}
reportStatus(lg, hEnv, seqNum, status.StatusSuccess, cmd, "")
os.Exit(successCode)
}