Search in sources :

Example 6 with VirtualRoutingResource

use of com.cloud.agent.resource.virtualnetwork.VirtualRoutingResource in project cloudstack by apache.

the class VmwareResource method configure.

@Override
public boolean configure(String name, Map<String, Object> params) throws ConfigurationException {
    try {
        _name = name;
        _url = (String) params.get("url");
        _username = (String) params.get("username");
        _password = (String) params.get("password");
        _dcId = (String) params.get("zone");
        _pod = (String) params.get("pod");
        _cluster = (String) params.get("cluster");
        _guid = (String) params.get("guid");
        String[] tokens = _guid.split("@");
        _vCenterAddress = tokens[1];
        _morHyperHost = new ManagedObjectReference();
        String[] hostTokens = tokens[0].split(":");
        _morHyperHost.setType(hostTokens[0]);
        _morHyperHost.setValue(hostTokens[1]);
        _guestTrafficInfo = (VmwareTrafficLabel) params.get("guestTrafficInfo");
        _publicTrafficInfo = (VmwareTrafficLabel) params.get("publicTrafficInfo");
        VmwareContext context = getServiceContext();
        VmwareManager mgr = context.getStockObject(VmwareManager.CONTEXT_STOCK_NAME);
        if (mgr == null) {
            throw new ConfigurationException("Invalid vmwareContext:  vmwareMgr stock object is not set or cleared.");
        }
        mgr.setupResourceStartupParams(params);
        CustomFieldsManagerMO cfmMo = new CustomFieldsManagerMO(context, context.getServiceContent().getCustomFieldsManager());
        cfmMo.ensureCustomFieldDef("Datastore", CustomFieldConstants.CLOUD_UUID);
        if (_publicTrafficInfo != null && _publicTrafficInfo.getVirtualSwitchType() != VirtualSwitchType.StandardVirtualSwitch || _guestTrafficInfo != null && _guestTrafficInfo.getVirtualSwitchType() != VirtualSwitchType.StandardVirtualSwitch) {
            cfmMo.ensureCustomFieldDef("DistributedVirtualPortgroup", CustomFieldConstants.CLOUD_GC_DVP);
        }
        cfmMo.ensureCustomFieldDef("Network", CustomFieldConstants.CLOUD_GC);
        cfmMo.ensureCustomFieldDef("VirtualMachine", CustomFieldConstants.CLOUD_UUID);
        cfmMo.ensureCustomFieldDef("VirtualMachine", CustomFieldConstants.CLOUD_NIC_MASK);
        cfmMo.ensureCustomFieldDef("VirtualMachine", CustomFieldConstants.CLOUD_VM_INTERNAL_NAME);
        cfmMo.ensureCustomFieldDef("VirtualMachine", CustomFieldConstants.CLOUD_WORKER);
        cfmMo.ensureCustomFieldDef("VirtualMachine", CustomFieldConstants.CLOUD_WORKER_TAG);
        VmwareHypervisorHost hostMo = this.getHyperHost(context);
        _hostName = hostMo.getHyperHostName();
        if (_guestTrafficInfo.getVirtualSwitchType() == VirtualSwitchType.NexusDistributedVirtualSwitch || _publicTrafficInfo.getVirtualSwitchType() == VirtualSwitchType.NexusDistributedVirtualSwitch) {
            _privateNetworkVSwitchName = mgr.getPrivateVSwitchName(Long.parseLong(_dcId), HypervisorType.VMware);
            _vsmCredentials = mgr.getNexusVSMCredentialsByClusterId(Long.parseLong(_cluster));
        }
        if (_privateNetworkVSwitchName == null) {
            _privateNetworkVSwitchName = (String) params.get("private.network.vswitch.name");
        }
        String value = (String) params.get("vmware.recycle.hung.wokervm");
        if (value != null && value.equalsIgnoreCase("true"))
            _recycleHungWorker = true;
        value = (String) params.get("vmware.root.disk.controller");
        if (value != null && value.equalsIgnoreCase("scsi"))
            _rootDiskController = DiskControllerType.scsi;
        else if (value != null && value.equalsIgnoreCase("ide"))
            _rootDiskController = DiskControllerType.ide;
        else
            _rootDiskController = DiskControllerType.osdefault;
        Integer intObj = (Integer) params.get("ports.per.dvportgroup");
        if (intObj != null)
            _portsPerDvPortGroup = intObj.intValue();
        s_logger.info("VmwareResource network configuration info." + " private traffic over vSwitch: " + _privateNetworkVSwitchName + ", public traffic over " + _publicTrafficInfo.getVirtualSwitchType() + " : " + _publicTrafficInfo.getVirtualSwitchName() + ", guest traffic over " + _guestTrafficInfo.getVirtualSwitchType() + " : " + _guestTrafficInfo.getVirtualSwitchName());
        Boolean boolObj = (Boolean) params.get("vmware.create.full.clone");
        if (boolObj != null && boolObj.booleanValue()) {
            _fullCloneFlag = true;
        } else {
            _fullCloneFlag = false;
        }
        boolObj = (Boolean) params.get("vm.instancename.flag");
        if (boolObj != null && boolObj.booleanValue()) {
            _instanceNameFlag = true;
        } else {
            _instanceNameFlag = false;
        }
        value = (String) params.get("scripts.timeout");
        int timeout = NumbersUtil.parseInt(value, 1440) * 1000;
        storageNfsVersion = NfsSecondaryStorageResource.retrieveNfsVersionFromParams(params);
        _storageProcessor = new VmwareStorageProcessor((VmwareHostService) this, _fullCloneFlag, (VmwareStorageMount) mgr, timeout, this, _shutdownWaitMs, null, storageNfsVersion);
        storageHandler = new VmwareStorageSubsystemCommandHandler(_storageProcessor, storageNfsVersion);
        _vrResource = new VirtualRoutingResource(this);
        if (!_vrResource.configure(name, params)) {
            throw new ConfigurationException("Unable to configure VirtualRoutingResource");
        }
        if (s_logger.isTraceEnabled()) {
            s_logger.trace("Successfully configured VmwareResource.");
        }
        return true;
    } catch (Exception e) {
        s_logger.error("Unexpected Exception ", e);
        throw new ConfigurationException("Failed to configure VmwareResource due to unexpect exception.");
    } finally {
        recycleServiceContext();
    }
}
Also used : VmwareStorageProcessor(com.cloud.storage.resource.VmwareStorageProcessor) VmwareManager(com.cloud.hypervisor.vmware.manager.VmwareManager) VirtualRoutingResource(com.cloud.agent.resource.virtualnetwork.VirtualRoutingResource) VmwareHypervisorHost(com.cloud.hypervisor.vmware.mo.VmwareHypervisorHost) ConnectException(java.net.ConnectException) IOException(java.io.IOException) RemoteException(java.rmi.RemoteException) InternalErrorException(com.cloud.exception.InternalErrorException) CloudException(com.cloud.exception.CloudException) CloudRuntimeException(com.cloud.utils.exception.CloudRuntimeException) UnsupportedEncodingException(java.io.UnsupportedEncodingException) ConfigurationException(javax.naming.ConfigurationException) CustomFieldsManagerMO(com.cloud.hypervisor.vmware.mo.CustomFieldsManagerMO) VmwareContext(com.cloud.hypervisor.vmware.util.VmwareContext) VmwareStorageSubsystemCommandHandler(com.cloud.storage.resource.VmwareStorageSubsystemCommandHandler) ConfigurationException(javax.naming.ConfigurationException) VmwareHostService(com.cloud.hypervisor.vmware.manager.VmwareHostService) VmwareStorageMount(com.cloud.hypervisor.vmware.manager.VmwareStorageMount) ManagedObjectReference(com.vmware.vim25.ManagedObjectReference)

