You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@cloudstack.apache.org by bh...@apache.org on 2012/12/24 01:57:38 UTC

[16/50] [abbrv] Simulator: moving hypervisor simulator into plugin

http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/d6083ce5/plugins/hypervisors/simulator/src/com/cloud/resource/SimulatorDiscoverer.java
----------------------------------------------------------------------
diff --git a/plugins/hypervisors/simulator/src/com/cloud/resource/SimulatorDiscoverer.java b/plugins/hypervisors/simulator/src/com/cloud/resource/SimulatorDiscoverer.java
new file mode 100755
index 0000000..b6d40d4
--- /dev/null
+++ b/plugins/hypervisors/simulator/src/com/cloud/resource/SimulatorDiscoverer.java
@@ -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.
+package com.cloud.resource;
+
+import java.net.URI;
+import java.net.URLDecoder;
+import java.util.Date;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+import java.util.UUID;
+
+import javax.ejb.Local;
+import javax.naming.ConfigurationException;
+
+import org.apache.log4j.Logger;
+
+import com.cloud.agent.AgentManager;
+import com.cloud.agent.Listener;
+import com.cloud.agent.api.AgentControlAnswer;
+import com.cloud.agent.api.AgentControlCommand;
+import com.cloud.agent.api.Answer;
+import com.cloud.agent.api.Command;
+import com.cloud.agent.api.StartupCommand;
+import com.cloud.agent.api.StartupRoutingCommand;
+import com.cloud.agent.manager.MockAgentManager;
+import com.cloud.agent.manager.MockStorageManager;
+import com.cloud.dc.ClusterVO;
+import com.cloud.dc.dao.ClusterDao;
+import com.cloud.exception.ConnectionException;
+import com.cloud.exception.DiscoveryException;
+import com.cloud.host.Host;
+import com.cloud.host.HostVO;
+import com.cloud.host.Status;
+import com.cloud.host.dao.HostDao;
+import com.cloud.hypervisor.Hypervisor.HypervisorType;
+import com.cloud.storage.VMTemplateHostVO;
+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.utils.component.Inject;
+
+@Local(value = Discoverer.class)
+public class SimulatorDiscoverer extends DiscovererBase implements Discoverer, Listener, ResourceStateAdapter {
+	private static final Logger s_logger = Logger
+			.getLogger(SimulatorDiscoverer.class);
+
+	@Inject HostDao _hostDao;
+	@Inject VMTemplateDao _vmTemplateDao;
+    @Inject VMTemplateHostDao _vmTemplateHostDao;
+    @Inject VMTemplateZoneDao _vmTemplateZoneDao;
+    @Inject ClusterDao _clusterDao;
+    @Inject AgentManager _agentMgr = null;
+    @Inject MockAgentManager _mockAgentMgr = null;
+    @Inject MockStorageManager _mockStorageMgr = null;
+    @Inject ResourceManager _resourceMgr;
+
+	/**
+	 * Finds ServerResources of an in-process simulator
+	 *
+	 * @see com.cloud.resource.Discoverer#find(long, java.lang.Long,
+	 *      java.lang.Long, java.net.URI, java.lang.String, java.lang.String)
+	 */
+	@Override
+	public Map<? extends ServerResource, Map<String, String>> find(long dcId,
+			Long podId, Long clusterId, URI uri, String username,
+			String password, List<String> hostTags) throws DiscoveryException {
+		Map<AgentResourceBase, Map<String, String>> resources;
+
+		try {
+		    //http://sim/count=$count, it will add $count number of hosts into the cluster
+		    String scheme = uri.getScheme();
+		    String host = uri.getAuthority();
+		    String commands = URLDecoder.decode(uri.getPath());
+
+		    long cpuSpeed = _mockAgentMgr.DEFAULT_HOST_SPEED_MHZ;
+		    long cpuCores = _mockAgentMgr.DEFAULT_HOST_CPU_CORES;
+		    long memory = _mockAgentMgr.DEFAULT_HOST_MEM_SIZE;
+		    long localstorageSize = _mockStorageMgr.DEFAULT_HOST_STORAGE_SIZE;
+			if (scheme.equals("http")) {
+				if (host == null || !host.startsWith("sim")) {
+					String msg = "uri is not of simulator type so we're not taking care of the discovery for this: "
+							+ uri;
+					if(s_logger.isDebugEnabled()) {
+						s_logger.debug(msg);
+					}
+					return null;
+				}
+				if (commands != null) {
+				    int index = commands.lastIndexOf("/");
+				    if (index != -1) {
+				        commands = commands.substring(index+1);
+
+				        String[] cmds = commands.split("&");
+				        for (String cmd : cmds) {
+				            String[] parameter = cmd.split("=");
+				            if (parameter[0].equalsIgnoreCase("cpuspeed") && parameter[1] != null) {
+				                cpuSpeed = Long.parseLong(parameter[1]);
+				            } else if (parameter[0].equalsIgnoreCase("cpucore") && parameter[1] != null) {
+				                cpuCores = Long.parseLong(parameter[1]);
+				            } else if (parameter[0].equalsIgnoreCase("memory") && parameter[1] != null) {
+				                memory = Long.parseLong(parameter[1]);
+				            } else if (parameter[0].equalsIgnoreCase("localstorage") && parameter[1] != null) {
+				                localstorageSize = Long.parseLong(parameter[1]);
+				            }
+				        }
+				    }
+				}
+			} else {
+				String msg = "uriString is not http so we're not taking care of the discovery for this: "
+						+ uri;
+				if(s_logger.isDebugEnabled()) {
+					s_logger.debug(msg);
+				}
+				return null;
+			}
+
+			String cluster = null;
+			if (clusterId == null) {
+				String msg = "must specify cluster Id when adding host";
+				if(s_logger.isDebugEnabled()) {
+					s_logger.debug(msg);
+				}
+				throw new RuntimeException(msg);
+			} else {
+				ClusterVO clu = _clusterDao.findById(clusterId);
+				if (clu == null
+						|| (clu.getHypervisorType() != HypervisorType.Simulator)) {
+					if (s_logger.isInfoEnabled())
+						s_logger.info("invalid cluster id or cluster is not for Simulator hypervisors");
+					return null;
+				}
+				cluster = Long.toString(clusterId);
+				if(clu.getGuid() == null) {
+					clu.setGuid(UUID.randomUUID().toString());
+				}
+				_clusterDao.update(clusterId, clu);
+			}
+
+			String pod;
+			if (podId == null) {
+				String msg = "must specify pod Id when adding host";
+				if(s_logger.isDebugEnabled()) {
+					s_logger.debug(msg);
+				}
+				throw new RuntimeException(msg);
+			} else {
+				pod = Long.toString(podId);
+			}
+
+			Map<String, String> details = new HashMap<String, String>();
+			Map<String, Object> params = new HashMap<String, Object>();
+			details.put("username", username);
+			params.put("username", username);
+			details.put("password", password);
+			params.put("password", password);
+			params.put("zone", Long.toString(dcId));
+			params.put("pod", pod);
+			params.put("cluster", cluster);
+			params.put("cpuspeed", Long.toString(cpuSpeed));
+			params.put("cpucore", Long.toString(cpuCores));
+			params.put("memory", Long.toString(memory));
+			params.put("localstorage", Long.toString(localstorageSize));
+
+			resources = createAgentResources(params);
+			return resources;
+		} catch (Exception ex) {
+			s_logger.error("Exception when discovering simulator hosts: "
+					+ ex.getMessage());
+		}
+		return null;
+	}
+
+	private Map<AgentResourceBase, Map<String, String>> createAgentResources(
+			Map<String, Object> params) {
+		try {
+			s_logger.info("Creating Simulator Resources");
+			return _mockAgentMgr.createServerResources(params);
+		} catch (Exception ex) {
+			s_logger.warn("Caught exception at agent resource creation: "
+					+ ex.getMessage(), ex);
+		}
+		return null;
+	}
+
+	@Override
+	public void postDiscovery(List<HostVO> hosts, long 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);
+			}
+		}
+	}
+    }
+
+	@Override
+	public HypervisorType getHypervisorType() {
+		return HypervisorType.Simulator;
+	}
+
+	@Override
+	public boolean matchHypervisor(String hypervisor) {
+		return hypervisor.equalsIgnoreCase(HypervisorType.Simulator.toString());
+	}
+
+    @Override
+    public boolean configure(String name, Map<String, Object> params) throws ConfigurationException {
+        super.configure(name, params);
+        _agentMgr.registerForHostEvents(this, true, false, false);
+        _resourceMgr.registerResourceStateAdapter(this.getClass().getSimpleName(), this);
+        return true;
+    }
+
+    @Override
+    public boolean processAnswers(long agentId, long seq, Answer[] answers) {
+        return false;
+    }
+
+    @Override
+    public boolean processCommands(long agentId, long seq, Command[] commands) {
+        return false;
+    }
+
+    @Override
+    public AgentControlAnswer processControlCommand(long agentId, AgentControlCommand cmd) {
+        return null;
+    }
+
+    @Override
+    public void processConnect(HostVO host, StartupCommand cmd, boolean forRebalance) throws ConnectionException {
+
+        /*if(forRebalance)
+		return;
+        if ( Host.Type.SecondaryStorage == host.getType() ) {
+            List<VMTemplateVO> tmplts = _vmTemplateDao.listAll();
+            for( VMTemplateVO tmplt : tmplts ) {
+                VMTemplateHostVO vmTemplateHost = _vmTemplateHostDao.findByHostTemplate(host.getId(), tmplt.getId());
+                if (vmTemplateHost == null) {
+                    vmTemplateHost = new VMTemplateHostVO(host.getId(), tmplt.getId(), new Date(), 100,
+                            com.cloud.storage.VMTemplateStorageResourceAssoc.Status.DOWNLOADED, null, null, null, null, tmplt.getUrl());
+                    _vmTemplateHostDao.persist(vmTemplateHost);
+                } else {
+                    vmTemplateHost.setDownloadState(com.cloud.storage.VMTemplateStorageResourceAssoc.Status.DOWNLOADED);
+                    vmTemplateHost.setDownloadPercent(100);
+                    _vmTemplateHostDao.update(vmTemplateHost.getId(), vmTemplateHost);
+                }
+            }
+        }*/
+
+    }
+
+    @Override
+    public boolean processDisconnect(long agentId, Status state) {
+        return false;
+    }
+
+    @Override
+    public boolean isRecurring() {
+        return false;
+    }
+
+    @Override
+    public int getTimeout() {
+        return 0;
+    }
+
+    @Override
+    public boolean processTimeout(long agentId, long seq) {
+        return false;
+    }
+
+	@Override
+	public HostVO createHostVOForConnectedAgent(HostVO host,
+			StartupCommand[] cmd) {
+		return null;
+	}
+
+	@Override
+	public HostVO createHostVOForDirectConnectAgent(HostVO host,
+			StartupCommand[] startup, ServerResource resource,
+			Map<String, String> details, List<String> hostTags) {
+		StartupCommand firstCmd = startup[0];
+		if (!(firstCmd instanceof StartupRoutingCommand)) {
+			return null;
+		}
+
+		StartupRoutingCommand ssCmd = ((StartupRoutingCommand) firstCmd);
+		if (ssCmd.getHypervisorType() != HypervisorType.Simulator) {
+			return null;
+		}
+
+		return _resourceMgr.fillRoutingHostVO(host, ssCmd, HypervisorType.Simulator, details, hostTags);
+	}
+
+	@Override
+	public DeleteHostAnswer deleteHost(HostVO host, boolean isForced,
+			boolean isForceDeleteStorage) throws UnableDeleteHostException {
+		return null;
+	}
+
+    @Override
+    public boolean stop() {
+	_resourceMgr.unregisterResourceStateAdapter(this.getClass().getSimpleName());
+        return super.stop();
+    }
+
+}

