Search in sources :

Example 16 with VpcVO

use of com.cloud.network.vpc.VpcVO in project cloudstack by apache.

the class OvsTunnelManagerImpl method handleVmStateChange.

private void handleVmStateChange(VMInstanceVO vm) {
    // get the VPC's impacted with the VM start
    List<Long> vpcIds = _ovsNetworkToplogyGuru.getVpcIdsVmIsPartOf(vm.getId());
    if (vpcIds == null || vpcIds.isEmpty()) {
        return;
    }
    for (Long vpcId : vpcIds) {
        VpcVO vpc = _vpcDao.findById(vpcId);
        // nothing to do if the VPC is not setup for distributed routing
        if (vpc == null || !vpc.usesDistributedRouter()) {
            return;
        }
        // get the list of hosts on which VPC spans (i.e hosts that need to be aware of VPC topology change update)
        List<Long> vpcSpannedHostIds = _ovsNetworkToplogyGuru.getVpcSpannedHosts(vpcId);
        String bridgeName = generateBridgeNameForVpc(vpcId);
        OvsVpcPhysicalTopologyConfigCommand topologyConfigCommand = prepareVpcTopologyUpdate(vpcId);
        topologyConfigCommand.setSequenceNumber(getNextTopologyUpdateSequenceNumber(vpcId));
        // send topology change update to VPC spanned hosts
        for (Long id : vpcSpannedHostIds) {
            if (!sendVpcTopologyChangeUpdate(topologyConfigCommand, id, bridgeName)) {
                s_logger.debug("Failed to send VPC topology change update to host : " + id + ". Moving on " + "with rest of the host update.");
            }
        }
    }
}
Also used : OvsVpcPhysicalTopologyConfigCommand(com.cloud.agent.api.OvsVpcPhysicalTopologyConfigCommand) VpcVO(com.cloud.network.vpc.VpcVO)

Example 17 with VpcVO

use of com.cloud.network.vpc.VpcVO in project cloudstack by apache.

the class OvsTunnelManagerImpl method prepareVpcTopologyUpdate.

OvsVpcPhysicalTopologyConfigCommand prepareVpcTopologyUpdate(long vpcId) {
    VpcVO vpc = _vpcDao.findById(vpcId);
    assert (vpc != null) : "invalid vpc id";
    List<? extends Network> vpcNetworks = _vpcMgr.getVpcNetworks(vpcId);
    List<Long> hostIds = _ovsNetworkToplogyGuru.getVpcSpannedHosts(vpcId);
    List<Long> vmIds = _ovsNetworkToplogyGuru.getAllActiveVmsInVpc(vpcId);
    List<OvsVpcPhysicalTopologyConfigCommand.Host> hosts = new ArrayList<>();
    List<OvsVpcPhysicalTopologyConfigCommand.Tier> tiers = new ArrayList<>();
    List<OvsVpcPhysicalTopologyConfigCommand.Vm> vms = new ArrayList<>();
    for (Long hostId : hostIds) {
        HostVO hostDetails = _hostDao.findById(hostId);
        String remoteIp = null;
        for (Network network : vpcNetworks) {
            try {
                remoteIp = getGreEndpointIP(hostDetails, network);
            } catch (Exception e) {
                s_logger.info("[ignored]" + "error getting GRE endpoint: " + e.getLocalizedMessage());
            }
        }
        OvsVpcPhysicalTopologyConfigCommand.Host host = new OvsVpcPhysicalTopologyConfigCommand.Host(hostId, remoteIp);
        hosts.add(host);
    }
    for (Network network : vpcNetworks) {
        String key = network.getBroadcastUri().getAuthority();
        long gre_key;
        if (key.contains(".")) {
            String[] parts = key.split("\\.");
            gre_key = Long.parseLong(parts[1]);
        } else {
            try {
                gre_key = Long.parseLong(BroadcastDomainType.getValue(key));
            } catch (Exception e) {
                return null;
            }
        }
        NicVO nic = _nicDao.findByIp4AddressAndNetworkId(network.getGateway(), network.getId());
        OvsVpcPhysicalTopologyConfigCommand.Tier tier = new OvsVpcPhysicalTopologyConfigCommand.Tier(gre_key, network.getUuid(), network.getGateway(), nic.getMacAddress(), network.getCidr());
        tiers.add(tier);
    }
    for (long vmId : vmIds) {
        VirtualMachine vmInstance = _vmInstanceDao.findById(vmId);
        List<OvsVpcPhysicalTopologyConfigCommand.Nic> vmNics = new ArrayList<OvsVpcPhysicalTopologyConfigCommand.Nic>();
        for (Nic vmNic : _nicDao.listByVmId(vmId)) {
            Network network = _networkDao.findById(vmNic.getNetworkId());
            if (network.getTrafficType() == TrafficType.Guest) {
                OvsVpcPhysicalTopologyConfigCommand.Nic nic = new OvsVpcPhysicalTopologyConfigCommand.Nic(vmNic.getIPv4Address(), vmNic.getMacAddress(), network.getUuid());
                vmNics.add(nic);
            }
        }
        OvsVpcPhysicalTopologyConfigCommand.Vm vm = new OvsVpcPhysicalTopologyConfigCommand.Vm(vmInstance.getHostId(), vmNics.toArray(new OvsVpcPhysicalTopologyConfigCommand.Nic[vmNics.size()]));
        vms.add(vm);
    }
    return new OvsVpcPhysicalTopologyConfigCommand(hosts.toArray(new OvsVpcPhysicalTopologyConfigCommand.Host[hosts.size()]), tiers.toArray(new OvsVpcPhysicalTopologyConfigCommand.Tier[tiers.size()]), vms.toArray(new OvsVpcPhysicalTopologyConfigCommand.Vm[vms.size()]), vpc.getCidr());
}
Also used : ArrayList(java.util.ArrayList) Network(com.cloud.network.Network) NicVO(com.cloud.vm.NicVO) OvsVpcPhysicalTopologyConfigCommand(com.cloud.agent.api.OvsVpcPhysicalTopologyConfigCommand) Nic(com.cloud.vm.Nic) Host(com.cloud.host.Host) HostVO(com.cloud.host.HostVO) AgentUnavailableException(com.cloud.exception.AgentUnavailableException) EntityExistsException(javax.persistence.EntityExistsException) OperationTimedoutException(com.cloud.exception.OperationTimedoutException) ConfigurationException(javax.naming.ConfigurationException) CloudRuntimeException(com.cloud.utils.exception.CloudRuntimeException) VpcVO(com.cloud.network.vpc.VpcVO) VirtualMachine(com.cloud.vm.VirtualMachine)

