You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@cloudstack.apache.org by tu...@apache.org on 2014/03/17 16:22:33 UTC

git commit: updated refs/heads/docker to d00d44c

Repository: cloudstack
Updated Branches:
  refs/heads/docker ea0dec77d -> d00d44c38


init docker


Project: http://git-wip-us.apache.org/repos/asf/cloudstack/repo
Commit: http://git-wip-us.apache.org/repos/asf/cloudstack/commit/d00d44c3
Tree: http://git-wip-us.apache.org/repos/asf/cloudstack/tree/d00d44c3
Diff: http://git-wip-us.apache.org/repos/asf/cloudstack/diff/d00d44c3

Branch: refs/heads/docker
Commit: d00d44c38c6af1a83a06eaf7a4e5614dbefc1598
Parents: ea0dec7
Author: ng.tuna@gmail.com <ap...@Tuna.local>
Authored: Mon Mar 17 22:22:05 2014 +0700
Committer: ng.tuna@gmail.com <ap...@Tuna.local>
Committed: Mon Mar 17 22:22:05 2014 +0700

----------------------------------------------------------------------
 agent/conf/agent.properties                     |   3 +-
 api/src/com/cloud/hypervisor/Hypervisor.java    |   3 +
 .../com/cloud/upgrade/dao/Upgrade421to430.java  |   6 +
 plugins/hypervisors/docker/pom.xml              |  86 ++++++++++++++
 .../cloudstack/docker-compute/module.properties |  18 +++
 .../spring-docker-compute-context.xml           |  30 +++++
 .../docker/resource/DockerResource.java         | 115 +++++++++++++++++++
 .../lb/InternalLoadBalancerVMManagerImpl.java   |   3 +
 .../spring-server-compute-context.xml           |   4 +
 .../spring-server-discoverer-context.xml        |   5 +
 server/src/com/cloud/configuration/Config.java  |   4 +-
 server/src/com/cloud/hypervisor/DockerGuru.java |  41 +++++++
 .../kvm/discoverer/DockerServerDiscoverer.java  |  18 +++
 .../kvm/discoverer/LibvirtServerDiscoverer.java |   2 +-
 .../com/cloud/network/SshKeysDistriMonitor.java |   2 +-
 .../router/VirtualNetworkApplianceManager.java  |   5 +-
 .../VirtualNetworkApplianceManagerImpl.java     |   3 +
 setup/db/db/schema-410to420.sql                 |  12 +-
 18 files changed, 351 insertions(+), 9 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/cloudstack/blob/d00d44c3/agent/conf/agent.properties
----------------------------------------------------------------------
diff --git a/agent/conf/agent.properties b/agent/conf/agent.properties
old mode 100644
new mode 100755
index b8b7a7c..a0a50bb
--- a/agent/conf/agent.properties
+++ b/agent/conf/agent.properties
@@ -92,12 +92,13 @@ domr.scripts.dir=scripts/network/domr/kvm
 # openvswitch = com.cloud.hypervisor.kvm.resource.OvsVifDriver
 #libvirt.vif.driver=com.cloud.hypervisor.kvm.resource.BridgeVifDriver
 
-# set the hypervisor type, values are: kvm, lxc
+# set the hypervisor type, values are: kvm, lxc, docker
 # hypervisor.type=kvm
 
 # set the hypervisor URI. Usually there is no need for changing this
 # For KVM: qemu:///system
 # For LXC: lxc:///
