Search in sources :

Example 11 with ResourceTagVO

use of com.cloud.tags.ResourceTagVO in project cloudstack by apache.

the class NetworkServiceImpl method searchForNetworks.

@Override
public Pair<List<? extends Network>, Integer> searchForNetworks(ListNetworksCmd cmd) {
    Long id = cmd.getId();
    String keyword = cmd.getKeyword();
    Long zoneId = cmd.getZoneId();
    Account caller = CallContext.current().getCallingAccount();
    Long domainId = cmd.getDomainId();
    String accountName = cmd.getAccountName();
    String guestIpType = cmd.getGuestIpType();
    String trafficType = cmd.getTrafficType();
    Boolean isSystem = cmd.getIsSystem();
    String aclType = cmd.getAclType();
    Long projectId = cmd.getProjectId();
    List<Long> permittedAccounts = new ArrayList<Long>();
    String path = null;
    Long physicalNetworkId = cmd.getPhysicalNetworkId();
    List<String> supportedServicesStr = cmd.getSupportedServices();
    Boolean restartRequired = cmd.getRestartRequired();
    boolean listAll = cmd.listAll();
    boolean isRecursive = cmd.isRecursive();
    Boolean specifyIpRanges = cmd.getSpecifyIpRanges();
    Long vpcId = cmd.getVpcId();
    Boolean canUseForDeploy = cmd.canUseForDeploy();
    Map<String, String> tags = cmd.getTags();
    Boolean forVpc = cmd.getForVpc();
    Boolean display = cmd.getDisplay();
    // 2) reset parameter to false if it's specified by the regular user
    if ((isSystem == null || _accountMgr.isNormalUser(caller.getId())) && id == null) {
        isSystem = false;
    }
    // Account/domainId parameters and isSystem are mutually exclusive
    if (isSystem != null && isSystem && (accountName != null || domainId != null)) {
        throw new InvalidParameterValueException("System network belongs to system, account and domainId parameters can't be specified");
    }
    if (domainId != null) {
        DomainVO domain = _domainDao.findById(domainId);
        if (domain == null) {
            // see DomainVO.java
            throw new InvalidParameterValueException("Specified domain id doesn't exist in the system");
        }
        _accountMgr.checkAccess(caller, domain);
        if (accountName != null) {
            Account owner = _accountMgr.getActiveAccountByName(accountName, domainId);
            if (owner == null) {
                // see DomainVO.java
                throw new InvalidParameterValueException("Unable to find account " + accountName + " in specified domain");
            }
            _accountMgr.checkAccess(caller, null, true, owner);
            permittedAccounts.add(owner.getId());
        }
    }
    if (!_accountMgr.isAdmin(caller.getId()) || (projectId != null && projectId.longValue() != -1 && domainId == null)) {
        permittedAccounts.add(caller.getId());
        domainId = caller.getDomainId();
    }
    // set project information
    boolean skipProjectNetworks = true;
    if (projectId != null) {
        if (projectId.longValue() == -1) {
            if (!_accountMgr.isAdmin(caller.getId())) {
                permittedAccounts.addAll(_projectMgr.listPermittedProjectAccounts(caller.getId()));
            }
        } else {
            permittedAccounts.clear();
            Project project = _projectMgr.getProject(projectId);
            if (project == null) {
                throw new InvalidParameterValueException("Unable to find project by specified id");
            }
            if (!_projectMgr.canAccessProjectAccount(caller, project.getProjectAccountId())) {
                // getProject() returns type ProjectVO.
                InvalidParameterValueException ex = new InvalidParameterValueException("Account " + caller + " cannot access specified project id");
                ex.addProxyObject(project.getUuid(), "projectId");
                throw ex;
            }
            //add project account
            permittedAccounts.add(project.getProjectAccountId());
            //add caller account (if admin)
            if (_accountMgr.isAdmin(caller.getId())) {
                permittedAccounts.add(caller.getId());
            }
        }
        skipProjectNetworks = false;
    }
    if (domainId != null) {
        path = _domainDao.findById(domainId).getPath();
    } else {
        path = _domainDao.findById(caller.getDomainId()).getPath();
    }
    if (listAll && domainId == null) {
        isRecursive = true;
    }
    Filter searchFilter = new Filter(NetworkVO.class, "id", false, null, null);
    SearchBuilder<NetworkVO> sb = _networksDao.createSearchBuilder();
    if (forVpc != null) {
        if (forVpc) {
            sb.and("vpc", sb.entity().getVpcId(), Op.NNULL);
        } else {
            sb.and("vpc", sb.entity().getVpcId(), Op.NULL);
        }
    }
    // Don't display networks created of system network offerings
    SearchBuilder<NetworkOfferingVO> networkOfferingSearch = _networkOfferingDao.createSearchBuilder();
    networkOfferingSearch.and("systemOnly", networkOfferingSearch.entity().isSystemOnly(), SearchCriteria.Op.EQ);
    if (isSystem != null && isSystem) {
        networkOfferingSearch.and("trafficType", networkOfferingSearch.entity().getTrafficType(), SearchCriteria.Op.EQ);
    }
    sb.join("networkOfferingSearch", networkOfferingSearch, sb.entity().getNetworkOfferingId(), networkOfferingSearch.entity().getId(), JoinBuilder.JoinType.INNER);
    SearchBuilder<DataCenterVO> zoneSearch = _dcDao.createSearchBuilder();
    zoneSearch.and("networkType", zoneSearch.entity().getNetworkType(), SearchCriteria.Op.EQ);
    sb.join("zoneSearch", zoneSearch, sb.entity().getDataCenterId(), zoneSearch.entity().getId(), JoinBuilder.JoinType.INNER);
    sb.and("removed", sb.entity().getRemoved(), Op.NULL);
    if (tags != null && !tags.isEmpty()) {
        SearchBuilder<ResourceTagVO> tagSearch = _resourceTagDao.createSearchBuilder();
        for (int count = 0; count < tags.size(); count++) {
            tagSearch.or().op("key" + String.valueOf(count), tagSearch.entity().getKey(), SearchCriteria.Op.EQ);
            tagSearch.and("value" + String.valueOf(count), tagSearch.entity().getValue(), SearchCriteria.Op.EQ);
            tagSearch.cp();
        }
        tagSearch.and("resourceType", tagSearch.entity().getResourceType(), SearchCriteria.Op.EQ);
        sb.groupBy(sb.entity().getId());
        sb.join("tagSearch", tagSearch, sb.entity().getId(), tagSearch.entity().getResourceId(), JoinBuilder.JoinType.INNER);
    }
    if (permittedAccounts.isEmpty()) {
        SearchBuilder<DomainVO> domainSearch = _domainDao.createSearchBuilder();
        domainSearch.and("path", domainSearch.entity().getPath(), SearchCriteria.Op.LIKE);
        sb.join("domainSearch", domainSearch, sb.entity().getDomainId(), domainSearch.entity().getId(), JoinBuilder.JoinType.INNER);
    }
    SearchBuilder<AccountVO> accountSearch = _accountDao.createSearchBuilder();
    accountSearch.and("typeNEQ", accountSearch.entity().getType(), SearchCriteria.Op.NEQ);
    accountSearch.and("typeEQ", accountSearch.entity().getType(), SearchCriteria.Op.EQ);
    sb.join("accountSearch", accountSearch, sb.entity().getAccountId(), accountSearch.entity().getId(), JoinBuilder.JoinType.INNER);
    List<NetworkVO> networksToReturn = new ArrayList<NetworkVO>();
    if (isSystem == null || !isSystem) {
        if (!permittedAccounts.isEmpty()) {
            //get account level networks
            networksToReturn.addAll(listAccountSpecificNetworks(buildNetworkSearchCriteria(sb, keyword, id, isSystem, zoneId, guestIpType, trafficType, physicalNetworkId, aclType, skipProjectNetworks, restartRequired, specifyIpRanges, vpcId, tags, display), searchFilter, permittedAccounts));
            //get domain level networks
            if (domainId != null) {
                networksToReturn.addAll(listDomainLevelNetworks(buildNetworkSearchCriteria(sb, keyword, id, isSystem, zoneId, guestIpType, trafficType, physicalNetworkId, aclType, true, restartRequired, specifyIpRanges, vpcId, tags, display), searchFilter, domainId, false));
            }
        } else {
            //add account specific networks
            networksToReturn.addAll(listAccountSpecificNetworksByDomainPath(buildNetworkSearchCriteria(sb, keyword, id, isSystem, zoneId, guestIpType, trafficType, physicalNetworkId, aclType, skipProjectNetworks, restartRequired, specifyIpRanges, vpcId, tags, display), searchFilter, path, isRecursive));
            //add domain specific networks of domain + parent domains
            networksToReturn.addAll(listDomainSpecificNetworksByDomainPath(buildNetworkSearchCriteria(sb, keyword, id, isSystem, zoneId, guestIpType, trafficType, physicalNetworkId, aclType, skipProjectNetworks, restartRequired, specifyIpRanges, vpcId, tags, display), searchFilter, path, isRecursive));
            //add networks of subdomains
            if (domainId == null) {
                networksToReturn.addAll(listDomainLevelNetworks(buildNetworkSearchCriteria(sb, keyword, id, isSystem, zoneId, guestIpType, trafficType, physicalNetworkId, aclType, true, restartRequired, specifyIpRanges, vpcId, tags, display), searchFilter, caller.getDomainId(), true));
            }
        }
    } else {
        networksToReturn = _networksDao.search(buildNetworkSearchCriteria(sb, keyword, id, isSystem, zoneId, guestIpType, trafficType, physicalNetworkId, null, skipProjectNetworks, restartRequired, specifyIpRanges, vpcId, tags, display), searchFilter);
    }
    if (supportedServicesStr != null && !supportedServicesStr.isEmpty() && !networksToReturn.isEmpty()) {
        List<NetworkVO> supportedNetworks = new ArrayList<NetworkVO>();
        Service[] suppportedServices = new Service[supportedServicesStr.size()];
        int i = 0;
        for (String supportedServiceStr : supportedServicesStr) {
            Service service = Service.getService(supportedServiceStr);
            if (service == null) {
                throw new InvalidParameterValueException("Invalid service specified " + supportedServiceStr);
            } else {
                suppportedServices[i] = service;
            }
            i++;
        }
        for (NetworkVO network : networksToReturn) {
            if (areServicesSupportedInNetwork(network.getId(), suppportedServices)) {
                supportedNetworks.add(network);
            }
        }
        networksToReturn = supportedNetworks;
    }
    if (canUseForDeploy != null) {
        List<NetworkVO> networksForDeploy = new ArrayList<NetworkVO>();
        for (NetworkVO network : networksToReturn) {
            if (_networkModel.canUseForDeploy(network) == canUseForDeploy) {
                networksForDeploy.add(network);
            }
        }
        networksToReturn = networksForDeploy;
    }
    //Now apply pagination
    List<? extends Network> wPagination = StringUtils.applyPagination(networksToReturn, cmd.getStartIndex(), cmd.getPageSizeVal());
    if (wPagination != null) {
        Pair<List<? extends Network>, Integer> listWPagination = new Pair<List<? extends Network>, Integer>(wPagination, networksToReturn.size());
        return listWPagination;
    }
    return new Pair<List<? extends Network>, Integer>(networksToReturn, networksToReturn.size());
}
Also used : Account(com.cloud.user.Account) ArrayList(java.util.ArrayList) AccountVO(com.cloud.user.AccountVO) InvalidParameterValueException(com.cloud.exception.InvalidParameterValueException) ResourceTagVO(com.cloud.tags.ResourceTagVO) ArrayList(java.util.ArrayList) List(java.util.List) Pair(com.cloud.utils.Pair) DataCenterVO(com.cloud.dc.DataCenterVO) PhysicalNetworkVO(com.cloud.network.dao.PhysicalNetworkVO) NetworkVO(com.cloud.network.dao.NetworkVO) NetworkOrchestrationService(org.apache.cloudstack.engine.orchestration.service.NetworkOrchestrationService) Service(com.cloud.network.Network.Service) LoadBalancingRulesService(com.cloud.network.lb.LoadBalancingRulesService) SecurityGroupService(com.cloud.network.security.SecurityGroupService) ResourceLimitService(com.cloud.user.ResourceLimitService) InternalLoadBalancerElementService(org.apache.cloudstack.network.element.InternalLoadBalancerElementService) NetworkDomainVO(com.cloud.network.dao.NetworkDomainVO) DomainVO(com.cloud.domain.DomainVO) Project(com.cloud.projects.Project) Filter(com.cloud.utils.db.Filter) NetworkOfferingVO(com.cloud.offerings.NetworkOfferingVO)

