From aa79ccf985a172603a9ff15fbaa71dbfb3dad99d Mon Sep 17 00:00:00 2001 From: Phong Nguyen Date: Mon, 1 Apr 2013 15:40:21 -0700 Subject: [PATCH] CLOUDSTACK-922: LXC Support in Cloudstack. Signed-off-by: Edison Su --- agent/conf/agent.properties | 9 + api/src/com/cloud/agent/api/Command.java | 2 + .../com/cloud/agent/api/RebootCommand.java | 1 + api/src/com/cloud/agent/api/StopCommand.java | 7 +- api/src/com/cloud/hypervisor/Hypervisor.java | 3 + api/src/com/cloud/storage/Storage.java | 3 +- client/tomcatconf/applicationContext.xml.in | 8 + client/tomcatconf/componentContext.xml.in | 1 + .../kvm/resource/DirectVifDriver.java | 65 +++ .../resource/LibvirtComputingResource.java | 160 ++++--- .../kvm/resource/LibvirtConnection.java | 52 ++- .../kvm/resource/LibvirtDomainXMLParser.java | 21 +- .../kvm/resource/LibvirtStorageVolumeDef.java | 6 +- .../hypervisor/kvm/resource/LibvirtVMDef.java | 71 +++- .../kvm/storage/KVMPhysicalDisk.java | 2 +- .../kvm/storage/KVMStoragePoolManager.java | 4 + .../kvm/storage/LibvirtStorageAdaptor.java | 37 +- .../kvm/resource/LibvirtVMDefTest.java | 14 + .../storage/secondary/cloud-install-sys-tmplt | 4 + .../consoleproxy/ConsoleProxyManagerImpl.java | 12 +- server/src/com/cloud/hypervisor/LXCGuru.java | 58 +++ .../kvm/discoverer/KvmServerDiscoverer.java | 371 +---------------- .../discoverer/LibvirtServerDiscoverer.java | 393 ++++++++++++++++++ .../kvm/discoverer/LxcServerDiscoverer.java | 33 ++ .../cloud/network/SshKeysDistriMonitor.java | 3 +- .../VirtualNetworkApplianceManagerImpl.java | 8 +- .../SecondaryStorageManagerImpl.java | 6 +- .../template/HypervisorTemplateAdapter.java | 3 + .../cloud/vm/VirtualMachineManagerImpl.java | 27 +- setup/db/db/schema-410to420.sql | 12 + ui/scripts/system.js | 62 ++- ui/scripts/templates.js | 4 + ui/scripts/zoneWizard.js | 10 + 33 files changed, 986 insertions(+), 486 deletions(-) create mode 100644 plugins/hypervisors/kvm/src/com/cloud/hypervisor/kvm/resource/DirectVifDriver.java create mode 100644 server/src/com/cloud/hypervisor/LXCGuru.java create mode 100644 server/src/com/cloud/hypervisor/kvm/discoverer/LibvirtServerDiscoverer.java create mode 100644 server/src/com/cloud/hypervisor/kvm/discoverer/LxcServerDiscoverer.java diff --git a/agent/conf/agent.properties b/agent/conf/agent.properties index f7eac674712..e49afbf2aaf 100644 --- a/agent/conf/agent.properties +++ b/agent/conf/agent.properties @@ -80,3 +80,12 @@ domr.scripts.dir=scripts/network/domr/kvm # native = com.cloud.hypervisor.kvm.resource.BridgeVifDriver # openvswitch = com.cloud.hypervisor.kvm.resource.OvsBridgeDriver #libvirt.vif.driver=com.cloud.hypervisor.kvm.resource.BridgeVifDriver + +# set the hypervisor type, values are: kvm, lxc +# hypervisor.type=kvm + +# settings to enable direct networking in libvirt, should not be used +# on hosts that run system vms, values for mode are: private, bridge, vepa +# libvirt.vif.driver=com.cloud.hypervisor.kvm.resource.DirectVifDriver +# network.direct.source.mode=private +# network.direct.device=eth0 diff --git a/api/src/com/cloud/agent/api/Command.java b/api/src/com/cloud/agent/api/Command.java index 9cd67495e04..aadbeaf0def 100755 --- a/api/src/com/cloud/agent/api/Command.java +++ b/api/src/com/cloud/agent/api/Command.java @@ -27,6 +27,8 @@ import com.cloud.agent.api.LogLevel.Log4jLevel; */ public abstract class Command { + public static final String HYPERVISOR_TYPE = "hypervisorType"; + // allow command to carry over hypervisor or other environment related context info @LogLevel(Log4jLevel.Trace) protected Map contextMap = new HashMap(); diff --git a/api/src/com/cloud/agent/api/RebootCommand.java b/api/src/com/cloud/agent/api/RebootCommand.java index 299e61b76af..49712b6fce5 100755 --- a/api/src/com/cloud/agent/api/RebootCommand.java +++ b/api/src/com/cloud/agent/api/RebootCommand.java @@ -16,6 +16,7 @@ // under the License. package com.cloud.agent.api; +import com.cloud.hypervisor.Hypervisor; import com.cloud.vm.VirtualMachine; public class RebootCommand extends Command { diff --git a/api/src/com/cloud/agent/api/StopCommand.java b/api/src/com/cloud/agent/api/StopCommand.java index 9ee7ce3c874..1c67f3816ca 100755 --- a/api/src/com/cloud/agent/api/StopCommand.java +++ b/api/src/com/cloud/agent/api/StopCommand.java @@ -38,10 +38,9 @@ public class StopCommand extends RebootCommand { super(vm); this.vnet = vnet; } - - public StopCommand(VirtualMachine vm, String vmName, String vnet) { - super(vmName); - this.vnet = vnet; + + public StopCommand(VirtualMachine vm) { + super(vm); } public StopCommand(String vmName) { diff --git a/api/src/com/cloud/hypervisor/Hypervisor.java b/api/src/com/cloud/hypervisor/Hypervisor.java index 2e0012dca6f..a4ee5b98fd9 100644 --- a/api/src/com/cloud/hypervisor/Hypervisor.java +++ b/api/src/com/cloud/hypervisor/Hypervisor.java @@ -29,6 +29,7 @@ public class Hypervisor { BareMetal, Simulator, Ovm, + LXC, Any; /*If you don't care about the hypervisor type*/ @@ -54,6 +55,8 @@ public class Hypervisor { return HypervisorType.Simulator; } else if (hypervisor.equalsIgnoreCase("Ovm")) { return HypervisorType.Ovm; + } else if (hypervisor.equalsIgnoreCase("LXC")) { + return HypervisorType.LXC; } else if (hypervisor.equalsIgnoreCase("Any")) { return HypervisorType.Any; } else { diff --git a/api/src/com/cloud/storage/Storage.java b/api/src/com/cloud/storage/Storage.java index fba12b62d3d..c130fe222bf 100755 --- a/api/src/com/cloud/storage/Storage.java +++ b/api/src/com/cloud/storage/Storage.java @@ -26,7 +26,8 @@ public class Storage { VHD(true, true, true), ISO(false, false, false), OVA(true, true, true, "ova"), - BAREMETAL(false, false, false); + BAREMETAL(false, false, false), + TAR(false, false, false); private final boolean thinProvisioned; private final boolean supportSparse; diff --git a/client/tomcatconf/applicationContext.xml.in b/client/tomcatconf/applicationContext.xml.in index ca6b4020364..636eac2b939 100644 --- a/client/tomcatconf/applicationContext.xml.in +++ b/client/tomcatconf/applicationContext.xml.in @@ -499,6 +499,10 @@ + + + + @@ -568,6 +572,10 @@ + + + + diff --git a/client/tomcatconf/componentContext.xml.in b/client/tomcatconf/componentContext.xml.in index 9d95e150129..fea1d0f6157 100644 --- a/client/tomcatconf/componentContext.xml.in +++ b/client/tomcatconf/componentContext.xml.in @@ -106,6 +106,7 @@ +