예제 #1
0
        protected override bool CanExecuteCore(SelectedItemCollection selection)
        {
            if (selection.AllItemsAre <IStorageLinkObject>())
            {
                StorageLinkConnection con = ((IStorageLinkObject)selection.First).StorageLinkConnection;

                // check all selected SL items are on the same SL connection.
                if (con != null &&
                    con.ConnectionState == StorageLinkConnectionState.Connected &&
                    selection.AllItemsAre <IStorageLinkObject>(s => s.StorageLinkConnection.Equals(con)))
                {
                    return(true);
                }
            }
            return(false);
        }
예제 #2
0
 protected override bool CanExecuteCore(SelectedItemCollection selection)
 {
     // Can execute criteria: A selection of VMs in the same pool which has CBT feature licensed, where at least one VM having CBT enabled
     return(selection.AllItemsAre <VM>(CbtLicensed) &&
            selection.GetConnectionOfAllItems() != null &&
            selection.AtLeastOneXenObjectCan <VM>(CanExecute));
 }
예제 #3
0
 protected override void ExecuteCore(SelectedItemCollection selection)
 {
     if (selection != null && selection.AllItemsAre<IXenObject>(x => x is Host || x is Pool))
         MainWindowCommandInterface.ShowForm(typeof(BugToolWizard), selection.AsXenObjects<IXenObject>().ToArray());
     else
         MainWindowCommandInterface.ShowForm(typeof(BugToolWizard));
 }
            protected override bool CanExecuteCore(SelectedItemCollection selection)
            {
                if (!selection.AllItemsAre <VM>())
                {
                    return(false);
                }

                IXenConnection connection = null;

                bool atLeaseOneCanExecute = false;

                foreach (SelectedItem item in selection)
                {
                    VM vm = (VM)item.XenObject;

                    // all VMs must be on the same connection
                    if (connection != null && vm.Connection != connection)
                    {
                        return(false);
                    }

                    if (CanExecute(item.XenObject as VM))
                    {
                        atLeaseOneCanExecute = true;
                    }
                }
                return(atLeaseOneCanExecute);
            }
예제 #5
0
            public override bool IsValid(SelectedItemCollection selection)
            {
                List <string> types = new List <string>();

                if (selection.AllItemsAre <IXenObject>())
                {
                    foreach (SelectedItem item in selection)
                    {
                        string name = item.XenObject.GetType().Name;

                        VM vm = item.XenObject as VM;

                        if (vm != null && vm.is_a_template)
                        {
                            name = vm.is_a_snapshot ? "snapshot" : "template";
                        }

                        if (!types.Contains(name))
                        {
                            types.Add(name);
                        }
                    }
                }

                if (types.Count > 1)
                {
                    // if types only contains a mix of vms and templates then don't use this Builder. MixedVMsAndTemplates should be used instead.
                    types.Remove("VM");
                    types.Remove("template");
                    return(types.Count > 0);
                }
                return(false);
            }
예제 #6
0
 protected override bool CanExecuteCore(SelectedItemCollection selection)
 {
     if (selection.AllItemsAre <DockerContainer>())
     {
         return(selection.AtLeastOneXenObjectCan <DockerContainer>(CanExecute));
     }
     return(false);
 }
예제 #7
0
 protected override bool CanExecuteCore(SelectedItemCollection selection)
 {
     if (selection.AllItemsAre <VM>() && new CrossPoolMoveVMCommand(MainWindowCommandInterface, selection).CanExecute())
     {
         return(true);
     }
     return(selection.ContainsOneItemOfType <VM>() && selection.AtLeastOneXenObjectCan <VM>(CanExecute));
 }
예제 #8
0
        protected override bool CanExecuteCore(SelectedItemCollection selection)
        {
            if (!selection.AllItemsAre <Host>() || selection.Count > 1)
            {
                return(false);
            }

            return(CanExecute(selection.AsXenObjects <Host>().FirstOrDefault()));
        }
