Search in sources :

Example 11 with PhysicalNetworkSetupInfo

use of com.cloud.network.PhysicalNetworkSetupInfo in project cloudstack by apache.

the class CheckNetworkCommandTest method setUp.

@Before
public void setUp() {
    @SuppressWarnings("unchecked") List<PhysicalNetworkSetupInfo> net = Mockito.mock(List.class);
    cnc = new CheckNetworkCommand(net);
}
Also used : CheckNetworkCommand(com.cloud.agent.api.CheckNetworkCommand) PhysicalNetworkSetupInfo(com.cloud.network.PhysicalNetworkSetupInfo) Before(org.junit.Before)

Example 12 with PhysicalNetworkSetupInfo

use of com.cloud.network.PhysicalNetworkSetupInfo in project cloudstack by apache.

the class NetworkOrchestrator method processConnect.

@Override
public void processConnect(final Host host, final StartupCommand cmd, final boolean forRebalance) throws ConnectionException {
    if (!(cmd instanceof StartupRoutingCommand)) {
        return;
    }
    final long hostId = host.getId();
    final StartupRoutingCommand startup = (StartupRoutingCommand) cmd;
    final String dataCenter = startup.getDataCenter();
    long dcId = -1;
    DataCenterVO dc = _dcDao.findByName(dataCenter);
    if (dc == null) {
        try {
            dcId = Long.parseLong(dataCenter);
            dc = _dcDao.findById(dcId);
        } catch (final NumberFormatException e) {
        }
    }
    if (dc == null) {
        throw new IllegalArgumentException("Host " + startup.getPrivateIpAddress() + " sent incorrect data center: " + dataCenter);
    }
    dcId = dc.getId();
    final HypervisorType hypervisorType = startup.getHypervisorType();
    if (s_logger.isDebugEnabled()) {
        s_logger.debug("Host's hypervisorType is: " + hypervisorType);
    }
    final List<PhysicalNetworkSetupInfo> networkInfoList = new ArrayList<PhysicalNetworkSetupInfo>();
    // list all physicalnetworks in the zone & for each get the network names
    final List<PhysicalNetworkVO> physicalNtwkList = _physicalNetworkDao.listByZone(dcId);
    for (final PhysicalNetworkVO pNtwk : physicalNtwkList) {
        final String publicName = _pNTrafficTypeDao.getNetworkTag(pNtwk.getId(), TrafficType.Public, hypervisorType);
        final String privateName = _pNTrafficTypeDao.getNetworkTag(pNtwk.getId(), TrafficType.Management, hypervisorType);
        final String guestName = _pNTrafficTypeDao.getNetworkTag(pNtwk.getId(), TrafficType.Guest, hypervisorType);
        final String storageName = _pNTrafficTypeDao.getNetworkTag(pNtwk.getId(), TrafficType.Storage, hypervisorType);
        // String controlName = _pNTrafficTypeDao._networkModel.getNetworkTag(pNtwk.getId(), TrafficType.Control, hypervisorType);
        final PhysicalNetworkSetupInfo info = new PhysicalNetworkSetupInfo();
        info.setPhysicalNetworkId(pNtwk.getId());
        info.setGuestNetworkName(guestName);
        info.setPrivateNetworkName(privateName);
        info.setPublicNetworkName(publicName);
        info.setStorageNetworkName(storageName);
        final PhysicalNetworkTrafficTypeVO mgmtTraffic = _pNTrafficTypeDao.findBy(pNtwk.getId(), TrafficType.Management);
        if (mgmtTraffic != null) {
            final String vlan = mgmtTraffic.getVlan();
            info.setMgmtVlan(vlan);
        }
        networkInfoList.add(info);
    }
    // send the names to the agent
    if (s_logger.isDebugEnabled()) {
        s_logger.debug("Sending CheckNetworkCommand to check the Network is setup correctly on Agent");
    }
    final CheckNetworkCommand nwCmd = new CheckNetworkCommand(networkInfoList);
    final CheckNetworkAnswer answer = (CheckNetworkAnswer) _agentMgr.easySend(hostId, nwCmd);
    if (answer == null) {
        s_logger.warn("Unable to get an answer to the CheckNetworkCommand from agent:" + host.getId());
        throw new ConnectionException(true, "Unable to get an answer to the CheckNetworkCommand from agent: " + host.getId());
    }
    if (!answer.getResult()) {
        s_logger.warn("Unable to setup agent " + hostId + " due to " + answer.getDetails());
        final String msg = "Incorrect Network setup on agent, Reinitialize agent after network names are setup, details : " + answer.getDetails();
        _alertMgr.sendAlert(AlertManager.AlertType.ALERT_TYPE_HOST, dcId, host.getPodId(), msg, msg);
        throw new ConnectionException(true, msg);
    } else {
        if (answer.needReconnect()) {
            throw new ConnectionException(false, "Reinitialize agent after network setup.");
        }
        if (s_logger.isDebugEnabled()) {
            s_logger.debug("Network setup is correct on Agent");
        }
        return;
    }
}
Also used : DataCenterVO(com.cloud.dc.DataCenterVO) ArrayList(java.util.ArrayList) CheckNetworkAnswer(com.cloud.agent.api.CheckNetworkAnswer) PhysicalNetworkTrafficTypeVO(com.cloud.network.dao.PhysicalNetworkTrafficTypeVO) HypervisorType(com.cloud.hypervisor.Hypervisor.HypervisorType) PhysicalNetworkVO(com.cloud.network.dao.PhysicalNetworkVO) CheckNetworkCommand(com.cloud.agent.api.CheckNetworkCommand) StartupRoutingCommand(com.cloud.agent.api.StartupRoutingCommand) ConnectionException(com.cloud.exception.ConnectionException) PhysicalNetworkSetupInfo(com.cloud.network.PhysicalNetworkSetupInfo)