http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/d6083ce5/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
new file mode 100644
index 0000000..5d4d5b9
--- /dev/null
+++ b/plugins/hypervisors/simulator/src/com/cloud/resource/SimulatorSecondaryDiscoverer.java
@@ -0,0 +1,151 @@
+// 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.resource;
+
+import java.util.List;
+import java.util.Map;
+
+import javax.ejb.Local;
+import javax.naming.ConfigurationException;
+
+import com.cloud.agent.AgentManager;
+import com.cloud.agent.Listener;
+import com.cloud.agent.api.AgentControlAnswer;
+import com.cloud.agent.api.AgentControlCommand;
+import com.cloud.agent.api.Answer;
+import com.cloud.agent.api.Command;
+import com.cloud.agent.api.StartupCommand;
+import com.cloud.agent.api.StartupSecondaryStorageCommand;
+import com.cloud.agent.manager.MockStorageManager;
+import com.cloud.exception.ConnectionException;
+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.component.Inject;
+import com.cloud.utils.exception.CloudRuntimeException;
+@Local(value=Discoverer.class)
+public class SimulatorSecondaryDiscoverer extends SecondaryStorageDiscoverer implements ResourceStateAdapter, Listener {
+    @Inject MockStorageManager _mockStorageMgr = null;
+    @Inject AgentManager _agentMgr;
+    @Inject ResourceManager _resourceMgr;
+    @Inject SnapshotDao _snapshotDao;
+
+    @Override
+    public boolean configure(String name, Map<String, Object> params) throws ConfigurationException {
+	_agentMgr.registerForHostEvents(this, true, false, false);
+        _resourceMgr.registerResourceStateAdapter(this.getClass().getSimpleName(), this);
+        return super.configure(name, params);
+    }
+
+    @Override
+    public void postDiscovery(List<HostVO> hosts, long msId) {
+        super.postDiscovery(hosts, msId);
+        for (HostVO host: hosts) {
+            _mockStorageMgr.preinstallTemplates(host.getStorageUrl(), host.getDataCenterId());
+        }
+    }
+
+	@Override
+	public HostVO createHostVOForConnectedAgent(HostVO host,
+			StartupCommand[] cmd) {
+		return null;
+	}
+
+	@Override
+	public HostVO createHostVOForDirectConnectAgent(HostVO host,
+			StartupCommand[] startup, ServerResource resource,
+			Map<String, String> details, List<String> hostTags) {
+		//for detecting SSVM dispatch
+		StartupCommand firstCmd = startup[0];
+	    if (!(firstCmd instanceof StartupSecondaryStorageCommand)) {
+		return null;
+	    }
+
+		host.setType(com.cloud.host.Host.Type.SecondaryStorageVM);
+		return host;
+	}
+
+	@Override
+	public DeleteHostAnswer deleteHost(HostVO host, boolean isForced,
+			boolean isForceDeleteStorage) throws UnableDeleteHostException {
+		long hostId = host.getId();
+		List<SnapshotVO> snapshots = _snapshotDao.listByHostId(hostId);
+		if (snapshots != null && !snapshots.isEmpty()) {
+			throw new CloudRuntimeException("Cannot delete this secondary storage because there are still snapshots on it ");
+		}
+		_vmTemplateHostDao.deleteByHost(hostId);
+		host.setGuid(null);
+		_hostDao.update(hostId, host);
+		_hostDao.remove(hostId);
+		return new DeleteHostAnswer(true);
+	}
+
+    @Override
+    public boolean start() {
+        return true;
+    }
+
+    @Override
+    public boolean stop() {
+	_resourceMgr.unregisterResourceStateAdapter(this.getClass().getSimpleName());
+        return true;
+    }
+
+	@Override
+	public int getTimeout() {
+		return 0;
+	}
+
+	@Override
+	public boolean isRecurring() {
+		return false;
+	}
+
+	@Override
+	public boolean processAnswers(long agentId, long seq, Answer[] answers) {
+		return false;
+	}
+
+	@Override
+	public boolean processCommands(long agentId, long seq, Command[] commands) {
+		return false;
+	}
+
+	@Override
+	public void processConnect(HostVO host, StartupCommand cmd,
+			boolean forRebalance) throws ConnectionException {
+
+	}
+
+	@Override
+	public AgentControlAnswer processControlCommand(long agentId,
+			AgentControlCommand cmd) {
+		return null;
+	}
+
+	@Override
+	public boolean processDisconnect(long agentId, Status state) {
+		return false;
+	}
+
+	@Override
+	public boolean processTimeout(long agentId, long seq) {
+		return false;
+	}
+}

http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/d6083ce5/plugins/hypervisors/simulator/src/com/cloud/server/ManagementServerSimulatorImpl.java
----------------------------------------------------------------------
diff --git a/plugins/hypervisors/simulator/src/com/cloud/server/ManagementServerSimulatorImpl.java b/plugins/hypervisors/simulator/src/com/cloud/server/ManagementServerSimulatorImpl.java
new file mode 100644
index 0000000..35aa301
--- /dev/null
+++ b/plugins/hypervisors/simulator/src/com/cloud/server/ManagementServerSimulatorImpl.java
@@ -0,0 +1,32 @@
+// 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.server;
+
+
+public class ManagementServerSimulatorImpl extends ManagementServerExtImpl {
+    @Override
+    public String[] getApiConfig() {
+        String[] apis = super.getApiConfig();
+        String[] newapis = new String[apis.length + 1];
+        for (int i = 0; i < apis.length; i++) {
+            newapis[i] = apis[i];
+        }
+
+        newapis[apis.length] = "commands-simulator.properties";
+        return newapis;
+    }
+}

