Search in sources :

Example 36 with DomainVO

use of com.cloud.domain.DomainVO in project cloudstack by apache.

the class QuotaAlertManagerImpl method sendQuotaAlert.

@Override
public void sendQuotaAlert(DeferredQuotaEmail emailToBeSent) {
    final AccountVO account = emailToBeSent.getAccount();
    final BigDecimal balance = emailToBeSent.getQuotaBalance();
    final BigDecimal usage = emailToBeSent.getQuotaUsage();
    final QuotaConfig.QuotaEmailTemplateTypes emailType = emailToBeSent.getEmailTemplateType();
    final List<QuotaEmailTemplatesVO> emailTemplates = _quotaEmailTemplateDao.listAllQuotaEmailTemplates(emailType.toString());
    if (emailTemplates != null && emailTemplates.get(0) != null) {
        final QuotaEmailTemplatesVO emailTemplate = emailTemplates.get(0);
        final DomainVO accountDomain = _domainDao.findByIdIncludingRemoved(account.getDomainId());
        final List<UserVO> usersInAccount = _userDao.listByAccount(account.getId());
        String userNames = "";
        final List<String> emailRecipients = new ArrayList<String>();
        for (UserVO user : usersInAccount) {
            userNames += String.format("%s <%s>,", user.getUsername(), user.getEmail());
            emailRecipients.add(user.getEmail());
        }
        if (userNames.endsWith(",")) {
            userNames = userNames.substring(0, userNames.length() - 1);
        }
        final Map<String, String> optionMap = new HashMap<String, String>();
        optionMap.put("accountName", account.getAccountName());
        optionMap.put("accountID", account.getUuid());
        optionMap.put("accountUsers", userNames);
        optionMap.put("domainName", accountDomain.getName());
        optionMap.put("domainID", accountDomain.getUuid());
        optionMap.put("quotaBalance", QuotaConfig.QuotaCurrencySymbol.value() + " " + balance.toString());
        if (emailType == QuotaEmailTemplateTypes.QUOTA_STATEMENT) {
            optionMap.put("quotaUsage", QuotaConfig.QuotaCurrencySymbol.value() + " " + usage.toString());
        }
        if (s_logger.isDebugEnabled()) {
            s_logger.debug("accountName" + account.getAccountName() + "accountID" + account.getUuid() + "accountUsers" + userNames + "domainName" + accountDomain.getName() + "domainID" + accountDomain.getUuid());
        }
        final StrSubstitutor templateEngine = new StrSubstitutor(optionMap);
        final String subject = templateEngine.replace(emailTemplate.getTemplateSubject());
        final String body = templateEngine.replace(emailTemplate.getTemplateBody());
        try {
            sendQuotaAlert(account.getUuid(), emailRecipients, subject, body);
            emailToBeSent.sentSuccessfully(_quotaAcc);
        } catch (Exception e) {
            s_logger.error(String.format("Unable to send quota alert email (subject=%s; body=%s) to account %s (%s) recipients (%s) due to error (%s)", subject, body, account.getAccountName(), account.getUuid(), emailRecipients, e));
            if (s_logger.isDebugEnabled()) {
                s_logger.debug("Exception", e);
            }
        }
    } else {
        s_logger.error(String.format("No quota email template found for type %s, cannot send quota alert email to account %s(%s)", emailType, account.getAccountName(), account.getUuid()));
    }
}
Also used : QuotaEmailTemplatesVO(org.apache.cloudstack.quota.vo.QuotaEmailTemplatesVO) HashMap(java.util.HashMap) ArrayList(java.util.ArrayList) QuotaEmailTemplateTypes(org.apache.cloudstack.quota.constant.QuotaConfig.QuotaEmailTemplateTypes) QuotaAccountVO(org.apache.cloudstack.quota.vo.QuotaAccountVO) AccountVO(com.cloud.user.AccountVO) BigDecimal(java.math.BigDecimal) ConfigurationException(javax.naming.ConfigurationException) DomainVO(com.cloud.domain.DomainVO) StrSubstitutor(org.apache.commons.lang3.text.StrSubstitutor) UserVO(com.cloud.user.UserVO) QuotaConfig(org.apache.cloudstack.quota.constant.QuotaConfig)

