func NewServer()

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
}