Пример #1
0
        private void AddVMsToTree(TreeNode parent, ref int index, IXenConnection connection, VM[] vms, Host TheHost, bool IsPool)
        {
            foreach (VM vm in vms)
            {
                bool is_snapshot = (!vm.is_a_template && HalsignHelpers.IsVMShow(vm) && !(vm.snapshots != null && vm.snapshots.Count > 0) && vm.allowed_operations.Count > 0);
                if (switchSnapshot)
                {
                    is_snapshot = (!vm.is_a_template && HalsignHelpers.IsVMShow(vm) && !(vm.snapshots != null && vm.snapshots.Count > 0) && vm.allowed_operations.Count > 0);
                }
                else
                {
                    is_snapshot = (!vm.is_a_template && HalsignHelpers.IsVMShow(vm) && vm.allowed_operations.Count > 0);
                }

                if (is_snapshot)
                {
                    if ((HalsignHelpers.VMHome(vm) == TheHost) || !IsPool)
                    {
                        if (!vm.name_label.StartsWith("__gui__"))
                        {
                            if (switchSnapshot)
                            {
                                bool hasParent = false;
                                foreach (VBD vbd in vm.Connection.ResolveAll <VBD>(vm.VBDs))
                                {
                                    if (HalsignHelpers.IsCDROM(vbd))
                                    {
                                        continue;
                                    }

                                    VDI vdi = vm.Connection.Resolve <VDI>(vbd.VDI);
                                    if (vdi != null) //&& vdi.Server.Show)
                                    {
                                        if (vdi.sm_config.ContainsKey("vhd-parent") && !string.IsNullOrEmpty(vdi.sm_config["vhd-parent"]))
                                        {
                                            hasParent = true;
                                            break;
                                        }
                                    }
                                }
                                if (hasParent)
                                {
                                    continue;
                                }
                            }

                            this.AddVMNode(parent, index, vm);
                            index++;
                            //vmList.Add(vm.uuid, vm);
                        }
                    }
                }
            }
        }
Пример #2
0
        public void ReplicationEditWizard()
        {
            VM vm = this._xenModelObject as VM;

            this.repChoseVmPage.VmCheckedList.Add(vm);
            BackupRestoreConfig.BrSchedule schedule = (BackupRestoreConfig.BrSchedule)HalsignUtil.JsonToObject(vm.other_config["halsign_rep_rules"], typeof(BackupRestoreConfig.BrSchedule));
            jobs = (BackupRestoreConfig.Job)HalsignUtil.JsonToObject(vm.other_config["halsign_br_job_r"], typeof(BackupRestoreConfig.Job));
            base.RemovePage(this.repChoseVmPage);
            base.RemovePage(this.repJobSettingPage);
            base.RemovePage(this.synchronizationPage);
            base.RemovePage(this.vmSettingsPage);
            base.RemovePage(this.completePage);

            this.repJobSettingPage.JobNameText = schedule.jobName;
            string tmpvdistr = "";

            if (schedule.details.EndsWith("halsign_vdi_all"))
            {
                foreach (VBD vbd in vm.Connection.ResolveAll <VBD>(vm.VBDs))
                {
                    if (HalsignHelpers.IsCDROM(vbd))
                    {
                        continue;
                    }
                    if (vbd.type.Equals(XenAPI.vbd_type.Disk))
                    {
                        tmpvdistr += vm.Connection.Resolve <VDI>(vbd.VDI).uuid + "@";;
                    }
                }
                tmpvdistr = tmpvdistr.Substring(0, tmpvdistr.Length - 1);
                this.repChoseVmPage.vdi_expand_list.Add(vm.uuid, tmpvdistr);
            }
            else
            {
                this.repChoseVmPage.vdi_expand_list.Add(vm.uuid, schedule.details);
            }
            this.schedulePage.EditReplicationInitButton(schedule);
            this.repJobSettingPage.EditReplicationInitJobSet(schedule);
            scheduleDetails = schedule.details.Replace("|halsign_vdi_all", "");
        }
