Ejemplo n.º 1
0
        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);
        }
Ejemplo n.º 2
0
        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);
            });
        }