Search in sources :

Example 26 with StartupRoutingCommand

use of com.cloud.agent.api.StartupRoutingCommand in project cloudstack by apache.

the class Ovm3HypervisorSupportTest method fillHostinfoTest.

@Test
public void fillHostinfoTest() throws ConfigurationException {
    Ovm3Configuration config = new Ovm3Configuration(configTest.getParams());
    ConnectionTest con = new ConnectionTest();
    con.setIp(config.getAgentIp());
    Ovm3HypervisorSupport hypervisor = new Ovm3HypervisorSupport(con, config);
    LinuxTest linuxTest = new LinuxTest();
    NetworkTest networkTest = new NetworkTest();
    StartupRoutingCommand srCmd = new StartupRoutingCommand();
    con.setResult(results.simpleResponseWrapWrapper(linuxTest.getDiscoverHw()));
    con.addResult(results.simpleResponseWrapWrapper(linuxTest.getDiscoverserver()));
    con.addResult(results.simpleResponseWrapWrapper(networkTest.getDiscoverNetwork()));
    hypervisor.fillHostInfo(srCmd);
}
Also used : LinuxTest(com.cloud.hypervisor.ovm3.objects.LinuxTest) ConnectionTest(com.cloud.hypervisor.ovm3.objects.ConnectionTest) StartupRoutingCommand(com.cloud.agent.api.StartupRoutingCommand) NetworkTest(com.cloud.hypervisor.ovm3.objects.NetworkTest) Test(org.junit.Test) ConnectionTest(com.cloud.hypervisor.ovm3.objects.ConnectionTest) LinuxTest(com.cloud.hypervisor.ovm3.objects.LinuxTest) NetworkTest(com.cloud.hypervisor.ovm3.objects.NetworkTest) XenTest(com.cloud.hypervisor.ovm3.objects.XenTest) Ovm3SupportTest(com.cloud.hypervisor.ovm3.support.Ovm3SupportTest) XmlTestResultTest(com.cloud.hypervisor.ovm3.objects.XmlTestResultTest)

Example 27 with StartupRoutingCommand

use of com.cloud.agent.api.StartupRoutingCommand in project cloudstack by apache.

the class DummyHostServerResource method initialize.

@Override
public StartupCommand[] initialize() {
    StartupRoutingCommand cmd = new StartupRoutingCommand();
    cmd.setCpus(1);
    cmd.setSpeed(1000L);
    cmd.setMemory(1000000L);
    cmd.setDom0MinMemory(256L);
    cmd.setCaps("hvm");
    cmd.setGuid(_guid);
    cmd.setDataCenter(_zone);
    cmd.setPod(_pod);
    cmd.setHypervisorType(HypervisorType.None);
    cmd.setAgentTag("vmops-simulator");
    cmd.setName(_url);
    cmd.setPrivateIpAddress(this.getHostPrivateIp());
    cmd.setPrivateMacAddress(this.getHostMacAddress().toString());
    cmd.setPrivateNetmask("255.255.0.0");
    cmd.setIqn("iqn:" + _url);
    cmd.setStorageIpAddress(getHostStoragePrivateIp());
    cmd.setStorageMacAddress(getHostStorageMacAddress().toString());
    cmd.setStorageIpAddressDeux(getHostStoragePrivateIp2());
    cmd.setStorageMacAddressDeux(getHostStorageMacAddress2().toString());
    cmd.setPublicIpAddress(getHostStoragePrivateIp());
    cmd.setPublicMacAddress(getHostStorageMacAddress().toString());
    cmd.setPublicNetmask("255.255.0.0");
    cmd.setVersion(DummyHostServerResource.class.getPackage().getImplementationVersion());
    return new StartupCommand[] { cmd };
}
Also used : StartupCommand(com.cloud.agent.api.StartupCommand) StartupRoutingCommand(com.cloud.agent.api.StartupRoutingCommand)

