func main()

in cmd/acs_cli/cli.go [109:177]


func main() {
	flag.Parse()

	ctx, cancel := context.WithCancel(context.Background())
	defer cancel()

	logOpts := logger.Options{
		Ident:   filepath.Base(os.Args[0]),
		LogFile: *cliLogFile,
		Level:   4,
	}

	if err := logger.Init(ctx, logOpts); err != nil {
		fmt.Fprintf(os.Stderr, "Failed to initialize logger: %v\n", err)
		os.Exit(1)
	}
	defer galog.Shutdown(galogShutdownTimeout)

	requireFlags()

	if err := cfg.Load(nil); err != nil {
		galog.Fatalf("Failed to load Guest Agent configuration: %v", err)
	}

	cksum, err := file.SHA256FileSum(*archiveFile)
	if err != nil {
		galog.Fatalf("Failed to compute SHA256 hash of plugin archive: %v", err)
	}

	server, err := serveArchive()
	if err != nil {
		galog.Fatalf("Failed to serve plugin archive via httptest.Server: %v", err)
	}
	defer server.Close()

	url := server.URL
	galog.Infof("Serving plugin archive on: %s", url)

	s := testserver.NewTestServer(*acsHost)
	if err := s.Start(); err != nil {
		galog.Fatalf("Failed to start test ACS server on %s: %v", *acsHost, err)
	}

	// Start capturing logs periodically. This go routine exits when context is
	// cancelled.
	go captureLogs(ctx, s)

	reader := bufio.NewReader(os.Stdin)

	for {
		fmt.Print("Enter command(install, remove or list): ")
		text, err := reader.ReadString('\n')
		if err != nil {
			galog.Fatalf("Failed to read command: %v", err)
		}

		text = strings.TrimSpace(text)
		switch text {
		case "install":
			install(s, url, cksum)
		case "remove":
			remove(s)
		case "list":
			list(s)
		default:
			fmt.Println("Unknown command:", text)
		}
	}
}