| // Copyright 2012 Citrix Systems, Inc. Licensed under the |
| // Apache License, Version 2.0 (the "License"); you may not use this |
| // file except in compliance with the License. Citrix Systems, Inc. |
| // reserves all rights not expressly granted by 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. |
| // |
| // Automatically generated by addcopyright.py at 04/03/2012 |
| package com.cloud.network.guru; |
| |
| import javax.ejb.Local; |
| |
| import org.apache.log4j.Logger; |
| |
| import com.cloud.dc.DataCenter; |
| import com.cloud.deploy.DeployDestination; |
| import com.cloud.deploy.DeploymentPlan; |
| import com.cloud.event.EventTypes; |
| import com.cloud.event.EventUtils; |
| import com.cloud.event.EventVO; |
| import com.cloud.exception.InsufficientAddressCapacityException; |
| import com.cloud.exception.InsufficientVirtualNetworkCapcityException; |
| import com.cloud.network.Network; |
| import com.cloud.network.NetworkManager; |
| import com.cloud.network.NetworkVO; |
| import com.cloud.network.ovs.OvsTunnelManager; |
| import com.cloud.offering.NetworkOffering; |
| import com.cloud.user.Account; |
| import com.cloud.user.UserContext; |
| import com.cloud.utils.component.Inject; |
| import com.cloud.vm.Nic.ReservationStrategy; |
| import com.cloud.vm.NicProfile; |
| import com.cloud.vm.ReservationContext; |
| import com.cloud.vm.VirtualMachine; |
| import com.cloud.vm.VirtualMachineProfile; |
| import com.cloud.network.Networks.BroadcastDomainType; |
| import com.cloud.network.Network.State; |
| |
| @Local(value=NetworkGuru.class) |
| public class OvsGuestNetworkGuru extends GuestNetworkGuru { |
| private static final Logger s_logger = Logger.getLogger(OvsGuestNetworkGuru.class); |
| |
| @Inject NetworkManager _externalNetworkManager; |
| @Inject OvsTunnelManager _ovsTunnelMgr; |
| |
| @Override |
| public Network design(NetworkOffering offering, DeploymentPlan plan, Network userSpecified, Account owner) { |
| |
| if (!_ovsTunnelMgr.isOvsTunnelEnabled()) { |
| return null; |
| } |
| |
| NetworkVO config = (NetworkVO) super.design(offering, plan, userSpecified, owner); |
| if (config == null) { |
| return null; |
| } |
| |
| config.setBroadcastDomainType(BroadcastDomainType.Vswitch); |
| |
| return config; |
| } |
| |
| protected void allocateVnet(Network network, NetworkVO implemented, long dcId, |
| long physicalNetworkId, String reservationId) throws InsufficientVirtualNetworkCapcityException { |
| if (network.getBroadcastUri() == null) { |
| String vnet = _dcDao.allocateVnet(dcId, physicalNetworkId, network.getAccountId(), reservationId); |
| if (vnet == null) { |
| throw new InsufficientVirtualNetworkCapcityException("Unable to allocate vnet as a part of network " + network + " implement ", DataCenter.class, dcId); |
| } |
| implemented.setBroadcastUri(BroadcastDomainType.Vswitch.toUri(vnet)); |
| EventUtils.saveEvent(UserContext.current().getCallerUserId(), network.getAccountId(), EventVO.LEVEL_INFO, EventTypes.EVENT_ZONE_VLAN_ASSIGN, "Assigned Zone Vlan: "+vnet+ " Network Id: "+network.getId(), 0); |
| } else { |
| implemented.setBroadcastUri(network.getBroadcastUri()); |
| } |
| } |
| |
| @Override |
| public Network implement(Network config, NetworkOffering offering, DeployDestination dest, ReservationContext context) throws InsufficientVirtualNetworkCapcityException { |
| assert (config.getState() == State.Implementing) : "Why are we implementing " + config; |
| if (!_ovsTunnelMgr.isOvsTunnelEnabled()) { |
| return null; |
| } |
| NetworkVO implemented = (NetworkVO)super.implement(config, offering, dest, context); |
| return implemented; |
| } |
| |
| } |