Example 28 with StartupRoutingCommand

use of com.cloud.agent.api.StartupRoutingCommand in project cloudstack by apache.

the class ResourceManagerImpl method createHostVO.

protected HostVO createHostVO(final StartupCommand[] cmds, final ServerResource resource, final Map<String, String> details, List<String> hostTags, final ResourceStateAdapter.Event stateEvent) {
    boolean newHost = false;
    StartupCommand startup = cmds[0];
    HostVO host = getNewHost(cmds);
    if (host == null) {
        host = new HostVO(startup.getGuid());
        newHost = true;
    }
    String dataCenter = startup.getDataCenter();
    String pod = startup.getPod();
    final String cluster = startup.getCluster();
    if (pod != null && dataCenter != null && pod.equalsIgnoreCase("default") && dataCenter.equalsIgnoreCase("default")) {
        final List<HostPodVO> pods = _podDao.listAllIncludingRemoved();
        for (final HostPodVO hpv : pods) {
            if (checkCIDR(hpv, startup.getPrivateIpAddress(), startup.getPrivateNetmask())) {
                pod = hpv.getName();
                dataCenter = _dcDao.findById(hpv.getDataCenterId()).getName();
                break;
            }
        }
    }
    long dcId = -1;
    DataCenterVO dc = _dcDao.findByName(dataCenter);
    if (dc == null) {
        try {
            dcId = Long.parseLong(dataCenter);
            dc = _dcDao.findById(dcId);
        } catch (final NumberFormatException e) {
            s_logger.debug("Cannot parse " + dataCenter + " into Long.");
        }
    }
    if (dc == null) {
        throw new IllegalArgumentException("Host " + startup.getPrivateIpAddress() + " sent incorrect data center: " + dataCenter);
    }
    dcId = dc.getId();
    HostPodVO p = _podDao.findByName(pod, dcId);
    if (p == null) {
        try {
            final long podId = Long.parseLong(pod);
            p = _podDao.findById(podId);
        } catch (final NumberFormatException e) {
            s_logger.debug("Cannot parse " + pod + " into Long.");
        }
    }
    /*
         * ResourceStateAdapter is responsible for throwing Exception if Pod is
         * null and non-null is required. for example, XcpServerDiscoever.
         * Others, like PxeServer, ExternalFireware don't require Pod
         */
    final Long podId = p == null ? null : p.getId();
    Long clusterId = null;
    if (cluster != null) {
        try {
            clusterId = Long.valueOf(cluster);
        } catch (final NumberFormatException e) {
            if (podId != null) {
                ClusterVO c = _clusterDao.findBy(cluster, podId.longValue());
                if (c == null) {
                    c = new ClusterVO(dcId, podId.longValue(), cluster);
                    c = _clusterDao.persist(c);
                }
                clusterId = c.getId();
            }
        }
    }
    if (startup instanceof StartupRoutingCommand) {
        final StartupRoutingCommand ssCmd = (StartupRoutingCommand) startup;
        final List<String> implicitHostTags = ssCmd.getHostTags();
        if (!implicitHostTags.isEmpty()) {
            if (hostTags == null) {
                hostTags = _hostTagsDao.gethostTags(host.getId());
            }
            if (hostTags != null) {
                implicitHostTags.removeAll(hostTags);
                hostTags.addAll(implicitHostTags);
            } else {
                hostTags = implicitHostTags;
            }
        }
    }
    host.setDataCenterId(dc.getId());
    host.setPodId(podId);
    host.setClusterId(clusterId);
    host.setPrivateIpAddress(startup.getPrivateIpAddress());
    host.setPrivateNetmask(startup.getPrivateNetmask());
    host.setPrivateMacAddress(startup.getPrivateMacAddress());
    host.setPublicIpAddress(startup.getPublicIpAddress());
    host.setPublicMacAddress(startup.getPublicMacAddress());
    host.setPublicNetmask(startup.getPublicNetmask());
    host.setStorageIpAddress(startup.getStorageIpAddress());
    host.setStorageMacAddress(startup.getStorageMacAddress());
    host.setStorageNetmask(startup.getStorageNetmask());
    host.setVersion(startup.getVersion());
    host.setName(startup.getName());
    host.setManagementServerId(_nodeId);
    host.setStorageUrl(startup.getIqn());
    host.setLastPinged(System.currentTimeMillis() >> 10);
    host.setHostTags(hostTags);
    host.setDetails(details);
    if (startup.getStorageIpAddressDeux() != null) {
        host.setStorageIpAddressDeux(startup.getStorageIpAddressDeux());
        host.setStorageMacAddressDeux(startup.getStorageMacAddressDeux());
        host.setStorageNetmaskDeux(startup.getStorageNetmaskDeux());
    }
    if (resource != null) {
        /* null when agent is connected agent */
        host.setResource(resource.getClass().getName());
    }
    host = (HostVO) dispatchToStateAdapters(stateEvent, true, host, cmds, resource, details, hostTags);
    if (host == null) {
        throw new CloudRuntimeException("No resource state adapter response");
    }
    if (newHost) {
        host = _hostDao.persist(host);
    } else {
        _hostDao.update(host.getId(), host);
    }
    if (startup instanceof StartupRoutingCommand) {
        final StartupRoutingCommand ssCmd = (StartupRoutingCommand) startup;
        updateSupportsClonedVolumes(host, ssCmd.getSupportsClonedVolumes());
    }
    try {
        resourceStateTransitTo(host, ResourceState.Event.InternalCreated, _nodeId);
        /* Agent goes to Connecting status */
        _agentMgr.agentStatusTransitTo(host, Status.Event.AgentConnected, _nodeId);
    } catch (final Exception e) {
        s_logger.debug("Cannot transmit host " + host.getId() + " to Creating state", e);
        _agentMgr.agentStatusTransitTo(host, Status.Event.Error, _nodeId);
        try {
            resourceStateTransitTo(host, ResourceState.Event.Error, _nodeId);
        } catch (final NoTransitionException e1) {
            s_logger.debug("Cannot transmit host " + host.getId() + "to Error state", e);
        }
    }
    return host;
}
Also used : DataCenterVO(com.cloud.dc.DataCenterVO) ClusterVO(com.cloud.dc.ClusterVO) HostPodVO(com.cloud.dc.HostPodVO) StoragePoolHostVO(com.cloud.storage.StoragePoolHostVO) HostVO(com.cloud.host.HostVO) NoTransitionException(com.cloud.utils.fsm.NoTransitionException) AgentUnavailableException(com.cloud.exception.AgentUnavailableException) CloudRuntimeException(com.cloud.utils.exception.CloudRuntimeException) ResourceInUseException(com.cloud.exception.ResourceInUseException) URISyntaxException(java.net.URISyntaxException) DiscoveryException(com.cloud.exception.DiscoveryException) SshException(com.cloud.utils.ssh.SshException) InvalidParameterValueException(com.cloud.exception.InvalidParameterValueException) ConfigurationException(javax.naming.ConfigurationException) PermissionDeniedException(com.cloud.exception.PermissionDeniedException) StartupCommand(com.cloud.agent.api.StartupCommand) CloudRuntimeException(com.cloud.utils.exception.CloudRuntimeException) NoTransitionException(com.cloud.utils.fsm.NoTransitionException) StartupRoutingCommand(com.cloud.agent.api.StartupRoutingCommand)

