func main()

in main/main.go [34:89]


func main() {
	ctx := log.NewContext(log.NewSyncLogger(log.NewLogfmtLogger(
		os.Stdout))).With("time", log.DefaultTimestamp).With("version", VersionString())

	// parse command line arguments
	cmd := parseCmd(os.Args)
	ctx = ctx.With("operation", strings.ToLower(cmd.name))

	// parse extension environment
	hEnv, err := GetHandlerEnv()
	if err != nil {
		ctx.Log("message", "failed to parse handlerenv", "error", err)
		os.Exit(cmd.failExitCode)
	}

	seqNum := -1
	// Agent should set env variable sequence number
	seqNumVariable := os.Getenv(configSequenceNumber)
	if seqNumVariable != "" {
		seqNum, err = strconv.Atoi(seqNumVariable)
		if err != nil {
			ctx.Log("message", "failed to parse env variable ConfigSequenceNumber:"+seqNumVariable, "error", err)
			os.Exit(cmd.failExitCode)
		}
	}

	// Read the seqNum from latest config file in case VMAgent did not set it as env variable (old agent versions)
	if seqNum == -1 {
		seqNum, err = FindSeqNumConfig(hEnv.HandlerEnvironment.ConfigFolder)
		if err != nil {
			ctx.Log("messsage", "failed to find sequence number", "error", err)
			os.Exit(cmd.failExitCode)
		}
	}
	ctx = ctx.With("seq", seqNum)

	// check sub-command preconditions, if any, before executing
	ctx.Log("event", "start")
	if cmd.pre != nil {
		ctx.Log("event", "pre-check")
		if err := cmd.pre(ctx, hEnv, seqNum); err != nil {
			ctx.Log("event", "pre-check failed", "error", err)
			os.Exit(cmd.failExitCode)
		}
	}
	// execute the subcommand
	reportStatus(ctx, hEnv, seqNum, StatusTransitioning, cmd, "")
	msg, err := cmd.f(ctx, hEnv, seqNum)
	if err != nil {
		ctx.Log("event", "failed to handle", "error", err)
		reportStatus(ctx, hEnv, seqNum, StatusError, cmd, err.Error()+msg)
		os.Exit(cmd.failExitCode)
	}
	reportStatus(ctx, hEnv, seqNum, StatusSuccess, cmd, msg)
	ctx.Log("event", "end")
}