Example 37 with DomainVO

use of com.cloud.domain.DomainVO in project cloudstack by apache.

the class NetworkServiceImpl method listDedicatedGuestVlanRanges.

@Override
public Pair<List<? extends GuestVlan>, Integer> listDedicatedGuestVlanRanges(ListDedicatedGuestVlanRangesCmd cmd) {
    Long id = cmd.getId();
    String accountName = cmd.getAccountName();
    Long domainId = cmd.getDomainId();
    Long projectId = cmd.getProjectId();
    String guestVlanRange = cmd.getGuestVlanRange();
    Long physicalNetworkId = cmd.getPhysicalNetworkId();
    Long zoneId = cmd.getZoneId();
    Long accountId = null;
    if (accountName != null && domainId != null) {
        if (projectId != null) {
            throw new InvalidParameterValueException("Account and projectId can't be specified together");
        }
        Account account = _accountDao.findActiveAccount(accountName, domainId);
        if (account == null) {
            InvalidParameterValueException ex = new InvalidParameterValueException("Unable to find account " + accountName);
            DomainVO domain = ApiDBUtils.findDomainById(domainId);
            String domainUuid = domainId.toString();
            if (domain != null) {
                domainUuid = domain.getUuid();
            }
            ex.addProxyObject(domainUuid, "domainId");
            throw ex;
        } else {
            accountId = account.getId();
        }
    }
    // set project information
    if (projectId != null) {
        Project project = _projectMgr.getProject(projectId);
        if (project == null) {
            throwInvalidIdException("Unable to find project by id " + projectId, projectId.toString(), "projectId");
        }
        accountId = project.getProjectAccountId();
    }
    SearchBuilder<AccountGuestVlanMapVO> sb = _accountGuestVlanMapDao.createSearchBuilder();
    sb.and("id", sb.entity().getId(), SearchCriteria.Op.EQ);
    sb.and("accountId", sb.entity().getAccountId(), SearchCriteria.Op.EQ);
    sb.and("guestVlanRange", sb.entity().getGuestVlanRange(), SearchCriteria.Op.EQ);
    sb.and("physicalNetworkId", sb.entity().getPhysicalNetworkId(), SearchCriteria.Op.EQ);
    if (zoneId != null) {
        SearchBuilder<PhysicalNetworkVO> physicalnetworkSearch = _physicalNetworkDao.createSearchBuilder();
        physicalnetworkSearch.and("zoneId", physicalnetworkSearch.entity().getDataCenterId(), SearchCriteria.Op.EQ);
        sb.join("physicalnetworkSearch", physicalnetworkSearch, sb.entity().getPhysicalNetworkId(), physicalnetworkSearch.entity().getId(), JoinBuilder.JoinType.INNER);
    }
    SearchCriteria<AccountGuestVlanMapVO> sc = sb.create();
    if (id != null) {
        sc.setParameters("id", id);
    }
    if (accountId != null) {
        sc.setParameters("accountId", accountId);
    }
    if (guestVlanRange != null) {
        sc.setParameters("guestVlanRange", guestVlanRange);
    }
    if (physicalNetworkId != null) {
        sc.setParameters("physicalNetworkId", physicalNetworkId);
    }
    if (zoneId != null) {
        sc.setJoinParameters("physicalnetworkSearch", "zoneId", zoneId);
    }
    Filter searchFilter = new Filter(AccountGuestVlanMapVO.class, "id", true, cmd.getStartIndex(), cmd.getPageSizeVal());
    Pair<List<AccountGuestVlanMapVO>, Integer> result = _accountGuestVlanMapDao.searchAndCount(sc, searchFilter);
    return new Pair<List<? extends GuestVlan>, Integer>(result.first(), result.second());
}
Also used : Account(com.cloud.user.Account) AccountGuestVlanMapVO(com.cloud.network.dao.AccountGuestVlanMapVO) NetworkDomainVO(com.cloud.network.dao.NetworkDomainVO) DomainVO(com.cloud.domain.DomainVO) Project(com.cloud.projects.Project) InvalidParameterValueException(com.cloud.exception.InvalidParameterValueException) Filter(com.cloud.utils.db.Filter) PhysicalNetworkVO(com.cloud.network.dao.PhysicalNetworkVO) ArrayList(java.util.ArrayList) List(java.util.List) Pair(com.cloud.utils.Pair)