Example 29 with StartupRoutingCommand

use of com.cloud.agent.api.StartupRoutingCommand in project cloudstack by apache.

the class BareMetalResourceBase method initialize.

@Override
public StartupCommand[] initialize() {
    StartupRoutingCommand cmd = new StartupRoutingCommand(0, 0, 0, 0, null, Hypervisor.HypervisorType.BareMetal, new HashMap<String, String>());
    cmd.setDataCenter(_zone);
    cmd.setPod(_pod);
    cmd.setCluster(_cluster);
    cmd.setGuid(_uuid);
    cmd.setName(_ip);
    cmd.setPrivateIpAddress(_ip);
    cmd.setStorageIpAddress(_ip);
    cmd.setVersion(BareMetalResourceBase.class.getPackage().getImplementationVersion());
    cmd.setCpus((int) _cpuNum);
    cmd.setSpeed(_cpuCapacity);
    cmd.setMemory(_memCapacity);
    cmd.setPrivateMacAddress(_mac);
    cmd.setPublicMacAddress(_mac);
    return new StartupCommand[] { cmd };
}
Also used : StartupCommand(com.cloud.agent.api.StartupCommand) StartupRoutingCommand(com.cloud.agent.api.StartupRoutingCommand)

Example 30 with StartupRoutingCommand

