You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@cloudstack.apache.org by da...@apache.org on 2014/06/24 10:24:24 UTC

[08/11] Revert "CLOUDSTACK-6967: Now with module!"

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/be028974/plugins/hypervisors/ovm3/src/com/cloud/hypervisor/ovm3/hypervisor/Ovm3ResourceBase.java
----------------------------------------------------------------------
diff --git a/plugins/hypervisors/ovm3/src/com/cloud/hypervisor/ovm3/hypervisor/Ovm3ResourceBase.java b/plugins/hypervisors/ovm3/src/com/cloud/hypervisor/ovm3/hypervisor/Ovm3ResourceBase.java
deleted file mode 100755
index 6b563d5..0000000
--- a/plugins/hypervisors/ovm3/src/com/cloud/hypervisor/ovm3/hypervisor/Ovm3ResourceBase.java
+++ /dev/null
@@ -1,3211 +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.hypervisor.ovm3.hypervisor;
-
-import java.io.File;
-import java.io.IOException;
-import java.math.BigInteger;
-import java.net.URI;
-import java.util.ArrayList;
-// import java.net.URISyntaxException;
-/*
- * import java.util.ArrayList;
- */
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
-import java.util.UUID;
-import java.util.concurrent.ConcurrentHashMap;
-import java.net.URL;
-
-import org.apache.commons.lang.BooleanUtils;
-
-import com.google.gson.Gson;
-
-import org.apache.commons.codec.binary.Base64;
-
-import javax.naming.ConfigurationException;
-
-import org.apache.log4j.Logger;
-import org.apache.xmlrpc.XmlRpcException;
-import org.apache.cloudstack.storage.to.TemplateObjectTO;
-import org.apache.cloudstack.storage.to.VolumeObjectTO;
-import org.apache.cloudstack.storage.datastore.db.PrimaryDataStoreDao;
-
-
-
-
-// import org.apache.cloudstack.storage.to.PrimaryDataStoreTO;
-// import org.apache.cloudstack.storage.datastore.db.StoragePoolVO;
-import com.cloud.agent.IAgentControl;
-import com.cloud.agent.api.Answer;
-import com.cloud.agent.api.AttachIsoCommand;
-import com.cloud.agent.api.AttachVolumeAnswer;
-import com.cloud.agent.api.AttachVolumeCommand;
-import com.cloud.agent.api.CheckNetworkAnswer;
-import com.cloud.agent.api.CheckNetworkCommand;
-import com.cloud.agent.api.CheckVirtualMachineAnswer;
-import com.cloud.agent.api.CheckVirtualMachineCommand;
-// import com.cloud.agent.api.CleanupNetworkRulesCmd;
-import com.cloud.agent.api.Command;
-import com.cloud.agent.api.CreatePrivateTemplateFromVolumeCommand;
-import com.cloud.agent.api.CreateStoragePoolCommand;
-import com.cloud.agent.api.DeleteStoragePoolCommand;
-import com.cloud.agent.api.FenceAnswer;
-import com.cloud.agent.api.FenceCommand;
-import com.cloud.agent.api.GetHostStatsAnswer;
-import com.cloud.agent.api.GetHostStatsCommand;
-import com.cloud.agent.api.GetStorageStatsAnswer;
-import com.cloud.agent.api.GetStorageStatsCommand;
-import com.cloud.agent.api.GetVmStatsAnswer;
-import com.cloud.agent.api.GetVmStatsCommand;
-import com.cloud.agent.api.GetVncPortAnswer;
-import com.cloud.agent.api.GetVncPortCommand;
-import com.cloud.agent.api.GetDomRVersionAnswer;
-import com.cloud.agent.api.GetDomRVersionCmd;
-import com.cloud.agent.api.NetworkRulesSystemVmCommand;
-import com.cloud.agent.api.routing.DhcpEntryCommand;
-import com.cloud.agent.api.routing.SavePasswordCommand;
-import com.cloud.agent.api.routing.VmDataCommand;
-// import com.cloud.agent.api.routing.DhcpEntryAnswer;
-import com.cloud.agent.api.HostStatsEntry;
-import com.cloud.agent.api.HostVmStateReportEntry;
-import com.cloud.agent.api.MaintainAnswer;
-import com.cloud.agent.api.MaintainCommand;
-import com.cloud.agent.api.MigrateAnswer;
-import com.cloud.agent.api.MigrateCommand;
-import com.cloud.agent.api.ModifyStoragePoolAnswer;
-import com.cloud.agent.api.ModifyStoragePoolCommand;
-import com.cloud.agent.api.PingCommand;
-import com.cloud.agent.api.PingRoutingCommand;
-import com.cloud.agent.api.PingTestCommand;
-import com.cloud.agent.api.PrepareForMigrationAnswer;
-import com.cloud.agent.api.PrepareForMigrationCommand;
-// import com.cloud.agent.api.PrepareOCFS2NodesCommand;
-import com.cloud.agent.api.ReadyAnswer;
-import com.cloud.agent.api.ReadyCommand;
-import com.cloud.agent.api.RebootAnswer;
-import com.cloud.agent.api.RebootCommand;
-/*
- * import com.cloud.agent.api.SecurityGroupRuleAnswer;
- * import com.cloud.agent.api.SecurityGroupRulesCmd;
- */
-import com.cloud.agent.api.StartAnswer;
-import com.cloud.agent.api.StartCommand;
-import com.cloud.agent.api.StartupCommand;
-import com.cloud.agent.api.StartupRoutingCommand;
-import com.cloud.agent.api.StartupStorageCommand;
-import com.cloud.agent.api.StopAnswer;
-import com.cloud.agent.api.StopCommand;
-import com.cloud.agent.api.VmStatsEntry;
-import com.cloud.agent.api.storage.CopyVolumeAnswer;
-import com.cloud.agent.api.storage.CopyVolumeCommand;
-import com.cloud.agent.api.storage.CreateAnswer;
-import com.cloud.agent.api.storage.CreateCommand;
-import com.cloud.agent.api.storage.CreatePrivateTemplateAnswer;
-import com.cloud.agent.api.storage.DestroyCommand;
-import com.cloud.agent.api.storage.PrimaryStorageDownloadAnswer;
-import com.cloud.agent.api.storage.PrimaryStorageDownloadCommand;
-import com.cloud.agent.api.routing.NetworkElementCommand;
-import com.cloud.agent.api.to.DataStoreTO;
-import com.cloud.agent.api.to.DataTO;
-import com.cloud.agent.api.to.DiskTO;
-import com.cloud.agent.api.to.NfsTO;
-import com.cloud.agent.api.to.NicTO;
-import com.cloud.agent.api.to.StorageFilerTO;
-import com.cloud.agent.api.to.VirtualMachineTO;
-import com.cloud.agent.api.to.VolumeTO;
-import com.cloud.agent.api.to.DataObjectType;
-import com.cloud.host.Host.Type;
-import com.cloud.host.HostVO;
-import com.cloud.host.dao.HostDao;
-import com.cloud.hypervisor.Hypervisor.HypervisorType;
-import com.cloud.network.Networks.BroadcastDomainType;
-import com.cloud.network.Networks.TrafficType;
-import com.cloud.network.PhysicalNetworkSetupInfo;
-// import com.cloud.network.NetworkModel;
-import com.cloud.resource.ServerResource;
-import com.cloud.resource.hypervisor.HypervisorResource;
-// import com.cloud.storage.Storage.ImageFormat;
-import com.cloud.storage.Storage.StoragePoolType;
-import com.cloud.storage.Volume;
-import com.cloud.storage.template.TemplateProp;
-import com.cloud.template.VirtualMachineTemplate.BootloaderType;
-// import com.cloud.utils.Pair;
-// import com.cloud.utils.Ternary;
-import com.cloud.utils.exception.CloudRuntimeException;
-// import com.cloud.utils.script.Script;
-import com.cloud.utils.ssh.SshHelper;
-import com.trilead.ssh2.SCPClient;
-import com.cloud.utils.ssh.SSHCmdHelper;
-import com.cloud.agent.api.check.CheckSshAnswer;
-import com.cloud.agent.api.check.CheckSshCommand;
-import com.cloud.vm.DiskProfile;
-import com.cloud.vm.VirtualMachine;
-import com.cloud.vm.VirtualMachineName;
-import com.cloud.vm.VirtualMachine.PowerState;
-import com.cloud.vm.VirtualMachine.State;
-import com.cloud.hypervisor.ovm3.object.Common;
-import com.cloud.hypervisor.ovm3.object.Connection;
-import com.cloud.hypervisor.ovm3.object.Linux;
-import com.cloud.hypervisor.ovm3.object.Network;
-import com.cloud.hypervisor.ovm3.object.OvmObject;
-import com.cloud.hypervisor.ovm3.object.Pool;
-import com.cloud.hypervisor.ovm3.object.PoolOCFS2;
-import com.cloud.hypervisor.ovm3.object.Repository;
-import com.cloud.hypervisor.ovm3.object.StoragePlugin;
-import com.cloud.hypervisor.ovm3.object.Xen;
-import com.cloud.hypervisor.ovm3.object.CloudStackPlugin;
-
-import org.apache.cloudstack.storage.command.CopyCommand;
-import org.apache.cloudstack.storage.command.DeleteCommand;
-import org.apache.cloudstack.storage.command.CopyCmdAnswer;
-import org.apache.cloudstack.storage.command.CreateObjectAnswer;
-import org.apache.cloudstack.storage.command.CreateObjectCommand;
-
-import com.cloud.storage.resource.StorageProcessor;
-
-import org.apache.cloudstack.storage.command.ForgetObjectCmd;
-import org.apache.cloudstack.storage.command.IntroduceObjectCmd;
-import org.apache.cloudstack.storage.command.DettachCommand;
-// import org.apache.cloudstack.storage.command.DettachAnswer;
-import org.apache.cloudstack.storage.command.AttachCommand;
-
-
-
-// import org.apache.cloudstack.storage.command.AttachAnswer;
-import com.cloud.storage.Storage.ImageFormat;
-/* do we need this ? */
-import com.cloud.utils.db.GlobalLock;
-import com.cloud.resource.ResourceManager;
-import com.cloud.utils.script.Script;
-
-import org.apache.commons.io.FileUtils;
-
-import javax.inject.Inject;
-
-/* TODO: Seperate these out */
-public class Ovm3ResourceBase implements ServerResource, HypervisorResource,
-        StorageProcessor {
-    private static final Logger s_logger = Logger
-            .getLogger(Ovm3ResourceBase.class);
-    private Connection c;
-    private Connection m;
-    private String _name;
-    private String _ip;
-    Long _zoneId;
-    Long _podId;
-    Long _poolId;
-    Long _clusterId;
-    String _host;
-    String _guid;
-    String _username = "root";
-    String _password;
-    String _agentUserName = "oracle";
-    String _agentPassword;
-    Integer _agentPort = 8899;
-    Boolean _agentSsl = false;
-    String _ovmSshKey = "id_rsa.cloud";
-    String _masterUuid = "d1a749d4295041fb99854f52ea4dea97";
-    Boolean _isMaster = false;
-    Boolean _hasMaster = false;
-    Boolean _ovm3pool = false;
-    Boolean _ovm3cluster = false;
-    String _ovm3vip = "";
-    protected boolean _checkHvm = false;
-    /* _clusterDetailsDao.findDetail(clusterId, getVagKey(storagePoolId)); */
-    String _privateNetworkName;
-    String _publicNetworkName;
-    String _guestNetworkName;
-    String _storageNetworkName;
-    String _controlNetworkName = "control0";
-    String _controlNetworkIp = "169.254.0.1";
-    // String _controlNetworkMask = "255.255.0.0";
-    boolean _canBridgeFirewall = false;
-    String _ovmRepo = "/OVS/Repositories";
-    String _ovmSec = "/nfsmnt";
-    OvmObject _ovmObject = new OvmObject();
-    static boolean s_isHeartBeat = false;
-    protected final int DefaultDomRSshPort = 3922;
-    String DefaultDomRPath = "/opt/cloud/bin/";
-    private Map<String, Network.Interface> _interfaces = null;
-    /* switch to concurrenthasmaps all over the place ? */
-    private final ConcurrentHashMap<String,
-        Map<String, String>> _vmStats =
-            new ConcurrentHashMap<String,
-                Map<String, String>>();
-
-    // TODO vmsync {
-    /* This is replaced by the vmList in getall VMs, and operate on that */
-    // protected HashMap<String, State> _vms = new HashMap<String, State>(250);
-    protected Map<String, Xen.Vm> _vms = new HashMap<String, Xen.Vm>();
-    protected Map<String, State> _vmstates = new HashMap<String, State>();
-
-    static HashMap<String, State> s_stateMaps;
-    static {
-        s_stateMaps = new HashMap<String, State>();
-        s_stateMaps.put("Stopping", State.Stopping);
-        s_stateMaps.put("Running", State.Running);
-        s_stateMaps.put("Stopped", State.Stopped);
-        s_stateMaps.put("Error", State.Error);
-        s_stateMaps.put("Suspended", State.Running);
-        s_stateMaps.put("Paused", State.Running);
-        s_stateMaps.put("Migrating", State.Migrating);
-    }
-
-    static HashMap<String, PowerState> s_powerStateMaps;
-    static {
-        s_powerStateMaps = new HashMap<String, PowerState>();
-        s_powerStateMaps.put("Stopping", PowerState.PowerOn);
-        s_powerStateMaps.put("Running", PowerState.PowerOn);
-        s_powerStateMaps.put("Stopped", PowerState.PowerOff);
-        s_powerStateMaps.put("Error", PowerState.PowerUnknown);
-        s_powerStateMaps.put("Suspended", PowerState.PowerOn);
-        s_powerStateMaps.put("Paused", PowerState.PowerOn);
-        /* unknown ? */
-        s_powerStateMaps.put("Migrating", PowerState.PowerOn);
-    }
-
-    @Inject
-    PrimaryDataStoreDao _storagePoolDao;
-    @Inject
-    HostDao _hostDao;
-    @Inject
-    ResourceManager _resourceMgr;
-
-    GlobalLock _exclusiveOpLock = GlobalLock.getInternLock("ovm3.exclusive.op");
-
-    /* return params we want to add, damnit */
-    @Override
-    public boolean configure(String name, Map<String, Object> params)
-            throws ConfigurationException {
-        _name = name;
-        s_logger.debug("configure " + name + " with params: " + params);
-        /* do we have enough ? */
-        try {
-            _zoneId = Long.parseLong((String) params.get("zone"));
-            _podId = Long.parseLong((String) params.get("pod"));
-            _clusterId = Long.parseLong((String) params.get("cluster"));
-            _ovm3vip = String.valueOf(params.get("ovm3vip"));
-            _ovm3pool = BooleanUtils.toBoolean((String) params.get("ovm3pool"));
-            _ovm3cluster = BooleanUtils.toBoolean((String) params
-                    .get("ovm3cluster"));
-            _host = (String) params.get("host");
-            _ip = (String) params.get("ip");
-            _username = (String) params.get("username");
-            _password = (String) params.get("password");
-            _guid = (String) params.get("guid");
-            _agentUserName = (String) params.get("agentusername");
-            _agentPassword = (String) params.get("agentpassword");
-            _privateNetworkName = (String) params.get("private.network.device");
-            _publicNetworkName = (String) params.get("public.network.device");
-            _guestNetworkName = (String) params.get("guest.network.device");
-            _storageNetworkName = (String) params.get("storage.network.device");
-
-            if (params.get("agentport") != null)
-                _agentPort = Integer.parseInt((String) params.get("agentport"));
-
-            // Add later
-            // _agentSsl = (Boolean)params.get("agentssl");
-        } catch (Exception e) {
-            s_logger.debug("Configure " + _host + " failed", e);
-            throw new ConfigurationException("Configure " + _host + " failed, "
-                    + e.toString());
-        }
-
-        if (_podId == null) {
-            String msg = "Unable to get the pod";
-            s_logger.debug(msg);
-            throw new ConfigurationException(msg);
-        }
-
-        if (_host == null) {
-            String msg = "Unable to get the host";
-            s_logger.debug(msg);
-            throw new ConfigurationException(msg);
-        }
-
-        if (_username == null) {
-            String msg = "Unable to get the username";
-            s_logger.debug(msg);
-            throw new ConfigurationException(msg);
-        }
-
-        if (_password == null) {
-            String msg = "Unable to get the password";
-            s_logger.debug(msg);
-            throw new ConfigurationException(msg);
-        }
-
-        if (_guid == null) {
-            String msg = "Unable to get the guid";
-            s_logger.debug(msg);
-            throw new ConfigurationException(msg);
-        }
-
-        if (_agentUserName == null) {
-            String msg = "Unable to get the agent username";
-            s_logger.debug(msg);
-            throw new ConfigurationException(msg);
-        }
-
-        if (_agentPassword == null) {
-            String msg = "Unable to get the agent password";
-            s_logger.debug(msg);
-            throw new ConfigurationException(msg);
-        }
-
-        if (_agentPort == null) {
-            String msg = "Unable to get the agent port";
-            s_logger.debug(msg);
-            throw new ConfigurationException(msg);
-        }
-
-        /* TODO: Needs to be relocated */
-        if (_ovm3vip.equals("")) {
-            s_logger.debug("No VIP, Setting ovm3pool and ovm3cluster to false");
-            this._ovm3pool = false;
-            this._ovm3cluster = false;
-            this._ovm3vip = "";
-        }
-        /* if we're a cluster we have to be a pool ? */
-        if (_ovm3cluster) {
-            this._ovm3pool = true;
-        }
-
-        /* check if we're master or not and if we can connect */
-        try {
-            try {
-                c = new Connection(_host, _agentPort, _agentUserName,
-                        _agentPassword);
-            } catch (XmlRpcException ex) {
-                String msg = "Unable to connect to " + _host;
-                s_logger.warn(msg + ": " + ex.getMessage());
-                throw new Exception(msg, ex);
-            }
-            this._isMaster = masterCheck();
-        } catch (Exception e) {
-            String msg = "Base checks failed for " + _host;
-            s_logger.debug(msg, e);
-            throw new ConfigurationException(msg);
-        }
-        /* setup ovm3 plugin */
-        try {
-            installOvsPlugin();
-            CloudStackPlugin cSp = new CloudStackPlugin(c);
-            cSp.ovsUploadSshKey(this._ovmSshKey,
-                    FileUtils.readFileToString(getSystemVMKeyFile()));
-        } catch (Exception e) {
-            String msg = "Failed to setup server: " + _host;
-            s_logger.error(msg + ": " + e.getMessage());
-            throw new ConfigurationException(msg + ", " + e);
-        }
-
-        try {
-            try {
-                /*
-                 * TODO: setup meta tags for the management interface (probably
-                 * required with multiple interfaces)?
-                 */
-                Network net = new Network(c);
-                _interfaces = net.getInterfaceList();
-                s_logger.debug("all interfaces: " + _interfaces);
-                if (_controlNetworkName != null
-                        && !_interfaces.containsKey(_controlNetworkName)) {
-                    /*
-                     * TODO: find a more elegant way to do this
-                     * for now we need the route del and ifconfig
-                     * as loopback bridges have arp disabled by default,
-                     * and zeroconf configures a route on the main bridge...
-                     */
-                    try {
-                        net.startOvsLocalConfig(_controlNetworkName);
-                    } catch (Exception e) {
-                        s_logger.debug("Unable to configure"
-                                + _controlNetworkName + ":" + e.getMessage());
-                    }
-                    /* ovs replies too "fast" so the bridge can be "busy" */
-                    while (!_interfaces.containsKey(_controlNetworkName)) {
-                        s_logger.debug("waiting for " + _controlNetworkName);
-                        _interfaces = net.getInterfaceList();
-                         Thread.sleep(1 * 1000);
-                    }
-                }
-                /* The bridge is remembered upon reboot, but not the IP */
-                net.ovsIpConfig(_controlNetworkName,
-                        "static",
-                        _controlNetworkIp,
-                        "255.255.0.0");
-                CloudStackPlugin cSp = new CloudStackPlugin(c);
-                cSp.ovsControlInterface(_controlNetworkName,
-                        _controlNetworkIp + "/16");
-
-                // Missing netM = new Missing(c);
-                /* build ovs_if_meta in Net based on the following */
-                if (_privateNetworkName != null
-                        && net.getBridgeByName(_privateNetworkName).getName() == null) {
-                    throw new ConfigurationException(
-                            "Cannot find private bridge "
-                                    + _privateNetworkName
-                                    + " on host "
-                                    + _host
-                                    + " - "
-                                    + net.getBridgeByName(_privateNetworkName)
-                                            .getName());
-                }
-                if (_publicNetworkName != null
-                        && net.getBridgeByName(_publicNetworkName).getName() == null) {
-                    throw new ConfigurationException(
-                            "Cannot find private bridge "
-                                    + _publicNetworkName
-                                    + " on host "
-                                    + _host
-                                    + " - "
-                                    + net.getBridgeByName(_publicNetworkName)
-                                            .getName());
-                }
-                if (_guestNetworkName != null
-                        && net.getBridgeByName(_guestNetworkName).getName() == null) {
-                    throw new ConfigurationException(
-                            "Cannot find private bridge "
-                                    + _guestNetworkName
-                                    + " on host "
-                                    + _host
-                                    + " - "
-                                    + net.getBridgeByName(_guestNetworkName)
-                                            .getName());
-                }
-                if (_storageNetworkName != null
-                        && net.getBridgeByName(_storageNetworkName).getName() == null) {
-                    throw new ConfigurationException(
-                            "Cannot find private bridge "
-                                    + _storageNetworkName
-                                    + " on host "
-                                    + _host
-                                    + " - "
-                                    + net.getBridgeByName(_storageNetworkName)
-                                            .getName());
-                }
-            } catch (Exception e) {
-                s_logger.debug("Get bridges failed on host " + _host + ", ", e);
-                throw new ConfigurationException("Cannot get bridges on host "
-                        + _host + ", " + e);
-            }
-            try {
-                prepareForPool();
-            } catch (Exception e) {
-                throw new ConfigurationException("Failed to prepare for pool "
-                        + _host + ", " + e);
-            }
-
-            /*
-             * set to false so each time ModifyStoragePoolCommand will re-setup
-             * heartbeat
-             */
-            /*
-             * only required if we do cluster and then o2cb will take care of it
-             * s_isHeartBeat = false;
-             */
-
-            /*
-             * - uses iptables in XenServer, but not agent accessible for agent
-             * *should make module*
-             */
-            try {
-                _canBridgeFirewall = canBridgeFirewall();
-            } catch (XmlRpcException e) {
-                s_logger.error("Failed to detect whether the host supports security groups.",
-                        e);
-                _canBridgeFirewall = false;
-            }
-
-            s_logger.debug(_canBridgeFirewall ? "OVM3 host supports security groups."
-                    : "OVM3 host doesn't support security groups.");
-            /*
-             * } catch (XmlRpcException e) {
-             * String msg = "XML RPC Exception, unable to setup host: " + _host
-             * + " " + e;
-             * s_logger.debug(msg);
-             * throw new ConfigurationException(msg);
-             */
-        } catch (Exception e) {
-            String msg = "Generic Exception, failed to setup host: " + _host;
-            s_logger.debug(msg + ": " + e.getMessage());
-            throw new ConfigurationException(msg + ":" + e.getMessage());
-        } /*
-           * catch (IOException e) { s_logger.debug("Failed to setup host " +
-           * _host, e); throw new
-           * ConfigurationException("Unable to setup host"); }
-           */
-        return true;
-    }
-
-    @Override
-    public boolean start() {
-        return true;
-    }
-
-    @Override
-    public boolean stop() {
-        return true;
-    }
-
-    @Override
-    public String getName() {
-        return _name;
-    }
-
-    @Override
-    public Type getType() {
-        return Type.Routing;
-    }
-
-    protected void fillHostInfo(StartupRoutingCommand cmd) {
-        try {
-            /* get data we need from parts */
-            Linux host = new Linux(c);
-            if (!host.getOvmVersion().startsWith("3.2.")) {
-                throw new CloudRuntimeException(
-                        "OVM 3.2.X is only supported, not "
-                                + host.getOvmVersion());
-            }
-            Xen vms = new Xen(c);
-            vms.listVms();
-            Xen.Vm dom0 = vms.getRunningVmConfig("Domain-0");
-
-            cmd.setName(host.getHostName());
-            cmd.setSpeed(host.getCpuKhz());
-            cmd.setCpus(host.getTotalThreads());
-            cmd.setCpuSockets(host.getCpuSockets());
-            cmd.setMemory(host.getMemory().longValue());
-            /*
-             * TODO: Convert Bigint to long in Linux
-             */
-            BigInteger totalmem = BigInteger.valueOf(host.getMemory()
-                    .longValue());
-            BigInteger freemem = BigInteger.valueOf(host.getFreeMemory()
-                    .longValue());
-            cmd.setDom0MinMemory(totalmem.subtract(freemem).longValue());
-            // setPoolSync and setCaps.
-            cmd.setGuid(_guid);
-            cmd.setDataCenter(_zoneId.toString());
-            cmd.setPod(_podId.toString());
-            // also set uuid for ownership, or else pooling/clustering will not
-            // work
-            // cmd.setOwner(host.getManagerUuid());
-            cmd.setCluster(_clusterId.toString());
-            cmd.setHypervisorVersion(host.getOvmVersion());
-            cmd.setVersion(host.getAgentVersion());
-            cmd.setHypervisorType(HypervisorType.Ovm3);
-            /* is this true ? */
-            cmd.setCaps(host.getCapabilities());
-            // TODO: Control ip, for now cheat ?
-            cmd.setPrivateIpAddress(_ip);
-            cmd.setStorageIpAddress(_ip);
-            cmd.setHostVmStateReport(HostVmStateReport());
-
-            Network net = new Network(c);
-            /* more detail -- fix -- and shouldn't matter */
-            /* should this be the bond before the bridge ?*/
-            String defaultBridge = net.getBridgeByIp(_ip).getName();
-            if (defaultBridge == null) {
-                throw new CloudRuntimeException(
-                        "Unable to obtain valid bridge with " + _ip);
-            }
-
-            /* TODO: cleanup network section, this is not right */
-            if (_publicNetworkName == null) {
-                _publicNetworkName = defaultBridge;
-            }
-            if (_privateNetworkName == null) {
-                _privateNetworkName = _publicNetworkName;
-            }
-            if (_guestNetworkName == null) {
-                _guestNetworkName = _publicNetworkName;
-            }
-            /*
-             * if (_storageNetworkName == null) {
-             * _storageNetworkName = _privateNetworkName;
-             * }
-             */
-            Map<String, String> d = cmd.getHostDetails();
-            d.put("public.network.device", _publicNetworkName);
-            if (_privateNetworkName != null)
-                d.put("private.network.device", _privateNetworkName);
-            if (_guestNetworkName != null)
-                d.put("guest.network.device", _guestNetworkName);
-            if (_storageNetworkName != null)
-                d.put("storage.network.device", _storageNetworkName);
-            d.put("ismaster", this._isMaster.toString());
-            cmd.setHostDetails(d);
-            s_logger.debug("Add an Ovm3 host " + _name + ":"
-                    + cmd.getHostDetails());
-        } catch (XmlRpcException e) {
-            s_logger.debug("XML RPC Exception" + e.getMessage(), e);
-            throw new CloudRuntimeException("XML RPC Exception"
-                    + e.getMessage(), e);
-        } catch (Exception e) {
-            s_logger.debug("Exception " + e.getMessage(), e);
-            throw new CloudRuntimeException("Exception" + e.getMessage(), e);
-        }
-    }
-
-    /*
-     * plugs the ovm module into the ovs-agent
-     */
-    protected void installOvsPlugin() throws IOException {
-        /* ssh-copy-id anyone ? */
-        try {
-            com.trilead.ssh2.Connection sshConnection =
-                    SSHCmdHelper.acquireAuthorizedConnection(_ip,
-                            _username,
-                            _password);
-            if (sshConnection == null) {
-                throw new ConfigurationException(String.format("Unable to "
-                        + "connect to server(IP=%1$s, username=%2$s, "
-                        + "password=%3$s", _ip, _username, _password));
-            }
-            SCPClient scp = new SCPClient(sshConnection);
-            String userDataScript = "scripts/vm/hypervisor/ovm3/cloudstack.py";
-            String userDataScriptPath = Script.findScript("", userDataScript);
-            if (userDataScriptPath == null) {
-                throw new ConfigurationException("Can not find "
-                        + userDataScript);
-            }
-            scp.put(userDataScriptPath, "", "0755");
-            String prepareCmd = String.format("./cloudstack.py "
-                    + "--ssl=" + this._agentSsl + " "
-                    + "--port=" + this._agentPort);
-            if (!SSHCmdHelper.sshExecuteCmd(sshConnection, prepareCmd)) {
-                throw new ConfigurationException("Module insertion at "
-                        + _host + " failed");
-            }
-        } catch (Exception es) {
-            s_logger.error("Unexpected exception ", es);
-            String msg = "Unable to install module in agent";
-            s_logger.error(msg);
-            throw new CloudRuntimeException(msg);
-        }
-    }
-
-    /* startup */
-    @Override
-    public StartupCommand[] initialize() {
-        s_logger.debug("Ovm3 resource intializing");
-        try {
-            StartupRoutingCommand srCmd = new StartupRoutingCommand();
-
-            StartupStorageCommand ssCmd = new StartupStorageCommand();
-            fillHostInfo(srCmd);
-            String pool = srCmd.getPool();
-            s_logger.debug("Ovm3 pool " + ssCmd + " " + srCmd);
-
-            Map<String, State> changes = null;
-            synchronized (_vmstates) {
-                _vmstates.clear();
-                changes = sync();
-            }
-            srCmd.setStateChanges(changes);
-            /* should not force HVM */
-            // cmd.setCaps("hvm");
-            return new StartupCommand[] { srCmd, ssCmd };
-        } catch (Exception e) {
-            s_logger.debug("Ovm3 resource initializes failed", e);
-            return null;
-        }
-    }
-
-    /* See if the agent is still up on the host */
-    @Override
-    public PingCommand getCurrentStatus(long id) {
-        try {
-            /* feels useless somehow */
-            Common test = new Common(c);
-            String ping = "put";
-            String pong = test.echo(ping);
-            if (pong.contains(ping)) {
-                HashMap<String, State> newStates = sync();
-                return new PingRoutingCommand(getType(), id, newStates,
-                        HostVmStateReport());
-            }
-        } catch (XmlRpcException e) {
-            s_logger.debug("Check agent status failed", e);
-            return null;
-        } catch (Exception e) {
-            s_logger.debug("Check agent status failed", e);
-            return null;
-        }
-        return null;
-    }
-
-    /* Check if the host is in ready state for CS */
-    protected ReadyAnswer execute(ReadyCommand cmd) {
-        try {
-            Linux host = new Linux(c);
-            Pool pool = new Pool(c);
-
-            /* only interesting when doing cluster */
-            if (!host.getIsMaster() && _ovm3cluster) {
-                if (pool.getPoolMasterVip().equalsIgnoreCase(_ip)) {
-                    /* check pool state here */
-                    return new ReadyAnswer(cmd);
-                } else {
-                    s_logger.debug("Master IP changes to "
-                            + pool.getPoolMasterVip() + ", it should be " + _ip);
-                    return new ReadyAnswer(cmd, "I am not the master server");
-                }
-            } else if (host.getIsMaster()) {
-                s_logger.debug("Master, not clustered " + _host);
-                return new ReadyAnswer(cmd);
-            } else {
-                s_logger.debug("No master, not clustered " + _host);
-                return new ReadyAnswer(cmd);
-            }
-        } catch (XmlRpcException e) {
-            s_logger.debug("XML RPC Exception" + e.getMessage(), e);
-            throw new CloudRuntimeException("XML RPC Exception"
-                    + e.getMessage(), e);
-        } catch (Exception e) {
-            s_logger.debug("Exception" + e.getMessage(), e);
-            throw new CloudRuntimeException("Exception" + e.getMessage(), e);
-        }
-
-    }
-
-    /*
-     * Primary storage, will throw an error if ownership does not match!
-     * Pooling is a part of this, for now
-     */
-    protected boolean createRepo(StorageFilerTO cmd) throws XmlRpcException {
-        String basePath = this._ovmRepo;
-        Repository repo = new Repository(c);
-        String primUuid = repo.deDash(cmd.getUuid());
-        String ovsRepo = basePath + "/" + primUuid;
-        /* should add port ? */
-        String mountPoint = String.format("%1$s:%2$s",
-                cmd.getHost(),
-                cmd.getPath());
-
-        String msg;
-        if (cmd.getType() == StoragePoolType.NetworkFilesystem) {
-            /* base repo first */
-
-            repo.mountRepoFs(mountPoint, ovsRepo);
-            s_logger.debug("NFS repository " + mountPoint + " on " + ovsRepo
-                    + " requested for " + _host);
-            try {
-                repo.addRepo(mountPoint, ovsRepo);
-            } catch (Exception e) {
-                s_logger.debug("NFS repository " + mountPoint + " on "
-                        + ovsRepo + " not found creating!");
-                try {
-                    repo.createRepo(mountPoint,
-                            ovsRepo,
-                            primUuid,
-                            "OVS Reposutory");
-                } catch (Exception es) {
-                    msg = "NFS repository " + mountPoint + " on "
-                            + ovsRepo + " create failed!";
-                    s_logger.debug(msg);
-                    throw new CloudRuntimeException(
-                            msg + " " + es.getMessage(), es);
-                }
-            }
-            /* add base pooling first */
-            if (this._ovm3pool) {
-                try {
-                    msg = "Configuring host for pool";
-                    s_logger.debug(msg);
-                    setupPool(cmd);
-                    msg = "Configured host for pool";
-                    /* add clustering after pooling */
-                    if (this._ovm3cluster) {
-                        msg = "Configuring host for cluster";
-                        s_logger.debug(msg);
-                        /* setup cluster */
-                        /*
-                         * From cluster.java
-                         * configure_server_for_cluster(cluster conf, fs, mount,
-                         * fsuuid, poolfsbaseuuid)
-                         */
-                        /* create_cluster(poolfsuuid,) */
-                        msg = "Configuring host for cluster";
-                    }
-                } catch (Exception e) {
-                    msg = "Unable to setup pool on " + ovsRepo;
-                    s_logger.debug(msg);
-                    throw new CloudRuntimeException(msg + " " + e.getMessage(), e);
-                }
-            } else {
-                msg = "no way dude I can't stand for this";
-                s_logger.debug(msg);
-            }
-            /*
-             * this is to create the .generic_fs_stamp else we're not allowed
-             * to create any data\disks on this thing
-             */
-            try {
-                URI uri = new URI(cmd.getType() + "://" + cmd.getHost() + ":"
-                        + +cmd.getPort() + cmd.getPath() + "/VirtualMachines");
-                this.setupNfsStorage(uri, cmd.getUuid());
-            } catch (Exception e) {
-                msg = "NFS mount " + mountPoint + " on " + _ovmSec + "/"
-                        + cmd.getUuid() + " create failed!";
-                s_logger.debug(msg);
-                throw new CloudRuntimeException(msg + " " + e.getMessage(), e);
-            }
-        } else {
-            msg = "NFS repository " + mountPoint + " on " + ovsRepo
-                    + " create failed, was type " + cmd.getType();
-            s_logger.debug(msg);
-            return false;
-        }
-
-        try {
-            /* systemvm iso is imported here */
-            prepareSecondaryStorageStore(ovsRepo);
-        } catch (Exception e) {
-            msg = "systemvm.iso copy failed to " + ovsRepo;
-            s_logger.debug(msg);
-            return false;
-        }
-        return true;
-    }
-
-    /*  */
-    public void prepareSecondaryStorageStore(String storageUrl) {
-        String mountPoint = storageUrl;
-
-        GlobalLock lock = GlobalLock.getInternLock("prepare.systemvm");
-        try {
-            /* double check */
-            if (this._hasMaster && this._ovm3pool) {
-                s_logger.debug("Skip systemvm iso copy, leave it to the master");
-                return;
-            }
-            if (lock.lock(3600)) {
-                try {
-                    File srcIso = getSystemVMPatchIsoFile();
-                    String destPath = mountPoint + "/ISOs/";
-                    String repoPath[] = mountPoint.split(File.separator);
-                    String destIso = destPath + "/"
-                            + getSystemVMIsoFileNameOnDatastore();
-                    String result = "";
-                    try {
-                        StoragePlugin sp = new StoragePlugin(c);
-                        // sp.storagePluginGetFileInfo(repoPath[repoPath.length],
-                        // destIso);
-                        if (sp.getFileSize() > 0) {
-                            s_logger.info(" System VM patch ISO file already exists: "
-                                + srcIso.getAbsolutePath().toString()
-                                + ", destination: " + destIso);
-                        }
-                    } catch (Exception e) {
-                        /*
-                         * Cloudstack already does this at boot time:
-                         * s_logger.info(
-                         * "Inject SSH key pairs before copying systemvm.iso into secondary storage"
-                         * );
-                         */
-                        s_logger.info("Copy System VM patch ISO file to secondary storage. source ISO: "
-                                + srcIso.getAbsolutePath()
-                                + ", destination: "
-                                + destIso);
-                        try {
-                            /*
-                             * should actualy come from importIso in
-                             * Storageplugin, so craft a url that can be used
-                             * for that.
-                             */
-                            SshHelper.scpTo(this._host,
-                                    22,
-                                    this._username,
-                                    null,
-                                    this._password,
-                                    destPath,
-                                    srcIso.getAbsolutePath().toString(),
-                                    "0644");
-                        } catch (Exception es) {
-                            s_logger.error("Unexpected exception ", es);
-                            String msg = "Unable to copy systemvm ISO on secondary storage. src location: "
-                                    + srcIso.toString()
-                                    + ", dest location: "
-                                    + destIso;
-                            s_logger.error(msg);
-                            throw new CloudRuntimeException(msg);
-                        }
-                    }
-                } finally {
-                    lock.unlock();
-                }
-            }
-        } finally {
-            lock.releaseRef();
-        }
-    }
-
-    /* stolen from vmware impl */
-    public String getSystemVMIsoFileNameOnDatastore() {
-        String version = this.getClass().getPackage()
-                .getImplementationVersion();
-        String fileName = "systemvm-" + version + ".iso";
-        return fileName.replace(':', '-');
-    }
-
-    /* stolen from vmware impl */
-    private File getSystemVMPatchIsoFile() {
-        // locate systemvm.iso
-        String svmName = getSystemVMIsoFileNameOnDatastore();
-        URL url = this.getClass().getClassLoader()
-                .getResource("vms/" + svmName);
-        s_logger.debug(url);
-        File isoFile = null;
-        if (url != null) {
-            isoFile = new File(url.getPath());
-        }
-        if (isoFile == null || !isoFile.exists()) {
-            isoFile = new File("/usr/share/cloudstack-common/vms/" + svmName);
-        }
-
-        assert (isoFile != null);
-        if (!isoFile.exists()) {
-            s_logger.error("Unable to locate " + svmName + " in your setup at "
-                    + isoFile.toString());
-        }
-        return isoFile;
-    }
-
-    /* get the key */
-    public File getSystemVMKeyFile() {
-        URL url = this.getClass().getClassLoader()
-                .getResource("scripts/vm/systemvm/" + this._ovmSshKey);
-        File keyFile = null;
-        if (url != null) {
-            keyFile = new File(url.getPath());
-        }
-        if (keyFile == null || !keyFile.exists()) {
-            keyFile = new File(
-                    "/usr/share/cloudstack-common/scripts/vm/systemvm/"
-                            + _ovmSshKey);
-        }
-        assert (keyFile != null);
-        if (!keyFile.exists()) {
-            s_logger.error("Unable to locate " + _ovmSshKey
-                    + " in your setup at " + keyFile.toString());
-        }
-        return keyFile;
-    }
-
-    /*
-     * TODO: local OCFS2? or iSCSI OCFS2
-     */
-    protected Boolean createOCFS2Sr(StorageFilerTO pool) throws XmlRpcException {
-        /*
-         * Ovm3StoragePool.Details d = new Ovm3StoragePool.Details(); d.path =
-         * pool.getPath(); d.type = Ovm3StoragePool.OCFS2; d.uuid =
-         * pool.getUuid(); Ovm3StoragePool.create(_conn, d);
-         * s_logger.debug(String.format("Created SR (mount point:%1$s)",
-         * d.path));
-         */
-        s_logger.debug("OCFS2 Not implemented yet");
-        return false;
-    }
-
-    /* TODO: heartbeats are done by the oracle cluster when clustering */
-    private void setupHeartBeat(String poolUuid) {
-        try {
-            if (!s_isHeartBeat) {
-                // Ovm3Host.setupHeartBeat(_conn, poolUuid, _ip);
-                s_isHeartBeat = true;
-            }
-        } catch (Exception e) {
-            s_logger.debug("setup heart beat for " + _host + " failed", e);
-            s_isHeartBeat = false;
-        }
-    }
-
-    /* Setup a storage pool and also get the size */
-    protected Answer execute(ModifyStoragePoolCommand cmd) {
-        StorageFilerTO pool = cmd.getPool();
-        s_logger.debug("modifying pool " + pool);
-        try {
-            if (pool.getType() == StoragePoolType.NetworkFilesystem) {
-                /* this should actually not be here */
-                createRepo(pool);
-            } else if (pool.getType() == StoragePoolType.OCFS2) {
-                createOCFS2Sr(pool);
-            } else {
-                return new Answer(cmd, false, "The pool type: "
-                        + pool.getType().name() + " is not supported.");
-            }
-
-            if (this._ovm3cluster) {
-                // setupHeartBeat(pool.getUuid());
-            }
-            /* TODO: needs to be in network fs above */
-            StoragePlugin store = new StoragePlugin(c);
-            String propUuid = store.deDash(pool.getUuid());
-            String mntUuid = pool.getUuid();
-            String nfsHost = pool.getHost();
-            String nfsPath = pool.getPath();
-            store.setUuid(propUuid);
-            store.setSsUuid(propUuid);
-            store.setMntUuid(mntUuid);
-            store.setFsHost(nfsHost);
-            store.setFsSourcePath(nfsHost + ":" + nfsPath);
-            store.storagePluginGetFileSystemInfo();
-
-            Map<String, TemplateProp> tInfo = new HashMap<String, TemplateProp>();
-            ModifyStoragePoolAnswer answer = new ModifyStoragePoolAnswer(cmd,
-                    Long.parseLong(store.getTotalSize()), Long.parseLong(store
-                            .getFreeSize()), tInfo);
-            return answer;
-        } catch (Exception e) {
-            s_logger.debug("ModifyStoragePoolCommand failed", e);
-            return new Answer(cmd, false, e.getMessage());
-        }
-    }
-
-    /* TODO: add iSCSI */
-    protected Answer execute(CreateStoragePoolCommand cmd) {
-        StorageFilerTO pool = cmd.getPool();
-        s_logger.debug("creating pool " + pool);
-        try {
-            if (pool.getType() == StoragePoolType.NetworkFilesystem) {
-                createRepo(pool);
-            } else if (pool.getType() == StoragePoolType.IscsiLUN) {
-                return new Answer(cmd, false,
-                        "iSCSI is unsupported at the moment");
-                // getIscsiSR(conn, pool.getUuid(), pool.getHost(),
-                // pool.getPath(), null, null, false);
-            } else if (pool.getType() == StoragePoolType.OCFS2) {
-                return new Answer(cmd, false,
-                        "OCFS2 is unsupported at the moment");
-            } else if (pool.getType() == StoragePoolType.PreSetup) {
-                s_logger.warn("pre setup for pool " + pool);
-            } else {
-                return new Answer(cmd, false, "The pool type: "
-                        + pool.getType().name() + " is not supported.");
-            }
-        } catch (Exception e) {
-            String msg = "Catch Exception " + e.getClass().getName()
-                    + ", create StoragePool failed due to " + e.toString()
-                    + " on host:" + _host + " pool: " + pool.getHost()
-                    + pool.getPath();
-            s_logger.warn(msg, e);
-            return new Answer(cmd, false, msg);
-        }
-        return new Answer(cmd, true, "success");
-    }
-
-    /*
-     * Download some primary storage into the repository, we need the repoid to
-     * do that, but also have a uuid for the disk...
-     * TODO: check disk
-     * TODO: looks like we don't need this for now! (dead code)
-     */
-    protected PrimaryStorageDownloadAnswer execute(
-            final PrimaryStorageDownloadCommand cmd) {
-        try {
-            Repository repo = new Repository(c);
-            String tmplturl = cmd.getUrl();
-            String poolName = cmd.getPoolUuid();
-            String image = repo.deDash(repo.newUuid()) + ".raw";
-
-            /* url to download from, image name, and repo to copy it to */
-            repo.importVirtualDisk(tmplturl, image, poolName);
-
-            /* TODO: return uuid and size */
-            return new PrimaryStorageDownloadAnswer(image);
-        } catch (Exception e) {
-            s_logger.debug("PrimaryStorageDownloadCommand failed", e);
-            return new PrimaryStorageDownloadAnswer(e.getMessage());
-        }
-    }
-
-    /*
-     * TODO: Split out in Sec to prim and prim to prim and types ?
-     * Storage mount also goes in here for secstorage
-     */
-    protected final Answer execute(final CopyCommand cmd) {
-        DataTO srcData = cmd.getSrcTO();
-        DataStoreTO srcStore = srcData.getDataStore();
-        DataTO destData = cmd.getDestTO();
-        DataStoreTO destStore = destData.getDataStore();
-
-        try {
-            /* target and source are NFS and TEMPLATE */
-            if ((srcStore instanceof NfsTO)
-                    && (srcData.getObjectType() == DataObjectType.TEMPLATE)
-                    && (destData.getObjectType() == DataObjectType.TEMPLATE)) {
-                NfsTO srcImageStore = (NfsTO) srcStore;
-                TemplateObjectTO srcTemplate = (TemplateObjectTO) srcData;
-                String storeUrl = srcImageStore.getUrl();
-
-                URI uri = new URI(storeUrl);
-                String secPoolUuid = setupSecondaryStorage(storeUrl);
-                String primaryPoolUuid = destData.getDataStore().getUuid();
-                String destPath = this._ovmRepo + "/"
-                        + _ovmObject.deDash(primaryPoolUuid) + "/"
-                        + "Templates";
-                String sourcePath = this._ovmSec + "/" + secPoolUuid;
-
-                Linux host = new Linux(c);
-                String destUuid = srcTemplate.getUuid();
-                /*
-                 * TODO: add dynamic formats (tolower), it also supports VHD and
-                 * QCOW2, although Ovm3.2 does not have tapdisk2 anymore so we
-                 * can forget about that.
-                 */
-                /* TODO: add checksumming */
-                String srcFile = sourcePath + "/" + srcData.getPath();
-                if (srcData.getPath().endsWith("/")) {
-                    srcFile = sourcePath + "/" + srcData.getPath() + "/"
-                            + destUuid + ".raw";
-                }
-                String destFile = destPath + "/" + destUuid + ".raw";
-                s_logger.debug("CopyFrom: " + srcData.getObjectType() + ","
-                        + srcFile + " to " + destData.getObjectType() + ","
-                        + destFile);
-                host.copyFile(srcFile, destFile);
-
-                TemplateObjectTO newVol = new TemplateObjectTO();
-                newVol.setUuid(destUuid);
-                newVol.setPath(destPath);
-                newVol.setFormat(ImageFormat.RAW);
-                return new CopyCmdAnswer(newVol);
-                /* we assume the cache for templates is local */
-            } else if ((srcData.getObjectType() == DataObjectType.TEMPLATE)
-                    && (destData.getObjectType() == DataObjectType.VOLUME)) {
-                if (srcStore.getUrl().equals(destStore.getUrl())) {
-                    TemplateObjectTO srcTemplate = (TemplateObjectTO) srcData;
-                    VolumeObjectTO dstVolume = (VolumeObjectTO) destData;
-
-                    String srcFile = srcTemplate.getPath() + "/"
-                            + srcTemplate.getUuid() + ".raw";
-                    String vDisksPath = srcTemplate.getPath()
-                            .replace("Templates", "VirtualDisks");
-                    String destFile = vDisksPath + "/" + dstVolume.getUuid()
-                            + ".raw";
-
-                    Linux host = new Linux(c);
-                    s_logger.debug("CopyFrom: " + srcData.getObjectType() + ","
-                            + srcFile + " to " + destData.getObjectType() + ","
-                            + destFile);
-                    host.copyFile(srcFile, destFile);
-                    VolumeObjectTO newVol = new VolumeObjectTO();
-                    newVol.setUuid(dstVolume.getUuid());
-                    newVol.setPath(vDisksPath);
-                    newVol.setFormat(ImageFormat.RAW);
-                    return new CopyCmdAnswer(newVol);
-                } else {
-                    s_logger.debug("Primary to Primary doesn't match");
-                }
-            } else {
-                String msg = "Unable to do stuff for " + srcStore.getClass()
-                        + ":" + srcData.getObjectType() + " to "
-                        + destStore.getClass() + ":" + destData.getObjectType();
-                s_logger.debug(msg);
-            }
-        } catch (Exception e) {
-            String msg = "Catch Exception " + e.getClass().getName()
-                    + " for template due to " + e.toString();
-            s_logger.warn(msg, e);
-            return new CopyCmdAnswer(msg);
-        }
-        return new CopyCmdAnswer("not implemented yet");
-    }
-
-    protected Answer execute(DeleteCommand cmd) {
-        DataTO data = cmd.getData();
-        s_logger.debug("Deleting object: " + data.getObjectType());
-        if (data.getObjectType() == DataObjectType.VOLUME) {
-            return deleteVolume(cmd);
-        } else if (data.getObjectType() == DataObjectType.SNAPSHOT) {
-
-        } else if (data.getObjectType() == DataObjectType.TEMPLATE) {
-
-        } else {
-
-        }
-        String msg = "Delete not implemented yet for this object";
-        s_logger.debug(msg);
-        return new Answer(cmd);
-    }
-
-    /* TODO: Create a Disk from a template needs cleaning */
-    protected CreateAnswer execute(CreateCommand cmd) {
-        StorageFilerTO primaryStorage = cmd.getPool();
-        DiskProfile disk = cmd.getDiskCharacteristics();
-
-        /* disk should have a uuid */
-        String fileName = UUID.randomUUID().toString() + ".img";
-        String dst = primaryStorage.getPath() + "/" + primaryStorage.getUuid()
-                + "/" + fileName;
-
-        try {
-            StoragePlugin store = new StoragePlugin(c);
-            store.setUuid(primaryStorage.getUuid());
-            store.setName(primaryStorage.getUserInfo());
-            store.setSsUuid(primaryStorage.getUserInfo());
-            if (cmd.getTemplateUrl() != null) {
-                s_logger.debug("CreateCommand " + cmd.getTemplateUrl() + " "
-                        + dst);
-                Linux host = new Linux(c);
-                host.copyFile(cmd.getTemplateUrl(), dst);
-            } else {
-                /* this is a dup with the createVolume ? */
-                s_logger.debug("CreateCommand " + dst);
-                store.storagePluginCreate(primaryStorage.getUuid(),
-                        primaryStorage.getHost(),
-                        dst,
-                        disk.getSize());
-            }
-
-            store.storagePluginGetFileInfo(dst);
-            VolumeTO volume = new VolumeTO(cmd.getVolumeId(), disk.getType(),
-                    primaryStorage.getType(), primaryStorage.getUuid(),
-                    primaryStorage.getPath(), fileName, store.getFileName(),
-                    store.getFileSize(), null);
-            return new CreateAnswer(cmd, volume);
-        } catch (Exception e) {
-            s_logger.debug("CreateCommand failed", e);
-            return new CreateAnswer(cmd, e.getMessage());
-        }
-    }
-
-    /*
-     * Add rootdisk, datadisk and iso's
-     */
-    protected Boolean createVbds(Xen.Vm vm, VirtualMachineTO spec) {
-        for (DiskTO volume : spec.getDisks()) {
-            try {
-                if (volume.getType() == Volume.Type.ROOT) {
-                    VolumeObjectTO vol = (VolumeObjectTO) volume.getData();
-                    DataStoreTO ds = (DataStoreTO) vol.getDataStore();
-                    String dsk = vol.getPath() + "/" + vol.getUuid() + ".raw";
-                    vm.addRootDisk(dsk);
-                    /* TODO: needs to be replaced by rootdiskuuid? */
-                    vm.setPrimaryPoolUuid(ds.getUuid());
-                    s_logger.debug("Adding root disk: " + dsk);
-                } else if (volume.getType() == Volume.Type.ISO) {
-                    DataTO isoTO = volume.getData();
-                    if (isoTO.getPath() != null) {
-                        TemplateObjectTO template = (TemplateObjectTO) isoTO;
-                        DataStoreTO store = template.getDataStore();
-                        if (!(store instanceof NfsTO)) {
-                            throw new CloudRuntimeException(
-                                    "unsupported protocol");
-                        }
-                        NfsTO nfsStore = (NfsTO) store;
-                        String secPoolUuid = setupSecondaryStorage(nfsStore
-                                .getUrl());
-                        String isoPath = this._ovmSec + File.separator
-                                + secPoolUuid + File.separator
-                                + template.getPath();
-                        // + template.getUuid() + ".iso";
-                        vm.addIso(isoPath);
-                        /* check if secondary storage is mounted */
-                        s_logger.debug("Adding ISO: " + isoPath);
-                    }
-                } else if (volume.getType() == Volume.Type.DATADISK) {
-                    vm.addDataDisk(volume.getData().getPath());
-                    s_logger.debug("Adding data disk: "
-                            + volume.getData().getPath());
-                } else {
-                    throw new CloudRuntimeException("Unknown volume type: "
-                            + volume.getType());
-                }
-            } catch (Exception e) {
-                s_logger.debug("CreateVbds failed", e);
-                throw new CloudRuntimeException("Exception" + e.getMessage(), e);
-            }
-        }
-        return true;
-    }
-
-    /* TODO: iptables/etables logic in the supporting libs ? */
-    protected Boolean createVifs(Xen.Vm vm, VirtualMachineTO spec) {
-        NicTO[] nics = spec.getNics();
-        for (NicTO nic : nics) {
-            if (nic.isSecurityGroupEnabled()) {
-                if (spec.getType().equals(VirtualMachine.Type.User)) {
-                    /*
-                     * defaultNetworkRulesForUserVm(vmName, vmSpec.getId(),
-                     * nic);
-                     */
-                }
-            }
-            try {
-                if (getNetwork(nic) != null)
-                    vm.addVif(nic.getDeviceId(), getNetwork(nic), nic.getMac());
-            } catch (Exception e) {
-                String msg = "Unable to add vif " + nic.getType() + " for "
-                        + spec.getName() + " " + e.getMessage();
-                s_logger.debug(msg);
-                throw new CloudRuntimeException(msg);
-            }
-        }
-        vm.setupVifs();
-        return true;
-    }
-
-    /*
-     * TODO: ovs calls ? depending on the type of network
-     * TODO: get the bridge on a per VM base so we can throw it away?
-     */
-    private String createVlanBridge(String networkName, Integer vlanId)
-            throws XmlRpcException {
-        if (vlanId < 2 || vlanId > 4094) {
-            throw new CloudRuntimeException("Vlan " + vlanId
-                    + " needs to be between 1-4095");
-        }
-        Network net = new Network(c);
-        /* figure out if our bridged vlan exists, if not then create */
-        String brName = networkName + "." + vlanId.toString();
-        try {
-            String physInterface = net.getPhysicalByBridgeName(networkName);
-            String physVlanInt = physInterface + "." + vlanId;
-
-            if (net.getInterfaceByName(physVlanInt) == null)
-                net.startOvsVlanConfig(physInterface, vlanId);
-
-            if (net.getInterfaceByName(brName) == null)
-                net.startOvsBrConfig(brName, physVlanInt);
-        } catch (Exception e) {
-            throw new CloudRuntimeException("Unable to create vlan "
-                    + vlanId.toString() + " bridge for " + networkName
-                    + e.getMessage());
-        }
-        return brName;
-    }
-
-    // TODO: complete all network support
-    protected String getNetwork(NicTO nic) throws XmlRpcException {
-        String vlanId = null;
-        String bridgeName = null;
-        if (nic.getBroadcastType() == BroadcastDomainType.Vlan) {
-            vlanId = BroadcastDomainType.getValue(nic.getBroadcastUri());
-        }
-
-        if (nic.getType() == TrafficType.Guest) {
-            if (nic.getBroadcastType() == BroadcastDomainType.Vlan
-                    && !vlanId.equalsIgnoreCase("untagged")) {
-                bridgeName = createVlanBridge(_guestNetworkName,
-                        Integer.valueOf(vlanId));
-            } else {
-                bridgeName = _guestNetworkName;
-            }
-        } else if (nic.getType() == TrafficType.Control) {
-            bridgeName = _controlNetworkName;
-        } else if (nic.getType() == TrafficType.Public) {
-            bridgeName = _publicNetworkName;
-        } else if (nic.getType() == TrafficType.Management) {
-            bridgeName = _privateNetworkName;
-        } else if (nic.getType() == TrafficType.Storage) {
-            /* TODO: Add storage network */
-            bridgeName = _storageNetworkName;
-        } else {
-            throw new CloudRuntimeException("Unknown network traffic type:"
-                    + nic.getType());
-        }
-        return bridgeName;
-    }
-
-    /* This is not create for us, but really start */
-    protected boolean startVm(String repoId, String vmId)
-            throws XmlRpcException {
-        Xen host = new Xen(c);
-        try {
-            if (host.getRunningVmConfig(vmId) == null) {
-                s_logger.error("Create VM " + vmId + " first on " + c.getIp());
-                return false;
-            } else {
-                s_logger.info("VM " + vmId + " exists on " + c.getIp());
-            }
-            host.startVm(repoId, vmId);
-        } catch (Exception e) {
-            s_logger.error("Failed to start VM " + vmId + " on " + c.getIp()
-                    + " " + e.getMessage());
-            return false;
-        }
-        return true;
-    }
-
-    /*
-     * TODO: OVM already cleans stuff up, just not the extra bridges which we
-     * don't want right now, as we'd have to keep a state table of which vlans
-     * need to stay on the host!?
-     * A map with vlanid -> list-o-hosts
-     */
-    private void cleanupNetwork(List<String> vifs) throws XmlRpcException {
-        /* peel out vif info for vlan stuff */
-        /*
-         * for (String vif : vifs) { if (vif.bridge.startsWith("vlan")) {
-         * Network net = new Network(c); net.ovsVlanBridgeStop(br, net, vlan);
-         * // Ovm3Bridge.deleteVlanBridge(_conn, vif.bridge); } }
-         */
-    }
-
-    protected void cleanup(Xen.Vm vm) {
-        try {
-            cleanupNetwork(vm.getVmVifs());
-        } catch (XmlRpcException e) {
-            s_logger.debug("Clean up network for " + vm.getVmName() + " failed",
-                    e);
-        }
-        String vmName = vm.getVmName();
-        /* should become a single entity */
-        this._vmStats.remove(vmName);
-    }
-
-    /*
-     * TODO: The actual VM provisioning start to end, we can rip this from our
-     * simple stuff
-     */
-    @Override
-    public synchronized StartAnswer execute(StartCommand cmd) {
-        VirtualMachineTO vmSpec = cmd.getVirtualMachine();
-        String vmName = vmSpec.getName();
-        State state = State.Stopped;
-        Xen xen = new Xen(c);
-
-        try {
-            synchronized (this._vmstates) {
-                this._vmstates.put(vmName, State.Starting);
-            }
-            Xen.Vm vm = xen.getVmConfig();
-            /* max and min ? */
-            vm.setVmCpus(vmSpec.getCpus());
-            /* in mb not in bytes */
-            vm.setVmMemory(vmSpec.getMinRam() / 1024 / 1024);
-            vm.setVmUuid(UUID.nameUUIDFromBytes(vmSpec.getName().getBytes())
-                    .toString());
-            vm.setVmName(vmName);
-            String domType = Ovm3Helper.getOvm3GuestType(vmSpec.getOs());
-            if (domType == null || domType.equals("")) {
-                domType = "default";
-                s_logger.debug("VM Virt type missing setting to: " + domType);
-            } else {
-                s_logger.debug("VM Virt type set to " + domType + " for "
-                        + vmSpec.getOs());
-            }
-            vm.setVmDomainType(domType);
-            /* only for none user VMs? */
-            vm.setVmExtra(vmSpec.getBootArgs().replace(" ", "%"));
-
-            /* TODO: booting from CD... */
-            if (vmSpec.getBootloader() == BootloaderType.CD) {
-                // do something with this please...
-            }
-            /*
-             * officially CD boot is only supported on HVM, although there is a
-             * simple way around it..
-             */
-            /* TODO: pool uuid now comes from here should change! */
-            createVbds(vm, vmSpec);
-
-            if (vmSpec.getType() != VirtualMachine.Type.User) {
-                String svmPath = _ovmRepo + "/"
-                        + _ovmObject.deDash(vm.getPrimaryPoolUuid()) + "/ISOs";
-                String svmIso = svmPath + "/"
-                        + getSystemVMIsoFileNameOnDatastore();
-                vm.addIso(svmIso);
-            }
-            /* TODO: OVS should go here! */
-            createVifs(vm, vmSpec);
-
-            /* vm migration requires a 0.0.0.0 bind */
-            vm.setVncPassword(vmSpec.getVncPassword());
-            vm.setVncAddress("0.0.0.0");
-            vm.setVnc();
-
-            /* this should be getVmRootDiskPoolId ? */
-            xen.createVm(_ovmObject.deDash(vm.getPrimaryPoolUuid()),
-                    vm.getVmUuid());
-            xen.startVm(_ovmObject.deDash(vm.getPrimaryPoolUuid()),
-                    vm.getVmUuid());
-            state = State.Running;
-
-            if (vmSpec.getType() != VirtualMachine.Type.User) {
-                String controlIp = null;
-                for (NicTO nic : vmSpec.getNics()) {
-                    if (nic.getType() == TrafficType.Control) {
-                        controlIp = nic.getIp();
-                    }
-                }
-
-                try {
-                    CloudStackPlugin cSp = new CloudStackPlugin(c);
-                    for (int count = 0; count < 60; count++) {
-                        Boolean res = cSp.domrCheckSsh(controlIp);
-                        s_logger.debug("connected to " + controlIp
-                                + " on attempt " + count + " result: " + res);
-                        Thread.sleep(5000);
-                        if (res) {
-                            break;
-                        }
-                        /*
-                         * Older xend issues in, took me a while to figure this
-                         * out:
-                         * ../xen/xend/XendConstants.py
-                         * """Minimum time between domain restarts in seconds."""
-                         * MINIMUM_RESTART_TIME = 60
-                         * this does NOT work!!!--^^ as we respawn within 30
-                         * seconds easily.
-                         * return state stopped.
-                         */
-                        if (_vmstates.get(vmName) == null) {
-                            String msg = "VM " + vmName + " went missing on "
-                                    + _host + ", returning stopped";
-                                    s_logger.debug(msg);
-                            state = State.Stopped;
-                            return new StartAnswer(cmd, msg);
-                        }
-                    }
-                } catch (Exception x) {
-                    s_logger.debug("unable to connect to " + controlIp + " "
-                            + x.getMessage());
-                }
-            }
-            /*
-             * TODO: Can't remember if HA worked if we were only a pool ?
-             */
-            if (_ovm3pool && _ovm3cluster) {
-                xen.configureVmHa(_ovmObject.deDash(vm.getPrimaryPoolUuid()),
-                        vm.getVmUuid(),
-                        true);
-            }
-            /* should be starting no ? */
-            state = State.Running;
-            return new StartAnswer(cmd);
-        } catch (Exception e) {
-            s_logger.debug("Start vm " + vmName + " failed", e);
-            state = State.Stopped;
-            // cleanup(vmDetails);
-            return new StartAnswer(cmd, e.getMessage());
-        } finally {
-            synchronized (this._vmstates) {
-                // FIXME: where to come to Stopped???
-                this._vmstates.put(vmName, state);
-            }
-        }
-    }
-
-    /* split out domr stuff later */
-    private GetDomRVersionAnswer execute(GetDomRVersionCmd cmd) {
-        String args = this.DefaultDomRPath + "get_template_version.sh";
-        String ip = cmd.getAccessDetail(NetworkElementCommand.ROUTER_IP);
-        try {
-            CloudStackPlugin cSp = new CloudStackPlugin(c);
-            CloudStackPlugin.ReturnCode result;
-            result = cSp.domrExec(ip, args);
-            if (!result.getRc() || result.getStdOut().isEmpty()) {
-                return new GetDomRVersionAnswer(cmd, "getDomRVersionCmd failed");
-            }
-            String domResp = result.getStdOut();
-            String[] lines = domResp.split("&");
-            if (lines.length != 2) {
-                return new GetDomRVersionAnswer(cmd, domResp);
-            }
-            return new GetDomRVersionAnswer(cmd, domResp, lines[0], lines[1]);
-        } catch (Exception e) {
-            return new GetDomRVersionAnswer(cmd, "getDomRVersionCmd "
-                    + e.getMessage());
-        }
-    }
-
-    private Answer giveDomRAns(Command cmd, String ip, String args, String resp) {
-        CloudStackPlugin cSp = new CloudStackPlugin(c);
-        try {
-            CloudStackPlugin.ReturnCode result = cSp.domrExec(ip, args);
-            if (!result.getRc()) {
-                return new Answer(cmd, false, result.getStdOut());
-            }
-        } catch (Exception e) {
-            return new Answer(cmd, false, e.getMessage());
-        }
-        return new Answer(cmd);
-    }
-
-    protected synchronized Answer execute(final DhcpEntryCommand cmd) {
-        String args = this.DefaultDomRPath + "edithosts.sh";
-        String ip = cmd.getAccessDetail(NetworkElementCommand.ROUTER_IP);
-        if (cmd.getVmIpAddress() != null) {
-            args += " -4 " + cmd.getVmIpAddress();
-        }
-        args += " -m " + cmd.getVmMac();
-        args += " -n " + cmd.getVmName();
-        if (cmd.getDefaultRouter() != null) {
-            args += " -d " + cmd.getDefaultRouter();
-        }
-        if (cmd.getStaticRoutes() != null) {
-            args += " -s " + cmd.getStaticRoutes();
-        }
-
-        if (cmd.getDefaultDns() != null) {
-            args += " -N " + cmd.getDefaultDns();
-        }
-
-        if (cmd.getVmIp6Address() != null) {
-            args += " -6 " + cmd.getVmIp6Address();
-            args += " -u " + cmd.getDuid();
-        }
-
-        if (!cmd.isDefault()) {
-            args += " -z";
-        }
-
-        return giveDomRAns(cmd, ip, args, "DhcpEntry failed");
-    }
-
-    protected Answer execute(final SavePasswordCommand cmd) {
-        final String password = cmd.getPassword();
-        final String ip = cmd.getAccessDetail(NetworkElementCommand.ROUTER_IP);
-        final String vmIpAddress = cmd.getVmIpAddress();
-        String args = this.DefaultDomRPath + "savepassword.sh ";
-        args += " -v " + vmIpAddress;
-        args += " -p " + password;
-        return giveDomRAns(cmd, ip, args, "SavePassword failed");
-    }
-
-    protected Answer execute(final VmDataCommand cmd) {
-        String ip = cmd.getAccessDetail(NetworkElementCommand.ROUTER_IP);
-        Map<String, List<String[]>> data = new HashMap<String, List<String[]>>();
-        data.put(cmd.getVmIpAddress(), cmd.getVmData());
-        String json = new Gson().toJson(data);
-        json = Base64.encodeBase64String(json.getBytes());
-        String args = this.DefaultDomRPath + "vmdata.py -d " + json;
-        return giveDomRAns(cmd, ip, args, "Set vm_data failed");
-    }
-
-    /*
-     * we don't for now, gave an error on migration though....
-     */
-    private Answer execute(NetworkRulesSystemVmCommand cmd) {
-        boolean success = true;
-        if (_canBridgeFirewall) {
-            // meh
-        }
-        return new Answer(cmd, success, "");
-    }
-
-    public CheckSshAnswer execute(CheckSshCommand cmd) {
-        String vmName = cmd.getName();
-        String privateIp = cmd.getIp();
-        int cmdPort = cmd.getPort();
-        int interval = cmd.getInterval();
-        int retries = cmd.getRetries();
-
-        if (s_logger.isDebugEnabled()) {
-            s_logger.debug("Trying port " + privateIp + ":" + cmdPort);
-        }
-        try {
-            CloudStackPlugin cSp = new CloudStackPlugin(c);
-            if (!cSp.domrCheckPort(privateIp, cmdPort, retries, interval)) {
-                s_logger.info(vmName + ":" + cmdPort + " nok");
-                return new CheckSshAnswer(cmd, "unable to connect");
-            }
-            s_logger.info(vmName + ":" + cmdPort + " ok");
-        } catch (Exception e) {
-            s_logger.error("Can not reach port on System vm " + vmName
-                    + " due to exception", e);
-            return new CheckSshAnswer(cmd, e);
-        }
-        if (s_logger.isDebugEnabled()) {
-            s_logger.debug("Ping command port succeeded for vm " + vmName + " "
-                    + cmd);
-        }
-        if (VirtualMachineName.isValidRouterName(vmName)) {
-            if (s_logger.isDebugEnabled()) {
-                s_logger.debug("Execute network usage setup command on "
-                        + vmName);
-            }
-            // TODO: check this one out...
-        }
-        return new CheckSshAnswer(cmd);
-    }
-
-    protected Answer execute(GetHostStatsCommand cmd) {
-        try {
-            CloudStackPlugin cSp = new CloudStackPlugin(c);
-            Map<String, String> stats = cSp.ovsDom0Stats(this._publicNetworkName);
-            Double cpuUtil = Double.parseDouble(stats.get("cpu"));
-            Double rxBytes = Double.parseDouble(stats.get("rx"));
-            Double txBytes = Double.parseDouble(stats.get("tx"));
-            Double totalMemory = Double.parseDouble(stats.get("total"));
-            Double freeMemory = Double.parseDouble(stats.get("free"));
-            HostStatsEntry hostStats = new HostStatsEntry(cmd.getHostId(),
-                    cpuUtil, rxBytes, txBytes, "host", totalMemory, freeMemory,
-                    0, 0);
-            return new GetHostStatsAnswer(cmd, hostStats);
-        } catch (Exception e) {
-            s_logger.debug("Get host stats of " + cmd.getHostName() + " failed",
-                    e);
-            return new Answer(cmd, false, e.getMessage());
-        }
-    }
-
-    /* TODO: Stop the VM, this means cleanup too, should this be destroy ? */
-    @Override
-    public StopAnswer execute(StopCommand cmd) {
-        String vmName = cmd.getVmName();
-        State state = State.Error;
-        synchronized (this._vmstates) {
-            state = _vmstates.get(vmName);
-            this._vmstates.put(vmName, State.Stopping);
-        }
-
-        try {
-            Xen vms = new Xen(c);
-            Xen.Vm vm = null;
-            vm = vms.getRunningVmConfig(vmName);
-
-            if (vm == null) {
-                state = State.Stopping;
-                s_logger.debug("Unable to get details of vm: " + vmName
-                        + ", treating it as Stopping");
-                return new StopAnswer(cmd, "success", true);
-            }
-            String repoId = _ovmObject.deDash(vm.getVmRootDiskPoolId());
-            String vmId = vm.getVmUuid();
-
-            /* can we do without the poolId ? */
-            vms.stopVm(repoId, vmId);
-            int tries = 30;
-            while (vms.getRunningVmConfig(vmName) != null && tries > 0) {
-                String msg = "Waiting for " + vmName + " to stop";
-                s_logger.debug(msg);
-                tries--;
-                Thread.sleep(10 * 1000);
-            }
-            vms.deleteVm(repoId, vmId);
-            /* TODO: Check cleanup */
-            this.cleanup(vm);
-
-            if (vms.getRunningVmConfig(vmName) != null) {
-                String msg = "Stop " + vmName + " failed ";
-                s_logger.debug(msg);
-                return new StopAnswer(cmd, msg, false);
-            }
-            state = State.Stopped;
-            return new StopAnswer(cmd, "success", true);
-        } catch (Exception e) {
-            /* TODO: check output of message, might be that it did get removed */
-            s_logger.debug("Stop " + vmName + " failed ", e);
-            return new StopAnswer(cmd, e.getMessage(), false);
-        } finally {
-            synchronized (this._vmstates) {
-                if (state != null) {
-                    this._vmstates.put(vmName, state);
-                } else {
-                    this._vmstates.remove(vmName);
-                }
-            }
-        }
-    }
-
-    /* Reboot the VM and destroy should call the same method in here ? */
-    @Override
-    public RebootAnswer execute(RebootCommand cmd) {
-        String vmName = cmd.getVmName();
-
-        synchronized (this._vmstates) {
-            this._vmstates.put(vmName, State.Starting);
-        }
-
-        try {
-            Xen xen = new Xen(c);
-            Xen.Vm vm = xen.getRunningVmConfig(vmName);
-            /* TODO: stop, start or reboot, reboot for now ? */
-            xen.rebootVm(_ovmObject.deDash(vm.getVmRootDiskPoolId()),
-                    vm.getVmUuid());
-            vm = xen.getRunningVmConfig(vmName);
-            /* erh but this don't work, should point at cloudstackplugin */
-            Integer vncPort = vm.getVncPort();
-            return new RebootAnswer(cmd, null, vncPort);
-        } catch (Exception e) {
-            s_logger.debug("Reboot " + vmName + " failed", e);
-            return new RebootAnswer(cmd, e.getMessage(), false);
-        } finally {
-            synchronized (this._vmstates) {
-                this._vmstates.put(cmd.getVmName(), State.Running);
-            }
-        }
-    }
-
-    protected State convertPowerToState(PowerState ps) {
-        final State state = s_stateMaps.get(ps.toString());
-        return state == null ? State.Unknown : state;
-    }
-
-    private static PowerState convertStateToPower(State s) {
-        final PowerState state = s_powerStateMaps.get(s.toString());
-        return state == null ? PowerState.PowerUnknown : state;
-    }
-
-    /* State to power in the states */
-    protected Map<String, HostVmStateReportEntry> HostVmStateReport()
-            throws XmlRpcException {
-        final HashMap<String, HostVmStateReportEntry> vmStates = new HashMap<String, HostVmStateReportEntry>();
-        Map<String, State> vms = sync();
-        for (final Map.Entry<String, State> vm : vms.entrySet()) {
-            /* TODO: Figure out how to get xentools version in here */
-            s_logger.debug("VM " + vm.getKey() + " state: " + vm.getValue()
-                    + ":" + convertStateToPower(vm.getValue()));
-            vmStates.put(vm.getKey(), new HostVmStateReportEntry(
-                    convertStateToPower(vm.getValue()), c.getIp(), null));
-        }
-        return vmStates;
-    }
-
-    /* uses the running configuration, not the vm.cfg configuration */
-    protected Map<String, Xen.Vm> getAllVms() throws XmlRpcException {
-        try {
-            Xen vms = new Xen(c);
-            return vms.getRunningVmConfigs();
-        } catch (Exception e) {
-            s_logger.debug("getting VM list from " + _host + " failed", e);
-            throw new CloudRuntimeException("Exception on getting VMs from "
-                    + _host + ":" + e.getMessage(), e);
-        }
-    }
-
-    /*
-     * Get all the states and set them up according to xm(1)
-     * TODO: check migrating ?
-     */
-    protected HashMap<String, State> getAllVmStates() throws XmlRpcException {
-        Map<String, Xen.Vm> vms = getAllVms();
-        final HashMap<String, State> states = new HashMap<String, State>();
-        for (final Map.Entry<String, Xen.Vm> entry : vms.entrySet()) {
-            Xen.Vm vm = entry.getValue();
-            if (vm.isControlDomain()) {
-                continue;
-            }
-            State ns = State.Running;
-            String as = vm.getVmState();
-            /* missing VM is stopped */
-            if (as == null) {
-                ns = State.Stopped;
-                continue;
-            }
-            /* The domain is currently running on a CPU */
-            /* need a more exact match! */
-            if (as.contains("r")) {
-                ns = State.Running;
-                /* The domain is blocked, and not running or runnable. */
-            } else if (as.contains("b")) {
-                ns = State.Running;
-                /* The domain has been paused */
-            } else if (as.contains("p")) {
-                ns = State.Running;
-                /* The guest has requested to be shutdown, still migrating... */
-            } else if (as.contains("s")) {
-                if (this._vmstates.get(vm.getVmName()) == State.Migrating)
-                    ns = State.Migrating;
-                ns = State.Stopped;
-                /* The domain has crashed */
-            } else if (as.contains("c")) {
-                ns = State.Error;
-                /*
-                 * The domain is in process of dying (if we see this twice we
-                 * have a problem ?)
-                 */
-            } else if (as.contains("d")) {
-                ns = State.Stopping;
-            } else {
-                ns = State.Unknown;
-            }
-            s_logger.debug("state " + ns + " for " + vm.getVmName()
-                    + " based on " + as);
-            states.put(vm.getVmName(), ns);
-        }
-        return states;
-    }
-
-    /* sync the state we know of with reality */
-    protected HashMap<String, State> sync() {
-        HashMap<String, State> newStates;
-        HashMap<String, State> oldStates = null;
-
-        try {
-            final HashMap<String, State> changes = new HashMap<String, State>();
-            newStates = getAllVmStates();
-            if (newStates == null) {
-                s_logger.debug("Unable to get the vm states so no state sync at this point.");
-                return null;
-            }
-
-            synchronized (_vmstates) {
-                oldStates = new HashMap<String, State>(_vmstates.size());
-                oldStates.putAll(_vmstates);
-
-                for (final Map.Entry<String, State> entry : newStates
-                        .entrySet()) {
-                    final String vmName = entry.getKey();
-                    State newState = entry.getValue();
-                    final State oldState = oldStates.remove(vmName);
-                    s_logger.debug("state for " + vmName + ", old: " + oldState
-                            + ", new: " + newState);
-
-                    /* eurh ? */
-                    if (newState == State.Stopped && oldState != State.Stopping
-                            && oldState != null && oldState != State.Stopped) {
-                        s_logger.debug("Getting power state....");
-                        newState = State.Running;
-                    }
-
-                    if (s_logger.isTraceEnabled()) {
-                        s_logger.trace("VM "
-                                + vmName
-                                + ": ovm has state "
-                                + newState
-                                + " and we have state "
-                                + (oldState != null ? oldState.toString()
-                                        : "null"));
-                    }
-
-                    /* TODO: is this really true ? should be right ? */
-                    if (newState == State.Migrating) {
-                        s_logger.debug(vmName
-                                + " is migrating, skipping state check");
-                        continue;
-                    }
-
-                    if (oldState == null) {
-                        _vmstates.put(vmName, newState);
-                        s_logger.debug("New state without old state: " + vmName);
-                        changes.put(vmName, newState);
-                    } else if (oldState == State.Starting) {
-                        if (newState == State.Running) {
-                            _vmstates.put(vmName, newState);
-                        } else if (newState == State.Stopped) {
-                            s_logger.debug("Ignoring vm " + vmName
-                                    + " because of a lag in starting the vm.");
-                        }
-                    } else if (oldState == State.Migrating) {
-                        if (newState == State.Running) {
-                            s_logger.debug("Detected that a migrating VM is now running: "
-                                    + vmName);
-                            _vmstates.put(vmName, newState);
-                        }
-                    } else if (oldState == State.Stopping) {
-                        if (newState == State.Stopped) {
-                            _vmstates.put(vmName, newState);
-                        } else if (newState == State.Running) {
-                            s_logger.debug("Ignoring vm " + vmName
-                                    + " because of a lag in stopping the vm. ");
-                        }
-                    } else if (oldState != newState) {
-                        _vmstates.put(vmName, newState);
-                        if (newState == State.Stopped) {
-                            // TODO: need to state.error here ?
-                        }
-                        changes.put(vmName, newState);
-                    }
-                }
-
-                for (final Map.Entry<String, State> entry : oldStates
-                        .entrySet()) {
-                    final String vmName = entry.getKey();
-                    final State oldState = entry.getValue();
-
-                    if (oldState == State.Stopping) {
-                        s_logger.debug("Removing VM " + vmName
-                                + " in transition state stopping.");
-                        _vmstates.remove(vmName);
-                    } else if (oldState == State.Starting) {
-                        s_logger.debug("Removing VM " + vmName
-                                + " in transition state starting.");
-                        _vmstates.remove(vmName);
-                    } else if (oldState == State.Stopped) {
-                        s_logger.debug("Stopped VM " + vmName + " removing.");
-                        _vmstates.remove(vmName);
-                    } else if (oldState == State.Migrating) {
-                        /*
-                         * do something smarter here.. newstate should
-                         * say stopping already
-                         */
-                        s_logger.debug("Ignoring VM " + vmName
-                                + " in migrating state.");
-                    } else {
-                        /* if it's not there name it stopping */
-                        _vmstates.remove(vmName);
-                        State state = State.Stopping;
-                        s_logger.debug("VM "
-                                + vmName
-                                + " is now missing from ovm3 server so removing it");
-                        /* TODO: something about killed/halted VM's in here ? */
-                        changes.put(vmName, state);
-                    }
-                }
-            }
-
-            return changes;
-        } catch (Exception e) {
-            s_logger.debug("Ovm3 full sync failed", e);
-            return null;
-        }
-    }
-
-    /* cleanup the storageplugin so we can use an object here */
-    protected GetStorageStatsAnswer execute(final GetStorageStatsCommand cmd) {
-        // cmd.getStorageId();
-        s_logger.debug("Getting stats for: " + cmd.getStorageId());
-        try {
-            Linux host = new Linux(c);
-    

<TRUNCATED>