private void RunAttachStorage( string vmName, CreateVmSettings.VboxStorageControllerSetting controllerSetting, CreateVmSettings.VboxDiskSetting diskSetting, Action <IProcess> callback = null) { if (string.IsNullOrWhiteSpace(vmName) || controllerSetting == null || diskSetting == null) { return; } var args = new ProcessArgumentBuilder(); args.Append("storageattach"); args.Append(vmName); args.Append("--storagectl"); args.Append(controllerSetting.Name); args.Append("--port"); args.Append(diskSetting.Port.ToString()); args.Append("--device"); args.Append(diskSetting.Device.ToString()); args.Append("--type"); args.Append("hdd"); args.Append("--medium"); args.Append(diskSetting.FileName); this.Log.Information("storageattach name: {0} to controller: {1}", diskSetting.FileName, controllerSetting.Name); this.Run(this.Settings, args, this.GetProcessSettings(callback != null), callback); }
private void RunCreateStorageCtl(string vmName, CreateVmSettings.VboxStorageControllerSetting controllerSetting, Action <IProcess> callback = null) { if (string.IsNullOrWhiteSpace(vmName) || controllerSetting == null) { return; } var args = new ProcessArgumentBuilder(); args.Append("storagectl"); args.Append(vmName); args.Append("--name"); args.Append(controllerSetting.Name); args.Append("--add"); args.Append(controllerSetting.Type); args.Append("--controller"); args.Append(controllerSetting.Controller); this.Log.Information("storagectl add name: {0}", controllerSetting.Name); this.Run(this.Settings, args, null, proc => { if (proc.GetExitCode() != 0) { this.Log.Error("Failed to add storagectl for: {0}. Bailing", controllerSetting.Name); } else { foreach (var diskSetting in controllerSetting.DiskSettings) { this.RunCreateHd(diskSetting, diskProc => { if (diskProc.GetExitCode() != 0) { this.Log.Error("Failed to create disk: {0} for controller: {1}", diskSetting.FileName, controllerSetting.Name); } else { this.RunAttachStorage(vmName, controllerSetting, diskSetting, attachProc => { if (attachProc.GetExitCode() != 0) { this.Log.Error("Failed to attach disk: {0} for controller: {1}", diskSetting.FileName, controllerSetting.Name); } }); } }); } } callback?.Invoke(proc); }); }