use of com.cloud.agent.api.StartupRoutingCommand in project cloudstack by apache.

the class HypervDirectConnectResource method initialize.

@Override
public final StartupCommand[] initialize() {
    // assert
    if (!_configureCalled) {
        final String errMsg = this.getClass().getName() + " requires configure() be called before" + " initialize()";
        s_logger.error(errMsg);
    }
    // Create default StartupRoutingCommand, then customise
    final StartupRoutingCommand defaultStartRoutCmd = new StartupRoutingCommand(0, 0, 0, 0, null, Hypervisor.HypervisorType.Hyperv, RouterPrivateIpStrategy.HostLocal);
    // Identity within the data centre is decided by CloudStack kernel,
    // and passed via ServerResource.configure()
    defaultStartRoutCmd.setDataCenter(_zoneId);
    defaultStartRoutCmd.setPod(_podId);
    defaultStartRoutCmd.setCluster(_clusterId);
    defaultStartRoutCmd.setGuid(_guid);
    defaultStartRoutCmd.setName(_name);
    defaultStartRoutCmd.setPrivateIpAddress(_agentIp);
    defaultStartRoutCmd.setStorageIpAddress(_agentIp);
    defaultStartRoutCmd.setPool(_clusterGuid);
    s_logger.debug("Generated StartupRoutingCommand for _agentIp \"" + _agentIp + "\"");
    defaultStartRoutCmd.setVersion(this.getClass().getPackage().getImplementationVersion());
    // Specifics of the host's resource capacity and network configuration
    // comes from the host itself. CloudStack sanity checks network
    // configuration
    // and uses capacity info for resource allocation.
    final Command[] startCmds = requestStartupCommand(new Command[] { defaultStartRoutCmd });
    // TODO: may throw, is this okay?
    final StartupRoutingCommand startCmd = (StartupRoutingCommand) startCmds[0];
    // Assert that host identity is consistent with existing values.
    if (startCmd == null) {
        final String errMsg = String.format("Host %s (IP %s)" + "did not return a StartupRoutingCommand", _name, _agentIp);
        s_logger.error(errMsg);
        // TODO: valid to return null, or should we throw?
        return null;
    }
    if (!startCmd.getDataCenter().equals(defaultStartRoutCmd.getDataCenter())) {
        final String errMsg = String.format("Host %s (IP %s) changed zone/data center.  Was " + defaultStartRoutCmd.getDataCenter() + " NOW its " + startCmd.getDataCenter(), _name, _agentIp);
        s_logger.error(errMsg);
        // TODO: valid to return null, or should we throw?
        return null;
    }
    if (!startCmd.getPod().equals(defaultStartRoutCmd.getPod())) {
        final String errMsg = String.format("Host %s (IP %s) changed pod.  Was " + defaultStartRoutCmd.getPod() + " NOW its " + startCmd.getPod(), _name, _agentIp);
        s_logger.error(errMsg);
        // TODO: valid to return null, or should we throw?
        return null;
    }
    if (!startCmd.getCluster().equals(defaultStartRoutCmd.getCluster())) {
        final String errMsg = String.format("Host %s (IP %s) changed cluster.  Was " + defaultStartRoutCmd.getCluster() + " NOW its " + startCmd.getCluster(), _name, _agentIp);
        s_logger.error(errMsg);
        // TODO: valid to return null, or should we throw?
        return null;
    }
    if (!startCmd.getGuid().equals(defaultStartRoutCmd.getGuid())) {
        final String errMsg = String.format("Host %s (IP %s) changed guid.  Was " + defaultStartRoutCmd.getGuid() + " NOW its " + startCmd.getGuid(), _name, _agentIp);
        s_logger.error(errMsg);
        // TODO: valid to return null, or should we throw?
        return null;
    }
    if (!startCmd.getPrivateIpAddress().equals(defaultStartRoutCmd.getPrivateIpAddress())) {
        final String errMsg = String.format("Host %s (IP %s) IP address.  Was " + defaultStartRoutCmd.getPrivateIpAddress() + " NOW its " + startCmd.getPrivateIpAddress(), _name, _agentIp);
        s_logger.error(errMsg);
        // TODO: valid to return null, or should we throw?
        return null;
    }
    if (!startCmd.getName().equals(defaultStartRoutCmd.getName())) {
        final String errMsg = String.format("Host %s (IP %s) name.  Was " + startCmd.getName() + " NOW its " + defaultStartRoutCmd.getName(), _name, _agentIp);
        s_logger.error(errMsg);
        // TODO: valid to return null, or should we throw?
        return null;
    }
    // Host will also supply details of an existing StoragePool if it has
    // been configured with one.
    //
    // NB: if the host was configured
    // with a local storage pool, CloudStack may not be able to use it
    // unless
    // it is has service offerings configured to recognise this storage
    // type.
    StartupStorageCommand storePoolCmd = null;
    if (startCmds.length > 1) {
        storePoolCmd = (StartupStorageCommand) startCmds[1];
        // TODO: is this assertion required?
        if (storePoolCmd == null) {
            final String frmtStr = "Host %s (IP %s) sent incorrect Command, " + "second parameter should be a " + "StartupStorageCommand";
            final String errMsg = String.format(frmtStr, _name, _agentIp);
            s_logger.error(errMsg);
            // TODO: valid to return null, or should we throw?
            return null;
        }
        s_logger.info("Host " + _name + " (IP " + _agentIp + ") already configured with a storeage pool, details " + s_gson.toJson(startCmds[1]));
    } else {
        s_logger.info("Host " + _name + " (IP " + _agentIp + ") already configured with a storeage pool, details ");
    }
    return new StartupCommand[] { startCmd, storePoolCmd };
}
Also used : StartupCommand(com.cloud.agent.api.StartupCommand) CheckRouterCommand(com.cloud.agent.api.CheckRouterCommand) PlugNicCommand(com.cloud.agent.api.PlugNicCommand) Site2SiteVpnCfgCommand(com.cloud.agent.api.routing.Site2SiteVpnCfgCommand) CheckSshCommand(com.cloud.agent.api.check.CheckSshCommand) SetupGuestNetworkCommand(com.cloud.agent.api.SetupGuestNetworkCommand) DnsMasqConfigCommand(com.cloud.agent.api.routing.DnsMasqConfigCommand) PingTestCommand(com.cloud.agent.api.PingTestCommand) CopyCommand(org.apache.cloudstack.storage.command.CopyCommand) ModifyVmNicConfigCommand(com.cloud.agent.api.ModifyVmNicConfigCommand) UnPlugNicCommand(com.cloud.agent.api.UnPlugNicCommand) SetStaticRouteCommand(com.cloud.agent.api.routing.SetStaticRouteCommand) NetworkElementCommand(com.cloud.agent.api.routing.NetworkElementCommand) SetStaticNatRulesCommand(com.cloud.agent.api.routing.SetStaticNatRulesCommand) VmDataCommand(com.cloud.agent.api.routing.VmDataCommand) SetSourceNatCommand(com.cloud.agent.api.routing.SetSourceNatCommand) CreateIpAliasCommand(com.cloud.agent.api.routing.CreateIpAliasCommand) SetMonitorServiceCommand(com.cloud.agent.api.routing.SetMonitorServiceCommand) CheckS2SVpnConnectionsCommand(com.cloud.agent.api.CheckS2SVpnConnectionsCommand) StartupRoutingCommand(com.cloud.agent.api.StartupRoutingCommand) RemoteAccessVpnCfgCommand(com.cloud.agent.api.routing.RemoteAccessVpnCfgCommand) Command(com.cloud.agent.api.Command) NetworkUsageCommand(com.cloud.agent.api.NetworkUsageCommand) DeleteIpAliasCommand(com.cloud.agent.api.routing.DeleteIpAliasCommand) DhcpEntryCommand(com.cloud.agent.api.routing.DhcpEntryCommand) StartCommand(com.cloud.agent.api.StartCommand) GetVmConfigCommand(com.cloud.agent.api.GetVmConfigCommand) StartupStorageCommand(com.cloud.agent.api.StartupStorageCommand) SetPortForwardingRulesCommand(com.cloud.agent.api.routing.SetPortForwardingRulesCommand) StartupCommand(com.cloud.agent.api.StartupCommand) IpAssocCommand(com.cloud.agent.api.routing.IpAssocCommand) SavePasswordCommand(com.cloud.agent.api.routing.SavePasswordCommand) PingCommand(com.cloud.agent.api.PingCommand) PingRoutingCommand(com.cloud.agent.api.PingRoutingCommand) LoadBalancerConfigCommand(com.cloud.agent.api.routing.LoadBalancerConfigCommand) SetFirewallRulesCommand(com.cloud.agent.api.routing.SetFirewallRulesCommand) IpAssocVpcCommand(com.cloud.agent.api.routing.IpAssocVpcCommand) SetNetworkACLCommand(com.cloud.agent.api.routing.SetNetworkACLCommand) VpnUsersCfgCommand(com.cloud.agent.api.routing.VpnUsersCfgCommand) StartupStorageCommand(com.cloud.agent.api.StartupStorageCommand) StartupRoutingCommand(com.cloud.agent.api.StartupRoutingCommand)