Example 7 with VirtualRoutingResource

use of com.cloud.agent.resource.virtualnetwork.VirtualRoutingResource in project cloudstack by apache.

the class HypervDirectConnectResource method configure.

// NB: 'params' can come from one of two places.
// For a new host, HypervServerDiscoverer.find().
// For an existing host, DiscovererBase.reloadResource().
// In the later case, the params Map is populated with predefined keys
// and custom keys from the database that were passed out by the find()
// call.
// the custom keys go by the variable name 'details'.
// Thus, in find(), you see that 'details' are added to the params Map.
@Override
public final boolean configure(final String name, final Map<String, Object> params) throws ConfigurationException {
    if (params != null) {
        _guid = (String) params.get("guid");
        _zoneId = (String) params.get("zone");
        _podId = (String) params.get("pod");
        _clusterId = (String) params.get("cluster");
        // was agentIp
        _agentIp = (String) params.get("ipaddress");
        _name = name;
        _clusterGuid = (String) params.get("cluster.guid");
        _username = (String) params.get("url");
        _password = (String) params.get("password");
        _username = (String) params.get("username");
        _configureCalled = true;
    }
    _vrResource = new VirtualRoutingResource(this);
    if (!_vrResource.configure(name, new HashMap<String, Object>())) {
        throw new ConfigurationException("Unable to configure VirtualRoutingResource");
    }
    return true;
}
Also used : HashMap(java.util.HashMap) ConfigurationException(javax.naming.ConfigurationException) VirtualRoutingResource(com.cloud.agent.resource.virtualnetwork.VirtualRoutingResource)

