in gke-windows-builder/builder/main.go [255:316]
func buildSingleArchContainer(ctx context.Context, ver string, imageFamily string) builderServerStatus {
var s *builder.Server
var err error
netConfig := builder.NewInstanceNetworkConfig(projectID, network, networkProject, subnetwork, region)
bsc := &builder.WindowsBuildServerConfig{
InstanceNamePrefix: instanceNamePrefix,
ImageVersion: &ver,
ImageURL: &imageFamily,
Zone: zone,
NetworkConfig: netConfig,
Labels: labels,
MachineType: machineType,
BootDiskType: bootDiskType,
BootDiskSizeGB: *bootDiskSizeGB,
ServiceAccount: serviceAccount,
UseInternalIP: *useInternalIP,
ExternalNAT: *ExternalIP,
ReuseInstance: *reuseBuilderInstances,
}
if *reuseBuilderInstances {
log.Printf("Looking for an exiting %s instance to reuse", ver)
s, err = builder.FindExistingInstance(ctx, bsc, *projectID)
}
if s == nil {
s, err = builder.NewServer(ctx, bsc, *projectID)
if err != nil {
if isImageNotFoundErr(err, imageFamily) {
log.Printf("Failed to create Windows %[1]s instance, it may be expired, so skip it to continue without stamping Windows %[1]s manifest", ver)
return builderServerStatus{nil, nil}
}
return builderServerStatus{nil, err}
}
}
r := &s.RemoteWindowsServer
log.Printf("Waiting for Windows %s instance: %s (%s) to become available", ver, *r.Hostname, s.GetInstanceName())
err = r.WaitForServerBeReady(*setupTimeout)
if err != nil {
log.Printf("Error setup Windows %s instance: %s with error: %+v", ver, *r.Hostname, err)
return builderServerStatus{s, err}
}
r.WorkspaceBucket = workspaceBucket
// Copy workspace to remote machine
log.Printf("Copying local workspace to remote machine: %v", *r.Hostname)
err = r.Copy(*workspacePath, *copyTimeout)
if err != nil {
log.Printf("Error copying workspace to %v : %+v", *r.Hostname, err)
return builderServerStatus{s, err}
}
err = buildSingleArchContainerOnRemote(r, *containerImageName, ver, commandTimeout)
if err != nil {
log.Printf("Error building single arch container on remote %v : %+v", *r.Hostname, err)
return builderServerStatus{s, err}
}
return builderServerStatus{s, nil}
}