Example 18 with VpcVO

use of com.cloud.network.vpc.VpcVO in project cloudstack by apache.

the class ContrailManagerImpl method findManagedACLs.

@Override
public List<NetworkACLVO> findManagedACLs() {
    List<VpcVO> vpcs = findManagedVpcs();
    if (vpcs == null || vpcs.isEmpty()) {
        return null;
    }
    List<Long> vpcIds = new ArrayList<Long>();
    /* default-allow, default-deny ACLs will be under vpcId '0', so include it*/
    vpcIds.add((long) 0);
    for (VpcVO vpc : vpcs) {
        vpcIds.add(vpc.getId());
    }
    SearchBuilder<NetworkACLVO> searchBuilder = _networkAclDao.createSearchBuilder();
    searchBuilder.and("vpcId", searchBuilder.entity().getVpcId(), Op.IN);
    SearchCriteria<NetworkACLVO> sc = searchBuilder.create();
    sc.setParameters("vpcId", vpcIds.toArray());
    List<NetworkACLVO> acls = _networkAclDao.search(sc, null);
    if (acls == null || acls.size() == 0) {
        s_logger.debug("no acls found");
        return null;
    }
    /* only return if acl is associated to any network */
    List<NetworkACLVO> jnprAcls = new ArrayList<NetworkACLVO>();
    for (NetworkACLVO acl : acls) {
        List<NetworkVO> nets = _networksDao.listByAclId(acl.getId());
        if (nets == null || nets.isEmpty()) {
            continue;
        }
        jnprAcls.add(acl);
    }
    return jnprAcls;
}
Also used : NetworkACLVO(com.cloud.network.vpc.NetworkACLVO) VpcVO(com.cloud.network.vpc.VpcVO) PhysicalNetworkVO(com.cloud.network.dao.PhysicalNetworkVO) NetworkVO(com.cloud.network.dao.NetworkVO) ArrayList(java.util.ArrayList)

Example 19 with VpcVO

use of com.cloud.network.vpc.VpcVO in project cloudstack by apache.

the class VpcDaoImpl method persist.

@Override
@DB
public VpcVO persist(VpcVO vpc, Map<String, List<String>> serviceProviderMap) {
    TransactionLegacy txn = TransactionLegacy.currentTxn();
    txn.start();
    VpcVO newVpc = super.persist(vpc);
    persistVpcServiceProviders(vpc.getId(), serviceProviderMap);
    txn.commit();
    return newVpc;
}
Also used : TransactionLegacy(com.cloud.utils.db.TransactionLegacy) VpcVO(com.cloud.network.vpc.VpcVO) DB(com.cloud.utils.db.DB)

Aggregations

VpcVO (com.cloud.network.vpc.VpcVO)19 NetworkACLItemVO (com.cloud.network.vpc.NetworkACLItemVO)6 Network (com.cloud.network.Network)4 Vpc (com.cloud.network.vpc.Vpc)4 CloudRuntimeException (com.cloud.utils.exception.CloudRuntimeException)4 Test (org.junit.Test)4 ConcurrentOperationException (com.cloud.exception.ConcurrentOperationException)3 IPAddressVO (com.cloud.network.dao.IPAddressVO)3 DB (com.cloud.utils.db.DB)3 ArrayList (java.util.ArrayList)3 NetworkUsageCommand (com.cloud.agent.api.NetworkUsageCommand)2 OvsVpcPhysicalTopologyConfigCommand (com.cloud.agent.api.OvsVpcPhysicalTopologyConfigCommand)2 AgentUnavailableException (com.cloud.exception.AgentUnavailableException)2 InsufficientCapacityException (com.cloud.exception.InsufficientCapacityException)2 InternalErrorException (com.cloud.exception.InternalErrorException)2 OperationTimedoutException (com.cloud.exception.OperationTimedoutException)2 PublicIp (com.cloud.network.addr.PublicIp)2 NetworkACLVO (com.cloud.network.vpc.NetworkACLVO)2 Account (com.cloud.user.Account)2 UserStatisticsVO (com.cloud.user.UserStatisticsVO)2