in cli_tools/gce_windows_upgrade/upgrader/workflows.go [502:576]
func populateRollbackSteps(u *upgrader, w *daisy.Workflow) error {
stepStopInstance, err := daisyutils.NewStep(w, "stop-instance")
if err != nil {
return err
}
stepStopInstance.StopInstances = &daisy.StopInstances{
Instances: []string{u.instanceURI},
}
stepDetachNewOSDisk, err := daisyutils.NewStep(w, "detach-new-os-disk", stepStopInstance)
if err != nil {
return err
}
stepDetachNewOSDisk.DetachDisks = &daisy.DetachDisks{
{
Instance: u.instanceURI,
DeviceName: daisyutils.GetDeviceURI(u.instanceProject, u.instanceZone, u.osDiskDeviceName),
},
}
stepAttachOldOSDisk, err := daisyutils.NewStep(w, "attach-old-os-disk", stepDetachNewOSDisk)
if err != nil {
return err
}
stepAttachOldOSDisk.AttachDisks = &daisy.AttachDisks{
{
Instance: u.instanceURI,
AttachedDisk: compute.AttachedDisk{
Source: u.osDiskURI,
DeviceName: u.osDiskDeviceName,
AutoDelete: u.osDiskAutoDelete,
Boot: true,
},
},
}
stepDetachInstallMediaDisk, err := daisyutils.NewStep(w, "detach-install-media-disk", stepAttachOldOSDisk)
if err != nil {
return err
}
stepDetachInstallMediaDisk.DetachDisks = &daisy.DetachDisks{
{
Instance: u.instanceURI,
DeviceName: daisyutils.GetDeviceURI(u.instanceProject, u.instanceZone, u.installMediaDiskName),
},
}
stepRestoreScript, err := daisyutils.NewStep(w, "restore-script", stepDetachInstallMediaDisk)
if err != nil {
return err
}
stepRestoreScript.UpdateInstancesMetadata = &daisy.UpdateInstancesMetadata{
{
Instance: u.instanceURI,
Metadata: map[string]string{
metadataWindowsStartupScriptURL: u.getOriginalStartupScriptURL(),
metadataWindowsStartupScriptURLBackup: "",
},
},
}
// TODO: use a flag to determine whether to start the instance. b/156668741
stepDeleteNewOSDiskAndInstallMediaDisk, err := daisyutils.NewStep(w, "delete-new-os-disk-and-install-media-disk", stepRestoreScript)
if err != nil {
return err
}
stepDeleteNewOSDiskAndInstallMediaDisk.DeleteResources = &daisy.DeleteResources{
Disks: []string{
daisyutils.GetDiskURI(u.instanceProject, u.instanceZone, u.newOSDiskName),
daisyutils.GetDiskURI(u.instanceProject, u.instanceZone, u.installMediaDiskName),
},
}
return nil
}