in windows-builder/builder/main.go [40:114]
func main() {
log.Print("Starting Windows builder")
flag.Parse()
var r *builder.Remote
var s *builder.Server
var bs *builder.BuilderServer
// Connect to server
if (*hostname != "") && (*username != "") && (*password != "") {
r = &builder.Remote{
Hostname: hostname,
Username: username,
Password: password,
}
log.Printf("Connecting to existing host %s", *r.Hostname)
} else {
ctx := context.Background()
bs = &builder.BuilderServer{
ImageUrl: image,
VPC: network,
Subnet: subnetwork,
Region: region,
Zone: zone,
Labels: labels,
MachineType: machineType,
Preemptible: preemptible,
DiskSizeGb: diskSizeGb,
DiskType: diskType,
ServiceAccount: serviceAccount,
Tags: tags,
UseInternalNet: useInternalNet,
CreateExternalIP: createExternalIP,
}
s = builder.NewServer(ctx, bs)
r = &s.Remote
log.Print("Setting up termination signal handler")
sigsChannel := make(chan os.Signal, 1)
signal.Notify(sigsChannel, syscall.SIGTERM, syscall.SIGINT, syscall.SIGQUIT)
go func() {
sig := <-sigsChannel
log.Printf("Signal %+v received, terminating", sig)
deleteInstanceAndExit(s, bs, 1)
}()
}
log.Print("Waiting for server to become available")
err := r.Wait()
if err != nil {
log.Printf("Error connecting to server: %+v", err)
deleteInstanceAndExit(s, bs, 1)
}
r.BucketName = workspaceBucket
// Copy workspace to remote machine
if !*notCopyWorkspace {
log.Print("Copying workspace")
err = r.Copy(*workspacePath, *copyTimeout)
if err != nil {
log.Printf("Error copying workspace: %+v", err)
deleteInstanceAndExit(s, bs, 1)
}
}
// Execute on remote
log.Printf("Executing command %s", *command)
err = r.Run(*command, *commandTimeout)
if err != nil {
log.Printf("Error executing command: %+v", err)
deleteInstanceAndExit(s, bs, 1)
}
// Shut down server if started
deleteInstanceAndExit(s, bs, 0)
}