+# For Docker: docker:///
 # hypervisor.uri=qemu:///system
 
 # settings to enable direct networking in libvirt, should not be used

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/d00d44c3/api/src/com/cloud/hypervisor/Hypervisor.java
----------------------------------------------------------------------
diff --git a/api/src/com/cloud/hypervisor/Hypervisor.java b/api/src/com/cloud/hypervisor/Hypervisor.java
old mode 100644
new mode 100755
index f8b98cf..fa13ef7
--- a/api/src/com/cloud/hypervisor/Hypervisor.java
+++ b/api/src/com/cloud/hypervisor/Hypervisor.java
@@ -32,6 +32,7 @@ public class Hypervisor {
         Simulator,
         Ovm,
         LXC,
+        Docker,
 
         Any; /*If you don't care about the hypervisor type*/
 
@@ -59,6 +60,8 @@ public class Hypervisor {
                 return HypervisorType.Ovm;
             } else if (hypervisor.equalsIgnoreCase("LXC")) {
                 return HypervisorType.LXC;
+            } else if (hypervisor.equalsIgnoreCase("Docker")) {
+                return HypervisorType.Docker;
             } else if (hypervisor.equalsIgnoreCase("Any")) {
                 return HypervisorType.Any;
             } else {

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/d00d44c3/engine/schema/src/com/cloud/upgrade/dao/Upgrade421to430.java
----------------------------------------------------------------------
diff --git a/engine/schema/src/com/cloud/upgrade/dao/Upgrade421to430.java b/engine/schema/src/com/cloud/upgrade/dao/Upgrade421to430.java
old mode 100644
new mode 100755
index 7e26132..7da2863
--- a/engine/schema/src/com/cloud/upgrade/dao/Upgrade421to430.java
+++ b/engine/schema/src/com/cloud/upgrade/dao/Upgrade421to430.java
@@ -212,6 +212,8 @@ public class Upgrade421to430 implements DbUpgrade {
                             break;
                         case LXC:       hypervisorsListInUse.add(Hypervisor.HypervisorType.LXC);
                             break;
+                        case Docker:    hypervisorsListInUse.add(Hypervisor.HypervisorType.Docker);
+                        	break;
                     }
                 }
             } catch (SQLException e) {
@@ -223,6 +225,7 @@ public class Upgrade421to430 implements DbUpgrade {
                     put(Hypervisor.HypervisorType.VMware, "systemvm-vmware-4.3");
                     put(Hypervisor.HypervisorType.KVM, "systemvm-kvm-4.3");
                     put(Hypervisor.HypervisorType.LXC, "systemvm-lxc-4.3");
+                    put(Hypervisor.HypervisorType.Docker, "systemvm-docker-4.3");
                     put(Hypervisor.HypervisorType.Hyperv, "systemvm-hyperv-4.3");
                 }
             };
@@ -232,6 +235,7 @@ public class Upgrade421to430 implements DbUpgrade {
                     put(Hypervisor.HypervisorType.VMware, "router.template.vmware");
                     put(Hypervisor.HypervisorType.KVM, "router.template.kvm");
                     put(Hypervisor.HypervisorType.LXC, "router.template.lxc");
+                    put(Hypervisor.HypervisorType.Docker, "router.template.docker");
                     put(Hypervisor.HypervisorType.Hyperv, "router.template.hyperv");
                 }
             };
@@ -241,6 +245,7 @@ public class Upgrade421to430 implements DbUpgrade {
                     put(Hypervisor.HypervisorType.VMware, "http://download.cloud.com/templates/4.3/systemvm64template-2014-01-14-master-vmware.ova");
                     put(Hypervisor.HypervisorType.KVM, "http://download.cloud.com/templates/4.3/systemvm64template-2014-01-14-master-kvm.qcow2.bz2");
                     put(Hypervisor.HypervisorType.LXC, "http://download.cloud.com/templates/4.3/systemvm64template-2014-01-14-master-kvm.qcow2.bz2");
+                    put(Hypervisor.HypervisorType.Docker, "http://download.cloud.com/templates/4.3/systemvm64template-2014-01-14-master-kvm.qcow2.bz2");
                     put(Hypervisor.HypervisorType.Hyperv, "http://download.cloud.com/templates/4.3/systemvm64template-2013-12-23-hyperv.vhd.bz2");
                 }
             };