Пример #3
0
        public void BackupEditWizard()
        {
            VM vm = this._xenModelObject as VM;

            this.vmCheckedList.Add(vm);
            BackupRestoreConfig.BrSchedule schedule = (BackupRestoreConfig.BrSchedule)HalsignUtil.JsonToObject(vm.other_config["halsign_br_rules"], typeof(BackupRestoreConfig.BrSchedule));
            BackupRestoreConfig.Job        job      = (BackupRestoreConfig.Job)HalsignUtil.JsonToObject(vm.other_config["halsign_br_job_s"], typeof(BackupRestoreConfig.Job));
            base.RemovePage(this.xenChoseVmBackupPage);
            base.RemovePage(this.optionsBackupPage);
            base.RemovePage(this.summaryBackupPage);
            base.RemovePage(this.completeBackupPage);

            this.optionsBackupPage._JobNameTextBox = schedule.jobName;
            string tmpvdistr = "";

            if (schedule.details.Equals("halsign_vdi_all"))
            {
                foreach (VBD vbd in vm.Connection.ResolveAll <VBD>(vm.VBDs))
                {
                    if (HalsignHelpers.IsCDROM(vbd))
                    {
                        continue;
                    }
                    if (vbd.type.Equals(XenAPI.vbd_type.Disk))
                    {
                        tmpvdistr += vm.Connection.Resolve <VDI>(vbd.VDI).uuid + "@";;
                    }
                }
                tmpvdistr = tmpvdistr.Substring(0, tmpvdistr.Length - 1);
                this.vdi_dictionary.Add(vm.uuid, tmpvdistr);
            }
            else
            {
                this.vdi_dictionary.Add(vm.uuid, schedule.details);
            }
            this.scheduleBackupPage.EditBackupInitButton(schedule);
        }