Aggregations

StartupRoutingCommand (com.cloud.agent.api.StartupRoutingCommand)40 StartupCommand (com.cloud.agent.api.StartupCommand)27 StartupStorageCommand (com.cloud.agent.api.StartupStorageCommand)13 CloudRuntimeException (com.cloud.utils.exception.CloudRuntimeException)9 ClusterVO (com.cloud.dc.ClusterVO)6 AgentUnavailableException (com.cloud.exception.AgentUnavailableException)6 ConnectionException (com.cloud.exception.ConnectionException)6 HostVO (com.cloud.host.HostVO)6 DataCenterVO (com.cloud.dc.DataCenterVO)5 ConfigurationException (javax.naming.ConfigurationException)5 HostPodVO (com.cloud.dc.HostPodVO)4 Command (com.cloud.agent.api.Command)3 Commands (com.cloud.agent.manager.Commands)3 HypervisorType (com.cloud.hypervisor.Hypervisor.HypervisorType)3 PingCommand (com.cloud.agent.api.PingCommand)2 PingRoutingCommand (com.cloud.agent.api.PingRoutingCommand)2 SetupAnswer (com.cloud.agent.api.SetupAnswer)2 SetupCommand (com.cloud.agent.api.SetupCommand)2 StartCommand (com.cloud.agent.api.StartCommand)2 StoragePoolInfo (com.cloud.agent.api.StoragePoolInfo)2