@@ -250,6 +255,7 @@ public class Upgrade421to430 implements DbUpgrade {
                     put(Hypervisor.HypervisorType.VMware, "ef593a061f3b7594ab0bfd9b0ed0a0d4");
                     put(Hypervisor.HypervisorType.KVM, "85a1bed07bf43cbf022451cb2ecae4ff");
                     put(Hypervisor.HypervisorType.LXC, "85a1bed07bf43cbf022451cb2ecae4ff");
+                    put(Hypervisor.HypervisorType.Docker, "85a1bed07bf43cbf022451cb2ecae4ff");
                     put(Hypervisor.HypervisorType.Hyperv, "5df45ee6ebe1b703a8805f4e1f4d0818");
                 }
             };

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/d00d44c3/plugins/hypervisors/docker/pom.xml
----------------------------------------------------------------------
diff --git a/plugins/hypervisors/docker/pom.xml b/plugins/hypervisors/docker/pom.xml
new file mode 100755
index 0000000..4ede673
--- /dev/null
+++ b/plugins/hypervisors/docker/pom.xml
@@ -0,0 +1,86 @@
+<!-- Licensed to the Apache Software Foundation (ASF) under one or more contributor 
+  license agreements. See the NOTICE file distributed with this work for additional 
+  information regarding copyright ownership. The ASF licenses this file to you under 
+  the Apache License, Version 2.0 (the "License"); you may not use this file except 
+  in compliance with the License. You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 
+  Unless required by applicable law or agreed to in writing, software distributed under 
+  the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS 
+  OF ANY KIND, either express or implied. See the License for the specific language 
+  governing permissions and limitations under the License. -->
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+  xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+  <modelVersion>4.0.0</modelVersion>
+  <artifactId>cloud-plugin-hypervisor-docker</artifactId>
+  <name>Apache CloudStack Plugin - Hypervisor Docker</name>
+  <parent>
+    <groupId>org.apache.cloudstack</groupId>
+    <artifactId>cloudstack-plugins</artifactId>
+    <version>4.4.0-SNAPSHOT</version>
+    <relativePath>../../pom.xml</relativePath>
+  </parent>
+  <repositories>
+    <repository>
+      <id>libvirt-org</id>
+      <url>http://libvirt.org/maven2</url>
+    </repository>
+  </repositories>
+  <dependencies>
+    <dependency>
+      <groupId>commons-io</groupId>
+      <artifactId>commons-io</artifactId>
+    </dependency>
+    <dependency>
+      <groupId>org.apache.cloudstack</groupId>
+      <artifactId>cloud-agent</artifactId>
+      <version>${project.version}</version>
+    </dependency>
+    <dependency>
+      <groupId>org.libvirt</groupId>
+      <artifactId>libvirt</artifactId>
+      <version>${cs.libvirt-java.version}</version>
+    </dependency>
+    <dependency>
+      <groupId>org.apache.cloudstack</groupId>
+      <artifactId>cloud-plugin-network-ovs</artifactId>
+      <version>${project.version}</version>
+    </dependency>
+    <dependency>
+      <groupId>net.java.dev.jna</groupId>
+       <artifactId>jna</artifactId>
+       <version>${cs.jna.version}</version>
+    </dependency>
+  </dependencies>
+  <build>
+    <defaultGoal>install</defaultGoal>
+    <sourceDirectory>src</sourceDirectory>
+    <testSourceDirectory>test</testSourceDirectory>
+    <plugins>
+      <plugin>
+        <groupId>org.apache.maven.plugins</groupId>
+        <artifactId>maven-dependency-plugin</artifactId>
+        <executions>
+          <execution>
+            <id>copy-dependencies</id>
+            <phase>package</phase>
+            <goals>
+              <goal>copy-dependencies</goal>
+            </goals>
+            <configuration>
+              <outputDirectory>${project.build.directory}/dependencies</outputDirectory>
+              <includeScope>runtime</includeScope>
+            </configuration>
+          </execution>
+        </executions>
+      </plugin>
+      <plugin>
+        <groupId>org.apache.maven.plugins</groupId>
+        <artifactId>maven-surefire-plugin</artifactId>
+        <configuration>
+          <excludes>
+            <exclude>**/Qemu*.java</exclude>
+          </excludes>
+        </configuration>
+      </plugin>
+    </plugins>
+  </build>
+</project>

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/d00d44c3/plugins/hypervisors/docker/resources/META-INF/cloudstack/docker-compute/module.properties
----------------------------------------------------------------------
diff --git a/plugins/hypervisors/docker/resources/META-INF/cloudstack/docker-compute/module.properties b/plugins/hypervisors/docker/resources/META-INF/cloudstack/docker-compute/module.properties
new file mode 100755
index 0000000..0da362b
--- /dev/null
+++ b/plugins/hypervisors/docker/resources/META-INF/cloudstack/docker-compute/module.properties
@@ -0,0 +1,18 @@
+# Licensed to the Apache Software Foundation (ASF) under one
+# or more contributor license agreements.  See the NOTICE file
+# distributed with this work for additional information
+# regarding copyright ownership.  The ASF licenses this file
+# to you under the Apache License, Version 2.0 (the
+# "License"); you may not use this file except in compliance
+# with the License.  You may obtain a copy of the License at
+#
+#   http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing,
+# software distributed under the License is distributed on an
+# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+# KIND, either express or implied.  See the License for the
+# specific language governing permissions and limitations
+# under the License.
+name=docker-compute
+parent=compute
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/d00d44c3/plugins/hypervisors/docker/resources/META-INF/cloudstack/docker-compute/spring-docker-compute-context.xml
----------------------------------------------------------------------
diff --git a/plugins/hypervisors/docker/resources/META-INF/cloudstack/docker-compute/spring-docker-compute-context.xml b/plugins/hypervisors/docker/resources/META-INF/cloudstack/docker-compute/spring-docker-compute-context.xml
new file mode 100755
index 0000000..77c549f
--- /dev/null
+++ b/plugins/hypervisors/docker/resources/META-INF/cloudstack/docker-compute/spring-docker-compute-context.xml
@@ -0,0 +1,30 @@
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements. See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership. The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License. You may obtain a copy of the License at
+
+  http://www.apache.org/licenses/LICENSE-2.0
+
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied. See the License for the
+  specific language governing permissions and limitations
+  under the License.
+-->
+<beans xmlns="http://www.springframework.org/schema/beans"
+       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+       xmlns:context="http://www.springframework.org/schema/context"
+       xmlns:aop="http://www.springframework.org/schema/aop"
+       xsi:schemaLocation="http://www.springframework.org/schema/beans
+                      http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
+                      http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-3.0.xsd
+                      http://www.springframework.org/schema/context
+                      http://www.springframework.org/schema/context/spring-context-3.0.xsd"
+                      >
+
+</beans>

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/d00d44c3/plugins/hypervisors/docker/src/com/cloud/hypervisor/docker/resource/DockerResource.java
----------------------------------------------------------------------
diff --git a/plugins/hypervisors/docker/src/com/cloud/hypervisor/docker/resource/DockerResource.java b/plugins/hypervisors/docker/src/com/cloud/hypervisor/docker/resource/DockerResource.java
new file mode 100644
index 0000000..501df0d
--- /dev/null
+++ b/plugins/hypervisors/docker/src/com/cloud/hypervisor/docker/resource/DockerResource.java
@@ -0,0 +1,115 @@
+package com.cloud.hypervisor.docker.resource;
+
+import java.util.Map;
+
+import javax.ejb.Local;
+import javax.naming.ConfigurationException;
+
+import org.apache.log4j.Logger;
+
+import com.cloud.agent.api.Answer;
+import com.cloud.agent.api.Command;
+import com.cloud.agent.api.PingCommand;
+import com.cloud.agent.api.RebootCommand;
+import com.cloud.agent.api.StartAnswer;
+import com.cloud.agent.api.StartCommand;
+import com.cloud.agent.api.StartupCommand;
+import com.cloud.agent.api.StopCommand;
+import com.cloud.host.Host.Type;
+import com.cloud.resource.ServerResource;
+import com.cloud.resource.ServerResourceBase;
+
+@Local(value = {ServerResource.class})
+public class DockerResource extends ServerResourceBase implements ServerResource {
+	private static final Logger s_logger = Logger.getLogger(DockerResource.class);
+
+	@Override
+    public boolean configure(String name, Map<String, Object> params) throws ConfigurationException {
+		return true;
+	}
+	
+	@Override
+	public Answer executeRequest(Command cmd) {
+		try {
+			if (cmd instanceof StopCommand) {
+                return execute((StopCommand)cmd);
+            } else if (cmd instanceof RebootCommand) {
+                return execute((RebootCommand)cmd);
+            }  else if (cmd instanceof StartCommand) {
+                return execute((StartCommand)cmd);
+            }  else {
+                s_logger.warn("Unsupported command ");
+                return Answer.createUnsupportedCommandAnswer(cmd);
+            }
+        } catch (final IllegalArgumentException e) {
+            return new Answer(cmd, false, e.getMessage());
+        }
+	}
+	
+	protected Answer execute(StopCommand cmd) {
+		
+	}
+	
+	private Answer execute(RebootCommand cmd) {
+		
+	}
+	
+	protected StartAnswer execute(StartCommand cmd) {
+		
+	}
+	
+	@Override
+	public void setName(String name) {
+		// TODO Auto-generated method stub
+		
+	}
+
+	@Override
+	public void setConfigParams(Map<String, Object> params) {
+		// TODO Auto-generated method stub
+		
+	}
+
+	@Override
+	public Map<String, Object> getConfigParams() {
+		// TODO Auto-generated method stub
+		return null;
+	}
+
+	@Override
+	public int getRunLevel() {
+		// TODO Auto-generated method stub
+		return 0;
+	}
+
+	@Override
+	public void setRunLevel(int level) {
+		// TODO Auto-generated method stub
+		
+	}
+
+	@Override
+	public Type getType() {
+		// TODO Auto-generated method stub
+		return null;
+	}
+
+	@Override
+	public StartupCommand[] initialize() {
+		// TODO Auto-generated method stub
+		return null;
+	}
+
+	@Override
+	public PingCommand getCurrentStatus(long id) {
+		// TODO Auto-generated method stub
+		return null;
+	}
+
+	@Override
+	protected String getDefaultScriptsDir() {
+		// TODO Auto-generated method stub
+		return null;
+	}
+	
+}

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/d00d44c3/plugins/network-elements/internal-loadbalancer/src/org/apache/cloudstack/network/lb/InternalLoadBalancerVMManagerImpl.java
----------------------------------------------------------------------
diff --git a/plugins/network-elements/internal-loadbalancer/src/org/apache/cloudstack/network/lb/InternalLoadBalancerVMManagerImpl.java b/plugins/network-elements/internal-loadbalancer/src/org/apache/cloudstack/network/lb/InternalLoadBalancerVMManagerImpl.java
old mode 100644
new mode 100755
index 8b82306..7ed5064
--- a/plugins/network-elements/internal-loadbalancer/src/org/apache/cloudstack/network/lb/InternalLoadBalancerVMManagerImpl.java
+++ b/plugins/network-elements/internal-loadbalancer/src/org/apache/cloudstack/network/lb/InternalLoadBalancerVMManagerImpl.java
@@ -748,6 +748,9 @@ public class InternalLoadBalancerVMManagerImpl extends ManagerBase implements In
                     case LXC:
                         templateName = VirtualNetworkApplianceManager.RouterTemplateLxc.valueIn(dest.getDataCenter().getId());
                         break;