http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/d6083ce5/plugins/hypervisors/simulator/src/com/cloud/simulator/MockConfigurationVO.java
----------------------------------------------------------------------
diff --git a/plugins/hypervisors/simulator/src/com/cloud/simulator/MockConfigurationVO.java b/plugins/hypervisors/simulator/src/com/cloud/simulator/MockConfigurationVO.java
new file mode 100644
index 0000000..3ed862b
--- /dev/null
+++ b/plugins/hypervisors/simulator/src/com/cloud/simulator/MockConfigurationVO.java
@@ -0,0 +1,120 @@
+// 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.simulator;
+
+import java.util.HashMap;
+import java.util.Map;
+
+import javax.persistence.Column;
+import javax.persistence.Entity;
+import javax.persistence.GeneratedValue;
+import javax.persistence.GenerationType;
+import javax.persistence.Id;
+import javax.persistence.Table;
+
+@Entity
+@Table(name="mockconfiguration")
+public class MockConfigurationVO {
+    @Id
+    @GeneratedValue(strategy=GenerationType.IDENTITY)
+    @Column(name="id")
+    private long id;
+
+    @Column(name="data_center_id", nullable=false)
+    private Long dataCenterId;
+
+    @Column(name="pod_id")
+    private Long podId;
+
+    @Column(name="cluster_id")
+    private Long clusterId;
+
+    @Column(name="host_id")
+    private Long hostId;
+
+    @Column(name="name")
+    private String name;
+
+    @Column(name="values")
+    private String values;
+
+    public long getId() {
+        return this.id;
+    }
+
+    public Long getDataCenterId() {
+        return this.dataCenterId;
+    }
+
+    public void setDataCenterId(Long dcId) {
+        this.dataCenterId = dcId;
+    }
+
+    public Long getPodId() {
+        return this.podId;
+    }
+
+    public void setPodId(Long podId) {
+        this.podId = podId;
+    }
+
+    public Long getClusterId() {
+        return this.clusterId;
+    }
+
+    public void setClusterId(Long clusterId) {
+        this.clusterId = clusterId;
+    }
+
+    public Long getHostId() {
+        return this.hostId;
+    }
+
+    public void setHostId(Long hostId) {
+        this.hostId = hostId;
+    }
+
+    public String getName() {
+        return this.name;
+    }
+
+    public void setName(String name) {
+        this.name = name;
+    }
+
+    public String getValues() {
+        return this.values;
+    }
+
+    public Map<String, String> getParameters() {
+        Map<String, String> maps = new HashMap<String, String>();
+        if (this.values == null) {
+            return maps;
+        }
+
+        String[] vals = this.values.split("\\|");
+        for (String val : vals) {
+            String[] paras = val.split(":");
+            maps.put(paras[0], paras[1]);
+        }
+        return maps;
+    }
+
+    public void setValues(String values) {
+        this.values = values;
+    }
+}

http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/d6083ce5/plugins/hypervisors/simulator/src/com/cloud/simulator/MockHost.java
----------------------------------------------------------------------
diff --git a/plugins/hypervisors/simulator/src/com/cloud/simulator/MockHost.java b/plugins/hypervisors/simulator/src/com/cloud/simulator/MockHost.java
new file mode 100644
index 0000000..5ca9017
--- /dev/null
+++ b/plugins/hypervisors/simulator/src/com/cloud/simulator/MockHost.java
@@ -0,0 +1,62 @@
+// 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.simulator;
+
+public interface MockHost {
+    public long getCpuSpeed();
+    public long getCpuCount();
+
+
+    public long getMemorySize();
+
+    public String getCapabilities();
+
+    public long getId();
+
+    public String getName();
+
+    public String getGuid();
+
+
+    public String getVersion();
+
+    public Long getDataCenterId();
+
+    public Long getPodId();
+
+    public Long getClusterId();
+
+    public String getPrivateIpAddress();
+
+    public String getPrivateNetMask();
+
+    public String getPrivateMacAddress();
+
+
+    public String getPublicIpAddress();
+
+    public String getPublicNetMask();
+
+    public String getPublicMacAddress();
+
+    public String getStorageIpAddress();
+
+    public String getStorageNetMask();
+
+    public String getStorageMacAddress();
+
+}

http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/d6083ce5/plugins/hypervisors/simulator/src/com/cloud/simulator/MockHostVO.java
----------------------------------------------------------------------
diff --git a/plugins/hypervisors/simulator/src/com/cloud/simulator/MockHostVO.java b/plugins/hypervisors/simulator/src/com/cloud/simulator/MockHostVO.java
new file mode 100644
index 0000000..c86dfa6
--- /dev/null
+++ b/plugins/hypervisors/simulator/src/com/cloud/simulator/MockHostVO.java
@@ -0,0 +1,276 @@
+// 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.simulator;
+
+import javax.persistence.Column;
+import javax.persistence.Entity;
+import javax.persistence.GeneratedValue;
+import javax.persistence.GenerationType;
+import javax.persistence.Id;
+import javax.persistence.Table;
+
+@Entity
+@Table(name="mockhost")
+
+public class MockHostVO implements MockHost {
+    @Id
+    @GeneratedValue(strategy=GenerationType.IDENTITY)
+    @Column(name="id")
+    private long id;
+
+    @Column(name="name", nullable=false)
+    private String name = null;
+
+    @Column(name="private_ip_address", nullable=false)
+    private String privateIpAddress;
+
+    @Column(name="private_mac_address", nullable=false)
+    private String privateMacAddress;
+
+    @Column(name="private_netmask", nullable=false)
+    private String privateNetmask;
+
+    @Column(name="public_netmask")
+    private String publicNetmask;
+
+    @Column(name="public_ip_address")
+    private String publicIpAddress;
+
+    @Column(name="public_mac_address")
+    private String publicMacAddress;
+
+    @Column(name="storage_ip_address")
+    private String storageIpAddress;
+
+    @Column(name="storage_mac_address")
+    private String storageMacAddress;
+
+    @Column(name="storage_netmask")
+    private String storageNetMask;
+
+    @Column(name="guid")
+    private String guid;
+
+    @Column(name="version")
+    private String version;
+
+    @Column(name="data_center_id", nullable=false)
+    private long dataCenterId;
+
+    @Column(name="pod_id")
+    private Long podId;
+
+    @Column(name="cluster_id")
+    private Long clusterId;
+
+    @Column(name="speed")
+    private long cpuSpeed;
+
+    @Column(name="cpus")
+    private long cpuCount;
+
+    @Column(name="ram")
+    private long memorySize;
+
+    @Column(name="capabilities")
+    private String capabilities;
+
+    @Column(name="vm_id")
+    private long vmId;
+
+    @Column(name="resource")
+    private String resource;
+
+
+
+    public MockHostVO() {
+
+    }
+
+
+    public long getVmId() {
+        return vmId;
+    }
+
+    public void setVmId(long vmId) {
+        this.vmId = vmId;
+    }
+
+    public String getResource() {
+        return this.resource;
+    }
+
+    public void setResource(String resource) {
+        this.resource = resource;
+    }
+
+    public long getCpuSpeed() {
+        return this.cpuSpeed;
+    }
+
+    public void setCpuSpeed(long cpuSpeed) {
+        this.cpuSpeed = cpuSpeed;
+    }
+
+    public long getCpuCount() {
+        return this.cpuCount;
+    }
+
+    public void setCpuCount(long cpuCount) {
+        this.cpuCount = cpuCount;
+    }
+
+    public long getMemorySize() {
+        return this.memorySize;
+    }
+
+    public void setMemorySize(long memorySize) {
+        this.memorySize = memorySize;
+    }
+
+    public String getCapabilities() {
+        return this.capabilities;
+    }
+
+    public void setCapabilities(String capabilities) {
+        this.capabilities = capabilities;
+    }
+
+    public long getId() {
+        return id;
+    }
+
+    public String getName() {
+        return name;
+    }
+
+    public void setName(String name) {
+        this.name = name;
+    }
+
+    public String getGuid() {
+        return this.guid;
+    }
+
+    public void setGuid(String guid) {
+        this.guid = guid;
+    }
+
+    public String getVersion() {
+        return this.version;
+    }
+
+    public void setVersion(String version) {
+        this.version = version;
+    }
+
+    public Long getDataCenterId() {
+        return this.dataCenterId;
+    }
+
+    public void setDataCenterId(Long dataCenterId) {
+        this.dataCenterId = dataCenterId;
+    }
+
+    public Long getPodId() {
+        return this.podId;
+    }
+
+    public void setPodId(long podId) {
+        this.podId = podId;
+    }
+
+    public Long getClusterId() {
+        return this.clusterId;
+    }
+
+    public void setClusterId(Long clusterId) {
+        this.clusterId = clusterId;
+    }
+
+    public String getPrivateIpAddress() {
+        return privateIpAddress;
+    }
+
+    public void setPrivateIpAddress(String privateIpAddress) {
+        this.privateIpAddress = privateIpAddress;
+    }
+
+    public String getPrivateNetMask() {
+        return this.privateNetmask;
+    }
+
+    public void setPrivateNetMask(String privateNetmask) {
+        this.privateNetmask = privateNetmask;
+    }
+
+    public String getPrivateMacAddress() {
+        return this.privateMacAddress;
+    }
+
+    public void setPrivateMacAddress(String privateMacAddress) {
+        this.privateMacAddress = privateMacAddress;
+    }
+
+    public String getPublicIpAddress() {
+        return this.publicIpAddress;
+    }
+
+    public void setPublicIpAddress(String publicIpAddress) {
+        this.publicIpAddress = publicIpAddress;
+    }
+
+    public String getPublicNetMask() {
+        return this.publicNetmask;
+    }
+
+    public void setPublicNetMask(String publicNetMask) {
+        this.publicNetmask = publicNetMask;
+    }
+
+    public String getPublicMacAddress() {
+        return this.publicMacAddress;
+    }
+
+    public void setPublicMacAddress(String publicMacAddress) {
+        this.publicMacAddress = publicMacAddress;
+    }
+
+    public String getStorageIpAddress() {
+        return this.storageIpAddress;
+    }
+
+    public void setStorageIpAddress(String storageIpAddress) {
+        this.storageIpAddress = storageIpAddress;
+    }
+
+    public String getStorageNetMask() {
+        return this.storageNetMask;
+    }
+
+    public void setStorageNetMask(String storageNetMask) {
+        this.storageNetMask = storageNetMask;
+    }
+
+    public String getStorageMacAddress() {
+        return this.storageMacAddress;
+    }
+
+    public void setStorageMacAddress(String storageMacAddress) {
+        this.storageMacAddress = storageMacAddress;
+    }
+}