Example 38 with DomainVO

use of com.cloud.domain.DomainVO in project cloudstack by apache.

the class NetworkModelImpl method checkNetworkPermissions.

@Override
public void checkNetworkPermissions(Account owner, Network network) {
    // we better make sure at runtime.
    if (network == null) {
        throw new CloudRuntimeException("cannot check permissions on (Network) <null>");
    }
    // Perform account permission check
    if (network.getGuestType() != GuestType.Shared || network.getAclType() == ACLType.Account) {
        AccountVO networkOwner = _accountDao.findById(network.getAccountId());
        if (networkOwner == null)
            throw new PermissionDeniedException("Unable to use network with id= " + ((NetworkVO) network).getUuid() + ", network does not have an owner");
        if (owner.getType() != Account.ACCOUNT_TYPE_PROJECT && networkOwner.getType() == Account.ACCOUNT_TYPE_PROJECT) {
            User user = CallContext.current().getCallingUser();
            Project project = projectDao.findByProjectAccountId(network.getAccountId());
            if (project == null) {
                throw new CloudRuntimeException("Unable to find project to which the network belongs to");
            }
            ProjectAccount projectAccountUser = _projectAccountDao.findByProjectIdUserId(project.getId(), user.getAccountId(), user.getId());
            if (projectAccountUser != null) {
                if (!_projectAccountDao.canUserAccessProjectAccount(user.getAccountId(), user.getId(), network.getAccountId())) {
                    throw new PermissionDeniedException("Unable to use network with id= " + ((NetworkVO) network).getUuid() + ", permission denied");
                }
            } else {
                if (!_projectAccountDao.canAccessProjectAccount(owner.getAccountId(), network.getAccountId())) {
                    throw new PermissionDeniedException("Unable to use network with id= " + ((NetworkVO) network).getUuid() + ", permission denied");
                }
            }
        } else {
            List<NetworkVO> networkMap = _networksDao.listBy(owner.getId(), network.getId());
            if (networkMap == null || networkMap.isEmpty()) {
                throw new PermissionDeniedException("Unable to use network with id= " + ((NetworkVO) network).getUuid() + ", permission denied");
            }
        }
    } else {
        if (!isNetworkAvailableInDomain(network.getId(), owner.getDomainId())) {
            DomainVO ownerDomain = _domainDao.findById(owner.getDomainId());
            if (ownerDomain == null) {
                throw new CloudRuntimeException("cannot check permission on account " + owner.getAccountName() + " whose domain does not exist");
            }
            throw new PermissionDeniedException("Shared network id=" + ((NetworkVO) network).getUuid() + " is not available in domain id=" + ownerDomain.getUuid());
        }
    }
}
Also used : Project(com.cloud.projects.Project) ProjectAccount(com.cloud.projects.ProjectAccount) NetworkDomainVO(com.cloud.network.dao.NetworkDomainVO) DomainVO(com.cloud.domain.DomainVO) PhysicalNetworkVO(com.cloud.network.dao.PhysicalNetworkVO) NetworkVO(com.cloud.network.dao.NetworkVO) User(com.cloud.user.User) CloudRuntimeException(com.cloud.utils.exception.CloudRuntimeException) PermissionDeniedException(com.cloud.exception.PermissionDeniedException) AccountVO(com.cloud.user.AccountVO)