Example 8 with VirtualRoutingResource

use of com.cloud.agent.resource.virtualnetwork.VirtualRoutingResource in project cloudstack by apache.

the class LibvirtComputingResource method configure.

@Override
public boolean configure(final String name, final Map<String, Object> params) throws ConfigurationException {
    boolean success = super.configure(name, params);
    if (!success) {
        return false;
    }
    _storage = new JavaStorageLayer();
    _storage.configure("StorageLayer", params);
    String domrScriptsDir = (String) params.get("domr.scripts.dir");
    if (domrScriptsDir == null) {
        domrScriptsDir = getDefaultDomrScriptsDir();
    }
    String hypervisorScriptsDir = (String) params.get("hypervisor.scripts.dir");
    if (hypervisorScriptsDir == null) {
        hypervisorScriptsDir = getDefaultHypervisorScriptsDir();
    }
    String kvmScriptsDir = (String) params.get("kvm.scripts.dir");
    if (kvmScriptsDir == null) {
        kvmScriptsDir = getDefaultKvmScriptsDir();
    }
    String networkScriptsDir = (String) params.get("network.scripts.dir");
    if (networkScriptsDir == null) {
        networkScriptsDir = getDefaultNetworkScriptsDir();
    }
    String storageScriptsDir = (String) params.get("storage.scripts.dir");
    if (storageScriptsDir == null) {
        storageScriptsDir = getDefaultStorageScriptsDir();
    }
    final String bridgeType = (String) params.get("network.bridge.type");
    if (bridgeType == null) {
        _bridgeType = BridgeType.NATIVE;
    } else {
        _bridgeType = BridgeType.valueOf(bridgeType.toUpperCase());
    }
    params.put("domr.scripts.dir", domrScriptsDir);
    _virtRouterResource = new VirtualRoutingResource(this);
    success = _virtRouterResource.configure(name, params);
    if (!success) {
        return false;
    }
    _host = (String) params.get("host");
    if (_host == null) {
        _host = "localhost";
    }
    _dcId = (String) params.get("zone");
    if (_dcId == null) {
        _dcId = "default";
    }
    _pod = (String) params.get("pod");
    if (_pod == null) {
        _pod = "default";
    }
    _clusterId = (String) params.get("cluster");
    _updateHostPasswdPath = Script.findScript(hypervisorScriptsDir, VRScripts.UPDATE_HOST_PASSWD);
    if (_updateHostPasswdPath == null) {
        throw new ConfigurationException("Unable to find update_host_passwd.sh");
    }
    _modifyVlanPath = Script.findScript(networkScriptsDir, "modifyvlan.sh");
    if (_modifyVlanPath == null) {
        throw new ConfigurationException("Unable to find modifyvlan.sh");
    }
    _versionstringpath = Script.findScript(kvmScriptsDir, "versions.sh");
    if (_versionstringpath == null) {
        throw new ConfigurationException("Unable to find versions.sh");
    }
    _patchViaSocketPath = Script.findScript(kvmScriptsDir + "/patch/", "patchviasocket.py");
    if (_patchViaSocketPath == null) {
        throw new ConfigurationException("Unable to find patchviasocket.py");
    }
    _heartBeatPath = Script.findScript(kvmScriptsDir, "kvmheartbeat.sh");
    if (_heartBeatPath == null) {
        throw new ConfigurationException("Unable to find kvmheartbeat.sh");
    }
    _createvmPath = Script.findScript(storageScriptsDir, "createvm.sh");
    if (_createvmPath == null) {
        throw new ConfigurationException("Unable to find the createvm.sh");
    }
    _manageSnapshotPath = Script.findScript(storageScriptsDir, "managesnapshot.sh");
    if (_manageSnapshotPath == null) {
        throw new ConfigurationException("Unable to find the managesnapshot.sh");
    }
    _resizeVolumePath = Script.findScript(storageScriptsDir, "resizevolume.sh");
    if (_resizeVolumePath == null) {
        throw new ConfigurationException("Unable to find the resizevolume.sh");
    }
    _createTmplPath = Script.findScript(storageScriptsDir, "createtmplt.sh");
    if (_createTmplPath == null) {
        throw new ConfigurationException("Unable to find the createtmplt.sh");
    }
    _securityGroupPath = Script.findScript(networkScriptsDir, "security_group.py");
    if (_securityGroupPath == null) {
        throw new ConfigurationException("Unable to find the security_group.py");
    }
    _ovsTunnelPath = Script.findScript(networkScriptsDir, "ovstunnel.py");
    if (_ovsTunnelPath == null) {
        throw new ConfigurationException("Unable to find the ovstunnel.py");
    }
    _routerProxyPath = Script.findScript("scripts/network/domr/", "router_proxy.sh");
    if (_routerProxyPath == null) {
        throw new ConfigurationException("Unable to find the router_proxy.sh");
    }
    _ovsPvlanDhcpHostPath = Script.findScript(networkScriptsDir, "ovs-pvlan-dhcp-host.sh");
    if (_ovsPvlanDhcpHostPath == null) {
        throw new ConfigurationException("Unable to find the ovs-pvlan-dhcp-host.sh");
    }
    _ovsPvlanVmPath = Script.findScript(networkScriptsDir, "ovs-pvlan-vm.sh");
    if (_ovsPvlanVmPath == null) {
        throw new ConfigurationException("Unable to find the ovs-pvlan-vm.sh");
    }
    String value = (String) params.get("developer");
    final boolean isDeveloper = Boolean.parseBoolean(value);
    if (isDeveloper) {
        params.putAll(getDeveloperProperties());
    }
    _pool = (String) params.get("pool");
    if (_pool == null) {
        _pool = "/root";
    }
    final String instance = (String) params.get("instance");
    _hypervisorType = HypervisorType.getType((String) params.get("hypervisor.type"));
    if (_hypervisorType == HypervisorType.None) {
        _hypervisorType = HypervisorType.KVM;
    }
    _hypervisorURI = (String) params.get("hypervisor.uri");
    if (_hypervisorURI == null) {
        _hypervisorURI = LibvirtConnection.getHypervisorURI(_hypervisorType.toString());
    }
    _networkDirectSourceMode = (String) params.get("network.direct.source.mode");
    _networkDirectDevice = (String) params.get("network.direct.device");
    String startMac = (String) params.get("private.macaddr.start");
    if (startMac == null) {
        startMac = "00:16:3e:77:e2:a0";
    }
    String startIp = (String) params.get("private.ipaddr.start");
    if (startIp == null) {
        startIp = "192.168.166.128";
    }
    _pingTestPath = Script.findScript(kvmScriptsDir, "pingtest.sh");
    if (_pingTestPath == null) {
        throw new ConfigurationException("Unable to find the pingtest.sh");
    }
    _linkLocalBridgeName = (String) params.get("private.bridge.name");
    if (_linkLocalBridgeName == null) {
        if (isDeveloper) {
            _linkLocalBridgeName = "cloud-" + instance + "-0";
        } else {
            _linkLocalBridgeName = "cloud0";
        }
    }
    _publicBridgeName = (String) params.get("public.network.device");
    if (_publicBridgeName == null) {
        _publicBridgeName = "cloudbr0";
    }
    _privBridgeName = (String) params.get("private.network.device");
    if (_privBridgeName == null) {
        _privBridgeName = "cloudbr1";
    }
    _guestBridgeName = (String) params.get("guest.network.device");
    if (_guestBridgeName == null) {
        _guestBridgeName = _privBridgeName;
    }
    _privNwName = (String) params.get("private.network.name");
    if (_privNwName == null) {
        if (isDeveloper) {
            _privNwName = "cloud-" + instance + "-private";
        } else {
            _privNwName = "cloud-private";
        }
    }
    _localStoragePath = (String) params.get("local.storage.path");
    if (_localStoragePath == null) {
        _localStoragePath = "/var/lib/libvirt/images/";
    }
    /* Directory to use for Qemu sockets like for the Qemu Guest Agent */
    _qemuSocketsPath = new File("/var/lib/libvirt/qemu");
    String _qemuSocketsPathVar = (String) params.get("qemu.sockets.path");
    if (_qemuSocketsPathVar != null && StringUtils.isNotBlank(_qemuSocketsPathVar)) {
        _qemuSocketsPath = new File(_qemuSocketsPathVar);
    }
    final File storagePath = new File(_localStoragePath);
    _localStoragePath = storagePath.getAbsolutePath();
    _localStorageUUID = (String) params.get("local.storage.uuid");
    if (_localStorageUUID == null) {
        _localStorageUUID = UUID.randomUUID().toString();
    }
    value = (String) params.get("scripts.timeout");
    _timeout = Duration.standardSeconds(NumbersUtil.parseInt(value, 30 * 60));
    value = (String) params.get("stop.script.timeout");
    _stopTimeout = NumbersUtil.parseInt(value, 120) * 1000;
    value = (String) params.get("cmds.timeout");
    _cmdsTimeout = NumbersUtil.parseInt(value, 7200) * 1000;
    value = (String) params.get("vm.memballoon.disable");
    if (Boolean.parseBoolean(value)) {
        _noMemBalloon = true;
    }
    _videoHw = (String) params.get("vm.video.hardware");
    value = (String) params.get("vm.video.ram");
    _videoRam = NumbersUtil.parseInt(value, 0);
    value = (String) params.get("host.reserved.mem.mb");
    // Reserve 1GB unless admin overrides
    _dom0MinMem = NumbersUtil.parseInt(value, 1024) * 1024 * 1024L;
    value = (String) params.get("kvmclock.disable");
    if (Boolean.parseBoolean(value)) {
        _noKvmClock = true;
    }
    value = (String) params.get("vm.rng.enable");
    if (Boolean.parseBoolean(value)) {
        _rngEnable = true;
        value = (String) params.get("vm.rng.model");
        if (!Strings.isNullOrEmpty(value)) {
            _rngBackendModel = RngBackendModel.valueOf(value.toUpperCase());
        }
        value = (String) params.get("vm.rng.path");
        if (!Strings.isNullOrEmpty(value)) {
            _rngPath = value;
        }
        value = (String) params.get("vm.rng.rate.bytes");
        _rngRateBytes = NumbersUtil.parseInt(value, new Integer(_rngRateBytes));
        value = (String) params.get("vm.rng.rate.period");
        _rngRatePeriod = NumbersUtil.parseInt(value, new Integer(_rngRatePeriod));
    }
    LibvirtConnection.initialize(_hypervisorURI);
    Connect conn = null;
    try {
        conn = LibvirtConnection.getConnection();
        if (_bridgeType == BridgeType.OPENVSWITCH) {
            if (conn.getLibVirVersion() < 10 * 1000 + 0) {
                throw new ConfigurationException("Libvirt version 0.10.0 required for openvswitch support, but version " + conn.getLibVirVersion() + " detected");
            }
        }
    } catch (final LibvirtException e) {
        throw new CloudRuntimeException(e.getMessage());
    }
    if (HypervisorType.KVM == _hypervisorType) {
        /* Does node support HVM guest? If not, exit */
        if (!IsHVMEnabled(conn)) {
            throw new ConfigurationException("NO HVM support on this machine, please make sure: " + "1. VT/SVM is supported by your CPU, or is enabled in BIOS. " + "2. kvm modules are loaded (kvm, kvm_amd|kvm_intel)");
        }
    }
    _hypervisorPath = getHypervisorPath(conn);
    try {
        _hvVersion = conn.getVersion();
        _hvVersion = _hvVersion % 1000000 / 1000;
        _hypervisorLibvirtVersion = conn.getLibVirVersion();
        _hypervisorQemuVersion = conn.getVersion();
    } catch (final LibvirtException e) {
        s_logger.trace("Ignoring libvirt error.", e);
    }
    _guestCpuMode = (String) params.get("guest.cpu.mode");
    if (_guestCpuMode != null) {
        _guestCpuModel = (String) params.get("guest.cpu.model");
        if (_hypervisorLibvirtVersion < 9 * 1000 + 10) {
            s_logger.warn("Libvirt version 0.9.10 required for guest cpu mode, but version " + prettyVersion(_hypervisorLibvirtVersion) + " detected, so it will be disabled");
            _guestCpuMode = "";
            _guestCpuModel = "";
        }
        params.put("guest.cpu.mode", _guestCpuMode);
        params.put("guest.cpu.model", _guestCpuModel);
    }
    final String cpuFeatures = (String) params.get("guest.cpu.features");
    if (cpuFeatures != null) {
        _cpuFeatures = new ArrayList<String>();
        for (final String feature : cpuFeatures.split(" ")) {
            if (!feature.isEmpty()) {
                _cpuFeatures.add(feature);
            }
        }
    }
    final String[] info = NetUtils.getNetworkParams(_privateNic);
    _monitor = new KVMHAMonitor(null, info[0], _heartBeatPath);
    final Thread ha = new Thread(_monitor);
    ha.start();
    _storagePoolMgr = new KVMStoragePoolManager(_storage, _monitor);
    _sysvmISOPath = (String) params.get("systemvm.iso.path");
    if (_sysvmISOPath == null) {
        final String[] isoPaths = { "/usr/share/cloudstack-common/vms/systemvm.iso" };
        for (final String isoPath : isoPaths) {
            if (_storage.exists(isoPath)) {
                _sysvmISOPath = isoPath;
                break;
            }
        }
        if (_sysvmISOPath == null) {
            s_logger.debug("Can't find system vm ISO");
        }
    }
    switch(_bridgeType) {
        case OPENVSWITCH:
            getOvsPifs();
            break;
        case NATIVE:
        default:
            getPifs();
            break;
    }
    if (_pifs.get("private") == null) {
        s_logger.debug("Failed to get private nic name");
        throw new ConfigurationException("Failed to get private nic name");
    }
    if (_pifs.get("public") == null) {
        s_logger.debug("Failed to get public nic name");
        throw new ConfigurationException("Failed to get public nic name");
    }
    s_logger.debug("Found pif: " + _pifs.get("private") + " on " + _privBridgeName + ", pif: " + _pifs.get("public") + " on " + _publicBridgeName);
    _canBridgeFirewall = canBridgeFirewall(_pifs.get("public"));
    _localGateway = Script.runSimpleBashScript("ip route |grep default|awk '{print $3}'");
    if (_localGateway == null) {
        s_logger.debug("Failed to found the local gateway");
    }
    _mountPoint = (String) params.get("mount.path");
    if (_mountPoint == null) {
        _mountPoint = "/mnt";
    }
    value = (String) params.get("vm.migrate.downtime");
    _migrateDowntime = NumbersUtil.parseInt(value, -1);
    value = (String) params.get("vm.migrate.pauseafter");
    _migratePauseAfter = NumbersUtil.parseInt(value, -1);
    value = (String) params.get("vm.migrate.speed");
    _migrateSpeed = NumbersUtil.parseInt(value, -1);
    if (_migrateSpeed == -1) {
        //get guest network device speed
        _migrateSpeed = 0;
        final String speed = Script.runSimpleBashScript("ethtool " + _pifs.get("public") + " |grep Speed | cut -d \\  -f 2");
        if (speed != null) {
            final String[] tokens = speed.split("M");
            if (tokens.length == 2) {
                try {
                    _migrateSpeed = Integer.parseInt(tokens[0]);
                } catch (final NumberFormatException e) {
                    s_logger.trace("Ignoring migrateSpeed extraction error.", e);
                }
                s_logger.debug("device " + _pifs.get("public") + " has speed: " + String.valueOf(_migrateSpeed));
            }
        }
        params.put("vm.migrate.speed", String.valueOf(_migrateSpeed));
    }
    final Map<String, String> bridges = new HashMap<String, String>();
    bridges.put("linklocal", _linkLocalBridgeName);
    bridges.put("public", _publicBridgeName);
    bridges.put("private", _privBridgeName);
    bridges.put("guest", _guestBridgeName);
    params.put("libvirt.host.bridges", bridges);
    params.put("libvirt.host.pifs", _pifs);
    params.put("libvirt.computing.resource", this);
    params.put("libvirtVersion", _hypervisorLibvirtVersion);
    configureVifDrivers(params);
    configureDiskActivityChecks(params);
    final KVMStorageProcessor storageProcessor = new KVMStorageProcessor(_storagePoolMgr, this);
    storageProcessor.configure(name, params);
    storageHandler = new StorageSubsystemCommandHandlerBase(storageProcessor);
    return true;
}
Also used : KVMStoragePoolManager(com.cloud.hypervisor.kvm.storage.KVMStoragePoolManager) LibvirtException(org.libvirt.LibvirtException) KVMStorageProcessor(com.cloud.hypervisor.kvm.storage.KVMStorageProcessor) ConcurrentHashMap(java.util.concurrent.ConcurrentHashMap) HashMap(java.util.HashMap) Connect(org.libvirt.Connect) VirtualRoutingResource(com.cloud.agent.resource.virtualnetwork.VirtualRoutingResource) StorageSubsystemCommandHandlerBase(com.cloud.storage.resource.StorageSubsystemCommandHandlerBase) ConfigurationException(javax.naming.ConfigurationException) ParserConfigurationException(javax.xml.parsers.ParserConfigurationException) CloudRuntimeException(com.cloud.utils.exception.CloudRuntimeException) JavaStorageLayer(com.cloud.storage.JavaStorageLayer) File(java.io.File)

