| // Licensed to the Apache Software Foundation (ASF) under one |
| // or more contributor license agreements. See the NOTICE file |
| // distributed with this work for additional information |
| // regarding copyright ownership. The ASF licenses this file |
| // to you under the Apache License, Version 2.0 (the |
| // "License"); you may not use this file except in compliance |
| // with the License. You may obtain a copy of the License at |
| // |
| // http://www.apache.org/licenses/LICENSE-2.0 |
| // |
| // Unless required by applicable law or agreed to in writing, |
| // software distributed under the License is distributed on an |
| // "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY |
| // KIND, either express or implied. See the License for the |
| // specific language governing permissions and limitations |
| // under the License. |
| package com.cloud.network; |
| |
| import java.util.ArrayList; |
| import java.util.Collection; |
| import java.util.HashMap; |
| import java.util.List; |
| import java.util.Map; |
| import java.util.concurrent.ScheduledExecutorService; |
| |
| import javax.inject.Inject; |
| |
| import org.springframework.stereotype.Component; |
| |
| import org.apache.cloudstack.api.ApiConstants; |
| import org.apache.cloudstack.api.command.admin.network.AddNetworkDeviceCmd; |
| import org.apache.cloudstack.api.command.admin.network.DeleteNetworkDeviceCmd; |
| import org.apache.cloudstack.api.command.admin.network.ListNetworkDeviceCmd; |
| import org.apache.cloudstack.api.response.NetworkDeviceResponse; |
| import org.apache.cloudstack.framework.config.dao.ConfigurationDao; |
| import org.apache.cloudstack.network.ExternalNetworkDeviceManager; |
| |
| import com.cloud.agent.AgentManager; |
| import com.cloud.dc.dao.DataCenterDao; |
| import com.cloud.dc.dao.VlanDao; |
| import com.cloud.host.Host; |
| import com.cloud.host.HostVO; |
| import com.cloud.host.dao.HostDao; |
| import com.cloud.network.dao.ExternalFirewallDeviceDao; |
| import com.cloud.network.dao.ExternalLoadBalancerDeviceDao; |
| import com.cloud.network.dao.IPAddressDao; |
| import com.cloud.network.dao.InlineLoadBalancerNicMapDao; |
| import com.cloud.network.dao.LoadBalancerDao; |
| import com.cloud.network.dao.NetworkDao; |
| import com.cloud.network.dao.NetworkExternalFirewallDao; |
| import com.cloud.network.dao.NetworkExternalLoadBalancerDao; |
| import com.cloud.network.dao.PhysicalNetworkDao; |
| import com.cloud.network.dao.PhysicalNetworkServiceProviderDao; |
| import com.cloud.network.dao.VpnUserDao; |
| import com.cloud.network.rules.dao.PortForwardingRulesDao; |
| import com.cloud.offerings.dao.NetworkOfferingDao; |
| import com.cloud.user.AccountManager; |
| import com.cloud.user.dao.AccountDao; |
| import com.cloud.user.dao.UserStatisticsDao; |
| import com.cloud.utils.component.ManagerBase; |
| import com.cloud.utils.exception.CloudRuntimeException; |
| import com.cloud.vm.dao.DomainRouterDao; |
| import com.cloud.vm.dao.NicDao; |
| |
| @Component |
| public class ExternalNetworkDeviceManagerImpl extends ManagerBase implements ExternalNetworkDeviceManager { |
| |
| @Inject |
| AgentManager _agentMgr; |
| @Inject |
| NetworkModel _networkMgr; |
| @Inject |
| HostDao _hostDao; |
| @Inject |
| DataCenterDao _dcDao; |
| @Inject |
| AccountDao _accountDao; |
| @Inject |
| DomainRouterDao _routerDao; |
| @Inject |
| IPAddressDao _ipAddressDao; |
| @Inject |
| VlanDao _vlanDao; |
| @Inject |
| UserStatisticsDao _userStatsDao; |
| @Inject |
| NetworkDao _networkDao; |
| @Inject |
| PortForwardingRulesDao _portForwardingRulesDao; |
| @Inject |
| LoadBalancerDao _loadBalancerDao; |
| @Inject |
| ConfigurationDao _configDao; |
| @Inject |
| NetworkOfferingDao _networkOfferingDao; |
| @Inject |
| NicDao _nicDao; |
| @Inject |
| VpnUserDao _vpnUsersDao; |
| @Inject |
| InlineLoadBalancerNicMapDao _inlineLoadBalancerNicMapDao; |
| @Inject |
| AccountManager _accountMgr; |
| @Inject |
| PhysicalNetworkDao _physicalNetworkDao; |
| @Inject |
| PhysicalNetworkServiceProviderDao _physicalNetworkServiceProviderDao; |
| @Inject |
| ExternalLoadBalancerDeviceDao _externalLoadBalancerDeviceDao; |
| @Inject |
| ExternalFirewallDeviceDao _externalFirewallDeviceDao; |
| @Inject |
| NetworkExternalLoadBalancerDao _networkExternalLBDao; |
| @Inject |
| NetworkExternalFirewallDao _networkExternalFirewallDao; |
| |
| ScheduledExecutorService _executor; |
| int _externalNetworkStatsInterval; |
| |
| // obsolete |
| // private final static IdentityService _identityService = (IdentityService)ComponentLocator.getLocator(ManagementServer.Name).getManager(IdentityService.class); |
| |
| |
| @Override |
| public Host addNetworkDevice(AddNetworkDeviceCmd cmd) { |
| Map paramList = cmd.getParamList(); |
| if (paramList == null) { |
| throw new CloudRuntimeException("Parameter list is null"); |
| } |
| |
| Collection paramsCollection = paramList.values(); |
| HashMap params = (HashMap)(paramsCollection.toArray())[0]; |
| return null; |
| } |
| |
| @Override |
| public NetworkDeviceResponse getApiResponse(Host device) { |
| return null; |
| } |
| |
| private List<Host> listNetworkDevice(Long zoneId, Long physicalNetworkId, Long podId, Host.Type type) { |
| // List<Host> res = new ArrayList<Host>(); |
| // if (podId != null) { |
| // List<HostVO> devs = _hostDao.listBy(type, null, podId, zoneId); |
| // if (devs.size() == 1) { |
| // res.add(devs.get(0)); |
| // } else { |
| // logger.debug("List " + type + ": " + devs.size() + " found"); |
| // } |
| // } else { |
| // List<HostVO> devs = _hostDao.listBy(type, zoneId); |
| // res.addAll(devs); |
| // } |
| |
| // return res; |
| return null; |
| } |
| |
| @Override |
| public List<Host> listNetworkDevice(ListNetworkDeviceCmd cmd) { |
| Map paramList = cmd.getParamList(); |
| if (paramList == null) { |
| throw new CloudRuntimeException("Parameter list is null"); |
| } |
| |
| List<Host> res; |
| Collection paramsCollection = paramList.values(); |
| HashMap params = (HashMap)(paramsCollection.toArray())[0]; |
| if (NetworkDevice.ExternalDhcp.getName().equalsIgnoreCase(cmd.getDeviceType())) { |
| Long zoneId = Long.parseLong((String)params.get(ApiConstants.ZONE_ID)); |
| Long podId = Long.parseLong((String)params.get(ApiConstants.POD_ID)); |
| res = listNetworkDevice(zoneId, null, podId, Host.Type.ExternalDhcp); |
| } else if (NetworkDevice.PxeServer.getName().equalsIgnoreCase(cmd.getDeviceType())) { |
| Long zoneId = Long.parseLong((String)params.get(ApiConstants.ZONE_ID)); |
| Long podId = Long.parseLong((String)params.get(ApiConstants.POD_ID)); |
| res = listNetworkDevice(zoneId, null, podId, Host.Type.PxeServer); |
| } else if (cmd.getDeviceType() == null) { |
| Long zoneId = Long.parseLong((String)params.get(ApiConstants.ZONE_ID)); |
| Long podId = Long.parseLong((String)params.get(ApiConstants.POD_ID)); |
| Long physicalNetworkId = (params.get(ApiConstants.PHYSICAL_NETWORK_ID) == null) ? Long.parseLong((String)params.get(ApiConstants.PHYSICAL_NETWORK_ID)) : null; |
| List<Host> res1 = listNetworkDevice(zoneId, physicalNetworkId, podId, Host.Type.PxeServer); |
| List<Host> res2 = listNetworkDevice(zoneId, physicalNetworkId, podId, Host.Type.ExternalDhcp); |
| List<Host> res3 = listNetworkDevice(zoneId, physicalNetworkId, podId, Host.Type.ExternalLoadBalancer); |
| List<Host> res4 = listNetworkDevice(zoneId, physicalNetworkId, podId, Host.Type.ExternalFirewall); |
| List<Host> deviceAll = new ArrayList<Host>(); |
| deviceAll.addAll(res1); |
| deviceAll.addAll(res2); |
| deviceAll.addAll(res3); |
| deviceAll.addAll(res4); |
| res = deviceAll; |
| } else { |
| throw new CloudRuntimeException("Unknown network device type:" + cmd.getDeviceType()); |
| } |
| |
| return res; |
| } |
| |
| @Override |
| public boolean deleteNetworkDevice(DeleteNetworkDeviceCmd cmd) { |
| HostVO device = _hostDao.findById(cmd.getId()); |
| return true; |
| } |
| } |