mirror of
https://github.com/apache/cloudstack.git
synced 2025-10-26 08:42:29 +01:00
CLOUDSTACK-9401 : Support for Internal DNS in Nuage VSP plugin
This commit is contained in:
parent
3fa461693c
commit
4e6c7e179a
36
api/src/com/cloud/network/element/DnsServiceProvider.java
Normal file
36
api/src/com/cloud/network/element/DnsServiceProvider.java
Normal file
@ -0,0 +1,36 @@
|
||||
// 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.element;
|
||||
|
||||
import com.cloud.deploy.DeployDestination;
|
||||
import com.cloud.exception.ConcurrentOperationException;
|
||||
import com.cloud.exception.InsufficientCapacityException;
|
||||
import com.cloud.exception.ResourceUnavailableException;
|
||||
import com.cloud.network.Network;
|
||||
import com.cloud.vm.NicProfile;
|
||||
import com.cloud.vm.ReservationContext;
|
||||
import com.cloud.vm.VirtualMachineProfile;
|
||||
|
||||
public interface DnsServiceProvider extends NetworkElement {
|
||||
boolean addDnsEntry(Network network, NicProfile nic, VirtualMachineProfile vm, DeployDestination dest, ReservationContext context)
|
||||
throws ConcurrentOperationException, InsufficientCapacityException, ResourceUnavailableException;
|
||||
|
||||
boolean configDnsSupportForSubnet(Network network, NicProfile nic, VirtualMachineProfile vm, DeployDestination dest, ReservationContext context)
|
||||
throws ConcurrentOperationException, InsufficientCapacityException, ResourceUnavailableException;
|
||||
|
||||
boolean removeDnsSupportForSubnet(Network network) throws ResourceUnavailableException;
|
||||
}
|
||||
@ -23,7 +23,6 @@ import java.util.Map;
|
||||
import org.apache.cloudstack.acl.ControlledEntity.ACLType;
|
||||
import org.apache.cloudstack.framework.config.ConfigKey;
|
||||
import org.apache.cloudstack.framework.config.ConfigKey.Scope;
|
||||
|
||||
import com.cloud.deploy.DataCenterDeployment;
|
||||
import com.cloud.deploy.DeployDestination;
|
||||
import com.cloud.deploy.DeploymentPlan;
|
||||
@ -39,6 +38,7 @@ import com.cloud.network.Network.Service;
|
||||
import com.cloud.network.NetworkProfile;
|
||||
import com.cloud.network.PhysicalNetwork;
|
||||
import com.cloud.network.element.DhcpServiceProvider;
|
||||
import com.cloud.network.element.DnsServiceProvider;
|
||||
import com.cloud.network.element.LoadBalancingServiceProvider;
|
||||
import com.cloud.network.element.StaticNatServiceProvider;
|
||||
import com.cloud.network.element.UserDataServiceProvider;
|
||||
@ -219,6 +219,8 @@ public interface NetworkOrchestrationService {
|
||||
|
||||
DhcpServiceProvider getDhcpServiceProvider(Network network);
|
||||
|
||||
DnsServiceProvider getDnsServiceProvider(Network network);
|
||||
|
||||
void removeDhcpServiceInSubnet(Nic nic);
|
||||
|
||||
boolean resourceCountNeedsUpdate(NetworkOffering ntwkOff, ACLType aclType);
|
||||
|
||||
@ -32,12 +32,9 @@ import java.util.UUID;
|
||||
import java.util.concurrent.Executors;
|
||||
import java.util.concurrent.ScheduledExecutorService;
|
||||
import java.util.concurrent.TimeUnit;
|
||||
|
||||
import javax.inject.Inject;
|
||||
import javax.naming.ConfigurationException;
|
||||
|
||||
import com.cloud.network.Networks;
|
||||
|
||||
import com.cloud.network.dao.NetworkDetailsDao;
|
||||
import com.cloud.network.dao.RemoteAccessVpnDao;
|
||||
import com.cloud.network.dao.RemoteAccessVpnVO;
|
||||
@ -59,7 +56,6 @@ import org.apache.cloudstack.framework.messagebus.MessageBus;
|
||||
import org.apache.cloudstack.framework.messagebus.PublishScope;
|
||||
import org.apache.cloudstack.managed.context.ManagedContextRunnable;
|
||||
import org.apache.cloudstack.region.PortableIpDao;
|
||||
|
||||
import com.cloud.agent.AgentManager;
|
||||
import com.cloud.agent.Listener;
|
||||
import com.cloud.agent.api.AgentControlAnswer;
|
||||
@ -115,6 +111,7 @@ import com.cloud.network.NetworkMigrationResponder;
|
||||
import com.cloud.network.NetworkModel;
|
||||
import com.cloud.network.NetworkProfile;
|
||||
import com.cloud.network.NetworkStateListener;
|
||||
import com.cloud.network.Networks;
|
||||
import com.cloud.network.Networks.BroadcastDomainType;
|
||||
import com.cloud.network.Networks.TrafficType;
|
||||
import com.cloud.network.PhysicalNetwork;
|
||||
@ -141,6 +138,7 @@ import com.cloud.network.dao.PhysicalNetworkTrafficTypeVO;
|
||||
import com.cloud.network.dao.PhysicalNetworkVO;
|
||||
import com.cloud.network.element.AggregatedCommandExecutor;
|
||||
import com.cloud.network.element.DhcpServiceProvider;
|
||||
import com.cloud.network.element.DnsServiceProvider;
|
||||
import com.cloud.network.element.IpDeployer;
|
||||
import com.cloud.network.element.LoadBalancingServiceProvider;
|
||||
import com.cloud.network.element.NetworkElement;
|
||||
@ -1276,6 +1274,18 @@ public class NetworkOrchestrator extends ManagerBase implements NetworkOrchestra
|
||||
return false;
|
||||
}
|
||||
}
|
||||
if (_networkModel.areServicesSupportedInNetwork(network.getId(), Service.Dns)
|
||||
&& _networkModel.isProviderSupportServiceInNetwork(network.getId(), Service.Dns, element.getProvider()) && element instanceof DnsServiceProvider) {
|
||||
final DnsServiceProvider sp = (DnsServiceProvider)element;
|
||||
if (profile.getIPv6Address() == null) {
|
||||
if (!sp.configDnsSupportForSubnet(network, profile, vmProfile, dest, context)) {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
if(!sp.addDnsEntry(network, profile, vmProfile, dest, context)) {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
if (_networkModel.areServicesSupportedInNetwork(network.getId(), Service.UserData)
|
||||
&& _networkModel.isProviderSupportServiceInNetwork(network.getId(), Service.UserData, element.getProvider()) && element instanceof UserDataServiceProvider) {
|
||||
final UserDataServiceProvider sp = (UserDataServiceProvider)element;
|
||||
@ -1885,15 +1895,29 @@ public class NetworkOrchestrator extends ManagerBase implements NetworkOrchestra
|
||||
}
|
||||
|
||||
if (vm.getType() == Type.User
|
||||
&& _networkModel.areServicesSupportedInNetwork(network.getId(), Service.Dhcp)
|
||||
&& network.getTrafficType() == TrafficType.Guest
|
||||
&& network.getGuestType() == GuestType.Shared
|
||||
&& isLastNicInSubnet(nic)) {
|
||||
// remove the dhcpservice ip if this is the last nic in subnet.
|
||||
final DhcpServiceProvider dhcpServiceProvider = getDhcpServiceProvider(network);
|
||||
if (dhcpServiceProvider != null
|
||||
&& isDhcpAccrossMultipleSubnetsSupported(dhcpServiceProvider)) {
|
||||
removeDhcpServiceInSubnet(nic);
|
||||
if (_networkModel.areServicesSupportedInNetwork(network.getId(), Service.Dhcp)) {
|
||||
// remove the dhcpservice ip if this is the last nic in subnet.
|
||||
final DhcpServiceProvider dhcpServiceProvider = getDhcpServiceProvider(network);
|
||||
if (dhcpServiceProvider != null
|
||||
&& isDhcpAccrossMultipleSubnetsSupported(dhcpServiceProvider)) {
|
||||
removeDhcpServiceInSubnet(nic);
|
||||
}
|
||||
}
|
||||
if (_networkModel.areServicesSupportedInNetwork(network.getId(), Service.Dns)){
|
||||
final DnsServiceProvider dnsServiceProvider = getDnsServiceProvider(network);
|
||||
if (dnsServiceProvider != null) {
|
||||
try {
|
||||
if(!dnsServiceProvider.removeDnsSupportForSubnet(network)) {
|
||||
s_logger.warn("Failed to remove the ip alias on the dns server");
|
||||
}
|
||||
} catch (final ResourceUnavailableException e) {
|
||||
//failed to remove the dnsconfig.
|
||||
s_logger.info("Unable to delete the ip alias due to unable to contact the dns server.");
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@ -2807,6 +2831,18 @@ public class NetworkOrchestrator extends ManagerBase implements NetworkOrchestra
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public DnsServiceProvider getDnsServiceProvider(final Network network) {
|
||||
final String dnsProvider = _ntwkSrvcDao.getProviderForServiceInNetwork(network.getId(), Service.Dns);
|
||||
|
||||
if (dnsProvider == null) {
|
||||
s_logger.debug("Network " + network + " doesn't support service " + Service.Dhcp.getName());
|
||||
return null;
|
||||
}
|
||||
|
||||
return (DnsServiceProvider) _networkModel.getElementImplementingProvider(dnsProvider);
|
||||
}
|
||||
|
||||
protected boolean isSharedNetworkWithServices(final Network network) {
|
||||
assert network != null;
|
||||
final DataCenter zone = _entityMgr.findById(DataCenter.class, network.getDataCenterId());
|
||||
|
||||
@ -38,7 +38,7 @@
|
||||
<dependency>
|
||||
<groupId>net.nuage.vsp</groupId>
|
||||
<artifactId>nuage-vsp-acs-client</artifactId>
|
||||
<version>3.2.8.0</version>
|
||||
<version>3.2.8.1</version>
|
||||
</dependency>
|
||||
</dependencies>
|
||||
<build>
|
||||
|
||||
@ -19,6 +19,8 @@
|
||||
|
||||
package com.cloud.agent.api;
|
||||
|
||||
import org.apache.commons.lang.builder.HashCodeBuilder;
|
||||
|
||||
import com.cloud.host.Host;
|
||||
|
||||
public class PingNuageVspCommand extends PingCommand {
|
||||
@ -38,19 +40,18 @@ public class PingNuageVspCommand extends PingCommand {
|
||||
public boolean equals(Object o) {
|
||||
if (this == o) return true;
|
||||
if (!(o instanceof PingNuageVspCommand)) return false;
|
||||
if (!super.equals(o)) return false;
|
||||
|
||||
PingNuageVspCommand that = (PingNuageVspCommand) o;
|
||||
|
||||
if (shouldAudit != that.shouldAudit) return false;
|
||||
|
||||
return true;
|
||||
return super.equals(that)
|
||||
&& shouldAudit == that.shouldAudit;
|
||||
}
|
||||
|
||||
@Override
|
||||
public int hashCode() {
|
||||
int result = super.hashCode();
|
||||
result = 31 * result + (shouldAudit ? 1 : 0);
|
||||
return result;
|
||||
return new HashCodeBuilder()
|
||||
.appendSuper(super.hashCode())
|
||||
.append(shouldAudit)
|
||||
.toHashCode();
|
||||
}
|
||||
}
|
||||
|
||||
@ -19,11 +19,15 @@
|
||||
|
||||
package com.cloud.agent.api.element;
|
||||
|
||||
import com.cloud.agent.api.Command;
|
||||
import java.util.List;
|
||||
import java.util.Objects;
|
||||
|
||||
import net.nuage.vsp.acs.client.api.model.VspAclRule;
|
||||
import net.nuage.vsp.acs.client.api.model.VspNetwork;
|
||||
|
||||
import java.util.List;
|
||||
import org.apache.commons.lang.builder.HashCodeBuilder;
|
||||
|
||||
import com.cloud.agent.api.Command;
|
||||
|
||||
public class ApplyAclRuleVspCommand extends Command {
|
||||
|
||||
@ -63,27 +67,30 @@ public class ApplyAclRuleVspCommand extends Command {
|
||||
|
||||
@Override
|
||||
public boolean equals(Object o) {
|
||||
if (this == o) return true;
|
||||
if (!(o instanceof ApplyAclRuleVspCommand)) return false;
|
||||
if (!super.equals(o)) return false;
|
||||
if (this == o) {
|
||||
return true;
|
||||
}
|
||||
|
||||
if (!(o instanceof ApplyAclRuleVspCommand)) {
|
||||
return false;
|
||||
}
|
||||
|
||||
ApplyAclRuleVspCommand that = (ApplyAclRuleVspCommand) o;
|
||||
|
||||
if (_networkReset != that._networkReset) return false;
|
||||
if (_aclRules != null ? !_aclRules.equals(that._aclRules) : that._aclRules != null) return false;
|
||||
if (_aclType != that._aclType) return false;
|
||||
if (_network != null ? !_network.equals(that._network) : that._network != null) return false;
|
||||
|
||||
return true;
|
||||
return super.equals(that)
|
||||
&& _networkReset == that._networkReset
|
||||
&& Objects.equals(_aclType, that._aclType)
|
||||
&& Objects.equals(_network, that._network)
|
||||
&& Objects.equals(_aclRules, that._aclRules);
|
||||
}
|
||||
|
||||
@Override
|
||||
public int hashCode() {
|
||||
int result = super.hashCode();
|
||||
result = 31 * result + (_aclType != null ? _aclType.hashCode() : 0);
|
||||
result = 31 * result + (_network != null ? _network.hashCode() : 0);
|
||||
result = 31 * result + (_aclRules != null ? _aclRules.hashCode() : 0);
|
||||
result = 31 * result + (_networkReset ? 1 : 0);
|
||||
return result;
|
||||
return new HashCodeBuilder()
|
||||
.appendSuper(super.hashCode())
|
||||
.append(_aclType)
|
||||
.append(_network)
|
||||
.append(_networkReset)
|
||||
.toHashCode();
|
||||
}
|
||||
}
|
||||
|
||||
@ -19,11 +19,15 @@
|
||||
|
||||
package com.cloud.agent.api.element;
|
||||
|
||||
import com.cloud.agent.api.Command;
|
||||
import java.util.List;
|
||||
import java.util.Objects;
|
||||
|
||||
import net.nuage.vsp.acs.client.api.model.VspNetwork;
|
||||
import net.nuage.vsp.acs.client.api.model.VspStaticNat;
|
||||
|
||||
import java.util.List;
|
||||
import org.apache.commons.lang.builder.HashCodeBuilder;
|
||||
|
||||
import com.cloud.agent.api.Command;
|
||||
|
||||
public class ApplyStaticNatVspCommand extends Command {
|
||||
|
||||
@ -51,24 +55,26 @@ public class ApplyStaticNatVspCommand extends Command {
|
||||
|
||||
@Override
|
||||
public boolean equals(Object o) {
|
||||
if (this == o) return true;
|
||||
if (!(o instanceof ApplyStaticNatVspCommand)) return false;
|
||||
if (!super.equals(o)) return false;
|
||||
if (this == o) {
|
||||
return true;
|
||||
}
|
||||
|
||||
if (!(o instanceof ApplyStaticNatVspCommand)) {
|
||||
return false;
|
||||
}
|
||||
|
||||
ApplyStaticNatVspCommand that = (ApplyStaticNatVspCommand) o;
|
||||
|
||||
if (_network != null ? !_network.equals(that._network) : that._network != null) return false;
|
||||
if (_staticNatDetails != null ? !_staticNatDetails.equals(that._staticNatDetails) : that._staticNatDetails != null)
|
||||
return false;
|
||||
|
||||
return true;
|
||||
return super.equals(that)
|
||||
&& Objects.equals(_network, that._network)
|
||||
&& Objects.equals(_staticNatDetails, that._staticNatDetails);
|
||||
}
|
||||
|
||||
@Override
|
||||
public int hashCode() {
|
||||
int result = super.hashCode();
|
||||
result = 31 * result + (_network != null ? _network.hashCode() : 0);
|
||||
result = 31 * result + (_staticNatDetails != null ? _staticNatDetails.hashCode() : 0);
|
||||
return result;
|
||||
return new HashCodeBuilder()
|
||||
.appendSuper(super.hashCode())
|
||||
.append(_network)
|
||||
.toHashCode();
|
||||
}
|
||||
}
|
||||
|
||||
@ -19,38 +19,39 @@
|
||||
|
||||
package com.cloud.agent.api.element;
|
||||
|
||||
import com.cloud.agent.api.Command;
|
||||
import java.util.List;
|
||||
import java.util.Objects;
|
||||
|
||||
import net.nuage.vsp.acs.client.api.model.VspAclRule;
|
||||
import net.nuage.vsp.acs.client.api.model.VspDhcpDomainOption;
|
||||
import net.nuage.vsp.acs.client.api.model.VspNetwork;
|
||||
|
||||
import java.util.List;
|
||||
import org.apache.commons.lang.builder.HashCodeBuilder;
|
||||
|
||||
import com.cloud.agent.api.Command;
|
||||
|
||||
public class ImplementVspCommand extends Command {
|
||||
|
||||
private final VspNetwork _network;
|
||||
private final List<String> _dnsServers;
|
||||
private final List<VspAclRule> _ingressFirewallRules;
|
||||
private final List<VspAclRule> _egressFirewallRules;
|
||||
private final List<String> _floatingIpUuids;
|
||||
private final VspDhcpDomainOption _dhcpOption;
|
||||
|
||||
public ImplementVspCommand(VspNetwork network, List<String> dnsServers, List<VspAclRule> ingressFirewallRules,
|
||||
List<VspAclRule> egressFirewallRules, List<String> floatingIpUuids) {
|
||||
public ImplementVspCommand(VspNetwork network, List<VspAclRule> ingressFirewallRules,
|
||||
List<VspAclRule> egressFirewallRules, List<String> floatingIpUuids, VspDhcpDomainOption dhcpOption) {
|
||||
super();
|
||||
this._network = network;
|
||||
this._dnsServers = dnsServers;
|
||||
this._ingressFirewallRules = ingressFirewallRules;
|
||||
this._egressFirewallRules = egressFirewallRules;
|
||||
this._floatingIpUuids = floatingIpUuids;
|
||||
this._dhcpOption = dhcpOption;
|
||||
}
|
||||
|
||||
public VspNetwork getNetwork() {
|
||||
return _network;
|
||||
}
|
||||
|
||||
public List<String> getDnsServers() {
|
||||
return _dnsServers;
|
||||
}
|
||||
|
||||
public List<VspAclRule> getIngressFirewallRules() {
|
||||
return _ingressFirewallRules;
|
||||
}
|
||||
@ -63,6 +64,10 @@ public class ImplementVspCommand extends Command {
|
||||
return _floatingIpUuids;
|
||||
}
|
||||
|
||||
public VspDhcpDomainOption getDhcpOption() {
|
||||
return _dhcpOption;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean executeInSequence() {
|
||||
return false;
|
||||
@ -70,32 +75,30 @@ public class ImplementVspCommand extends Command {
|
||||
|
||||
@Override
|
||||
public boolean equals(Object o) {
|
||||
if (this == o) return true;
|
||||
if (!(o instanceof ImplementVspCommand)) return false;
|
||||
if (!super.equals(o)) return false;
|
||||
if (this == o) {
|
||||
return true;
|
||||
}
|
||||
|
||||
if (!(o instanceof ImplementVspCommand)) {
|
||||
return false;
|
||||
}
|
||||
|
||||
ImplementVspCommand that = (ImplementVspCommand) o;
|
||||
|
||||
if (_dnsServers != null ? !_dnsServers.equals(that._dnsServers) : that._dnsServers != null) return false;
|
||||
if (_egressFirewallRules != null ? !_egressFirewallRules.equals(that._egressFirewallRules) : that._egressFirewallRules != null)
|
||||
return false;
|
||||
if (_floatingIpUuids != null ? !_floatingIpUuids.equals(that._floatingIpUuids) : that._floatingIpUuids != null)
|
||||
return false;
|
||||
if (_ingressFirewallRules != null ? !_ingressFirewallRules.equals(that._ingressFirewallRules) : that._ingressFirewallRules != null)
|
||||
return false;
|
||||
if (_network != null ? !_network.equals(that._network) : that._network != null) return false;
|
||||
|
||||
return true;
|
||||
return super.equals(that)
|
||||
&& Objects.equals(_network, that._network)
|
||||
&& Objects.equals(_dhcpOption, that._dhcpOption)
|
||||
&& Objects.equals(_floatingIpUuids, that._floatingIpUuids)
|
||||
&& Objects.equals(_ingressFirewallRules, that._ingressFirewallRules)
|
||||
&& Objects.equals(_egressFirewallRules, that._egressFirewallRules);
|
||||
}
|
||||
|
||||
@Override
|
||||
public int hashCode() {
|
||||
int result = super.hashCode();
|
||||
result = 31 * result + (_network != null ? _network.hashCode() : 0);
|
||||
result = 31 * result + (_dnsServers != null ? _dnsServers.hashCode() : 0);
|
||||
result = 31 * result + (_ingressFirewallRules != null ? _ingressFirewallRules.hashCode() : 0);
|
||||
result = 31 * result + (_egressFirewallRules != null ? _egressFirewallRules.hashCode() : 0);
|
||||
result = 31 * result + (_floatingIpUuids != null ? _floatingIpUuids.hashCode() : 0);
|
||||
return result;
|
||||
return new HashCodeBuilder()
|
||||
.appendSuper(super.hashCode())
|
||||
.append(_network)
|
||||
.append(_dhcpOption)
|
||||
.toHashCode();
|
||||
}
|
||||
}
|
||||
|
||||
@ -19,9 +19,12 @@
|
||||
|
||||
package com.cloud.agent.api.element;
|
||||
|
||||
import com.cloud.agent.api.Command;
|
||||
|
||||
import java.util.List;
|
||||
import java.util.Objects;
|
||||
|
||||
import org.apache.commons.lang.builder.HashCodeBuilder;
|
||||
|
||||
import com.cloud.agent.api.Command;
|
||||
|
||||
public class ShutDownVpcVspCommand extends Command {
|
||||
|
||||
@ -61,29 +64,30 @@ public class ShutDownVpcVspCommand extends Command {
|
||||
|
||||
@Override
|
||||
public boolean equals(Object o) {
|
||||
if (this == o) return true;
|
||||
if (!(o instanceof ShutDownVpcVspCommand)) return false;
|
||||
if (this == o) {
|
||||
return true;
|
||||
}
|
||||
if (!(o instanceof ShutDownVpcVspCommand)) {
|
||||
return false;
|
||||
}
|
||||
if (!super.equals(o)) return false;
|
||||
|
||||
ShutDownVpcVspCommand that = (ShutDownVpcVspCommand) o;
|
||||
|
||||
if (_domainRouterUuids != null ? !_domainRouterUuids.equals(that._domainRouterUuids) : that._domainRouterUuids != null)
|
||||
return false;
|
||||
if (_domainTemplateName != null ? !_domainTemplateName.equals(that._domainTemplateName) : that._domainTemplateName != null)
|
||||
return false;
|
||||
if (_domainUuid != null ? !_domainUuid.equals(that._domainUuid) : that._domainUuid != null) return false;
|
||||
if (_vpcUuid != null ? !_vpcUuid.equals(that._vpcUuid) : that._vpcUuid != null) return false;
|
||||
|
||||
return true;
|
||||
return super.equals(that)
|
||||
&& Objects.equals(_domainUuid, that._domainUuid)
|
||||
&& Objects.equals(_vpcUuid, that._vpcUuid)
|
||||
&& Objects.equals(_domainTemplateName, that._domainTemplateName)
|
||||
&& Objects.equals(_domainRouterUuids, that._domainRouterUuids);
|
||||
}
|
||||
|
||||
@Override
|
||||
public int hashCode() {
|
||||
int result = super.hashCode();
|
||||
result = 31 * result + (_domainUuid != null ? _domainUuid.hashCode() : 0);
|
||||
result = 31 * result + (_vpcUuid != null ? _vpcUuid.hashCode() : 0);
|
||||
result = 31 * result + (_domainTemplateName != null ? _domainTemplateName.hashCode() : 0);
|
||||
result = 31 * result + (_domainRouterUuids != null ? _domainRouterUuids.hashCode() : 0);
|
||||
return result;
|
||||
return new HashCodeBuilder()
|
||||
.appendSuper(super.hashCode())
|
||||
.append(_domainUuid)
|
||||
.append(_vpcUuid)
|
||||
.append(_domainTemplateName)
|
||||
.toHashCode();
|
||||
}
|
||||
}
|
||||
|
||||
@ -0,0 +1,84 @@
|
||||
//
|
||||
// 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.agent.api.element;
|
||||
|
||||
import java.util.Objects;
|
||||
|
||||
import net.nuage.vsp.acs.client.api.model.VspDhcpDomainOption;
|
||||
import net.nuage.vsp.acs.client.api.model.VspNetwork;
|
||||
|
||||
import org.apache.commons.lang.builder.ToStringBuilder;
|
||||
|
||||
import com.cloud.agent.api.Command;
|
||||
|
||||
public class ShutDownVspCommand extends Command {
|
||||
|
||||
private final VspNetwork _network;
|
||||
private final VspDhcpDomainOption _dhcpOptions;
|
||||
|
||||
public ShutDownVspCommand(VspNetwork network, VspDhcpDomainOption dhcpOptions) {
|
||||
super();
|
||||
this._network = network;
|
||||
this._dhcpOptions = dhcpOptions;
|
||||
}
|
||||
|
||||
public VspNetwork getNetwork() {
|
||||
return _network;
|
||||
}
|
||||
|
||||
public VspDhcpDomainOption getDhcpOptions() {
|
||||
return _dhcpOptions;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean executeInSequence() {
|
||||
return false;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean equals(Object o) {
|
||||
if (this == o) {
|
||||
return true;
|
||||
}
|
||||
if (!(o instanceof ShutDownVspCommand)) {
|
||||
return false;
|
||||
}
|
||||
|
||||
ShutDownVspCommand that = (ShutDownVspCommand) o;
|
||||
|
||||
return super.equals(that)
|
||||
&& Objects.equals(_dhcpOptions, that._dhcpOptions)
|
||||
&& Objects.equals(_network, that._network);
|
||||
}
|
||||
|
||||
|
||||
|
||||
@Override
|
||||
public int hashCode() {
|
||||
return Objects.hash(_network, _dhcpOptions);
|
||||
}
|
||||
|
||||
public String toDetailString() {
|
||||
return new ToStringBuilder(this)
|
||||
.append("network", _network)
|
||||
.append("dhcpOptions", _dhcpOptions)
|
||||
.toString();
|
||||
}
|
||||
}
|
||||
@ -19,11 +19,16 @@
|
||||
|
||||
package com.cloud.agent.api.guru;
|
||||
|
||||
import com.cloud.agent.api.Command;
|
||||
import java.util.Objects;
|
||||
|
||||
import net.nuage.vsp.acs.client.api.model.VspNetwork;
|
||||
import net.nuage.vsp.acs.client.api.model.VspNic;
|
||||
import net.nuage.vsp.acs.client.api.model.VspVm;
|
||||
|
||||
import org.apache.commons.lang.builder.HashCodeBuilder;
|
||||
|
||||
import com.cloud.agent.api.Command;
|
||||
|
||||
public class DeallocateVmVspCommand extends Command {
|
||||
|
||||
private final VspNetwork _network;
|
||||
@ -56,25 +61,29 @@ public class DeallocateVmVspCommand extends Command {
|
||||
|
||||
@Override
|
||||
public boolean equals(Object o) {
|
||||
if (this == o) return true;
|
||||
if (!(o instanceof DeallocateVmVspCommand)) return false;
|
||||
if (!super.equals(o)) return false;
|
||||
if (this == o) {
|
||||
return true;
|
||||
}
|
||||
|
||||
if (!(o instanceof DeallocateVmVspCommand)) {
|
||||
return false;
|
||||
}
|
||||
|
||||
DeallocateVmVspCommand that = (DeallocateVmVspCommand) o;
|
||||
|
||||
if (_network != null ? !_network.equals(that._network) : that._network != null) return false;
|
||||
if (_nic != null ? !_nic.equals(that._nic) : that._nic != null) return false;
|
||||
if (_vm != null ? !_vm.equals(that._vm) : that._vm != null) return false;
|
||||
|
||||
return true;
|
||||
return super.equals(that)
|
||||
&& Objects.equals(_network, that._network)
|
||||
&& Objects.equals(_nic, that._nic)
|
||||
&& Objects.equals(_vm, that._vm);
|
||||
}
|
||||
|
||||
@Override
|
||||
public int hashCode() {
|
||||
int result = super.hashCode();
|
||||
result = 31 * result + (_network != null ? _network.hashCode() : 0);
|
||||
result = 31 * result + (_vm != null ? _vm.hashCode() : 0);
|
||||
result = 31 * result + (_nic != null ? _nic.hashCode() : 0);
|
||||
return result;
|
||||
return new HashCodeBuilder()
|
||||
.appendSuper(super.hashCode())
|
||||
.append(_network)
|
||||
.append(_vm)
|
||||
.append(_nic)
|
||||
.toHashCode();
|
||||
}
|
||||
}
|
||||
|
||||
@ -19,28 +19,33 @@
|
||||
|
||||
package com.cloud.agent.api.guru;
|
||||
|
||||
import com.cloud.agent.api.Command;
|
||||
import java.util.Objects;
|
||||
|
||||
import net.nuage.vsp.acs.client.api.model.VspDhcpDomainOption;
|
||||
import net.nuage.vsp.acs.client.api.model.VspNetwork;
|
||||
|
||||
import java.util.List;
|
||||
import org.apache.commons.lang.builder.HashCodeBuilder;
|
||||
import org.apache.commons.lang.builder.ToStringBuilder;
|
||||
|
||||
import com.cloud.agent.api.Command;
|
||||
|
||||
public class ImplementNetworkVspCommand extends Command {
|
||||
|
||||
private final VspNetwork _network;
|
||||
private final List<String> _dnsServers;
|
||||
private final VspDhcpDomainOption _dhcpOption;
|
||||
|
||||
public ImplementNetworkVspCommand(VspNetwork network, List<String> dnsServers) {
|
||||
public ImplementNetworkVspCommand(VspNetwork network, VspDhcpDomainOption dhcpOption) {
|
||||
super();
|
||||
this._network = network;
|
||||
this._dnsServers = dnsServers;
|
||||
this._dhcpOption = dhcpOption;
|
||||
}
|
||||
|
||||
public VspNetwork getNetwork() {
|
||||
return _network;
|
||||
}
|
||||
|
||||
public List<String> getDnsServers() {
|
||||
return _dnsServers;
|
||||
public VspDhcpDomainOption getDhcpOption() {
|
||||
return _dhcpOption;
|
||||
}
|
||||
|
||||
@Override
|
||||
@ -50,23 +55,34 @@ public class ImplementNetworkVspCommand extends Command {
|
||||
|
||||
@Override
|
||||
public boolean equals(Object o) {
|
||||
if (this == o) return true;
|
||||
if (!(o instanceof ImplementNetworkVspCommand)) return false;
|
||||
if (!super.equals(o)) return false;
|
||||
if (this == o) {
|
||||
return true;
|
||||
}
|
||||
|
||||
if (!(o instanceof ImplementNetworkVspCommand)) {
|
||||
return false;
|
||||
}
|
||||
|
||||
ImplementNetworkVspCommand that = (ImplementNetworkVspCommand) o;
|
||||
|
||||
if (_dnsServers != null ? !_dnsServers.equals(that._dnsServers) : that._dnsServers != null) return false;
|
||||
if (_network != null ? !_network.equals(that._network) : that._network != null) return false;
|
||||
|
||||
return true;
|
||||
return super.equals(that)
|
||||
&& Objects.equals(_dhcpOption, that._dhcpOption)
|
||||
&& Objects.equals(_network, that._network);
|
||||
}
|
||||
|
||||
@Override
|
||||
public int hashCode() {
|
||||
int result = super.hashCode();
|
||||
result = 31 * result + (_network != null ? _network.hashCode() : 0);
|
||||
result = 31 * result + (_dnsServers != null ? _dnsServers.hashCode() : 0);
|
||||
return result;
|
||||
return new HashCodeBuilder()
|
||||
.appendSuper(super.hashCode())
|
||||
.append(_network)
|
||||
.append(_dhcpOption)
|
||||
.toHashCode();
|
||||
}
|
||||
|
||||
public String toDetailString() {
|
||||
return new ToStringBuilder(this)
|
||||
.append("network", _network)
|
||||
.append("dhcpOption", _dhcpOption)
|
||||
.toString();
|
||||
}
|
||||
}
|
||||
|
||||
@ -19,25 +19,33 @@
|
||||
|
||||
package com.cloud.agent.api.guru;
|
||||
|
||||
import com.cloud.agent.api.Command;
|
||||
import java.util.Objects;
|
||||
|
||||
import net.nuage.vsp.acs.client.api.model.VspDhcpVMOption;
|
||||
import net.nuage.vsp.acs.client.api.model.VspNetwork;
|
||||
import net.nuage.vsp.acs.client.api.model.VspNic;
|
||||
import net.nuage.vsp.acs.client.api.model.VspStaticNat;
|
||||
import net.nuage.vsp.acs.client.api.model.VspVm;
|
||||
|
||||
import org.apache.commons.lang.builder.HashCodeBuilder;
|
||||
|
||||
import com.cloud.agent.api.Command;
|
||||
|
||||
public class ReserveVmInterfaceVspCommand extends Command {
|
||||
|
||||
private final VspNetwork _network;
|
||||
private final VspVm _vm;
|
||||
private final VspNic _nic;
|
||||
private final VspStaticNat _staticNat;
|
||||
private final VspDhcpVMOption _dhcpOption;
|
||||
|
||||
public ReserveVmInterfaceVspCommand(VspNetwork network, VspVm vm, VspNic nic, VspStaticNat staticNat) {
|
||||
public ReserveVmInterfaceVspCommand(VspNetwork network, VspVm vm, VspNic nic, VspStaticNat staticNat, VspDhcpVMOption dhcpOption) {
|
||||
super();
|
||||
this._network = network;
|
||||
this._vm = vm;
|
||||
this._nic = nic;
|
||||
this._staticNat = staticNat;
|
||||
this._dhcpOption = dhcpOption;
|
||||
}
|
||||
|
||||
public VspNetwork getNetwork() {
|
||||
@ -56,6 +64,10 @@ public class ReserveVmInterfaceVspCommand extends Command {
|
||||
return _staticNat;
|
||||
}
|
||||
|
||||
public VspDhcpVMOption getDhcpOption() {
|
||||
return _dhcpOption;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean executeInSequence() {
|
||||
return false;
|
||||
@ -63,27 +75,33 @@ public class ReserveVmInterfaceVspCommand extends Command {
|
||||
|
||||
@Override
|
||||
public boolean equals(Object o) {
|
||||
if (this == o) return true;
|
||||
if (!(o instanceof ReserveVmInterfaceVspCommand)) return false;
|
||||
if (!super.equals(o)) return false;
|
||||
if (this == o) {
|
||||
return true;
|
||||
}
|
||||
|
||||
if (!(o instanceof ReserveVmInterfaceVspCommand)) {
|
||||
return false;
|
||||
}
|
||||
|
||||
ReserveVmInterfaceVspCommand that = (ReserveVmInterfaceVspCommand) o;
|
||||
|
||||
if (_network != null ? !_network.equals(that._network) : that._network != null) return false;
|
||||
if (_nic != null ? !_nic.equals(that._nic) : that._nic != null) return false;
|
||||
if (_staticNat != null ? !_staticNat.equals(that._staticNat) : that._staticNat != null) return false;
|
||||
if (_vm != null ? !_vm.equals(that._vm) : that._vm != null) return false;
|
||||
|
||||
return true;
|
||||
return super.equals(that)
|
||||
&& Objects.equals(_network, that._network)
|
||||
&& Objects.equals(_nic, that._nic)
|
||||
&& Objects.equals(_dhcpOption, that._dhcpOption)
|
||||
&& Objects.equals(_staticNat, that._staticNat)
|
||||
&& Objects.equals(_vm, that._vm);
|
||||
}
|
||||
|
||||
@Override
|
||||
public int hashCode() {
|
||||
int result = super.hashCode();
|
||||
result = 31 * result + (_network != null ? _network.hashCode() : 0);
|
||||
result = 31 * result + (_vm != null ? _vm.hashCode() : 0);
|
||||
result = 31 * result + (_nic != null ? _nic.hashCode() : 0);
|
||||
result = 31 * result + (_staticNat != null ? _staticNat.hashCode() : 0);
|
||||
return result;
|
||||
return new HashCodeBuilder()
|
||||
.appendSuper(super.hashCode())
|
||||
.append(_network)
|
||||
.append(_vm)
|
||||
.append(_nic)
|
||||
.append(_staticNat)
|
||||
.append(_dhcpOption)
|
||||
.toHashCode();
|
||||
}
|
||||
}
|
||||
|
||||
@ -19,9 +19,14 @@
|
||||
|
||||
package com.cloud.agent.api.guru;
|
||||
|
||||
import com.cloud.agent.api.Command;
|
||||
import java.util.Objects;
|
||||
|
||||
import net.nuage.vsp.acs.client.api.model.VspNetwork;
|
||||
|
||||
import org.apache.commons.lang.builder.HashCodeBuilder;
|
||||
|
||||
import com.cloud.agent.api.Command;
|
||||
|
||||
public class TrashNetworkVspCommand extends Command {
|
||||
|
||||
private final VspNetwork _network;
|
||||
@ -42,21 +47,25 @@ public class TrashNetworkVspCommand extends Command {
|
||||
|
||||
@Override
|
||||
public boolean equals(Object o) {
|
||||
if (this == o) return true;
|
||||
if (!(o instanceof TrashNetworkVspCommand)) return false;
|
||||
if (!super.equals(o)) return false;
|
||||
if (this == o) {
|
||||
return true;
|
||||
}
|
||||
|
||||
if (!(o instanceof TrashNetworkVspCommand)) {
|
||||
return false;
|
||||
}
|
||||
|
||||
TrashNetworkVspCommand that = (TrashNetworkVspCommand) o;
|
||||
|
||||
if (_network != null ? !_network.equals(that._network) : that._network != null) return false;
|
||||
|
||||
return true;
|
||||
return super.equals(that)
|
||||
&& Objects.equals(_network, that._network);
|
||||
}
|
||||
|
||||
@Override
|
||||
public int hashCode() {
|
||||
int result = super.hashCode();
|
||||
result = 31 * result + (_network != null ? _network.hashCode() : 0);
|
||||
return result;
|
||||
return new HashCodeBuilder()
|
||||
.appendSuper(super.hashCode())
|
||||
.append(_network)
|
||||
.toHashCode();
|
||||
}
|
||||
}
|
||||
|
||||
@ -0,0 +1,87 @@
|
||||
//
|
||||
// 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.agent.api.guru;
|
||||
|
||||
import java.util.List;
|
||||
import java.util.Objects;
|
||||
|
||||
import net.nuage.vsp.acs.client.api.model.VspDhcpVMOption;
|
||||
import net.nuage.vsp.acs.client.api.model.VspNetwork;
|
||||
|
||||
import org.apache.commons.lang.builder.HashCodeBuilder;
|
||||
import org.apache.commons.lang.builder.ToStringBuilder;
|
||||
|
||||
import com.cloud.agent.api.Command;
|
||||
|
||||
public class UpdateDhcpOptionVspCommand extends Command {
|
||||
|
||||
private final List<VspDhcpVMOption> _dhcpOptions;
|
||||
private final VspNetwork _network;
|
||||
|
||||
public UpdateDhcpOptionVspCommand(List<VspDhcpVMOption> dhcpOptions, VspNetwork network) {
|
||||
this._dhcpOptions = dhcpOptions;
|
||||
this._network = network;
|
||||
}
|
||||
|
||||
public List<VspDhcpVMOption> getDhcpOptions() {
|
||||
return _dhcpOptions;
|
||||
}
|
||||
|
||||
public VspNetwork getNetwork() {
|
||||
return _network;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean executeInSequence() {
|
||||
return false;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean equals(Object o) {
|
||||
if (this == o) {
|
||||
return true;
|
||||
}
|
||||
|
||||
if (!(o instanceof UpdateDhcpOptionVspCommand)) {
|
||||
return false;
|
||||
}
|
||||
|
||||
UpdateDhcpOptionVspCommand that = (UpdateDhcpOptionVspCommand) o;
|
||||
|
||||
return super.equals(that)
|
||||
&& Objects.equals(_network, that._network)
|
||||
&& Objects.equals(_dhcpOptions, that._dhcpOptions);
|
||||
}
|
||||
|
||||
@Override
|
||||
public int hashCode() {
|
||||
return new HashCodeBuilder()
|
||||
.appendSuper(super.hashCode())
|
||||
.append(_network)
|
||||
.toHashCode();
|
||||
}
|
||||
|
||||
public String toDetailString() {
|
||||
return new ToStringBuilder(this)
|
||||
.append("network", _network)
|
||||
.append("dhcpOptions", _dhcpOptions)
|
||||
.toString();
|
||||
}
|
||||
}
|
||||
@ -19,9 +19,14 @@
|
||||
|
||||
package com.cloud.agent.api.manager;
|
||||
|
||||
import com.cloud.agent.api.Answer;
|
||||
import java.util.Objects;
|
||||
|
||||
import net.nuage.vsp.acs.client.api.model.VspApiDefaults;
|
||||
|
||||
import org.apache.commons.lang.builder.HashCodeBuilder;
|
||||
|
||||
import com.cloud.agent.api.Answer;
|
||||
|
||||
public class GetApiDefaultsAnswer extends Answer {
|
||||
|
||||
private VspApiDefaults _apiDefaults;
|
||||
@ -41,21 +46,25 @@ public class GetApiDefaultsAnswer extends Answer {
|
||||
|
||||
@Override
|
||||
public boolean equals(Object o) {
|
||||
if (this == o) return true;
|
||||
if (!(o instanceof GetApiDefaultsAnswer)) return false;
|
||||
if (!super.equals(o)) return false;
|
||||
if (this == o) {
|
||||
return true;
|
||||
}
|
||||
|
||||
if (!(o instanceof GetApiDefaultsAnswer)) {
|
||||
return false;
|
||||
}
|
||||
|
||||
GetApiDefaultsAnswer that = (GetApiDefaultsAnswer) o;
|
||||
|
||||
if (_apiDefaults != null ? !_apiDefaults.equals(that._apiDefaults) : that._apiDefaults != null) return false;
|
||||
|
||||
return true;
|
||||
return super.equals(that)
|
||||
&& Objects.equals(_apiDefaults, that._apiDefaults);
|
||||
}
|
||||
|
||||
@Override
|
||||
public int hashCode() {
|
||||
int result = super.hashCode();
|
||||
result = 31 * result + (_apiDefaults != null ? _apiDefaults.hashCode() : 0);
|
||||
return result;
|
||||
return new HashCodeBuilder()
|
||||
.appendSuper(super.hashCode())
|
||||
.append(_apiDefaults)
|
||||
.toHashCode();
|
||||
}
|
||||
}
|
||||
|
||||
@ -19,6 +19,10 @@
|
||||
|
||||
package com.cloud.agent.api.manager;
|
||||
|
||||
import java.util.Objects;
|
||||
|
||||
import org.apache.commons.lang.builder.HashCodeBuilder;
|
||||
|
||||
import com.cloud.agent.api.Command;
|
||||
|
||||
public class SupportedApiVersionCommand extends Command {
|
||||
@ -41,21 +45,26 @@ public class SupportedApiVersionCommand extends Command {
|
||||
|
||||
@Override
|
||||
public boolean equals(Object o) {
|
||||
if (this == o) return true;
|
||||
if (!(o instanceof SupportedApiVersionCommand)) return false;
|
||||
if (!super.equals(o)) return false;
|
||||
if (this == o) {
|
||||
return true;
|
||||
}
|
||||
|
||||
if (!(o instanceof SupportedApiVersionCommand)) {
|
||||
return false;
|
||||
}
|
||||
|
||||
SupportedApiVersionCommand that = (SupportedApiVersionCommand) o;
|
||||
|
||||
if (_apiVersion != null ? !_apiVersion.equals(that._apiVersion) : that._apiVersion != null) return false;
|
||||
return super.equals(that)
|
||||
&& Objects.equals(_apiVersion, that._apiVersion);
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
@Override
|
||||
public int hashCode() {
|
||||
int result = super.hashCode();
|
||||
result = 31 * result + (_apiVersion != null ? _apiVersion.hashCode() : 0);
|
||||
return result;
|
||||
return new HashCodeBuilder()
|
||||
.appendSuper(super.hashCode())
|
||||
.append(_apiVersion)
|
||||
.toHashCode();
|
||||
}
|
||||
}
|
||||
@ -19,6 +19,8 @@
|
||||
|
||||
package com.cloud.agent.api.sync;
|
||||
|
||||
import org.apache.commons.lang.builder.HashCodeBuilder;
|
||||
|
||||
import com.cloud.agent.api.Answer;
|
||||
|
||||
public class SyncDomainAnswer extends Answer {
|
||||
@ -37,21 +39,26 @@ public class SyncDomainAnswer extends Answer {
|
||||
|
||||
@Override
|
||||
public boolean equals(Object o) {
|
||||
if (this == o) return true;
|
||||
if (!(o instanceof SyncDomainAnswer)) return false;
|
||||
if (!super.equals(o)) return false;
|
||||
if (this == o) {
|
||||
return true;
|
||||
}
|
||||
|
||||
if (!(o instanceof SyncDomainAnswer)) {
|
||||
return false;
|
||||
}
|
||||
|
||||
SyncDomainAnswer that = (SyncDomainAnswer) o;
|
||||
|
||||
if (_success != that._success) return false;
|
||||
|
||||
return true;
|
||||
return super.equals(that)
|
||||
&& _success == that._success;
|
||||
}
|
||||
|
||||
@Override
|
||||
public int hashCode() {
|
||||
int result = super.hashCode();
|
||||
result = 31 * result + (_success ? 1 : 0);
|
||||
return result;
|
||||
return new HashCodeBuilder()
|
||||
.appendSuper(super.hashCode())
|
||||
.append(_success)
|
||||
.toHashCode();
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
@ -19,32 +19,40 @@
|
||||
|
||||
package com.cloud.agent.api.sync;
|
||||
|
||||
import com.cloud.agent.api.Command;
|
||||
import java.util.Objects;
|
||||
|
||||
import net.nuage.vsp.acs.client.api.model.VspDomain;
|
||||
|
||||
import org.apache.commons.lang.builder.HashCodeBuilder;
|
||||
|
||||
import com.cloud.agent.api.Command;
|
||||
|
||||
public class SyncDomainCommand extends Command {
|
||||
|
||||
public enum Type { ADD, REMOVE }
|
||||
private final VspDomain _domain;
|
||||
private final boolean _toAdd;
|
||||
private final boolean _toRemove;
|
||||
private final Type _action;
|
||||
|
||||
public SyncDomainCommand(VspDomain domain, boolean toAdd, boolean toRemove) {
|
||||
public SyncDomainCommand(VspDomain domain, Type action) {
|
||||
super();
|
||||
this._domain = domain;
|
||||
this._toAdd = toAdd;
|
||||
this._toRemove = toRemove;
|
||||
this._action = action;
|
||||
}
|
||||
|
||||
public VspDomain getDomain() {
|
||||
return _domain;
|
||||
}
|
||||
|
||||
public Type getAction() {
|
||||
return _action;
|
||||
}
|
||||
|
||||
public boolean isToAdd() {
|
||||
return _toAdd;
|
||||
return Type.ADD.equals(_action);
|
||||
}
|
||||
|
||||
public boolean isToRemove() {
|
||||
return _toRemove;
|
||||
return Type.REMOVE.equals(_action);
|
||||
}
|
||||
|
||||
@Override
|
||||
@ -60,19 +68,17 @@ public class SyncDomainCommand extends Command {
|
||||
|
||||
SyncDomainCommand that = (SyncDomainCommand) o;
|
||||
|
||||
if (_toAdd != that._toAdd) return false;
|
||||
if (_toRemove != that._toRemove) return false;
|
||||
if (_domain != null ? !_domain.equals(that._domain) : that._domain != null) return false;
|
||||
|
||||
return true;
|
||||
return super.equals(that)
|
||||
&& Objects.equals(_action, that._action)
|
||||
&& Objects.equals(_domain, that._domain);
|
||||
}
|
||||
|
||||
@Override
|
||||
public int hashCode() {
|
||||
int result = super.hashCode();
|
||||
result = 31 * result + (_domain != null ? _domain.hashCode() : 0);
|
||||
result = 31 * result + (_toAdd ? 1 : 0);
|
||||
result = 31 * result + (_toRemove ? 1 : 0);
|
||||
return result;
|
||||
return new HashCodeBuilder()
|
||||
.appendSuper(super.hashCode())
|
||||
.append(_domain)
|
||||
.append(_action)
|
||||
.toHashCode();
|
||||
}
|
||||
}
|
||||
|
||||
@ -19,6 +19,10 @@
|
||||
|
||||
package com.cloud.agent.api.sync;
|
||||
|
||||
import java.util.Objects;
|
||||
|
||||
import org.apache.commons.lang.builder.HashCodeBuilder;
|
||||
|
||||
import com.cloud.agent.api.Answer;
|
||||
|
||||
public class SyncNuageVspCmsIdAnswer extends Answer {
|
||||
@ -48,26 +52,29 @@ public class SyncNuageVspCmsIdAnswer extends Answer {
|
||||
|
||||
@Override
|
||||
public boolean equals(Object o) {
|
||||
if (this == o) return true;
|
||||
if (!(o instanceof SyncNuageVspCmsIdAnswer)) return false;
|
||||
if (!super.equals(o)) return false;
|
||||
if (this == o) {
|
||||
return true;
|
||||
}
|
||||
|
||||
if (!(o instanceof SyncNuageVspCmsIdAnswer)) {
|
||||
return false;
|
||||
}
|
||||
|
||||
SyncNuageVspCmsIdAnswer that = (SyncNuageVspCmsIdAnswer) o;
|
||||
|
||||
if (_success != that._success) return false;
|
||||
if (_nuageVspCmsId != null ? !_nuageVspCmsId.equals(that._nuageVspCmsId) : that._nuageVspCmsId != null)
|
||||
return false;
|
||||
if (_syncType != that._syncType) return false;
|
||||
|
||||
return true;
|
||||
return super.equals(that)
|
||||
&& _success == that._success
|
||||
&& Objects.equals(_syncType, that._syncType)
|
||||
&& Objects.equals(_nuageVspCmsId, that._nuageVspCmsId);
|
||||
}
|
||||
|
||||
@Override
|
||||
public int hashCode() {
|
||||
int result = super.hashCode();
|
||||
result = 31 * result + (_success ? 1 : 0);
|
||||
result = 31 * result + (_nuageVspCmsId != null ? _nuageVspCmsId.hashCode() : 0);
|
||||
result = 31 * result + (_syncType != null ? _syncType.hashCode() : 0);
|
||||
return result;
|
||||
return new HashCodeBuilder()
|
||||
.appendSuper(super.hashCode())
|
||||
.append(_syncType)
|
||||
.append(_nuageVspCmsId)
|
||||
.append(_success)
|
||||
.toHashCode();
|
||||
}
|
||||
}
|
||||
|
||||
@ -19,6 +19,10 @@
|
||||
|
||||
package com.cloud.agent.api.sync;
|
||||
|
||||
import java.util.Objects;
|
||||
|
||||
import org.apache.commons.lang.builder.HashCodeBuilder;
|
||||
|
||||
import com.cloud.agent.api.Command;
|
||||
|
||||
public class SyncNuageVspCmsIdCommand extends Command {
|
||||
@ -55,18 +59,17 @@ public class SyncNuageVspCmsIdCommand extends Command {
|
||||
|
||||
SyncNuageVspCmsIdCommand that = (SyncNuageVspCmsIdCommand) o;
|
||||
|
||||
if (_nuageVspCmsId != null ? !_nuageVspCmsId.equals(that._nuageVspCmsId) : that._nuageVspCmsId != null)
|
||||
return false;
|
||||
if (_syncType != that._syncType) return false;
|
||||
|
||||
return true;
|
||||
return super.equals(that)
|
||||
&& Objects.equals(_syncType, that._syncType)
|
||||
&& Objects.equals(_nuageVspCmsId, that._nuageVspCmsId);
|
||||
}
|
||||
|
||||
@Override
|
||||
public int hashCode() {
|
||||
int result = super.hashCode();
|
||||
result = 31 * result + (_syncType != null ? _syncType.hashCode() : 0);
|
||||
result = 31 * result + (_nuageVspCmsId != null ? _nuageVspCmsId.hashCode() : 0);
|
||||
return result;
|
||||
return new HashCodeBuilder()
|
||||
.appendSuper(super.hashCode())
|
||||
.append(_syncType)
|
||||
.append(_nuageVspCmsId)
|
||||
.toHashCode();
|
||||
}
|
||||
}
|
||||
|
||||
@ -19,6 +19,31 @@
|
||||
|
||||
package com.cloud.network.element;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.HashMap;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.Set;
|
||||
import javax.annotation.Nullable;
|
||||
import javax.inject.Inject;
|
||||
import javax.naming.ConfigurationException;
|
||||
|
||||
import org.apache.commons.collections.CollectionUtils;
|
||||
import org.apache.log4j.Logger;
|
||||
import com.google.common.base.Function;
|
||||
import com.google.common.collect.Lists;
|
||||
|
||||
import net.nuage.vsp.acs.client.api.model.VspAclRule;
|
||||
import net.nuage.vsp.acs.client.api.model.VspDhcpDomainOption;
|
||||
import net.nuage.vsp.acs.client.api.model.VspNetwork;
|
||||
import net.nuage.vsp.acs.client.api.model.VspStaticNat;
|
||||
|
||||
import org.apache.cloudstack.api.InternalIdentity;
|
||||
import org.apache.cloudstack.framework.config.dao.ConfigurationDao;
|
||||
import org.apache.cloudstack.network.ExternalNetworkDeviceManager;
|
||||
import org.apache.cloudstack.network.topology.NetworkTopologyContext;
|
||||
import org.apache.cloudstack.resourcedetail.VpcDetailVO;
|
||||
import org.apache.cloudstack.resourcedetail.dao.VpcDetailsDao;
|
||||
import com.cloud.agent.AgentManager;
|
||||
import com.cloud.agent.api.Answer;
|
||||
import com.cloud.agent.api.StartupCommand;
|
||||
@ -27,6 +52,7 @@ import com.cloud.agent.api.element.ApplyAclRuleVspCommand;
|
||||
import com.cloud.agent.api.element.ApplyStaticNatVspCommand;
|
||||
import com.cloud.agent.api.element.ImplementVspCommand;
|
||||
import com.cloud.agent.api.element.ShutDownVpcVspCommand;
|
||||
import com.cloud.agent.api.element.ShutDownVspCommand;
|
||||
import com.cloud.dc.VlanVO;
|
||||
import com.cloud.dc.dao.DataCenterDao;
|
||||
import com.cloud.dc.dao.VlanDao;
|
||||
@ -60,6 +86,7 @@ import com.cloud.network.dao.PhysicalNetworkDao;
|
||||
import com.cloud.network.dao.PhysicalNetworkVO;
|
||||
import com.cloud.network.manager.NuageVspManager;
|
||||
import com.cloud.network.manager.NuageVspManagerImpl;
|
||||
import com.cloud.network.router.VpcVirtualNetworkApplianceManager;
|
||||
import com.cloud.network.rules.FirewallRule;
|
||||
import com.cloud.network.rules.FirewallRule.FirewallRuleType;
|
||||
import com.cloud.network.rules.FirewallRuleVO;
|
||||
@ -74,12 +101,14 @@ import com.cloud.network.vpc.VpcOfferingServiceMapVO;
|
||||
import com.cloud.network.vpc.dao.VpcDao;
|
||||
import com.cloud.network.vpc.dao.VpcOfferingServiceMapDao;
|
||||
import com.cloud.offering.NetworkOffering;
|
||||
import com.cloud.offerings.NetworkOfferingVO;
|
||||
import com.cloud.offerings.dao.NetworkOfferingDao;
|
||||
import com.cloud.offerings.dao.NetworkOfferingServiceMapDao;
|
||||
import com.cloud.resource.ResourceManager;
|
||||
import com.cloud.resource.ResourceStateAdapter;
|
||||
import com.cloud.resource.ServerResource;
|
||||
import com.cloud.resource.UnableDeleteHostException;
|
||||
import com.cloud.util.NuageVspEntityBuilder;
|
||||
import com.cloud.utils.component.AdapterBase;
|
||||
import com.cloud.utils.exception.CloudRuntimeException;
|
||||
import com.cloud.vm.DomainRouterVO;
|
||||
@ -89,28 +118,6 @@ import com.cloud.vm.ReservationContext;
|
||||
import com.cloud.vm.VirtualMachineProfile;
|
||||
import com.cloud.vm.dao.DomainRouterDao;
|
||||
import com.cloud.vm.dao.NicDao;
|
||||
import com.google.common.base.Function;
|
||||
import com.google.common.collect.Lists;
|
||||
import com.cloud.util.NuageVspEntityBuilder;
|
||||
import net.nuage.vsp.acs.client.api.model.VspAclRule;
|
||||
import net.nuage.vsp.acs.client.api.model.VspNetwork;
|
||||
import net.nuage.vsp.acs.client.api.model.VspStaticNat;
|
||||
import org.apache.cloudstack.api.InternalIdentity;
|
||||
import org.apache.cloudstack.framework.config.dao.ConfigurationDao;
|
||||
import org.apache.cloudstack.network.ExternalNetworkDeviceManager;
|
||||
import org.apache.cloudstack.resourcedetail.VpcDetailVO;
|
||||
import org.apache.cloudstack.resourcedetail.dao.VpcDetailsDao;
|
||||
import org.apache.commons.collections.CollectionUtils;
|
||||
import org.apache.log4j.Logger;
|
||||
|
||||
import javax.annotation.Nullable;
|
||||
import javax.inject.Inject;
|
||||
import javax.naming.ConfigurationException;
|
||||
import java.util.ArrayList;
|
||||
import java.util.HashMap;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.Set;
|
||||
|
||||
public class NuageVspElement extends AdapterBase implements ConnectivityProvider, IpDeployer, SourceNatServiceProvider, StaticNatServiceProvider, FirewallServiceProvider,
|
||||
DhcpServiceProvider, ResourceStateAdapter, VpcProvider, NetworkACLServiceProvider {
|
||||
@ -169,8 +176,16 @@ public class NuageVspElement extends AdapterBase implements ConnectivityProvider
|
||||
NuageVspEntityBuilder _nuageVspEntityBuilder;
|
||||
@Inject
|
||||
VpcDetailsDao _vpcDetailsDao;
|
||||
|
||||
@Inject
|
||||
NetworkModel _networkMgr;
|
||||
@Inject
|
||||
NetworkTopologyContext networkTopologyContext;
|
||||
@Inject
|
||||
DomainRouterDao _routerDao;
|
||||
@Inject
|
||||
VpcVirtualNetworkApplianceManager _routerMgr;
|
||||
|
||||
|
||||
@Override
|
||||
public boolean applyIps(Network network, List<? extends PublicIpAddress> ipAddress, Set<Service> service) throws ResourceUnavailableException {
|
||||
@ -257,8 +272,7 @@ public class NuageVspElement extends AdapterBase implements ConnectivityProvider
|
||||
}
|
||||
|
||||
|
||||
VspNetwork vspNetwork = _nuageVspEntityBuilder.buildVspNetwork(network, false);
|
||||
List<String> dnsServers = _nuageVspManager.getDnsDetails(network);
|
||||
VspNetwork vspNetwork = _nuageVspEntityBuilder.buildVspNetwork(network, true);
|
||||
List<VspAclRule> ingressFirewallRules = getFirewallRulesToApply(network, FirewallRule.TrafficType.Ingress);
|
||||
List<VspAclRule> egressFirewallRules = getFirewallRulesToApply(network, FirewallRule.TrafficType.Egress);
|
||||
|
||||
@ -267,9 +281,9 @@ public class NuageVspElement extends AdapterBase implements ConnectivityProvider
|
||||
for (IPAddressVO ip : ips) {
|
||||
floatingIpUuids.add(ip.getUuid());
|
||||
}
|
||||
|
||||
VspDhcpDomainOption vspDhcpOptions = _nuageVspEntityBuilder.buildNetworkDhcpOption(network, offering);
|
||||
HostVO nuageVspHost = getNuageVspHost(network.getPhysicalNetworkId());
|
||||
ImplementVspCommand cmd = new ImplementVspCommand(vspNetwork, dnsServers, ingressFirewallRules, egressFirewallRules, floatingIpUuids);
|
||||
ImplementVspCommand cmd = new ImplementVspCommand(vspNetwork, ingressFirewallRules, egressFirewallRules, floatingIpUuids, vspDhcpOptions);
|
||||
Answer answer = _agentMgr.easySend(nuageVspHost.getId(), cmd);
|
||||
if (answer == null || !answer.getResult()) {
|
||||
s_logger.error("ImplementVspCommand for network " + network.getUuid() + " failed on Nuage VSD " + nuageVspHost.getDetail("hostname"));
|
||||
@ -277,7 +291,6 @@ public class NuageVspElement extends AdapterBase implements ConnectivityProvider
|
||||
throw new ResourceUnavailableException(answer.getDetails(), Network.class, network.getId());
|
||||
}
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
@ -335,7 +348,21 @@ public class NuageVspElement extends AdapterBase implements ConnectivityProvider
|
||||
if (!canHandle(network, Service.Connectivity)) {
|
||||
return false;
|
||||
}
|
||||
|
||||
if (cleanup && isDnsSupportedByVR(network)) {
|
||||
// The network is restarted, possibly the domain name is changed, update the dhcpOptions as soon as possible
|
||||
NetworkOfferingVO networkOfferingVO = _ntwkOfferingDao.findById(network.getNetworkOfferingId());
|
||||
VspDhcpDomainOption vspDhcpOptions = _nuageVspEntityBuilder.buildNetworkDhcpOption(network, networkOfferingVO);
|
||||
VspNetwork vspNetwork = _nuageVspEntityBuilder.buildVspNetwork(network, false);
|
||||
HostVO nuageVspHost = getNuageVspHost(network.getPhysicalNetworkId());
|
||||
ShutDownVspCommand cmd = new ShutDownVspCommand(vspNetwork, vspDhcpOptions);
|
||||
Answer answer = _agentMgr.easySend(nuageVspHost.getId(), cmd);
|
||||
if (answer == null || !answer.getResult()) {
|
||||
s_logger.error("ShutDownVspCommand for network " + network.getUuid() + " failed on Nuage VSD " + nuageVspHost.getDetail("hostname"));
|
||||
if ((null != answer) && (null != answer.getDetails())) {
|
||||
throw new ResourceUnavailableException(answer.getDetails(), Network.class, network.getId());
|
||||
}
|
||||
}
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
@ -436,11 +463,18 @@ public class NuageVspElement extends AdapterBase implements ConnectivityProvider
|
||||
return true;
|
||||
}
|
||||
|
||||
private boolean isDnsSupportedByVR(Network network) {
|
||||
return (_networkModel.areServicesSupportedInNetwork(network.getId(), Service.Dns) &&
|
||||
( _networkModel.isProviderSupportServiceInNetwork(network.getId(), Service.Dns, Provider.VirtualRouter) ||
|
||||
_networkModel.isProviderSupportServiceInNetwork(network.getId(), Service.Dns, Provider.VPCVirtualRouter)));
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean removeDhcpSupportForSubnet(Network network) throws ResourceUnavailableException {
|
||||
return true;
|
||||
}
|
||||
|
||||
|
||||
@Override
|
||||
public boolean applyStaticNats(Network config, List<? extends StaticNat> rules) throws ResourceUnavailableException {
|
||||
List<VspStaticNat> vspStaticNatDetails = new ArrayList<VspStaticNat>();
|
||||
|
||||
@ -19,12 +19,33 @@
|
||||
|
||||
package com.cloud.network.guru;
|
||||
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
|
||||
import javax.inject.Inject;
|
||||
|
||||
import net.nuage.vsp.acs.client.api.model.VspDhcpVMOption;
|
||||
import net.nuage.vsp.acs.client.api.model.VspNetwork;
|
||||
import net.nuage.vsp.acs.client.api.model.VspNic;
|
||||
import net.nuage.vsp.acs.client.api.model.VspStaticNat;
|
||||
import net.nuage.vsp.acs.client.api.model.VspVm;
|
||||
|
||||
import org.apache.log4j.Logger;
|
||||
|
||||
import com.google.common.base.Strings;
|
||||
import com.google.common.collect.Lists;
|
||||
import com.google.common.collect.Maps;
|
||||
|
||||
import org.apache.cloudstack.resourcedetail.VpcDetailVO;
|
||||
import org.apache.cloudstack.resourcedetail.dao.VpcDetailsDao;
|
||||
|
||||
import com.cloud.agent.AgentManager;
|
||||
import com.cloud.agent.api.Answer;
|
||||
import com.cloud.agent.api.guru.DeallocateVmVspCommand;
|
||||
import com.cloud.agent.api.guru.ImplementNetworkVspCommand;
|
||||
import com.cloud.agent.api.guru.ReserveVmInterfaceVspCommand;
|
||||
import com.cloud.agent.api.guru.TrashNetworkVspCommand;
|
||||
import com.cloud.agent.api.guru.UpdateDhcpOptionVspCommand;
|
||||
import com.cloud.configuration.ConfigurationManager;
|
||||
import com.cloud.dc.DataCenter;
|
||||
import com.cloud.dc.DataCenter.NetworkType;
|
||||
@ -59,25 +80,17 @@ import com.cloud.offerings.dao.NetworkOfferingServiceMapDao;
|
||||
import com.cloud.user.Account;
|
||||
import com.cloud.user.AccountVO;
|
||||
import com.cloud.user.dao.AccountDao;
|
||||
import com.cloud.util.NuageVspEntityBuilder;
|
||||
import com.cloud.utils.StringUtils;
|
||||
import com.cloud.utils.db.DB;
|
||||
import com.cloud.utils.exception.CloudRuntimeException;
|
||||
import com.cloud.vm.Nic;
|
||||
import com.cloud.vm.NicProfile;
|
||||
import com.cloud.vm.NicVO;
|
||||
import com.cloud.vm.ReservationContext;
|
||||
import com.cloud.vm.VirtualMachine;
|
||||
import com.cloud.vm.VirtualMachineProfile;
|
||||
import com.google.common.base.Strings;
|
||||
import com.cloud.util.NuageVspEntityBuilder;
|
||||
import net.nuage.vsp.acs.client.api.model.VspNetwork;
|
||||
import net.nuage.vsp.acs.client.api.model.VspNic;
|
||||
import net.nuage.vsp.acs.client.api.model.VspStaticNat;
|
||||
import net.nuage.vsp.acs.client.api.model.VspVm;
|
||||
import org.apache.cloudstack.resourcedetail.VpcDetailVO;
|
||||
import org.apache.cloudstack.resourcedetail.dao.VpcDetailsDao;
|
||||
import org.apache.log4j.Logger;
|
||||
|
||||
import javax.inject.Inject;
|
||||
import java.util.List;
|
||||
import com.cloud.vm.dao.VMInstanceDao;
|
||||
|
||||
public class NuageVspGuestNetworkGuru extends GuestNetworkGuru {
|
||||
public static final Logger s_logger = Logger.getLogger(NuageVspGuestNetworkGuru.class);
|
||||
@ -97,6 +110,8 @@ public class NuageVspGuestNetworkGuru extends GuestNetworkGuru {
|
||||
@Inject
|
||||
VpcDao _vpcDao;
|
||||
@Inject
|
||||
VMInstanceDao _vmInstanceDao;
|
||||
@Inject
|
||||
AgentManager _agentMgr;
|
||||
@Inject
|
||||
NuageVspManager _nuageVspManager;
|
||||
@ -184,8 +199,7 @@ public class NuageVspGuestNetworkGuru extends GuestNetworkGuru {
|
||||
implemented.setBroadcastDomainType(Networks.BroadcastDomainType.Vsp);
|
||||
|
||||
HostVO nuageVspHost = getNuageVspHost(physicalNetworkId);
|
||||
List<String> dnsServers = _nuageVspManager.getDnsDetails(network);
|
||||
ImplementNetworkVspCommand cmd = new ImplementNetworkVspCommand(vspNetwork, dnsServers);
|
||||
ImplementNetworkVspCommand cmd = new ImplementNetworkVspCommand(vspNetwork, _nuageVspEntityBuilder.buildNetworkDhcpOption(network, offering));
|
||||
Answer answer = _agentMgr.easySend(nuageVspHost.getId(), cmd);
|
||||
|
||||
if (answer == null || !answer.getResult()) {
|
||||
@ -242,6 +256,20 @@ public class NuageVspGuestNetworkGuru extends GuestNetworkGuru {
|
||||
throw new IllegalStateException("The broadcast URI path " + network.getBroadcastUri() + " is empty or in an incorrect format.");
|
||||
}
|
||||
|
||||
HostVO nuageVspHost = getNuageVspHost(network.getPhysicalNetworkId());
|
||||
VspNetwork vspNetwork = _nuageVspEntityBuilder.buildVspNetwork(network, false);
|
||||
|
||||
// Set flags for dhcp options
|
||||
boolean networkHasDns = networkHasDns(network);
|
||||
|
||||
Map<Long, Boolean> networkHasDnsCache = Maps.newHashMap();
|
||||
networkHasDnsCache.put(network.getId(), networkHasDns);
|
||||
|
||||
// Determine if dhcp options of the other nics in the network need to be updated
|
||||
if (vm.getType() == VirtualMachine.Type.DomainRouter && network.getState() != State.Implementing) {
|
||||
updateDhcpOptionsForExistingVms(network, nuageVspHost, vspNetwork, networkHasDns, networkHasDnsCache);
|
||||
}
|
||||
|
||||
nic.setBroadcastUri(network.getBroadcastUri());
|
||||
nic.setIsolationUri(network.getBroadcastUri());
|
||||
|
||||
@ -250,7 +278,6 @@ public class NuageVspGuestNetworkGuru extends GuestNetworkGuru {
|
||||
NicVO nicFromDb = _nicDao.findById(nic.getId());
|
||||
IPAddressVO staticNatIp = _ipAddressDao.findByVmIdAndNetworkId(network.getId(), vm.getId());
|
||||
|
||||
VspNetwork vspNetwork = _nuageVspEntityBuilder.buildVspNetwork(network, false);
|
||||
VspVm vspVm = _nuageVspEntityBuilder.buildVspVm(vm.getVirtualMachine(), network);
|
||||
VspNic vspNic = _nuageVspEntityBuilder.buildVspNic(nicFromDb.getUuid(), nic);
|
||||
VspStaticNat vspStaticNat = null;
|
||||
@ -259,8 +286,9 @@ public class NuageVspGuestNetworkGuru extends GuestNetworkGuru {
|
||||
vspStaticNat = _nuageVspEntityBuilder.buildVspStaticNat(null, staticNatIp, staticNatVlan, null);
|
||||
}
|
||||
|
||||
HostVO nuageVspHost = getNuageVspHost(network.getPhysicalNetworkId());
|
||||
ReserveVmInterfaceVspCommand cmd = new ReserveVmInterfaceVspCommand(vspNetwork, vspVm, vspNic, vspStaticNat);
|
||||
boolean defaultHasDns = getDefaultHasDns(networkHasDnsCache, nicFromDb);
|
||||
VspDhcpVMOption dhcpOption = _nuageVspEntityBuilder.buildVmDhcpOption(nicFromDb, defaultHasDns, networkHasDns);
|
||||
ReserveVmInterfaceVspCommand cmd = new ReserveVmInterfaceVspCommand(vspNetwork, vspVm, vspNic, vspStaticNat, dhcpOption);
|
||||
Answer answer = _agentMgr.easySend(nuageVspHost.getId(), cmd);
|
||||
|
||||
if (answer == null || !answer.getResult()) {
|
||||
@ -285,6 +313,34 @@ public class NuageVspGuestNetworkGuru extends GuestNetworkGuru {
|
||||
}
|
||||
}
|
||||
|
||||
private void updateDhcpOptionsForExistingVms(Network network, HostVO nuageVspHost, VspNetwork vspNetwork, boolean networkHasDns, Map<Long, Boolean> networkHasDnsCache)
|
||||
throws InsufficientVirtualNetworkCapacityException {
|
||||
// Update dhcp options if a VR is added when we are not initiating the network
|
||||
if(s_logger.isDebugEnabled()) {
|
||||
s_logger.debug(String.format("DomainRouter is added to an existing network: %s in state: %s", network.getName(), network.getState()));
|
||||
}
|
||||
List<VspDhcpVMOption> dhcpOptions = Lists.newLinkedList();
|
||||
for (NicVO userNic :_nicDao.listByNetworkId(network.getId())) {
|
||||
if (userNic.getVmType() != VirtualMachine.Type.DomainRouter) {
|
||||
boolean defaultHasDns = getDefaultHasDns(networkHasDnsCache, userNic);
|
||||
dhcpOptions.add(_nuageVspEntityBuilder.buildVmDhcpOption(userNic, defaultHasDns, networkHasDns));
|
||||
}
|
||||
}
|
||||
|
||||
if (!dhcpOptions.isEmpty()) {
|
||||
UpdateDhcpOptionVspCommand cmd = new UpdateDhcpOptionVspCommand(dhcpOptions, vspNetwork);
|
||||
Answer answer = _agentMgr.easySend(nuageVspHost.getId(), cmd);
|
||||
|
||||
if (answer == null || !answer.getResult()) {
|
||||
s_logger.error("UpdateDhcpOptionVspCommand failed at \"reserve\" for network " + vspNetwork.getName());
|
||||
if ((null != answer) && (null != answer.getDetails())) {
|
||||
s_logger.error(answer.getDetails());
|
||||
}
|
||||
throw new InsufficientVirtualNetworkCapacityException("Failed to reserve VM in Nuage VSP.", Network.class, network.getId());
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
protected boolean canHandle(NetworkOffering offering, final NetworkType networkType, final PhysicalNetwork physicalNetwork) {
|
||||
if (networkType == NetworkType.Advanced && isMyTrafficType(offering.getTrafficType()) && (offering.getGuestType() == Network.GuestType.Isolated || offering.getGuestType() == Network.GuestType.Shared)
|
||||
@ -403,4 +459,39 @@ public class NuageVspGuestNetworkGuru extends GuestNetworkGuru {
|
||||
}
|
||||
return nuageVspHost;
|
||||
}
|
||||
|
||||
private boolean networkHasDns(Network network) {
|
||||
|
||||
if (network != null) {
|
||||
List<String> dnsProviders = _ntwkOfferingSrvcDao.listProvidersForServiceForNetworkOffering(network.getNetworkOfferingId(), Network.Service.Dns);
|
||||
return dnsProviders.contains(Network.Provider.VirtualRouter.getName())
|
||||
|| dnsProviders.contains(Network.Provider.VPCVirtualRouter.getName());
|
||||
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
private boolean getDefaultHasDns(Map<Long, Boolean> cache, Nic nic) {
|
||||
Long networkId = nic.isDefaultNic()
|
||||
? Long.valueOf(nic.getNetworkId())
|
||||
: getDefaultNetwork(nic.getInstanceId());
|
||||
|
||||
Boolean hasDns = cache.get(networkId);
|
||||
if (hasDns == null) {
|
||||
hasDns = networkHasDns(_networkDao.findById(networkId));
|
||||
cache.put(networkId, hasDns);
|
||||
}
|
||||
return hasDns;
|
||||
}
|
||||
|
||||
private Long getDefaultNetwork(long vmId) {
|
||||
NicVO defaultNic = _nicDao.findDefaultNicForVM(vmId);
|
||||
if (defaultNic != null) {
|
||||
return defaultNic.getNetworkId();
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
@ -191,7 +191,7 @@ public class NuageVspManagerImpl extends ManagerBase implements NuageVspManager,
|
||||
|
||||
static {
|
||||
Set<Network.Provider> nuageVspProviders = ImmutableSet.of(Network.Provider.NuageVsp);
|
||||
Set<Network.Provider> userDataProviders = ImmutableSet.of(Network.Provider.VPCVirtualRouter);
|
||||
Set<Network.Provider> vrProviders = ImmutableSet.of(Network.Provider.VPCVirtualRouter);
|
||||
Set<Network.Provider> lbProviders = ImmutableSet.of(Network.Provider.InternalLbVm);
|
||||
NUAGE_VSP_VPC_SERVICE_MAP = ImmutableMap.<Network.Service, Set<Network.Provider>>builder()
|
||||
.put(Network.Service.Connectivity, nuageVspProviders)
|
||||
@ -200,8 +200,9 @@ public class NuageVspManagerImpl extends ManagerBase implements NuageVspManager,
|
||||
.put(Network.Service.StaticNat, nuageVspProviders)
|
||||
.put(Network.Service.SourceNat, nuageVspProviders)
|
||||
.put(Network.Service.NetworkACL, nuageVspProviders)
|
||||
.put(Network.Service.UserData, userDataProviders)
|
||||
.put(Network.Service.UserData, vrProviders)
|
||||
.put(Network.Service.Lb, lbProviders)
|
||||
.put(Network.Service.Dns, vrProviders)
|
||||
.build();
|
||||
}
|
||||
|
||||
@ -304,7 +305,7 @@ public class NuageVspManagerImpl extends ManagerBase implements NuageVspManager,
|
||||
resource.configure(cmd.getHostName(), Maps.<String, Object>newHashMap(resourceConfiguration.build()));
|
||||
|
||||
if (matchingNuageVspDevice == null) {
|
||||
auditDomainsOnVsp((HostVO) host, true, false);
|
||||
auditDomainsOnVsp((HostVO) host, true);
|
||||
}
|
||||
|
||||
return nuageVspDevice;
|
||||
@ -486,7 +487,7 @@ public class NuageVspManagerImpl extends ManagerBase implements NuageVspManager,
|
||||
HostVO host = findNuageVspHost(nuageVspDevice.getHostId());
|
||||
String nuageVspCmsId = findNuageVspCmsIdForDevice(nuageVspDevice.getId(), cmsIdConfig);
|
||||
if (matchingNuageVspDevice == null) {
|
||||
if (!auditDomainsOnVsp(host, false, true)) {
|
||||
if (!auditDomainsOnVsp(host, false)) {
|
||||
return false;
|
||||
}
|
||||
|
||||
@ -603,11 +604,11 @@ public class NuageVspManagerImpl extends ManagerBase implements NuageVspManager,
|
||||
}
|
||||
|
||||
if (validateDomains) {
|
||||
auditDomainsOnVsp(host, true, false);
|
||||
auditDomainsOnVsp(host, true);
|
||||
}
|
||||
}
|
||||
|
||||
private boolean auditDomainsOnVsp(HostVO host, boolean add, boolean remove) {
|
||||
private boolean auditDomainsOnVsp(HostVO host, boolean add) {
|
||||
List<NuageVspDeviceVO> nuageVspDevices = _nuageVspDao.listByHost(host.getId());
|
||||
if (CollectionUtils.isEmpty(nuageVspDevices)) {
|
||||
return true;
|
||||
@ -617,7 +618,7 @@ public class NuageVspManagerImpl extends ManagerBase implements NuageVspManager,
|
||||
List<DomainVO> allDomains = _domainDao.listAll();
|
||||
for (DomainVO domain : allDomains) {
|
||||
VspDomain vspDomain = _nuageVspEntityBuilder.buildVspDomain(domain);
|
||||
SyncDomainCommand cmd = new SyncDomainCommand(vspDomain, add, remove);
|
||||
SyncDomainCommand cmd = new SyncDomainCommand(vspDomain, add ? SyncDomainCommand.Type.ADD : SyncDomainCommand.Type.REMOVE);
|
||||
SyncDomainAnswer answer = (SyncDomainAnswer) _agentMgr.easySend(host.getId(), cmd);
|
||||
return answer.getSuccess();
|
||||
}
|
||||
@ -714,10 +715,9 @@ public class NuageVspManagerImpl extends ManagerBase implements NuageVspManager,
|
||||
|
||||
List<NuageVspDeviceVO> nuageVspDevices = _nuageVspDao.listAll();
|
||||
for (NuageVspDeviceVO nuageVspDevice : nuageVspDevices) {
|
||||
HostVO host = findNuageVspHost(nuageVspDevice.getHostId());
|
||||
VspDomain vspDomain = _nuageVspEntityBuilder.buildVspDomain(domain);
|
||||
SyncDomainCommand cmd = new SyncDomainCommand(vspDomain, true, false);
|
||||
_agentMgr.easySend(host.getId(), cmd);
|
||||
SyncDomainCommand cmd = new SyncDomainCommand(vspDomain, SyncDomainCommand.Type.ADD);
|
||||
_agentMgr.easySend(nuageVspDevice.getHostId(), cmd);
|
||||
}
|
||||
} finally {
|
||||
_domainDao.releaseFromLockTable(domain.getId());
|
||||
@ -732,10 +732,9 @@ public class NuageVspManagerImpl extends ManagerBase implements NuageVspManager,
|
||||
DomainVO domain = (DomainVO) args;
|
||||
List<NuageVspDeviceVO> nuageVspDevices = _nuageVspDao.listAll();
|
||||
for (NuageVspDeviceVO nuageVspDevice : nuageVspDevices) {
|
||||
HostVO host = findNuageVspHost(nuageVspDevice.getHostId());
|
||||
VspDomain vspDomain = _nuageVspEntityBuilder.buildVspDomain(domain);
|
||||
SyncDomainCommand cmd = new SyncDomainCommand(vspDomain, false, true);
|
||||
_agentMgr.easySend(host.getId(), cmd);
|
||||
SyncDomainCommand cmd = new SyncDomainCommand(vspDomain, SyncDomainCommand.Type.REMOVE);
|
||||
_agentMgr.easySend(nuageVspDevice.getHostId(), cmd);
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
@ -19,6 +19,24 @@
|
||||
|
||||
package com.cloud.network.resource;
|
||||
|
||||
import java.util.HashMap;
|
||||
import java.util.Map;
|
||||
import java.util.concurrent.ExecutionException;
|
||||
import java.util.regex.Pattern;
|
||||
|
||||
import javax.naming.ConfigurationException;
|
||||
|
||||
import net.nuage.vsp.acs.NuageVspPluginClientLoader;
|
||||
import net.nuage.vsp.acs.client.api.NuageVspApiClient;
|
||||
import net.nuage.vsp.acs.client.api.NuageVspElementClient;
|
||||
import net.nuage.vsp.acs.client.api.NuageVspGuruClient;
|
||||
import net.nuage.vsp.acs.client.api.NuageVspManagerClient;
|
||||
import net.nuage.vsp.acs.client.common.model.Pair;
|
||||
|
||||
import org.apache.log4j.Logger;
|
||||
|
||||
import com.google.common.base.Strings;
|
||||
|
||||
import com.cloud.agent.IAgentControl;
|
||||
import com.cloud.agent.api.Answer;
|
||||
import com.cloud.agent.api.Command;
|
||||
@ -34,10 +52,12 @@ import com.cloud.agent.api.element.ApplyAclRuleVspCommand;
|
||||
import com.cloud.agent.api.element.ApplyStaticNatVspCommand;
|
||||
import com.cloud.agent.api.element.ImplementVspCommand;
|
||||
import com.cloud.agent.api.element.ShutDownVpcVspCommand;
|
||||
import com.cloud.agent.api.element.ShutDownVspCommand;
|
||||
import com.cloud.agent.api.guru.DeallocateVmVspCommand;
|
||||
import com.cloud.agent.api.guru.ImplementNetworkVspCommand;
|
||||
import com.cloud.agent.api.guru.ReserveVmInterfaceVspCommand;
|
||||
import com.cloud.agent.api.guru.TrashNetworkVspCommand;
|
||||
import com.cloud.agent.api.guru.UpdateDhcpOptionVspCommand;
|
||||
import com.cloud.agent.api.manager.GetApiDefaultsAnswer;
|
||||
import com.cloud.agent.api.manager.GetApiDefaultsCommand;
|
||||
import com.cloud.agent.api.manager.SupportedApiVersionCommand;
|
||||
@ -51,20 +71,6 @@ import com.cloud.util.NuageVspUtil;
|
||||
import com.cloud.utils.StringUtils;
|
||||
import com.cloud.utils.component.ManagerBase;
|
||||
import com.cloud.utils.exception.CloudRuntimeException;
|
||||
import com.google.common.base.Strings;
|
||||
import net.nuage.vsp.acs.NuageVspPluginClientLoader;
|
||||
import net.nuage.vsp.acs.client.api.NuageVspApiClient;
|
||||
import net.nuage.vsp.acs.client.api.NuageVspElementClient;
|
||||
import net.nuage.vsp.acs.client.api.NuageVspGuruClient;
|
||||
import net.nuage.vsp.acs.client.api.NuageVspManagerClient;
|
||||
import net.nuage.vsp.acs.client.common.model.Pair;
|
||||
import org.apache.log4j.Logger;
|
||||
|
||||
import javax.naming.ConfigurationException;
|
||||
import java.util.HashMap;
|
||||
import java.util.Map;
|
||||
import java.util.concurrent.ExecutionException;
|
||||
import java.util.regex.Pattern;
|
||||
|
||||
import static com.cloud.agent.api.sync.SyncNuageVspCmsIdCommand.SyncType;
|
||||
|
||||
@ -291,6 +297,8 @@ public class NuageVspResource extends ManagerBase implements ServerResource {
|
||||
return executeRequest((DeallocateVmVspCommand)cmd);
|
||||
} else if (cmd instanceof TrashNetworkVspCommand) {
|
||||
return executeRequest((TrashNetworkVspCommand)cmd);
|
||||
} else if (cmd instanceof UpdateDhcpOptionVspCommand) {
|
||||
return executeRequest((UpdateDhcpOptionVspCommand)cmd);
|
||||
}
|
||||
//Element commands
|
||||
else if (cmd instanceof ImplementVspCommand) {
|
||||
@ -301,6 +309,8 @@ public class NuageVspResource extends ManagerBase implements ServerResource {
|
||||
return executeRequest((ApplyStaticNatVspCommand)cmd);
|
||||
} else if (cmd instanceof ShutDownVpcVspCommand) {
|
||||
return executeRequest((ShutDownVpcVspCommand)cmd);
|
||||
} else if (cmd instanceof ShutDownVspCommand) {
|
||||
return executeRequest((ShutDownVspCommand)cmd);
|
||||
}
|
||||
//Sync Commands
|
||||
else if (cmd instanceof SyncNuageVspCmsIdCommand) {
|
||||
@ -344,10 +354,10 @@ public class NuageVspResource extends ManagerBase implements ServerResource {
|
||||
private Answer executeRequest(ImplementNetworkVspCommand cmd) {
|
||||
try {
|
||||
isNuageVspGuruLoaded();
|
||||
_nuageVspGuruClient.implement(cmd.getNetwork(), cmd.getDnsServers());
|
||||
_nuageVspGuruClient.implement(cmd.getNetwork(), cmd.getDhcpOption());
|
||||
return new Answer(cmd, true, "Created network mapping to " + cmd.getNetwork().getName() + " on Nuage VSD " + _hostName);
|
||||
} catch (ExecutionException | ConfigurationException e) {
|
||||
s_logger.error("Failure during " + cmd + " on Nuage VSD " + _hostName, e);
|
||||
s_logger.error("Failure during " + cmd.toDetailString() + " on Nuage VSD " + _hostName, e);
|
||||
return new Answer(cmd, e);
|
||||
}
|
||||
}
|
||||
@ -355,7 +365,7 @@ public class NuageVspResource extends ManagerBase implements ServerResource {
|
||||
private Answer executeRequest(ReserveVmInterfaceVspCommand cmd) {
|
||||
try {
|
||||
isNuageVspGuruLoaded();
|
||||
_nuageVspGuruClient.reserve(cmd.getNetwork(), cmd.getVm(), cmd.getNic(), cmd.getStaticNat());
|
||||
_nuageVspGuruClient.reserve(cmd.getNetwork(), cmd.getVm(), cmd.getNic(), cmd.getStaticNat(), cmd.getDhcpOption());
|
||||
return new Answer(cmd, true, "Created NIC that maps to nicUuid" + cmd.getNic().getUuid() + " on Nuage VSD " + _hostName);
|
||||
} catch (ExecutionException | ConfigurationException e) {
|
||||
s_logger.error("Failure during " + cmd + " on Nuage VSD " + _hostName, e);
|
||||
@ -386,6 +396,17 @@ public class NuageVspResource extends ManagerBase implements ServerResource {
|
||||
}
|
||||
}
|
||||
|
||||
private Answer executeRequest(UpdateDhcpOptionVspCommand cmd) {
|
||||
try {
|
||||
isNuageVspManagerLoaded();
|
||||
_nuageVspGuruClient.applyDhcpOptions(cmd.getDhcpOptions(), cmd.getNetwork());
|
||||
return new Answer(cmd, true, "Update DhcpOptions on VM's in network: " + cmd.getNetwork().getName() + " on Nuage VSD " + _hostName);
|
||||
} catch (ExecutionException | ConfigurationException e) {
|
||||
s_logger.error("Failure during " + cmd.toDetailString() + " on Nuage VSD " + _hostName, e);
|
||||
return new Answer(cmd, e);
|
||||
}
|
||||
}
|
||||
|
||||
private Answer executeRequest(ApplyStaticNatVspCommand cmd) {
|
||||
try {
|
||||
isNuageVspElementLoaded();
|
||||
@ -400,7 +421,7 @@ public class NuageVspResource extends ManagerBase implements ServerResource {
|
||||
private Answer executeRequest(ImplementVspCommand cmd) {
|
||||
try {
|
||||
isNuageVspElementLoaded();
|
||||
boolean success = _nuageVspElementClient.implement(cmd.getNetwork(), cmd.getDnsServers(), cmd.getIngressFirewallRules(),
|
||||
boolean success = _nuageVspElementClient.implement(cmd.getNetwork(), cmd.getDhcpOption(), cmd.getIngressFirewallRules(),
|
||||
cmd.getEgressFirewallRules(), cmd.getFloatingIpUuids());
|
||||
return new Answer(cmd, success, "Implemented network " + cmd.getNetwork().getUuid() + " on Nuage VSD " + _hostName);
|
||||
} catch (ExecutionException | ConfigurationException e) {
|
||||
@ -431,6 +452,17 @@ public class NuageVspResource extends ManagerBase implements ServerResource {
|
||||
}
|
||||
}
|
||||
|
||||
private Answer executeRequest(ShutDownVspCommand cmd) {
|
||||
try {
|
||||
isNuageVspElementLoaded();
|
||||
_nuageVspElementClient.shutdownNetwork(cmd.getNetwork(), cmd.getDhcpOptions());
|
||||
return new Answer(cmd, true, "Shutdown VPC " + cmd.getNetwork().getUuid()+ " on Nuage VSD " + _hostName);
|
||||
} catch (ConfigurationException e) {
|
||||
s_logger.error("Failure during " + cmd.toDetailString() + " on Nuage VSD " + _hostName, e);
|
||||
return new Answer(cmd, e);
|
||||
}
|
||||
}
|
||||
|
||||
private Answer executeRequest(SyncNuageVspCmsIdCommand cmd) {
|
||||
try {
|
||||
isNuageVspManagerLoaded();
|
||||
|
||||
@ -30,10 +30,12 @@ import com.cloud.network.NetworkModel;
|
||||
import com.cloud.network.dao.IPAddressDao;
|
||||
import com.cloud.network.dao.IPAddressVO;
|
||||
import com.cloud.network.dao.NetworkDetailsDao;
|
||||
import com.cloud.network.manager.NuageVspManager;
|
||||
import com.cloud.network.rules.FirewallRule;
|
||||
import com.cloud.network.vpc.NetworkACLItem;
|
||||
import com.cloud.network.vpc.VpcVO;
|
||||
import com.cloud.network.vpc.dao.VpcDao;
|
||||
import com.cloud.offering.NetworkOffering;
|
||||
import com.cloud.offerings.NetworkOfferingVO;
|
||||
import com.cloud.offerings.dao.NetworkOfferingDao;
|
||||
import com.cloud.offerings.dao.NetworkOfferingServiceMapDao;
|
||||
@ -43,10 +45,14 @@ import com.cloud.utils.exception.CloudRuntimeException;
|
||||
import com.cloud.utils.net.NetUtils;
|
||||
import com.cloud.vm.NicProfile;
|
||||
import com.cloud.vm.NicVO;
|
||||
import com.cloud.vm.VMInstanceVO;
|
||||
import com.cloud.vm.VirtualMachine;
|
||||
import com.cloud.vm.dao.VMInstanceDao;
|
||||
import com.google.common.collect.Iterables;
|
||||
import com.google.common.collect.Lists;
|
||||
import net.nuage.vsp.acs.client.api.model.VspAclRule;
|
||||
import net.nuage.vsp.acs.client.api.model.VspDhcpDomainOption;
|
||||
import net.nuage.vsp.acs.client.api.model.VspDhcpVMOption;
|
||||
import net.nuage.vsp.acs.client.api.model.VspDomain;
|
||||
import net.nuage.vsp.acs.client.api.model.VspNetwork;
|
||||
import net.nuage.vsp.acs.client.api.model.VspNic;
|
||||
@ -87,6 +93,13 @@ public class NuageVspEntityBuilder {
|
||||
IPAddressDao _ipAddressDao;
|
||||
@Inject
|
||||
NetworkDetailsDao _networkDetailsDao;
|
||||
@Inject
|
||||
VMInstanceDao _vmInstanceDao;
|
||||
@Inject
|
||||
NuageVspManager _nuageVspManager;
|
||||
@Inject
|
||||
NetworkOfferingServiceMapDao _ntwkOfferingSrvcDao;
|
||||
|
||||
|
||||
public VspDomain buildVspDomain(Domain domain) {
|
||||
return new VspDomain.Builder()
|
||||
@ -367,4 +380,32 @@ public class NuageVspEntityBuilder {
|
||||
|
||||
return vspAclRuleBuilder.build();
|
||||
}
|
||||
|
||||
/** Build VspDhcpVMOption to put on the VM interface */
|
||||
public VspDhcpVMOption buildVmDhcpOption (NicVO userNic, boolean defaultHasDns, boolean networkHasDns) {
|
||||
VMInstanceVO userVm = _vmInstanceDao.findById(userNic.getInstanceId());
|
||||
VspDhcpVMOption.Builder vspDhcpVMOptionBuilder = new VspDhcpVMOption.Builder()
|
||||
.nicUuid(userNic.getUuid())
|
||||
.defaultHasDns(defaultHasDns)
|
||||
.hostname(userVm.getHostName())
|
||||
.networkHasDns(networkHasDns)
|
||||
.isDefaultInterface(userNic.isDefaultNic())
|
||||
.domainRouter(VirtualMachine.Type.DomainRouter.equals(userNic.getVmType()));
|
||||
return vspDhcpVMOptionBuilder.build();
|
||||
}
|
||||
|
||||
/** Build VspDhcpVMOption to put on the subnet */
|
||||
public VspDhcpDomainOption buildNetworkDhcpOption(Network network, NetworkOffering offering) {
|
||||
List<String> dnsProvider = _ntwkOfferingSrvcDao.listProvidersForServiceForNetworkOffering(offering.getId(), Network.Service.Dns);
|
||||
boolean isVrDnsProvider = dnsProvider.contains("VirtualRouter") || dnsProvider.contains("VpcVirtualRouter");
|
||||
VspDhcpDomainOption.Builder vspDhcpDomainBuilder = new VspDhcpDomainOption.Builder()
|
||||
.dnsServers(_nuageVspManager.getDnsDetails(network))
|
||||
.vrIsDnsProvider(isVrDnsProvider);
|
||||
|
||||
if (isVrDnsProvider) {
|
||||
vspDhcpDomainBuilder.networkDomain(network.getVpcId() != null ? _vpcDao.findById(network.getVpcId()).getNetworkDomain() : network.getNetworkDomain());
|
||||
}
|
||||
|
||||
return vspDhcpDomainBuilder.build();
|
||||
}
|
||||
}
|
||||
|
||||
@ -19,6 +19,26 @@
|
||||
|
||||
package com.cloud;
|
||||
|
||||
import java.util.ArrayList;
|
||||
|
||||
import net.nuage.vsp.acs.client.api.model.VspAclRule;
|
||||
import net.nuage.vsp.acs.client.api.model.VspDhcpDomainOption;
|
||||
import net.nuage.vsp.acs.client.api.model.VspDhcpVMOption;
|
||||
import net.nuage.vsp.acs.client.api.model.VspDomain;
|
||||
import net.nuage.vsp.acs.client.api.model.VspNetwork;
|
||||
import net.nuage.vsp.acs.client.api.model.VspNic;
|
||||
import net.nuage.vsp.acs.client.api.model.VspStaticNat;
|
||||
import net.nuage.vsp.acs.client.api.model.VspVm;
|
||||
import net.nuage.vsp.acs.client.common.model.Pair;
|
||||
|
||||
import org.junit.Before;
|
||||
import org.mockito.Mock;
|
||||
import org.mockito.MockitoAnnotations;
|
||||
|
||||
import com.google.common.collect.Lists;
|
||||
|
||||
import org.apache.cloudstack.framework.config.dao.ConfigurationDao;
|
||||
|
||||
import com.cloud.dc.VlanVO;
|
||||
import com.cloud.domain.Domain;
|
||||
import com.cloud.network.Network;
|
||||
@ -30,17 +50,6 @@ import com.cloud.util.NuageVspEntityBuilder;
|
||||
import com.cloud.vm.NicProfile;
|
||||
import com.cloud.vm.NicVO;
|
||||
import com.cloud.vm.VirtualMachine;
|
||||
import net.nuage.vsp.acs.client.api.model.VspAclRule;
|
||||
import net.nuage.vsp.acs.client.api.model.VspDomain;
|
||||
import net.nuage.vsp.acs.client.api.model.VspNetwork;
|
||||
import net.nuage.vsp.acs.client.api.model.VspNic;
|
||||
import net.nuage.vsp.acs.client.api.model.VspStaticNat;
|
||||
import net.nuage.vsp.acs.client.api.model.VspVm;
|
||||
import net.nuage.vsp.acs.client.common.model.Pair;
|
||||
import org.apache.cloudstack.framework.config.dao.ConfigurationDao;
|
||||
import org.junit.Before;
|
||||
|
||||
import java.util.ArrayList;
|
||||
|
||||
import static com.cloud.network.manager.NuageVspManager.NuageVspIsolatedNetworkDomainTemplateName;
|
||||
import static com.cloud.network.manager.NuageVspManager.NuageVspSharedNetworkDomainTemplateName;
|
||||
@ -48,18 +57,20 @@ import static com.cloud.network.manager.NuageVspManager.NuageVspVpcDomainTemplat
|
||||
import static org.mockito.Matchers.any;
|
||||
import static org.mockito.Matchers.anyBoolean;
|
||||
import static org.mockito.Matchers.anyString;
|
||||
import static org.mockito.Mockito.mock;
|
||||
import static org.mockito.Mockito.when;
|
||||
|
||||
public class NuageTest {
|
||||
|
||||
protected static final long NETWORK_ID = 42L;
|
||||
protected NetworkModel _networkModel = mock(NetworkModel.class);
|
||||
protected ConfigurationDao _configurationDao = mock(ConfigurationDao.class);
|
||||
protected NuageVspEntityBuilder _nuageVspEntityBuilder = mock(NuageVspEntityBuilder.class);
|
||||
|
||||
@Mock protected NetworkModel _networkModel;
|
||||
@Mock protected ConfigurationDao _configurationDao;
|
||||
@Mock protected NuageVspEntityBuilder _nuageVspEntityBuilder;
|
||||
|
||||
@Before
|
||||
public void setUp() throws Exception {
|
||||
MockitoAnnotations.initMocks(this);
|
||||
|
||||
// Standard responses
|
||||
when(_networkModel.isProviderForNetwork(Network.Provider.NuageVsp, NETWORK_ID)).thenReturn(true);
|
||||
when(_configurationDao.getValue(NuageVspIsolatedNetworkDomainTemplateName.key())).thenReturn("IsolatedDomainTemplate");
|
||||
@ -154,4 +165,23 @@ public class NuageTest {
|
||||
.build();
|
||||
}
|
||||
|
||||
protected VspDhcpDomainOption buildspDhcpDomainOption () {
|
||||
return new VspDhcpDomainOption.Builder()
|
||||
.vrIsDnsProvider(true)
|
||||
.networkDomain("networkDomain")
|
||||
.dnsServers(Lists.newArrayList("10.10.10.10", "20.20.20.20"))
|
||||
.build();
|
||||
}
|
||||
|
||||
protected VspDhcpVMOption buildspDhcpVMOption () {
|
||||
return new VspDhcpVMOption.Builder()
|
||||
.defaultHasDns(true)
|
||||
.hostname("VMx")
|
||||
.networkHasDns(true)
|
||||
.isDefaultInterface(true)
|
||||
.domainRouter(false)
|
||||
.nicUuid("aaaa-bbbbbbbb-ccccccc")
|
||||
.build();
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@ -19,6 +19,23 @@
|
||||
|
||||
package com.cloud.network.element;
|
||||
|
||||
import java.net.URI;
|
||||
import java.net.URISyntaxException;
|
||||
import java.util.ArrayList;
|
||||
import java.util.Arrays;
|
||||
import java.util.Collections;
|
||||
import java.util.HashSet;
|
||||
import java.util.Set;
|
||||
|
||||
import org.junit.Before;
|
||||
import org.junit.Test;
|
||||
import org.mockito.InjectMocks;
|
||||
import org.mockito.Mock;
|
||||
|
||||
import com.google.common.collect.Lists;
|
||||
|
||||
import org.apache.cloudstack.resourcedetail.dao.VpcDetailsDao;
|
||||
|
||||
import com.cloud.NuageTest;
|
||||
import com.cloud.agent.AgentManager;
|
||||
import com.cloud.agent.api.Answer;
|
||||
@ -63,18 +80,6 @@ import com.cloud.util.NuageVspEntityBuilder;
|
||||
import com.cloud.vm.DomainRouterVO;
|
||||
import com.cloud.vm.ReservationContext;
|
||||
import com.cloud.vm.dao.DomainRouterDao;
|
||||
import com.google.common.collect.Lists;
|
||||
import org.apache.cloudstack.resourcedetail.dao.VpcDetailsDao;
|
||||
import org.junit.Before;
|
||||
import org.junit.Test;
|
||||
|
||||
import java.net.URI;
|
||||
import java.net.URISyntaxException;
|
||||
import java.util.ArrayList;
|
||||
import java.util.Arrays;
|
||||
import java.util.Collections;
|
||||
import java.util.HashSet;
|
||||
import java.util.Set;
|
||||
|
||||
import static org.junit.Assert.assertFalse;
|
||||
import static org.junit.Assert.assertTrue;
|
||||
@ -85,45 +90,29 @@ import static org.mockito.Mockito.when;
|
||||
|
||||
public class NuageVspElementTest extends NuageTest {
|
||||
|
||||
@InjectMocks
|
||||
private NuageVspElement _nuageVspElement = new NuageVspElement();
|
||||
|
||||
private NetworkServiceMapDao _networkServiceMapDao = mock(NetworkServiceMapDao.class);
|
||||
private AgentManager _agentManager = mock(AgentManager.class);
|
||||
private HostDao _hostDao = mock(HostDao.class);
|
||||
private NuageVspDao _nuageVspDao = mock(NuageVspDao.class);
|
||||
private DomainDao _domainDao = mock(DomainDao.class);
|
||||
private NetworkOfferingDao _networkOfferingDao = mock(NetworkOfferingDao.class);
|
||||
private NetworkOfferingServiceMapDao _networkOfferingServiceMapDao = mock(NetworkOfferingServiceMapDao.class);
|
||||
private NuageVspManager _nuageVspManager = mock(NuageVspManager.class);
|
||||
private FirewallRulesDao _firewallRulesDao = mock(FirewallRulesDao.class);
|
||||
private IPAddressDao _ipAddressDao = mock(IPAddressDao.class);
|
||||
private PhysicalNetworkDao _physicalNetworkDao = mock(PhysicalNetworkDao.class);
|
||||
private NuageVspEntityBuilder _nuageVspEntityBuilder = mock(NuageVspEntityBuilder.class);
|
||||
private VpcDetailsDao _vpcDetailsDao = mock(VpcDetailsDao.class);
|
||||
private DomainRouterDao _domainRouterDao = mock(DomainRouterDao.class);
|
||||
@Mock private NetworkServiceMapDao _networkServiceMapDao;
|
||||
@Mock private AgentManager _agentManager;
|
||||
@Mock private HostDao _hostDao;
|
||||
@Mock private NuageVspDao _nuageVspDao;
|
||||
@Mock private DomainDao _domainDao;
|
||||
@Mock private NetworkOfferingDao _networkOfferingDao;
|
||||
@Mock private NetworkOfferingServiceMapDao _networkOfferingServiceMapDao;
|
||||
@Mock private NuageVspManager _nuageVspManager;
|
||||
@Mock private FirewallRulesDao _firewallRulesDao;
|
||||
@Mock private IPAddressDao _ipAddressDao;
|
||||
@Mock private PhysicalNetworkDao _physicalNetworkDao;
|
||||
@Mock private NuageVspEntityBuilder _nuageVspEntityBuilder;
|
||||
@Mock private VpcDetailsDao _vpcDetailsDao;
|
||||
@Mock private DomainRouterDao _domainRouterDao;
|
||||
@Mock private ResourceManager _resourceManager;
|
||||
|
||||
@Before
|
||||
public void setUp() throws Exception {
|
||||
super.setUp();
|
||||
|
||||
_nuageVspElement._resourceMgr = mock(ResourceManager.class);
|
||||
_nuageVspElement._ntwkSrvcDao = _networkServiceMapDao;
|
||||
_nuageVspElement._networkModel = _networkModel;
|
||||
_nuageVspElement._agentMgr = _agentManager;
|
||||
_nuageVspElement._hostDao = _hostDao;
|
||||
_nuageVspElement._nuageVspDao = _nuageVspDao;
|
||||
_nuageVspElement._ntwkOfferingSrvcDao = _networkOfferingServiceMapDao;
|
||||
_nuageVspElement._domainDao = _domainDao;
|
||||
_nuageVspElement._ntwkOfferingDao = _networkOfferingDao;
|
||||
_nuageVspElement._configDao = _configurationDao;
|
||||
_nuageVspElement._nuageVspManager = _nuageVspManager;
|
||||
_nuageVspElement._firewallRulesDao = _firewallRulesDao;
|
||||
_nuageVspElement._ipAddressDao = _ipAddressDao;
|
||||
_nuageVspElement._physicalNetworkDao = _physicalNetworkDao;
|
||||
_nuageVspElement._nuageVspEntityBuilder = _nuageVspEntityBuilder;
|
||||
_nuageVspElement._vpcDetailsDao = _vpcDetailsDao;
|
||||
_nuageVspElement._routerDao = _domainRouterDao;
|
||||
|
||||
_nuageVspElement.configure("NuageVspTestElement", Collections.<String, Object>emptyMap());
|
||||
}
|
||||
|
||||
|
||||
@ -19,6 +19,19 @@
|
||||
|
||||
package com.cloud.network.guru;
|
||||
|
||||
import java.net.URI;
|
||||
import java.net.URISyntaxException;
|
||||
import java.util.ArrayList;
|
||||
import java.util.Arrays;
|
||||
import java.util.Collections;
|
||||
|
||||
import org.junit.Before;
|
||||
import org.junit.Test;
|
||||
import org.mockito.InjectMocks;
|
||||
import org.mockito.Mock;
|
||||
|
||||
import org.apache.cloudstack.framework.config.dao.ConfigurationDao;
|
||||
|
||||
import com.cloud.NuageTest;
|
||||
import com.cloud.agent.AgentManager;
|
||||
import com.cloud.agent.api.Answer;
|
||||
@ -66,21 +79,15 @@ import com.cloud.vm.ReservationContext;
|
||||
import com.cloud.vm.VirtualMachine;
|
||||
import com.cloud.vm.VirtualMachineProfile;
|
||||
import com.cloud.vm.dao.NicDao;
|
||||
import org.apache.cloudstack.framework.config.dao.ConfigurationDao;
|
||||
import org.junit.Before;
|
||||
import org.junit.Test;
|
||||
|
||||
import java.net.URI;
|
||||
import java.net.URISyntaxException;
|
||||
import java.util.ArrayList;
|
||||
import java.util.Arrays;
|
||||
import java.util.Collections;
|
||||
|
||||
import static com.cloud.network.manager.NuageVspManager.NuageVspIsolatedNetworkDomainTemplateName;
|
||||
import static com.cloud.network.manager.NuageVspManager.NuageVspSharedNetworkDomainTemplateName;
|
||||
import static com.cloud.network.manager.NuageVspManager.NuageVspVpcDomainTemplateName;
|
||||
import static org.hamcrest.Matchers.is;
|
||||
import static org.hamcrest.Matchers.notNullValue;
|
||||
import static org.hamcrest.Matchers.nullValue;
|
||||
import static org.junit.Assert.assertFalse;
|
||||
import static org.junit.Assert.assertNull;
|
||||
import static org.junit.Assert.assertThat;
|
||||
import static org.junit.Assert.assertTrue;
|
||||
import static org.mockito.Matchers.any;
|
||||
import static org.mockito.Matchers.eq;
|
||||
@ -89,49 +96,35 @@ import static org.mockito.Mockito.when;
|
||||
|
||||
public class NuageVspGuestNetworkGuruTest extends NuageTest {
|
||||
private static final long NETWORK_ID = 42L;
|
||||
private PhysicalNetworkDao _physicalNetworkDao = mock(PhysicalNetworkDao.class);
|
||||
private DataCenterDao _dataCenterDao = mock(DataCenterDao.class);
|
||||
private NetworkOfferingServiceMapDao _networkOfferingServiceMapDao = mock(NetworkOfferingServiceMapDao.class);
|
||||
private AgentManager _agentManager = mock(AgentManager.class);
|
||||
private NetworkModel _networkModel = mock(NetworkModel.class);
|
||||
private AccountDao _accountDao = mock(AccountDao.class);
|
||||
private DomainDao _domainDao = mock(DomainDao.class);
|
||||
private NicDao _nicDao = mock(NicDao.class);
|
||||
private NetworkOfferingDao _networkOfferingDao = mock(NetworkOfferingDao.class);
|
||||
private NuageVspDao _nuageVspDao = mock(NuageVspDao.class);
|
||||
private HostDao _hostDao = mock(HostDao.class);
|
||||
private NetworkDao _networkDao = mock(NetworkDao.class);
|
||||
private ConfigurationDao _configurationDao = mock(ConfigurationDao.class);
|
||||
private IPAddressDao _ipAddressDao = mock(IPAddressDao.class);
|
||||
private NuageVspManager _nuageVspManager = mock(NuageVspManager.class);
|
||||
private ConfigurationManager _configurationManager = mock(ConfigurationManager.class);
|
||||
private NetworkDetailsDao _networkDetailsDao = mock(NetworkDetailsDao.class);
|
||||
@Mock private PhysicalNetworkDao _physicalNetworkDao;
|
||||
@Mock private DataCenterDao _dataCenterDao;
|
||||
@Mock private NetworkOfferingServiceMapDao _networkOfferingServiceMapDao;
|
||||
@Mock private AgentManager _agentManager;
|
||||
@Mock private NetworkModel _networkModel;
|
||||
@Mock private AccountDao _accountDao;
|
||||
@Mock private DomainDao _domainDao;
|
||||
@Mock private NicDao _nicDao;
|
||||
@Mock private NetworkOfferingDao _networkOfferingDao;
|
||||
@Mock private NuageVspDao _nuageVspDao;
|
||||
@Mock private HostDao _hostDao;
|
||||
@Mock private NetworkDao _networkDao;
|
||||
@Mock private ConfigurationDao _configurationDao;
|
||||
@Mock private IPAddressDao _ipAddressDao;
|
||||
@Mock private NuageVspManager _nuageVspManager;
|
||||
@Mock private ConfigurationManager _configurationManager;
|
||||
@Mock private NetworkDetailsDao _networkDetailsDao;
|
||||
@Mock private PhysicalNetworkVO physnet;
|
||||
|
||||
@InjectMocks
|
||||
private NuageVspGuestNetworkGuru _nuageVspGuestNetworkGuru;
|
||||
|
||||
@Before
|
||||
public void setUp() throws Exception {
|
||||
_nuageVspGuestNetworkGuru = new NuageVspGuestNetworkGuru();
|
||||
|
||||
super.setUp();
|
||||
|
||||
_nuageVspGuestNetworkGuru = new NuageVspGuestNetworkGuru();
|
||||
_nuageVspGuestNetworkGuru._physicalNetworkDao = _physicalNetworkDao;
|
||||
_nuageVspGuestNetworkGuru._physicalNetworkDao = _physicalNetworkDao;
|
||||
_nuageVspGuestNetworkGuru._nuageVspDao = _nuageVspDao;
|
||||
_nuageVspGuestNetworkGuru._dcDao = _dataCenterDao;
|
||||
_nuageVspGuestNetworkGuru._ntwkOfferingSrvcDao = _networkOfferingServiceMapDao;
|
||||
_nuageVspGuestNetworkGuru._networkModel = _networkModel;
|
||||
_nuageVspGuestNetworkGuru._hostDao = _hostDao;
|
||||
_nuageVspGuestNetworkGuru._agentMgr = _agentManager;
|
||||
_nuageVspGuestNetworkGuru._networkDao = _networkDao;
|
||||
_nuageVspGuestNetworkGuru._accountDao = _accountDao;
|
||||
_nuageVspGuestNetworkGuru._domainDao = _domainDao;
|
||||
_nuageVspGuestNetworkGuru._nicDao = _nicDao;
|
||||
_nuageVspGuestNetworkGuru._ntwkOfferingDao = _networkOfferingDao;
|
||||
_nuageVspGuestNetworkGuru._configDao = _configurationDao;
|
||||
_nuageVspGuestNetworkGuru._ipAddressDao = _ipAddressDao;
|
||||
_nuageVspGuestNetworkGuru._nuageVspManager = _nuageVspManager;
|
||||
_nuageVspGuestNetworkGuru._configMgr = _configurationManager;
|
||||
_nuageVspGuestNetworkGuru._nuageVspEntityBuilder = _nuageVspEntityBuilder;
|
||||
_nuageVspGuestNetworkGuru._networkDetailsDao = _networkDetailsDao;
|
||||
|
||||
final DataCenterVO dc = mock(DataCenterVO.class);
|
||||
when(dc.getNetworkType()).thenReturn(NetworkType.Advanced);
|
||||
@ -142,41 +135,51 @@ public class NuageVspGuestNetworkGuruTest extends NuageTest {
|
||||
when(_configurationDao.getValue(NuageVspIsolatedNetworkDomainTemplateName.key())).thenReturn("IsolatedDomainTemplate");
|
||||
when(_configurationDao.getValue(NuageVspVpcDomainTemplateName.key())).thenReturn("VpcDomainTemplate");
|
||||
when(_configurationDao.getValue(NuageVspSharedNetworkDomainTemplateName.key())).thenReturn("SharedDomainTemplate");
|
||||
|
||||
when(_physicalNetworkDao.findById(any(Long.class))).thenReturn(physnet);
|
||||
when(physnet.getIsolationMethods()).thenReturn(Arrays.asList("VSP"));
|
||||
when(physnet.getId()).thenReturn(NETWORK_ID);
|
||||
|
||||
final HostVO host = mock(HostVO.class);
|
||||
when(_hostDao.findById(NETWORK_ID)).thenReturn(host);
|
||||
when(host.getId()).thenReturn(NETWORK_ID);
|
||||
when(_agentManager.easySend(eq(NETWORK_ID), any(Command.class))).thenReturn(new Answer(null));
|
||||
|
||||
final NuageVspDeviceVO device = mock(NuageVspDeviceVO.class);
|
||||
when(_nuageVspDao.listByPhysicalNetwork(NETWORK_ID)).thenReturn(Arrays.asList(device));
|
||||
when(device.getId()).thenReturn(1L);
|
||||
when(device.getHostId()).thenReturn(NETWORK_ID);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testCanHandle() {
|
||||
final NetworkOffering offering = mock(NetworkOffering.class);
|
||||
when(offering.getId()).thenReturn(NETWORK_ID);
|
||||
when(offering.getTrafficType()).thenReturn(TrafficType.Guest);
|
||||
when(offering.getGuestType()).thenReturn(GuestType.Isolated);
|
||||
when(offering.getIsPersistent()).thenReturn(false);
|
||||
when(_configurationManager.isOfferingForVpc(any(NetworkOffering.class))).thenReturn(false);
|
||||
|
||||
final PhysicalNetworkVO physnet = mock(PhysicalNetworkVO.class);
|
||||
when(physnet.getIsolationMethods()).thenReturn(Arrays.asList(new String[] {"VSP"}));
|
||||
when(physnet.getId()).thenReturn(NETWORK_ID);
|
||||
|
||||
when(_networkOfferingServiceMapDao.areServicesSupportedByNetworkOffering(NETWORK_ID, Service.Connectivity)).thenReturn(true);
|
||||
|
||||
assertTrue(_nuageVspGuestNetworkGuru.canHandle(offering, NetworkType.Advanced, physnet) == true);
|
||||
when(offering.getTrafficType()).thenReturn(TrafficType.Guest);
|
||||
when(offering.getGuestType()).thenReturn(GuestType.Isolated);
|
||||
assertThat(_nuageVspGuestNetworkGuru.canHandle(offering, NetworkType.Advanced, physnet), is(true));
|
||||
|
||||
// Not supported TrafficType != Guest
|
||||
when(offering.getTrafficType()).thenReturn(TrafficType.Management);
|
||||
assertFalse(_nuageVspGuestNetworkGuru.canHandle(offering, NetworkType.Advanced, physnet) == true);
|
||||
assertThat(_nuageVspGuestNetworkGuru.canHandle(offering, NetworkType.Advanced, physnet), is(false));
|
||||
|
||||
// Supported: GuestType Shared
|
||||
when(offering.getTrafficType()).thenReturn(TrafficType.Guest);
|
||||
when(offering.getGuestType()).thenReturn(GuestType.Shared);
|
||||
assertTrue(_nuageVspGuestNetworkGuru.canHandle(offering, NetworkType.Advanced, physnet) == true);
|
||||
assertThat(_nuageVspGuestNetworkGuru.canHandle(offering, NetworkType.Advanced, physnet), is(true));
|
||||
|
||||
// Not supported: Basic networking
|
||||
when(offering.getGuestType()).thenReturn(GuestType.Isolated);
|
||||
assertFalse(_nuageVspGuestNetworkGuru.canHandle(offering, NetworkType.Basic, physnet) == true);
|
||||
assertThat(_nuageVspGuestNetworkGuru.canHandle(offering, NetworkType.Basic, physnet), is(false));
|
||||
|
||||
// Not supported: IsolationMethod != STT
|
||||
when(physnet.getIsolationMethods()).thenReturn(Arrays.asList(new String[] {"VLAN"}));
|
||||
assertFalse(_nuageVspGuestNetworkGuru.canHandle(offering, NetworkType.Advanced, physnet) == true);
|
||||
when(physnet.getIsolationMethods()).thenReturn(Arrays.asList("VLAN"));
|
||||
assertThat(_nuageVspGuestNetworkGuru.canHandle(offering, NetworkType.Basic, physnet), is(false));
|
||||
|
||||
// Not supported: Non-persistent VPC tier
|
||||
when(_configurationManager.isOfferingForVpc(any(NetworkOffering.class))).thenReturn(true);
|
||||
@ -185,13 +188,8 @@ public class NuageVspGuestNetworkGuruTest extends NuageTest {
|
||||
|
||||
@Test
|
||||
public void testDesign() {
|
||||
final PhysicalNetworkVO physnet = mock(PhysicalNetworkVO.class);
|
||||
when(_physicalNetworkDao.findById((Long)any())).thenReturn(physnet);
|
||||
when(physnet.getIsolationMethods()).thenReturn(Arrays.asList(new String[] {"VSP"}));
|
||||
when(physnet.getId()).thenReturn(NETWORK_ID);
|
||||
|
||||
final NuageVspDeviceVO device = mock(NuageVspDeviceVO.class);
|
||||
when(_nuageVspDao.listByPhysicalNetwork(NETWORK_ID)).thenReturn(Arrays.asList(new NuageVspDeviceVO[]{device}));
|
||||
when(_nuageVspDao.listByPhysicalNetwork(NETWORK_ID)).thenReturn(Arrays.asList(device));
|
||||
when(device.getId()).thenReturn(1L);
|
||||
|
||||
final NetworkOffering offering = mock(NetworkOffering.class);
|
||||
@ -208,22 +206,17 @@ public class NuageVspGuestNetworkGuruTest extends NuageTest {
|
||||
final Account account = mock(Account.class);
|
||||
|
||||
final Network designednetwork = _nuageVspGuestNetworkGuru.design(offering, plan, network, account);
|
||||
assertTrue(designednetwork != null);
|
||||
assertTrue(designednetwork.getBroadcastDomainType() == BroadcastDomainType.Vsp);
|
||||
assertThat(designednetwork, notNullValue(Network.class));
|
||||
assertThat(designednetwork.getBroadcastDomainType(), is(BroadcastDomainType.Vsp));
|
||||
|
||||
// Can't design non-persistent VPC tier
|
||||
when(_configurationManager.isOfferingForVpc(any(NetworkOffering.class))).thenReturn(true);
|
||||
assertNull(_nuageVspGuestNetworkGuru.design(offering, plan, network, account));
|
||||
assertThat(_nuageVspGuestNetworkGuru.design(offering, plan, network, account), nullValue(Network.class));
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testDesignNoElementOnPhysicalNetwork() {
|
||||
final PhysicalNetworkVO physnet = mock(PhysicalNetworkVO.class);
|
||||
when(_physicalNetworkDao.findById((Long)any())).thenReturn(physnet);
|
||||
when(physnet.getIsolationMethods()).thenReturn(Arrays.asList(new String[] {"STT"}));
|
||||
when(physnet.getId()).thenReturn(NETWORK_ID);
|
||||
|
||||
mock(NuageVspDeviceVO.class);
|
||||
when(physnet.getIsolationMethods()).thenReturn(Arrays.asList("STT"));
|
||||
when(_nuageVspDao.listByPhysicalNetwork(NETWORK_ID)).thenReturn(Collections.<NuageVspDeviceVO>emptyList());
|
||||
|
||||
final NetworkOffering offering = mock(NetworkOffering.class);
|
||||
@ -241,12 +234,7 @@ public class NuageVspGuestNetworkGuruTest extends NuageTest {
|
||||
|
||||
@Test
|
||||
public void testDesignNoIsolationMethodVSP() {
|
||||
final PhysicalNetworkVO physnet = mock(PhysicalNetworkVO.class);
|
||||
when(_physicalNetworkDao.findById((Long)any())).thenReturn(physnet);
|
||||
when(physnet.getIsolationMethods()).thenReturn(Arrays.asList(new String[] {"VLAN"}));
|
||||
when(physnet.getId()).thenReturn(NETWORK_ID);
|
||||
|
||||
mock(NuageVspDeviceVO.class);
|
||||
when(physnet.getIsolationMethods()).thenReturn(Arrays.asList("VLAN"));
|
||||
when(_nuageVspDao.listByPhysicalNetwork(NETWORK_ID)).thenReturn(Collections.<NuageVspDeviceVO>emptyList());
|
||||
|
||||
final NetworkOffering offering = mock(NetworkOffering.class);
|
||||
@ -289,7 +277,10 @@ public class NuageVspGuestNetworkGuruTest extends NuageTest {
|
||||
when(nicvo.getId()).thenReturn(NETWORK_ID);
|
||||
when(nicvo.getMacAddress()).thenReturn("aa-aa-aa-aa-aa-aa");
|
||||
when(nicvo.getUuid()).thenReturn("aaaa-fffff");
|
||||
when(nicvo.getNetworkId()).thenReturn(NETWORK_ID);
|
||||
when(nicvo.getInstanceId()).thenReturn(NETWORK_ID);
|
||||
when(_nicDao.findById(NETWORK_ID)).thenReturn(nicvo);
|
||||
when(_nicDao.findDefaultNicForVM(NETWORK_ID)).thenReturn(nicvo);
|
||||
|
||||
final VirtualMachine vm = mock(VirtualMachine.class);
|
||||
when(vm.getId()).thenReturn(NETWORK_ID);
|
||||
@ -310,21 +301,10 @@ public class NuageVspGuestNetworkGuruTest extends NuageTest {
|
||||
when(ntwkoffering.getId()).thenReturn(NETWORK_ID);
|
||||
when(_networkOfferingDao.findById(NETWORK_ID)).thenReturn(ntwkoffering);
|
||||
|
||||
final HostVO host = mock(HostVO.class);
|
||||
when(host.getId()).thenReturn(NETWORK_ID);
|
||||
final NuageVspDeviceVO nuageVspDevice = mock(NuageVspDeviceVO.class);
|
||||
when(nuageVspDevice.getHostId()).thenReturn(NETWORK_ID);
|
||||
when(_nuageVspDao.listByPhysicalNetwork(NETWORK_ID)).thenReturn(Arrays.asList(new NuageVspDeviceVO[]{nuageVspDevice}));
|
||||
when(_hostDao.findById(NETWORK_ID)).thenReturn(host);
|
||||
|
||||
when(_networkDao.acquireInLockTable(NETWORK_ID, 1200)).thenReturn(network);
|
||||
when(_ipAddressDao.findByVmIdAndNetworkId(NETWORK_ID, NETWORK_ID)).thenReturn(null);
|
||||
when(_domainDao.findById(NETWORK_ID)).thenReturn(mock(DomainVO.class));
|
||||
|
||||
final Answer answer = mock(Answer.class);
|
||||
when(answer.getResult()).thenReturn(true);
|
||||
when(_agentManager.easySend(eq(NETWORK_ID), (Command)any())).thenReturn(answer);
|
||||
|
||||
_nuageVspGuestNetworkGuru.reserve(nicProfile, network, vmProfile, mock(DeployDestination.class), mock(ReservationContext.class));
|
||||
}
|
||||
|
||||
@ -368,20 +348,10 @@ public class NuageVspGuestNetworkGuruTest extends NuageTest {
|
||||
final AccountVO accountVo = mock(AccountVO.class);
|
||||
when(_accountDao.findById(NETWORK_ID)).thenReturn(accountVo);
|
||||
|
||||
final HostVO host = mock(HostVO.class);
|
||||
when(host.getId()).thenReturn(NETWORK_ID);
|
||||
final NuageVspDeviceVO nuageVspDevice = mock(NuageVspDeviceVO.class);
|
||||
when(nuageVspDevice.getHostId()).thenReturn(NETWORK_ID);
|
||||
when(_nuageVspDao.listByPhysicalNetwork(NETWORK_ID)).thenReturn(Arrays.asList(new NuageVspDeviceVO[]{nuageVspDevice}));
|
||||
when(_hostDao.findById(NETWORK_ID)).thenReturn(host);
|
||||
when(_networkDao.acquireInLockTable(NETWORK_ID, 1200)).thenReturn(network);
|
||||
when(_nuageVspManager.getDnsDetails(network)).thenReturn(new ArrayList<String>());
|
||||
when(_nuageVspManager.getGatewaySystemIds()).thenReturn(new ArrayList<String>());
|
||||
|
||||
final Answer answer = mock(Answer.class);
|
||||
when(answer.getResult()).thenReturn(true);
|
||||
when(_agentManager.easySend(eq(NETWORK_ID), (Command)any())).thenReturn(answer);
|
||||
|
||||
final DataCenter dc = mock(DataCenter.class);
|
||||
when(dc.getId()).thenReturn(NETWORK_ID);
|
||||
final DeployDestination deployDest = mock(DeployDestination.class);
|
||||
@ -429,17 +399,6 @@ public class NuageVspGuestNetworkGuruTest extends NuageTest {
|
||||
when(vmProfile.getInstanceName()).thenReturn("Test-VM");
|
||||
when(vmProfile.getVirtualMachine()).thenReturn(vm);
|
||||
|
||||
final HostVO host = mock(HostVO.class);
|
||||
when(host.getId()).thenReturn(NETWORK_ID);
|
||||
final NuageVspDeviceVO nuageVspDevice = mock(NuageVspDeviceVO.class);
|
||||
when(nuageVspDevice.getHostId()).thenReturn(NETWORK_ID);
|
||||
when(_nuageVspDao.listByPhysicalNetwork(NETWORK_ID)).thenReturn(Arrays.asList(new NuageVspDeviceVO[]{nuageVspDevice}));
|
||||
when(_hostDao.findById(NETWORK_ID)).thenReturn(host);
|
||||
|
||||
final Answer answer = mock(Answer.class);
|
||||
when(answer.getResult()).thenReturn(true);
|
||||
when(_agentManager.easySend(eq(NETWORK_ID), (Command)any())).thenReturn(answer);
|
||||
|
||||
_nuageVspGuestNetworkGuru.deallocate(network, nicProfile, vmProfile);
|
||||
}
|
||||
|
||||
@ -464,19 +423,9 @@ public class NuageVspGuestNetworkGuruTest extends NuageTest {
|
||||
when(domain.getUuid()).thenReturn("aaaaaa");
|
||||
when(_domainDao.findById(NETWORK_ID)).thenReturn(domain);
|
||||
|
||||
final HostVO host = mock(HostVO.class);
|
||||
when(host.getId()).thenReturn(NETWORK_ID);
|
||||
final NuageVspDeviceVO nuageVspDevice = mock(NuageVspDeviceVO.class);
|
||||
when(nuageVspDevice.getHostId()).thenReturn(NETWORK_ID);
|
||||
when(_nuageVspDao.listByPhysicalNetwork(NETWORK_ID)).thenReturn(Arrays.asList(new NuageVspDeviceVO[]{nuageVspDevice}));
|
||||
when(_hostDao.findById(NETWORK_ID)).thenReturn(host);
|
||||
when(_nuageVspManager.getDnsDetails(network)).thenReturn(new ArrayList<String>());
|
||||
when(_nuageVspManager.getGatewaySystemIds()).thenReturn(new ArrayList<String>());
|
||||
|
||||
final Answer answer = mock(Answer.class);
|
||||
when(answer.getResult()).thenReturn(true);
|
||||
when(_agentManager.easySend(eq(NETWORK_ID), (Command)any())).thenReturn(answer);
|
||||
|
||||
assertTrue(_nuageVspGuestNetworkGuru.trash(network, offering));
|
||||
}
|
||||
|
||||
|
||||
@ -19,6 +19,30 @@
|
||||
|
||||
package com.cloud.network.resource;
|
||||
|
||||
import java.util.Collections;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
|
||||
import javax.naming.ConfigurationException;
|
||||
|
||||
import net.nuage.vsp.acs.client.api.NuageVspApiClient;
|
||||
import net.nuage.vsp.acs.client.api.NuageVspElementClient;
|
||||
import net.nuage.vsp.acs.client.api.NuageVspGuruClient;
|
||||
import net.nuage.vsp.acs.client.api.model.VspAclRule;
|
||||
import net.nuage.vsp.acs.client.api.model.VspDhcpDomainOption;
|
||||
import net.nuage.vsp.acs.client.api.model.VspDhcpVMOption;
|
||||
import net.nuage.vsp.acs.client.api.model.VspNetwork;
|
||||
import net.nuage.vsp.acs.client.api.model.VspNic;
|
||||
import net.nuage.vsp.acs.client.api.model.VspStaticNat;
|
||||
import net.nuage.vsp.acs.client.api.model.VspVm;
|
||||
|
||||
import org.junit.Before;
|
||||
import org.junit.Test;
|
||||
import org.mockito.invocation.InvocationOnMock;
|
||||
|
||||
import com.google.common.collect.Lists;
|
||||
import com.google.common.collect.Maps;
|
||||
|
||||
import com.cloud.NuageTest;
|
||||
import com.cloud.agent.api.Answer;
|
||||
import com.cloud.agent.api.PingCommand;
|
||||
@ -31,25 +55,6 @@ import com.cloud.agent.api.guru.ImplementNetworkVspCommand;
|
||||
import com.cloud.agent.api.guru.ReserveVmInterfaceVspCommand;
|
||||
import com.cloud.agent.api.guru.TrashNetworkVspCommand;
|
||||
import com.cloud.host.Host;
|
||||
import com.google.common.collect.Lists;
|
||||
import com.google.common.collect.Maps;
|
||||
import net.nuage.vsp.acs.client.api.NuageVspApiClient;
|
||||
import net.nuage.vsp.acs.client.api.NuageVspElementClient;
|
||||
import net.nuage.vsp.acs.client.api.NuageVspGuruClient;
|
||||
import net.nuage.vsp.acs.client.api.model.VspAclRule;
|
||||
import net.nuage.vsp.acs.client.api.model.VspNetwork;
|
||||
import net.nuage.vsp.acs.client.api.model.VspNic;
|
||||
import net.nuage.vsp.acs.client.api.model.VspStaticNat;
|
||||
import net.nuage.vsp.acs.client.api.model.VspVm;
|
||||
import org.junit.Before;
|
||||
import org.junit.Test;
|
||||
import org.mockito.invocation.InvocationOnMock;
|
||||
|
||||
import javax.naming.ConfigurationException;
|
||||
import java.util.ArrayList;
|
||||
import java.util.Collections;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
|
||||
import static org.junit.Assert.assertTrue;
|
||||
import static org.mockito.Mockito.doAnswer;
|
||||
@ -151,8 +156,9 @@ public class NuageVspResourceTest extends NuageTest {
|
||||
_resource.configure("NuageVspResource", _hostDetails);
|
||||
|
||||
VspNetwork vspNetwork = buildVspNetwork();
|
||||
ImplementNetworkVspCommand cmd = new ImplementNetworkVspCommand(vspNetwork, new ArrayList<String>());
|
||||
doAnswer(genericAnswer).when(_mockNuageVspGuruClient).implement(vspNetwork, new ArrayList<String>());
|
||||
VspDhcpDomainOption vspDhcpOptions = buildspDhcpDomainOption();
|
||||
ImplementNetworkVspCommand cmd = new ImplementNetworkVspCommand(vspNetwork, vspDhcpOptions);
|
||||
doAnswer(genericAnswer).when(_mockNuageVspGuruClient).implement(vspNetwork, vspDhcpOptions);
|
||||
com.cloud.agent.api.Answer implNtwkAns = _resource.executeRequest(cmd);
|
||||
assertTrue(implNtwkAns.getResult());
|
||||
}
|
||||
@ -165,8 +171,9 @@ public class NuageVspResourceTest extends NuageTest {
|
||||
VspVm vspVm = buildVspVm();
|
||||
VspNic vspNic = buildVspNic();
|
||||
VspStaticNat vspStaticNat = buildVspStaticNat();
|
||||
ReserveVmInterfaceVspCommand cmd = new ReserveVmInterfaceVspCommand(vspNetwork, vspVm, vspNic, vspStaticNat);
|
||||
doAnswer(genericAnswer).when(_mockNuageVspGuruClient).reserve(vspNetwork, vspVm, vspNic, vspStaticNat);
|
||||
VspDhcpVMOption vspDhcpOption = buildspDhcpVMOption();
|
||||
ReserveVmInterfaceVspCommand cmd = new ReserveVmInterfaceVspCommand(vspNetwork, vspVm, vspNic, vspStaticNat, vspDhcpOption);
|
||||
doAnswer(genericAnswer).when(_mockNuageVspGuruClient).reserve(vspNetwork, vspVm, vspNic, vspStaticNat, vspDhcpOption);
|
||||
Answer rsrvVmInfAns = _resource.executeRequest(cmd);
|
||||
assertTrue(rsrvVmInfAns.getResult());
|
||||
}
|
||||
|
||||
@ -24,9 +24,22 @@ import java.util.Set;
|
||||
|
||||
import javax.inject.Inject;
|
||||
|
||||
import com.cloud.network.dao.NetworkDetailVO;
|
||||
import com.cloud.network.dao.NetworkDetailsDao;
|
||||
import com.cloud.utils.exception.CloudRuntimeException;
|
||||
import org.apache.commons.collections.CollectionUtils;
|
||||
import org.apache.log4j.Logger;
|
||||
import org.cloud.network.router.deployment.RouterDeploymentDefinition;
|
||||
import org.cloud.network.router.deployment.RouterDeploymentDefinitionBuilder;
|
||||
|
||||
import com.google.gson.Gson;
|
||||
|
||||
import org.apache.cloudstack.api.command.admin.router.ConfigureOvsElementCmd;
|
||||
import org.apache.cloudstack.api.command.admin.router.ConfigureVirtualRouterElementCmd;
|
||||
import org.apache.cloudstack.api.command.admin.router.CreateVirtualRouterElementCmd;
|
||||
import org.apache.cloudstack.api.command.admin.router.ListOvsElementsCmd;
|
||||
import org.apache.cloudstack.api.command.admin.router.ListVirtualRouterElementsCmd;
|
||||
import org.apache.cloudstack.framework.config.dao.ConfigurationDao;
|
||||
import org.apache.cloudstack.network.topology.NetworkTopology;
|
||||
import org.apache.cloudstack.network.topology.NetworkTopologyContext;
|
||||
|
||||
import com.cloud.agent.api.to.LoadBalancerTO;
|
||||
import com.cloud.configuration.ConfigurationManager;
|
||||
import com.cloud.dc.DataCenter;
|
||||
@ -60,6 +73,8 @@ import com.cloud.network.as.AutoScaleCounter.AutoScaleCounterType;
|
||||
import com.cloud.network.dao.IPAddressDao;
|
||||
import com.cloud.network.dao.LoadBalancerDao;
|
||||
import com.cloud.network.dao.NetworkDao;
|
||||
import com.cloud.network.dao.NetworkDetailVO;
|
||||
import com.cloud.network.dao.NetworkDetailsDao;
|
||||
import com.cloud.network.dao.OvsProviderDao;
|
||||
import com.cloud.network.dao.VirtualRouterProviderDao;
|
||||
import com.cloud.network.lb.LoadBalancingRule;
|
||||
@ -85,6 +100,7 @@ import com.cloud.utils.component.AdapterBase;
|
||||
import com.cloud.utils.crypt.DBEncryptionUtil;
|
||||
import com.cloud.utils.db.QueryBuilder;
|
||||
import com.cloud.utils.db.SearchCriteria.Op;
|
||||
import com.cloud.utils.exception.CloudRuntimeException;
|
||||
import com.cloud.utils.net.NetUtils;
|
||||
import com.cloud.vm.DomainRouterVO;
|
||||
import com.cloud.vm.NicProfile;
|
||||
@ -96,23 +112,10 @@ import com.cloud.vm.VirtualMachine.State;
|
||||
import com.cloud.vm.VirtualMachineProfile;
|
||||
import com.cloud.vm.dao.DomainRouterDao;
|
||||
import com.cloud.vm.dao.UserVmDao;
|
||||
import com.google.gson.Gson;
|
||||
|
||||
import org.apache.cloudstack.api.command.admin.router.ConfigureOvsElementCmd;
|
||||
import org.apache.cloudstack.api.command.admin.router.ConfigureVirtualRouterElementCmd;
|
||||
import org.apache.cloudstack.api.command.admin.router.CreateVirtualRouterElementCmd;
|
||||
import org.apache.cloudstack.api.command.admin.router.ListOvsElementsCmd;
|
||||
import org.apache.cloudstack.api.command.admin.router.ListVirtualRouterElementsCmd;
|
||||
import org.apache.cloudstack.framework.config.dao.ConfigurationDao;
|
||||
import org.apache.cloudstack.network.topology.NetworkTopology;
|
||||
import org.apache.cloudstack.network.topology.NetworkTopologyContext;
|
||||
import org.apache.log4j.Logger;
|
||||
import org.cloud.network.router.deployment.RouterDeploymentDefinition;
|
||||
import org.cloud.network.router.deployment.RouterDeploymentDefinitionBuilder;
|
||||
|
||||
public class VirtualRouterElement extends AdapterBase implements VirtualRouterElementService, DhcpServiceProvider, UserDataServiceProvider, SourceNatServiceProvider,
|
||||
StaticNatServiceProvider, FirewallServiceProvider, LoadBalancingServiceProvider, PortForwardingServiceProvider, RemoteAccessVPNServiceProvider, IpDeployer,
|
||||
NetworkMigrationResponder, AggregatedCommandExecutor, RedundantResource {
|
||||
NetworkMigrationResponder, AggregatedCommandExecutor, RedundantResource, DnsServiceProvider {
|
||||
private static final Logger s_logger = Logger.getLogger(VirtualRouterElement.class);
|
||||
public static final AutoScaleCounterType AutoScaleCounterCpu = new AutoScaleCounterType("cpu");
|
||||
public static final AutoScaleCounterType AutoScaleCounterMemory = new AutoScaleCounterType("memory");
|
||||
@ -968,10 +971,24 @@ NetworkMigrationResponder, AggregatedCommandExecutor, RedundantResource {
|
||||
return true;
|
||||
}
|
||||
|
||||
|
||||
@Override
|
||||
public boolean configDhcpSupportForSubnet(final Network network, final NicProfile nic, final VirtualMachineProfile vm, final DeployDestination dest,
|
||||
final ReservationContext context) throws ConcurrentOperationException, InsufficientCapacityException, ResourceUnavailableException {
|
||||
if (canHandle(network, Service.Dhcp)) {
|
||||
final ReservationContext context) throws ConcurrentOperationException, InsufficientCapacityException, ResourceUnavailableException {
|
||||
return configureDhcpSupport(network, nic, vm, dest, Service.Dhcp);
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean configDnsSupportForSubnet(Network network, NicProfile nic, VirtualMachineProfile vm, DeployDestination dest, ReservationContext context) throws ConcurrentOperationException, InsufficientCapacityException, ResourceUnavailableException {
|
||||
// Ignore if virtual router is already dhcp provider
|
||||
if (_networkModel.isProviderSupportServiceInNetwork(network.getId(), Service.Dhcp, getProvider())) {
|
||||
return true;
|
||||
}
|
||||
return configureDhcpSupport(network, nic, vm, dest, Service.Dns);
|
||||
}
|
||||
|
||||
protected boolean configureDhcpSupport(Network network, NicProfile nic, VirtualMachineProfile vm, DeployDestination dest, Service service) throws ResourceUnavailableException {
|
||||
if (canHandle(network, service)) {
|
||||
if (vm.getType() != VirtualMachine.Type.User) {
|
||||
return false;
|
||||
}
|
||||
@ -994,15 +1011,30 @@ NetworkMigrationResponder, AggregatedCommandExecutor, RedundantResource {
|
||||
|
||||
@Override
|
||||
public boolean removeDhcpSupportForSubnet(final Network network) throws ResourceUnavailableException {
|
||||
if (canHandle(network, Service.Dhcp)) {
|
||||
return removeDhcpSupportForSubnet(network, Service.Dhcp);
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean removeDnsSupportForSubnet(Network network) throws ResourceUnavailableException {
|
||||
// Ignore if virtual router is already dhcp provider
|
||||
if (_networkModel.isProviderSupportServiceInNetwork(network.getId(), Service.Dhcp, getProvider())) {
|
||||
return true;
|
||||
} else {
|
||||
return removeDhcpSupportForSubnet(network, Service.Dns);
|
||||
}
|
||||
}
|
||||
|
||||
protected boolean removeDhcpSupportForSubnet(Network network, Network.Service service) throws ResourceUnavailableException {
|
||||
if (canHandle(network, service)) {
|
||||
final List<DomainRouterVO> routers = _routerDao.listByNetworkAndRole(network.getId(), Role.VIRTUAL_ROUTER);
|
||||
if (routers == null || routers.size() == 0) {
|
||||
|
||||
if (CollectionUtils.isEmpty(routers)) {
|
||||
throw new ResourceUnavailableException("Can't find at least one router!", DataCenter.class, network.getDataCenterId());
|
||||
}
|
||||
try {
|
||||
return _routerMgr.removeDhcpSupportForSubnet(network, routers);
|
||||
} catch (final ResourceUnavailableException e) {
|
||||
s_logger.debug("Router resource unavailable ");
|
||||
s_logger.info("Router resource unavailable ", e);
|
||||
}
|
||||
}
|
||||
return false;
|
||||
@ -1011,8 +1043,23 @@ NetworkMigrationResponder, AggregatedCommandExecutor, RedundantResource {
|
||||
@Override
|
||||
public boolean addDhcpEntry(final Network network, final NicProfile nic, final VirtualMachineProfile vm, final DeployDestination dest, final ReservationContext context)
|
||||
throws ConcurrentOperationException, InsufficientCapacityException, ResourceUnavailableException {
|
||||
return applyDhcpEntries(network, nic, vm, dest, Service.Dhcp);
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean addDnsEntry(Network network, NicProfile nic, VirtualMachineProfile vm, DeployDestination dest, ReservationContext context) throws ConcurrentOperationException, InsufficientCapacityException, ResourceUnavailableException {
|
||||
// Ignore if virtual router is already dhcp provider
|
||||
if (_networkModel.isProviderSupportServiceInNetwork(network.getId(), Service.Dhcp, getProvider())) {
|
||||
return true;
|
||||
}
|
||||
|
||||
return applyDhcpEntries(network, nic, vm, dest, Service.Dns);
|
||||
}
|
||||
|
||||
protected boolean applyDhcpEntries (final Network network, final NicProfile nic, final VirtualMachineProfile vm, final DeployDestination dest, final Network.Service service) throws ResourceUnavailableException {
|
||||
|
||||
boolean result = true;
|
||||
if (canHandle(network, Service.Dhcp)) {
|
||||
if (canHandle(network, service)) {
|
||||
if (vm.getType() != VirtualMachine.Type.User) {
|
||||
return false;
|
||||
}
|
||||
|
||||
@ -42,6 +42,11 @@ import java.util.concurrent.TimeUnit;
|
||||
import javax.inject.Inject;
|
||||
import javax.naming.ConfigurationException;
|
||||
|
||||
import org.apache.log4j.Logger;
|
||||
import org.cloud.network.router.deployment.RouterDeploymentDefinitionBuilder;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.beans.factory.annotation.Qualifier;
|
||||
|
||||
import org.apache.cloudstack.alert.AlertService;
|
||||
import org.apache.cloudstack.alert.AlertService.AlertType;
|
||||
import org.apache.cloudstack.api.command.admin.router.RebootRouterCmd;
|
||||
@ -61,10 +66,6 @@ import org.apache.cloudstack.network.topology.NetworkTopology;
|
||||
import org.apache.cloudstack.network.topology.NetworkTopologyContext;
|
||||
import org.apache.cloudstack.utils.identity.ManagementServerNode;
|
||||
import org.apache.cloudstack.utils.usage.UsageUtils;
|
||||
import org.apache.log4j.Logger;
|
||||
import org.cloud.network.router.deployment.RouterDeploymentDefinitionBuilder;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.beans.factory.annotation.Qualifier;
|
||||
|
||||
import com.cloud.agent.AgentManager;
|
||||
import com.cloud.agent.Listener;
|
||||
@ -1758,7 +1759,8 @@ Configurable, StateListener<VirtualMachine.State, VirtualMachine.Event, VirtualM
|
||||
}
|
||||
|
||||
protected void finalizeUserDataAndDhcpOnStart(final Commands cmds, final DomainRouterVO router, final Provider provider, final Long guestNetworkId) {
|
||||
if (_networkModel.isProviderSupportServiceInNetwork(guestNetworkId, Service.Dhcp, provider)) {
|
||||
if (_networkModel.isProviderSupportServiceInNetwork(guestNetworkId, Service.Dhcp, provider)
|
||||
|| _networkModel.isProviderSupportServiceInNetwork(guestNetworkId, Service.Dns, provider)) {
|
||||
// Resend dhcp
|
||||
s_logger.debug("Reapplying dhcp entries as a part of domR " + router + " start...");
|
||||
_commandSetupHelper.createDhcpEntryCommandsForVMs(router, cmds, guestNetworkId);
|
||||
|
||||
@ -59,6 +59,7 @@ import com.cloud.network.PhysicalNetworkTrafficType;
|
||||
import com.cloud.network.dao.NetworkServiceMapDao;
|
||||
import com.cloud.network.dao.NetworkVO;
|
||||
import com.cloud.network.element.DhcpServiceProvider;
|
||||
import com.cloud.network.element.DnsServiceProvider;
|
||||
import com.cloud.network.element.LoadBalancingServiceProvider;
|
||||
import com.cloud.network.element.NetworkElement;
|
||||
import com.cloud.network.element.StaticNatServiceProvider;
|
||||
@ -826,6 +827,11 @@ public class MockNetworkManagerImpl extends ManagerBase implements NetworkOrches
|
||||
return null; //To change body of implemented methods use File | Settings | File Templates.
|
||||
}
|
||||
|
||||
@Override
|
||||
public DnsServiceProvider getDnsServiceProvider(Network network) {
|
||||
return null; //To change body of implemented methods use File | Settings | File Templates.
|
||||
}
|
||||
|
||||
@Override
|
||||
public void removeDhcpServiceInSubnet(Nic nic) {
|
||||
//To change body of implemented methods use File | Settings | File Templates.
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user