private void datagridview_SelectedIndexChanged(object sender, EventArgs e) { if (dataGridView1.SelectedRows.Count == 0) { DeleteBondButton.Enabled = false; return; } PIF pif = ((PIFRow)dataGridView1.SelectedRows[0]).Pif; if (pif == null) { DeleteBondButton.Enabled = false; return; } var bondMasterOf = pif.BondMasterOf(); DeleteBondButton.Enabled = bondMasterOf != null && !bondMasterOf.Locked; }
/// <summary> /// Returns the bond that the master is using as its management interface, or null if /// such a thing cannot be found. /// </summary> /// <param name="conn"></param> /// <returns></returns> public static Bond GetMasterManagementBond(IXenConnection conn) { PIF pif = GetMasterManagementPIF(conn); return(pif == null ? null : pif.BondMasterOf()); }
protected sealed override void ExecuteCore(SelectedItemCollection selection) { //It only supports one item selected for now Trace.Assert(selection.Count == 1); XenAPI.Network network = (XenAPI.Network)selection.FirstAsXenObject; List <PIF> pifs = network.Connection.ResolveAll(network.PIFs); if (pifs.Count == 0) { // Should never happen as long as the caller is enabling the button correctly, but // it's possible in a tiny window across disconnecting. log.Error("Network has no PIFs"); return; } // We just want one, so that we can name it. PIF pif = pifs[0]; string msg = string.Format(Messages.DELETE_BOND_MESSAGE, pif.Name()); bool will_disturb_primary = NetworkingHelper.ContainsPrimaryManagement(pifs); bool will_disturb_secondary = NetworkingHelper.ContainsSecondaryManagement(pifs); if (will_disturb_primary) { Pool pool = Helpers.GetPool(network.Connection); if (pool != null && pool.ha_enabled) { using (var dlg = new ErrorDialog(string.Format(Messages.BOND_DELETE_HA_ENABLED, pif.Name(), pool.Name())) { WindowTitle = Messages.DELETE_BOND }) { dlg.ShowDialog(Parent); } return; } string message = string.Format(will_disturb_secondary ? Messages.BOND_DELETE_WILL_DISTURB_BOTH : Messages.BOND_DELETE_WILL_DISTURB_PRIMARY, msg); DialogResult result; using (var dlg = new WarningDialog(message, new ThreeButtonDialog.TBDButton(Messages.BOND_DELETE_CONTINUE, DialogResult.OK), ThreeButtonDialog.ButtonCancel) { HelpName = "NetworkingConfigWarning", WindowTitle = Messages.DELETE_BOND }) { result = dlg.ShowDialog(Parent); } if (DialogResult.OK != result) { return; } } else if (will_disturb_secondary) { DialogResult dialogResult; using (var dlg = new WarningDialog(string.Format(Messages.BOND_DELETE_WILL_DISTURB_SECONDARY, msg), ThreeButtonDialog.ButtonOK, ThreeButtonDialog.ButtonCancel)) { dialogResult = dlg.ShowDialog(Parent); } if (DialogResult.OK != dialogResult) { return; } } else { DialogResult dialogResult; using (var dlg = new WarningDialog(msg, new ThreeButtonDialog.TBDButton(Messages.OK, DialogResult.OK, selected: true), ThreeButtonDialog.ButtonCancel)) { dialogResult = dlg.ShowDialog(Parent); } if (DialogResult.OK != dialogResult) { return; } } // The UI shouldn't offer deleting a bond in this case, but let's make sure we've // done the right thing and that the bond hasn't been deleted in the meantime. (CA-27436). Bond bond = pif.BondMasterOf(); if (bond != null) { new Actions.DestroyBondAction(bond).RunAsync(); } }