in windows-builder/builder/builder/gce.go [68:128]
func NewServer(ctx context.Context, bs *BuilderServer) *Server {
// Get the current project ID.
projectID, err := getProject()
if err != nil {
log.Fatalf("Cannot create new server without project ID: %+v", err)
return nil
}
s := &Server{projectID: projectID}
log.Printf("Starting GCE service in project %s", projectID)
err = s.newGCEService(ctx)
if err != nil {
log.Fatalf("Failed to start GCE service: %v", err)
return nil
}
err = s.newInstance(bs)
if err != nil {
log.Fatalf("Failed to start Windows VM: %v", err)
return nil
}
// Reset password
username := "windows-builder"
password, err := s.resetWindowsPassword(username, bs)
if err != nil {
log.Fatalf("Failed to reset Windows password: %+v", err)
}
var ip string
if *bs.UseInternalNet {
// Get internal IP address.
ip, err = s.getInternalIP(bs)
if err != nil {
log.Fatalf("Failed to get internal IP address: %v", err)
return nil
}
} else {
// Set firewall rule.
err = s.setFirewallRule(bs)
if err != nil {
log.Fatalf("Failed to set ingress firewall rule: %v", err)
}
log.Printf("Set ingress firewall rule successfully")
// Get IP address.
ip, err = s.getExternalIP(bs)
if err != nil {
log.Fatalf("Failed to get external IP address: %v", err)
return nil
}
}
// Set and return Remote.
s.Remote = Remote{
Hostname: &ip,
Username: &username,
Password: &password,
}
return s
}