예제 #9
0
        protected override bool CanExecuteCore(SelectedItemCollection selection)
        {
            Host hostAncestor = selection.HostAncestorFromConnection;
            Pool poolAncestor = selection.PooAncestorFromConnection;

            if ((poolAncestor != null || hostAncestor != null) && //CA-61207: this check ensures there's no cross-pool selection
                (selection.FirstIs <Pool>() || selection.FirstIs <Host>() || selection.FirstIsRealVM || selection.FirstIs <VM_appliance>()))
            {
                if (selection.AllItemsAre <VM>())
                {
                    return(selection.AtLeastOneXenObjectCan <VM>(CanExportVm));
                }

                if (selection.AllItemsAre <VM_appliance>())
                {
                    if (selection.Count != 1)
                    {
                        return(false);
                    }

                    var appliance = ((VM_appliance)selection.FirstAsXenObject);
                    return(appliance.VMs.TrueForAll(vmRef =>
                    {
                        var vm = appliance.Connection.Resolve(vmRef);
                        return vm != null &&
                        CanExportVm(vm);
                    }));
                }

                if ((hostAncestor != null && hostAncestor.enabled && hostAncestor.IsLive && selection[0].Connection.IsConnected) ||
                    (poolAncestor != null && Helpers.PoolHasEnabledHosts(poolAncestor)))
                {
                    var vms = selection.FirstAsXenObject.Connection.Cache.VMs.Where(vm => vm.is_a_real_vm && CanExportVm(vm) && vm.Show(Properties.Settings.Default.ShowHiddenVMs)).ToList();
                    if (vms.Count > 0)
                    {
                        return(vms.Any(CanExportVm));
                    }
                }
            }

            return(false);
        }
예제 #10
0
        protected override void ExecuteCore(SelectedItemCollection selection)
        {
            var appsToShutDown = new List <VM_appliance>();

            if (selection.AllItemsAre <VM_appliance>())
            {
                appsToShutDown = (from IXenObject obj in selection.AsXenObjects()
                                  let app = (VM_appliance)obj
                                            where CanShutDownAppliance(app)
                                            select app).ToList();
            }
            else if (selection.AllItemsAre <VM>())
            {
                var firstVm = (VM)selection.First;
                appsToShutDown.Add(firstVm.Connection.Resolve(firstVm.appliance));
            }

            foreach (var app in appsToShutDown)
            {
                (new ShutDownApplianceAction(app)).RunAsync();
            }
        }
예제 #11
0
        protected override bool CanExecuteCore(SelectedItemCollection selection)
        {
            if (selection.AllItemsAre <VM_appliance>())
            {
                return(selection.AtLeastOneXenObjectCan <VM_appliance>(CanShutDownAppliance));
            }

            if (selection.AllItemsAre <VM>())
            {
                var firstVm = (VM)selection.First;
                if (firstVm.IsAssignedToVapp)
                {
                    var firstVapp = firstVm.appliance;
                    if (selection.AsXenObjects <VM>().All(vm => vm.appliance != null && vm.appliance.opaque_ref == firstVapp.opaque_ref))
                    {
                        return(CanShutDownAppliance(firstVm.Connection.Resolve(firstVapp)));
                    }
                }
            }

            return(false);
        }
예제 #12
0
        protected override bool CanExecuteCore(SelectedItemCollection selection)
        {
            // Can execute criteria: A selection of VMs in the same pool, where at least one doesn't have PVS read caching enabled
            if (selection.Any() && selection.AllItemsAre <VM>() && selection.GetConnectionOfAllItems() != null)
            {
                var vms = selection.AsXenObjects <VM>();
                if (vms.Any(vm => vm.PvsProxy != null))
                {
                    return(true);
                }
            }

            return(false);
        }
예제 #13
0
        protected override bool CanExecuteCore(SelectedItemCollection selection)
        {
            if (!selection.AllItemsAre <Host>())
            {
                return(false);
            }

            foreach (SelectedItem item in selection)
            {
                if (CanExecute((Host)item.XenObject))
                {
                    return(true);
                }
            }
            return(false);
        }
예제 #14
0
        protected override bool CanExecuteCore(SelectedItemCollection selection)
        {
            if (selection.AllItemsAre <IStorageLinkObject>())
            {
                var connections = new List <StorageLinkConnection>();

                foreach (IStorageLinkObject s in selection.AsXenObjects <IStorageLinkObject>())
                {
                    if (s.StorageLinkConnection.ConnectionState != StorageLinkConnectionState.Connected)
                    {
                        return(false);
                    }
                }
                return(true);
            }
            return(false);
        }
예제 #15
0
        protected override void ExecuteCore(SelectedItemCollection selection)
        {
            var dockerContainers = new List <DockerContainer>();

            if (selection.AllItemsAre <DockerContainer>())
            {
                dockerContainers = (from IXenObject obj in selection.AsXenObjects()
                                    let container = (DockerContainer)obj
                                                    where CanExecute(container)
                                                    select container).ToList();
            }

            foreach (var container in dockerContainers)
            {
                (new StopDockerContainerAction(container)).RunAsync();
            }
        }
        protected override bool CanExecuteCore(SelectedItemCollection selection)
        {
            // you can only remove a storagelink server from XC if there isn't an SR using it.

            List <StorageLinkConnection> slCons = new List <StorageLinkConnection>();

            if (selection.AllItemsAre <IStorageLinkObject>())
            {
                foreach (IStorageLinkObject s in selection.AsXenObjects())
                {
                    if (!slCons.Contains(s.StorageLinkConnection))
                    {
                        slCons.Add(s.StorageLinkConnection);
                    }
                }
            }
            return(slCons.Count == 1);
        }
