You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@cloudstack.apache.org by ch...@apache.org on 2013/04/10 00:16:31 UTC
[09/19] git commit: updated refs/heads/master to bf56403
QuickCloud: option to build with componentContext tailored for quickcloud
For now it replaces ConsoleProxyManagerImpl with StaticConsoleProxyManager
Usage: mvn install -Dquickcloud
QuickCloud: rename deploy profile
QuickCloud: remove cyclic dependency introduced in nonoss build by moving SecondaryStorageDiscoverer into services
However with this fix, developers will be unable to run 'PremiumSecondaryStorageResource' (for VMWare installations) using mvn exec:java.
Instead they will have to use the exploded archive from systemvm.zip
Project: http://git-wip-us.apache.org/repos/asf/cloudstack/repo
Commit: http://git-wip-us.apache.org/repos/asf/cloudstack/commit/c5b11df6
Tree: http://git-wip-us.apache.org/repos/asf/cloudstack/tree/c5b11df6
Diff: http://git-wip-us.apache.org/repos/asf/cloudstack/diff/c5b11df6
Branch: refs/heads/master
Commit: c5b11df6b78dd755acc4141dc2063608e581996d
Parents: a806ce4
Author: Chiradeep Vittal <ch...@apache.org>
Authored: Tue Mar 26 16:40:19 2013 -0700
Committer: Chiradeep Vittal <ch...@apache.org>
Committed: Tue Apr 9 14:45:26 2013 -0700
----------------------------------------------------------------------
client/pom.xml | 16 +
.../tomcatconf/quickCloudComponentContext.xml.in | 336 +++++++++++++++
plugins/hypervisors/simulator/pom.xml | 5 +
.../resource/SimulatorSecondaryDiscoverer.java | 3 +-
plugins/hypervisors/vmware/pom.xml | 5 +
server/pom.xml | 5 -
.../secondary/SecondaryStorageDiscoverer.java | 322 --------------
services/console-proxy/server/pom.xml | 10 +-
services/secondary-storage/pom.xml | 28 +-
.../resource/SecondaryStorageDiscoverer.java | 320 ++++++++++++++
tools/devcloud/pom.xml | 4 +-
11 files changed, 695 insertions(+), 359 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/cloudstack/blob/c5b11df6/client/pom.xml
----------------------------------------------------------------------
diff --git a/client/pom.xml b/client/pom.xml
index 9323d0f..4bd1a6f 100644
--- a/client/pom.xml
+++ b/client/pom.xml
@@ -453,6 +453,22 @@
</target>
</configuration>
</execution>
+ <execution>
+ <id>process-quickcloud-spring-context</id>
+ <phase>process-resources</phase>
+ <goals>
+ <goal>run</goal>
+ </goals>
+ <configuration>
+ <target if="${quickcloud}">
+ <echo>quickcloud</echo>
+ <replaceregexp
+ file="${basedir}/target/generated-webapp/WEB-INF/web.xml"
+ match="classpath:componentContext.xml"
+ replace="classpath:quickCloudComponentContext.xml" byline="true" />
+ </target>
+ </configuration>
+ </execution>
</executions>
</plugin>
<!-- there are the jasypt libs requires by some of the python scripts -->
http://git-wip-us.apache.org/repos/asf/cloudstack/blob/c5b11df6/client/tomcatconf/quickCloudComponentContext.xml.in
----------------------------------------------------------------------
diff --git a/client/tomcatconf/quickCloudComponentContext.xml.in b/client/tomcatconf/quickCloudComponentContext.xml.in
new file mode 100644
index 0000000..dbd3117
--- /dev/null
+++ b/client/tomcatconf/quickCloudComponentContext.xml.in
@@ -0,0 +1,336 @@
+<!--
+ 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:tx="http://www.springframework.org/schema/tx"
+ 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/tx
+ http://www.springframework.org/schema/tx/spring-tx-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">
+
+
+ <!--
+ Compose a CloudStack deployment with selected components here
+ -->
+ <bean id="databaseUpgradeChecker" class="com.cloud.upgrade.DatabaseUpgradeChecker" />
+ <bean id="encryptionSecretKeyChecker" class="com.cloud.utils.crypt.EncryptionSecretKeyChecker" />
+ <bean id="configurationServerImpl" class="com.cloud.server.ConfigurationServerImpl" />
+
+ <bean id="managementServerImpl" class ="com.cloud.server.ManagementServerImpl" >
+ <property name="UserAuthenticators">
+ <list>
+ <ref bean="MD5UserAuthenticator"/>
+ <ref bean="LDAPUserAuthenticator"/>
+ </list>
+ </property>
+ </bean>
+
+ <bean id ="AccountManagerImpl" class="com.cloud.user.AccountManagerImpl">
+ <property name="UserAuthenticators">
+ <list>
+ <ref bean="MD5UserAuthenticator"/>
+ <ref bean="LDAPUserAuthenticator"/>
+ </list>
+ </property>
+ </bean>
+
+ <bean id="clusterManagerImpl" class="com.cloud.cluster.ClusterManagerImpl" />
+ <bean id="clusteredAgentManagerImpl" class="com.cloud.agent.manager.ClusteredAgentManagerImpl" />
+ <bean id="clusteredVirtualMachineManagerImpl" class="com.cloud.vm.ClusteredVirtualMachineManagerImpl" />
+ <bean id="highAvailabilityManagerExtImpl" class="com.cloud.ha.HighAvailabilityManagerExtImpl" />
+ <bean id="userVmManagerImpl" class="com.cloud.vm.UserVmManagerImpl" />
+ <bean id="consoleProxyManagerImpl" class="com.cloud.consoleproxy.StaticConsoleProxyManager" />
+ <bean id="securityGroupManagerImpl2" class="com.cloud.network.security.SecurityGroupManagerImpl2" />
+ <bean id="premiumSecondaryStorageManagerImpl" class="com.cloud.secstorage.PremiumSecondaryStorageManagerImpl" />
+ <bean id="userVmDaoImpl" class="com.cloud.vm.dao.UserVmDaoImpl" />
+ <bean id="ipv6AddressManagerImpl" class="com.cloud.network.Ipv6AddressManagerImpl" />
+
+ <bean id="apiRateLimitServiceImpl" class="org.apache.cloudstack.ratelimit.ApiRateLimitServiceImpl"/>
+ <bean id="BaremetalManager" class="com.cloud.baremetal.manager.BaremetalManagerImpl"/>
+ <bean id="BaremetalDhcpManager" class="com.cloud.baremetal.networkservice.BaremetalDhcpManagerImpl"/>
+ <bean id="BaremetalKickStartPxeService" class="com.cloud.baremetal.networkservice.BaremetalKickStartServiceImpl"/>
+ <bean id="BaremetalPingPxeService" class="com.cloud.baremetal.networkservice.BareMetalPingServiceImpl" />
+ <bean id="BaremetalPxeManager" class="com.cloud.baremetal.networkservice.BaremetalPxeManagerImpl" />
+ <bean id="UcsManager" class="com.cloud.ucs.manager.UcsManagerImpl" />
+ <bean id="UcsBladeDao" class="com.cloud.ucs.database.UcsBladeDaoImpl" />
+ <bean id="UcsManagerDao" class="com.cloud.ucs.database.UcsManagerDaoImpl" />
+
+
+ <!--
+ Network Elements
+ -->
+ <bean id="Ovs" class="com.cloud.network.element.OvsElement">
+ <property name="name" value="Ovs"/>
+ </bean>
+ <bean id="BareMetalDhcp" class="com.cloud.baremetal.networkservice.BaremetalDhcpElement">
+ <property name="name" value="BareMetalDhcp"/>
+ </bean>
+ <bean id="BareMetalPxe" class="com.cloud.baremetal.networkservice.BaremetalPxeElement">
+ <property name="name" value="BareMetalPxe"/>
+ </bean>
+ <bean id="BareMetalUserdata" class="com.cloud.baremetal.networkservice.BaremetalUserdataElement">
+ <property name="name" value="BareMetalUserdata"/>
+ </bean>
+ <bean id="SecurityGroupProvider" class="com.cloud.network.element.SecurityGroupElement">
+ <property name="name" value="SecurityGroupProvider"/>
+ </bean>
+ <bean id="VirtualRouter" class="com.cloud.network.element.VirtualRouterElement">
+ <property name="name" value="VirtualRouter"/>
+ </bean>
+ <bean id="VpcVirtualRouter" class="com.cloud.network.element.VpcVirtualRouterElement">
+ <property name="name" value="VpcVirtualRouter"/>
+ </bean>
+ <!--
+ <bean id="NiciraNvp" class="com.cloud.network.element.NiciraNvpElement">
+ <property name="name" value="NiciraNvp"/>
+ </bean>
+ -->
+
+<!--
+ <bean id="BigSwitchVnsElementService" class="com.cloud.network.element.BigSwitchVnsElement">
+ <property name="name" value="BigSwitchVnsElementService"/>
+ </bean>
+-->
+
+ <!--
+ Adapters
+ -->
+ <bean id="FirstFitRouting" class="com.cloud.agent.manager.allocator.impl.FirstFitRoutingAllocator">
+ <property name="name" value="FirstFitRouting"/>
+ </bean>
+
+ <bean id="hypervisorTemplateAdapter" class="com.cloud.template.HypervisorTemplateAdapter">
+ <property name="name" value="HypervisorAdapter"/>
+ </bean>
+
+ <!--
+ Storage pool allocators
+ -->
+
+ <bean id="LocalStoragePoolAllocator" class="org.apache.cloudstack.storage.allocator.LocalStoragePoolAllocator">
+ <property name="name" value="LocalStorage"/>
+ </bean>
+ <!--
+ <bean id="FirstFitStoragePoolAllocator" class="org.apache.cloudstack.storage.allocator.FirstFitStoragePoolAllocator">
+ <property name="name" value="Storage"/>
+ </bean>
+ -->
+
+ <bean id="UserConcentratedAllocator" class="com.cloud.agent.manager.allocator.impl.UserConcentratedAllocator">
+ <property name="name" value="User First"/>
+ </bean>
+
+ <bean id="ConsoleProxyAllocator" class="com.cloud.consoleproxy.ConsoleProxyBalanceAllocator">
+ <property name="name" value="Balance"/>
+ </bean>
+
+ <bean id="StaticRoleBasedAPIAccessChecker" class="org.apache.cloudstack.acl.StaticRoleBasedAPIAccessChecker"/>
+
+ <bean id="ExteralIpAddressAllocator" class="com.cloud.network.ExteralIpAddressAllocator">
+ <property name="name" value="Basic"/>
+ </bean>
+
+ <bean id="HypervisorTemplateAdapter" class="com.cloud.template.HypervisorTemplateAdapter">
+ <property name="name" value="HypervisorAdapter"/>
+ </bean>
+
+ <bean id="BareMetalTemplateAdapter" class="com.cloud.baremetal.manager.BareMetalTemplateAdapter" >
+ <property name="name" value="BareMetalTemplateAdapter"/>
+ </bean>
+
+ <!--
+ Authenticators
+ -->
+ <bean id="MD5UserAuthenticator" class="com.cloud.server.auth.MD5UserAuthenticator">
+ <property name="name" value="MD5"/>
+ </bean>
+
+ <bean id="LDAPUserAuthenticator" class="com.cloud.server.auth.LDAPUserAuthenticator">
+ <property name="name" value="LDAP"/>
+ </bean>
+
+ <!--
+ Investigators
+ -->
+ <bean id="CheckOnAgentInvestigator" class="com.cloud.ha.CheckOnAgentInvestigator">
+ <property name="name" value="SimpleInvestigator"/>
+ </bean>
+
+ <bean id="XenServerInvestigator" class="com.cloud.ha.XenServerInvestigator">
+ <property name="name" value="XenServerInvestigator"/>
+ </bean>
+
+ <bean id="UserVmDomRInvestigator" class="com.cloud.ha.UserVmDomRInvestigator">
+ <property name="name" value="PingInvestigator"/>
+ </bean>
+
+ <bean id="ManagementIPSystemVMInvestigator" class="com.cloud.ha.ManagementIPSystemVMInvestigator">
+ <property name="name" value="ManagementIPSysVMInvestigator"/>
+ </bean>
+
+ <!--
+ Fencers
+ -->
+ <bean id="XenServerFencer" class="com.cloud.ha.XenServerFencer">
+ <property name="name" value="XenServerFenceBuilder"/>
+ </bean>
+ <bean id="KVMFencer" class="com.cloud.ha.KVMFencer">
+ <property name="name" value="KVMFenceBuilder"/>
+ </bean>
+ <bean id="OvmFencer" class="com.cloud.ovm.hypervisor.OvmFencer">
+ <property name="name" value="OvmFenceBuilder"/>
+ </bean>
+
+ <bean id="XcpServerDiscoverer" class="com.cloud.hypervisor.xen.discoverer.XcpServerDiscoverer">
+ <property name="name" value="XCP Agent"/>
+ </bean>
+
+ <!--
+ <bean id="SimulatorSecondaryStorageDiscoverer" class="com.cloud.resource.SimulatorSecondaryDiscoverer">
+ <property name="name" value="SecondaryStorage"/>
+ </bean>
+ -->
+
+ <bean id="SecondaryStorageDiscoverer" class="org.apache.cloudstack.storage.resource.SecondaryStorageDiscoverer">
+ <property name="name" value="SecondaryStorage"/>
+ </bean>
+
+ <bean id="KvmServerDiscoverer" class="com.cloud.hypervisor.kvm.discoverer.KvmServerDiscoverer">
+ <property name="name" value="KVM Agent"/>
+ </bean>
+
+ <bean id="SimulatorDiscoverer" class="com.cloud.resource.SimulatorDiscoverer">
+ <property name="name" value="Simulator Agent"/>
+ </bean>
+
+
+ <bean id="BareMetalDiscoverer" class="com.cloud.baremetal.manager.BareMetalDiscoverer">
+ <property name="name" value="Bare Metal Agent"/>
+ </bean>
+
+ <bean id="HypervServerDiscoverer" class="com.cloud.hypervisor.hyperv.HypervServerDiscoverer">
+ <property name="name" value="SCVMMServer"/>
+ </bean>
+
+ <bean id="OvmDiscoverer" class="com.cloud.ovm.hypervisor.OvmDiscoverer">
+ <property name="name" value="Ovm Discover"/>
+ </bean>
+
+ <bean id="FirstFitPlanner" class="com.cloud.deploy.FirstFitPlanner">
+ <property name="name" value="First Fit"/>
+ </bean>
+
+ <bean id="UserDispersingPlanner" class="com.cloud.deploy.UserDispersingPlanner">
+ <property name="name" value="UserDispersing"/>
+ </bean>
+
+ <bean id="UserConcentratedPodPlanner" class="com.cloud.deploy.UserConcentratedPodPlanner">
+ <property name="name" value="UserConcentratedPod"/>
+ </bean>
+
+ <bean id="BareMetalPlanner" class="com.cloud.baremetal.manager.BareMetalPlanner">
+ <property name="name" value="BareMetal Fit"/>
+ </bean>
+
+ <bean id="BaremetalPlannerSelector" class="com.cloud.baremetal.manager.BaremetalPlannerSelector">
+ <property name="name" value="BaremetalPlannerSelector"/>
+ </bean>
+
+ <bean id="HypervisorPlannerSelector" class="com.cloud.deploy.HypervisorVmPlannerSelector">
+ <property name="name" value="HypervisorPlannerSelector"/>
+ </bean>
+
+
+ <!--
+ Network Gurus
+ -->
+ <bean id="StorageNetworkGuru" class="com.cloud.network.guru.StorageNetworkGuru">
+ <property name="name" value="StorageNetworkGuru"/>
+ </bean>
+ <bean id="ExternalGuestNetworkGuru" class="com.cloud.network.guru.ExternalGuestNetworkGuru">
+ <property name="name" value="ExternalGuestNetworkGuru"/>
+ </bean>
+ <bean id="PublicNetworkGuru" class="com.cloud.network.guru.PublicNetworkGuru">
+ <property name="name" value="PublicNetworkGuru"/>
+ </bean>
+ <bean id="PodBasedNetworkGuru" class="com.cloud.network.guru.PodBasedNetworkGuru">
+ <property name="name" value="PodBasedNetworkGuru"/>
+ </bean>
+ <bean id="ControlNetworkGuru" class="com.cloud.network.guru.ControlNetworkGuru">
+ <property name="name" value="ControlNetworkGuru"/>
+ </bean>
+ <bean id="DirectNetworkGuru" class="com.cloud.network.guru.DirectNetworkGuru">
+ <property name="name" value="DirectNetworkGuru"/>
+ </bean>
+ <bean id="DirectPodBasedNetworkGuru" class="com.cloud.network.guru.DirectPodBasedNetworkGuru">
+ <property name="name" value="DirectPodBasedNetworkGuru"/>
+ </bean>
+ <bean id="OvsGuestNetworkGuru" class="com.cloud.network.guru.OvsGuestNetworkGuru">
+ <property name="name" value="OvsGuestNetworkGuru"/>
+ </bean>
+ <bean id="PrivateNetworkGuru" class="com.cloud.network.guru.PrivateNetworkGuru">
+ <property name="name" value="PrivateNetworkGuru"/>
+ </bean>
+ <bean id="NiciraNvpGuestNetworkGuru" class="com.cloud.network.guru.NiciraNvpGuestNetworkGuru">
+ <property name="name" value="NiciraNvpGuestNetworkGuru"/>
+ </bean>
+
+<!--
+ <bean id="BigSwitchVnsGuestNetworkGuru" class=".BigSwitchVnsGuestNetworkGuru">
+ <property name="name" value="com.cloud.network.guru.BigSwitchVnsGuestNetworkGuru"/>
+ </bean>
+-->
+
+ <!--
+ Hypervisor Gurus
+ -->
+ <bean id="XenServerGuru" class="com.cloud.hypervisor.XenServerGuru">
+ <property name="name" value="XenServerGuru"/>
+ </bean>
+
+ <bean id="KVMGuru" class="com.cloud.hypervisor.KVMGuru">
+ <property name="name" value="KVMGuru"/>
+ </bean>
+
+ <bean id="HypervGuru" class="com.cloud.hypervisor.guru.HypervGuru">
+ <property name="name" value="HypervGuru"/>
+ </bean>
+
+ <bean id="OvmGuru" class="com.cloud.ovm.hypervisor.OvmGuru">
+ <property name="name" value="OvmGuru"/>
+ </bean>
+
+ <bean id="SimulatorGuru" class="com.cloud.simulator.SimulatorGuru">
+ <property name="name" value="SimulatorGuru"/>
+ </bean>
+
+ <bean id="BaremetalGuru" class="com.cloud.baremetal.manager.BareMetalGuru">
+ <property name="name" value="BaremetalGuru"/>
+ </bean>
+
+ <bean id="ClassicalPrimaryDataStoreProvider" class="org.apache.cloudstack.storage.datastore.provider.CloudStackPrimaryDataStoreProviderImpl">
+ </bean>
+
+</beans>
http://git-wip-us.apache.org/repos/asf/cloudstack/blob/c5b11df6/plugins/hypervisors/simulator/pom.xml
----------------------------------------------------------------------
diff --git a/plugins/hypervisors/simulator/pom.xml b/plugins/hypervisors/simulator/pom.xml
index ff1664a..e4ca927 100644
--- a/plugins/hypervisors/simulator/pom.xml
+++ b/plugins/hypervisors/simulator/pom.xml
@@ -40,5 +40,10 @@
<artifactId>cloud-utils</artifactId>
<version>${project.version}</version>
</dependency>
+ <dependency>
+ <groupId>org.apache.cloudstack</groupId>
+ <artifactId>cloud-secondary-storage</artifactId>
+ <version>${project.version}</version>
+ </dependency>
</dependencies>
</project>
http://git-wip-us.apache.org/repos/asf/cloudstack/blob/c5b11df6/plugins/hypervisors/simulator/src/com/cloud/resource/SimulatorSecondaryDiscoverer.java
----------------------------------------------------------------------
diff --git a/plugins/hypervisors/simulator/src/com/cloud/resource/SimulatorSecondaryDiscoverer.java b/plugins/hypervisors/simulator/src/com/cloud/resource/SimulatorSecondaryDiscoverer.java
index 3a8cf17..c121fba 100644
--- a/plugins/hypervisors/simulator/src/com/cloud/resource/SimulatorSecondaryDiscoverer.java
+++ b/plugins/hypervisors/simulator/src/com/cloud/resource/SimulatorSecondaryDiscoverer.java
@@ -24,6 +24,7 @@ import javax.ejb.Local;
import javax.inject.Inject;
import javax.naming.ConfigurationException;
+import org.apache.cloudstack.storage.resource.SecondaryStorageDiscoverer;
import org.apache.log4j.Logger;
import com.cloud.agent.AgentManager;
@@ -40,9 +41,7 @@ import com.cloud.host.HostVO;
import com.cloud.host.Status;
import com.cloud.storage.SnapshotVO;
import com.cloud.storage.dao.SnapshotDao;
-import com.cloud.storage.secondary.SecondaryStorageDiscoverer;
import com.cloud.utils.exception.CloudRuntimeException;
-import org.springframework.stereotype.Component;
@Local(value=Discoverer.class)
http://git-wip-us.apache.org/repos/asf/cloudstack/blob/c5b11df6/plugins/hypervisors/vmware/pom.xml
----------------------------------------------------------------------
diff --git a/plugins/hypervisors/vmware/pom.xml b/plugins/hypervisors/vmware/pom.xml
index 468e0a5..d65ef64 100644
--- a/plugins/hypervisors/vmware/pom.xml
+++ b/plugins/hypervisors/vmware/pom.xml
@@ -33,6 +33,11 @@
<version>${project.version}</version>
</dependency>
<dependency>
+ <groupId>org.apache.cloudstack</groupId>
+ <artifactId>cloud-secondary-storage</artifactId>
+ <version>${project.version}</version>
+ </dependency>
+ <dependency>
<groupId>com.cloud.com.vmware</groupId>
<artifactId>vmware-vim25</artifactId>
<version>${cs.vmware.api.version}</version>
http://git-wip-us.apache.org/repos/asf/cloudstack/blob/c5b11df6/server/pom.xml
----------------------------------------------------------------------
diff --git a/server/pom.xml b/server/pom.xml
index 8a6a10c..a397195 100644
--- a/server/pom.xml
+++ b/server/pom.xml
@@ -32,11 +32,6 @@
<version>${project.version}</version>
</dependency>
<dependency>
- <groupId>org.apache.cloudstack</groupId>
- <artifactId>cloud-secondary-storage</artifactId>
- <version>${project.version}</version>
- </dependency>
- <dependency>
<groupId>javax.servlet</groupId>
<artifactId>servlet-api</artifactId>
<version>${cs.servlet.version}</version>
http://git-wip-us.apache.org/repos/asf/cloudstack/blob/c5b11df6/server/src/com/cloud/storage/secondary/SecondaryStorageDiscoverer.java
----------------------------------------------------------------------
diff --git a/server/src/com/cloud/storage/secondary/SecondaryStorageDiscoverer.java b/server/src/com/cloud/storage/secondary/SecondaryStorageDiscoverer.java
deleted file mode 100755
index 6e66e0d..0000000
--- a/server/src/com/cloud/storage/secondary/SecondaryStorageDiscoverer.java
+++ /dev/null
@@ -1,322 +0,0 @@
-// 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.
-package com.cloud.storage.secondary;
-
-import java.io.File;
-import java.lang.reflect.Constructor;
-import java.lang.reflect.InvocationTargetException;
-import java.net.URI;
-import java.util.Date;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
-import java.util.Random;
-
-import javax.ejb.Local;
-import javax.inject.Inject;
-import javax.naming.ConfigurationException;
-
-import org.apache.cloudstack.storage.resource.LocalSecondaryStorageResource;
-import org.apache.cloudstack.storage.resource.NfsSecondaryStorageResource;
-import org.apache.log4j.Logger;
-
-import com.cloud.agent.AgentManager;
-import com.cloud.configuration.dao.ConfigurationDao;
-import com.cloud.host.HostVO;
-import com.cloud.host.Status.Event;
-import com.cloud.host.dao.HostDao;
-import com.cloud.hypervisor.Hypervisor;
-import com.cloud.resource.Discoverer;
-import com.cloud.resource.DiscovererBase;
-import com.cloud.resource.ServerResource;
-import com.cloud.storage.VMTemplateVO;
-import com.cloud.storage.VMTemplateZoneVO;
-import com.cloud.storage.dao.VMTemplateDao;
-import com.cloud.storage.dao.VMTemplateHostDao;
-import com.cloud.storage.dao.VMTemplateZoneDao;
-import com.cloud.storage.resource.DummySecondaryStorageResource;
-import com.cloud.utils.component.ComponentContext;
-import com.cloud.utils.net.NfsUtils;
-import com.cloud.utils.script.Script;
-
-/**
- * SecondaryStorageDiscoverer is used to discover secondary
- * storage servers and make sure everything it can do is
- * correct.
- */
-@Local(value=Discoverer.class)
-public class SecondaryStorageDiscoverer extends DiscovererBase implements Discoverer {
- private static final Logger s_logger = Logger.getLogger(SecondaryStorageDiscoverer.class);
-
- long _timeout = 2 * 60 * 1000; // 2 minutes
- String _mountParent;
- boolean _useServiceVM = false;
-
- Random _random = new Random(System.currentTimeMillis());
- @Inject
- protected HostDao _hostDao = null;
- @Inject
- protected VMTemplateDao _tmpltDao = null;
- @Inject
- protected VMTemplateHostDao _vmTemplateHostDao = null;
- @Inject
- protected VMTemplateZoneDao _vmTemplateZoneDao = null;
- @Inject
- protected VMTemplateDao _vmTemplateDao = null;
- @Inject
- protected ConfigurationDao _configDao = null;
- @Inject
- protected AgentManager _agentMgr = null;
-
- protected SecondaryStorageDiscoverer() {
- }
-
- @Override
- public Map<? extends ServerResource, Map<String, String>> find(long dcId, Long podId, Long clusterId, URI uri, String username, String password, List<String> hostTags) {
- if (!uri.getScheme().equalsIgnoreCase("nfs") && !uri.getScheme().equalsIgnoreCase("file")
- && !uri.getScheme().equalsIgnoreCase("iso") && !uri.getScheme().equalsIgnoreCase("dummy")) {
- s_logger.debug("It's not NFS or file or ISO, so not a secondary storage server: " + uri.toString());
- return null;
- }
-
- if (uri.getScheme().equalsIgnoreCase("nfs") || uri.getScheme().equalsIgnoreCase("iso")) {
- return createNfsSecondaryStorageResource(dcId, podId, uri);
- } else if (uri.getScheme().equalsIgnoreCase("file")) {
- return createLocalSecondaryStorageResource(dcId, podId, uri);
- } else if (uri.getScheme().equalsIgnoreCase("dummy")) {
- return createDummySecondaryStorageResource(dcId, podId, uri);
- } else {
- return null;
- }
- }
-
- protected Map<? extends ServerResource, Map<String, String>> createNfsSecondaryStorageResource(long dcId, Long podId, URI uri) {
-
- if (_useServiceVM) {
- return createDummySecondaryStorageResource(dcId, podId, uri);
- }
- String mountStr = NfsUtils.uri2Mount(uri);
-
- Script script = new Script(true, "mount", _timeout, s_logger);
- String mntPoint = null;
- File file = null;
- do {
- mntPoint = _mountParent + File.separator + Integer.toHexString(_random.nextInt(Integer.MAX_VALUE));
- file = new File(mntPoint);
- } while (file.exists());
-
- if (!file.mkdirs()) {
- s_logger.warn("Unable to make directory: " + mntPoint);
- return null;
- }
-
- script.add(mountStr, mntPoint);
- String result = script.execute();
- if (result != null && !result.contains("already mounted")) {
- s_logger.warn("Unable to mount " + uri.toString() + " due to " + result);
- file.delete();
- return null;
- }
-
- script = new Script(true, "umount", 0, s_logger);
- script.add(mntPoint);
- script.execute();
-
- file.delete();
-
- Map<NfsSecondaryStorageResource, Map<String, String>> srs = new HashMap<NfsSecondaryStorageResource, Map<String, String>>();
-
- NfsSecondaryStorageResource storage;
- if(_configDao.isPremium()) {
- Class<?> impl;
- String name = "com.cloud.storage.resource.PremiumSecondaryStorageResource";
- try {
- impl = Class.forName(name);
- final Constructor<?> constructor = impl.getDeclaredConstructor();
- constructor.setAccessible(true);
- storage = (NfsSecondaryStorageResource)constructor.newInstance();
- } catch (final ClassNotFoundException e) {
- s_logger.error("Unable to load com.cloud.storage.resource.PremiumSecondaryStorageResource due to ClassNotFoundException");
- return null;
- } catch (final SecurityException e) {
- s_logger.error("Unable to load com.cloud.storage.resource.PremiumSecondaryStorageResource due to SecurityException");
- return null;
- } catch (final NoSuchMethodException e) {
- s_logger.error("Unable to load com.cloud.storage.resource.PremiumSecondaryStorageResource due to NoSuchMethodException");
- return null;
- } catch (final IllegalArgumentException e) {
- s_logger.error("Unable to load com.cloud.storage.resource.PremiumSecondaryStorageResource due to IllegalArgumentException");
- return null;
- } catch (final InstantiationException e) {
- s_logger.error("Unable to load com.cloud.storage.resource.PremiumSecondaryStorageResource due to InstantiationException");
- return null;
- } catch (final IllegalAccessException e) {
- s_logger.error("Unable to load com.cloud.storage.resource.PremiumSecondaryStorageResource due to IllegalAccessException");
- return null;
- } catch (final InvocationTargetException e) {
- s_logger.error("Unable to load com.cloud.storage.resource.PremiumSecondaryStorageResource due to InvocationTargetException");
- return null;
- }
- } else {
- storage = new NfsSecondaryStorageResource();
- }
-
- Map<String, String> details = new HashMap<String, String>();
- details.put("mount.path", mountStr);
- details.put("orig.url", uri.toString());
- details.put("mount.parent", _mountParent);
-
- Map<String, Object> params = new HashMap<String, Object>();
- params.putAll(details);
- params.put("zone", Long.toString(dcId));
- if (podId != null) {
- params.put("pod", podId.toString());
- }
- params.put("guid", uri.toString());
- params.put("secondary.storage.vm", "false");
- params.put("max.template.iso.size", _configDao.getValue("max.template.iso.size"));
-
- try {
- storage.configure("Storage", params);
- } catch (ConfigurationException e) {
- s_logger.warn("Unable to configure the storage ", e);
- return null;
- }
- srs.put(storage, details);
-
- return srs;
- }
-
- protected Map<? extends ServerResource, Map<String, String>> createLocalSecondaryStorageResource(long dcId, Long podId, URI uri) {
- Map<LocalSecondaryStorageResource, Map<String, String>> srs = new HashMap<LocalSecondaryStorageResource, Map<String, String>>();
-
- LocalSecondaryStorageResource storage = new LocalSecondaryStorageResource();
- storage = ComponentContext.inject(storage);
-
- Map<String, String> details = new HashMap<String, String>();
-
- File file = new File(uri);
- details.put("mount.path", file.getAbsolutePath());
- details.put("orig.url", uri.toString());
-
- Map<String, Object> params = new HashMap<String, Object>();
- params.putAll(details);
- params.put("zone", Long.toString(dcId));
- if (podId != null) {
- params.put("pod", podId.toString());
- }
- params.put("guid", uri.toString());
-
- try {
- storage.configure("Storage", params);
- } catch (ConfigurationException e) {
- s_logger.warn("Unable to configure the storage ", e);
- return null;
- }
- srs.put(storage, details);
-
- return srs;
- }
-
- protected Map<ServerResource, Map<String, String>> createDummySecondaryStorageResource(long dcId, Long podId, URI uri) {
- Map<ServerResource, Map<String, String>> srs = new HashMap<ServerResource, Map<String, String>>();
-
- DummySecondaryStorageResource storage = new DummySecondaryStorageResource(_useServiceVM);
- storage = ComponentContext.inject(storage);
-
- Map<String, String> details = new HashMap<String, String>();
-
- details.put("mount.path", uri.toString());
- details.put("orig.url", uri.toString());
-
- Map<String, Object> params = new HashMap<String, Object>();
- params.putAll(details);
- params.put("zone", Long.toString(dcId));
- if (podId != null) {
- params.put("pod", podId.toString());
- }
- params.put("guid", uri.toString());
-
- try {
- storage.configure("Storage", params);
- } catch (ConfigurationException e) {
- s_logger.warn("Unable to configure the storage ", e);
- return null;
- }
- srs.put(storage, details);
-
- return srs;
- }
-
- @Override
- public boolean configure(String name, Map<String, Object> params) throws ConfigurationException {
- super.configure(name, params);
-
- _mountParent = _params.get("mount.parent");
- if (_mountParent == null) {
- _mountParent = "/mnt";
- }
-
- String useServiceVM = _params.get("secondary.storage.vm");
- if ("true".equalsIgnoreCase(useServiceVM)){
- _useServiceVM = true;
- }
- return true;
- }
-
- @Override
- public boolean matchHypervisor(String hypervisor) {
- if( hypervisor.equals("SecondaryStorage")) {
- return true;
- } else {
- return false;
- }
- }
-
- @Override
- public Hypervisor.HypervisorType getHypervisorType() {
- return Hypervisor.HypervisorType.None;
- }
-
- @Override
- public void postDiscovery(List<HostVO> hosts, long msId) {
- if (_useServiceVM) {
- for (HostVO h: hosts) {
- _agentMgr.agentStatusTransitTo(h, Event.AgentDisconnected, msId);
- }
- }
- for (HostVO h: hosts) {
- associateTemplatesToZone(h.getId(), h.getDataCenterId());
- }
-
- }
-
- private void associateTemplatesToZone(long hostId, long dcId){
- VMTemplateZoneVO tmpltZone;
-
- List<VMTemplateVO> allTemplates = _vmTemplateDao.listAll();
- for (VMTemplateVO vt: allTemplates){
- if (vt.isCrossZones()) {
- tmpltZone = _vmTemplateZoneDao.findByZoneTemplate(dcId, vt.getId());
- if (tmpltZone == null) {
- VMTemplateZoneVO vmTemplateZone = new VMTemplateZoneVO(dcId, vt.getId(), new Date());
- _vmTemplateZoneDao.persist(vmTemplateZone);
- }
- }
- }
- }
-}
http://git-wip-us.apache.org/repos/asf/cloudstack/blob/c5b11df6/services/console-proxy/server/pom.xml
----------------------------------------------------------------------
diff --git a/services/console-proxy/server/pom.xml b/services/console-proxy/server/pom.xml
index fd7b964..3d149a5 100644
--- a/services/console-proxy/server/pom.xml
+++ b/services/console-proxy/server/pom.xml
@@ -57,6 +57,11 @@
<version>${project.version}</version>
<type>pom</type>
</dependency>
+ <dependency>
+ <groupId>org.apache.cloudstack</groupId>
+ <artifactId>cloud-secondary-storage</artifactId>
+ <version>${project.version}</version>
+ </dependency>
</dependencies>
<build>
<defaultGoal>install</defaultGoal>
@@ -256,11 +261,6 @@
</profile>
<profile>
<id>quickcloud</id>
- <activation>
- <property>
- <name>quickcloud</name>
- </property>
- </activation>
<build>
<plugins>
<plugin>
http://git-wip-us.apache.org/repos/asf/cloudstack/blob/c5b11df6/services/secondary-storage/pom.xml
----------------------------------------------------------------------
diff --git a/services/secondary-storage/pom.xml b/services/secondary-storage/pom.xml
index d8dbf1d..0577084 100644
--- a/services/secondary-storage/pom.xml
+++ b/services/secondary-storage/pom.xml
@@ -54,6 +54,11 @@
<version>${project.version}</version>
<type>pom</type>
</dependency>
+ <dependency>
+ <groupId>org.apache.cloudstack</groupId>
+ <artifactId>cloud-server</artifactId>
+ <version>${project.version}</version>
+ </dependency>
</dependencies>
<build>
<defaultGoal>install</defaultGoal>
@@ -87,27 +92,4 @@
</plugin>
</plugins>
</build>
- <profiles>
- <profile>
- <id>vmware</id>
- <activation>
- <property>
- <name>nonoss</name>
- </property>
- </activation>
- <dependencies>
- <dependency>
- <groupId>org.apache.cloudstack</groupId>
- <artifactId>cloud-plugin-hypervisor-vmware</artifactId>
- <version>${project.version}</version>
- </dependency>
- <dependency>
- <groupId>org.apache.cloudstack</groupId>
- <artifactId>cloud-vmware-base</artifactId>
- <version>${project.version}</version>
- </dependency>
- </dependencies>
- </profile>
- </profiles>
-
</project>
http://git-wip-us.apache.org/repos/asf/cloudstack/blob/c5b11df6/services/secondary-storage/src/org/apache/cloudstack/storage/resource/SecondaryStorageDiscoverer.java
----------------------------------------------------------------------
diff --git a/services/secondary-storage/src/org/apache/cloudstack/storage/resource/SecondaryStorageDiscoverer.java b/services/secondary-storage/src/org/apache/cloudstack/storage/resource/SecondaryStorageDiscoverer.java
new file mode 100755
index 0000000..d3af792
--- /dev/null
+++ b/services/secondary-storage/src/org/apache/cloudstack/storage/resource/SecondaryStorageDiscoverer.java
@@ -0,0 +1,320 @@
+// 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.
+package org.apache.cloudstack.storage.resource;
+
+import java.io.File;
+import java.lang.reflect.Constructor;
+import java.lang.reflect.InvocationTargetException;
+import java.net.URI;
+import java.util.Date;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+import java.util.Random;
+
+import javax.ejb.Local;
+import javax.inject.Inject;
+import javax.naming.ConfigurationException;
+
+import org.apache.log4j.Logger;
+
+import com.cloud.agent.AgentManager;
+import com.cloud.configuration.dao.ConfigurationDao;
+import com.cloud.host.HostVO;
+import com.cloud.host.Status.Event;
+import com.cloud.host.dao.HostDao;
+import com.cloud.hypervisor.Hypervisor;
+import com.cloud.resource.Discoverer;
+import com.cloud.resource.DiscovererBase;
+import com.cloud.resource.ServerResource;
+import com.cloud.storage.VMTemplateVO;
+import com.cloud.storage.VMTemplateZoneVO;
+import com.cloud.storage.dao.VMTemplateDao;
+import com.cloud.storage.dao.VMTemplateHostDao;
+import com.cloud.storage.dao.VMTemplateZoneDao;
+import com.cloud.storage.resource.DummySecondaryStorageResource;
+import com.cloud.utils.component.ComponentContext;
+import com.cloud.utils.net.NfsUtils;
+import com.cloud.utils.script.Script;
+
+/**
+ * SecondaryStorageDiscoverer is used to discover secondary
+ * storage servers and make sure everything it can do is
+ * correct.
+ */
+@Local(value=Discoverer.class)
+public class SecondaryStorageDiscoverer extends DiscovererBase implements Discoverer {
+ private static final Logger s_logger = Logger.getLogger(SecondaryStorageDiscoverer.class);
+
+ long _timeout = 2 * 60 * 1000; // 2 minutes
+ String _mountParent;
+ boolean _useServiceVM = false;
+
+ Random _random = new Random(System.currentTimeMillis());
+ @Inject
+ protected HostDao _hostDao = null;
+ @Inject
+ protected VMTemplateDao _tmpltDao = null;
+ @Inject
+ protected VMTemplateHostDao _vmTemplateHostDao = null;
+ @Inject
+ protected VMTemplateZoneDao _vmTemplateZoneDao = null;
+ @Inject
+ protected VMTemplateDao _vmTemplateDao = null;
+ @Inject
+ protected ConfigurationDao _configDao = null;
+ @Inject
+ protected AgentManager _agentMgr = null;
+
+ protected SecondaryStorageDiscoverer() {
+ }
+
+ @Override
+ public Map<? extends ServerResource, Map<String, String>> find(long dcId, Long podId, Long clusterId, URI uri, String username, String password, List<String> hostTags) {
+ if (!uri.getScheme().equalsIgnoreCase("nfs") && !uri.getScheme().equalsIgnoreCase("file")
+ && !uri.getScheme().equalsIgnoreCase("iso") && !uri.getScheme().equalsIgnoreCase("dummy")) {
+ s_logger.debug("It's not NFS or file or ISO, so not a secondary storage server: " + uri.toString());
+ return null;
+ }
+
+ if (uri.getScheme().equalsIgnoreCase("nfs") || uri.getScheme().equalsIgnoreCase("iso")) {
+ return createNfsSecondaryStorageResource(dcId, podId, uri);
+ } else if (uri.getScheme().equalsIgnoreCase("file")) {
+ return createLocalSecondaryStorageResource(dcId, podId, uri);
+ } else if (uri.getScheme().equalsIgnoreCase("dummy")) {
+ return createDummySecondaryStorageResource(dcId, podId, uri);
+ } else {
+ return null;
+ }
+ }
+
+ protected Map<? extends ServerResource, Map<String, String>> createNfsSecondaryStorageResource(long dcId, Long podId, URI uri) {
+
+ if (_useServiceVM) {
+ return createDummySecondaryStorageResource(dcId, podId, uri);
+ }
+ String mountStr = NfsUtils.uri2Mount(uri);
+
+ Script script = new Script(true, "mount", _timeout, s_logger);
+ String mntPoint = null;
+ File file = null;
+ do {
+ mntPoint = _mountParent + File.separator + Integer.toHexString(_random.nextInt(Integer.MAX_VALUE));
+ file = new File(mntPoint);
+ } while (file.exists());
+
+ if (!file.mkdirs()) {
+ s_logger.warn("Unable to make directory: " + mntPoint);
+ return null;
+ }
+
+ script.add(mountStr, mntPoint);
+ String result = script.execute();
+ if (result != null && !result.contains("already mounted")) {
+ s_logger.warn("Unable to mount " + uri.toString() + " due to " + result);
+ file.delete();
+ return null;
+ }
+
+ script = new Script(true, "umount", 0, s_logger);
+ script.add(mntPoint);
+ script.execute();
+
+ file.delete();
+
+ Map<NfsSecondaryStorageResource, Map<String, String>> srs = new HashMap<NfsSecondaryStorageResource, Map<String, String>>();
+
+ NfsSecondaryStorageResource storage;
+ if(_configDao.isPremium()) {
+ Class<?> impl;
+ String name = "com.cloud.storage.resource.PremiumSecondaryStorageResource";
+ try {
+ impl = Class.forName(name);
+ final Constructor<?> constructor = impl.getDeclaredConstructor();
+ constructor.setAccessible(true);
+ storage = (NfsSecondaryStorageResource)constructor.newInstance();
+ } catch (final ClassNotFoundException e) {
+ s_logger.error("Unable to load com.cloud.storage.resource.PremiumSecondaryStorageResource due to ClassNotFoundException");
+ return null;
+ } catch (final SecurityException e) {
+ s_logger.error("Unable to load com.cloud.storage.resource.PremiumSecondaryStorageResource due to SecurityException");
+ return null;
+ } catch (final NoSuchMethodException e) {
+ s_logger.error("Unable to load com.cloud.storage.resource.PremiumSecondaryStorageResource due to NoSuchMethodException");
+ return null;
+ } catch (final IllegalArgumentException e) {
+ s_logger.error("Unable to load com.cloud.storage.resource.PremiumSecondaryStorageResource due to IllegalArgumentException");
+ return null;
+ } catch (final InstantiationException e) {
+ s_logger.error("Unable to load com.cloud.storage.resource.PremiumSecondaryStorageResource due to InstantiationException");
+ return null;
+ } catch (final IllegalAccessException e) {
+ s_logger.error("Unable to load com.cloud.storage.resource.PremiumSecondaryStorageResource due to IllegalAccessException");
+ return null;
+ } catch (final InvocationTargetException e) {
+ s_logger.error("Unable to load com.cloud.storage.resource.PremiumSecondaryStorageResource due to InvocationTargetException");
+ return null;
+ }
+ } else {
+ storage = new NfsSecondaryStorageResource();
+ }
+
+ Map<String, String> details = new HashMap<String, String>();
+ details.put("mount.path", mountStr);
+ details.put("orig.url", uri.toString());
+ details.put("mount.parent", _mountParent);
+
+ Map<String, Object> params = new HashMap<String, Object>();
+ params.putAll(details);
+ params.put("zone", Long.toString(dcId));
+ if (podId != null) {
+ params.put("pod", podId.toString());
+ }
+ params.put("guid", uri.toString());
+ params.put("secondary.storage.vm", "false");
+ params.put("max.template.iso.size", _configDao.getValue("max.template.iso.size"));
+
+ try {
+ storage.configure("Storage", params);
+ } catch (ConfigurationException e) {
+ s_logger.warn("Unable to configure the storage ", e);
+ return null;
+ }
+ srs.put(storage, details);
+
+ return srs;
+ }
+
+ protected Map<? extends ServerResource, Map<String, String>> createLocalSecondaryStorageResource(long dcId, Long podId, URI uri) {
+ Map<LocalSecondaryStorageResource, Map<String, String>> srs = new HashMap<LocalSecondaryStorageResource, Map<String, String>>();
+
+ LocalSecondaryStorageResource storage = new LocalSecondaryStorageResource();
+ storage = ComponentContext.inject(storage);
+
+ Map<String, String> details = new HashMap<String, String>();
+
+ File file = new File(uri);
+ details.put("mount.path", file.getAbsolutePath());
+ details.put("orig.url", uri.toString());
+
+ Map<String, Object> params = new HashMap<String, Object>();
+ params.putAll(details);
+ params.put("zone", Long.toString(dcId));
+ if (podId != null) {
+ params.put("pod", podId.toString());
+ }
+ params.put("guid", uri.toString());
+
+ try {
+ storage.configure("Storage", params);
+ } catch (ConfigurationException e) {
+ s_logger.warn("Unable to configure the storage ", e);
+ return null;
+ }
+ srs.put(storage, details);
+
+ return srs;
+ }
+
+ protected Map<ServerResource, Map<String, String>> createDummySecondaryStorageResource(long dcId, Long podId, URI uri) {
+ Map<ServerResource, Map<String, String>> srs = new HashMap<ServerResource, Map<String, String>>();
+
+ DummySecondaryStorageResource storage = new DummySecondaryStorageResource(_useServiceVM);
+ storage = ComponentContext.inject(storage);
+
+ Map<String, String> details = new HashMap<String, String>();
+
+ details.put("mount.path", uri.toString());
+ details.put("orig.url", uri.toString());
+
+ Map<String, Object> params = new HashMap<String, Object>();
+ params.putAll(details);
+ params.put("zone", Long.toString(dcId));
+ if (podId != null) {
+ params.put("pod", podId.toString());
+ }
+ params.put("guid", uri.toString());
+
+ try {
+ storage.configure("Storage", params);
+ } catch (ConfigurationException e) {
+ s_logger.warn("Unable to configure the storage ", e);
+ return null;
+ }
+ srs.put(storage, details);
+
+ return srs;
+ }
+
+ @Override
+ public boolean configure(String name, Map<String, Object> params) throws ConfigurationException {
+ super.configure(name, params);
+
+ _mountParent = _params.get("mount.parent");
+ if (_mountParent == null) {
+ _mountParent = "/mnt";
+ }
+
+ String useServiceVM = _params.get("secondary.storage.vm");
+ if ("true".equalsIgnoreCase(useServiceVM)){
+ _useServiceVM = true;
+ }
+ return true;
+ }
+
+ @Override
+ public boolean matchHypervisor(String hypervisor) {
+ if( hypervisor.equals("SecondaryStorage")) {
+ return true;
+ } else {
+ return false;
+ }
+ }
+
+ @Override
+ public Hypervisor.HypervisorType getHypervisorType() {
+ return Hypervisor.HypervisorType.None;
+ }
+
+ @Override
+ public void postDiscovery(List<HostVO> hosts, long msId) {
+ if (_useServiceVM) {
+ for (HostVO h: hosts) {
+ _agentMgr.agentStatusTransitTo(h, Event.AgentDisconnected, msId);
+ }
+ }
+ for (HostVO h: hosts) {
+ associateTemplatesToZone(h.getId(), h.getDataCenterId());
+ }
+
+ }
+
+ private void associateTemplatesToZone(long hostId, long dcId){
+ VMTemplateZoneVO tmpltZone;
+
+ List<VMTemplateVO> allTemplates = _vmTemplateDao.listAll();
+ for (VMTemplateVO vt: allTemplates){
+ if (vt.isCrossZones()) {
+ tmpltZone = _vmTemplateZoneDao.findByZoneTemplate(dcId, vt.getId());
+ if (tmpltZone == null) {
+ VMTemplateZoneVO vmTemplateZone = new VMTemplateZoneVO(dcId, vt.getId(), new Date());
+ _vmTemplateZoneDao.persist(vmTemplateZone);
+ }
+ }
+ }
+ }
+}
http://git-wip-us.apache.org/repos/asf/cloudstack/blob/c5b11df6/tools/devcloud/pom.xml
----------------------------------------------------------------------
diff --git a/tools/devcloud/pom.xml b/tools/devcloud/pom.xml
index d32d84b..93029e1 100644
--- a/tools/devcloud/pom.xml
+++ b/tools/devcloud/pom.xml
@@ -143,10 +143,10 @@
</build>
</profile>
<profile>
- <id>quicksvr</id>
+ <id>quickcloud</id>
<activation>
<property>
- <name>quicksvr</name>
+ <name>quickcloud</name>
</property>
</activation>
<build>