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)
}
}
}