Example 9 with VirtualRoutingResource

use of com.cloud.agent.resource.virtualnetwork.VirtualRoutingResource in project cloudstack by apache.

the class LibvirtStartCommandWrapper method execute.

@Override
public Answer execute(final StartCommand command, final LibvirtComputingResource libvirtComputingResource) {
    final VirtualMachineTO vmSpec = command.getVirtualMachine();
    vmSpec.setVncAddr(command.getHostIp());
    final String vmName = vmSpec.getName();
    LibvirtVMDef vm = null;
    DomainState state = DomainState.VIR_DOMAIN_SHUTOFF;
    final KVMStoragePoolManager storagePoolMgr = libvirtComputingResource.getStoragePoolMgr();
    final LibvirtUtilitiesHelper libvirtUtilitiesHelper = libvirtComputingResource.getLibvirtUtilitiesHelper();
    Connect conn = null;
    try {
        vm = libvirtComputingResource.createVMFromSpec(vmSpec);
        conn = libvirtUtilitiesHelper.getConnectionByType(vm.getHvsType());
        Long remainingMem = getFreeMemory(conn, libvirtComputingResource);
        if (remainingMem == null) {
            return new StartAnswer(command, "failed to get free memory");
        } else if (remainingMem < vmSpec.getMinRam()) {
            return new StartAnswer(command, "Not enough memory on the host, remaining: " + remainingMem + ", asking: " + vmSpec.getMinRam());
        }
        final NicTO[] nics = vmSpec.getNics();
        for (final NicTO nic : nics) {
            if (vmSpec.getType() != VirtualMachine.Type.User) {
                nic.setPxeDisable(true);
            }
        }
        libvirtComputingResource.createVbd(conn, vmSpec, vmName, vm);
        if (!storagePoolMgr.connectPhysicalDisksViaVmSpec(vmSpec)) {
            return new StartAnswer(command, "Failed to connect physical disks to host");
        }
        libvirtComputingResource.createVifs(vmSpec, vm);
        s_logger.debug("starting " + vmName + ": " + vm.toString());
        libvirtComputingResource.startVM(conn, vmName, vm.toString());
        for (final NicTO nic : nics) {
            if (nic.isSecurityGroupEnabled() || nic.getIsolationUri() != null && nic.getIsolationUri().getScheme().equalsIgnoreCase(IsolationType.Ec2.toString())) {
                if (vmSpec.getType() != VirtualMachine.Type.User) {
                    libvirtComputingResource.configureDefaultNetworkRulesForSystemVm(conn, vmName);
                    break;
                } else {
                    final List<String> nicSecIps = nic.getNicSecIps();
                    String secIpsStr;
                    final StringBuilder sb = new StringBuilder();
                    if (nicSecIps != null) {
                        for (final String ip : nicSecIps) {
                            sb.append(ip).append(":");
                        }
                        secIpsStr = sb.toString();
                    } else {
                        secIpsStr = "0:";
                    }
                    libvirtComputingResource.defaultNetworkRules(conn, vmName, nic, vmSpec.getId(), secIpsStr);
                }
            }
        }
        // pass cmdline info to system vms
        if (vmSpec.getType() != VirtualMachine.Type.User) {
            //wait and try passCmdLine for 5 minutes at most for CLOUDSTACK-2823
            String controlIp = null;
            for (final NicTO nic : nics) {
                if (nic.getType() == TrafficType.Control) {
                    controlIp = nic.getIp();
                    break;
                }
            }
            for (int count = 0; count < 30; count++) {
                libvirtComputingResource.passCmdLine(vmName, vmSpec.getBootArgs());
                //check router is up?
                final VirtualRoutingResource virtRouterResource = libvirtComputingResource.getVirtRouterResource();
                final boolean result = virtRouterResource.connect(controlIp, 1, 5000);
                if (result) {
                    break;
                }
            }
        }
        state = DomainState.VIR_DOMAIN_RUNNING;
        return new StartAnswer(command);
    } catch (final LibvirtException e) {
        s_logger.warn("LibvirtException ", e);
        if (conn != null) {
            libvirtComputingResource.handleVmStartFailure(conn, vmName, vm);
        }
        return new StartAnswer(command, e.getMessage());
    } catch (final InternalErrorException e) {
        s_logger.warn("InternalErrorException ", e);
        if (conn != null) {
            libvirtComputingResource.handleVmStartFailure(conn, vmName, vm);
        }
        return new StartAnswer(command, e.getMessage());
    } catch (final URISyntaxException e) {
        s_logger.warn("URISyntaxException ", e);
        if (conn != null) {
            libvirtComputingResource.handleVmStartFailure(conn, vmName, vm);
        }
        return new StartAnswer(command, e.getMessage());
    } finally {
        if (state != DomainState.VIR_DOMAIN_RUNNING) {
            storagePoolMgr.disconnectPhysicalDisksViaVmSpec(vmSpec);
        }
    }
}
Also used : KVMStoragePoolManager(com.cloud.hypervisor.kvm.storage.KVMStoragePoolManager) StartAnswer(com.cloud.agent.api.StartAnswer) LibvirtException(org.libvirt.LibvirtException) Connect(org.libvirt.Connect) VirtualRoutingResource(com.cloud.agent.resource.virtualnetwork.VirtualRoutingResource) InternalErrorException(com.cloud.exception.InternalErrorException) URISyntaxException(java.net.URISyntaxException) VirtualMachineTO(com.cloud.agent.api.to.VirtualMachineTO) LibvirtVMDef(com.cloud.hypervisor.kvm.resource.LibvirtVMDef) DomainState(org.libvirt.DomainInfo.DomainState) NicTO(com.cloud.agent.api.to.NicTO)