http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/d6083ce5/plugins/hypervisors/simulator/src/com/cloud/simulator/MockSecStorageVO.java
----------------------------------------------------------------------
diff --git a/plugins/hypervisors/simulator/src/com/cloud/simulator/MockSecStorageVO.java b/plugins/hypervisors/simulator/src/com/cloud/simulator/MockSecStorageVO.java
new file mode 100644
index 0000000..59a81c7
--- /dev/null
+++ b/plugins/hypervisors/simulator/src/com/cloud/simulator/MockSecStorageVO.java
@@ -0,0 +1,76 @@
+// 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.simulator;
+
+import javax.persistence.Column;
+import javax.persistence.Entity;
+import javax.persistence.GeneratedValue;
+import javax.persistence.GenerationType;
+import javax.persistence.Id;
+import javax.persistence.Table;
+
+@Entity
+@Table(name="mocksecstorage")
+
+public class MockSecStorageVO {
+    @Id
+    @GeneratedValue(strategy=GenerationType.IDENTITY)
+    @Column(name="id")
+    private long id;
+
+    @Column(name="url")
+    private String url;
+
+    @Column(name="capacity")
+    private long capacity;
+
+    @Column(name="mount_point")
+    private String mountPoint;
+
+
+    public MockSecStorageVO() {
+
+    }
+
+    public long getId() {
+        return this.id;
+    }
+
+    public String getMountPoint() {
+        return this.mountPoint;
+    }
+
+    public void setMountPoint(String mountPoint) {
+        this.mountPoint = mountPoint;
+    }
+
+    public String getUrl() {
+        return url;
+    }
+
+    public void setUrl(String url) {
+        this.url = url;
+    }
+
+    public long getCapacity() {
+        return this.capacity;
+    }
+
+    public void setCapacity(long capacity) {
+        this.capacity = capacity;
+    }
+}

http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/d6083ce5/plugins/hypervisors/simulator/src/com/cloud/simulator/MockSecurityRulesVO.java
----------------------------------------------------------------------
diff --git a/plugins/hypervisors/simulator/src/com/cloud/simulator/MockSecurityRulesVO.java b/plugins/hypervisors/simulator/src/com/cloud/simulator/MockSecurityRulesVO.java
new file mode 100644
index 0000000..df31fbf
--- /dev/null
+++ b/plugins/hypervisors/simulator/src/com/cloud/simulator/MockSecurityRulesVO.java
@@ -0,0 +1,104 @@
+// 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.simulator;
+
+import javax.persistence.Column;
+import javax.persistence.Entity;
+import javax.persistence.GeneratedValue;
+import javax.persistence.GenerationType;
+import javax.persistence.Id;
+import javax.persistence.Table;
+
+
+@Entity
+@Table(name="mocksecurityrules")
+public class MockSecurityRulesVO {
+    @Id
+    @GeneratedValue(strategy=GenerationType.IDENTITY)
+    @Column(name="id")
+    private long id;
+
+    @Column(name="vmid")
+    private Long vmId;
+
+    @Column(name="signature")
+    private String signature;
+
+    @Column(name="seqnum")
+    private Long seqNum;
+
+    @Column(name="ruleset")
+    private String ruleSet;
+
+    @Column(name="hostid")
+    private String hostId;
+
+    @Column(name="vmname")
+    public String vmName;
+
+    public String getVmName() {
+        return this.vmName;
+    }
+
+    public void setVmName(String vmName) {
+        this.vmName = vmName;
+    }
+
+    public String getHostId() {
+        return this.hostId;
+    }
+
+    public void setHostId(String hostId) {
+        this.hostId = hostId;
+    }
+
+    public long getId() {
+        return this.id;
+    }
+
+    public Long getVmId() {
+        return this.vmId;
+    }
+
+    public void setVmId(Long vmId) {
+        this.vmId = vmId;
+    }
+
+    public String getSignature() {
+        return this.signature;
+    }
+
+    public void setSignature(String sig) {
+        this.signature = sig;
+    }
+
+    public Long getSeqNum() {
+        return this.seqNum;
+    }
+
+    public void setSeqNum(Long seqNum) {
+        this.seqNum = seqNum;
+    }
+
+    public String getRuleSet() {
+        return this.ruleSet;
+    }
+
+    public void setRuleSet(String ruleset) {
+        this.ruleSet = ruleset;
+    }
+}

http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/d6083ce5/plugins/hypervisors/simulator/src/com/cloud/simulator/MockStoragePoolVO.java
----------------------------------------------------------------------
diff --git a/plugins/hypervisors/simulator/src/com/cloud/simulator/MockStoragePoolVO.java b/plugins/hypervisors/simulator/src/com/cloud/simulator/MockStoragePoolVO.java
new file mode 100644
index 0000000..9c6e84d
--- /dev/null
+++ b/plugins/hypervisors/simulator/src/com/cloud/simulator/MockStoragePoolVO.java
@@ -0,0 +1,102 @@
+// 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.simulator;
+
+import javax.persistence.Column;
+import javax.persistence.Entity;
+import javax.persistence.EnumType;
+import javax.persistence.Enumerated;
+import javax.persistence.GeneratedValue;
+import javax.persistence.GenerationType;
+import javax.persistence.Id;
+import javax.persistence.Table;
+
+import com.cloud.storage.Storage.StoragePoolType;
+
+@Entity
+@Table(name="mockstoragepool")
+
+public class MockStoragePoolVO {
+    @Id
+    @GeneratedValue(strategy=GenerationType.IDENTITY)
+    @Column(name="id")
+    private long id;
+
+    @Column(name="guid")
+    private String uuid;
+
+    @Column(name="mount_point")
+    private String mountPoint;
+
+    @Column(name="capacity")
+    private long capacity;
+
+    @Column(name="hostguid")
+    private String hostGuid;
+
+    @Column(name="pool_type")
+    @Enumerated(value=EnumType.STRING)
+    private StoragePoolType poolType;
+
+    public MockStoragePoolVO() {
+
+    }
+
+    public String getHostGuid() {
+        return this.hostGuid;
+    }
+
+    public void setHostGuid(String hostGuid) {
+        this.hostGuid = hostGuid;
+    }
+
+    public long getId() {
+        return this.id;
+    }
+
+    public StoragePoolType getPoolType() {
+        return this.poolType;
+    }
+
+    public void setStorageType(StoragePoolType poolType) {
+        this.poolType = poolType;
+    }
+
+    public String getUuid() {
+        return this.uuid;
+    }
+
+    public void setUuid(String uuid) {
+        this.uuid = uuid;
+    }
+
+    public String getMountPoint() {
+        return this.mountPoint;
+    }
+
+    public void setMountPoint(String mountPoint) {
+        this.mountPoint = mountPoint;
+    }
+
+    public long getCapacity() {
+        return this.capacity;
+    }
+
+    public void setCapacity(long capacity) {
+        this.capacity = capacity;
+    }
+}