Пример #4
0
        protected override void FinishWizard()
        {
            List <Dictionary <string, string> >         listParam     = new List <Dictionary <string, string> >();
            List <Dictionary <string, List <string> > > listParamTemp = new List <Dictionary <string, List <string> > >();

            BackupRestoreConfig.BrSchedule schedule = new BackupRestoreConfig.BrSchedule();
            BackupRestoreConfig.Job        job      = new BackupRestoreConfig.Job();
            string str_rules   = "";
            String str_job     = "";
            string str_command = "";

            schedule.jobName = this.repJobSettingPage.JobNameText;
            job.job_name     = this.repJobSettingPage.JobNameText;
            if (this.schedulePage.NowChecked)
            {
                str_command           = "f";
                schedule.scheduleType = 0;
                job.schedule_type     = 0;
                schedule.scheduleDate = "";
            }
            if (this.schedulePage.OnceChecked)
            {
                str_command           = "y";
                schedule.scheduleType = 1;
                job.schedule_type     = 1;
                schedule.scheduleDate = this.schedulePage.StartDateText;
                schedule.scheduleTime = this.schedulePage.StartTimeText;
            }
            if (this.schedulePage.DailyChecked)
            {
                str_command           = "a";
                schedule.scheduleType = 2;
                job.schedule_type     = 2;
                schedule.scheduleDate = this.schedulePage.StartDateText;
                schedule.scheduleTime = this.schedulePage.StartTimeText;
                schedule.recur        = this.schedulePage.RecurText;
            }
            if (this.schedulePage.CircleChecked)
            {
                str_command           = "u";
                schedule.scheduleType = 4;
                job.schedule_type     = 4;
                schedule.scheduleDate = this.schedulePage.StartDateText;
                schedule.scheduleTime = this.schedulePage.StartTimeText;
                schedule.recur        = this.schedulePage.RecurText;
            }
            if (this.schedulePage.WeeklyChecked)
            {
                str_command           = "z";
                schedule.scheduleType = 3;
                job.schedule_type     = 3;
                schedule.scheduleDate = this.schedulePage.StartDateText;
                schedule.scheduleTime = this.schedulePage.StartTimeText;
                schedule.recur        = this.schedulePage.RecurText;
                List <int> listDays = new List <int>();
                if (this.schedulePage.MondayChecked)
                {
                    listDays.Add(1);
                }
                if (this.schedulePage.TuesdayChecked)
                {
                    listDays.Add(2);
                }
                if (this.schedulePage.WednesdayChecked)
                {
                    listDays.Add(3);
                }
                if (this.schedulePage.ThursdayChecked)
                {
                    listDays.Add(4);
                }
                if (this.schedulePage.FridayChecked)
                {
                    listDays.Add(5);
                }
                if (this.schedulePage.SaturdayChecked)
                {
                    listDays.Add(6);
                }
                if (this.schedulePage.SundayChecked)
                {
                    listDays.Add(0);
                }
                schedule.weeklyDays = listDays;
            }
            if (scheduleDetails != null && !scheduleDetails.Equals(""))
            {
                schedule.details = scheduleDetails;
            }
            else
            {
                schedule.details = this.repJobSettingPage.Choice_sr_ip + "|"
                                   + this.repJobSettingPage.DestUsernameText + "|" + this.repJobSettingPage.DestPasswordText + "|"
                                   + this.repJobSettingPage.VMNameText + "|" + this.repJobSettingPage.Choice_sr_uuid + "|0|"
                                   + this.repJobSettingPage.MacText + "|" + this.repJobSettingPage.NetworkValue + "|"
                                   + Helpers.GetMaster(this.repJobSettingPage.Selected_xenConnection).address + "|" + this.repJobSettingPage.Selected_xenConnection.Username + "|"
                                   + this.repJobSettingPage.Selected_xenConnection.Password + "|" + this.repJobSettingPage.Selected_host.uuid;
            }
            str_rules = HalsignUtil.ToJson(schedule);
            str_rules = str_rules.Replace("\\/", "/");


            job.host    = "";
            job.key     = "halsign_br_job_r";
            job.request = str_command + this.repJobSettingPage.JobNameText.TrimEnd().TrimStart() + "|";
            TimeSpan ts = DateTime.UtcNow.Subtract(new DateTime(1970, 1, 1, 0, 0, 0));

            ts = new DateTime(this.schedulePage.StartDateValue.Year, this.schedulePage.StartDateValue.Month,
                              this.schedulePage.StartDateValue.Day, this.schedulePage.StartTimeValue.Hour, this.schedulePage.StartTimeValue.Minute,
                              this.schedulePage.StartTimeValue.Second).Subtract(new DateTime(1970, 1, 1, 0, 0, 0).ToLocalTime());
            if (jobs != null)
            {
                jobs.request       = str_command + jobs.request.Substring(1, jobs.request.Length - 1);
                jobs.schedule_type = job.schedule_type;
                str_job            = HalsignUtil.ToJson(jobs);
            }
            else
            {
                job.start_time         = "";
                job.progress           = -1;
                job.total_storage      = -1;
                job.modify_time        = "";
                job.pid                = -1;
                job.retry              = -1;
                job.speed              = -1;
                job.status             = 0;
                job.current_full_count = 0;
                job.expect_full_count  = 0;//this.scheduleBackupPage.IsFullBackup ? 0 : (this.scheduleBackupPage._expectFullCheckBox ? this.scheduleBackupPage._expectFullCountTextBox : 0);
                str_job                = HalsignUtil.ToJson(job);
            }


            //string a = this.repJobSettingPage.Selected_xenConnection.Hostname;

            Dictionary <string, string> _dconf = new Dictionary <string, string>();

            _dconf.Add("command", str_command);
            _dconf.Add("is_now", this.schedulePage.NowChecked.ToString());
            _dconf.Add("replication_rules", str_rules);
            _dconf.Add("replication_job", str_job);
            if (jobs != null)
            {
                _dconf.Add("replication_editjob", "true");
            }
            else
            {
                _dconf.Add("replication_editjob", "false");
            }

            foreach (VM item in this.repChoseVmPage.VmCheckedList)
            {
                Dictionary <string, string>         _dconf_param      = new Dictionary <string, string>();
                Dictionary <string, List <string> > _dconf_param_temp = new Dictionary <string, List <string> >();
                string host_ip = " ";
                if (!HalsignHelpers.VMHome(item).address.Equals(this.repJobSettingPage.Choice_sr_ip))
                {
                    host_ip = this.repJobSettingPage.Choice_sr_ip;
                }
                List <string> syncCheckedList = new List <string>();
                foreach (Dictionary <string, string> dRepChecked in this.synchronizationPage.RepCheckedList)
                {
                    if (dRepChecked.ContainsKey(item.uuid))
                    {
                        string request_expend = "";
                        if (this.repChoseVmPage.vdi_expand_list.ContainsKey(item.uuid))
                        {
                            int vdiNo = 0;
                            foreach (VBD vbd in item.Connection.ResolveAll <VBD>(item.VBDs))
                            {
                                if (HalsignHelpers.IsCDROM(vbd))
                                {
                                    continue;
                                }

                                if (vbd.type.Equals(XenAPI.vbd_type.Disk))
                                {
                                    vdiNo++;
                                }
                            }
                            if (vdiNo == this.repChoseVmPage.vdi_expand_list[item.uuid].Split('@').Length)
                            {
                                request_expend = "|" + "halsign_vdi_all";
                            }
                            else
                            {
                                request_expend = "|" + this.repChoseVmPage.vdi_expand_list[item.uuid];
                            }
                        }
                        if ("new".Equals(dRepChecked[item.uuid]))
                        {
                            syncCheckedList.Add(this.repJobSettingPage.JobNameText + "|" + item.uuid + "|" + host_ip + "|"
                                                + this.repJobSettingPage.DestUsernameText + "|" + this.repJobSettingPage.DestPasswordText + "|"
                                                + this.repJobSettingPage.VMNameText + "|" + this.repJobSettingPage.Choice_sr_uuid + "|0|"
                                                + this.repJobSettingPage.MacText + "|" + this.repJobSettingPage.NetworkValue + "|"
                                                + Helpers.GetMaster(this.repJobSettingPage.Selected_xenConnection).address + "|" + this.repJobSettingPage.Selected_xenConnection.Username + "|"
                                                + this.repJobSettingPage.Selected_xenConnection.Password + "|" + this.repJobSettingPage.Selected_host.uuid + request_expend);
                        }
                        else
                        {
                            syncCheckedList.Add(this.repJobSettingPage.JobNameText + "|" + item.uuid + "|" + host_ip + "|"
                                                + this.repJobSettingPage.DestUsernameText + "|" + this.repJobSettingPage.DestPasswordText + "|"
                                                + dRepChecked[item.uuid] + "|" + Helpers.GetMaster(this.repJobSettingPage.Selected_xenConnection).address + "|"
                                                + this.repJobSettingPage.Selected_xenConnection.Username + "|" + this.repJobSettingPage.Selected_xenConnection.Password + request_expend);
                        }
                    }
                }
                _dconf_param_temp.Add(item.uuid, syncCheckedList);
                listParamTemp.Add(_dconf_param_temp);
            }

            BackupAction action = new BackupAction(Messages.COPY_VM, BackupRestoreConfig.BackupActionKind.Replication, this._xenModelObject, this.repChoseVmPage.VmCheckedList, _dconf, listParamTemp, this.repChoseVmPage.vdi_expand_list);

            if (action != null)
            {
                ProgressBarStyle     progressBarStyle = ProgressBarStyle.Marquee;
                ActionProgressDialog dialog           = new ActionProgressDialog(action, progressBarStyle);
                dialog.ShowCancel = false;
                dialog.ShowDialog(this);
                if (!action.Succeeded || !string.IsNullOrEmpty(action.Result))
                {
                    base.FinishCanceled();
                    //Program.MainWindow.BringToFront();
                    //e.PageIndex = e.PageIndex - 1;
                }
                else
                {
                    base.FinishWizard();
                }

                if (!(this._xenModelObject is Host))
                {
                    // todo Program.MainWindow.SwitchToTab(MainWindow.Tab.BR);
                    if (this._xenModelObject is VM)
                    {
                        VM vm = this._xenModelObject as VM;
                        vm.NotifyPropertyChanged("other_config");
                    }
                }
            }
        }
