func main()

in cmd/simulacra/simulacra.go [385:439]


func main() {
	loggingDir := filepath.Join("/tmp", fmt.Sprintf("simulacra-%s", uuid.NewString()))
	mainLogFile := filepath.Join(loggingDir, "main_log.txt")
	vmInitLogFile := filepath.Join(loggingDir, vmInitLogFileName)
	logger, err := logging.NewDirectoryLogger(loggingDir)
	if err != nil {
		log.Default().Fatalf("Error initializing directory logger %v", err)
	}
	log.Default().Printf("Starting Simulacra, Detailed logging can be found in %s directory", loggingDir)
	ctx := context.Background()
	config, err := getSimulacraConfig()
	if err != nil {
		log.Default().Fatalf("error parsing simulacra config %v", err)
	}

	if err := configureFromGCloud(&config.Project, &config.Zone); err != nil {
		log.Default().Fatalf("project and zone must either be non empty or set in GCloud %v", err)
	}

	// Create VM Instance.
	log.Default().Printf("Creating VM Instance, check %s for details", vmInitLogFile)
	vm, err := createInstance(ctx, config, logger.ToFile(vmInitLogFileName))
	if err != nil {
		log.Default().Fatalf("Failed to create GCE instance %v", err)
	}
	// Install Ops Agent on VM.
	log.Default().Printf("Installing Ops Agent, check %s for details", mainLogFile)
	if err := setupOpsAgent(ctx, vm, logger.ToMainLog(), config.ConfigFilePath); err != nil {
		log.Default().Fatalf("Failed to install Ops Agent %v", err)
	}

	// Install Third Party Appliations based on Ops Agent Config.
	log.Default().Printf("Installing Third Party Applications, check %s for details", mainLogFile)
	receivers, err := getReceiversFromConfig(ctx, vm, logger, config.ConfigFilePath)

	if err != nil {
		log.Default().Fatalf("Error reading config file: %v", err)
	}

	if err := installApps(ctx, vm, logger, config.ThirdPartyAppsPath, receivers); err != nil {
		log.Default().Printf("Failed to install apps %v", err)
	}

	// Run custom Scripts on the VM

	log.Default().Printf("Running Custom Scripts on the VM, check %s for details", mainLogFile)
	if err := runCustomScripts(ctx, vm, logger, config.Scripts); err != nil {
		log.Default().Fatalf("Error executing custom script on the VM %v", err)
	}

	log.Default().Printf("VM '%s' is ready.", vm.Name)
	logger.ToMainLog().Printf("VM '%s' is ready", vm.Name)
	logger.Close()

}