Example 10 with VirtualRoutingResource

use of com.cloud.agent.resource.virtualnetwork.VirtualRoutingResource in project cloudstack by apache.

the class LibvirtRebootRouterCommandWrapper method execute.

@Override
public Answer execute(final RebootRouterCommand command, final LibvirtComputingResource libvirtComputingResource) {
    final LibvirtRequestWrapper wrapper = LibvirtRequestWrapper.getInstance();
    final RebootCommand rebootCommand = new RebootCommand(command.getVmName(), true);
    final Answer answer = wrapper.execute(rebootCommand, libvirtComputingResource);
    final VirtualRoutingResource virtualRouterResource = libvirtComputingResource.getVirtRouterResource();
    if (virtualRouterResource.connect(command.getPrivateIpAddress())) {
        libvirtComputingResource.networkUsage(command.getPrivateIpAddress(), "create", null);
        return answer;
    } else {
        return new Answer(command, false, "Failed to connect to virtual router " + command.getVmName());
    }
}
Also used : Answer(com.cloud.agent.api.Answer) RebootCommand(com.cloud.agent.api.RebootCommand) VirtualRoutingResource(com.cloud.agent.resource.virtualnetwork.VirtualRoutingResource)

Aggregations

VirtualRoutingResource (com.cloud.agent.resource.virtualnetwork.VirtualRoutingResource)18 Answer (com.cloud.agent.api.Answer)10 AttachAnswer (org.apache.cloudstack.storage.command.AttachAnswer)9 Test (org.junit.Test)9 CheckRouterAnswer (com.cloud.agent.api.CheckRouterAnswer)7 LibvirtRequestWrapper (com.cloud.hypervisor.kvm.resource.wrapper.LibvirtRequestWrapper)7 Connect (org.libvirt.Connect)7 LibvirtException (org.libvirt.LibvirtException)7 ConfigurationException (javax.naming.ConfigurationException)6 InternalErrorException (com.cloud.exception.InternalErrorException)5 LibvirtUtilitiesHelper (com.cloud.hypervisor.kvm.resource.wrapper.LibvirtUtilitiesHelper)4 KVMStoragePoolManager (com.cloud.hypervisor.kvm.storage.KVMStoragePoolManager)4 CloudRuntimeException (com.cloud.utils.exception.CloudRuntimeException)4 URISyntaxException (java.net.URISyntaxException)4 NicTO (com.cloud.agent.api.to.NicTO)3 VirtualMachineTO (com.cloud.agent.api.to.VirtualMachineTO)3 RebootAnswer (com.cloud.agent.api.RebootAnswer)2 RebootRouterCommand (com.cloud.agent.api.RebootRouterCommand)2 StartCommand (com.cloud.agent.api.StartCommand)2 CheckSshCommand (com.cloud.agent.api.check.CheckSshCommand)2