Example 39 with DomainVO

use of com.cloud.domain.DomainVO in project cloudstack by apache.

the class ConfigurationManagerImpl method createZone.

@Override
@ActionEvent(eventType = EventTypes.EVENT_ZONE_CREATE, eventDescription = "creating zone", async = false)
public DataCenter createZone(final CreateZoneCmd cmd) {
    // grab parameters from the command
    final Long userId = CallContext.current().getCallingUserId();
    final String zoneName = cmd.getZoneName();
    final String dns1 = cmd.getDns1();
    final String dns2 = cmd.getDns2();
    final String ip6Dns1 = cmd.getIp6Dns1();
    final String ip6Dns2 = cmd.getIp6Dns2();
    final String internalDns1 = cmd.getInternalDns1();
    final String internalDns2 = cmd.getInternalDns2();
    final String guestCidr = cmd.getGuestCidrAddress();
    final Long domainId = cmd.getDomainId();
    final String type = cmd.getNetworkType();
    Boolean isBasic = false;
    String allocationState = cmd.getAllocationState();
    final String networkDomain = cmd.getDomain();
    boolean isSecurityGroupEnabled = cmd.getSecuritygroupenabled();
    final boolean isLocalStorageEnabled = cmd.getLocalStorageEnabled();
    if (allocationState == null) {
        allocationState = Grouping.AllocationState.Disabled.toString();
    }
    if (!type.equalsIgnoreCase(NetworkType.Basic.toString()) && !type.equalsIgnoreCase(NetworkType.Advanced.toString())) {
        throw new InvalidParameterValueException("Invalid zone type; only Advanced and Basic values are supported");
    } else if (type.equalsIgnoreCase(NetworkType.Basic.toString())) {
        isBasic = true;
    }
    final NetworkType zoneType = isBasic ? NetworkType.Basic : NetworkType.Advanced;
    // error out when the parameter specified for Basic zone
    if (zoneType == NetworkType.Basic && guestCidr != null) {
        throw new InvalidParameterValueException("guestCidrAddress parameter is not supported for Basic zone");
    }
    DomainVO domainVO = null;
    if (domainId != null) {
        domainVO = _domainDao.findById(domainId);
    }
    if (zoneType == NetworkType.Basic) {
        isSecurityGroupEnabled = true;
    }
    return createZone(userId, zoneName, dns1, dns2, internalDns1, internalDns2, guestCidr, domainVO != null ? domainVO.getName() : null, domainId, zoneType, allocationState, networkDomain, isSecurityGroupEnabled, isLocalStorageEnabled, ip6Dns1, ip6Dns2);
}
Also used : DomainVO(com.cloud.domain.DomainVO) InvalidParameterValueException(com.cloud.exception.InvalidParameterValueException) NetworkType(com.cloud.dc.DataCenter.NetworkType) ActionEvent(com.cloud.event.ActionEvent)

Example 40 with DomainVO

use of com.cloud.domain.DomainVO in project cloudstack by apache.

the class ConfigurationManagerImpl method resetConfiguration.

