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