in fixtures.go [300:363]
func (t *TestWorkflow) CreateTestVMFromInstanceBeta(i *daisy.InstanceBeta, disks []*compute.Disk) (*TestVM, error) {
if len(disks) == 0 || disks[0].Name == "" {
return nil, fmt.Errorf("failed to create multiple disk VM with empty boot disk")
}
name := disks[0].Name
parts := strings.Split(name, ".")
vmname := strings.ReplaceAll(parts[0], "_", "-")
createDisksSteps := make([]*daisy.Step, len(disks))
for i, disk := range disks {
// the disk creation steps are slightly different for the boot disk and mount disks
var createDisksStep *daisy.Step
var err error
if i == 0 {
createDisksStep, err = t.appendCreateDisksStep(disk)
} else {
createDisksStep, err = t.appendCreateMountDisksStep(disk)
}
if err != nil {
return nil, err
}
createDisksSteps[i] = createDisksStep
}
// createDisksStep doesn't depend on any other steps.
createVMStep, i, err := t.appendCreateVMStepBeta(disks, i)
if err != nil {
return nil, err
}
for _, createDisksStep := range createDisksSteps {
if err := t.wf.AddDependency(createVMStep, createDisksStep); err != nil {
return nil, err
}
}
var waitStep *daisy.Step
if _, foundKey := i.Metadata[ShouldRebootDuringTest]; foundKey {
waitStep, err = t.addWaitRebootGAStep(vmname, vmname)
} else {
waitStep, err = t.addWaitStep(vmname, vmname)
}
if err != nil {
return nil, err
}
if err := t.wf.AddDependency(waitStep, createVMStep); err != nil {
return nil, err
}
if createSubnetworkStep, ok := t.wf.Steps[createSubnetworkStepName]; ok {
if err := t.wf.AddDependency(createVMStep, createSubnetworkStep); err != nil {
return nil, err
}
}
if createNetworkStep, ok := t.wf.Steps[createNetworkStepName]; ok {
if err := t.wf.AddDependency(createVMStep, createNetworkStep); err != nil {
return nil, err
}
}
return &TestVM{name: vmname, testWorkflow: t, instancebeta: i}, nil
}