+                    case Docker:
+                        templateName = VirtualNetworkApplianceManager.RouterTemplateDocker.valueIn(dest.getDataCenter().getId());
+                        break;
                     default:
                         break;
                 }

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/d00d44c3/server/resources/META-INF/cloudstack/server-compute/spring-server-compute-context.xml
----------------------------------------------------------------------
diff --git a/server/resources/META-INF/cloudstack/server-compute/spring-server-compute-context.xml b/server/resources/META-INF/cloudstack/server-compute/spring-server-compute-context.xml
old mode 100644
new mode 100755
index 1311902..d1667eb
--- a/server/resources/META-INF/cloudstack/server-compute/spring-server-compute-context.xml
+++ b/server/resources/META-INF/cloudstack/server-compute/spring-server-compute-context.xml
@@ -34,5 +34,9 @@
     <bean id="LXCGuru" class="com.cloud.hypervisor.LXCGuru">
         <property name="name" value="LXCGuru" />
     </bean>
+    
+    <bean id="DockerGuru" class="com.cloud.hypervisor.DockerGuru">
+        <property name="name" value="DockerGuru" />
+    </bean>
 
 </beans>

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/d00d44c3/server/resources/META-INF/cloudstack/server-discoverer/spring-server-discoverer-context.xml
----------------------------------------------------------------------
diff --git a/server/resources/META-INF/cloudstack/server-discoverer/spring-server-discoverer-context.xml b/server/resources/META-INF/cloudstack/server-discoverer/spring-server-discoverer-context.xml
old mode 100644
new mode 100755
index 90666d1..3b2a948
--- a/server/resources/META-INF/cloudstack/server-discoverer/spring-server-discoverer-context.xml
+++ b/server/resources/META-INF/cloudstack/server-discoverer/spring-server-discoverer-context.xml
@@ -37,6 +37,11 @@
         class="com.cloud.hypervisor.kvm.discoverer.LxcServerDiscoverer">
         <property name="name" value="Lxc Discover" />
     </bean>