Example 13 with PhysicalNetworkSetupInfo

use of com.cloud.network.PhysicalNetworkSetupInfo in project cloudstack by apache.

the class LibvirtComputingResourceTest method testCheckNetworkCommandFail3.

@Test
public void testCheckNetworkCommandFail3() {
    final List<PhysicalNetworkSetupInfo> networkInfoList = new ArrayList<PhysicalNetworkSetupInfo>();
    final PhysicalNetworkSetupInfo networkSetupInfo = Mockito.mock(PhysicalNetworkSetupInfo.class);
    networkInfoList.add(networkSetupInfo);
    final CheckNetworkCommand command = new CheckNetworkCommand(networkInfoList);
    when(libvirtComputingResource.checkNetwork(networkSetupInfo.getGuestNetworkName())).thenReturn(true);
    when(libvirtComputingResource.checkNetwork(networkSetupInfo.getPrivateNetworkName())).thenReturn(true);
    when(libvirtComputingResource.checkNetwork(networkSetupInfo.getPublicNetworkName())).thenReturn(false);
    final LibvirtRequestWrapper wrapper = LibvirtRequestWrapper.getInstance();
    assertNotNull(wrapper);
    final Answer answer = wrapper.execute(command, libvirtComputingResource);
    assertFalse(answer.getResult());
    verify(libvirtComputingResource, times(1)).checkNetwork(networkSetupInfo.getGuestNetworkName());
    verify(libvirtComputingResource, times(1)).checkNetwork(networkSetupInfo.getPrivateNetworkName());
}
Also used : AttachAnswer(org.apache.cloudstack.storage.command.AttachAnswer) Answer(com.cloud.agent.api.Answer) CheckRouterAnswer(com.cloud.agent.api.CheckRouterAnswer) LibvirtRequestWrapper(com.cloud.hypervisor.kvm.resource.wrapper.LibvirtRequestWrapper) ArrayList(java.util.ArrayList) CheckNetworkCommand(com.cloud.agent.api.CheckNetworkCommand) PhysicalNetworkSetupInfo(com.cloud.network.PhysicalNetworkSetupInfo) Test(org.junit.Test)

Example 14 with PhysicalNetworkSetupInfo

use of com.cloud.network.PhysicalNetworkSetupInfo in project cloudstack by apache.

the class LibvirtComputingResourceTest method testCheckNetworkCommandFail1.

@Test
public void testCheckNetworkCommandFail1() {
    final List<PhysicalNetworkSetupInfo> networkInfoList = new ArrayList<PhysicalNetworkSetupInfo>();
    final PhysicalNetworkSetupInfo networkSetupInfo = Mockito.mock(PhysicalNetworkSetupInfo.class);
    networkInfoList.add(networkSetupInfo);
    final CheckNetworkCommand command = new CheckNetworkCommand(networkInfoList);
    when(libvirtComputingResource.checkNetwork(networkSetupInfo.getGuestNetworkName())).thenReturn(false);
    final LibvirtRequestWrapper wrapper = LibvirtRequestWrapper.getInstance();
    assertNotNull(wrapper);
    final Answer answer = wrapper.execute(command, libvirtComputingResource);
    assertFalse(answer.getResult());
    verify(libvirtComputingResource, times(1)).checkNetwork(networkSetupInfo.getGuestNetworkName());
}
Also used : AttachAnswer(org.apache.cloudstack.storage.command.AttachAnswer) Answer(com.cloud.agent.api.Answer) CheckRouterAnswer(com.cloud.agent.api.CheckRouterAnswer) LibvirtRequestWrapper(com.cloud.hypervisor.kvm.resource.wrapper.LibvirtRequestWrapper) ArrayList(java.util.ArrayList) CheckNetworkCommand(com.cloud.agent.api.CheckNetworkCommand) PhysicalNetworkSetupInfo(com.cloud.network.PhysicalNetworkSetupInfo) Test(org.junit.Test)