@Override
@ActionEvent(eventType = EventTypes.EVENT_CONFIGURATION_VALUE_EDIT, eventDescription = "resetting configuration")
public Pair<Configuration, String> resetConfiguration(final ResetCfgCmd cmd) throws InvalidParameterValueException {
    final Long userId = CallContext.current().getCallingUserId();
    final String name = cmd.getCfgName();
    final Long zoneId = cmd.getZoneId();
    final Long clusterId = cmd.getClusterId();
    final Long storagepoolId = cmd.getStoragepoolId();
    final Long accountId = cmd.getAccountId();
    final Long domainId = cmd.getDomainId();
    final Long imageStoreId = cmd.getImageStoreId();
    Optional optionalValue;
    final ConfigKey<?> configKey = _configDepot.get(name);
    if (configKey == null) {
        s_logger.warn("Probably the component manager where configuration variable " + name + " is defined needs to implement Configurable interface");
        throw new InvalidParameterValueException("Config parameter with name " + name + " doesn't exist");
    }
    String defaultValue = configKey.defaultValue();
    String category = configKey.category();
    String configScope = configKey.scope().toString();
    String scope = "";
    Map<String, Long> scopeMap = new LinkedHashMap<>();
    Long id = null;
    int paramCountCheck = 0;
    scopeMap.put(ConfigKey.Scope.Zone.toString(), zoneId);
    scopeMap.put(ConfigKey.Scope.Cluster.toString(), clusterId);
    scopeMap.put(ConfigKey.Scope.Domain.toString(), domainId);
    scopeMap.put(ConfigKey.Scope.Account.toString(), accountId);
    scopeMap.put(ConfigKey.Scope.StoragePool.toString(), storagepoolId);
    scopeMap.put(ConfigKey.Scope.ImageStore.toString(), imageStoreId);
    ParamCountPair paramCountPair = getParamCount(scopeMap);
    id = paramCountPair.getId();
    paramCountCheck = paramCountPair.getParamCount();
    scope = paramCountPair.getScope();
    if (paramCountCheck > 1) {
        throw new InvalidParameterValueException("cannot handle multiple IDs, provide only one ID corresponding to the scope");
    }
    if (scope != null && !scope.equals(ConfigKey.Scope.Global.toString()) && !configScope.contains(scope)) {
        throw new InvalidParameterValueException("Invalid scope id provided for the parameter " + name);
    }
    String newValue = null;
    switch(ConfigKey.Scope.valueOf(scope)) {
        case Zone:
            final DataCenterVO zone = _zoneDao.findById(id);
            if (zone == null) {
                throw new InvalidParameterValueException("unable to find zone by id " + id);
            }
            _dcDetailsDao.removeDetail(id, name);
            optionalValue = Optional.ofNullable(configKey.valueIn(id));
            newValue = optionalValue.isPresent() ? optionalValue.get().toString() : defaultValue;
            break;
        case Cluster:
            final ClusterVO cluster = _clusterDao.findById(id);
            if (cluster == null) {
                throw new InvalidParameterValueException("unable to find cluster by id " + id);
            }
            ClusterDetailsVO clusterDetailsVO = _clusterDetailsDao.findDetail(id, name);
            newValue = configKey.value().toString();
            if (name.equalsIgnoreCase("cpu.overprovisioning.factor") || name.equalsIgnoreCase("mem.overprovisioning.factor")) {
                _clusterDetailsDao.persist(id, name, newValue);
            } else if (clusterDetailsVO != null) {
                _clusterDetailsDao.remove(clusterDetailsVO.getId());
            }
            optionalValue = Optional.ofNullable(configKey.valueIn(id));
            newValue = optionalValue.isPresent() ? optionalValue.get().toString() : defaultValue;
            break;
        case StoragePool:
            final StoragePoolVO pool = _storagePoolDao.findById(id);
            if (pool == null) {
                throw new InvalidParameterValueException("unable to find storage pool by id " + id);
            }
            _storagePoolDetailsDao.removeDetail(id, name);
            optionalValue = Optional.ofNullable(configKey.valueIn(id));
            newValue = optionalValue.isPresent() ? optionalValue.get().toString() : defaultValue;
            break;
        case Domain:
            final DomainVO domain = _domainDao.findById(id);
            if (domain == null) {
                throw new InvalidParameterValueException("unable to find domain by id " + id);
            }
            DomainDetailVO domainDetailVO = _domainDetailsDao.findDetail(id, name);
            if (domainDetailVO != null) {
                _domainDetailsDao.remove(domainDetailVO.getId());
            }
            optionalValue = Optional.ofNullable(configKey.valueIn(id));
            newValue = optionalValue.isPresent() ? optionalValue.get().toString() : defaultValue;
            break;
        case Account:
            final AccountVO account = _accountDao.findById(id);
            if (account == null) {
                throw new InvalidParameterValueException("unable to find account by id " + id);
            }
            AccountDetailVO accountDetailVO = _accountDetailsDao.findDetail(id, name);
            if (accountDetailVO != null) {
                _accountDetailsDao.remove(accountDetailVO.getId());
            }
            optionalValue = Optional.ofNullable(configKey.valueIn(id));
            newValue = optionalValue.isPresent() ? optionalValue.get().toString() : defaultValue;
            break;
        case ImageStore:
            final ImageStoreVO imageStoreVO = _imageStoreDao.findById(id);
            if (imageStoreVO == null) {
                throw new InvalidParameterValueException("unable to find the image store by id " + id);
            }
            ImageStoreDetailVO imageStoreDetailVO = _imageStoreDetailsDao.findDetail(id, name);
            if (imageStoreDetailVO != null) {
                _imageStoreDetailsDao.remove(imageStoreDetailVO.getId());
            }
            optionalValue = Optional.ofNullable(configKey.valueIn(id));
            newValue = optionalValue.isPresent() ? optionalValue.get().toString() : defaultValue;
            break;
        default:
            if (!_configDao.update(name, category, defaultValue)) {
                s_logger.error("Failed to reset configuration option, name: " + name + ", defaultValue:" + defaultValue);
                throw new CloudRuntimeException("Failed to reset configuration value. Please contact Cloud Support.");
            }
            optionalValue = Optional.ofNullable(configKey.value());
            newValue = optionalValue.isPresent() ? optionalValue.get().toString() : defaultValue;
    }
    CallContext.current().setEventDetails(" Name: " + name + " New Value: " + (name.toLowerCase().contains("password") ? "*****" : defaultValue == null ? "" : defaultValue));
    return new Pair<Configuration, String>(_configDao.findByName(name), newValue);
}
Also used : DataCenterVO(com.cloud.dc.DataCenterVO) ImageStoreDetailVO(org.apache.cloudstack.storage.datastore.db.ImageStoreDetailVO) ClusterVO(com.cloud.dc.ClusterVO) Optional(java.util.Optional) DomainDetailVO(com.cloud.domain.DomainDetailVO) AccountVO(com.cloud.user.AccountVO) LinkedHashMap(java.util.LinkedHashMap) DomainVO(com.cloud.domain.DomainVO) AccountDetailVO(com.cloud.user.AccountDetailVO) InvalidParameterValueException(com.cloud.exception.InvalidParameterValueException) CloudRuntimeException(com.cloud.utils.exception.CloudRuntimeException) StoragePoolVO(org.apache.cloudstack.storage.datastore.db.StoragePoolVO) ImageStoreVO(org.apache.cloudstack.storage.datastore.db.ImageStoreVO) ClusterDetailsVO(com.cloud.dc.ClusterDetailsVO) Pair(com.cloud.utils.Pair) ActionEvent(com.cloud.event.ActionEvent)

Aggregations

DomainVO (com.cloud.domain.DomainVO)196 Account (com.cloud.user.Account)85 AccountVO (com.cloud.user.AccountVO)64 Test (org.junit.Test)56 ArrayList (java.util.ArrayList)53 DomainDao (com.cloud.domain.dao.DomainDao)30 Field (java.lang.reflect.Field)30 InvalidParameterValueException (com.cloud.exception.InvalidParameterValueException)29 SslCertDao (com.cloud.network.dao.SslCertDao)29 AccountManager (com.cloud.user.AccountManager)29 SslCertVO (com.cloud.network.dao.SslCertVO)27 List (java.util.List)26 PermissionDeniedException (com.cloud.exception.PermissionDeniedException)24 Pair (com.cloud.utils.Pair)24 Domain (com.cloud.domain.Domain)23 Filter (com.cloud.utils.db.Filter)23 File (java.io.File)23 IOException (java.io.IOException)23 FileUtils.readFileToString (org.apache.commons.io.FileUtils.readFileToString)23 InvalidParameterValueException (com.cloud.utils.exception.InvalidParameterValueException)22