+    
+    <bean id="DockerServerDiscoverer"
+        class="com.cloud.hypervisor.kvm.discoverer.DockerServerDiscoverer">
+        <property name="name" value="Docker Discover" />
+    </bean>    
 
     <bean id="dummyHostDiscoverer" class="com.cloud.resource.DummyHostDiscoverer">
         <property name="name" value="dummyHostDiscoverer" />

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/d00d44c3/server/src/com/cloud/configuration/Config.java
----------------------------------------------------------------------
diff --git a/server/src/com/cloud/configuration/Config.java b/server/src/com/cloud/configuration/Config.java
index 98e5d34..ec63d30 100755
--- a/server/src/com/cloud/configuration/Config.java
+++ b/server/src/com/cloud/configuration/Config.java
@@ -716,7 +716,7 @@ public enum Config {
             String.class,
             "system.vm.default.hypervisor",
             null,
-            "Hypervisor type used to create system vm, valid values are: XenServer, KVM, VMware, Hyperv, VirtualBox, Parralels, BareMetal, Ovm, LXC, Any",
+            "Hypervisor type used to create system vm, valid values are: XenServer, KVM, VMware, Hyperv, VirtualBox, Parralels, BareMetal, Ovm, LXC, Docker, Any",
             null),
     SystemVMRandomPassword(
             "Advanced",
@@ -733,7 +733,7 @@ public enum Config {
             String.class,
             "hypervisor.list",
             HypervisorType.Hyperv + "," + HypervisorType.KVM + "," + HypervisorType.XenServer + "," + HypervisorType.VMware + "," + HypervisorType.BareMetal + "," +
-                HypervisorType.Ovm + "," + HypervisorType.LXC,
+                HypervisorType.Ovm + "," + HypervisorType.LXC + "," + HypervisorType.Docker,
             "The list of hypervisors that this deployment will use.",
             "hypervisorList"),
     ManagementNetwork("Advanced", ManagementServer.class, String.class, "management.network.cidr", null, "The cidr of management server network", null),

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/d00d44c3/server/src/com/cloud/hypervisor/DockerGuru.java
----------------------------------------------------------------------
diff --git a/server/src/com/cloud/hypervisor/DockerGuru.java b/server/src/com/cloud/hypervisor/DockerGuru.java
new file mode 100644
index 0000000..bba6927
--- /dev/null
+++ b/server/src/com/cloud/hypervisor/DockerGuru.java
@@ -0,0 +1,41 @@
+package com.cloud.hypervisor;
+
+import javax.ejb.Local;
+import javax.inject.Inject;
+
+import com.cloud.agent.api.to.VirtualMachineTO;
+import com.cloud.hypervisor.Hypervisor.HypervisorType;
+import com.cloud.storage.GuestOSVO;
+import com.cloud.storage.dao.GuestOSDao;
+import com.cloud.vm.VirtualMachineProfile;
+
+@Local(value = HypervisorGuru.class)
+public class DockerGuru extends HypervisorGuruBase implements HypervisorGuru {
+    @Inject
+    GuestOSDao _guestOsDao;
+
+    @Override
+    public HypervisorType getHypervisorType() {
+        return HypervisorType.Docker;
+    }
+    
+    protected DockerGuru() {
+        super();
+    }
+
+    @Override
+    public VirtualMachineTO implement(VirtualMachineProfile vm) {
+        VirtualMachineTO to = toVirtualMachineTO(vm);
+
+        // Determine the VM's OS description
+        GuestOSVO guestOS = _guestOsDao.findById(vm.getVirtualMachine().getGuestOSId());
+        to.setOs(guestOS.getDisplayName());
+
+        return to;
+    }
+    
+    @Override
+    public boolean trackVmHostChange() {
+        return false;
+    }
+}

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/d00d44c3/server/src/com/cloud/hypervisor/kvm/discoverer/DockerServerDiscoverer.java
----------------------------------------------------------------------
diff --git a/server/src/com/cloud/hypervisor/kvm/discoverer/DockerServerDiscoverer.java b/server/src/com/cloud/hypervisor/kvm/discoverer/DockerServerDiscoverer.java
new file mode 100644
index 0000000..558aa25
--- /dev/null
+++ b/server/src/com/cloud/hypervisor/kvm/discoverer/DockerServerDiscoverer.java
@@ -0,0 +1,18 @@
+package com.cloud.hypervisor.kvm.discoverer;
+
+import javax.ejb.Local;
+
+import org.apache.log4j.Logger;
+
+import com.cloud.hypervisor.Hypervisor;
+import com.cloud.resource.Discoverer;
+
+@Local(value = Discoverer.class)
+public class DockerServerDiscoverer extends LibvirtServerDiscoverer {
+	private static final Logger s_logger = Logger.getLogger(DockerServerDiscoverer.class);
+
+    @Override
+    public Hypervisor.HypervisorType getHypervisorType() {
+        return Hypervisor.HypervisorType.Docker;
+    }
+}

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/d00d44c3/server/src/com/cloud/hypervisor/kvm/discoverer/LibvirtServerDiscoverer.java
----------------------------------------------------------------------
diff --git a/server/src/com/cloud/hypervisor/kvm/discoverer/LibvirtServerDiscoverer.java b/server/src/com/cloud/hypervisor/kvm/discoverer/LibvirtServerDiscoverer.java
old mode 100644
new mode 100755
index 770099c..7879c0c
--- a/server/src/com/cloud/hypervisor/kvm/discoverer/LibvirtServerDiscoverer.java
+++ b/server/src/com/cloud/hypervisor/kvm/discoverer/LibvirtServerDiscoverer.java
@@ -366,7 +366,7 @@ public abstract class LibvirtServerDiscoverer extends DiscovererBase implements
 
     @Override
     public DeleteHostAnswer deleteHost(HostVO host, boolean isForced, boolean isForceDeleteStorage) throws UnableDeleteHostException {
-        if (host.getType() != Host.Type.Routing || (host.getHypervisorType() != HypervisorType.KVM && host.getHypervisorType() != HypervisorType.LXC)) {
+        if (host.getType() != Host.Type.Routing || (host.getHypervisorType() != HypervisorType.KVM && host.getHypervisorType() != HypervisorType.LXC && host.getHypervisorType() != HypervisorType.Docker)) {
             return null;
         }
 

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/d00d44c3/server/src/com/cloud/network/SshKeysDistriMonitor.java
----------------------------------------------------------------------
diff --git a/server/src/com/cloud/network/SshKeysDistriMonitor.java b/server/src/com/cloud/network/SshKeysDistriMonitor.java
index 1eeb3a3..2640cc4 100755
--- a/server/src/com/cloud/network/SshKeysDistriMonitor.java
+++ b/server/src/com/cloud/network/SshKeysDistriMonitor.java
@@ -71,7 +71,7 @@ public class SshKeysDistriMonitor implements Listener {
     public void processConnect(Host host, StartupCommand cmd, boolean forRebalance) throws ConnectionException {
         if (cmd instanceof StartupRoutingCommand) {
             if (((StartupRoutingCommand)cmd).getHypervisorType() == HypervisorType.KVM || ((StartupRoutingCommand)cmd).getHypervisorType() == HypervisorType.XenServer ||
-                ((StartupRoutingCommand)cmd).getHypervisorType() == HypervisorType.LXC) {
+                ((StartupRoutingCommand)cmd).getHypervisorType() == HypervisorType.LXC || ((StartupRoutingCommand)cmd).getHypervisorType() == HypervisorType.Docker) {
                 /*TODO: Get the private/public keys here*/
 
                 String pubKey = _configDao.getValue("ssh.publickey");

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/d00d44c3/server/src/com/cloud/network/router/VirtualNetworkApplianceManager.java
----------------------------------------------------------------------
diff --git a/server/src/com/cloud/network/router/VirtualNetworkApplianceManager.java b/server/src/com/cloud/network/router/VirtualNetworkApplianceManager.java
old mode 100644
new mode 100755
index 9097b87..436a092
--- a/server/src/com/cloud/network/router/VirtualNetworkApplianceManager.java
+++ b/server/src/com/cloud/network/router/VirtualNetworkApplianceManager.java
@@ -50,6 +50,7 @@ public interface VirtualNetworkApplianceManager extends Manager, VirtualNetworkA
     static final String RouterTemplateVmwareCK = "router.template.vmware";
     static final String RouterTemplateHyperVCK = "router.template.hyperv";
     static final String RouterTemplateLxcCK = "router.template.lxc";
+    static final String RouterTemplateDockerCK = "router.template.docker";    
     static final String SetServiceMonitorCK = "network.router.EnableServiceMonitoring";
 
     static final ConfigKey<String> RouterTemplateXen = new ConfigKey<String>(String.class, RouterTemplateXenCK, "Advanced", "SystemVM Template (XenServer)",
@@ -61,7 +62,9 @@ public interface VirtualNetworkApplianceManager extends Manager, VirtualNetworkA
     static final ConfigKey<String> RouterTemplateHyperV = new ConfigKey<String>(String.class, RouterTemplateHyperVCK, "Advanced", "SystemVM Template (HyperV)",
         "Name of the default router template on Hyperv.", true, ConfigKey.Scope.Zone, null);
     static final ConfigKey<String> RouterTemplateLxc = new ConfigKey<String>(String.class, RouterTemplateLxcCK, "Advanced", "SystemVM Template (LXC)",
-        "Name of the default router template on LXC.", true, ConfigKey.Scope.Zone, null);
+            "Name of the default router template on LXC.", true, ConfigKey.Scope.Zone, null);
+    static final ConfigKey<String> RouterTemplateDocker = new ConfigKey<String>(String.class, RouterTemplateDockerCK, "Advanced", "SystemVM Template (Docker)",
+            "Name of the default router template on Docker.", true, ConfigKey.Scope.Zone, null);
 
     static final ConfigKey<String> SetServiceMonitor = new ConfigKey<String>(String.class, SetServiceMonitorCK, "Advanced", "true",
             "service monitoring in router enable/disable option, default true", true, ConfigKey.Scope.Zone, null);

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/d00d44c3/server/src/com/cloud/network/router/VirtualNetworkApplianceManagerImpl.java
----------------------------------------------------------------------
diff --git a/server/src/com/cloud/network/router/VirtualNetworkApplianceManagerImpl.java b/server/src/com/cloud/network/router/VirtualNetworkApplianceManagerImpl.java
index 37171f5..200b2a6 100755
--- a/server/src/com/cloud/network/router/VirtualNetworkApplianceManagerImpl.java
+++ b/server/src/com/cloud/network/router/VirtualNetworkApplianceManagerImpl.java
@@ -1648,6 +1648,9 @@ public class VirtualNetworkApplianceManagerImpl extends ManagerBase implements V
                 case LXC:
                     templateName = RouterTemplateLxc.valueIn(dest.getDataCenter().getId());
                     break;
+                case Docker:
+                    templateName = RouterTemplateDocker.valueIn(dest.getDataCenter().getId());
+                    break;
                 default:
                     break;
                 }

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/d00d44c3/setup/db/db/schema-410to420.sql
----------------------------------------------------------------------
diff --git a/setup/db/db/schema-410to420.sql b/setup/db/db/schema-410to420.sql
old mode 100644
new mode 100755
index ebbcfef..3316d05
--- a/setup/db/db/schema-410to420.sql
+++ b/setup/db/db/schema-410to420.sql
@@ -661,19 +661,24 @@ INSERT IGNORE INTO `cloud`.`configuration` VALUES ('Project Defaults', 'DEFAULT'
 ALTER TABLE `cloud`.`remote_access_vpn` ADD COLUMN `id` bigint unsigned NOT NULL UNIQUE AUTO_INCREMENT COMMENT 'id';
 ALTER TABLE `cloud`.`remote_access_vpn` ADD COLUMN `uuid` varchar(40) UNIQUE;
 
--- START: support for LXC
+-- START: support for LXC and Docker
  
 INSERT IGNORE INTO `cloud`.`hypervisor_capabilities`(uuid, hypervisor_type, hypervisor_version, max_guests_limit, security_group_enabled) VALUES (UUID(), 'LXC', 'default', 50, 1);
+INSERT IGNORE INTO `cloud`.`hypervisor_capabilities`(uuid, hypervisor_type, hypervisor_version, max_guests_limit, security_group_enabled) VALUES (UUID(), 'Docker', 'default', 50, 1);
+
 ALTER TABLE `cloud`.`physical_network_traffic_types` ADD COLUMN `lxc_network_label` varchar(255) DEFAULT 'cloudbr0' COMMENT 'The network name label of the physical device dedicated to this traffic on a LXC host';
+ALTER TABLE `cloud`.`physical_network_traffic_types` ADD COLUMN `docker_network_label` varchar(255) DEFAULT 'cloudbr0' COMMENT 'The network name label of the physical device dedicated to this traffic on a Docker host';
  
-UPDATE configuration SET value='KVM,XenServer,VMware,BareMetal,Ovm,LXC' WHERE name='hypervisor.list';
+UPDATE configuration SET value='KVM,XenServer,VMware,BareMetal,Ovm,LXC,Docker' WHERE name='hypervisor.list';
  
 INSERT INTO `cloud`.`vm_template` (id, uuid, unique_name, name, public, created, type, hvm, bits, account_id, url, checksum, enable_password, display_text, format, guest_os_id, featured, cross_zones, hypervisor_type)
      VALUES (10, UUID(), 'routing-10', 'SystemVM Template (LXC)', 0, now(), 'SYSTEM', 0, 64, 1, 'http://download.cloud.com/templates/acton/acton-systemvm-02062012.qcow2.bz2', '2755de1f9ef2ce4d6f2bee2efbb4da92', 0, 'SystemVM Template (LXC)', 'QCOW2', 15, 0, 1, 'LXC');
+INSERT INTO `cloud`.`vm_template` (id, uuid, unique_name, name, public, created, type, hvm, bits, account_id, url, checksum, enable_password, display_text, format, guest_os_id, featured, cross_zones, hypervisor_type)
+     VALUES (10, UUID(), 'routing-10', 'SystemVM Template (Docker)', 0, now(), 'SYSTEM', 0, 64, 1, 'http://download.cloud.com/templates/acton/acton-systemvm-02062012.qcow2.bz2', '2755de1f9ef2ce4d6f2bee2efbb4da92', 0, 'SystemVM Template (Docker)', 'QCOW2', 15, 0, 1, 'Docker');
 
 ALTER TABLE `cloud`.`user_vm` MODIFY user_data TEXT(32768);
 
--- END: support for LXC
+-- END: support for LXC and Docker
 
 CREATE TABLE `cloud`.`vm_snapshots` (
   `id` bigint(20) unsigned NOT NULL auto_increment COMMENT 'Primary Key',
@@ -2190,6 +2195,7 @@ INSERT IGNORE INTO `cloud`.`configuration` VALUES ('Advanced', 'DEFAULT', 'manag
 INSERT IGNORE INTO `cloud`.`configuration` VALUES ('Advanced', 'DEFAULT', 'NetworkManager', 'router.template.hyperv', 'SystemVM Template (HyperV)', 'Name of the default router template on Hyperv.');
 INSERT IGNORE INTO `cloud`.`configuration` VALUES ('Advanced', 'DEFAULT', 'NetworkManager', 'router.template.kvm', 'SystemVM Template (KVM)', 'Name of the default router template on KVM.');
 INSERT IGNORE INTO `cloud`.`configuration` VALUES ('Advanced', 'DEFAULT', 'NetworkManager', 'router.template.lxc', 'SystemVM Template (LXC)', 'Name of the default router template on LXC.');
+INSERT IGNORE INTO `cloud`.`configuration` VALUES ('Advanced', 'DEFAULT', 'NetworkManager', 'router.template.docker', 'SystemVM Template (Docker)', 'Name of the default router template on Docker.');
 INSERT IGNORE INTO `cloud`.`configuration` VALUES ('Advanced', 'DEFAULT', 'NetworkManager', 'router.template.vmware', 'SystemVM Template (vSphere)', 'Name of the default router template on Vmware.');
 INSERT IGNORE INTO `cloud`.`configuration` VALUES ('Advanced', 'DEFAULT', 'NetworkManager', 'router.template.xen', 'SystemVM Template (XenServer)', 'Name of the default router template on Xenserver.');