Example 15 with PhysicalNetworkSetupInfo

use of com.cloud.network.PhysicalNetworkSetupInfo in project cloudstack by apache.

the class LibvirtServerDiscoverer method find.

@Override
public Map<? extends ServerResource, Map<String, String>> find(long dcId, Long podId, Long clusterId, URI uri, String username, String password, List<String> hostTags) throws DiscoveryException {
    ClusterVO cluster = _clusterDao.findById(clusterId);
    if (cluster == null || cluster.getHypervisorType() != getHypervisorType()) {
        if (s_logger.isInfoEnabled())
            s_logger.info("invalid cluster id or cluster is not for " + getHypervisorType() + " hypervisors");
        return null;
    }
    Map<KvmDummyResourceBase, Map<String, String>> resources = new HashMap<KvmDummyResourceBase, Map<String, String>>();
    Map<String, String> details = new HashMap<String, String>();
    if (!uri.getScheme().equals("http")) {
        String msg = "urlString is not http so we're not taking care of the discovery for this: " + uri;
        s_logger.debug(msg);
        return null;
    }
    com.trilead.ssh2.Connection sshConnection = null;
    String agentIp = null;
    try {
        String hostname = uri.getHost();
        InetAddress ia = InetAddress.getByName(hostname);
        agentIp = ia.getHostAddress();
        String guid = UUID.nameUUIDFromBytes(agentIp.getBytes()).toString();
        List<HostVO> existingHosts = _resourceMgr.listAllHostsInOneZoneByType(Host.Type.Routing, dcId);
        if (existingHosts != null) {
            for (HostVO existingHost : existingHosts) {
                if (existingHost.getGuid().toLowerCase().startsWith(guid.toLowerCase())) {
                    s_logger.debug("Skipping " + agentIp + " because " + guid + " is already in the database for resource " + existingHost.getGuid());
                    return null;
                }
            }
        }
        sshConnection = new com.trilead.ssh2.Connection(agentIp, 22);
        sshConnection.connect(null, 60000, 60000);
        if (!sshConnection.authenticateWithPassword(username, password)) {
            s_logger.debug("Failed to authenticate");
            throw new DiscoveredWithErrorException("Authentication error");
        }
        if (!SSHCmdHelper.sshExecuteCmd(sshConnection, "lsmod|grep kvm", 3)) {
            s_logger.debug("It's not a KVM enabled machine");
            return null;
        }
        List<PhysicalNetworkSetupInfo> netInfos = _networkMgr.getPhysicalNetworkInfo(dcId, getHypervisorType());
        String kvmPrivateNic = null;
        String kvmPublicNic = null;
        String kvmGuestNic = null;
        for (PhysicalNetworkSetupInfo info : netInfos) {
            if (info.getPrivateNetworkName() != null) {
                kvmPrivateNic = info.getPrivateNetworkName();
            }
            if (info.getPublicNetworkName() != null) {
                kvmPublicNic = info.getPublicNetworkName();
            }
            if (info.getGuestNetworkName() != null) {
                kvmGuestNic = info.getGuestNetworkName();
            }
        }
        if (kvmPrivateNic == null && kvmPublicNic == null && kvmGuestNic == null) {
            kvmPrivateNic = _kvmPrivateNic;
            kvmPublicNic = _kvmPublicNic;
            kvmGuestNic = _kvmGuestNic;
        }
        if (kvmPublicNic == null) {
            kvmPublicNic = (kvmGuestNic != null) ? kvmGuestNic : kvmPrivateNic;
        }
        if (kvmPrivateNic == null) {
            kvmPrivateNic = (kvmPublicNic != null) ? kvmPublicNic : kvmGuestNic;
        }
        if (kvmGuestNic == null) {
            kvmGuestNic = (kvmPublicNic != null) ? kvmPublicNic : kvmPrivateNic;
        }
        String parameters = " -m " + _hostIp + " -z " + dcId + " -p " + podId + " -c " + clusterId + " -g " + guid + " -a";
        parameters += " --pubNic=" + kvmPublicNic;
        parameters += " --prvNic=" + kvmPrivateNic;
        parameters += " --guestNic=" + kvmGuestNic;
        parameters += " --hypervisor=" + cluster.getHypervisorType().toString().toLowerCase();
        String setupAgentCommand = "cloudstack-setup-agent ";
        if (!username.equals("root")) {
            setupAgentCommand = "sudo cloudstack-setup-agent ";
        }
        if (!SSHCmdHelper.sshExecuteCmd(sshConnection, setupAgentCommand + parameters, 3)) {
            s_logger.info("cloudstack agent setup command failed: " + setupAgentCommand + parameters);
            return null;
        }
        KvmDummyResourceBase kvmResource = new KvmDummyResourceBase();
        Map<String, Object> params = new HashMap<String, Object>();
        params.put("router.aggregation.command.each.timeout", _configDao.getValue(Config.RouterAggregationCommandEachTimeout.toString()));
        params.put("zone", Long.toString(dcId));
        params.put("pod", Long.toString(podId));
        params.put("cluster", Long.toString(clusterId));
        params.put("guid", guid);
        params.put("agentIp", agentIp);
        kvmResource.configure("kvm agent", params);
        resources.put(kvmResource, details);
        HostVO connectedHost = waitForHostConnect(dcId, podId, clusterId, guid);
        if (connectedHost == null)
            return null;
        details.put("guid", connectedHost.getGuid());
        // place a place holder guid derived from cluster ID
        if (cluster.getGuid() == null) {
            cluster.setGuid(UUID.nameUUIDFromBytes(String.valueOf(clusterId).getBytes()).toString());
            _clusterDao.update(clusterId, cluster);
        }
        // save user name and password
        _hostDao.loadDetails(connectedHost);
        Map<String, String> hostDetails = connectedHost.getDetails();
        hostDetails.put("password", password);
        hostDetails.put("username", username);
        _hostDao.saveDetails(connectedHost);
        return resources;
    } catch (DiscoveredWithErrorException e) {
        throw e;
    } catch (Exception e) {
        String msg = " can't setup agent, due to " + e.toString() + " - " + e.getMessage();
        s_logger.warn(msg);
    } finally {
        if (sshConnection != null)
            sshConnection.close();
    }
    return null;
}
Also used : ClusterVO(com.cloud.dc.ClusterVO) HashMap(java.util.HashMap) DiscoveredWithErrorException(com.cloud.exception.DiscoveredWithErrorException) HostVO(com.cloud.host.HostVO) DiscoveredWithErrorException(com.cloud.exception.DiscoveredWithErrorException) DiscoveryException(com.cloud.exception.DiscoveryException) ConfigurationException(javax.naming.ConfigurationException) AgentUnavailableException(com.cloud.exception.AgentUnavailableException) OperationTimedoutException(com.cloud.exception.OperationTimedoutException) UnableDeleteHostException(com.cloud.resource.UnableDeleteHostException) HashMap(java.util.HashMap) Map(java.util.Map) InetAddress(java.net.InetAddress) PhysicalNetworkSetupInfo(com.cloud.network.PhysicalNetworkSetupInfo)

