in testworkflow.go [755:823]
func NewTestWorkflow(opts *TestWorkflowOpts) (*TestWorkflow, error) {
t := &TestWorkflow{}
t.counter = 0
t.Name = opts.Name
t.ImageURL = opts.Image
t.Client = opts.Client
t.testExcludeFilter = opts.ExcludeFilter
if opts.UseReservations {
reservationType := "ANY_RESERVATION"
var reservationKey string
if len(opts.ReservationURLs) > 0 {
reservationKey = "compute.googleapis.com/reservation-name"
reservationType = "SPECIFIC_RESERVATION"
}
t.ReservationAffinity = &compute.ReservationAffinity{ConsumeReservationType: reservationType, Values: opts.ReservationURLs, Key: reservationKey}
t.ReservationAffinityBeta = &computeBeta.ReservationAffinity{ConsumeReservationType: reservationType, Values: opts.ReservationURLs, Key: reservationKey}
t.AcceleratorType = opts.AcceleratorType
}
var err error
t.Project, err = t.Client.GetProject(opts.Project)
if err != nil {
return nil, err
}
t.Zone, err = t.Client.GetZone(t.Project.Name, opts.Zone)
if err != nil {
return nil, err
}
// Initializing Image inside the TestWorkflow
split := strings.Split(opts.Image, "/")
if strings.Contains(opts.Image, "family") {
t.Image, err = t.Client.GetImageFromFamily(split[1], split[len(split)-1])
} else {
t.Image, err = t.Client.GetImage(split[1], split[len(split)-1])
}
// Initializing ImageBeta inside the TestWorkflow, this is required to provide Beta support to cvm testsuite
if strings.Contains(opts.Image, "family") {
t.ImageBeta, err = t.Client.GetImageFromFamilyBeta(split[1], split[len(split)-1])
} else {
t.ImageBeta, err = t.Client.GetImageBeta(split[1], split[len(split)-1])
}
if err != nil {
return nil, err
}
if t.Image.Architecture == "ARM64" {
t.MachineType, err = t.Client.GetMachineType(t.Project.Name, t.Zone.Name, opts.ARM64Shape)
} else {
t.MachineType, err = t.Client.GetMachineType(t.Project.Name, t.Zone.Name, opts.X86Shape)
}
if err != nil {
return nil, err
}
t.wf = daisy.New()
if opts.ComputeEndpointOverride != "" {
t.wf.ComputeEndpoint = opts.ComputeEndpointOverride
}
t.wf.Name = strings.ReplaceAll(opts.Name, "_", "-")
t.wf.DefaultTimeout = opts.Timeout
t.wf.Zone = opts.Zone
t.wf.DisableCloudLogging()
t.wf.DisableStdoutLogging()
return t, nil
}