func()

in fixtures.go [224:296]


func (t *TestWorkflow) CreateTestVMMultipleDisks(disks []*compute.Disk, instanceParams *daisy.Instance) (*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
	}
	var daisyInst *daisy.Instance
	if instanceParams == nil {
		daisyInst = &daisy.Instance{}
	} else {
		daisyInst = instanceParams
	}
	// createDisksStep doesn't depend on any other steps.
	createVMStep, i, err := t.appendCreateVMStep(disks, daisyInst)
	if err != nil {
		return nil, err
	}
	for _, createDisksStep := range createDisksSteps {
		if err := t.wf.AddDependency(createVMStep, createDisksStep); err != nil {
			return nil, err
		}
	}

	// In a follow-up, guest attribute support will be added.
	// If this is the first boot before a reboot, this should use a
	// different guest attribute when waiting for the instance signal.
	var waitStep *daisy.Step
	if _, foundKey := daisyInst.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, instance: i}, nil
}