@Override public Answer execute( final CheckNetworkCommand command, final CitrixResourceBase citrixResourceBase) { if (s_logger.isDebugEnabled()) { s_logger.debug("Checking if network name setup is done on the resource"); } final List<PhysicalNetworkSetupInfo> infoList = command.getPhysicalNetworkInfoList(); try { boolean errorout = false; String msg = ""; for (final PhysicalNetworkSetupInfo info : infoList) { if (!citrixResourceBase.isNetworkSetupByName(info.getGuestNetworkName())) { msg = "For Physical Network id:" + info.getPhysicalNetworkId() + ", Guest Network is not configured on the backend by name " + info.getGuestNetworkName(); errorout = true; break; } if (!citrixResourceBase.isNetworkSetupByName(info.getPrivateNetworkName())) { msg = "For Physical Network id:" + info.getPhysicalNetworkId() + ", Private Network is not configured on the backend by name " + info.getPrivateNetworkName(); errorout = true; break; } if (!citrixResourceBase.isNetworkSetupByName(info.getPublicNetworkName())) { msg = "For Physical Network id:" + info.getPhysicalNetworkId() + ", Public Network is not configured on the backend by name " + info.getPublicNetworkName(); errorout = true; break; } /*if(!isNetworkSetupByName(info.getStorageNetworkName())){ msg = "For Physical Network id:"+ info.getPhysicalNetworkId() + ", Storage Network is not configured on the backend by name " + info.getStorageNetworkName(); errorout = true; break; }*/ } if (errorout) { s_logger.error(msg); return new CheckNetworkAnswer(command, false, msg); } else { return new CheckNetworkAnswer(command, true, "Network Setup check by names is done"); } } catch (final XenAPIException e) { final String msg = "CheckNetworkCommand failed with XenAPIException:" + e.toString() + " host:" + citrixResourceBase.getHost().getUuid(); s_logger.warn(msg, e); return new CheckNetworkAnswer(command, false, msg); } catch (final Exception e) { final String msg = "CheckNetworkCommand failed with Exception:" + e.getMessage() + " host:" + citrixResourceBase.getHost().getUuid(); s_logger.warn(msg, e); return new CheckNetworkAnswer(command, false, msg); } }
@Override public Answer execute(final ScaleVmCommand command, final CitrixResourceBase citrixResourceBase) { final VirtualMachineTO vmSpec = command.getVirtualMachine(); final String vmName = vmSpec.getName(); try { final Connection conn = citrixResourceBase.getConnection(); final Set<VM> vms = VM.getByNameLabel(conn, vmName); final Host host = Host.getByUuid(conn, citrixResourceBase.getHost().getUuid()); // If DMC is not enable then don't execute this command. if (!citrixResourceBase.isDmcEnabled(conn, host)) { throw new CloudRuntimeException( "Unable to scale the vm: " + vmName + " as DMC - Dynamic memory control is not enabled for the XenServer:" + citrixResourceBase.getHost().getUuid() + " ,check your license and hypervisor version."); } if (vms == null || vms.size() == 0) { s_logger.info( "No running VM " + vmName + " exists on XenServer" + citrixResourceBase.getHost().getUuid()); return new ScaleVmAnswer(command, false, "VM does not exist"); } // stop vm which is running on this host or is in halted state final Iterator<VM> iter = vms.iterator(); while (iter.hasNext()) { final VM vm = iter.next(); final VM.Record vmr = vm.getRecord(conn); if (vmr.powerState == VmPowerState.HALTED || vmr.powerState == VmPowerState.RUNNING && !citrixResourceBase.isRefNull(vmr.residentOn) && !vmr.residentOn.getUuid(conn).equals(citrixResourceBase.getHost().getUuid())) { iter.remove(); } } for (final VM vm : vms) { vm.getRecord(conn); try { citrixResourceBase.scaleVM(conn, vm, vmSpec, host); } catch (final Exception e) { final String msg = "Catch exception " + e.getClass().getName() + " when scaling VM:" + vmName + " due to " + e.toString(); s_logger.debug(msg); return new ScaleVmAnswer(command, false, msg); } } final String msg = "scaling VM " + vmName + " is successful on host " + host; s_logger.debug(msg); return new ScaleVmAnswer(command, true, msg); } catch (final XenAPIException e) { final String msg = "Upgrade Vm " + vmName + " fail due to " + e.toString(); s_logger.warn(msg, e); return new ScaleVmAnswer(command, false, msg); } catch (final XmlRpcException e) { final String msg = "Upgrade Vm " + vmName + " fail due to " + e.getMessage(); s_logger.warn(msg, e); return new ScaleVmAnswer(command, false, msg); } catch (final Exception e) { final String msg = "Unable to upgrade " + vmName + " due to " + e.getMessage(); s_logger.warn(msg, e); return new ScaleVmAnswer(command, false, msg); } }