From c11d702cac1b857c0a84045934e1f8d3ed668f0e Mon Sep 17 00:00:00 2001 From: David Nalley Date: Fri, 10 Feb 2012 20:34:44 -0500 Subject: [PATCH] fixing some more formatting issues --- .../CloudZonesComputingResource.java | 388 +++--- .../computing/FakeComputingResource.java | 1075 ++++++++--------- .../resource/computing/KVMGuestOsMapper.java | 88 +- .../agent/resource/computing/KVMHABase.java | 46 +- .../resource/computing/KVMHAChecker.java | 19 +- .../resource/computing/KVMHAMonitor.java | 66 +- .../computing/LibvirtCapXMLParser.java | 180 ++- .../resource/computing/LibvirtConnection.java | 24 +- .../computing/LibvirtDomainXMLParser.java | 296 +++-- .../resource/computing/LibvirtNetworkDef.java | 267 ++-- .../computing/LibvirtStoragePoolDef.java | 23 +- .../LibvirtStoragePoolXMLParser.java | 134 +- .../computing/LibvirtStorageVolumeDef.java | 17 +- .../LibvirtStorageVolumeXMLParser.java | 124 +- .../resource/computing/LibvirtVMDef.java | 307 +++-- .../resource/computing/LibvirtXMLParser.java | 47 +- 16 files changed, 1604 insertions(+), 1497 deletions(-) diff --git a/agent/src/com/cloud/agent/resource/computing/CloudZonesComputingResource.java b/agent/src/com/cloud/agent/resource/computing/CloudZonesComputingResource.java index 722622df123..5c90b79cbf7 100644 --- a/agent/src/com/cloud/agent/resource/computing/CloudZonesComputingResource.java +++ b/agent/src/com/cloud/agent/resource/computing/CloudZonesComputingResource.java @@ -1,6 +1,6 @@ /** * * Copyright (C) 2011 Citrix Systems, Inc. All rights reserved -* + * * * This software is licensed under the GNU General Public License v3 or later. * @@ -31,10 +31,8 @@ * */ - package com.cloud.agent.resource.computing; - import java.net.InetAddress; import java.util.ArrayList; @@ -42,7 +40,6 @@ import java.util.List; import java.util.Map; import java.util.UUID; - import javax.naming.ConfigurationException; import org.apache.log4j.Logger; @@ -50,8 +47,6 @@ import org.libvirt.Connect; import org.libvirt.Domain; import org.libvirt.LibvirtException; - - import com.cloud.agent.api.Answer; import com.cloud.agent.api.Command; import com.cloud.agent.api.StartAnswer; @@ -67,7 +62,6 @@ import com.cloud.agent.api.to.VirtualMachineTO; import com.cloud.agent.dhcp.DhcpSnooper; import com.cloud.agent.dhcp.DhcpSnooperImpl; - import com.cloud.agent.resource.computing.LibvirtComputingResource; import com.cloud.agent.resource.computing.LibvirtConnection; import com.cloud.agent.resource.computing.LibvirtVMDef; @@ -76,7 +70,6 @@ import com.cloud.agent.resource.computing.LibvirtVMDef.InterfaceDef; import com.cloud.agent.vmdata.JettyVmDataServer; import com.cloud.agent.vmdata.VmDataServer; - import com.cloud.network.Networks.TrafficType; import com.cloud.utils.Pair; import com.cloud.vm.VirtualMachine; @@ -84,229 +77,234 @@ import com.cloud.vm.VirtualMachine.State; /** * Logic specific to the Cloudzones feature - * - * } + * + * } **/ - public class CloudZonesComputingResource extends LibvirtComputingResource { - private static final Logger s_logger = Logger.getLogger(CloudZonesComputingResource.class); - protected DhcpSnooper _dhcpSnooper; - String _parent; - long _dhcpTimeout; - protected String _hostIp; - protected String _hostMacAddress; - protected VmDataServer _vmDataServer = new JettyVmDataServer(); + private static final Logger s_logger = Logger + .getLogger(CloudZonesComputingResource.class); + protected DhcpSnooper _dhcpSnooper; + String _parent; + long _dhcpTimeout; + protected String _hostIp; + protected String _hostMacAddress; + protected VmDataServer _vmDataServer = new JettyVmDataServer(); + private void setupDhcpManager(Connect conn, String bridgeName) { - private void setupDhcpManager(Connect conn, String bridgeName) { + _dhcpSnooper = new DhcpSnooperImpl(bridgeName, _dhcpTimeout); - _dhcpSnooper = new DhcpSnooperImpl(bridgeName, _dhcpTimeout); + List> macs = new ArrayList>(); + try { + int[] domainIds = conn.listDomains(); + for (int i = 0; i < domainIds.length; i++) { + Domain vm = conn.domainLookupByID(domainIds[i]); + if (vm.getName().startsWith("i-")) { + List nics = getInterfaces(conn, vm.getName()); + InterfaceDef nic = nics.get(0); + macs.add(new Pair(nic.getMacAddress(), vm + .getName())); + } + } + } catch (LibvirtException e) { + s_logger.debug("Failed to get MACs: " + e.toString()); + } - List> macs = new ArrayList>(); - try { - int[] domainIds = conn.listDomains(); - for (int i = 0; i < domainIds.length; i++) { - Domain vm = conn.domainLookupByID(domainIds[i]); - if (vm.getName().startsWith("i-")) { - List nics = getInterfaces(conn, vm.getName()); - InterfaceDef nic = nics.get(0); - macs.add(new Pair(nic.getMacAddress(), vm.getName())); - } - } - } catch (LibvirtException e) { - s_logger.debug("Failed to get MACs: " + e.toString()); - } + _dhcpSnooper.initializeMacTable(macs); + } - _dhcpSnooper.initializeMacTable(macs); - } + @Override + public boolean configure(String name, Map params) + throws ConfigurationException { + boolean success = super.configure(name, params); + if (!success) { + return false; + } - @Override - public boolean configure(String name, Map params) - throws ConfigurationException { - boolean success = super.configure(name, params); - if (!success) { - return false; - } + _parent = (String) params.get("mount.path"); - _parent = (String)params.get("mount.path"); + try { + _dhcpTimeout = Long.parseLong((String) params.get("dhcp.timeout")); + } catch (Exception e) { + _dhcpTimeout = 1200000; + } - try { - _dhcpTimeout = Long.parseLong((String)params.get("dhcp.timeout")); - } catch (Exception e) { - _dhcpTimeout = 1200000; - } + _hostIp = (String) params.get("host.ip"); + _hostMacAddress = (String) params.get("host.mac.address"); - _hostIp = (String)params.get("host.ip"); - _hostMacAddress = (String)params.get("host.mac.address"); + try { + Connect conn; + conn = LibvirtConnection.getConnection(); + setupDhcpManager(conn, _guestBridgeName); + } catch (LibvirtException e) { + s_logger.debug("Failed to get libvirt connection:" + e.toString()); + return false; + } - try { - Connect conn; - conn = LibvirtConnection.getConnection(); - setupDhcpManager(conn, _guestBridgeName); - } catch (LibvirtException e) { - s_logger.debug("Failed to get libvirt connection:" + e.toString()); - return false; - } + _dhcpSnooper.configure(name, params); + _vmDataServer.configure(name, params); - _dhcpSnooper.configure(name, params); - _vmDataServer.configure(name, params); + return true; + } - return true; - } + @Override + protected synchronized StartAnswer execute(StartCommand cmd) { + VirtualMachineTO vmSpec = cmd.getVirtualMachine(); + String vmName = vmSpec.getName(); + LibvirtVMDef vm = null; - @Override - protected synchronized StartAnswer execute(StartCommand cmd) { - VirtualMachineTO vmSpec = cmd.getVirtualMachine(); - String vmName = vmSpec.getName(); - LibvirtVMDef vm = null; + State state = State.Stopped; + Connect conn = null; + try { + conn = LibvirtConnection.getConnection(); + synchronized (_vms) { + _vms.put(vmName, State.Starting); + } - State state = State.Stopped; - Connect conn = null; - try { - conn = LibvirtConnection.getConnection(); - synchronized (_vms) { - _vms.put(vmName, State.Starting); - } + vm = createVMFromSpec(vmSpec); - vm = createVMFromSpec(vmSpec); + createVbd(conn, vmSpec, vmName, vm); - createVbd(conn, vmSpec, vmName, vm); + createVifs(conn, vmSpec, vm); - createVifs(conn, vmSpec, vm); + s_logger.debug("starting " + vmName + ": " + vm.toString()); + startDomain(conn, vmName, vm.toString()); - s_logger.debug("starting " + vmName + ": " + vm.toString()); - startDomain(conn, vmName, vm.toString()); + NicTO[] nics = vmSpec.getNics(); + for (NicTO nic : nics) { + if (nic.isSecurityGroupEnabled()) { + if (vmSpec.getType() != VirtualMachine.Type.User) { + default_network_rules_for_systemvm(conn, vmName); + } else { + nic.setIp(null); + default_network_rules(conn, vmName, nic, vmSpec.getId()); + } + } + } + // Attach each data volume to the VM, if there is a deferred + // attached disk + for (DiskDef disk : vm.getDevices().getDisks()) { + if (disk.isAttachDeferred()) { + attachOrDetachDevice(conn, true, vmName, disk.toString()); + } + } - NicTO[] nics = vmSpec.getNics(); - for (NicTO nic : nics) { - if (nic.isSecurityGroupEnabled()) { - if (vmSpec.getType() != VirtualMachine.Type.User) { - default_network_rules_for_systemvm(conn, vmName); - } else { - nic.setIp(null); - default_network_rules(conn, vmName, nic, vmSpec.getId()); - } - } - } + if (vmSpec.getType() == VirtualMachine.Type.User) { + for (NicTO nic : nics) { + if (nic.getType() == TrafficType.Guest) { + InetAddress ipAddr = _dhcpSnooper.getIPAddr( + nic.getMac(), vmName); + if (ipAddr == null) { + s_logger.debug("Failed to get guest DHCP ip, stop it"); + StopCommand stpCmd = new StopCommand(vmName); + execute(stpCmd); + return new StartAnswer(cmd, + "Failed to get guest DHCP ip, stop it"); + } + s_logger.debug(ipAddr); + nic.setIp(ipAddr.getHostAddress()); - // Attach each data volume to the VM, if there is a deferred attached disk - for (DiskDef disk : vm.getDevices().getDisks()) { - if (disk.isAttachDeferred()) { - attachOrDetachDevice(conn, true, vmName, disk.toString()); - } - } + post_default_network_rules(conn, vmName, nic, + vmSpec.getId(), _dhcpSnooper.getDhcpServerIP(), + _hostIp, _hostMacAddress); + _vmDataServer.handleVmStarted(cmd.getVirtualMachine()); + } + } + } - if (vmSpec.getType() == VirtualMachine.Type.User) { - for (NicTO nic: nics) { - if (nic.getType() == TrafficType.Guest) { - InetAddress ipAddr = _dhcpSnooper.getIPAddr(nic.getMac(), vmName); - if (ipAddr == null) { - s_logger.debug("Failed to get guest DHCP ip, stop it"); - StopCommand stpCmd = new StopCommand(vmName); - execute(stpCmd); - return new StartAnswer(cmd, "Failed to get guest DHCP ip, stop it"); - } - s_logger.debug(ipAddr); - nic.setIp(ipAddr.getHostAddress()); + state = State.Running; + return new StartAnswer(cmd); + } catch (Exception e) { + s_logger.warn("Exception ", e); + if (conn != null) { + handleVmStartFailure(conn, vmName, vm); + } + return new StartAnswer(cmd, e.getMessage()); + } finally { + synchronized (_vms) { + if (state != State.Stopped) { + _vms.put(vmName, state); + } else { + _vms.remove(vmName); + } + } + } + } - post_default_network_rules(conn, vmName, nic, vmSpec.getId(), _dhcpSnooper.getDhcpServerIP(), _hostIp, _hostMacAddress); - _vmDataServer.handleVmStarted(cmd.getVirtualMachine()); - } - } - } + protected Answer execute(StopCommand cmd) { + final String vmName = cmd.getVmName(); - state = State.Running; - return new StartAnswer(cmd); - } catch (Exception e) { - s_logger.warn("Exception ", e); - if (conn != null) { - handleVmStartFailure(conn, vmName, vm); - } - return new StartAnswer(cmd, e.getMessage()); - } finally { - synchronized (_vms) { - if (state != State.Stopped) { - _vms.put(vmName, state); - } else { - _vms.remove(vmName); - } - } - } - } + Long bytesReceived = new Long(0); + Long bytesSent = new Long(0); - protected Answer execute(StopCommand cmd) { - final String vmName = cmd.getVmName(); + State state = null; + synchronized (_vms) { + state = _vms.get(vmName); + _vms.put(vmName, State.Stopping); + } + try { + Connect conn = LibvirtConnection.getConnection(); - Long bytesReceived = new Long(0); - Long bytesSent = new Long(0); + try { + Domain dm = conn.domainLookupByUUID(UUID + .nameUUIDFromBytes(vmName.getBytes())); + } catch (LibvirtException e) { + state = State.Stopped; + return new StopAnswer(cmd, null, 0, bytesSent, bytesReceived); + } - State state = null; - synchronized(_vms) { - state = _vms.get(vmName); - _vms.put(vmName, State.Stopping); - } - try { - Connect conn = LibvirtConnection.getConnection(); + String macAddress = null; + if (vmName.startsWith("i-")) { + List nics = getInterfaces(conn, vmName); + if (!nics.isEmpty()) { + macAddress = nics.get(0).getMacAddress(); + } + } - try { - Domain dm = conn.domainLookupByUUID(UUID.nameUUIDFromBytes(vmName.getBytes())); - } catch (LibvirtException e) { - state = State.Stopped; - return new StopAnswer(cmd, null, 0, bytesSent, bytesReceived); - } + destroy_network_rules_for_vm(conn, vmName); + String result = stopVM(conn, vmName, defineOps.UNDEFINE_VM); - String macAddress = null; - if (vmName.startsWith("i-")) { - List nics = getInterfaces(conn, vmName); - if (!nics.isEmpty()) { - macAddress = nics.get(0).getMacAddress(); - } - } + try { + cleanupVnet(conn, cmd.getVnet()); + _dhcpSnooper.cleanup(macAddress, vmName); + _vmDataServer.handleVmStopped(cmd.getVmName()); + } catch (Exception e) { - destroy_network_rules_for_vm(conn, vmName); - String result = stopVM(conn, vmName, defineOps.UNDEFINE_VM); + } - try { - cleanupVnet(conn, cmd.getVnet()); - _dhcpSnooper.cleanup(macAddress, vmName); - _vmDataServer.handleVmStopped(cmd.getVmName()); - } catch (Exception e) { + state = State.Stopped; + return new StopAnswer(cmd, result, 0, bytesSent, bytesReceived); + } catch (LibvirtException e) { + return new StopAnswer(cmd, e.getMessage()); + } finally { + synchronized (_vms) { + if (state != null) { + _vms.put(vmName, state); + } else { + _vms.remove(vmName); + } + } + } + } - } + @Override + public Answer executeRequest(Command cmd) { + if (cmd instanceof VmDataCommand) { + return execute((VmDataCommand) cmd); + } else if (cmd instanceof SavePasswordCommand) { + return execute((SavePasswordCommand) cmd); + } + return super.executeRequest(cmd); + } - state = State.Stopped; - return new StopAnswer(cmd, result, 0, bytesSent, bytesReceived); - } catch (LibvirtException e) { - return new StopAnswer(cmd, e.getMessage()); - } finally { - synchronized(_vms) { - if (state != null) { - _vms.put(vmName, state); - } else { - _vms.remove(vmName); - } - } - } - } + protected Answer execute(final VmDataCommand cmd) { + return _vmDataServer.handleVmDataCommand(cmd); + } - @Override - public Answer executeRequest(Command cmd) { - if (cmd instanceof VmDataCommand) { - return execute((VmDataCommand)cmd); - } else if (cmd instanceof SavePasswordCommand) { - return execute ((SavePasswordCommand)cmd); - } - return super.executeRequest(cmd); - } - - protected Answer execute(final VmDataCommand cmd) { - return _vmDataServer.handleVmDataCommand(cmd); - } - - protected Answer execute(final SavePasswordCommand cmd) { - return new Answer(cmd); - } + protected Answer execute(final SavePasswordCommand cmd) { + return new Answer(cmd); + } } diff --git a/agent/src/com/cloud/agent/resource/computing/FakeComputingResource.java b/agent/src/com/cloud/agent/resource/computing/FakeComputingResource.java index 6b919c0fb23..02e70c85039 100644 --- a/agent/src/com/cloud/agent/resource/computing/FakeComputingResource.java +++ b/agent/src/com/cloud/agent/resource/computing/FakeComputingResource.java @@ -18,7 +18,6 @@ package com.cloud.agent.resource.computing; - import java.io.File; import java.io.FileInputStream; import java.io.FileNotFoundException; @@ -109,544 +108,540 @@ import com.cloud.vm.VirtualMachine.State; /** * Pretends to be a computing resource - * + * */ -@Local(value={ServerResource.class}) -public class FakeComputingResource extends ServerResourceBase implements ServerResource { - private static final Logger s_logger = Logger.getLogger(FakeComputingResource.class); - private Map _params; - private VmMgr _vmManager = new MockVmMgr(); - protected HashMap _vms = new HashMap(20); - protected DhcpSnooper _dhcpSnooper = new FakeDhcpSnooper(); - protected VmDataServer _vmDataServer = new JettyVmDataServer(); - - - @Override - public Type getType() { - return Type.Routing; - } - - @Override - public StartupCommand[] initialize() { - Map changes = null; - - - final List info = getHostInfo(); - - final StartupRoutingCommand cmd = new StartupRoutingCommand((Integer)info.get(0), (Long)info.get(1), (Long)info.get(2), (Long)info.get(4), (String)info.get(3), HypervisorType.KVM, RouterPrivateIpStrategy.HostLocal, changes); - fillNetworkInformation(cmd); - cmd.getHostDetails().putAll(getVersionStrings()); - cmd.setCluster(getConfiguredProperty("cluster", "1")); - StoragePoolInfo pi = initializeLocalStorage(); - StartupStorageCommand sscmd = new StartupStorageCommand(); - sscmd.setPoolInfo(pi); - sscmd.setGuid(pi.getUuid()); - sscmd.setDataCenter((String)_params.get("zone")); - sscmd.setResourceType(Storage.StorageResourceType.STORAGE_POOL); - - return new StartupCommand[]{cmd, sscmd}; - - } - - private Map getVersionStrings() { - Map result = new HashMap(); - String hostOs = (String) _params.get("Host.OS"); - String hostOsVer = (String) _params.get("Host.OS.Version"); - String hostOsKernVer = (String) _params.get("Host.OS.Kernel.Version"); - result.put("Host.OS", hostOs==null?"Fedora":hostOs); - result.put("Host.OS.Version", hostOsVer==null?"14":hostOsVer); - result.put("Host.OS.Kernel.Version", hostOsKernVer==null?"2.6.35.6-45.fc14.x86_64":hostOsKernVer); - return result; - } - - protected void fillNetworkInformation(final StartupCommand cmd) { - - cmd.setPrivateIpAddress((String)_params.get("private.ip.address")); - cmd.setPrivateMacAddress((String)_params.get("private.mac.address")); - cmd.setPrivateNetmask((String)_params.get("private.ip.netmask")); - - cmd.setStorageIpAddress((String)_params.get("private.ip.address")); - cmd.setStorageMacAddress((String)_params.get("private.mac.address")); - cmd.setStorageNetmask((String)_params.get("private.ip.netmask")); - cmd.setGatewayIpAddress((String)_params.get("gateway.ip.address")); - - } - - protected StoragePoolInfo initializeLocalStorage() { - String hostIp = (String)_params.get("private.ip.address"); - String localStoragePath = (String)_params.get("local.storage.path"); - String lh = hostIp + localStoragePath; - String uuid = UUID.nameUUIDFromBytes(lh.getBytes()).toString(); - - String capacity = (String)_params.get("local.storage.capacity"); - String available = (String)_params.get("local.storage.avail"); - - return new StoragePoolInfo(uuid, hostIp, localStoragePath, - localStoragePath, StoragePoolType.Filesystem, - Long.parseLong(capacity), Long.parseLong(available)); - - } - - @Override - public PingCommand getCurrentStatus(long id) { - final HashMap newStates = new HashMap(); - _dhcpSnooper.syncIpAddr(); - return new PingRoutingCommand(com.cloud.host.Host.Type.Routing, id, newStates); - } - - @Override - public Answer executeRequest(Command cmd) { - try { - if (cmd instanceof ReadyCommand) { - return execute((ReadyCommand)cmd); - }else if (cmd instanceof ModifySshKeysCommand) { - return execute((ModifySshKeysCommand)cmd);//TODO: remove - } else if (cmd instanceof GetHostStatsCommand) { - return execute((GetHostStatsCommand)cmd); - } else if (cmd instanceof PrimaryStorageDownloadCommand) { - return execute((PrimaryStorageDownloadCommand) cmd); - - } else if (cmd instanceof StopCommand) { - return execute((StopCommand)cmd); - } else if (cmd instanceof GetVmStatsCommand) { - return execute((GetVmStatsCommand)cmd); - } else if (cmd instanceof RebootCommand) { - return execute((RebootCommand)cmd); - } else if (cmd instanceof CheckStateCommand) { - return executeRequest(cmd); - } else if (cmd instanceof CheckHealthCommand) { - return execute((CheckHealthCommand)cmd); - } else if (cmd instanceof PingTestCommand) { - return execute((PingTestCommand)cmd); - } else if (cmd instanceof CheckVirtualMachineCommand) { - return execute((CheckVirtualMachineCommand)cmd); - } else if (cmd instanceof ReadyCommand) { - return execute((ReadyCommand)cmd); - } else if (cmd instanceof StopCommand) { - return execute((StopCommand)cmd); - } else if (cmd instanceof CreateCommand) { - return execute((CreateCommand) cmd); - } else if (cmd instanceof DestroyCommand) { - return execute((DestroyCommand) cmd); - } else if (cmd instanceof PrimaryStorageDownloadCommand) { - return execute((PrimaryStorageDownloadCommand) cmd); - } else if (cmd instanceof GetStorageStatsCommand) { - return execute((GetStorageStatsCommand) cmd); - } else if (cmd instanceof ModifyStoragePoolCommand) { - return execute((ModifyStoragePoolCommand) cmd); - } else if (cmd instanceof SecurityGroupRulesCmd) { - return execute((SecurityGroupRulesCmd) cmd); - } else if (cmd instanceof StartCommand ) { - return execute((StartCommand) cmd); - } else if (cmd instanceof CleanupNetworkRulesCmd) { - return execute((CleanupNetworkRulesCmd)cmd); - } else if (cmd instanceof SavePasswordCommand) { - return execute((SavePasswordCommand)cmd); - } else if (cmd instanceof VmDataCommand) { - return execute((VmDataCommand)cmd); - } else { - s_logger.warn("Unsupported command "); - return Answer.createUnsupportedCommandAnswer(cmd); - } - } catch (final IllegalArgumentException e) { - return new Answer(cmd, false, e.getMessage()); - } - } - - private Answer execute(CleanupNetworkRulesCmd cmd) { - return new Answer(cmd); - } - - private Answer execute(SecurityGroupRulesCmd cmd) { - s_logger.info("Programmed network rules for vm " + cmd.getVmName() + " guestIp=" + cmd.getGuestIp() + ",ingress numrules=" + cmd.getIngressRuleSet().length + ",egress numrules=" + cmd.getEgressRuleSet().length); - return new SecurityGroupRuleAnswer(cmd); - } - - private Answer execute(ModifyStoragePoolCommand cmd) { - long capacity = getConfiguredProperty("local.storage.capacity", 10000000000L); - long used = 10000000L; - long available = capacity - used; - if (cmd.getAdd()) { - - ModifyStoragePoolAnswer answer = new ModifyStoragePoolAnswer(cmd, - capacity, used, new HashMap()); - - if (s_logger.isInfoEnabled()) - s_logger - .info("Sending ModifyStoragePoolCommand answer with capacity: " - + capacity - + ", used: " - + used - + ", available: " + available); - return answer; - } else { - if (s_logger.isInfoEnabled()) - s_logger - .info("ModifyNetfsStoragePoolCmd is not add command, cmd: " - + cmd.toString()); - return new Answer(cmd); - } - } - - private Answer execute(GetStorageStatsCommand cmd) { - return new GetStorageStatsAnswer(cmd, getConfiguredProperty("local.storage.capacity", 100000000000L), 0L); - } - - protected synchronized ReadyAnswer execute(ReadyCommand cmd) { - return new ReadyAnswer(cmd); - } - - private Answer execute(PrimaryStorageDownloadCommand cmd) { - return new PrimaryStorageDownloadAnswer(cmd.getLocalPath(), 16000000L); - } - - private Answer execute(ModifySshKeysCommand cmd) { - return new Answer(cmd, true, null); - } - - @Override - protected String getDefaultScriptsDir() { - return null; - } - - - protected String getConfiguredProperty(String key, String defaultValue) { - String val = (String)_params.get(key); - return val==null?defaultValue:val; - } - - protected Long getConfiguredProperty(String key, Long defaultValue) { - String val = (String)_params.get(key); - - if (val != null) { - Long result = Long.parseLong(val); - return result; - } - return defaultValue; - } - - protected List getHostInfo() { - final ArrayList info = new ArrayList(); - long speed = getConfiguredProperty("cpuspeed", 4000L) ; - long cpus = getConfiguredProperty("cpus", 4L); - long ram = getConfiguredProperty("memory", 16000L*1024L*1024L); - long dom0ram = Math.min(ram/10, 768*1024*1024L); - - - String cap = getConfiguredProperty("capabilities", "hvm"); - info.add((int)cpus); - info.add(speed); - info.add(ram); - info.add(cap); - info.add(dom0ram); - return info; - - } - private Map getSimulatorProperties() throws ConfigurationException { - final File file = PropertiesUtil.findConfigFile("simulator.properties"); - if (file == null) { - throw new ConfigurationException("Unable to find simulator.properties."); - } - - s_logger.info("simulator.properties found at " + file.getAbsolutePath()); - Properties properties = new Properties(); - try { - properties.load(new FileInputStream(file)); - - - final Map params = PropertiesUtil.toMap(properties); - - - return params; - } catch (final FileNotFoundException ex) { - throw new CloudRuntimeException("Cannot find the file: " + file.getAbsolutePath(), ex); - } catch (final IOException ex) { - throw new CloudRuntimeException("IOException in reading " + file.getAbsolutePath(), ex); - } - } - - - - @Override - public boolean configure(String name, Map params) - throws ConfigurationException { - Map simProps = getSimulatorProperties(); - params.putAll(simProps); - setParams(params); - _vmManager.configure(params); - _dhcpSnooper.configure(name, params); - _vmDataServer.configure(name, params); - return true; - } - - public void setParams(Map _params) { - this._params = _params; - } - - public Map getParams() { - return _params; - } - - - protected synchronized StartAnswer execute(StartCommand cmd) { - VmMgr vmMgr = getVmManager(); - - VirtualMachineTO vmSpec = cmd.getVirtualMachine(); - String vmName = vmSpec.getName(); - State state = State.Stopped; - - try { - if (!_vms.containsKey(vmName)) { - synchronized (_vms) { - _vms.put(vmName, State.Starting); - } - - MockVm vm = vmMgr.createVmFromSpec(vmSpec); - vmMgr.createVbd(vmSpec, vmName, vm); - vmMgr.createVif(vmSpec, vmName, vm); - - state = State.Running; - for (NicTO nic: cmd.getVirtualMachine().getNics()) { - if (nic.getType() == TrafficType.Guest) { - InetAddress addr = _dhcpSnooper.getIPAddr(nic.getMac(), vmName); - nic.setIp(addr.getHostAddress()); - } - } - _vmDataServer.handleVmStarted(cmd.getVirtualMachine()); - return new StartAnswer(cmd); - } else { - String msg = "There is already a VM having the same name " - + vmName; - s_logger.warn(msg); - return new StartAnswer(cmd, msg); - } - } catch (Exception ex) { - - } finally { - synchronized (_vms) { - _vms.put(vmName, state); - } - } - return new StartAnswer(cmd); - } - - protected synchronized StopAnswer execute(StopCommand cmd) { - VmMgr vmMgr = getVmManager(); - - StopAnswer answer = null; - String vmName = cmd.getVmName(); - - Integer port = vmMgr.getVncPort(vmName); - Long bytesReceived = null; - Long bytesSent = null; - - - - State state = null; - synchronized (_vms) { - state = _vms.get(vmName); - _vms.put(vmName, State.Stopping); - } - try { - String result = vmMgr.stopVM(vmName, false); - if (result != null) { - s_logger.info("Trying destroy on " + vmName); - if (result == Script.ERR_TIMEOUT) { - result = vmMgr.stopVM(vmName, true); - } - - s_logger.warn("Couldn't stop " + vmName); - - if (result != null) { - return new StopAnswer(cmd, result); - } - } - - answer = new StopAnswer(cmd, null, port, bytesSent, bytesReceived); - - - String result2 = vmMgr.cleanupVnet(cmd.getVnet()); - if (result2 != null) { - result = result2 + (result != null ? ("\n" + result) : ""); - answer = new StopAnswer(cmd, result, port, bytesSent, - bytesReceived); - } - - _dhcpSnooper.cleanup(vmName, null); - - return answer; - } finally { - if (answer == null || !answer.getResult()) { - synchronized (_vms) { - _vms.put(vmName, state); - } - } - } - } - - protected Answer execute(final VmDataCommand cmd) { - return _vmDataServer.handleVmDataCommand(cmd); - } - - protected Answer execute(final SavePasswordCommand cmd) { - return new Answer(cmd); - } - - protected Answer execute(RebootCommand cmd) { - VmMgr vmMgr = getVmManager(); - vmMgr.rebootVM(cmd.getVmName()); - return new RebootAnswer(cmd, "success", 0L, 0L); - } - - private Answer execute(PingTestCommand cmd) { - return new Answer(cmd); - } - - protected GetVmStatsAnswer execute(GetVmStatsCommand cmd) { - return null; - } - - private VmMgr getVmManager() { - return _vmManager; - } - - protected Answer execute(GetHostStatsCommand cmd) { - VmMgr vmMgr = getVmManager(); - return new GetHostStatsAnswer(cmd, vmMgr.getHostCpuUtilization(), vmMgr - .getHostFreeMemory(), vmMgr.getHostTotalMemory(), 0, 0, - "SimulatedHost"); - } - - protected CheckStateAnswer execute(CheckStateCommand cmd) { - State state = getVmManager().checkVmState(cmd.getVmName()); - return new CheckStateAnswer(cmd, state); - } - - protected CheckHealthAnswer execute(CheckHealthCommand cmd) { - return new CheckHealthAnswer(cmd, true); - } - - - protected CheckVirtualMachineAnswer execute( - final CheckVirtualMachineCommand cmd) { - VmMgr vmMgr = getVmManager(); - final String vmName = cmd.getVmName(); - - final State state = vmMgr.checkVmState(vmName); - Integer vncPort = null; - if (state == State.Running) { - vncPort = vmMgr.getVncPort(vmName); - synchronized (_vms) { - _vms.put(vmName, State.Running); - } - } - return new CheckVirtualMachineAnswer(cmd, state, vncPort); - } - - - protected Answer execute(final AttachVolumeCommand cmd) { - return new Answer(cmd); - } - - protected Answer execute(final AttachIsoCommand cmd) { - return new Answer(cmd); - } - - protected CreateAnswer execute(final CreateCommand cmd) { - try { - - VolumeTO vol = new VolumeTO(cmd.getVolumeId(), - Volume.Type.ROOT, - com.cloud.storage.Storage.StoragePoolType.LVM, cmd - .getPool().getUuid(), "dummy", "/mountpoint", - "dummyPath", 1000L, null); - return new CreateAnswer(cmd, vol); - } catch (Throwable th) { - return new CreateAnswer(cmd, new Exception("Unexpected exception")); - } - } - - - - protected HashMap sync() { - Map newStates; - Map oldStates = null; - - HashMap changes = new HashMap(); - - synchronized (_vms) { - newStates = getVmManager().getVmStates(); - oldStates = new HashMap(_vms.size()); - oldStates.putAll(_vms); - - for (Map.Entry entry : newStates.entrySet()) { - String vm = entry.getKey(); - - State newState = entry.getValue(); - State oldState = oldStates.remove(vm); - - if (s_logger.isTraceEnabled()) { - s_logger - .trace("VM " - + vm - + ": xen has state " - + newState - + " and we have state " - + (oldState != null ? oldState.toString() - : "null")); - } - - if (oldState == null) { - _vms.put(vm, newState); - changes.put(vm, newState); - } else if (oldState == State.Starting) { - if (newState == State.Running) { - _vms.put(vm, newState); - } else if (newState == State.Stopped) { - s_logger.debug("Ignoring vm " + vm - + " because of a lag in starting the vm."); - } - } else if (oldState == State.Stopping) { - if (newState == State.Stopped) { - _vms.put(vm, newState); - } else if (newState == State.Running) { - s_logger.debug("Ignoring vm " + vm - + " because of a lag in stopping the vm. "); - } - } else if (oldState != newState) { - _vms.put(vm, newState); - changes.put(vm, newState); - } - } - - for (Map.Entry entry : oldStates.entrySet()) { - String vm = entry.getKey(); - State oldState = entry.getValue(); - - if (s_logger.isTraceEnabled()) { - s_logger.trace("VM " + vm - + " is now missing from xen so reporting stopped"); - } - - if (oldState == State.Stopping) { - s_logger.debug("Ignoring VM " + vm - + " in transition state stopping."); - _vms.remove(vm); - } else if (oldState == State.Starting) { - s_logger.debug("Ignoring VM " + vm - + " in transition state starting."); - } else if (oldState == State.Stopped) { - _vms.remove(vm); - } else { - changes.put(entry.getKey(), State.Stopped); - } - } - } - - return changes; - } - - protected Answer execute(DestroyCommand cmd) { - return new Answer(cmd, true, null); - } +@Local(value = { ServerResource.class }) +public class FakeComputingResource extends ServerResourceBase implements + ServerResource { + private static final Logger s_logger = Logger + .getLogger(FakeComputingResource.class); + private Map _params; + private VmMgr _vmManager = new MockVmMgr(); + protected HashMap _vms = new HashMap(20); + protected DhcpSnooper _dhcpSnooper = new FakeDhcpSnooper(); + protected VmDataServer _vmDataServer = new JettyVmDataServer(); + + @Override + public Type getType() { + return Type.Routing; + } + + @Override + public StartupCommand[] initialize() { + Map changes = null; + + final List info = getHostInfo(); + + final StartupRoutingCommand cmd = new StartupRoutingCommand( + (Integer) info.get(0), (Long) info.get(1), (Long) info.get(2), + (Long) info.get(4), (String) info.get(3), HypervisorType.KVM, + RouterPrivateIpStrategy.HostLocal, changes); + fillNetworkInformation(cmd); + cmd.getHostDetails().putAll(getVersionStrings()); + cmd.setCluster(getConfiguredProperty("cluster", "1")); + StoragePoolInfo pi = initializeLocalStorage(); + StartupStorageCommand sscmd = new StartupStorageCommand(); + sscmd.setPoolInfo(pi); + sscmd.setGuid(pi.getUuid()); + sscmd.setDataCenter((String) _params.get("zone")); + sscmd.setResourceType(Storage.StorageResourceType.STORAGE_POOL); + + return new StartupCommand[] { cmd, sscmd }; + + } + + private Map getVersionStrings() { + Map result = new HashMap(); + String hostOs = (String) _params.get("Host.OS"); + String hostOsVer = (String) _params.get("Host.OS.Version"); + String hostOsKernVer = (String) _params.get("Host.OS.Kernel.Version"); + result.put("Host.OS", hostOs == null ? "Fedora" : hostOs); + result.put("Host.OS.Version", hostOsVer == null ? "14" : hostOsVer); + result.put("Host.OS.Kernel.Version", + hostOsKernVer == null ? "2.6.35.6-45.fc14.x86_64" + : hostOsKernVer); + return result; + } + + protected void fillNetworkInformation(final StartupCommand cmd) { + + cmd.setPrivateIpAddress((String) _params.get("private.ip.address")); + cmd.setPrivateMacAddress((String) _params.get("private.mac.address")); + cmd.setPrivateNetmask((String) _params.get("private.ip.netmask")); + + cmd.setStorageIpAddress((String) _params.get("private.ip.address")); + cmd.setStorageMacAddress((String) _params.get("private.mac.address")); + cmd.setStorageNetmask((String) _params.get("private.ip.netmask")); + cmd.setGatewayIpAddress((String) _params.get("gateway.ip.address")); + + } + + protected StoragePoolInfo initializeLocalStorage() { + String hostIp = (String) _params.get("private.ip.address"); + String localStoragePath = (String) _params.get("local.storage.path"); + String lh = hostIp + localStoragePath; + String uuid = UUID.nameUUIDFromBytes(lh.getBytes()).toString(); + + String capacity = (String) _params.get("local.storage.capacity"); + String available = (String) _params.get("local.storage.avail"); + + return new StoragePoolInfo(uuid, hostIp, localStoragePath, + localStoragePath, StoragePoolType.Filesystem, + Long.parseLong(capacity), Long.parseLong(available)); + + } + + @Override + public PingCommand getCurrentStatus(long id) { + final HashMap newStates = new HashMap(); + _dhcpSnooper.syncIpAddr(); + return new PingRoutingCommand(com.cloud.host.Host.Type.Routing, id, + newStates); + } + + @Override + public Answer executeRequest(Command cmd) { + try { + if (cmd instanceof ReadyCommand) { + return execute((ReadyCommand) cmd); + } else if (cmd instanceof ModifySshKeysCommand) { + return execute((ModifySshKeysCommand) cmd);// TODO: remove + } else if (cmd instanceof GetHostStatsCommand) { + return execute((GetHostStatsCommand) cmd); + } else if (cmd instanceof PrimaryStorageDownloadCommand) { + return execute((PrimaryStorageDownloadCommand) cmd); + + } else if (cmd instanceof StopCommand) { + return execute((StopCommand) cmd); + } else if (cmd instanceof GetVmStatsCommand) { + return execute((GetVmStatsCommand) cmd); + } else if (cmd instanceof RebootCommand) { + return execute((RebootCommand) cmd); + } else if (cmd instanceof CheckStateCommand) { + return executeRequest(cmd); + } else if (cmd instanceof CheckHealthCommand) { + return execute((CheckHealthCommand) cmd); + } else if (cmd instanceof PingTestCommand) { + return execute((PingTestCommand) cmd); + } else if (cmd instanceof CheckVirtualMachineCommand) { + return execute((CheckVirtualMachineCommand) cmd); + } else if (cmd instanceof ReadyCommand) { + return execute((ReadyCommand) cmd); + } else if (cmd instanceof StopCommand) { + return execute((StopCommand) cmd); + } else if (cmd instanceof CreateCommand) { + return execute((CreateCommand) cmd); + } else if (cmd instanceof DestroyCommand) { + return execute((DestroyCommand) cmd); + } else if (cmd instanceof PrimaryStorageDownloadCommand) { + return execute((PrimaryStorageDownloadCommand) cmd); + } else if (cmd instanceof GetStorageStatsCommand) { + return execute((GetStorageStatsCommand) cmd); + } else if (cmd instanceof ModifyStoragePoolCommand) { + return execute((ModifyStoragePoolCommand) cmd); + } else if (cmd instanceof SecurityGroupRulesCmd) { + return execute((SecurityGroupRulesCmd) cmd); + } else if (cmd instanceof StartCommand) { + return execute((StartCommand) cmd); + } else if (cmd instanceof CleanupNetworkRulesCmd) { + return execute((CleanupNetworkRulesCmd) cmd); + } else if (cmd instanceof SavePasswordCommand) { + return execute((SavePasswordCommand) cmd); + } else if (cmd instanceof VmDataCommand) { + return execute((VmDataCommand) cmd); + } else { + s_logger.warn("Unsupported command "); + return Answer.createUnsupportedCommandAnswer(cmd); + } + } catch (final IllegalArgumentException e) { + return new Answer(cmd, false, e.getMessage()); + } + } + + private Answer execute(CleanupNetworkRulesCmd cmd) { + return new Answer(cmd); + } + + private Answer execute(SecurityGroupRulesCmd cmd) { + s_logger.info("Programmed network rules for vm " + cmd.getVmName() + + " guestIp=" + cmd.getGuestIp() + ",ingress numrules=" + + cmd.getIngressRuleSet().length + ",egress numrules=" + + cmd.getEgressRuleSet().length); + return new SecurityGroupRuleAnswer(cmd); + } + + private Answer execute(ModifyStoragePoolCommand cmd) { + long capacity = getConfiguredProperty("local.storage.capacity", + 10000000000L); + long used = 10000000L; + long available = capacity - used; + if (cmd.getAdd()) { + + ModifyStoragePoolAnswer answer = new ModifyStoragePoolAnswer(cmd, + capacity, used, new HashMap()); + + if (s_logger.isInfoEnabled()) + s_logger.info("Sending ModifyStoragePoolCommand answer with capacity: " + + capacity + + ", used: " + + used + + ", available: " + + available); + return answer; + } else { + if (s_logger.isInfoEnabled()) + s_logger.info("ModifyNetfsStoragePoolCmd is not add command, cmd: " + + cmd.toString()); + return new Answer(cmd); + } + } + + private Answer execute(GetStorageStatsCommand cmd) { + return new GetStorageStatsAnswer(cmd, getConfiguredProperty( + "local.storage.capacity", 100000000000L), 0L); + } + + protected synchronized ReadyAnswer execute(ReadyCommand cmd) { + return new ReadyAnswer(cmd); + } + + private Answer execute(PrimaryStorageDownloadCommand cmd) { + return new PrimaryStorageDownloadAnswer(cmd.getLocalPath(), 16000000L); + } + + private Answer execute(ModifySshKeysCommand cmd) { + return new Answer(cmd, true, null); + } + + @Override + protected String getDefaultScriptsDir() { + return null; + } + + protected String getConfiguredProperty(String key, String defaultValue) { + String val = (String) _params.get(key); + return val == null ? defaultValue : val; + } + + protected Long getConfiguredProperty(String key, Long defaultValue) { + String val = (String) _params.get(key); + + if (val != null) { + Long result = Long.parseLong(val); + return result; + } + return defaultValue; + } + + protected List getHostInfo() { + final ArrayList info = new ArrayList(); + long speed = getConfiguredProperty("cpuspeed", 4000L); + long cpus = getConfiguredProperty("cpus", 4L); + long ram = getConfiguredProperty("memory", 16000L * 1024L * 1024L); + long dom0ram = Math.min(ram / 10, 768 * 1024 * 1024L); + + String cap = getConfiguredProperty("capabilities", "hvm"); + info.add((int) cpus); + info.add(speed); + info.add(ram); + info.add(cap); + info.add(dom0ram); + return info; + + } + + private Map getSimulatorProperties() + throws ConfigurationException { + final File file = PropertiesUtil.findConfigFile("simulator.properties"); + if (file == null) { + throw new ConfigurationException( + "Unable to find simulator.properties."); + } + + s_logger.info("simulator.properties found at " + file.getAbsolutePath()); + Properties properties = new Properties(); + try { + properties.load(new FileInputStream(file)); + + final Map params = PropertiesUtil.toMap(properties); + + return params; + } catch (final FileNotFoundException ex) { + throw new CloudRuntimeException("Cannot find the file: " + + file.getAbsolutePath(), ex); + } catch (final IOException ex) { + throw new CloudRuntimeException("IOException in reading " + + file.getAbsolutePath(), ex); + } + } + + @Override + public boolean configure(String name, Map params) + throws ConfigurationException { + Map simProps = getSimulatorProperties(); + params.putAll(simProps); + setParams(params); + _vmManager.configure(params); + _dhcpSnooper.configure(name, params); + _vmDataServer.configure(name, params); + return true; + } + + public void setParams(Map _params) { + this._params = _params; + } + + public Map getParams() { + return _params; + } + + protected synchronized StartAnswer execute(StartCommand cmd) { + VmMgr vmMgr = getVmManager(); + + VirtualMachineTO vmSpec = cmd.getVirtualMachine(); + String vmName = vmSpec.getName(); + State state = State.Stopped; + + try { + if (!_vms.containsKey(vmName)) { + synchronized (_vms) { + _vms.put(vmName, State.Starting); + } + + MockVm vm = vmMgr.createVmFromSpec(vmSpec); + vmMgr.createVbd(vmSpec, vmName, vm); + vmMgr.createVif(vmSpec, vmName, vm); + + state = State.Running; + for (NicTO nic : cmd.getVirtualMachine().getNics()) { + if (nic.getType() == TrafficType.Guest) { + InetAddress addr = _dhcpSnooper.getIPAddr(nic.getMac(), + vmName); + nic.setIp(addr.getHostAddress()); + } + } + _vmDataServer.handleVmStarted(cmd.getVirtualMachine()); + return new StartAnswer(cmd); + } else { + String msg = "There is already a VM having the same name " + + vmName; + s_logger.warn(msg); + return new StartAnswer(cmd, msg); + } + } catch (Exception ex) { + + } finally { + synchronized (_vms) { + _vms.put(vmName, state); + } + } + return new StartAnswer(cmd); + } + + protected synchronized StopAnswer execute(StopCommand cmd) { + VmMgr vmMgr = getVmManager(); + + StopAnswer answer = null; + String vmName = cmd.getVmName(); + + Integer port = vmMgr.getVncPort(vmName); + Long bytesReceived = null; + Long bytesSent = null; + + State state = null; + synchronized (_vms) { + state = _vms.get(vmName); + _vms.put(vmName, State.Stopping); + } + try { + String result = vmMgr.stopVM(vmName, false); + if (result != null) { + s_logger.info("Trying destroy on " + vmName); + if (result == Script.ERR_TIMEOUT) { + result = vmMgr.stopVM(vmName, true); + } + + s_logger.warn("Couldn't stop " + vmName); + + if (result != null) { + return new StopAnswer(cmd, result); + } + } + + answer = new StopAnswer(cmd, null, port, bytesSent, bytesReceived); + + String result2 = vmMgr.cleanupVnet(cmd.getVnet()); + if (result2 != null) { + result = result2 + (result != null ? ("\n" + result) : ""); + answer = new StopAnswer(cmd, result, port, bytesSent, + bytesReceived); + } + + _dhcpSnooper.cleanup(vmName, null); + + return answer; + } finally { + if (answer == null || !answer.getResult()) { + synchronized (_vms) { + _vms.put(vmName, state); + } + } + } + } + + protected Answer execute(final VmDataCommand cmd) { + return _vmDataServer.handleVmDataCommand(cmd); + } + + protected Answer execute(final SavePasswordCommand cmd) { + return new Answer(cmd); + } + + protected Answer execute(RebootCommand cmd) { + VmMgr vmMgr = getVmManager(); + vmMgr.rebootVM(cmd.getVmName()); + return new RebootAnswer(cmd, "success", 0L, 0L); + } + + private Answer execute(PingTestCommand cmd) { + return new Answer(cmd); + } + + protected GetVmStatsAnswer execute(GetVmStatsCommand cmd) { + return null; + } + + private VmMgr getVmManager() { + return _vmManager; + } + + protected Answer execute(GetHostStatsCommand cmd) { + VmMgr vmMgr = getVmManager(); + return new GetHostStatsAnswer(cmd, vmMgr.getHostCpuUtilization(), + vmMgr.getHostFreeMemory(), vmMgr.getHostTotalMemory(), 0, 0, + "SimulatedHost"); + } + + protected CheckStateAnswer execute(CheckStateCommand cmd) { + State state = getVmManager().checkVmState(cmd.getVmName()); + return new CheckStateAnswer(cmd, state); + } + + protected CheckHealthAnswer execute(CheckHealthCommand cmd) { + return new CheckHealthAnswer(cmd, true); + } + + protected CheckVirtualMachineAnswer execute( + final CheckVirtualMachineCommand cmd) { + VmMgr vmMgr = getVmManager(); + final String vmName = cmd.getVmName(); + + final State state = vmMgr.checkVmState(vmName); + Integer vncPort = null; + if (state == State.Running) { + vncPort = vmMgr.getVncPort(vmName); + synchronized (_vms) { + _vms.put(vmName, State.Running); + } + } + return new CheckVirtualMachineAnswer(cmd, state, vncPort); + } + + protected Answer execute(final AttachVolumeCommand cmd) { + return new Answer(cmd); + } + + protected Answer execute(final AttachIsoCommand cmd) { + return new Answer(cmd); + } + + protected CreateAnswer execute(final CreateCommand cmd) { + try { + + VolumeTO vol = new VolumeTO(cmd.getVolumeId(), Volume.Type.ROOT, + com.cloud.storage.Storage.StoragePoolType.LVM, cmd + .getPool().getUuid(), "dummy", "/mountpoint", + "dummyPath", 1000L, null); + return new CreateAnswer(cmd, vol); + } catch (Throwable th) { + return new CreateAnswer(cmd, new Exception("Unexpected exception")); + } + } + + protected HashMap sync() { + Map newStates; + Map oldStates = null; + + HashMap changes = new HashMap(); + + synchronized (_vms) { + newStates = getVmManager().getVmStates(); + oldStates = new HashMap(_vms.size()); + oldStates.putAll(_vms); + + for (Map.Entry entry : newStates.entrySet()) { + String vm = entry.getKey(); + + State newState = entry.getValue(); + State oldState = oldStates.remove(vm); + + if (s_logger.isTraceEnabled()) { + s_logger.trace("VM " + vm + ": xen has state " + newState + + " and we have state " + + (oldState != null ? oldState.toString() : "null")); + } + + if (oldState == null) { + _vms.put(vm, newState); + changes.put(vm, newState); + } else if (oldState == State.Starting) { + if (newState == State.Running) { + _vms.put(vm, newState); + } else if (newState == State.Stopped) { + s_logger.debug("Ignoring vm " + vm + + " because of a lag in starting the vm."); + } + } else if (oldState == State.Stopping) { + if (newState == State.Stopped) { + _vms.put(vm, newState); + } else if (newState == State.Running) { + s_logger.debug("Ignoring vm " + vm + + " because of a lag in stopping the vm. "); + } + } else if (oldState != newState) { + _vms.put(vm, newState); + changes.put(vm, newState); + } + } + + for (Map.Entry entry : oldStates.entrySet()) { + String vm = entry.getKey(); + State oldState = entry.getValue(); + + if (s_logger.isTraceEnabled()) { + s_logger.trace("VM " + vm + + " is now missing from xen so reporting stopped"); + } + + if (oldState == State.Stopping) { + s_logger.debug("Ignoring VM " + vm + + " in transition state stopping."); + _vms.remove(vm); + } else if (oldState == State.Starting) { + s_logger.debug("Ignoring VM " + vm + + " in transition state starting."); + } else if (oldState == State.Stopped) { + _vms.remove(vm); + } else { + changes.put(entry.getKey(), State.Stopped); + } + } + } + + return changes; + } + + protected Answer execute(DestroyCommand cmd) { + return new Answer(cmd, true, null); + } } diff --git a/agent/src/com/cloud/agent/resource/computing/KVMGuestOsMapper.java b/agent/src/com/cloud/agent/resource/computing/KVMGuestOsMapper.java index 9c47022a0a1..b03ab934b2b 100644 --- a/agent/src/com/cloud/agent/resource/computing/KVMGuestOsMapper.java +++ b/agent/src/com/cloud/agent/resource/computing/KVMGuestOsMapper.java @@ -24,7 +24,8 @@ import java.util.Map; import org.apache.log4j.Logger; public class KVMGuestOsMapper { - private static final Logger s_logger = Logger.getLogger(KVMGuestOsMapper.class); + private static final Logger s_logger = Logger + .getLogger(KVMGuestOsMapper.class); private static Map s_mapper = new HashMap(); static { s_mapper.put("CentOS 4.5 (32-bit)", "CentOS 4.5"); @@ -44,27 +45,48 @@ public class KVMGuestOsMapper { s_mapper.put("CentOS 5.5 (32-bit)", "CentOS 5.5"); s_mapper.put("CentOS 5.5 (64-bit)", "CentOS 5.5"); s_mapper.put("Red Hat Enterprise Linux 2", "Red Hat Enterprise Linux 2"); - s_mapper.put("Red Hat Enterprise Linux 3 (32-bit)", "Red Hat Enterprise Linux 3"); - s_mapper.put("Red Hat Enterprise Linux 3 (64-bit)", "Red Hat Enterprise Linux 3"); - s_mapper.put("Red Hat Enterprise Linux 4(64-bit)", "Red Hat Enterprise Linux 4"); - s_mapper.put("Red Hat Enterprise Linux 4.5 (32-bit)", "Red Hat Enterprise Linux 4.5"); - s_mapper.put("Red Hat Enterprise Linux 4.6 (32-bit)", "Red Hat Enterprise Linux 4.6"); - s_mapper.put("Red Hat Enterprise Linux 4.7 (32-bit)", "Red Hat Enterprise Linux 4.7"); - s_mapper.put("Red Hat Enterprise Linux 4.8 (32-bit)", "Red Hat Enterprise Linux 4.8"); - s_mapper.put("Red Hat Enterprise Linux 5.0 (32-bit)", "Red Hat Enterprise Linux 5.0"); - s_mapper.put("Red Hat Enterprise Linux 5.0 (64-bit)", "Red Hat Enterprise Linux 5.0"); - s_mapper.put("Red Hat Enterprise Linux 5.1 (32-bit)", "Red Hat Enterprise Linux 5.1"); - s_mapper.put("Red Hat Enterprise Linux 5.1 (32-bit)", "Red Hat Enterprise Linux 5.1"); - s_mapper.put("Red Hat Enterprise Linux 5.2 (32-bit)", "Red Hat Enterprise Linux 5.2"); - s_mapper.put("Red Hat Enterprise Linux 5.2 (64-bit)", "Red Hat Enterprise Linux 5.2"); - s_mapper.put("Red Hat Enterprise Linux 5.3 (32-bit)", "Red Hat Enterprise Linux 5.3"); - s_mapper.put("Red Hat Enterprise Linux 5.3 (64-bit)", "Red Hat Enterprise Linux 5.3"); - s_mapper.put("Red Hat Enterprise Linux 5.4 (32-bit)", "Red Hat Enterprise Linux 5.4"); - s_mapper.put("Red Hat Enterprise Linux 5.4 (64-bit)", "Red Hat Enterprise Linux 5.4"); - s_mapper.put("Red Hat Enterprise Linux 5.5 (32-bit)", "Red Hat Enterprise Linux 5.5"); - s_mapper.put("Red Hat Enterprise Linux 5.5 (64-bit)", "Red Hat Enterprise Linux 5.5"); - s_mapper.put("Red Hat Enterprise Linux 6.0 (32-bit)", "Red Hat Enterprise Linux 6.0"); - s_mapper.put("Red Hat Enterprise Linux 6.0 (64-bit)", "Red Hat Enterprise Linux 6.0"); + s_mapper.put("Red Hat Enterprise Linux 3 (32-bit)", + "Red Hat Enterprise Linux 3"); + s_mapper.put("Red Hat Enterprise Linux 3 (64-bit)", + "Red Hat Enterprise Linux 3"); + s_mapper.put("Red Hat Enterprise Linux 4(64-bit)", + "Red Hat Enterprise Linux 4"); + s_mapper.put("Red Hat Enterprise Linux 4.5 (32-bit)", + "Red Hat Enterprise Linux 4.5"); + s_mapper.put("Red Hat Enterprise Linux 4.6 (32-bit)", + "Red Hat Enterprise Linux 4.6"); + s_mapper.put("Red Hat Enterprise Linux 4.7 (32-bit)", + "Red Hat Enterprise Linux 4.7"); + s_mapper.put("Red Hat Enterprise Linux 4.8 (32-bit)", + "Red Hat Enterprise Linux 4.8"); + s_mapper.put("Red Hat Enterprise Linux 5.0 (32-bit)", + "Red Hat Enterprise Linux 5.0"); + s_mapper.put("Red Hat Enterprise Linux 5.0 (64-bit)", + "Red Hat Enterprise Linux 5.0"); + s_mapper.put("Red Hat Enterprise Linux 5.1 (32-bit)", + "Red Hat Enterprise Linux 5.1"); + s_mapper.put("Red Hat Enterprise Linux 5.1 (32-bit)", + "Red Hat Enterprise Linux 5.1"); + s_mapper.put("Red Hat Enterprise Linux 5.2 (32-bit)", + "Red Hat Enterprise Linux 5.2"); + s_mapper.put("Red Hat Enterprise Linux 5.2 (64-bit)", + "Red Hat Enterprise Linux 5.2"); + s_mapper.put("Red Hat Enterprise Linux 5.3 (32-bit)", + "Red Hat Enterprise Linux 5.3"); + s_mapper.put("Red Hat Enterprise Linux 5.3 (64-bit)", + "Red Hat Enterprise Linux 5.3"); + s_mapper.put("Red Hat Enterprise Linux 5.4 (32-bit)", + "Red Hat Enterprise Linux 5.4"); + s_mapper.put("Red Hat Enterprise Linux 5.4 (64-bit)", + "Red Hat Enterprise Linux 5.4"); + s_mapper.put("Red Hat Enterprise Linux 5.5 (32-bit)", + "Red Hat Enterprise Linux 5.5"); + s_mapper.put("Red Hat Enterprise Linux 5.5 (64-bit)", + "Red Hat Enterprise Linux 5.5"); + s_mapper.put("Red Hat Enterprise Linux 6.0 (32-bit)", + "Red Hat Enterprise Linux 6.0"); + s_mapper.put("Red Hat Enterprise Linux 6.0 (64-bit)", + "Red Hat Enterprise Linux 6.0"); s_mapper.put("Fedora 13", "Fedora 13"); s_mapper.put("Fedora 12", "Fedora 12"); s_mapper.put("Fedora 11", "Fedora 11"); @@ -97,14 +119,21 @@ public class KVMGuestOsMapper { s_mapper.put("Asianux 3(64-bit)", "Other Linux"); s_mapper.put("Windows 7 (32-bit)", "Windows 7"); s_mapper.put("Windows 7 (64-bit)", "Windows 7"); - s_mapper.put("Windows Server 2003 Enterprise Edition(32-bit)", "Windows Server 2003"); - s_mapper.put("Windows Server 2003 Enterprise Edition(64-bit)", "Windows Server 2003"); - s_mapper.put("Windows Server 2003 DataCenter Edition(32-bit)", "Windows Server 2003"); - s_mapper.put("Windows Server 2003 DataCenter Edition(64-bit)", "Windows Server 2003"); - s_mapper.put("Windows Server 2003 Standard Edition(32-bit)", "Windows Server 2003"); - s_mapper.put("Windows Server 2003 Standard Edition(64-bit)", "Windows Server 2003"); + s_mapper.put("Windows Server 2003 Enterprise Edition(32-bit)", + "Windows Server 2003"); + s_mapper.put("Windows Server 2003 Enterprise Edition(64-bit)", + "Windows Server 2003"); + s_mapper.put("Windows Server 2003 DataCenter Edition(32-bit)", + "Windows Server 2003"); + s_mapper.put("Windows Server 2003 DataCenter Edition(64-bit)", + "Windows Server 2003"); + s_mapper.put("Windows Server 2003 Standard Edition(32-bit)", + "Windows Server 2003"); + s_mapper.put("Windows Server 2003 Standard Edition(64-bit)", + "Windows Server 2003"); s_mapper.put("Windows Server 2003 Web Edition", "Windows Server 2003"); - s_mapper.put("Microsoft Small Bussiness Server 2003", "Windows Server 2003"); + s_mapper.put("Microsoft Small Bussiness Server 2003", + "Windows Server 2003"); s_mapper.put("Windows Server 2008 (32-bit)", "Windows Server 2008"); s_mapper.put("Windows Server 2008 (64-bit)", "Windows Server 2008"); s_mapper.put("Windows Server 2008 R2 (64-bit)", "Windows Server 2008"); @@ -138,4 +167,3 @@ public class KVMGuestOsMapper { } } } - diff --git a/agent/src/com/cloud/agent/resource/computing/KVMHABase.java b/agent/src/com/cloud/agent/resource/computing/KVMHABase.java index f369597cf16..1bcd20b9c86 100644 --- a/agent/src/com/cloud/agent/resource/computing/KVMHABase.java +++ b/agent/src/com/cloud/agent/resource/computing/KVMHABase.java @@ -35,17 +35,17 @@ import com.cloud.utils.script.OutputInterpreter; import com.cloud.utils.script.OutputInterpreter.AllLinesParser; import com.cloud.utils.script.Script; - public class KVMHABase { - private long _timeout = 60000; /*1 minutes*/ + private long _timeout = 60000; /* 1 minutes */ protected static String _heartBeatPath; protected long _heartBeatUpdateTimeout = 60000; protected long _heartBeatUpdateFreq = 60000; protected long _heartBeatUpdateMaxRetry = 3; + public static enum PoolType { - PrimaryStorage, - SecondaryStorage + PrimaryStorage, SecondaryStorage } + public static class NfsStoragePool { String _poolUUID; String _poolIp; @@ -53,7 +53,8 @@ public class KVMHABase { String _mountDestPath; PoolType _type; - public NfsStoragePool(String poolUUID, String poolIp, String poolSourcePath, String mountDestPath, PoolType type) { + public NfsStoragePool(String poolUUID, String poolIp, + String poolSourcePath, String mountDestPath, PoolType type) { this._poolUUID = poolUUID; this._poolIp = poolIp; this._poolMountSourcePath = poolSourcePath; @@ -64,7 +65,8 @@ public class KVMHABase { protected String checkingMountPoint(NfsStoragePool pool, String poolName) { String mountSource = pool._poolIp + ":" + pool._poolMountSourcePath; - String mountPaths = Script.runSimpleBashScript("cat /proc/mounts | grep " + mountSource); + String mountPaths = Script + .runSimpleBashScript("cat /proc/mounts | grep " + mountSource); String destPath = pool._mountDestPath; if (mountPaths != null) { @@ -73,7 +75,7 @@ public class KVMHABase { String mountDestPath = token[1]; if (mountType.equalsIgnoreCase("nfs")) { if (poolName != null && !mountDestPath.startsWith(destPath)) { - /*we need to mount it under poolName*/ + /* we need to mount it under poolName */ Script mount = new Script("/bin/bash", 60000); mount.add("-c"); mount.add("mount " + mountSource + " " + destPath); @@ -87,8 +89,8 @@ public class KVMHABase { } } } else { - /*Can't find the mount point?*/ - /*we need to mount it under poolName*/ + /* Can't find the mount point? */ + /* we need to mount it under poolName */ if (poolName != null) { Script mount = new Script("/bin/bash", 60000); mount.add("-c"); @@ -110,13 +112,17 @@ public class KVMHABase { StoragePool pool = null; String poolName = null; try { - pool = LibvirtConnection.getConnection().storagePoolLookupByUUIDString(storagePool._poolUUID); + pool = LibvirtConnection.getConnection() + .storagePoolLookupByUUIDString(storagePool._poolUUID); if (pool != null) { StoragePoolInfo spi = pool.getInfo(); if (spi.state != StoragePoolState.VIR_STORAGE_POOL_RUNNING) { pool.create(0); } else { - /*Sometimes, the mount point is lost, even libvirt thinks the storage pool still running*/ + /* + * Sometimes, the mount point is lost, even libvirt thinks + * the storage pool still running + */ } } poolName = pool.getName(); @@ -136,7 +142,7 @@ public class KVMHABase { } protected void destroyVMs(String mountPath) { - /*if there are VMs using disks under this mount path, destroy them*/ + /* if there are VMs using disks under this mount path, destroy them */ Script cmd = new Script("/bin/bash", _timeout); cmd.add("-c"); cmd.add("ps axu|grep qemu|grep " + mountPath + "* |awk '{print $2}'"); @@ -154,14 +160,16 @@ public class KVMHABase { } protected String getHBFile(String mountPoint, String hostIP) { - return mountPoint + File.separator + "KVMHA" + File.separator + "hb-" + hostIP; + return mountPoint + File.separator + "KVMHA" + File.separator + "hb-" + + hostIP; } protected String getHBFolder(String mountPoint) { return mountPoint + File.separator + "KVMHA" + File.separator; } - protected String runScriptRetry(String cmdString, OutputInterpreter interpreter) { + protected String runScriptRetry(String cmdString, + OutputInterpreter interpreter) { String result = null; for (int i = 0; i < 3; i++) { Script cmd = new Script("/bin/bash", _timeout); @@ -184,20 +192,22 @@ public class KVMHABase { public static void main(String[] args) { - NfsStoragePool pool = new KVMHAMonitor.NfsStoragePool(null,null,null,null, PoolType.PrimaryStorage); + NfsStoragePool pool = new KVMHAMonitor.NfsStoragePool(null, null, null, + null, PoolType.PrimaryStorage); KVMHAMonitor haWritter = new KVMHAMonitor(pool, "192.168.1.163", null); Thread ha = new Thread(haWritter); ha.start(); - KVMHAChecker haChecker = new KVMHAChecker(haWritter.getStoragePools(), "192.168.1.163"); + KVMHAChecker haChecker = new KVMHAChecker(haWritter.getStoragePools(), + "192.168.1.163"); ExecutorService exe = Executors.newFixedThreadPool(1); - Future future = exe.submit((Callable)haChecker); + Future future = exe.submit((Callable) haChecker); try { for (int i = 0; i < 10; i++) { System.out.println(future.get()); - future = exe.submit((Callable)haChecker); + future = exe.submit((Callable) haChecker); } } catch (InterruptedException e) { // TODO Auto-generated catch block diff --git a/agent/src/com/cloud/agent/resource/computing/KVMHAChecker.java b/agent/src/com/cloud/agent/resource/computing/KVMHAChecker.java index 0621b1dbde7..b5c5eeda07f 100644 --- a/agent/src/com/cloud/agent/resource/computing/KVMHAChecker.java +++ b/agent/src/com/cloud/agent/resource/computing/KVMHAChecker.java @@ -28,29 +28,34 @@ import org.libvirt.Connect; import com.cloud.utils.script.OutputInterpreter; import com.cloud.utils.script.Script; - public class KVMHAChecker extends KVMHABase implements Callable { private static final Logger s_logger = Logger.getLogger(KVMHAChecker.class); private List _pools; private String _hostIP; - private long _heartBeatCheckerTimeout = 360000; /*6 minutes*/ + private long _heartBeatCheckerTimeout = 360000; /* 6 minutes */ + public KVMHAChecker(List pools, String host) { this._pools = pools; this._hostIP = host; } - /*True means heartbeaing is on going, or we can't get it's status. False means heartbeating is stopped definitely */ + /* + * True means heartbeaing is on going, or we can't get it's status. False + * means heartbeating is stopped definitely + */ private Boolean checkingHB() { List results = new ArrayList(); for (NfsStoragePool pool : _pools) { - Script cmd = new Script(_heartBeatPath, _heartBeatCheckerTimeout, s_logger); + Script cmd = new Script(_heartBeatPath, _heartBeatCheckerTimeout, + s_logger); cmd.add("-i", pool._poolIp); cmd.add("-p", pool._poolMountSourcePath); cmd.add("-m", pool._mountDestPath); cmd.add("-h", _hostIP); cmd.add("-r"); - cmd.add("-t", String.valueOf((_heartBeatUpdateFreq + _heartBeatUpdateTimeout)/1000 * 2)); + cmd.add("-t", + String.valueOf((_heartBeatUpdateFreq + _heartBeatUpdateTimeout) / 1000 * 2)); OutputInterpreter.OneLineParser parser = new OutputInterpreter.OneLineParser(); String result = cmd.execute(parser); s_logger.debug("pool: " + pool._poolIp); @@ -64,7 +69,6 @@ public class KVMHAChecker extends KVMHABase implements Callable { } } - for (Boolean r : results) { if (r) { return true; @@ -76,7 +80,8 @@ public class KVMHAChecker extends KVMHABase implements Callable { @Override public Boolean call() throws Exception { - //s_logger.addAppender(new org.apache.log4j.ConsoleAppender(new org.apache.log4j.PatternLayout(), "System.out")); + // s_logger.addAppender(new org.apache.log4j.ConsoleAppender(new + // org.apache.log4j.PatternLayout(), "System.out")); return checkingHB(); } } diff --git a/agent/src/com/cloud/agent/resource/computing/KVMHAMonitor.java b/agent/src/com/cloud/agent/resource/computing/KVMHAMonitor.java index 90e4d03db4f..3c3aa627131 100644 --- a/agent/src/com/cloud/agent/resource/computing/KVMHAMonitor.java +++ b/agent/src/com/cloud/agent/resource/computing/KVMHAMonitor.java @@ -25,63 +25,66 @@ import java.util.concurrent.ConcurrentHashMap; import org.apache.log4j.Logger; import com.cloud.utils.script.Script; -public class KVMHAMonitor extends KVMHABase implements Runnable{ +public class KVMHAMonitor extends KVMHABase implements Runnable { private static final Logger s_logger = Logger.getLogger(KVMHAMonitor.class); private Map _storagePool = new ConcurrentHashMap(); - - private String _hostIP; /*private ip address*/ - + private String _hostIP; /* private ip address */ + public KVMHAMonitor(NfsStoragePool pool, String host, String scriptPath) { if (pool != null) { this._storagePool.put(pool._poolUUID, pool); - } + } this._hostIP = host; this._heartBeatPath = scriptPath; } - + public void addStoragePool(NfsStoragePool pool) { synchronized (_storagePool) { this._storagePool.put(pool._poolUUID, pool); } } - + public void removeStoragePool(String uuid) { synchronized (_storagePool) { this._storagePool.remove(uuid); } } - + public List getStoragePools() { synchronized (_storagePool) { return new ArrayList(_storagePool.values()); } } - + private class Monitor implements Runnable { - + @Override public void run() { synchronized (_storagePool) { for (NfsStoragePool primaryStoragePool : _storagePool.values()) { String result = null; for (int i = 0; i < 5; i++) { - Script cmd = new Script(_heartBeatPath, _heartBeatUpdateTimeout, s_logger); - cmd.add("-i", primaryStoragePool._poolIp); - cmd.add("-p", primaryStoragePool._poolMountSourcePath); - cmd.add("-m", primaryStoragePool._mountDestPath); - cmd.add("-h", _hostIP); - result = cmd.execute(); - if (result != null) { - s_logger.warn("write heartbeat failed: " + result + ", retry: " + i); - } else { - break; - } + Script cmd = new Script(_heartBeatPath, + _heartBeatUpdateTimeout, s_logger); + cmd.add("-i", primaryStoragePool._poolIp); + cmd.add("-p", primaryStoragePool._poolMountSourcePath); + cmd.add("-m", primaryStoragePool._mountDestPath); + cmd.add("-h", _hostIP); + result = cmd.execute(); + if (result != null) { + s_logger.warn("write heartbeat failed: " + result + + ", retry: " + i); + } else { + break; + } } - + if (result != null) { - s_logger.warn("write heartbeat failed: " + result + "; reboot the host"); - Script cmd = new Script(_heartBeatPath, _heartBeatUpdateTimeout, s_logger); + s_logger.warn("write heartbeat failed: " + result + + "; reboot the host"); + Script cmd = new Script(_heartBeatPath, + _heartBeatUpdateTimeout, s_logger); cmd.add("-i", primaryStoragePool._poolIp); cmd.add("-p", primaryStoragePool._poolMountSourcePath); cmd.add("-m", primaryStoragePool._mountDestPath); @@ -90,28 +93,29 @@ public class KVMHAMonitor extends KVMHABase implements Runnable{ } } } - - } + + } } @Override public void run() { - //s_logger.addAppender(new org.apache.log4j.ConsoleAppender(new org.apache.log4j.PatternLayout(), "System.out")); + // s_logger.addAppender(new org.apache.log4j.ConsoleAppender(new + // org.apache.log4j.PatternLayout(), "System.out")); while (true) { Thread monitorThread = new Thread(new Monitor()); monitorThread.start(); try { monitorThread.join(); } catch (InterruptedException e) { - + } - + try { Thread.sleep(_heartBeatUpdateFreq); } catch (InterruptedException e) { - + } } } - + } diff --git a/agent/src/com/cloud/agent/resource/computing/LibvirtCapXMLParser.java b/agent/src/com/cloud/agent/resource/computing/LibvirtCapXMLParser.java index 3fcc302a475..95b5e540ad0 100644 --- a/agent/src/com/cloud/agent/resource/computing/LibvirtCapXMLParser.java +++ b/agent/src/com/cloud/agent/resource/computing/LibvirtCapXMLParser.java @@ -26,10 +26,9 @@ import org.xml.sax.Attributes; import org.xml.sax.InputSource; import org.xml.sax.SAXException; - /** * @author chiradeep - * + * */ public class LibvirtCapXMLParser extends LibvirtXMLParser { private boolean _host = false; @@ -37,14 +36,16 @@ public class LibvirtCapXMLParser extends LibvirtXMLParser { private boolean _osType = false; private boolean _domainTypeKVM = false; private boolean _emulatorFlag = false; - private final StringBuffer _emulator = new StringBuffer() ; + private final StringBuffer _emulator = new StringBuffer(); private final StringBuffer _capXML = new StringBuffer(); - private static final Logger s_logger = Logger.getLogger(LibvirtCapXMLParser.class); - private final ArrayList guestOsTypes = new ArrayList(); + private static final Logger s_logger = Logger + .getLogger(LibvirtCapXMLParser.class); + private final ArrayList guestOsTypes = new ArrayList(); + @Override public void endElement(String uri, String localName, String qName) throws SAXException { - if(qName.equalsIgnoreCase("host")) { + if (qName.equalsIgnoreCase("host")) { _host = false; } else if (qName.equalsIgnoreCase("os_type")) { _osType = false; @@ -61,7 +62,8 @@ public class LibvirtCapXMLParser extends LibvirtXMLParser { } @Override - public void characters(char[] ch, int start, int length) throws SAXException { + public void characters(char[] ch, int start, int length) + throws SAXException { if (_host) { _capXML.append(ch, start, length); } else if (_osType) { @@ -71,11 +73,10 @@ public class LibvirtCapXMLParser extends LibvirtXMLParser { } } - @Override public void startElement(String uri, String localName, String qName, Attributes attributes) throws SAXException { - if(qName.equalsIgnoreCase("host")) { + if (qName.equalsIgnoreCase("host")) { _host = true; } else if (qName.equalsIgnoreCase("guest")) { _guest = true; @@ -86,7 +87,7 @@ public class LibvirtCapXMLParser extends LibvirtXMLParser { } else if (qName.equalsIgnoreCase("domain")) { for (int i = 0; i < attributes.getLength(); i++) { if (attributes.getQName(i).equalsIgnoreCase("type") - && attributes.getValue(i).equalsIgnoreCase("kvm")) { + && attributes.getValue(i).equalsIgnoreCase("kvm")) { _domainTypeKVM = true; } } @@ -95,8 +96,9 @@ public class LibvirtCapXMLParser extends LibvirtXMLParser { _emulator.delete(0, _emulator.length()); } else if (_host) { _capXML.append("<").append(qName); - for (int i=0; i < attributes.getLength(); i++) { - _capXML.append(" ").append(attributes.getQName(i)).append("=").append(attributes.getValue(i)); + for (int i = 0; i < attributes.getLength(); i++) { + _capXML.append(" ").append(attributes.getQName(i)).append("=") + .append(attributes.getValue(i)); } _capXML.append(">"); } @@ -104,13 +106,13 @@ public class LibvirtCapXMLParser extends LibvirtXMLParser { } public String parseCapabilitiesXML(String capXML) { - if (!_initialized){ + if (!_initialized) { return null; } try { _sp.parse(new InputSource(new StringReader(capXML)), this); return _capXML.toString(); - } catch(SAXException se) { + } catch (SAXException se) { s_logger.warn(se.getMessage()); } catch (IOException ie) { s_logger.error(ie.getMessage()); @@ -126,98 +128,64 @@ public class LibvirtCapXMLParser extends LibvirtXMLParser { return _emulator.toString(); } - public static void main(String [] args) { - String capXML = ""+ - " "+ - " "+ - " x86_64"+ - " core2duo"+ - " "+ - " "+ - " "+ - " "+ - " "+ - " "+ - " "+ - " "+ - " "+ - " "+ - " "+ - " "+ - " "+ - " "+ - " "+ - " "+ - " "+ - " "+ - " tcp"+ - " "+ - " "+ - " "+ - " "+ - " "+ - " "+ - " "+ - " "+ - " "+ - " "+ - " "+ - " "+ - " "+ - ""+ - " "+ - " hvm"+ - " "+ - " 32"+ - " /usr/bin/qemu"+ - " pc-0.11"+ - " pc"+ - " pc-0.10"+ - " isapc"+ - " "+ - " "+ - " "+ - " /usr/bin/qemu-kvm"+ - " pc-0.11"+ - " pc"+ - " pc-0.10"+ - " isapc"+ - " "+ - " "+ - " "+ - " "+ - " "+ - " "+ - " "+ - " "+ - " "+ - " "+ - " "+ - " hvm"+ - " "+ - " 64"+ - " /usr/bin/qemu-system-x86_64"+ - " pc-0.11"+ - " pc"+ - " pc-0.10"+ - " isapc"+ - " "+ - " "+ - " "+ - " /usr/bin/qemu-kvm"+ - " pc-0.11"+ - " pc"+ - " pc-0.10"+ - " isapc"+ - " "+ - " "+ - " "+ - " "+ - " "+ - " "+ - " "+ - " "+ - ""; + public static void main(String[] args) { + String capXML = "" + " " + " " + + " x86_64" + " core2duo" + + " " + + " " + + " " + + " " + + " " + " " + + " " + + " " + + " " + " " + + " " + " " + + " " + " " + + " " + " " + " " + + " " + + " tcp" + + " " + " " + + " " + " " + + " " + " " + + " " + " " + + " " + " " + " " + + " " + " " + "" + " " + + " hvm" + " " + + " 32" + + " /usr/bin/qemu" + + " pc-0.11" + + " pc" + + " pc-0.10" + + " isapc" + + " " + " " + + " " + + " /usr/bin/qemu-kvm" + + " pc-0.11" + + " pc" + + " pc-0.10" + + " isapc" + " " + + " " + " " + " " + + " " + " " + + " " + + " " + " " + + " " + " " + " hvm" + + " " + " 64" + + " /usr/bin/qemu-system-x86_64" + + " pc-0.11" + + " pc" + + " pc-0.10" + + " isapc" + + " " + " " + + " " + + " /usr/bin/qemu-kvm" + + " pc-0.11" + + " pc" + + " pc-0.10" + + " isapc" + " " + + " " + " " + " " + + " " + + " " + " " + + " " + ""; LibvirtCapXMLParser parser = new LibvirtCapXMLParser(); String cap = parser.parseCapabilitiesXML(capXML); diff --git a/agent/src/com/cloud/agent/resource/computing/LibvirtConnection.java b/agent/src/com/cloud/agent/resource/computing/LibvirtConnection.java index 51965ca6131..891ed08c548 100644 --- a/agent/src/com/cloud/agent/resource/computing/LibvirtConnection.java +++ b/agent/src/com/cloud/agent/resource/computing/LibvirtConnection.java @@ -22,24 +22,26 @@ import org.apache.log4j.Logger; import org.libvirt.Connect; import org.libvirt.LibvirtException; - public class LibvirtConnection { - private static final Logger s_logger = Logger.getLogger(LibvirtConnection.class); + private static final Logger s_logger = Logger + .getLogger(LibvirtConnection.class); static private Connect _connection; static private String _hypervisorURI; + static public Connect getConnection() throws LibvirtException { if (_connection == null) { _connection = new Connect(_hypervisorURI, false); - } else { - try { - _connection.getVersion(); - } catch (LibvirtException e) { - s_logger.debug("Connection with libvirtd is broken, due to " + e.getMessage()); - _connection = new Connect(_hypervisorURI, false); - } - } + } else { + try { + _connection.getVersion(); + } catch (LibvirtException e) { + s_logger.debug("Connection with libvirtd is broken, due to " + + e.getMessage()); + _connection = new Connect(_hypervisorURI, false); + } + } - return _connection; + return _connection; } static void initialize(String hypervisorURI) { diff --git a/agent/src/com/cloud/agent/resource/computing/LibvirtDomainXMLParser.java b/agent/src/com/cloud/agent/resource/computing/LibvirtDomainXMLParser.java index 665064e6788..6c55e7ff0e9 100644 --- a/agent/src/com/cloud/agent/resource/computing/LibvirtDomainXMLParser.java +++ b/agent/src/com/cloud/agent/resource/computing/LibvirtDomainXMLParser.java @@ -43,124 +43,132 @@ import com.cloud.agent.resource.computing.LibvirtVMDef.InterfaceDef.nicModel; /** * @author chiradeep - * + * */ public class LibvirtDomainXMLParser { - private static final Logger s_logger = Logger.getLogger(LibvirtDomainXMLParser.class); + private static final Logger s_logger = Logger + .getLogger(LibvirtDomainXMLParser.class); private final List interfaces = new ArrayList(); private final List diskDefs = new ArrayList(); private Integer vncPort; private String desc; public boolean parseDomainXML(String domXML) { - DocumentBuilder builder; - try { - builder = DocumentBuilderFactory.newInstance().newDocumentBuilder(); + DocumentBuilder builder; + try { + builder = DocumentBuilderFactory.newInstance().newDocumentBuilder(); - InputSource is = new InputSource(); - is.setCharacterStream(new StringReader(domXML)); - Document doc = builder.parse(is); + InputSource is = new InputSource(); + is.setCharacterStream(new StringReader(domXML)); + Document doc = builder.parse(is); - Element rootElement = doc.getDocumentElement(); + Element rootElement = doc.getDocumentElement(); - desc = getTagValue("description", rootElement); + desc = getTagValue("description", rootElement); - Element devices = (Element)rootElement.getElementsByTagName("devices").item(0); - NodeList disks = devices.getElementsByTagName("disk"); - for (int i = 0; i < disks.getLength(); i++) { - Element disk = (Element)disks.item(i); - String diskFmtType = getAttrValue("driver", "type", disk); - String diskFile = getAttrValue("source", "file", disk); - String diskDev = getAttrValue("source", "dev", disk); + Element devices = (Element) rootElement.getElementsByTagName( + "devices").item(0); + NodeList disks = devices.getElementsByTagName("disk"); + for (int i = 0; i < disks.getLength(); i++) { + Element disk = (Element) disks.item(i); + String diskFmtType = getAttrValue("driver", "type", disk); + String diskFile = getAttrValue("source", "file", disk); + String diskDev = getAttrValue("source", "dev", disk); - String diskLabel = getAttrValue("target", "dev", disk); - String bus = getAttrValue("target", "bus", disk); - String type = disk.getAttribute("type"); - String device = disk.getAttribute("device"); + String diskLabel = getAttrValue("target", "dev", disk); + String bus = getAttrValue("target", "bus", disk); + String type = disk.getAttribute("type"); + String device = disk.getAttribute("device"); - DiskDef def = new DiskDef(); - if (type.equalsIgnoreCase("file")) { - if (device.equalsIgnoreCase("disk")) { - DiskDef.diskFmtType fmt = null; - if (diskFmtType != null) { - fmt = DiskDef.diskFmtType.valueOf(diskFmtType.toUpperCase()); - } - def.defFileBasedDisk(diskFile, diskLabel, DiskDef.diskBus.valueOf(bus.toUpperCase()), fmt); - } else if (device.equalsIgnoreCase("cdrom")) { - def.defISODisk(diskFile); - } - } else if (type.equalsIgnoreCase("block")) { - def.defBlockBasedDisk(diskDev, diskLabel, DiskDef.diskBus.valueOf(bus.toUpperCase())); - } - diskDefs.add(def); - } + DiskDef def = new DiskDef(); + if (type.equalsIgnoreCase("file")) { + if (device.equalsIgnoreCase("disk")) { + DiskDef.diskFmtType fmt = null; + if (diskFmtType != null) { + fmt = DiskDef.diskFmtType.valueOf(diskFmtType + .toUpperCase()); + } + def.defFileBasedDisk(diskFile, diskLabel, + DiskDef.diskBus.valueOf(bus.toUpperCase()), fmt); + } else if (device.equalsIgnoreCase("cdrom")) { + def.defISODisk(diskFile); + } + } else if (type.equalsIgnoreCase("block")) { + def.defBlockBasedDisk(diskDev, diskLabel, + DiskDef.diskBus.valueOf(bus.toUpperCase())); + } + diskDefs.add(def); + } - NodeList nics = devices.getElementsByTagName("interface"); - for (int i = 0; i < nics.getLength(); i++ ) { - Element nic = (Element)nics.item(i); + NodeList nics = devices.getElementsByTagName("interface"); + for (int i = 0; i < nics.getLength(); i++) { + Element nic = (Element) nics.item(i); - String type = nic.getAttribute("type"); - String mac = getAttrValue("mac", "address", nic); - String dev = getAttrValue("target", "dev", nic); - String model = getAttrValue("model", "type", nic); - InterfaceDef def = new InterfaceDef(); + String type = nic.getAttribute("type"); + String mac = getAttrValue("mac", "address", nic); + String dev = getAttrValue("target", "dev", nic); + String model = getAttrValue("model", "type", nic); + InterfaceDef def = new InterfaceDef(); - if (type.equalsIgnoreCase("network")) { - String network = getAttrValue("source", "network", nic); - def.defPrivateNet(network, dev, mac, nicModel.valueOf(model.toUpperCase())); - } else if (type.equalsIgnoreCase("bridge")) { - String bridge = getAttrValue("source", "bridge", nic); - def.defBridgeNet(bridge, dev, mac, nicModel.valueOf(model.toUpperCase())); - } - interfaces.add(def); - } + if (type.equalsIgnoreCase("network")) { + String network = getAttrValue("source", "network", nic); + def.defPrivateNet(network, dev, mac, + nicModel.valueOf(model.toUpperCase())); + } else if (type.equalsIgnoreCase("bridge")) { + String bridge = getAttrValue("source", "bridge", nic); + def.defBridgeNet(bridge, dev, mac, + nicModel.valueOf(model.toUpperCase())); + } + interfaces.add(def); + } - Element graphic = (Element)devices.getElementsByTagName("graphics").item(0); - String port = graphic.getAttribute("port"); - if (port != null) { - try { - vncPort = Integer.parseInt(port); - if (vncPort != -1) { - vncPort = vncPort - 5900; - } else { - vncPort = null; - } - }catch (NumberFormatException nfe){ - vncPort = null; - } - } + Element graphic = (Element) devices + .getElementsByTagName("graphics").item(0); + String port = graphic.getAttribute("port"); + if (port != null) { + try { + vncPort = Integer.parseInt(port); + if (vncPort != -1) { + vncPort = vncPort - 5900; + } else { + vncPort = null; + } + } catch (NumberFormatException nfe) { + vncPort = null; + } + } - return true; - } catch (ParserConfigurationException e) { - s_logger.debug(e.toString()); - } catch (SAXException e) { - s_logger.debug(e.toString()); - } catch (IOException e) { - s_logger.debug(e.toString()); - } - return false; + return true; + } catch (ParserConfigurationException e) { + s_logger.debug(e.toString()); + } catch (SAXException e) { + s_logger.debug(e.toString()); + } catch (IOException e) { + s_logger.debug(e.toString()); + } + return false; } - private static String getTagValue(String tag, Element eElement){ - NodeList tagNodeList = eElement.getElementsByTagName(tag); - if (tagNodeList == null || tagNodeList.getLength() == 0) { - return null; - } + private static String getTagValue(String tag, Element eElement) { + NodeList tagNodeList = eElement.getElementsByTagName(tag); + if (tagNodeList == null || tagNodeList.getLength() == 0) { + return null; + } - NodeList nlList= tagNodeList.item(0).getChildNodes(); + NodeList nlList = tagNodeList.item(0).getChildNodes(); - Node nValue = (Node) nlList.item(0); + Node nValue = (Node) nlList.item(0); - return nValue.getNodeValue(); + return nValue.getNodeValue(); } - private static String getAttrValue(String tag, String attr, Element eElement){ - NodeList tagNode = eElement.getElementsByTagName(tag); - if (tagNode.getLength() == 0) { - return null; - } - Element node = (Element)tagNode.item(0); - return node.getAttribute(attr); + private static String getAttrValue(String tag, String attr, Element eElement) { + NodeList tagNode = eElement.getElementsByTagName(tag); + if (tagNode.getLength() == 0) { + return null; + } + Element node = (Element) tagNode.item(0); + return node.getAttribute(attr); } public Integer getVncPort() { @@ -179,68 +187,58 @@ public class LibvirtDomainXMLParser { return desc; } - public static void main(String [] args){ + public static void main(String[] args) { LibvirtDomainXMLParser parser = new LibvirtDomainXMLParser(); - parser.parseDomainXML(""+ - "r-6-CV-5002-1"+ - "581b5a4b-b496-8d4d-e44e-a7dcbe9df0b5"+ - "testVM"+ - "131072"+ - "131072"+ - "1"+ - ""+ - "hvm"+ - "/var/lib/libvirt/qemu/vmlinuz-2.6.31.6-166.fc12.i686"+ - "ro root=/dev/sda1 acpi=force selinux=0 eth0ip=10.1.1.1 eth0mask=255.255.255.0 eth2ip=192.168.10.152 eth2mask=255.255.255.0 gateway=192.168.10.1 dns1=72.52.126.11 dns2=72.52.126.12 domain=v4.myvm.com"+ - ""+ - ""+ - ""+ - ""+ - ""+ - ""+ - ""+ - "destroy"+ - "restart"+ - "destroy"+ - ""+ - "/usr/bin/qemu-kvm"+ - ""+ - ""+ - ""+ - ""+ - ""+ - ""+ - ""+ - ""+ - ""+ - ""+ - ""+ - ""+ - ""+ - ""+ - ""+ - ""+ - ""+ - ""+ - ""+ - ""+ - ""+ - ""+ - ""+ - ""+ - ""+ - ""+ - ""+ - "" + parser.parseDomainXML("" + + "r-6-CV-5002-1" + + "581b5a4b-b496-8d4d-e44e-a7dcbe9df0b5" + + "testVM" + + "131072" + + "131072" + + "1" + + "" + + "hvm" + + "/var/lib/libvirt/qemu/vmlinuz-2.6.31.6-166.fc12.i686" + + "ro root=/dev/sda1 acpi=force selinux=0 eth0ip=10.1.1.1 eth0mask=255.255.255.0 eth2ip=192.168.10.152 eth2mask=255.255.255.0 gateway=192.168.10.1 dns1=72.52.126.11 dns2=72.52.126.12 domain=v4.myvm.com" + + "" + + "" + + "" + + "" + + "" + + "" + + "" + + "destroy" + + "restart" + + "destroy" + + "" + + "/usr/bin/qemu-kvm" + + "" + + "" + + "" + + "" + "" + + "" + + "" + + "" + "" + + "" + "" + + "" + + "" + + "" + "" + + "" + "" + + "" + + "" + + "" + "" + + "" + "" + + "" + + "" + + "" + "" + "" ); - for (InterfaceDef intf: parser.getInterfaces()){ + for (InterfaceDef intf : parser.getInterfaces()) { System.out.println(intf); } for (DiskDef disk : parser.getDisks()) { - System.out.println(disk); + System.out.println(disk); } System.out.println(parser.getVncPort()); System.out.println(parser.getDescription()); @@ -249,7 +247,7 @@ public class LibvirtDomainXMLParser { test.add("1"); test.add("2"); if (test.contains("1")) { - System.out.print("fdf"); + System.out.print("fdf"); } } diff --git a/agent/src/com/cloud/agent/resource/computing/LibvirtNetworkDef.java b/agent/src/com/cloud/agent/resource/computing/LibvirtNetworkDef.java index 9184a39cf1a..0b6715ba61b 100644 --- a/agent/src/com/cloud/agent/resource/computing/LibvirtNetworkDef.java +++ b/agent/src/com/cloud/agent/resource/computing/LibvirtNetworkDef.java @@ -22,10 +22,9 @@ import java.util.List; public class LibvirtNetworkDef { enum netType { - BRIDGE, - NAT, - LOCAL + BRIDGE, NAT, LOCAL } + private final String _networkName; private final String _uuid; private netType _networkType; @@ -38,134 +37,156 @@ public class LibvirtNetworkDef { private String _brNetMask; private final List ipranges = new ArrayList(); private final List dhcpMaps = new ArrayList(); - public static class dhcpMapping { - String _mac; - String _name; - String _ip; - public dhcpMapping(String mac, String name, String ip) { - _mac = mac; - _name = name; - _ip = ip; - } - } - public static class IPRange { - String _start; - String _end; - public IPRange(String start, String end) { - _start = start; - _end = end; - } - } - public LibvirtNetworkDef(String netName, String uuid, String domName) { - _networkName = netName; - _uuid = uuid; - _domainName = domName; - } - public void defNATNetwork(String brName, boolean stp, int delay, String fwNic, String ipAddr, String netMask) { - _networkType = netType.NAT; - _brName = brName; - _stp = stp; - _delay = delay; - _fwDev = fwNic; - _brIPAddr = ipAddr; - _brNetMask = netMask; - } - public void defBrNetwork(String brName, boolean stp, int delay, String fwNic, String ipAddr, String netMask) { - _networkType = netType.BRIDGE; - _brName = brName; - _stp = stp; - _delay = delay; - _fwDev = fwNic; - _brIPAddr = ipAddr; - _brNetMask = netMask; - } - public void defLocalNetwork(String brName, boolean stp, int delay, String ipAddr, String netMask) { - _networkType = netType.LOCAL; - _brName = brName; - _stp = stp; - _delay = delay; - _brIPAddr = ipAddr; - _brNetMask = netMask; - } - public void adddhcpIPRange(String start, String end) { - IPRange ipr = new IPRange(start, end); - ipranges.add(ipr); - } - public void adddhcpMapping(String mac, String host, String ip) { - dhcpMapping map = new dhcpMapping(mac, host, ip); - dhcpMaps.add(map); - } - @Override - public String toString() { - StringBuilder netBuilder = new StringBuilder(); - netBuilder.append("\n"); - netBuilder.append("" + _networkName + "\n"); - if (_uuid != null) - netBuilder.append("" + _uuid + "\n"); - if (_brName != null) { - netBuilder.append("\n"); - } - if (_domainName != null) { - netBuilder.append("\n"); - } - if (_networkType == netType.BRIDGE) { - netBuilder.append("\n"); - } else if (_networkType == netType.NAT) { - netBuilder.append("\n"); - } - if (_brIPAddr != null || _brNetMask != null || !ipranges.isEmpty() || !dhcpMaps.isEmpty()) { - netBuilder.append("\n"); + public static class dhcpMapping { + String _mac; + String _name; + String _ip; + + public dhcpMapping(String mac, String name, String ip) { + _mac = mac; + _name = name; + _ip = ip; + } + } + + public static class IPRange { + String _start; + String _end; + + public IPRange(String start, String end) { + _start = start; + _end = end; + } + } + + public LibvirtNetworkDef(String netName, String uuid, String domName) { + _networkName = netName; + _uuid = uuid; + _domainName = domName; + } + + public void defNATNetwork(String brName, boolean stp, int delay, + String fwNic, String ipAddr, String netMask) { + _networkType = netType.NAT; + _brName = brName; + _stp = stp; + _delay = delay; + _fwDev = fwNic; + _brIPAddr = ipAddr; + _brNetMask = netMask; + } + + public void defBrNetwork(String brName, boolean stp, int delay, + String fwNic, String ipAddr, String netMask) { + _networkType = netType.BRIDGE; + _brName = brName; + _stp = stp; + _delay = delay; + _fwDev = fwNic; + _brIPAddr = ipAddr; + _brNetMask = netMask; + } + + public void defLocalNetwork(String brName, boolean stp, int delay, + String ipAddr, String netMask) { + _networkType = netType.LOCAL; + _brName = brName; + _stp = stp; + _delay = delay; + _brIPAddr = ipAddr; + _brNetMask = netMask; + } + + public void adddhcpIPRange(String start, String end) { + IPRange ipr = new IPRange(start, end); + ipranges.add(ipr); + } + + public void adddhcpMapping(String mac, String host, String ip) { + dhcpMapping map = new dhcpMapping(mac, host, ip); + dhcpMaps.add(map); + } + + @Override + public String toString() { + StringBuilder netBuilder = new StringBuilder(); + netBuilder.append("\n"); + netBuilder.append("" + _networkName + "\n"); + if (_uuid != null) + netBuilder.append("" + _uuid + "\n"); + if (_brName != null) { + netBuilder.append("\n"); + } + if (_domainName != null) { + netBuilder.append("\n"); + } + if (_networkType == netType.BRIDGE) { + netBuilder.append("\n"); + } else if (_networkType == netType.NAT) { + netBuilder.append("\n"); + } + if (_brIPAddr != null || _brNetMask != null || !ipranges.isEmpty() + || !dhcpMaps.isEmpty()) { + netBuilder.append("\n"); + + if (!ipranges.isEmpty() || !dhcpMaps.isEmpty()) { + netBuilder.append("\n"); + for (IPRange ip : ipranges) { + netBuilder.append("\n"); + } + for (dhcpMapping map : dhcpMaps) { + netBuilder.append("\n"); + } + netBuilder.append("\n"); + } + netBuilder.append("\n"); + } + netBuilder.append("\n"); + return netBuilder.toString(); + } - if (!ipranges.isEmpty() || !dhcpMaps.isEmpty()) { - netBuilder.append("\n"); - for (IPRange ip : ipranges ) { - netBuilder.append("\n"); - } - for (dhcpMapping map : dhcpMaps) { - netBuilder.append("\n"); - } - netBuilder.append("\n"); - } - netBuilder.append("\n"); - } - netBuilder.append("\n"); - return netBuilder.toString(); - } /** * @param args */ public static void main(String[] args) { - LibvirtNetworkDef net = new LibvirtNetworkDef("cloudPrivate", null, "cloud.com"); - net.defNATNetwork("cloudbr0", false, 0, null, "192.168.168.1", "255.255.255.0"); + LibvirtNetworkDef net = new LibvirtNetworkDef("cloudPrivate", null, + "cloud.com"); + net.defNATNetwork("cloudbr0", false, 0, null, "192.168.168.1", + "255.255.255.0"); net.adddhcpIPRange("192.168.168.100", "192.168.168.220"); net.adddhcpIPRange("192.168.168.10", "192.168.168.50"); - net.adddhcpMapping("branch0.cloud.com", "00:16:3e:77:e2:ed", "192.168.168.100"); - net.adddhcpMapping("branch1.cloud.com", "00:16:3e:77:e2:ef", "192.168.168.101"); - net.adddhcpMapping("branch2.cloud.com", "00:16:3e:77:e2:f0", "192.168.168.102"); + net.adddhcpMapping("branch0.cloud.com", "00:16:3e:77:e2:ed", + "192.168.168.100"); + net.adddhcpMapping("branch1.cloud.com", "00:16:3e:77:e2:ef", + "192.168.168.101"); + net.adddhcpMapping("branch2.cloud.com", "00:16:3e:77:e2:f0", + "192.168.168.102"); System.out.println(net.toString()); } diff --git a/agent/src/com/cloud/agent/resource/computing/LibvirtStoragePoolDef.java b/agent/src/com/cloud/agent/resource/computing/LibvirtStoragePoolDef.java index 6859d6e59f7..925380efa41 100644 --- a/agent/src/com/cloud/agent/resource/computing/LibvirtStoragePoolDef.java +++ b/agent/src/com/cloud/agent/resource/computing/LibvirtStoragePoolDef.java @@ -20,19 +20,19 @@ package com.cloud.agent.resource.computing; public class LibvirtStoragePoolDef { public enum poolType { - ISCSI("iscsi"), - NETFS("netfs"), - LOGICAL("logical"), - DIR("dir"); + ISCSI("iscsi"), NETFS("netfs"), LOGICAL("logical"), DIR("dir"); String _poolType; + poolType(String poolType) { _poolType = poolType; } + @Override public String toString() { return _poolType; } } + private poolType _poolType; private String _poolName; private String _uuid; @@ -40,7 +40,8 @@ public class LibvirtStoragePoolDef { private String _sourceDir; private String _targetPath; - public LibvirtStoragePoolDef(poolType type, String poolName, String uuid, String host, String dir, String targetPath) { + public LibvirtStoragePoolDef(poolType type, String poolName, String uuid, + String host, String dir, String targetPath) { _poolType = type; _poolName = poolName; _uuid = uuid; @@ -50,26 +51,26 @@ public class LibvirtStoragePoolDef { } public String getPoolName() { - return _poolName; + return _poolName; } public poolType getPoolType() { - return _poolType; + return _poolType; } public String getSourceHost() { - return _sourceHost; + return _sourceHost; } public String getSourceDir() { - return _sourceDir; + return _sourceDir; } public String getTargetPath() { - return _targetPath; + return _targetPath; } - @Override + @Override public String toString() { StringBuilder storagePoolBuilder = new StringBuilder(); storagePoolBuilder.append("\n"); diff --git a/agent/src/com/cloud/agent/resource/computing/LibvirtStoragePoolXMLParser.java b/agent/src/com/cloud/agent/resource/computing/LibvirtStoragePoolXMLParser.java index b76920c845b..622a0106374 100644 --- a/agent/src/com/cloud/agent/resource/computing/LibvirtStoragePoolXMLParser.java +++ b/agent/src/com/cloud/agent/resource/computing/LibvirtStoragePoolXMLParser.java @@ -30,86 +30,82 @@ import org.w3c.dom.*; import org.xml.sax.InputSource; import org.xml.sax.SAXException; +public class LibvirtStoragePoolXMLParser { + private static final Logger s_logger = Logger + .getLogger(LibvirtStoragePoolXMLParser.class); + public LibvirtStoragePoolDef parseStoragePoolXML(String poolXML) { + DocumentBuilder builder; + try { + builder = DocumentBuilderFactory.newInstance().newDocumentBuilder(); -public class LibvirtStoragePoolXMLParser{ - private static final Logger s_logger = Logger.getLogger(LibvirtStoragePoolXMLParser.class); - public LibvirtStoragePoolDef parseStoragePoolXML(String poolXML) { - DocumentBuilder builder; - try { - builder = DocumentBuilderFactory.newInstance().newDocumentBuilder(); + InputSource is = new InputSource(); + is.setCharacterStream(new StringReader(poolXML)); + Document doc = builder.parse(is); - InputSource is = new InputSource(); - is.setCharacterStream(new StringReader(poolXML)); - Document doc = builder.parse(is); + Element rootElement = doc.getDocumentElement(); + String type = rootElement.getAttribute("type"); - Element rootElement = doc.getDocumentElement(); - String type = rootElement.getAttribute("type"); + String uuid = getTagValue("uuid", rootElement); - String uuid = getTagValue("uuid", rootElement); + String poolName = getTagValue("name", rootElement); - String poolName = getTagValue("name", rootElement); + Element source = (Element) rootElement.getElementsByTagName( + "source").item(0); + String host = getAttrValue("host", "name", source); + String path = getAttrValue("dir", "path", source); - Element source = (Element)rootElement.getElementsByTagName("source").item(0); - String host = getAttrValue("host", "name", source); - String path = getAttrValue("dir", "path", source); + Element target = (Element) rootElement.getElementsByTagName( + "target").item(0); + String targetPath = getTagValue("path", target); - Element target = (Element)rootElement.getElementsByTagName("target").item(0); - String targetPath = getTagValue("path", target); + return new LibvirtStoragePoolDef( + LibvirtStoragePoolDef.poolType.valueOf(type.toUpperCase()), + poolName, uuid, host, path, targetPath); + } catch (ParserConfigurationException e) { + s_logger.debug(e.toString()); + } catch (SAXException e) { + s_logger.debug(e.toString()); + } catch (IOException e) { + s_logger.debug(e.toString()); + } + return null; + } - return new LibvirtStoragePoolDef(LibvirtStoragePoolDef.poolType.valueOf(type.toUpperCase()), poolName, uuid, host, path, targetPath); - } catch (ParserConfigurationException e) { - s_logger.debug(e.toString()); - } catch (SAXException e) { - s_logger.debug(e.toString()); - } catch (IOException e) { - s_logger.debug(e.toString()); - } - return null; - } + private static String getTagValue(String tag, Element eElement) { + NodeList nlList = eElement.getElementsByTagName(tag).item(0) + .getChildNodes(); + Node nValue = (Node) nlList.item(0); - private static String getTagValue(String tag, Element eElement){ - NodeList nlList= eElement.getElementsByTagName(tag).item(0).getChildNodes(); - Node nValue = (Node) nlList.item(0); + return nValue.getNodeValue(); + } - return nValue.getNodeValue(); - } + private static String getAttrValue(String tag, String attr, Element eElement) { + NodeList tagNode = eElement.getElementsByTagName(tag); + if (tagNode.getLength() == 0) { + return null; + } + Element node = (Element) tagNode.item(0); + return node.getAttribute(attr); + } - private static String getAttrValue(String tag, String attr, Element eElement){ - NodeList tagNode = eElement.getElementsByTagName(tag); - if (tagNode.getLength() == 0) { - return null; - } - Element node = (Element)tagNode.item(0); - return node.getAttribute(attr); - } + public static void main(String[] args) { + s_logger.addAppender(new org.apache.log4j.ConsoleAppender( + new org.apache.log4j.PatternLayout(), "System.out")); + String storagePool = "" + "test" + + "bf723c83-4b95-259c-7089-60776e61a11f" + + "20314165248" + + "1955450880" + + "18358714368" + "" + + "" + + "" + + "" + "" + "" + + "/media" + "" + "0700" + + "0" + "0" + "" + + "" + ""; - - public static void main(String[] args) { - s_logger.addAppender(new org.apache.log4j.ConsoleAppender(new org.apache.log4j.PatternLayout(), "System.out")); - String storagePool = "" + - "test" + - "bf723c83-4b95-259c-7089-60776e61a11f" + - "20314165248" + - "1955450880" + - "18358714368" + - "" + - "" + - "" + - "" + - "" + - "" + - "/media" + - "" + - "0700" + - "0" + - "0" + - "" + - "" + - ""; - - LibvirtStoragePoolXMLParser parser = new LibvirtStoragePoolXMLParser(); - LibvirtStoragePoolDef pool = parser.parseStoragePoolXML(storagePool); - s_logger.debug(pool.toString()); - } + LibvirtStoragePoolXMLParser parser = new LibvirtStoragePoolXMLParser(); + LibvirtStoragePoolDef pool = parser.parseStoragePoolXML(storagePool); + s_logger.debug(pool.toString()); + } } diff --git a/agent/src/com/cloud/agent/resource/computing/LibvirtStorageVolumeDef.java b/agent/src/com/cloud/agent/resource/computing/LibvirtStorageVolumeDef.java index 05cbf934eca..2449edbd508 100644 --- a/agent/src/com/cloud/agent/resource/computing/LibvirtStorageVolumeDef.java +++ b/agent/src/com/cloud/agent/resource/computing/LibvirtStorageVolumeDef.java @@ -20,13 +20,13 @@ package com.cloud.agent.resource.computing; public class LibvirtStorageVolumeDef { public enum volFormat { - RAW("raw"), - QCOW2("qcow2"), - DIR("dir"); + RAW("raw"), QCOW2("qcow2"), DIR("dir"); private String _format; + volFormat(String format) { _format = format; } + @Override public String toString() { return _format; @@ -44,13 +44,15 @@ public class LibvirtStorageVolumeDef { return null; } } + private String _volName; private Long _volSize; private volFormat _volFormat; private String _backingPath; private volFormat _backingFormat; - public LibvirtStorageVolumeDef(String volName, Long size, volFormat format, String tmplPath, volFormat tmplFormat) { + public LibvirtStorageVolumeDef(String volName, Long size, volFormat format, + String tmplPath, volFormat tmplFormat) { _volName = volName; _volSize = size; _volFormat = format; @@ -61,13 +63,15 @@ public class LibvirtStorageVolumeDef { public volFormat getFormat() { return this._volFormat; } + @Override public String toString() { StringBuilder storageVolBuilder = new StringBuilder(); storageVolBuilder.append("\n"); storageVolBuilder.append("" + _volName + "\n"); if (_volSize != null) { - storageVolBuilder.append("" + _volSize + "\n"); + storageVolBuilder + .append("" + _volSize + "\n"); } storageVolBuilder.append("\n"); storageVolBuilder.append("\n"); @@ -78,7 +82,8 @@ public class LibvirtStorageVolumeDef { if (_backingPath != null) { storageVolBuilder.append("\n"); storageVolBuilder.append("" + _backingPath + "\n"); - storageVolBuilder.append("\n"); + storageVolBuilder.append("\n"); storageVolBuilder.append("\n"); } storageVolBuilder.append("\n"); diff --git a/agent/src/com/cloud/agent/resource/computing/LibvirtStorageVolumeXMLParser.java b/agent/src/com/cloud/agent/resource/computing/LibvirtStorageVolumeXMLParser.java index e7309ce9708..8d6462f164c 100644 --- a/agent/src/com/cloud/agent/resource/computing/LibvirtStorageVolumeXMLParser.java +++ b/agent/src/com/cloud/agent/resource/computing/LibvirtStorageVolumeXMLParser.java @@ -15,76 +15,74 @@ import org.w3c.dom.NodeList; import org.xml.sax.InputSource; import org.xml.sax.SAXException; -public class LibvirtStorageVolumeXMLParser{ - private static final Logger s_logger = Logger.getLogger(LibvirtStorageVolumeXMLParser.class); - public LibvirtStorageVolumeDef parseStorageVolumeXML(String volXML) { - DocumentBuilder builder; - try { - builder = DocumentBuilderFactory.newInstance().newDocumentBuilder(); +public class LibvirtStorageVolumeXMLParser { + private static final Logger s_logger = Logger + .getLogger(LibvirtStorageVolumeXMLParser.class); - InputSource is = new InputSource(); - is.setCharacterStream(new StringReader(volXML)); - Document doc = builder.parse(is); + public LibvirtStorageVolumeDef parseStorageVolumeXML(String volXML) { + DocumentBuilder builder; + try { + builder = DocumentBuilderFactory.newInstance().newDocumentBuilder(); - Element rootElement = doc.getDocumentElement(); + InputSource is = new InputSource(); + is.setCharacterStream(new StringReader(volXML)); + Document doc = builder.parse(is); - String VolName = getTagValue("name", rootElement); - Element target = (Element)rootElement.getElementsByTagName("target").item(0); - String format = getAttrValue("type", "format", target); - Long capacity = Long.parseLong(getTagValue("capacity", rootElement)); - return new LibvirtStorageVolumeDef(VolName, capacity, LibvirtStorageVolumeDef.volFormat.getFormat(format), null, null); - } catch (ParserConfigurationException e) { - s_logger.debug(e.toString()); - } catch (SAXException e) { - s_logger.debug(e.toString()); - } catch (IOException e) { - s_logger.debug(e.toString()); - } - return null; - } + Element rootElement = doc.getDocumentElement(); - private static String getTagValue(String tag, Element eElement){ - NodeList nlList= eElement.getElementsByTagName(tag).item(0).getChildNodes(); - Node nValue = (Node) nlList.item(0); + String VolName = getTagValue("name", rootElement); + Element target = (Element) rootElement.getElementsByTagName( + "target").item(0); + String format = getAttrValue("type", "format", target); + Long capacity = Long + .parseLong(getTagValue("capacity", rootElement)); + return new LibvirtStorageVolumeDef(VolName, capacity, + LibvirtStorageVolumeDef.volFormat.getFormat(format), null, + null); + } catch (ParserConfigurationException e) { + s_logger.debug(e.toString()); + } catch (SAXException e) { + s_logger.debug(e.toString()); + } catch (IOException e) { + s_logger.debug(e.toString()); + } + return null; + } - return nValue.getNodeValue(); - } + private static String getTagValue(String tag, Element eElement) { + NodeList nlList = eElement.getElementsByTagName(tag).item(0) + .getChildNodes(); + Node nValue = (Node) nlList.item(0); - private static String getAttrValue(String tag, String attr, Element eElement){ - NodeList tagNode = eElement.getElementsByTagName(tag); - if (tagNode.getLength() == 0) { - return null; - } - Element node = (Element)tagNode.item(0); - return node.getAttribute(attr); - } + return nValue.getNodeValue(); + } + private static String getAttrValue(String tag, String attr, Element eElement) { + NodeList tagNode = eElement.getElementsByTagName(tag); + if (tagNode.getLength() == 0) { + return null; + } + Element node = (Element) tagNode.item(0); + return node.getAttribute(attr); + } - public static void main(String[] args) { - s_logger.addAppender(new org.apache.log4j.ConsoleAppender(new org.apache.log4j.PatternLayout(), "System.out")); - String storagePool = "" + - "test" + - "bf723c83-4b95-259c-7089-60776e61a11f" + - "20314165248" + - "1955450880" + - "18358714368" + - "" + - "" + - "" + - "" + - "" + - "" + - "/media" + - "" + - "0700" + - "0" + - "0" + - "" + - "" + - ""; + public static void main(String[] args) { + s_logger.addAppender(new org.apache.log4j.ConsoleAppender( + new org.apache.log4j.PatternLayout(), "System.out")); + String storagePool = "" + "test" + + "bf723c83-4b95-259c-7089-60776e61a11f" + + "20314165248" + + "1955450880" + + "18358714368" + "" + + "" + + "" + + "" + "" + "" + + "/media" + "" + "0700" + + "0" + "0" + "" + + "" + ""; - LibvirtStoragePoolXMLParser parser = new LibvirtStoragePoolXMLParser(); - LibvirtStoragePoolDef pool = parser.parseStoragePoolXML(storagePool); - s_logger.debug(pool.toString()); - } + LibvirtStoragePoolXMLParser parser = new LibvirtStoragePoolXMLParser(); + LibvirtStoragePoolDef pool = parser.parseStoragePoolXML(storagePool); + s_logger.debug(pool.toString()); + } } diff --git a/agent/src/com/cloud/agent/resource/computing/LibvirtVMDef.java b/agent/src/com/cloud/agent/resource/computing/LibvirtVMDef.java index 110f5a4a753..8a07750b184 100644 --- a/agent/src/com/cloud/agent/resource/computing/LibvirtVMDef.java +++ b/agent/src/com/cloud/agent/resource/computing/LibvirtVMDef.java @@ -30,28 +30,27 @@ public class LibvirtVMDef { private String _domName; private String _domUUID; private String _desc; - private final Map components = new HashMap(); + private final Map components = new HashMap(); public static class GuestDef { enum guestType { - KVM, - XEN, - EXE + KVM, XEN, EXE } + enum bootOrder { - HARDISK("hd"), - CDROM("cdrom"), - FLOOPY("fd"), - NETWORK("network"); + HARDISK("hd"), CDROM("cdrom"), FLOOPY("fd"), NETWORK("network"); String _order; + bootOrder(String order) { _order = order; } + @Override - public String toString() { + public String toString() { return _order; } } + private guestType _type; private String _arch; private String _loader; @@ -61,29 +60,37 @@ public class LibvirtVMDef { private String _cmdline; private List _bootdevs = new ArrayList(); private String _machine; - public void setGuestType (guestType type) { + + public void setGuestType(guestType type) { _type = type; } - public void setGuestArch (String arch) { + + public void setGuestArch(String arch) { _arch = arch; } - public void setMachineType (String machine) { + + public void setMachineType(String machine) { _machine = machine; } - public void setLoader (String loader) { + + public void setLoader(String loader) { _loader = loader; } - public void setBootKernel(String kernel, String initrd, String rootdev, String cmdline) { + + public void setBootKernel(String kernel, String initrd, String rootdev, + String cmdline) { _kernel = kernel; _initrd = initrd; _root = rootdev; _cmdline = cmdline; } + public void setBootOrder(bootOrder order) { _bootdevs.add(order); } + @Override - public String toString () { + public String toString() { if (_type == guestType.KVM) { StringBuilder guestDef = new StringBuilder(); guestDef.append("\n"); @@ -112,27 +119,34 @@ public class LibvirtVMDef { private int _currentMem = -1; private String _memBacking; private int _vcpu = -1; + public void setMemorySize(long mem) { _mem = mem; } + public void setCurrentMem(int currMem) { _currentMem = currMem; } + public void setMemBacking(String memBacking) { _memBacking = memBacking; } + public void setVcpuNum(int vcpu) { _vcpu = vcpu; } + @Override - public String toString(){ + public String toString() { StringBuilder resBuidler = new StringBuilder(); resBuidler.append("" + _mem + "\n"); if (_currentMem != -1) { - resBuidler.append("" + _currentMem + "\n"); + resBuidler.append("" + _currentMem + + "\n"); } if (_memBacking != null) { - resBuidler.append("" + "<" + _memBacking + "/>" + "\n"); + resBuidler.append("" + "<" + _memBacking + "/>" + + "\n"); } if (_vcpu != -1) { resBuidler.append("" + _vcpu + "\n"); @@ -143,11 +157,13 @@ public class LibvirtVMDef { public static class FeaturesDef { private final List _features = new ArrayList(); + public void addFeatures(String feature) { _features.add(feature); } + @Override - public String toString() { + public String toString() { StringBuilder feaBuilder = new StringBuilder(); feaBuilder.append("\n"); for (String feature : _features) { @@ -157,24 +173,30 @@ public class LibvirtVMDef { return feaBuilder.toString(); } } + public static class TermPolicy { private String _reboot; private String _powerOff; private String _crash; + public TermPolicy() { _reboot = _powerOff = _crash = "destroy"; } + public void setRebootPolicy(String rbPolicy) { _reboot = rbPolicy; } + public void setPowerOffPolicy(String poPolicy) { _powerOff = poPolicy; } + public void setCrashPolicy(String crashPolicy) { _crash = crashPolicy; } + @Override - public String toString() { + public String toString() { StringBuilder term = new StringBuilder(); term.append("" + _reboot + "\n"); term.append("" + _powerOff + "\n"); @@ -185,20 +207,21 @@ public class LibvirtVMDef { public static class ClockDef { public enum ClockOffset { - UTC("utc"), - LOCALTIME("localtime"), - TIMEZONE("timezone"), - VARIABLE("variable"); + UTC("utc"), LOCALTIME("localtime"), TIMEZONE("timezone"), VARIABLE( + "variable"); private String _offset; + private ClockOffset(String offset) { _offset = offset; } + @Override public String toString() { return _offset; } } + private ClockOffset _offset; private String _timerName; private String _tickPolicy; @@ -252,6 +275,7 @@ public class LibvirtVMDef { public static class DevicesDef { private String _emulator; private final Map> devices = new HashMap>(); + public boolean addDevice(Object device) { Object dev = devices.get(device.getClass().toString()); if (dev == null) { @@ -259,20 +283,23 @@ public class LibvirtVMDef { devs.add(device); devices.put(device.getClass().toString(), devs); } else { - List devs = (List)dev; + List devs = (List) dev; devs.add(device); } return true; } + public void setEmulatorPath(String emulator) { _emulator = emulator; } + @Override - public String toString() { + public String toString() { StringBuilder devicesBuilder = new StringBuilder(); devicesBuilder.append("\n"); if (_emulator != null) { - devicesBuilder.append("" + _emulator + "\n"); + devicesBuilder.append("" + _emulator + + "\n"); } for (List devs : devices.values()) { @@ -283,84 +310,92 @@ public class LibvirtVMDef { devicesBuilder.append("\n"); return devicesBuilder.toString(); } + public List getDisks() { - return (List)devices.get(DiskDef.class.toString()); + return (List) devices.get(DiskDef.class.toString()); } + public List getInterfaces() { - return (List)devices.get(InterfaceDef.class.toString()); + return (List) devices.get(InterfaceDef.class + .toString()); } } + public static class DiskDef { enum deviceType { - FLOOPY("floopy"), - DISK("disk"), - CDROM("cdrom"); + FLOOPY("floopy"), DISK("disk"), CDROM("cdrom"); String _type; + deviceType(String type) { _type = type; } + @Override - public String toString() { + public String toString() { return _type; } } + enum diskType { - FILE("file"), - BLOCK("block"), - DIRECTROY("dir"); + FILE("file"), BLOCK("block"), DIRECTROY("dir"); String _diskType; + diskType(String type) { _diskType = type; } + @Override - public String toString() { + public String toString() { return _diskType; } } + enum diskBus { - IDE("ide"), - SCSI("scsi"), - VIRTIO("virtio"), - XEN("xen"), - USB("usb"), - UML("uml"), - FDC("fdc"); + IDE("ide"), SCSI("scsi"), VIRTIO("virtio"), XEN("xen"), USB("usb"), UML( + "uml"), FDC("fdc"); String _bus; + diskBus(String bus) { _bus = bus; } + @Override - public String toString() { + public String toString() { return _bus; } } + enum diskFmtType { - RAW("raw"), - QCOW2("qcow2"); + RAW("raw"), QCOW2("qcow2"); String _fmtType; + diskFmtType(String fmt) { _fmtType = fmt; } + @Override - public String toString() { + public String toString() { return _fmtType; } } - private deviceType _deviceType; /*floppy, disk, cdrom*/ + private deviceType _deviceType; /* floppy, disk, cdrom */ private diskType _diskType; private String _sourcePath; private String _diskLabel; private diskBus _bus; - private diskFmtType _diskFmtType; /*qcow2, raw etc.*/ + private diskFmtType _diskFmtType; /* qcow2, raw etc. */ private boolean _readonly = false; private boolean _shareable = false; private boolean _deferAttach = false; + public void setDeviceType(deviceType deviceType) { _deviceType = deviceType; } - public void defFileBasedDisk(String filePath, String diskLabel, diskBus bus, diskFmtType diskFmtType) { + + public void defFileBasedDisk(String filePath, String diskLabel, + diskBus bus, diskFmtType diskFmtType) { _diskType = diskType.FILE; _deviceType = deviceType.DISK; _sourcePath = filePath; @@ -369,13 +404,14 @@ public class LibvirtVMDef { _bus = bus; } - /*skip iso label*/ + + /* skip iso label */ private String getDevLabel(int devId, diskBus bus) { - if ( devId == 2 ) { + if (devId == 2) { devId++; } - char suffix = (char)('a' + devId); + char suffix = (char) ('a' + devId); if (bus == diskBus.SCSI) { return "sd" + suffix; } else if (bus == diskBus.VIRTIO) { @@ -385,7 +421,8 @@ public class LibvirtVMDef { } - public void defFileBasedDisk(String filePath, int devId, diskBus bus, diskFmtType diskFmtType) { + public void defFileBasedDisk(String filePath, int devId, diskBus bus, + diskFmtType diskFmtType) { _diskType = diskType.FILE; _deviceType = deviceType.DISK; @@ -395,6 +432,7 @@ public class LibvirtVMDef { _bus = bus; } + public void defISODisk(String volPath) { _diskType = diskType.FILE; _deviceType = deviceType.CDROM; @@ -403,6 +441,7 @@ public class LibvirtVMDef { _diskFmtType = diskFmtType.RAW; _bus = diskBus.IDE; } + public void defBlockBasedDisk(String diskName, int devId, diskBus bus) { _diskType = diskType.BLOCK; _deviceType = deviceType.DISK; @@ -411,7 +450,9 @@ public class LibvirtVMDef { _diskLabel = getDevLabel(devId, bus); _bus = bus; } - public void defBlockBasedDisk(String diskName, String diskLabel, diskBus bus) { + + public void defBlockBasedDisk(String diskName, String diskLabel, + diskBus bus) { _diskType = diskType.BLOCK; _deviceType = deviceType.DISK; _diskFmtType = diskFmtType.RAW; @@ -419,39 +460,50 @@ public class LibvirtVMDef { _diskLabel = diskLabel; _bus = bus; } + public void setReadonly() { _readonly = true; } + public void setSharable() { _shareable = true; } + public void setAttachDeferred(boolean deferAttach) { _deferAttach = deferAttach; } + public boolean isAttachDeferred() { return _deferAttach; } + public String getDiskPath() { return _sourcePath; } + public String getDiskLabel() { return _diskLabel; } + public deviceType getDeviceType() { return _deviceType; } + public void setDiskPath(String volPath) { this._sourcePath = volPath; } + public diskBus getBusType() { return _bus; } + public int getDiskSeq() { char suffix = this._diskLabel.charAt(this._diskLabel.length() - 1); return suffix - 'a'; } + @Override - public String toString() { + public String toString() { StringBuilder diskBuilder = new StringBuilder(); diskBuilder.append("\n"); - diskBuilder.append("\n"); + diskBuilder.append("\n"); if (_diskType == diskType.FILE) { diskBuilder.append("\n"); + netBuilder.append("\n"); if (_netType == guestNetType.BRIDGE) { - netBuilder.append("\n"); + netBuilder.append("\n"); } else if (_netType == guestNetType.NETWORK) { - netBuilder.append("\n"); + netBuilder.append("\n"); } - if (_networkName !=null) { + if (_networkName != null) { netBuilder.append("\n"); } - if (_macAddr !=null) { + if (_macAddr != null) { netBuilder.append("\n"); } - if (_model !=null) { + if (_model != null) { netBuilder.append("\n"); } netBuilder.append("\n"); return netBuilder.toString(); } } + public static class ConsoleDef { private final String _ttyPath; private final String _type; private final String _source; private short _port = -1; + public ConsoleDef(String type, String path, String source, short port) { _type = type; _ttyPath = path; _source = source; _port = port; } + @Override - public String toString() { + public String toString() { StringBuilder consoleBuilder = new StringBuilder(); consoleBuilder.append("\n"); if (_source != null) { @@ -640,14 +708,17 @@ public class LibvirtVMDef { return serialBuidler.toString(); } } - public static class GraphicDef { + + public static class GraphicDef { private final String _type; private short _port = -2; private boolean _autoPort = false; private final String _listenAddr; private final String _passwd; private final String _keyMap; - public GraphicDef(String type, short port, boolean auotPort, String listenAddr, String passwd, String keyMap) { + + public GraphicDef(String type, short port, boolean auotPort, + String listenAddr, String passwd, String keyMap) { _type = type; _port = port; _autoPort = auotPort; @@ -655,13 +726,14 @@ public class LibvirtVMDef { _passwd = passwd; _keyMap = keyMap; } + @Override - public String toString() { + public String toString() { StringBuilder graphicBuilder = new StringBuilder(); graphicBuilder.append("\n"); vmBuilder.append("" + _domName + "\n"); if (_domUUID != null) { vmBuilder.append("" + _domUUID + "\n"); } - if (_desc != null ) { + if (_desc != null) { vmBuilder.append("" + _desc + "\n"); } for (Object o : components.values()) { @@ -739,7 +822,7 @@ public class LibvirtVMDef { return vmBuilder.toString(); } - public static void main(String [] args){ + public static void main(String[] args) { System.out.println("testing"); LibvirtVMDef vm = new LibvirtVMDef(); vm.setHvsType("kvm"); @@ -754,7 +837,7 @@ public class LibvirtVMDef { vm.addComp(guest); GuestResourceDef grd = new GuestResourceDef(); - grd.setMemorySize(512*1024); + grd.setMemorySize(512 * 1024); grd.setVcpuNum(1); vm.addComp(grd); @@ -774,32 +857,38 @@ public class LibvirtVMDef { devices.setEmulatorPath("/usr/bin/cloud-qemu-system-x86_64"); DiskDef hda = new DiskDef(); - hda.defFileBasedDisk("/path/to/hda1", 0, DiskDef.diskBus.VIRTIO, DiskDef.diskFmtType.QCOW2); + hda.defFileBasedDisk("/path/to/hda1", 0, DiskDef.diskBus.VIRTIO, + DiskDef.diskFmtType.QCOW2); devices.addDevice(hda); DiskDef hdb = new DiskDef(); - hdb.defFileBasedDisk("/path/to/hda2", 1, DiskDef.diskBus.VIRTIO, DiskDef.diskFmtType.QCOW2); + hdb.defFileBasedDisk("/path/to/hda2", 1, DiskDef.diskBus.VIRTIO, + DiskDef.diskFmtType.QCOW2); devices.addDevice(hdb); InterfaceDef pubNic = new InterfaceDef(); - pubNic.defBridgeNet("cloudbr0", "vnet1", "00:16:3e:77:e2:a1", InterfaceDef.nicModel.VIRTIO); + pubNic.defBridgeNet("cloudbr0", "vnet1", "00:16:3e:77:e2:a1", + InterfaceDef.nicModel.VIRTIO); devices.addDevice(pubNic); InterfaceDef privNic = new InterfaceDef(); - privNic.defPrivateNet("cloud-private", null, "00:16:3e:77:e2:a2", InterfaceDef.nicModel.VIRTIO); + privNic.defPrivateNet("cloud-private", null, "00:16:3e:77:e2:a2", + InterfaceDef.nicModel.VIRTIO); devices.addDevice(privNic); InterfaceDef vlanNic = new InterfaceDef(); - vlanNic.defBridgeNet("vnbr1000", "tap1", "00:16:3e:77:e2:a2", InterfaceDef.nicModel.VIRTIO); + vlanNic.defBridgeNet("vnbr1000", "tap1", "00:16:3e:77:e2:a2", + InterfaceDef.nicModel.VIRTIO); devices.addDevice(vlanNic); - SerialDef serial = new SerialDef("pty", null, (short)0); + SerialDef serial = new SerialDef("pty", null, (short) 0); devices.addDevice(serial); - ConsoleDef console = new ConsoleDef("pty", null, null, (short)0); + ConsoleDef console = new ConsoleDef("pty", null, null, (short) 0); devices.addDevice(console); - GraphicDef grap = new GraphicDef("vnc", (short)0, true, null, null, null); + GraphicDef grap = new GraphicDef("vnc", (short) 0, true, null, null, + null); devices.addDevice(grap); InputDef input = new InputDef("tablet", "usb"); diff --git a/agent/src/com/cloud/agent/resource/computing/LibvirtXMLParser.java b/agent/src/com/cloud/agent/resource/computing/LibvirtXMLParser.java index dcfe148971e..88fa860f9db 100644 --- a/agent/src/com/cloud/agent/resource/computing/LibvirtXMLParser.java +++ b/agent/src/com/cloud/agent/resource/computing/LibvirtXMLParser.java @@ -29,57 +29,46 @@ import org.xml.sax.InputSource; import org.xml.sax.SAXException; import org.xml.sax.helpers.DefaultHandler; -public class LibvirtXMLParser extends DefaultHandler{ - private static final Logger s_logger = Logger.getLogger(LibvirtXMLParser.class); - protected static SAXParserFactory s_spf; +public class LibvirtXMLParser extends DefaultHandler { + private static final Logger s_logger = Logger + .getLogger(LibvirtXMLParser.class); + protected static SAXParserFactory s_spf; - static { - s_spf = SAXParserFactory.newInstance(); + static { + s_spf = SAXParserFactory.newInstance(); - } - protected SAXParser _sp; - protected boolean _initialized = false; + } + protected SAXParser _sp; + protected boolean _initialized = false; + public LibvirtXMLParser() { - public LibvirtXMLParser(){ - - try { + try { _sp = s_spf.newSAXParser(); _initialized = true; - } catch(Exception ex) { + } catch (Exception ex) { } } - public boolean parseDomainXML(String domXML) { - if (!_initialized){ + public boolean parseDomainXML(String domXML) { + if (!_initialized) { return false; } try { _sp.parse(new InputSource(new StringReader(domXML)), this); return true; - }catch(SAXException se) { + } catch (SAXException se) { s_logger.warn(se.getMessage()); - }catch (IOException ie) { + } catch (IOException ie) { s_logger.error(ie.getMessage()); } return false; } - - @Override - public void characters(char[] ch, int start, int length) throws SAXException { + public void characters(char[] ch, int start, int length) + throws SAXException { } - - - - - } - - - - -