http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/d6083ce5/plugins/hypervisors/simulator/src/com/cloud/simulator/MockVMVO.java
----------------------------------------------------------------------
diff --git a/plugins/hypervisors/simulator/src/com/cloud/simulator/MockVMVO.java b/plugins/hypervisors/simulator/src/com/cloud/simulator/MockVMVO.java
new file mode 100644
index 0000000..4fb3085
--- /dev/null
+++ b/plugins/hypervisors/simulator/src/com/cloud/simulator/MockVMVO.java
@@ -0,0 +1,130 @@
+// 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.simulator;
+
+import javax.persistence.Column;
+import javax.persistence.Entity;
+import javax.persistence.GeneratedValue;
+import javax.persistence.GenerationType;
+import javax.persistence.Id;
+import javax.persistence.Table;
+
+import com.cloud.vm.VirtualMachine.State;
+
+@Entity
+@Table(name="mockvm")
+
+public class MockVMVO implements MockVm{
+    @Id
+    @GeneratedValue(strategy=GenerationType.IDENTITY)
+    @Column(name="id")
+    private long id;
+
+    @Column(name="name")
+    private String name;
+
+    @Column(name="host_id")
+    private long hostId;
+
+    @Column(name="type")
+    private String vmType;
+
+    @Column(name="state")
+    private State state;
+
+    @Column(name="vnc_port")
+    private int vncPort;
+
+    @Column(name="memory")
+    private long memory;
+
+    @Column(name="cpu")
+    private int cpu;
+
+    public MockVMVO() {
+
+    }
+
+    public long getId() {
+        return this.id;
+    }
+
+    public String getName() {
+        return this.name;
+    }
+
+    public void setName(String name) {
+        this.name = name;
+    }
+
+    public long getHostId() {
+        return this.hostId;
+    }
+
+    public void setHostId(long hostId) {
+        this.hostId = hostId;
+    }
+
+    public String getVmType() {
+        return this.vmType;
+    }
+
+    public void setVmType(String vmType) {
+        this.vmType = vmType;
+    }
+
+    public State getState() {
+        return this.state;
+    }
+
+    public String getType() {
+	return this.vmType;
+    }
+
+    public void setState(State state) {
+        this.state = state;
+    }
+
+    public int getVncPort() {
+        return this.vncPort;
+    }
+
+    public void setVncPort(int vncPort) {
+        this.vncPort = vncPort;
+    }
+
+    public long getMemory() {
+        return this.memory;
+    }
+
+    public void setMemory(long memory) {
+        this.memory = memory;
+    }
+
+    public int getCpu() {
+        return this.cpu;
+    }
+
+    public void setCpu(int cpu) {
+        this.cpu = cpu;
+    }
+
+    public void setType(String type) {
+	this.vmType = type;
+    }
+
+}

http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/d6083ce5/plugins/hypervisors/simulator/src/com/cloud/simulator/MockVm.java
----------------------------------------------------------------------
diff --git a/plugins/hypervisors/simulator/src/com/cloud/simulator/MockVm.java b/plugins/hypervisors/simulator/src/com/cloud/simulator/MockVm.java
new file mode 100644
index 0000000..2e1ba27
--- /dev/null
+++ b/plugins/hypervisors/simulator/src/com/cloud/simulator/MockVm.java
@@ -0,0 +1,44 @@
+// 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.simulator;
+
+import com.cloud.vm.VirtualMachine.State;
+
+// As storage is mapped from storage device, can virtually treat that VM here does
+public interface MockVm {
+
+
+	public String getName();
+
+	public State getState();
+
+	public void setState(State state);
+
+	public void setHostId(long hostId);
+	public long getMemory();
+
+	public int getCpu();
+	public String getType();
+	public int getVncPort();
+
+	public void setName(String name);
+	public void setMemory(long memory);
+	public void setCpu(int cpu);
+	public void setType(String type);
+	public void setVncPort(int vncPort);
+	public long getId();
+}

http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/d6083ce5/plugins/hypervisors/simulator/src/com/cloud/simulator/MockVolumeVO.java
----------------------------------------------------------------------
diff --git a/plugins/hypervisors/simulator/src/com/cloud/simulator/MockVolumeVO.java b/plugins/hypervisors/simulator/src/com/cloud/simulator/MockVolumeVO.java
new file mode 100644
index 0000000..48a12f8
--- /dev/null
+++ b/plugins/hypervisors/simulator/src/com/cloud/simulator/MockVolumeVO.java
@@ -0,0 +1,118 @@
+// 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.simulator;
+
+import javax.persistence.Column;
+import javax.persistence.Entity;
+import javax.persistence.EnumType;
+import javax.persistence.Enumerated;
+import javax.persistence.GeneratedValue;
+import javax.persistence.GenerationType;
+import javax.persistence.Id;
+import javax.persistence.Table;
+
+import com.cloud.storage.VMTemplateStorageResourceAssoc;
+import com.cloud.storage.VMTemplateStorageResourceAssoc.Status;
+
+
+@Entity
+@Table(name="mockvolume")
+
+public class MockVolumeVO {
+    public enum MockVolumeType {
+        VOLUME,
+        TEMPLATE,
+        ISO,
+        SNAPSHOT;
+    }
+    @Id
+    @GeneratedValue(strategy=GenerationType.IDENTITY)
+    @Column(name="id")
+    private long id;
+
+    @Column(name="name")
+    private String name;
+
+    @Column(name="size")
+    private long size;
+
+    @Column(name="path")
+    private String path;
+
+    @Column(name="pool_id")
+    private long poolId;
+
+    @Column(name="type")
+    @Enumerated(value=EnumType.STRING)
+    private MockVolumeType type;
+
+    @Column(name="status")
+    @Enumerated(value=EnumType.STRING)
+    private VMTemplateStorageResourceAssoc.Status status;
+
+    public long getId() {
+        return id;
+    }
+    public String getName() {
+        return this.name;
+    }
+
+    public void setName(String name) {
+        this.name = name;
+    }
+
+    public long getSize() {
+        return this.size;
+    }
+
+    public void setSize(long size) {
+        this.size = size;
+    }
+
+    public String getPath() {
+        return this.path;
+    }
+
+    public void setPath(String path) {
+        this.path = path;
+    }
+
+    public long getPoolId() {
+        return this.poolId;
+    }
+
+    public void setPoolId(long poolId) {
+        this.poolId = poolId;
+    }
+
+    public MockVolumeType getType() {
+        return this.type;
+    }
+
+    public void setType(MockVolumeType type) {
+        this.type = type;
+    }
+
+    public Status getStatus() {
+        return this.status;
+    }
+
+    public void setStatus(Status status) {
+        this.status = status;
+    }
+
+}

