@Nonnull private VpcOffering updateVpcOfferingInTransaction(VpcOffering offering, Multimap<Network.Service, Network.Provider> svcProviderMap) { if (s_logger.isDebugEnabled()) { s_logger.debug(String.format("Updating vpc offering %s", offering)); } List<VpcOfferingServiceMapVO> currentVpcOfferingServices = _vpcOffSvcMapDao.listByVpcOffId(offering.getId()); Multimap<Network.Service, Network.Provider> currentSvcProviderMap = HashMultimap.create(); for (VpcOfferingServiceMapVO vpcOfferingService : currentVpcOfferingServices) { Network.Service service = Network.Service.getService(vpcOfferingService.getService()); Network.Provider provider = Network.Provider.getProvider(vpcOfferingService.getProvider()); currentSvcProviderMap.put(service, provider); } for (Map.Entry<Network.Service, Network.Provider> entry : svcProviderMap.entries()) { Network.Service service = entry.getKey(); Network.Provider provider = entry.getValue(); if (!currentSvcProviderMap.containsEntry(service, provider)) { VpcOfferingServiceMapVO offService = new VpcOfferingServiceMapVO(offering.getId(), service, provider); _vpcOffSvcMapDao.persist(offService); if (s_logger.isDebugEnabled()) { s_logger.debug(String.format("Added service for the vpc offering: %s", offService)); } } } return offering; }
@Override public Map<Service, Set<Provider>> getVpcOffSvcProvidersMap(final long vpcOffId) { final Map<Service, Set<Provider>> serviceProviderMap = new HashMap<Service, Set<Provider>>(); final List<VpcOfferingServiceMapVO> map = _vpcOffSvcMapDao.listByVpcOffId(vpcOffId); for (final VpcOfferingServiceMapVO instance : map) { final Service service = Service.getService(instance.getService()); Set<Provider> providers; providers = serviceProviderMap.get(service); if (providers == null) { providers = new HashSet<Provider>(); } providers.add(Provider.getProvider(instance.getProvider())); serviceProviderMap.put(service, providers); } return serviceProviderMap; }
protected VpcOfferingServiceMapDaoImpl() { super(); AllFieldsSearch = createSearchBuilder(); AllFieldsSearch.and("vpcOffId", AllFieldsSearch.entity().getVpcOfferingId(), SearchCriteria.Op.EQ); AllFieldsSearch.and("service", AllFieldsSearch.entity().getService(), SearchCriteria.Op.EQ); AllFieldsSearch.and("provider", AllFieldsSearch.entity().getProvider(), SearchCriteria.Op.EQ); AllFieldsSearch.done(); MultipleServicesSearch = createSearchBuilder(); MultipleServicesSearch.and("vpcOffId", MultipleServicesSearch.entity().getVpcOfferingId(), SearchCriteria.Op.EQ); MultipleServicesSearch.and("service", MultipleServicesSearch.entity().getService(), SearchCriteria.Op.IN); MultipleServicesSearch.and("provider", MultipleServicesSearch.entity().getProvider(), SearchCriteria.Op.EQ); MultipleServicesSearch.done(); ServicesSearch = createSearchBuilder(String.class); ServicesSearch.and("offeringId", ServicesSearch.entity().getVpcOfferingId(), SearchCriteria.Op.EQ); ServicesSearch.select(null, Func.DISTINCT, ServicesSearch.entity().getService()); ServicesSearch.done(); }
private VpcOffering createVpcOfferingInTransaction(String name, String displayText, Multimap<Network.Service, Network.Provider> svcProviderMap, boolean isDefault, VpcOffering.State state, Long serviceOfferingId) { // create vpc offering object VpcOfferingVO offering = new VpcOfferingVO(name, displayText, isDefault, serviceOfferingId, false, false); if (state != null) { offering.setState(state); } if (s_logger.isDebugEnabled()) { s_logger.debug(String.format("Adding vpc offering %s", offering)); } offering = _vpcOffDao.persist(offering); // populate services and providers if (svcProviderMap != null) { for (Map.Entry<Network.Service, Network.Provider> entry : svcProviderMap.entries()) { Network.Service service = entry.getKey(); Network.Provider provider = entry.getValue(); VpcOfferingServiceMapVO offService = new VpcOfferingServiceMapVO(offering.getId(), service, provider); _vpcOffSvcMapDao.persist(offService); if (s_logger.isTraceEnabled()) { s_logger.trace(String.format("Added service for the vpc offering: %s with provider %s", offService, provider.getName())); } } } return offering; }
private Map<String, List<String>> finalizeServicesAndProvidersForVpc(final long zoneId, final long offeringId) { final Map<String, List<String>> svcProviders = new HashMap<>(); final List<VpcOfferingServiceMapVO> servicesMap = _vpcOffSvcMapDao.listByVpcOffId(offeringId); for (final VpcOfferingServiceMapVO serviceMap : servicesMap) { final String service = serviceMap.getService(); String provider = serviceMap.getProvider(); if (provider == null) { // Default to VPCVirtualRouter provider = Provider.VPCVirtualRouter.getName(); } if (!_ntwkModel.isProviderEnabledInZone(zoneId, provider)) { throw new InvalidParameterValueException("Provider " + provider + " should be enabled in at least one physical network of the zone specified"); } List<String> providers = null; if (svcProviders.get(service) == null) { providers = new ArrayList<String>(); } else { providers = svcProviders.get(service); } providers.add(provider); svcProviders.put(service, providers); } return svcProviders; }
@Override public VpcOffering doInTransaction(final TransactionStatus status) { // create vpc offering object VpcOfferingVO offering = new VpcOfferingVO(name, displayText, isDefault, serviceOfferingId, supportsDistributedRouter, offersRegionLevelVPC, redundantRouter); if (state != null) { offering.setState(state); } s_logger.debug("Adding vpc offering " + offering); offering = _vpcOffDao.persist(offering); // populate services and providers if (svcProviderMap != null) { for (final Network.Service service : svcProviderMap.keySet()) { final Set<Provider> providers = svcProviderMap.get(service); if (providers != null && !providers.isEmpty()) { for (final Network.Provider provider : providers) { final VpcOfferingServiceMapVO offService = new VpcOfferingServiceMapVO(offering.getId(), service, provider); _vpcOffSvcMapDao.persist(offService); s_logger.trace("Added service for the vpc offering: " + offService + " with provider " + provider.getName()); } } else { throw new InvalidParameterValueException("Provider is missing for the VPC offering service " + service.getName()); } } } return offering; } });
@Override public boolean implementVpc(Vpc vpc, DeployDestination dest, ReservationContext context) throws ConcurrentOperationException, ResourceUnavailableException, InsufficientCapacityException { List<VpcOfferingServiceMapVO> vpcOfferingServices = _vpcOfferingSrvcDao.listByVpcOffId(vpc.getVpcOfferingId()); Multimap<Service, Provider> supportedVpcServices = NuageVspManagerImpl.SUPPORTED_NUAGE_VSP_VPC_SERVICE_MAP; for (VpcOfferingServiceMapVO vpcOfferingService : vpcOfferingServices) { Network.Service service = Network.Service.getService(vpcOfferingService.getService()); if (!supportedVpcServices.containsKey(service)) { s_logger.warn(String.format("NuageVsp doesn't support service %s for VPCs", service.getName())); return false; } Network.Provider provider = Network.Provider.getProvider(vpcOfferingService.getProvider()); if (!supportedVpcServices.containsEntry(service, provider)) { s_logger.warn(String.format("NuageVsp doesn't support provider %s for service %s for VPCs", provider.getName(), service.getName())); return false; } } String globalDomainTemplate = _nuageVspManager.NuageVspVpcDomainTemplateName.value(); if (StringUtils.isNotBlank(globalDomainTemplate) && !_nuageVspManager.checkIfDomainTemplateExist(vpc.getDomainId(),globalDomainTemplate,vpc.getZoneId(),null)) { s_logger.warn("The global pre configured domain template does not exist on the VSD."); throw new CloudRuntimeException("The global pre configured domain template does not exist on the VSD."); } return true; }