Aggregations

PhysicalNetworkSetupInfo (com.cloud.network.PhysicalNetworkSetupInfo)21 CheckNetworkCommand (com.cloud.agent.api.CheckNetworkCommand)15 ArrayList (java.util.ArrayList)14 Answer (com.cloud.agent.api.Answer)13 Test (org.junit.Test)13 CheckNetworkAnswer (com.cloud.agent.api.CheckNetworkAnswer)6 AttachAnswer (org.apache.cloudstack.storage.command.AttachAnswer)6 CloudStackPluginTest (com.cloud.hypervisor.ovm3.objects.CloudStackPluginTest)5 ConnectionTest (com.cloud.hypervisor.ovm3.objects.ConnectionTest)5 NetworkTest (com.cloud.hypervisor.ovm3.objects.NetworkTest)5 XenTest (com.cloud.hypervisor.ovm3.objects.XenTest)5 XmlTestResultTest (com.cloud.hypervisor.ovm3.objects.XmlTestResultTest)5 Ovm3HypervisorResourceTest (com.cloud.hypervisor.ovm3.resources.Ovm3HypervisorResourceTest)5 Ovm3SupportTest (com.cloud.hypervisor.ovm3.support.Ovm3SupportTest)5 CheckRouterAnswer (com.cloud.agent.api.CheckRouterAnswer)4 LibvirtRequestWrapper (com.cloud.hypervisor.kvm.resource.wrapper.LibvirtRequestWrapper)4 RebootAnswer (com.cloud.agent.api.RebootAnswer)2 CreateAnswer (com.cloud.agent.api.storage.CreateAnswer)2 StartupRoutingCommand (com.cloud.agent.api.StartupRoutingCommand)1 ClusterVO (com.cloud.dc.ClusterVO)1