Пример #5
0
        private void AddVMNode(TreeNode parent, int index, VM vm)
        {
            bool flag;

            string os_name = vm.GetOSName().ToLowerInvariant();
            Icons  _icons;

            if (os_name.Contains("windows"))
            {
                _icons = Icons.Windows;
            }
            else if (os_name.Contains("debian"))
            {
                _icons = Icons.Debian;
            }
            else if (os_name.Contains("red"))
            {
                _icons = Icons.RHEL;
            }
            else if (os_name.Contains("cent"))
            {
                _icons = Icons.CentOS;
            }
            else if (os_name.Contains("oracle"))
            {
                _icons = Icons.Oracle;
            }
            else if (os_name.Contains("suse"))
            {
                _icons = Icons.SUSE;
            }
            else if (os_name.Contains("ubuntu"))
            {
                _icons = Icons.XenCenter;
            }
            else
            {
                _icons = Icons.XenCenter;
            }
            TreeNode node = this.AddNode(parent, index, vm.name_label, _icons, false, vm, out flag);

            int num = 0;

            foreach (VBD vbd in vm.Connection.ResolveAll <VBD>(vm.VBDs))
            {
                if (HalsignHelpers.IsCDROM(vbd))
                {
                    continue;
                }

                if (vbd.type.Equals(XenAPI.vbd_type.Disk))
                {
                    VDI vdi = vm.Connection.Resolve <VDI>(vbd.VDI);

                    //Add by dalei.shou on 2013/10/28, ignore the removable physical storage shown
                    SR sr = vm.Connection.Resolve <SR>(vdi.SR);
                    if (sr.IsRemovableStorage())
                    {
                        continue;
                    }

                    bool     expend;
                    TreeNode n = this.AddNode(node, num, vdi.name_label, Images.GetIconFor(vdi), false, vdi, out expend);
                    if (node.Checked == true)
                    {
                        n.Checked = true;
                    }
                    num++;
                }
            }
            if (node.Checked == true)
            {
                node.Expand();
            }
        }