예제 #17
0
        protected override bool CanExecuteCore(SelectedItemCollection selection)
        {
            // Must have a selection, of all VMs
            if (selection.Any() && selection.AllItemsAre <VM>())
            {
                // Must all be in the same pool, which must have at least one PVS site
                var connection = selection.GetConnectionOfAllItems();
                if (connection == null || !connection.Cache.PVS_sites.Any())
                {
                    return(false);
                }

                // At least one must not currently have a PVS Proxy
                var vms = selection.AsXenObjects <VM>();
                if (vms.Any(vm => vm.PvsProxy() == null))
                {
                    return(true);
                }
            }

            return(false);
        }
예제 #18
0
 protected override bool CanExecuteCore(SelectedItemCollection selection)
 {
     if (selection.AllItemsAre <Host>())
     {
         // all hosts must be in same pool.
         Pool commonPool = null;
         foreach (Host host in selection.AsXenObjects <Host>())
         {
             if (!CanExecute(host))
             {
                 return(false);
             }
             Pool pool = Helpers.GetPool(host.Connection);
             if (commonPool != null && !pool.Equals(commonPool))
             {
                 return(false);
             }
             commonPool = pool;
         }
         return(true);
     }
     return(false);
 }
예제 #19
0
        protected override bool CanExecuteCore(SelectedItemCollection selection)
        {
            if (!selection.AllItemsAre <Host>() || selection.Count > 1)
            {
                return(false);
            }

            var host = selection.AsXenObjects <Host>().FirstOrDefault();

            if (host == null)
            {
                return(false);
            }

            if (!Helpers.StockholmOrGreater(host))
            {
                return(false);
            }

            var pool = Helpers.GetPoolOfOne(host.Connection);

            return(pool != null && !pool.ha_enabled);
        }
예제 #20
0
 protected override bool CanExecuteCore(SelectedItemCollection selection)
 {
     return(selection.AllItemsAre <Host>() && selection.AtLeastOneXenObjectCan <Host>(CanExecute));
 }
예제 #21
0
 public override bool IsValid(SelectedItemCollection selection)
 {
     return(selection.AllItemsAre <GroupingTag>(IsValid) && selection.Count > 1);
 }
 protected override bool CanExecuteCore(SelectedItemCollection selection)
 {
     return(selection.AllItemsAre <Host>() && selection.Any(item => ((Host)item.XenObject).IsLive()));
 }
예제 #23
0
 protected override bool CanExecuteCore(SelectedItemCollection selection)
 {
     return(selection.AllItemsAre <IStorageLinkObject>());
 }
예제 #24
0
 protected override bool CanExecuteCore(SelectedItemCollection selection)
 {
     return(selection.AllItemsAre <VM>(CBTDisabled) &&
            (new CrossPoolMoveVMCommand(MainWindowCommandInterface, selection).CanExecute() ||
             selection.ContainsOneItemOfType <VM>(CanExecute)));
 }
예제 #25
0
 protected override bool CanExecuteCore(SelectedItemCollection selection)
 {
     return(selection.AllItemsAre <VM>() && selection.AtLeastOneXenObjectCan <VM>(CanExecute) &&
            (selection.PoolAncestor != null || selection.HostAncestor != null)); //CA-61207: this check ensures there's no cross-pool selection
 }
예제 #26
0
 public override bool IsValid(SelectedItemCollection selection)
 {
     return(selection.AllItemsAre <VM_appliance>());
 }
예제 #27
0
 public override bool IsValid(SelectedItemCollection selection)
 {
     return(selection.Count > 1 && selection.AllItemsAre <SR>());
 }
예제 #28
0
 public override bool IsValid(SelectedItemCollection selection)
 {
     return(selection.AllItemsAre <DockerContainer>());
 }
예제 #29
0
 protected override bool CanExecuteCore(SelectedItemCollection selection)
 {
     return(selection.AllItemsAre <GroupingTag>(CanExecute));
 }
예제 #30
0
 protected override bool CanExecuteCore(SelectedItemCollection selection)
 {
     return(selection.AllItemsAre <Folder>(CanExecute));
 }