Example 12 with ResourceTagVO

use of com.cloud.tags.ResourceTagVO in project cloudstack by apache.

the class ManagementServerImpl method searchForIPAddresses.

@Override
public Pair<List<? extends IpAddress>, Integer> searchForIPAddresses(final ListPublicIpAddressesCmd cmd) {
    final Object keyword = cmd.getKeyword();
    final Long physicalNetworkId = cmd.getPhysicalNetworkId();
    final Long associatedNetworkId = cmd.getAssociatedNetworkId();
    final Long zone = cmd.getZoneId();
    final String address = cmd.getIpAddress();
    final Long vlan = cmd.getVlanId();
    final Boolean forVirtualNetwork = cmd.isForVirtualNetwork();
    final Boolean forLoadBalancing = cmd.isForLoadBalancing();
    final Long ipId = cmd.getId();
    final Boolean sourceNat = cmd.getIsSourceNat();
    final Boolean staticNat = cmd.getIsStaticNat();
    final Long vpcId = cmd.getVpcId();
    final Boolean forDisplay = cmd.getDisplay();
    final Map<String, String> tags = cmd.getTags();
    final String state = cmd.getState();
    Boolean isAllocated = cmd.isAllocatedOnly();
    if (isAllocated == null) {
        isAllocated = Boolean.TRUE;
        if (state != null) {
            isAllocated = Boolean.FALSE;
        }
    }
    final Filter searchFilter = new Filter(IPAddressVO.class, "address", false, cmd.getStartIndex(), cmd.getPageSizeVal());
    final SearchBuilder<IPAddressVO> sb = _publicIpAddressDao.createSearchBuilder();
    Long domainId = null;
    Boolean isRecursive = null;
    final List<Long> permittedAccounts = new ArrayList<Long>();
    ListProjectResourcesCriteria listProjectResourcesCriteria = null;
    if (isAllocated) {
        final Account caller = getCaller();
        final Ternary<Long, Boolean, ListProjectResourcesCriteria> domainIdRecursiveListProject = new Ternary<Long, Boolean, ListProjectResourcesCriteria>(cmd.getDomainId(), cmd.isRecursive(), null);
        _accountMgr.buildACLSearchParameters(caller, cmd.getId(), cmd.getAccountName(), cmd.getProjectId(), permittedAccounts, domainIdRecursiveListProject, cmd.listAll(), false);
        domainId = domainIdRecursiveListProject.first();
        isRecursive = domainIdRecursiveListProject.second();
        listProjectResourcesCriteria = domainIdRecursiveListProject.third();
        _accountMgr.buildACLSearchBuilder(sb, domainId, isRecursive, permittedAccounts, listProjectResourcesCriteria);
    }
    sb.and("dataCenterId", sb.entity().getDataCenterId(), SearchCriteria.Op.EQ);
    sb.and("address", sb.entity().getAddress(), SearchCriteria.Op.EQ);
    sb.and("vlanDbId", sb.entity().getVlanId(), SearchCriteria.Op.EQ);
    sb.and("id", sb.entity().getId(), SearchCriteria.Op.EQ);
    sb.and("physicalNetworkId", sb.entity().getPhysicalNetworkId(), SearchCriteria.Op.EQ);
    sb.and("associatedNetworkIdEq", sb.entity().getAssociatedWithNetworkId(), SearchCriteria.Op.EQ);
    sb.and("isSourceNat", sb.entity().isSourceNat(), SearchCriteria.Op.EQ);
    sb.and("isStaticNat", sb.entity().isOneToOneNat(), SearchCriteria.Op.EQ);
    sb.and("vpcId", sb.entity().getVpcId(), SearchCriteria.Op.EQ);
    sb.and("state", sb.entity().getState(), SearchCriteria.Op.EQ);
    sb.and("display", sb.entity().isDisplay(), SearchCriteria.Op.EQ);
    if (forLoadBalancing != null && forLoadBalancing) {
        final SearchBuilder<LoadBalancerVO> lbSearch = _loadbalancerDao.createSearchBuilder();
        sb.join("lbSearch", lbSearch, sb.entity().getId(), lbSearch.entity().getSourceIpAddressId(), JoinType.INNER);
        sb.groupBy(sb.entity().getId());
    }
    if (keyword != null && address == null) {
        sb.and("addressLIKE", sb.entity().getAddress(), SearchCriteria.Op.LIKE);
    }
    if (tags != null && !tags.isEmpty()) {
        final SearchBuilder<ResourceTagVO> tagSearch = _resourceTagDao.createSearchBuilder();
        for (int count = 0; count < tags.size(); count++) {
            tagSearch.or().op("key" + String.valueOf(count), tagSearch.entity().getKey(), SearchCriteria.Op.EQ);
            tagSearch.and("value" + String.valueOf(count), tagSearch.entity().getValue(), SearchCriteria.Op.EQ);
            tagSearch.cp();
        }
        tagSearch.and("resourceType", tagSearch.entity().getResourceType(), SearchCriteria.Op.EQ);
        sb.groupBy(sb.entity().getId());
        sb.join("tagSearch", tagSearch, sb.entity().getId(), tagSearch.entity().getResourceId(), JoinBuilder.JoinType.INNER);
    }
    final SearchBuilder<VlanVO> vlanSearch = _vlanDao.createSearchBuilder();
    vlanSearch.and("vlanType", vlanSearch.entity().getVlanType(), SearchCriteria.Op.EQ);
    sb.join("vlanSearch", vlanSearch, sb.entity().getVlanId(), vlanSearch.entity().getId(), JoinBuilder.JoinType.INNER);
    boolean allocatedOnly = false;
    if (isAllocated != null && isAllocated == true) {
        sb.and("allocated", sb.entity().getAllocatedTime(), SearchCriteria.Op.NNULL);
        allocatedOnly = true;
    }
    VlanType vlanType = null;
    if (forVirtualNetwork != null) {
        vlanType = forVirtualNetwork ? VlanType.VirtualNetwork : VlanType.DirectAttached;
    } else {
        vlanType = VlanType.VirtualNetwork;
    }
    final SearchCriteria<IPAddressVO> sc = sb.create();
    if (isAllocated) {
        _accountMgr.buildACLSearchCriteria(sc, domainId, isRecursive, permittedAccounts, listProjectResourcesCriteria);
    }
    sc.setJoinParameters("vlanSearch", "vlanType", vlanType);
    if (tags != null && !tags.isEmpty()) {
        int count = 0;
        sc.setJoinParameters("tagSearch", "resourceType", ResourceObjectType.PublicIpAddress.toString());
        for (final String key : tags.keySet()) {
            sc.setJoinParameters("tagSearch", "key" + String.valueOf(count), key);
            sc.setJoinParameters("tagSearch", "value" + String.valueOf(count), tags.get(key));
            count++;
        }
    }
    if (zone != null) {
        sc.setParameters("dataCenterId", zone);
    }
    if (vpcId != null) {
        sc.setParameters("vpcId", vpcId);
    }
    if (ipId != null) {
        sc.setParameters("id", ipId);
    }
    if (sourceNat != null) {
        sc.setParameters("isSourceNat", sourceNat);
    }
    if (staticNat != null) {
        sc.setParameters("isStaticNat", staticNat);
    }
    if (address == null && keyword != null) {
        sc.setParameters("addressLIKE", "%" + keyword + "%");
    }
    if (address != null) {
        sc.setParameters("address", address);
    }
    if (vlan != null) {
        sc.setParameters("vlanDbId", vlan);
    }
    if (physicalNetworkId != null) {
        sc.setParameters("physicalNetworkId", physicalNetworkId);
    }
    if (associatedNetworkId != null) {
        sc.setParameters("associatedNetworkIdEq", associatedNetworkId);
    }
    if (forDisplay != null) {
        sc.setParameters("display", forDisplay);
    }
    if (state != null) {
        sc.setParameters("state", state);
    }
    final Pair<List<IPAddressVO>, Integer> result = _publicIpAddressDao.searchAndCount(sc, searchFilter);
    return new Pair<List<? extends IpAddress>, Integer>(result.first(), result.second());
}
Also used : Account(com.cloud.user.Account) ArrayList(java.util.ArrayList) LoadBalancerVO(com.cloud.network.dao.LoadBalancerVO) ResourceTagVO(com.cloud.tags.ResourceTagVO) ArrayList(java.util.ArrayList) ExcludeList(com.cloud.deploy.DeploymentPlanner.ExcludeList) List(java.util.List) VlanVO(com.cloud.dc.VlanVO) VlanType(com.cloud.dc.Vlan.VlanType) Pair(com.cloud.utils.Pair) SSHKeyPair(com.cloud.user.SSHKeyPair) Ternary(com.cloud.utils.Ternary) ListProjectResourcesCriteria(com.cloud.projects.Project.ListProjectResourcesCriteria) Filter(com.cloud.utils.db.Filter) IPAddressVO(com.cloud.network.dao.IPAddressVO)

Aggregations

ResourceTagVO (com.cloud.tags.ResourceTagVO)12 Account (com.cloud.user.Account)11 Filter (com.cloud.utils.db.Filter)11 ArrayList (java.util.ArrayList)11 List (java.util.List)11 Pair (com.cloud.utils.Pair)10 ListProjectResourcesCriteria (com.cloud.projects.Project.ListProjectResourcesCriteria)9 Ternary (com.cloud.utils.Ternary)9 InvalidParameterValueException (com.cloud.exception.InvalidParameterValueException)6 IPAddressVO (com.cloud.network.dao.IPAddressVO)4 DomainVO (com.cloud.domain.DomainVO)2 Service (com.cloud.network.Network.Service)2 LoadBalancerVO (com.cloud.network.dao.LoadBalancerVO)2 ResourceLimitService (com.cloud.user.ResourceLimitService)2 Map (java.util.Map)2 DataCenterJoinVO (com.cloud.api.query.vo.DataCenterJoinVO)1 ResourceType (com.cloud.configuration.Resource.ResourceType)1 DataCenterVO (com.cloud.dc.DataCenterVO)1 VlanType (com.cloud.dc.Vlan.VlanType)1 VlanVO (com.cloud.dc.VlanVO)1