Пример #6
0
        /// <summary>
        /// 1. Check that how many VDIs were checked for replication
        /// 2. Check whether the vms on destination host have the same amount of vdis on destination host
        /// 3. Check whether the vdis have key "src_vdi_uuid"
        /// </summary>
        /// <param name="parent"></param>
        /// <param name="index"></param>
        /// <param name="vms"></param>
        private void AddVmsToTree(TreeNode parent, ref int index, List <VM> vms)
        {
            VM[] vMs =
                this.selected_xenConnection.Cache.VMs.Where(
                    vm =>
                    (vm.uuid != null && vm.is_a_real_vm && HalsignHelpers.VMHome(vm) != null &&
                     HalsignHelpers.VMHome(vm) == this.selected_host)).ToArray();

            foreach (VM vm in vms)
            {
                TreeNode nodeSelectedVM = this.AddVMNodes(parent, index, vm);
                TreeNode newNode        = new TreeNode(Messages.NEW_REPLICATION);
                newNode.ImageIndex         = 999;
                newNode.SelectedImageIndex = 999;
                newNode.Tag     = "new";
                newNode.Checked = true;
                nodeSelectedVM.Nodes.Add(newNode);
                List <string> sourceVdiList = this.vdiCheckedDic[vm.uuid].Split(new string[] { "@" }, StringSplitOptions.RemoveEmptyEntries).ToList <string>();

                foreach (VM tempVm in vMs)
                {
                    bool isOperationAllowed = (!tempVm.is_a_template && HalsignHelpers.IsVMShow(tempVm) && tempVm.allowed_operations.Count > 0);
                    if (isOperationAllowed)
                    {
                        List <VDI> destVdiList = new List <VDI>();
                        foreach (VBD vbd in tempVm.Connection.ResolveAll <VBD>(tempVm.VBDs).ToArray())
                        {
                            if (HalsignHelpers.IsCDROM(vbd))
                            {
                                continue;
                            }
                            VDI vdi = tempVm.Connection.Resolve(vbd.VDI);
                            SR  sr  = tempVm.Connection.Resolve(vdi.SR);
                            if (vdi != null && vdi.Show(true) && !string.IsNullOrEmpty(vdi.uuid) && (sr != null && sr.uuid == this.selected_sr_uuid))
                            {
                                if (null != vdi.uuid && !vdi.uuid.Equals(""))
                                {
                                    destVdiList.Add(vdi);
                                }
                            }
                        }
                        if (sourceVdiList.Count == destVdiList.Count)
                        {
                            int vdiiNo = 0;
                            foreach (VDI vdii in destVdiList)
                            {
                                if (vdii.other_config.ContainsKey("src_vdi_uuid"))
                                {
                                    foreach (string uuid in sourceVdiList)
                                    {
                                        if (vdii.other_config["src_vdi_uuid"].Equals(uuid))
                                        {
                                            vdiiNo++;
                                        }
                                    }
                                }
                            }
                            if (vdiiNo == destVdiList.Count)
                            {
                                TreeNode nodeTemp = new TreeNode(tempVm.name_label);
                                nodeTemp.ImageIndex         = 999;
                                nodeTemp.SelectedImageIndex = 999;
                                nodeTemp.Tag = new ReplicatedVmState(tempVm.uuid, tempVm.power_state == vm_power_state.Running);
                                nodeSelectedVM.Nodes.Add(nodeTemp);
                            }
                        }
                    }
                }
                index++;
            }
        }