http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/d6083ce5/plugins/hypervisors/simulator/src/com/cloud/simulator/SimulatorGuru.java
----------------------------------------------------------------------
diff --git a/plugins/hypervisors/simulator/src/com/cloud/simulator/SimulatorGuru.java b/plugins/hypervisors/simulator/src/com/cloud/simulator/SimulatorGuru.java
new file mode 100644
index 0000000..b9c404b
--- /dev/null
+++ b/plugins/hypervisors/simulator/src/com/cloud/simulator/SimulatorGuru.java
@@ -0,0 +1,59 @@
+// 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.simulator;
+
+import javax.ejb.Local;
+
+import com.cloud.agent.api.to.VirtualMachineTO;
+import com.cloud.hypervisor.HypervisorGuru;
+import com.cloud.hypervisor.HypervisorGuruBase;
+import com.cloud.hypervisor.Hypervisor.HypervisorType;
+import com.cloud.storage.GuestOSVO;
+import com.cloud.storage.dao.GuestOSDao;
+import com.cloud.utils.component.Inject;
+import com.cloud.vm.VirtualMachine;
+import com.cloud.vm.VirtualMachineProfile;
+
+@Local(value=HypervisorGuru.class)
+public class SimulatorGuru extends HypervisorGuruBase implements HypervisorGuru {
+    @Inject GuestOSDao _guestOsDao;
+
+    protected SimulatorGuru() {
+        super();
+    }
+
+    @Override
+    public HypervisorType getHypervisorType() {
+        return HypervisorType.Simulator;
+    }
+
+    @Override
+    public <T extends VirtualMachine> VirtualMachineTO implement(VirtualMachineProfile<T> 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/incubator-cloudstack/blob/d6083ce5/plugins/hypervisors/simulator/src/com/cloud/simulator/SimulatorRuntimeException.java
----------------------------------------------------------------------
diff --git a/plugins/hypervisors/simulator/src/com/cloud/simulator/SimulatorRuntimeException.java b/plugins/hypervisors/simulator/src/com/cloud/simulator/SimulatorRuntimeException.java
new file mode 100644
index 0000000..9891bc8
--- /dev/null
+++ b/plugins/hypervisors/simulator/src/com/cloud/simulator/SimulatorRuntimeException.java
@@ -0,0 +1,41 @@
+// 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.simulator;
+
+import com.cloud.utils.SerialVersionUID;
+import com.cloud.utils.exception.RuntimeCloudException;
+
+/**
+ * wrap exceptions that you know there's no point in dealing with.
+ */
+public class SimulatorRuntimeException extends RuntimeCloudException {
+
+    private static final long serialVersionUID = SerialVersionUID.CloudRuntimeException;
+
+    public SimulatorRuntimeException(String message) {
+        super(message);
+    }
+
+    public SimulatorRuntimeException(String message, Throwable th) {
+        super(message, th);
+    }
+
+    protected SimulatorRuntimeException() {
+        super();
+    }
+}

http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/d6083ce5/plugins/hypervisors/simulator/src/com/cloud/simulator/dao/MockConfigurationDao.java
----------------------------------------------------------------------
diff --git a/plugins/hypervisors/simulator/src/com/cloud/simulator/dao/MockConfigurationDao.java b/plugins/hypervisors/simulator/src/com/cloud/simulator/dao/MockConfigurationDao.java
new file mode 100644
index 0000000..c0b3c6a
--- /dev/null
+++ b/plugins/hypervisors/simulator/src/com/cloud/simulator/dao/MockConfigurationDao.java
@@ -0,0 +1,27 @@
+// 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.simulator.dao;
+
+import com.cloud.simulator.MockConfigurationVO;
+import com.cloud.utils.db.GenericDao;
+
+public interface MockConfigurationDao extends GenericDao<MockConfigurationVO, Long> {
+    MockConfigurationVO findByCommand(Long dcId, Long podId, Long clusterId, Long hostId, String name);
+
+	MockConfigurationVO findByNameBottomUP(Long dcId, Long podId,
+			Long clusterId, Long hostId, String name);
+}

http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/d6083ce5/plugins/hypervisors/simulator/src/com/cloud/simulator/dao/MockConfigurationDaoImpl.java
----------------------------------------------------------------------
diff --git a/plugins/hypervisors/simulator/src/com/cloud/simulator/dao/MockConfigurationDaoImpl.java b/plugins/hypervisors/simulator/src/com/cloud/simulator/dao/MockConfigurationDaoImpl.java
new file mode 100644
index 0000000..bd1b48d
--- /dev/null
+++ b/plugins/hypervisors/simulator/src/com/cloud/simulator/dao/MockConfigurationDaoImpl.java
@@ -0,0 +1,142 @@
+// 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.simulator.dao;
+
+import java.sql.PreparedStatement;
+import java.sql.ResultSet;
+import java.util.Formatter;
+
+import javax.ejb.Local;
+
+import com.cloud.simulator.MockConfigurationVO;
+import com.cloud.utils.db.GenericDaoBase;
+import com.cloud.utils.db.SearchBuilder;
+import com.cloud.utils.db.SearchCriteria;
+import com.cloud.utils.db.Transaction;
+
+@Local(value={MockConfigurationDao.class})
+public class MockConfigurationDaoImpl extends GenericDaoBase<MockConfigurationVO, Long> implements MockConfigurationDao {
+    private SearchBuilder<MockConfigurationVO> _searchByDcIdName;
+    private SearchBuilder<MockConfigurationVO> _searchByDcIDPodIdName;
+    private SearchBuilder<MockConfigurationVO> _searchByDcIDPodIdClusterIdName;
+    private SearchBuilder<MockConfigurationVO> _searchByDcIDPodIdClusterIdHostIdName;
+    private SearchBuilder<MockConfigurationVO> _searchByGlobalName;
+
+
+    public MockConfigurationDaoImpl() {
+        _searchByGlobalName = createSearchBuilder();
+        _searchByGlobalName.and("dcId", _searchByGlobalName.entity().getDataCenterId(), SearchCriteria.Op.NULL);
+        _searchByGlobalName.and("podId", _searchByGlobalName.entity().getPodId(), SearchCriteria.Op.NULL);
+        _searchByGlobalName.and("clusterId", _searchByGlobalName.entity().getClusterId(), SearchCriteria.Op.NULL);
+        _searchByGlobalName.and("hostId", _searchByGlobalName.entity().getHostId(), SearchCriteria.Op.NULL);
+        _searchByGlobalName.and("name", _searchByGlobalName.entity().getName(), SearchCriteria.Op.EQ);
+        _searchByGlobalName.done();
+
+        _searchByDcIdName = createSearchBuilder();
+        _searchByDcIdName.and("dcId", _searchByDcIdName.entity().getDataCenterId(), SearchCriteria.Op.EQ);
+        _searchByDcIdName.and("podId", _searchByDcIdName.entity().getPodId(), SearchCriteria.Op.NULL);
+        _searchByDcIdName.and("clusterId", _searchByDcIdName.entity().getClusterId(), SearchCriteria.Op.NULL);
+        _searchByDcIdName.and("hostId", _searchByDcIdName.entity().getHostId(), SearchCriteria.Op.NULL);
+        _searchByDcIdName.and("name", _searchByDcIdName.entity().getName(), SearchCriteria.Op.EQ);
+        _searchByDcIdName.done();
+
+        _searchByDcIDPodIdName = createSearchBuilder();
+        _searchByDcIDPodIdName.and("dcId", _searchByDcIDPodIdName.entity().getDataCenterId(), SearchCriteria.Op.EQ);
+        _searchByDcIDPodIdName.and("podId", _searchByDcIDPodIdName.entity().getPodId(), SearchCriteria.Op.EQ);
+        _searchByDcIDPodIdName.and("clusterId", _searchByDcIDPodIdName.entity().getClusterId(), SearchCriteria.Op.NULL);
+        _searchByDcIDPodIdName.and("hostId", _searchByDcIDPodIdName.entity().getHostId(), SearchCriteria.Op.NULL);
+        _searchByDcIDPodIdName.and("name", _searchByDcIDPodIdName.entity().getName(), SearchCriteria.Op.EQ);
+        _searchByDcIDPodIdName.done();
+
+        _searchByDcIDPodIdClusterIdName = createSearchBuilder();
+        _searchByDcIDPodIdClusterIdName.and("dcId", _searchByDcIDPodIdClusterIdName.entity().getDataCenterId(), SearchCriteria.Op.EQ);
+        _searchByDcIDPodIdClusterIdName.and("podId", _searchByDcIDPodIdClusterIdName.entity().getPodId(), SearchCriteria.Op.EQ);
+        _searchByDcIDPodIdClusterIdName.and("clusterId", _searchByDcIDPodIdClusterIdName.entity().getClusterId(), SearchCriteria.Op.EQ);
+        _searchByDcIDPodIdClusterIdName.and("hostId", _searchByDcIDPodIdClusterIdName.entity().getHostId(), SearchCriteria.Op.NULL);
+        _searchByDcIDPodIdClusterIdName.and("name", _searchByDcIDPodIdClusterIdName.entity().getName(), SearchCriteria.Op.EQ);
+        _searchByDcIDPodIdClusterIdName.done();
+
+        _searchByDcIDPodIdClusterIdHostIdName = createSearchBuilder();
+        _searchByDcIDPodIdClusterIdHostIdName.and("dcId", _searchByDcIDPodIdClusterIdHostIdName.entity().getDataCenterId(), SearchCriteria.Op.EQ);
+        _searchByDcIDPodIdClusterIdHostIdName.and("podId", _searchByDcIDPodIdClusterIdHostIdName.entity().getPodId(), SearchCriteria.Op.EQ);
+        _searchByDcIDPodIdClusterIdHostIdName.and("clusterId", _searchByDcIDPodIdClusterIdHostIdName.entity().getClusterId(), SearchCriteria.Op.EQ);
+        _searchByDcIDPodIdClusterIdHostIdName.and("hostId", _searchByDcIDPodIdClusterIdHostIdName.entity().getHostId(), SearchCriteria.Op.EQ);
+        _searchByDcIDPodIdClusterIdHostIdName.and("name", _searchByDcIDPodIdClusterIdHostIdName.entity().getName(), SearchCriteria.Op.EQ);
+        _searchByDcIDPodIdClusterIdHostIdName.done();
+    }
+    @Override
+    public MockConfigurationVO findByCommand(Long dcId, Long podId, Long clusterId, Long hostId, String name) {
+
+        if (dcId == null) {
+            SearchCriteria<MockConfigurationVO> sc = _searchByGlobalName.create();
+            sc.setParameters("name", name);
+            return findOneBy(sc);
+        } else if (podId == null) {
+            SearchCriteria<MockConfigurationVO> sc = _searchByDcIdName.create();
+            sc.setParameters("name", name);
+            sc.setParameters("dcId", dcId);
+            return findOneBy(sc);
+        } else if (clusterId == null) {
+            SearchCriteria<MockConfigurationVO> sc = _searchByDcIDPodIdName.create();
+            sc.setParameters("name", name);
+            sc.setParameters("dcId", dcId);
+            sc.setParameters("podId", podId);
+            return findOneBy(sc);
+        } else if (hostId == null) {
+            SearchCriteria<MockConfigurationVO> sc = _searchByDcIDPodIdClusterIdName.create();
+            sc.setParameters("name", name);
+            sc.setParameters("dcId", dcId);
+            sc.setParameters("podId", podId);
+            sc.setParameters("clusterId", clusterId);
+            return findOneBy(sc);
+        } else {
+            SearchCriteria<MockConfigurationVO> sc = _searchByDcIDPodIdClusterIdHostIdName.create();
+            sc.setParameters("name", name);
+            sc.setParameters("dcId", dcId);
+            sc.setParameters("podId", podId);
+            sc.setParameters("clusterId", clusterId);
+            sc.setParameters("hostId", hostId);
+            return findOneBy(sc);
+        }
+    }
+
+    @Override
+    public MockConfigurationVO findByNameBottomUP(Long dcId, Long podId, Long clusterId, Long hostId, String name) {
+	 Transaction txn = Transaction.currentTxn();
+	StringBuilder search = new StringBuilder();
+	Formatter formatter = new Formatter(search);
+	formatter.format("select * from mockconfiguration where (name='%s') and ((data_center_id = %d and pod_id = %d and cluster_id = %d and host_id = %d)", name, dcId, podId, clusterId, hostId);
+	formatter.format(" or (data_center_id = %d and pod_id = %d and cluster_id = %d and host_id is null)", dcId, podId, clusterId);
+	formatter.format(" or (data_center_id = %d and pod_id = %d and cluster_id is null and host_id is null)", dcId, podId);
+	formatter.format(" or (data_center_id = %d and pod_id is null and cluster_id is null and host_id is null)", dcId);
+	formatter.format(" or (data_center_id is null and pod_id is null and cluster_id is null and host_id is null)) LIMIT 1");
+
+	PreparedStatement pstmt = null;
+		try {
+			String sql = search.toString();
+			pstmt = txn.prepareAutoCloseStatement(sql);
+			ResultSet rs = pstmt.executeQuery();
+			if (rs.next()) {
+                return toEntityBean(rs, false);
+            }
+		} catch (Exception e) {
+
+		}
+		return null;
+    }
+
+}

http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/d6083ce5/plugins/hypervisors/simulator/src/com/cloud/simulator/dao/MockHostDao.java
----------------------------------------------------------------------
diff --git a/plugins/hypervisors/simulator/src/com/cloud/simulator/dao/MockHostDao.java b/plugins/hypervisors/simulator/src/com/cloud/simulator/dao/MockHostDao.java
new file mode 100644
index 0000000..4732783
--- /dev/null
+++ b/plugins/hypervisors/simulator/src/com/cloud/simulator/dao/MockHostDao.java
@@ -0,0 +1,27 @@
+// 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.simulator.dao;
+
+import com.cloud.simulator.MockHost;
+import com.cloud.simulator.MockHostVO;
+import com.cloud.utils.db.GenericDao;
+
+public interface MockHostDao extends GenericDao<MockHostVO, Long> {
+    public MockHost findByGuid(String guid);
+    public MockHost findByVmId(long vmId);
+    public boolean removeByGuid(String guid);
+}

http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/d6083ce5/plugins/hypervisors/simulator/src/com/cloud/simulator/dao/MockHostDaoImpl.java
----------------------------------------------------------------------
diff --git a/plugins/hypervisors/simulator/src/com/cloud/simulator/dao/MockHostDaoImpl.java b/plugins/hypervisors/simulator/src/com/cloud/simulator/dao/MockHostDaoImpl.java
new file mode 100644
index 0000000..8a566d7
--- /dev/null
+++ b/plugins/hypervisors/simulator/src/com/cloud/simulator/dao/MockHostDaoImpl.java
@@ -0,0 +1,55 @@
+// 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.simulator.dao;
+
+import javax.ejb.Local;
+
+import com.cloud.simulator.MockHost;
+import com.cloud.simulator.MockHostVO;
+import com.cloud.utils.db.GenericDaoBase;
+import com.cloud.utils.db.SearchBuilder;
+import com.cloud.utils.db.SearchCriteria;
+
+@Local(value={MockHostDao.class})
+public class MockHostDaoImpl extends GenericDaoBase<MockHostVO, Long> implements MockHostDao {
+    protected final SearchBuilder<MockHostVO> GuidSearch;
+    public MockHostDaoImpl() {
+        GuidSearch = createSearchBuilder();
+        GuidSearch.and("guid", GuidSearch.entity().getGuid(), SearchCriteria.Op.EQ);
+        GuidSearch.done();
+    }
+    @Override
+    public MockHost findByGuid(String guid) {
+        SearchCriteria<MockHostVO> sc = GuidSearch.create();
+        sc.setParameters("guid", guid);
+        return findOneBy(sc);
+    }
+    @Override
+    public MockHost findByVmId(long vmId) {
+        // TODO Auto-generated method stub
+        return null;
+    }
+    @Override
+    public boolean removeByGuid(String guid) {
+       MockHost host = this.findByGuid(guid);
+       if (host == null) {
+           return false;
+       }
+       return this.remove(host.getId());
+    }
+
+}

http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/d6083ce5/plugins/hypervisors/simulator/src/com/cloud/simulator/dao/MockSecStorageDao.java
----------------------------------------------------------------------
diff --git a/plugins/hypervisors/simulator/src/com/cloud/simulator/dao/MockSecStorageDao.java b/plugins/hypervisors/simulator/src/com/cloud/simulator/dao/MockSecStorageDao.java
new file mode 100644
index 0000000..fc19f63
--- /dev/null
+++ b/plugins/hypervisors/simulator/src/com/cloud/simulator/dao/MockSecStorageDao.java
@@ -0,0 +1,24 @@
+// 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.simulator.dao;
+
+import com.cloud.simulator.MockSecStorageVO;
+import com.cloud.utils.db.GenericDao;
+
+public interface MockSecStorageDao extends GenericDao<MockSecStorageVO, Long> {
+    public MockSecStorageVO findByUrl(String url);
+}

http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/d6083ce5/plugins/hypervisors/simulator/src/com/cloud/simulator/dao/MockSecStorageDaoImpl.java
----------------------------------------------------------------------
diff --git a/plugins/hypervisors/simulator/src/com/cloud/simulator/dao/MockSecStorageDaoImpl.java b/plugins/hypervisors/simulator/src/com/cloud/simulator/dao/MockSecStorageDaoImpl.java
new file mode 100644
index 0000000..65a375f
--- /dev/null
+++ b/plugins/hypervisors/simulator/src/com/cloud/simulator/dao/MockSecStorageDaoImpl.java
@@ -0,0 +1,42 @@
+// 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.simulator.dao;
+
+import javax.ejb.Local;
+
+import com.cloud.simulator.MockSecStorageVO;
+import com.cloud.utils.db.GenericDaoBase;
+import com.cloud.utils.db.SearchBuilder;
+import com.cloud.utils.db.SearchCriteria;
+
+@Local(value={MockSecStorageDao.class})
+public class MockSecStorageDaoImpl extends GenericDaoBase<MockSecStorageVO, Long> implements MockSecStorageDao {
+    protected final SearchBuilder<MockSecStorageVO> urlSearch;
+    @Override
+    public MockSecStorageVO findByUrl(String url) {
+        SearchCriteria<MockSecStorageVO> sc = urlSearch.create();
+        sc.setParameters("url", url);
+        return findOneBy(sc);
+    }
+
+    public MockSecStorageDaoImpl() {
+        urlSearch = createSearchBuilder();
+        urlSearch.and("url", urlSearch.entity().getUrl(), SearchCriteria.Op.EQ);
+        urlSearch.done();
+    }
+
+}

http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/d6083ce5/plugins/hypervisors/simulator/src/com/cloud/simulator/dao/MockSecurityRulesDao.java
----------------------------------------------------------------------
diff --git a/plugins/hypervisors/simulator/src/com/cloud/simulator/dao/MockSecurityRulesDao.java b/plugins/hypervisors/simulator/src/com/cloud/simulator/dao/MockSecurityRulesDao.java
new file mode 100644
index 0000000..ecc69f1
--- /dev/null
+++ b/plugins/hypervisors/simulator/src/com/cloud/simulator/dao/MockSecurityRulesDao.java
@@ -0,0 +1,27 @@
+// 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.simulator.dao;
+
+import java.util.List;
+
+import com.cloud.simulator.MockSecurityRulesVO;
+import com.cloud.utils.db.GenericDao;
+
+public interface MockSecurityRulesDao extends GenericDao<MockSecurityRulesVO, Long> {
+    public MockSecurityRulesVO findByVmId(Long vmId);
+    public List<MockSecurityRulesVO> findByHost(String hostGuid);
+}

http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/d6083ce5/plugins/hypervisors/simulator/src/com/cloud/simulator/dao/MockSecurityRulesDaoImpl.java
----------------------------------------------------------------------
diff --git a/plugins/hypervisors/simulator/src/com/cloud/simulator/dao/MockSecurityRulesDaoImpl.java b/plugins/hypervisors/simulator/src/com/cloud/simulator/dao/MockSecurityRulesDaoImpl.java
new file mode 100644
index 0000000..8831efe
--- /dev/null
+++ b/plugins/hypervisors/simulator/src/com/cloud/simulator/dao/MockSecurityRulesDaoImpl.java
@@ -0,0 +1,60 @@
+// 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.simulator.dao;
+
+import java.util.List;
+import java.util.Map;
+
+import javax.ejb.Local;
+import javax.naming.ConfigurationException;
+
+import com.cloud.simulator.MockSecurityRulesVO;
+import com.cloud.utils.db.GenericDaoBase;
+import com.cloud.utils.db.SearchBuilder;
+import com.cloud.utils.db.SearchCriteria;
+@Local(value={MockSecurityRulesDao.class})
+public class MockSecurityRulesDaoImpl extends GenericDaoBase<MockSecurityRulesVO, Long> implements MockSecurityRulesDao {
+    protected  SearchBuilder<MockSecurityRulesVO> vmIdSearch;
+    protected  SearchBuilder<MockSecurityRulesVO> hostSearch;
+    @Override
+    public MockSecurityRulesVO findByVmId(Long vmId) {
+        SearchCriteria<MockSecurityRulesVO> sc = vmIdSearch.create();
+        sc.setParameters("vmId", vmId);
+        return findOneBy(sc);
+    }
+
+    @Override
+    public List<MockSecurityRulesVO> findByHost(String hostGuid) {
+        SearchCriteria<MockSecurityRulesVO> sc = hostSearch.create();
+        sc.setParameters("host", hostGuid);
+        return listBy(sc);
+    }
+
+    @Override
+    public boolean configure(String name, Map<String, Object> params) throws ConfigurationException {
+        vmIdSearch = createSearchBuilder();
+        vmIdSearch.and("vmId", vmIdSearch.entity().getVmId(), SearchCriteria.Op.EQ);
+        vmIdSearch.done();
+
+        hostSearch = createSearchBuilder();
+        hostSearch.and("host", hostSearch.entity().getHostId(), SearchCriteria.Op.EQ);
+        hostSearch.done();
+
+        return true;
+    }
+
+}

http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/d6083ce5/plugins/hypervisors/simulator/src/com/cloud/simulator/dao/MockStoragePoolDao.java
----------------------------------------------------------------------
diff --git a/plugins/hypervisors/simulator/src/com/cloud/simulator/dao/MockStoragePoolDao.java b/plugins/hypervisors/simulator/src/com/cloud/simulator/dao/MockStoragePoolDao.java
new file mode 100644
index 0000000..e1b4f42
--- /dev/null
+++ b/plugins/hypervisors/simulator/src/com/cloud/simulator/dao/MockStoragePoolDao.java
@@ -0,0 +1,25 @@
+// 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.simulator.dao;
+
+import com.cloud.simulator.MockStoragePoolVO;
+import com.cloud.utils.db.GenericDao;
+
+public interface MockStoragePoolDao extends GenericDao<MockStoragePoolVO, Long> {
+    public MockStoragePoolVO findByUuid(String uuid);
+    public MockStoragePoolVO findByHost(String hostUuid);
+}

http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/d6083ce5/plugins/hypervisors/simulator/src/com/cloud/simulator/dao/MockStoragePoolDaoImpl.java
----------------------------------------------------------------------
diff --git a/plugins/hypervisors/simulator/src/com/cloud/simulator/dao/MockStoragePoolDaoImpl.java b/plugins/hypervisors/simulator/src/com/cloud/simulator/dao/MockStoragePoolDaoImpl.java
new file mode 100644
index 0000000..3a64d27
--- /dev/null
+++ b/plugins/hypervisors/simulator/src/com/cloud/simulator/dao/MockStoragePoolDaoImpl.java
@@ -0,0 +1,57 @@
+// 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.simulator.dao;
+
+import javax.ejb.Local;
+
+import com.cloud.simulator.MockStoragePoolVO;
+import com.cloud.storage.Storage.StoragePoolType;
+import com.cloud.utils.db.GenericDaoBase;
+import com.cloud.utils.db.SearchBuilder;
+import com.cloud.utils.db.SearchCriteria;
+
+@Local(value={MockStoragePoolDao.class})
+public class MockStoragePoolDaoImpl extends GenericDaoBase<MockStoragePoolVO, Long> implements MockStoragePoolDao {
+    protected final SearchBuilder<MockStoragePoolVO> uuidSearch;
+    protected final SearchBuilder<MockStoragePoolVO> hostguidSearch;
+    @Override
+    public MockStoragePoolVO findByUuid(String uuid) {
+        SearchCriteria<MockStoragePoolVO> sc = uuidSearch.create();
+        sc.setParameters("uuid", uuid);
+        return findOneBy(sc);
+    }
+
+    public MockStoragePoolDaoImpl() {
+        uuidSearch = createSearchBuilder();
+        uuidSearch.and("uuid", uuidSearch.entity().getUuid(), SearchCriteria.Op.EQ);
+        uuidSearch.done();
+
+        hostguidSearch = createSearchBuilder();
+        hostguidSearch.and("hostguid", hostguidSearch.entity().getHostGuid(), SearchCriteria.Op.EQ);
+        hostguidSearch.and("type", hostguidSearch.entity().getPoolType(), SearchCriteria.Op.EQ);
+        hostguidSearch.done();
+    }
+
+    @Override
+    public MockStoragePoolVO findByHost(String hostUuid) {
+        SearchCriteria<MockStoragePoolVO> sc = hostguidSearch.create();
+        sc.setParameters("hostguid", hostUuid);
+        sc.setParameters("type", StoragePoolType.Filesystem.toString());
+        return findOneBy(sc);
+    }
+
+}

http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/d6083ce5/plugins/hypervisors/simulator/src/com/cloud/simulator/dao/MockVMDao.java
----------------------------------------------------------------------
diff --git a/plugins/hypervisors/simulator/src/com/cloud/simulator/dao/MockVMDao.java b/plugins/hypervisors/simulator/src/com/cloud/simulator/dao/MockVMDao.java
new file mode 100644
index 0000000..fd4d708
--- /dev/null
+++ b/plugins/hypervisors/simulator/src/com/cloud/simulator/dao/MockVMDao.java
@@ -0,0 +1,29 @@
+// 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.simulator.dao;
+
+import java.util.List;
+
+import com.cloud.simulator.MockVMVO;
+import com.cloud.utils.db.GenericDao;
+
+public interface MockVMDao extends GenericDao<MockVMVO, Long> {
+    public List<MockVMVO> findByHostId(long hostId);
+    public List<MockVMVO> findByHostGuid(String guid);
+    public MockVMVO findByVmName(String vmName);
+    public MockVMVO findByVmNameAndHost(String vmName, String hostGuid);
+}

http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/d6083ce5/plugins/hypervisors/simulator/src/com/cloud/simulator/dao/MockVMDaoImpl.java
----------------------------------------------------------------------
diff --git a/plugins/hypervisors/simulator/src/com/cloud/simulator/dao/MockVMDaoImpl.java b/plugins/hypervisors/simulator/src/com/cloud/simulator/dao/MockVMDaoImpl.java
new file mode 100644
index 0000000..86264f2
--- /dev/null
+++ b/plugins/hypervisors/simulator/src/com/cloud/simulator/dao/MockVMDaoImpl.java
@@ -0,0 +1,92 @@
+// 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.simulator.dao;
+
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Map;
+
+import javax.ejb.Local;
+import javax.naming.ConfigurationException;
+
+import com.cloud.simulator.MockHostVO;
+import com.cloud.simulator.MockVMVO;
+import com.cloud.utils.component.Inject;
+import com.cloud.utils.db.GenericDaoBase;
+import com.cloud.utils.db.JoinBuilder;
+import com.cloud.utils.db.SearchBuilder;
+import com.cloud.utils.db.SearchCriteria;
+import com.cloud.vm.VirtualMachine;
+
+@Local(value={MockVMDao.class})
+public class MockVMDaoImpl extends GenericDaoBase<MockVMVO, Long> implements MockVMDao {
+    protected SearchBuilder<MockVMVO> GuidSearch;
+    protected SearchBuilder<MockVMVO> vmNameSearch;
+    protected SearchBuilder<MockVMVO> vmhostSearch;
+    @Inject MockHostDao _mockHostDao;
+    @Override
+    public List<MockVMVO> findByHostId(long hostId) {
+        return new ArrayList<MockVMVO>();
+    }
+
+    @Override
+    public MockVMVO findByVmName(String vmName) {
+        SearchCriteria<MockVMVO> sc = vmNameSearch.create();
+        sc.setParameters("name", vmName);
+        return findOneBy(sc);
+    }
+
+    @Override
+    public List<MockVMVO> findByHostGuid(String guid) {
+        SearchCriteria<MockVMVO> sc = GuidSearch.create();
+        sc.setJoinParameters("host", "guid", guid);
+        sc.setParameters("state", VirtualMachine.State.Running);
+        return listBy(sc);
+    }
+
+    @Override
+    public MockVMVO findByVmNameAndHost(String vmName, String hostGuid) {
+        SearchCriteria<MockVMVO> sc = vmhostSearch.create();
+        sc.setJoinParameters("host", "guid", hostGuid);
+        sc.setParameters("name", vmName);
+        return findOneBy(sc);
+    }
+
+    @Override
+    public boolean configure(String name, Map<String, Object> params) throws ConfigurationException {
+        SearchBuilder<MockHostVO> host = _mockHostDao.createSearchBuilder();
+        host.and("guid", host.entity().getGuid(), SearchCriteria.Op.EQ);
+
+        GuidSearch = createSearchBuilder();
+        GuidSearch.join("host", host, host.entity().getId(), GuidSearch.entity().getHostId(), JoinBuilder.JoinType.INNER);
+        GuidSearch.and("state", GuidSearch.entity().getState(), SearchCriteria.Op.EQ);
+        GuidSearch.done();
+
+        vmNameSearch = createSearchBuilder();
+        vmNameSearch.and("name", vmNameSearch.entity().getName(), SearchCriteria.Op.EQ);
+        vmNameSearch.done();
+
+        SearchBuilder<MockHostVO> newhost = _mockHostDao.createSearchBuilder();
+        newhost.and("guid", newhost.entity().getGuid(), SearchCriteria.Op.EQ);
+        vmhostSearch = createSearchBuilder();
+        vmhostSearch.and("name", vmhostSearch.entity().getName(), SearchCriteria.Op.EQ);
+        vmhostSearch.join("host", newhost, newhost.entity().getId(), vmhostSearch.entity().getHostId(), JoinBuilder.JoinType.INNER);
+        vmhostSearch.done();
+
+        return true;
+    }
+}