From b0c27e48d787271cbdaf4ef1e5f787049545b234 Mon Sep 17 00:00:00 2001 From: Nick Livens Date: Mon, 2 May 2016 10:15:52 +0200 Subject: [PATCH 1/4] CLOUDSTACK-9242 : Remodel Nuage VSP plugin --- plugins/network-elements/nuage-vsp/pom.xml | 12 +- .../cloudstack/vsp/spring-vsp-context.xml | 2 +- .../cloud/agent/api/VspResourceAnswer.java | 60 --- .../cloud/agent/api/VspResourceCommand.java | 119 ----- .../api/element/ApplyAclRuleVspCommand.java | 184 +------- .../api/element/ApplyStaticNatVspCommand.java | 101 +---- .../api/element/ImplementVspCommand.java | 238 +--------- .../api/element/ShutDownVpcVspCommand.java | 29 +- .../api/guru/DeallocateVmVspCommand.java | 187 +------- .../api/guru/ImplementNetworkVspCommand.java | 304 +------------ .../guru/ReserveVmInterfaceVspCommand.java | 369 ++-------------- .../api/guru/TrashNetworkVspCommand.java | 101 +---- .../GetApiDefaultsAnswer.java} | 33 +- ...ommand.java => GetApiDefaultsCommand.java} | 4 +- .../api/manager/GetClientDefaultsAnswer.java | 81 ---- .../agent/api/sync/SyncDomainCommand.java | 31 +- .../api/commands/AddNuageVspDeviceCmd.java | 24 +- .../api/commands/DeleteNuageVspDeviceCmd.java | 12 +- .../IssueNuageVspResourceRequestCmd.java | 213 --------- .../api/commands/ListNuageVspDevicesCmd.java | 12 +- .../api/commands/UpdateNuageVspDeviceCmd.java | 12 +- .../network/element/NuageVspElement.java | 240 +++------- .../guru/NuageVspGuestNetworkGuru.java | 309 ++++--------- .../network/manager/NuageVspManager.java | 2 + .../network/manager/NuageVspManagerImpl.java | 138 +++--- .../network/resource/NuageVspResource.java | 152 ++----- .../com/cloud/network/sync/NuageVspSync.java | 26 -- .../cloud/network/sync/NuageVspSyncImpl.java | 65 --- .../com/cloud/util/NuageVspEntityBuilder.java | 368 ++++++++++++++++ .../src/com/cloud/util/NuageVspUtil.java | 9 +- .../vsp/acs/NuageVspPluginClientLoader.java | 91 ++-- .../vsp/acs/client/NuageVspApiClient.java | 32 -- .../vsp/acs/client/NuageVspElementClient.java | 42 -- .../vsp/acs/client/NuageVspGuruClient.java | 43 -- .../vsp/acs/client/NuageVspManagerClient.java | 42 -- .../vsp/acs/client/NuageVspSyncClient.java | 29 -- .../nuage-vsp/test/com/cloud/NuageTest.java | 157 +++++++ .../com/cloud/agent/api/CommandsTest.java | 63 +-- .../network/element/NuageVspElementTest.java | 185 ++++---- .../guru/NuageVspGuestNetworkGuruTest.java | 216 ++++----- .../network/manager/NuageVspManagerTest.java | 71 +-- .../resource/NuageVspResourceTest.java | 122 +++--- .../cloud/network/sync/NuageVspSyncTest.java | 72 --- .../cloud/util/NuageVspEntityBuilderTest.java | 412 ++++++++++++++++++ plugins/pom.xml | 12 +- ui/scripts/system.js | 4 +- 46 files changed, 1754 insertions(+), 3276 deletions(-) delete mode 100644 plugins/network-elements/nuage-vsp/src/com/cloud/agent/api/VspResourceAnswer.java delete mode 100644 plugins/network-elements/nuage-vsp/src/com/cloud/agent/api/VspResourceCommand.java rename plugins/network-elements/nuage-vsp/src/com/cloud/agent/api/{sync/SyncVspCommand.java => manager/GetApiDefaultsAnswer.java} (56%) rename plugins/network-elements/nuage-vsp/src/com/cloud/agent/api/manager/{GetClientDefaultsCommand.java => GetApiDefaultsCommand.java} (92%) delete mode 100644 plugins/network-elements/nuage-vsp/src/com/cloud/agent/api/manager/GetClientDefaultsAnswer.java delete mode 100644 plugins/network-elements/nuage-vsp/src/com/cloud/api/commands/IssueNuageVspResourceRequestCmd.java delete mode 100644 plugins/network-elements/nuage-vsp/src/com/cloud/network/sync/NuageVspSync.java delete mode 100644 plugins/network-elements/nuage-vsp/src/com/cloud/network/sync/NuageVspSyncImpl.java create mode 100644 plugins/network-elements/nuage-vsp/src/com/cloud/util/NuageVspEntityBuilder.java delete mode 100644 plugins/network-elements/nuage-vsp/src/net/nuage/vsp/acs/client/NuageVspApiClient.java delete mode 100644 plugins/network-elements/nuage-vsp/src/net/nuage/vsp/acs/client/NuageVspElementClient.java delete mode 100644 plugins/network-elements/nuage-vsp/src/net/nuage/vsp/acs/client/NuageVspGuruClient.java delete mode 100644 plugins/network-elements/nuage-vsp/src/net/nuage/vsp/acs/client/NuageVspManagerClient.java delete mode 100644 plugins/network-elements/nuage-vsp/src/net/nuage/vsp/acs/client/NuageVspSyncClient.java create mode 100644 plugins/network-elements/nuage-vsp/test/com/cloud/NuageTest.java delete mode 100644 plugins/network-elements/nuage-vsp/test/com/cloud/network/sync/NuageVspSyncTest.java create mode 100644 plugins/network-elements/nuage-vsp/test/com/cloud/util/NuageVspEntityBuilderTest.java diff --git a/plugins/network-elements/nuage-vsp/pom.xml b/plugins/network-elements/nuage-vsp/pom.xml index 402f9a3829a..7369ba5fa77 100644 --- a/plugins/network-elements/nuage-vsp/pom.xml +++ b/plugins/network-elements/nuage-vsp/pom.xml @@ -28,11 +28,17 @@ 4.9.0-SNAPSHOT ../../pom.xml + + + nuage-vsp + http://cs.mv.nuagenetworks.net/releases/ + + - org.apache.commons - commons-lang3 - ${cs.commons-lang3.version} + net.nuage.vsp + nuage-vsp-acs-client + 3.2.8.0 diff --git a/plugins/network-elements/nuage-vsp/resources/META-INF/cloudstack/vsp/spring-vsp-context.xml b/plugins/network-elements/nuage-vsp/resources/META-INF/cloudstack/vsp/spring-vsp-context.xml index c579789e5e7..c447c441c92 100644 --- a/plugins/network-elements/nuage-vsp/resources/META-INF/cloudstack/vsp/spring-vsp-context.xml +++ b/plugins/network-elements/nuage-vsp/resources/META-INF/cloudstack/vsp/spring-vsp-context.xml @@ -37,5 +37,5 @@ - + diff --git a/plugins/network-elements/nuage-vsp/src/com/cloud/agent/api/VspResourceAnswer.java b/plugins/network-elements/nuage-vsp/src/com/cloud/agent/api/VspResourceAnswer.java deleted file mode 100644 index 979dcd315f2..00000000000 --- a/plugins/network-elements/nuage-vsp/src/com/cloud/agent/api/VspResourceAnswer.java +++ /dev/null @@ -1,60 +0,0 @@ -// -// 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; - -public class VspResourceAnswer extends Answer { - - private String _resourceInfo; - - public VspResourceAnswer(Command cmd, String resourceInfo, String details) { - super(cmd, true, details); - this._resourceInfo = resourceInfo; - } - - public VspResourceAnswer(VspResourceCommand cmd, boolean success, String details) { - super(cmd, success, details); - } - - public VspResourceAnswer(VspResourceCommand cmd, Exception e) { - super(cmd, e); - } - - public String getResourceInfo() { - return this._resourceInfo; - } - - @Override - public boolean equals(Object o) { - if (this == o) return true; - if (o == null || getClass() != o.getClass()) return false; - - VspResourceAnswer that = (VspResourceAnswer) o; - - if (_resourceInfo != null ? !_resourceInfo.equals(that._resourceInfo) : that._resourceInfo != null) - return false; - - return true; - } - - @Override - public int hashCode() { - return _resourceInfo != null ? _resourceInfo.hashCode() : 0; - } -} diff --git a/plugins/network-elements/nuage-vsp/src/com/cloud/agent/api/VspResourceCommand.java b/plugins/network-elements/nuage-vsp/src/com/cloud/agent/api/VspResourceCommand.java deleted file mode 100644 index 6e03dabc1be..00000000000 --- a/plugins/network-elements/nuage-vsp/src/com/cloud/agent/api/VspResourceCommand.java +++ /dev/null @@ -1,119 +0,0 @@ -// -// 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; - -public class VspResourceCommand extends Command { - - private final String _method; - private final String _resource; - private final String _resourceId; - private final String _childResource; - private final Object _entityDetails; - private final String _resourceFilter; - private final String _proxyUserUuid; - private final String _proxyUserDomainuuid; - - public VspResourceCommand(String method, String resource, String resourceId, String childResource, Object entityDetails, String resourceFilter, String proxyUserUuid, - String proxyUserDomainuuid) { - super(); - this._method = method; - this._resource = resource; - this._resourceId = resourceId; - this._childResource = childResource; - this._entityDetails = entityDetails; - this._resourceFilter = resourceFilter; - this._proxyUserUuid = proxyUserUuid; - this._proxyUserDomainuuid = proxyUserDomainuuid; - } - - public String getRequestType() { - return _method; - } - - public String getResource() { - return _resource; - } - - public String getResourceId() { - return _resourceId; - } - - public String getChildResource() { - return _childResource; - } - - public Object getEntityDetails() { - return _entityDetails; - } - - public String getResourceFilter() { - return _resourceFilter; - } - - public String getProxyUserUuid() { - return _proxyUserUuid; - } - - public String getProxyUserDomainuuid() { - return _proxyUserDomainuuid; - } - - @Override - public boolean executeInSequence() { - return false; - } - - @Override - public boolean equals(Object o) { - if (this == o) return true; - if (o == null || getClass() != o.getClass()) return false; - - VspResourceCommand that = (VspResourceCommand) o; - - if (_childResource != null ? !_childResource.equals(that._childResource) : that._childResource != null) - return false; - if (_entityDetails != null ? !_entityDetails.equals(that._entityDetails) : that._entityDetails != null) - return false; - if (_method != null ? !_method.equals(that._method) : that._method != null) return false; - if (_proxyUserDomainuuid != null ? !_proxyUserDomainuuid.equals(that._proxyUserDomainuuid) : that._proxyUserDomainuuid != null) - return false; - if (_proxyUserUuid != null ? !_proxyUserUuid.equals(that._proxyUserUuid) : that._proxyUserUuid != null) - return false; - if (_resource != null ? !_resource.equals(that._resource) : that._resource != null) return false; - if (_resourceFilter != null ? !_resourceFilter.equals(that._resourceFilter) : that._resourceFilter != null) - return false; - if (_resourceId != null ? !_resourceId.equals(that._resourceId) : that._resourceId != null) return false; - - return true; - } - - @Override - public int hashCode() { - int result = _method != null ? _method.hashCode() : 0; - result = 31 * result + (_resource != null ? _resource.hashCode() : 0); - result = 31 * result + (_resourceId != null ? _resourceId.hashCode() : 0); - result = 31 * result + (_childResource != null ? _childResource.hashCode() : 0); - result = 31 * result + (_entityDetails != null ? _entityDetails.hashCode() : 0); - result = 31 * result + (_resourceFilter != null ? _resourceFilter.hashCode() : 0); - result = 31 * result + (_proxyUserUuid != null ? _proxyUserUuid.hashCode() : 0); - result = 31 * result + (_proxyUserDomainuuid != null ? _proxyUserDomainuuid.hashCode() : 0); - return result; - } -} diff --git a/plugins/network-elements/nuage-vsp/src/com/cloud/agent/api/element/ApplyAclRuleVspCommand.java b/plugins/network-elements/nuage-vsp/src/com/cloud/agent/api/element/ApplyAclRuleVspCommand.java index 7b1d40bc097..50cace6ffcb 100644 --- a/plugins/network-elements/nuage-vsp/src/com/cloud/agent/api/element/ApplyAclRuleVspCommand.java +++ b/plugins/network-elements/nuage-vsp/src/com/cloud/agent/api/element/ApplyAclRuleVspCommand.java @@ -19,173 +19,43 @@ package com.cloud.agent.api.element; -import com.cloud.agent.api.CmdBuilder; import com.cloud.agent.api.Command; +import net.nuage.vsp.acs.client.api.model.VspAclRule; +import net.nuage.vsp.acs.client.api.model.VspNetwork; import java.util.List; -import java.util.Map; public class ApplyAclRuleVspCommand extends Command { - private final boolean _networkAcl; - private final String _networkUuid; - private final String _networkDomainUuid; - private final String _vpcOrSubnetUuid; - private final String _networkName; - private final boolean _isL2Network; - private final List> _aclRules; - private final long _networkId; - private final boolean _egressDefaultPolicy; - private final Boolean _acsIngressAcl; + private final VspAclRule.ACLType _aclType; + private final VspNetwork _network; + private final List _aclRules; private final boolean _networkReset; - private final String _domainTemplateName; - private ApplyAclRuleVspCommand(boolean networkAcl, String networkUuid, String networkDomainUuid, String vpcOrSubnetUuid, String networkName, boolean isL2Network, - List> aclRules, long networkId, boolean egressDefaultPolicy, Boolean acsIngressAcl, boolean networkReset, String domainTemplateName) { + public ApplyAclRuleVspCommand(VspAclRule.ACLType aclType, VspNetwork network, List aclRules, boolean networkReset) { super(); - this._networkAcl = networkAcl; - this._networkUuid = networkUuid; - this._networkDomainUuid = networkDomainUuid; - this._vpcOrSubnetUuid = vpcOrSubnetUuid; - this._networkName = networkName; - this._isL2Network = isL2Network; + this._aclType = aclType; + this._network = network; this._aclRules = aclRules; - this._networkId = networkId; - this._egressDefaultPolicy = egressDefaultPolicy; - this._acsIngressAcl = acsIngressAcl; this._networkReset = networkReset; - this._domainTemplateName = domainTemplateName; } - public boolean isNetworkAcl() { - return _networkAcl; + public VspAclRule.ACLType getAclType() { + return _aclType; } - public String getNetworkUuid() { - return _networkUuid; + public VspNetwork getNetwork() { + return _network; } - public String getNetworkDomainUuid() { - return _networkDomainUuid; - } - - public String getVpcOrSubnetUuid() { - return _vpcOrSubnetUuid; - } - - public String getNetworkName() { - return _networkName; - } - - public boolean isL2Network() { - return _isL2Network; - } - - public List> getAclRules() { + public List getAclRules() { return _aclRules; } - public long getNetworkId() { - return _networkId; - } - - public boolean isEgressDefaultPolicy() { - return _egressDefaultPolicy; - } - - public Boolean getAcsIngressAcl() { - return _acsIngressAcl; - } - public boolean isNetworkReset() { return _networkReset; } - public String getDomainTemplateName() { - return _domainTemplateName; - } - - public static class Builder implements CmdBuilder { - private boolean _networkAcl; - private String _networkUuid; - private String _networkDomainUuid; - private String _vpcOrSubnetUuid; - private String _networkName; - private boolean _isL2Network; - private List> _aclRules; - private long _networkId; - private boolean _egressDefaultPolicy; - private Boolean _acsIngressAcl; - private boolean _networkReset; - private String _domainTemplateName; - - public Builder networkAcl(boolean networkAcl) { - this._networkAcl = networkAcl; - return this; - } - - public Builder networkUuid(String networkUuid) { - this._networkUuid = networkUuid; - return this; - } - - public Builder networkDomainUuid(String networkDomainUuid) { - this._networkDomainUuid = networkDomainUuid; - return this; - } - - public Builder vpcOrSubnetUuid(String vpcOrSubnetUuid) { - this._vpcOrSubnetUuid = vpcOrSubnetUuid; - return this; - } - - public Builder networkName(String networkName) { - this._networkName = networkName; - return this; - } - - public Builder isL2Network(boolean isL2Network) { - this._isL2Network = isL2Network; - return this; - } - - public Builder aclRules(List> aclRules) { - this._aclRules = aclRules; - return this; - } - - public Builder networkId(long networkId) { - this._networkId = networkId; - return this; - } - - public Builder egressDefaultPolicy(boolean egressDefaultPolicy) { - this._egressDefaultPolicy = egressDefaultPolicy; - return this; - } - - public Builder acsIngressAcl(Boolean acsIngressAcl) { - this._acsIngressAcl = acsIngressAcl; - return this; - } - - public Builder networkReset(boolean networkReset) { - this._networkReset = networkReset; - return this; - } - - public Builder domainTemplateName(String domainTemplateName) { - this._domainTemplateName = domainTemplateName; - return this; - } - - @Override - public ApplyAclRuleVspCommand build() { - return new ApplyAclRuleVspCommand(_networkAcl, _networkUuid, _networkDomainUuid, _vpcOrSubnetUuid, _networkName, _isL2Network, _aclRules, - _networkId, _egressDefaultPolicy, _acsIngressAcl, _networkReset, _domainTemplateName); - } - } - @Override public boolean executeInSequence() { return false; @@ -199,22 +69,10 @@ public class ApplyAclRuleVspCommand extends Command { ApplyAclRuleVspCommand that = (ApplyAclRuleVspCommand) o; - if (_egressDefaultPolicy != that._egressDefaultPolicy) return false; - if (_isL2Network != that._isL2Network) return false; - if (_networkAcl != that._networkAcl) return false; - if (_networkId != that._networkId) return false; if (_networkReset != that._networkReset) return false; if (_aclRules != null ? !_aclRules.equals(that._aclRules) : that._aclRules != null) return false; - if (_acsIngressAcl != null ? !_acsIngressAcl.equals(that._acsIngressAcl) : that._acsIngressAcl != null) - return false; - if (_domainTemplateName != null ? !_domainTemplateName.equals(that._domainTemplateName) : that._domainTemplateName != null) - return false; - if (_networkDomainUuid != null ? !_networkDomainUuid.equals(that._networkDomainUuid) : that._networkDomainUuid != null) - return false; - if (_networkName != null ? !_networkName.equals(that._networkName) : that._networkName != null) return false; - if (_networkUuid != null ? !_networkUuid.equals(that._networkUuid) : that._networkUuid != null) return false; - if (_vpcOrSubnetUuid != null ? !_vpcOrSubnetUuid.equals(that._vpcOrSubnetUuid) : that._vpcOrSubnetUuid != null) - return false; + if (_aclType != that._aclType) return false; + if (_network != null ? !_network.equals(that._network) : that._network != null) return false; return true; } @@ -222,18 +80,10 @@ public class ApplyAclRuleVspCommand extends Command { @Override public int hashCode() { int result = super.hashCode(); - result = 31 * result + (_networkAcl ? 1 : 0); - result = 31 * result + (_networkUuid != null ? _networkUuid.hashCode() : 0); - result = 31 * result + (_networkDomainUuid != null ? _networkDomainUuid.hashCode() : 0); - result = 31 * result + (_vpcOrSubnetUuid != null ? _vpcOrSubnetUuid.hashCode() : 0); - result = 31 * result + (_networkName != null ? _networkName.hashCode() : 0); - result = 31 * result + (_isL2Network ? 1 : 0); + 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 + (int) (_networkId ^ (_networkId >>> 32)); - result = 31 * result + (_egressDefaultPolicy ? 1 : 0); - result = 31 * result + (_acsIngressAcl != null ? _acsIngressAcl.hashCode() : 0); result = 31 * result + (_networkReset ? 1 : 0); - result = 31 * result + (_domainTemplateName != null ? _domainTemplateName.hashCode() : 0); return result; } } diff --git a/plugins/network-elements/nuage-vsp/src/com/cloud/agent/api/element/ApplyStaticNatVspCommand.java b/plugins/network-elements/nuage-vsp/src/com/cloud/agent/api/element/ApplyStaticNatVspCommand.java index cc4e9300c94..500f091919b 100644 --- a/plugins/network-elements/nuage-vsp/src/com/cloud/agent/api/element/ApplyStaticNatVspCommand.java +++ b/plugins/network-elements/nuage-vsp/src/com/cloud/agent/api/element/ApplyStaticNatVspCommand.java @@ -19,100 +19,31 @@ package com.cloud.agent.api.element; -import com.cloud.agent.api.CmdBuilder; import com.cloud.agent.api.Command; +import net.nuage.vsp.acs.client.api.model.VspNetwork; +import net.nuage.vsp.acs.client.api.model.VspStaticNat; import java.util.List; -import java.util.Map; public class ApplyStaticNatVspCommand extends Command { - private final String _networkDomainUuid; - private final String _networkUuid; - private final String _vpcOrSubnetUuid; - private final boolean _isL3Network; - private final boolean _isVpc; - private final List> _staticNatDetails; + private final VspNetwork _network; + private final List _staticNatDetails; - private ApplyStaticNatVspCommand(String networkDomainUuid, String networkUuid, String vpcOrSubnetUuid, boolean isL3Network, boolean isVpc, - List> staticNatDetails) { + public ApplyStaticNatVspCommand(VspNetwork network, List staticNatDetails) { super(); - this._networkDomainUuid = networkDomainUuid; - this._networkUuid = networkUuid; - this._vpcOrSubnetUuid = vpcOrSubnetUuid; - this._isL3Network = isL3Network; - this._isVpc = isVpc; + this._network = network; this._staticNatDetails = staticNatDetails; } - public String getNetworkDomainUuid() { - return _networkDomainUuid; + public VspNetwork getNetwork() { + return _network; } - public String getNetworkUuid() { - return _networkUuid; - } - - public String getVpcOrSubnetUuid() { - return _vpcOrSubnetUuid; - } - - public boolean isL3Network() { - return _isL3Network; - } - - public boolean isVpc() { - return _isVpc; - } - - public List> getStaticNatDetails() { + public List getStaticNatDetails() { return _staticNatDetails; } - public static class Builder implements CmdBuilder { - private String _networkDomainUuid; - private String _networkUuid; - private String _vpcOrSubnetUuid; - private boolean _isL3Network; - private boolean _isVpc; - private List> _staticNatDetails; - - public Builder networkDomainUuid(String networkDomainUuid) { - this._networkDomainUuid = networkDomainUuid; - return this; - } - - public Builder networkUuid(String networkUuid) { - this._networkUuid = networkUuid; - return this; - } - - public Builder vpcOrSubnetUuid(String vpcOrSubnetUuid) { - this._vpcOrSubnetUuid = vpcOrSubnetUuid; - return this; - } - - public Builder isL3Network(boolean isL3Network) { - this._isL3Network = isL3Network; - return this; - } - - public Builder isVpc(boolean isVpc) { - this._isVpc = isVpc; - return this; - } - - public Builder staticNatDetails(List> staticNatDetails) { - this._staticNatDetails = staticNatDetails; - return this; - } - - @Override - public ApplyStaticNatVspCommand build() { - return new ApplyStaticNatVspCommand(_networkDomainUuid, _networkUuid, _vpcOrSubnetUuid, _isL3Network, _isVpc, _staticNatDetails); - } - } - @Override public boolean executeInSequence() { return false; @@ -126,15 +57,9 @@ public class ApplyStaticNatVspCommand extends Command { ApplyStaticNatVspCommand that = (ApplyStaticNatVspCommand) o; - if (_isL3Network != that._isL3Network) return false; - if (_isVpc != that._isVpc) return false; - if (_networkDomainUuid != null ? !_networkDomainUuid.equals(that._networkDomainUuid) : that._networkDomainUuid != null) - return false; - if (_networkUuid != null ? !_networkUuid.equals(that._networkUuid) : that._networkUuid != null) return false; + if (_network != null ? !_network.equals(that._network) : that._network != null) return false; if (_staticNatDetails != null ? !_staticNatDetails.equals(that._staticNatDetails) : that._staticNatDetails != null) return false; - if (_vpcOrSubnetUuid != null ? !_vpcOrSubnetUuid.equals(that._vpcOrSubnetUuid) : that._vpcOrSubnetUuid != null) - return false; return true; } @@ -142,11 +67,7 @@ public class ApplyStaticNatVspCommand extends Command { @Override public int hashCode() { int result = super.hashCode(); - result = 31 * result + (_networkDomainUuid != null ? _networkDomainUuid.hashCode() : 0); - result = 31 * result + (_networkUuid != null ? _networkUuid.hashCode() : 0); - result = 31 * result + (_vpcOrSubnetUuid != null ? _vpcOrSubnetUuid.hashCode() : 0); - result = 31 * result + (_isL3Network ? 1 : 0); - result = 31 * result + (_isVpc ? 1 : 0); + result = 31 * result + (_network != null ? _network.hashCode() : 0); result = 31 * result + (_staticNatDetails != null ? _staticNatDetails.hashCode() : 0); return result; } diff --git a/plugins/network-elements/nuage-vsp/src/com/cloud/agent/api/element/ImplementVspCommand.java b/plugins/network-elements/nuage-vsp/src/com/cloud/agent/api/element/ImplementVspCommand.java index c1de6b9de82..2145f601722 100644 --- a/plugins/network-elements/nuage-vsp/src/com/cloud/agent/api/element/ImplementVspCommand.java +++ b/plugins/network-elements/nuage-vsp/src/com/cloud/agent/api/element/ImplementVspCommand.java @@ -19,220 +19,48 @@ package com.cloud.agent.api.element; -import com.cloud.agent.api.CmdBuilder; import com.cloud.agent.api.Command; +import net.nuage.vsp.acs.client.api.model.VspAclRule; +import net.nuage.vsp.acs.client.api.model.VspNetwork; import java.util.List; -import java.util.Map; public class ImplementVspCommand extends Command { - private final long _networkId; - private final String _networkDomainUuid; - private final String _networkUuid; - private final String _networkName; - private final String _vpcOrSubnetUuid; - private final boolean _isL2Network; - private final boolean _isL3Network; - private final boolean _isVpc; - private final boolean _isShared; - private final String _domainTemplateName; - private final boolean _isFirewallServiceSupported; + private final VspNetwork _network; private final List _dnsServers; - private final List> _ingressFirewallRules; - private final List> _egressFirewallRules; - private final List _acsFipUuid; - private final boolean _egressDefaultPolicy; + private final List _ingressFirewallRules; + private final List _egressFirewallRules; + private final List _floatingIpUuids; - private ImplementVspCommand(long networkId, String networkDomainUuid, String networkUuid, String networkName, String vpcOrSubnetUuid, boolean isL2Network, boolean isL3Network, - boolean isVpc, boolean isShared, String domainTemplateName, boolean isFirewallServiceSupported, List dnsServers, List> ingressFirewallRules, - List> egressFirewallRules, List acsFipUuid, boolean egressDefaultPolicy) { + public ImplementVspCommand(VspNetwork network, List dnsServers, List ingressFirewallRules, + List egressFirewallRules, List floatingIpUuids) { super(); - this._networkId = networkId; - this._networkDomainUuid = networkDomainUuid; - this._networkUuid = networkUuid; - this._networkName = networkName; - this._vpcOrSubnetUuid = vpcOrSubnetUuid; - this._isL2Network = isL2Network; - this._isL3Network = isL3Network; - this._isVpc = isVpc; - this._isShared = isShared; - this._domainTemplateName = domainTemplateName; - this._isFirewallServiceSupported = isFirewallServiceSupported; + this._network = network; this._dnsServers = dnsServers; this._ingressFirewallRules = ingressFirewallRules; this._egressFirewallRules = egressFirewallRules; - this._acsFipUuid = acsFipUuid; - this._egressDefaultPolicy = egressDefaultPolicy; + this._floatingIpUuids = floatingIpUuids; } - public long getNetworkId() { - return _networkId; - } - - public String getNetworkDomainUuid() { - return _networkDomainUuid; - } - - public String getNetworkUuid() { - return _networkUuid; - } - - public String getNetworkName() { - return _networkName; - } - - public String getVpcOrSubnetUuid() { - return _vpcOrSubnetUuid; - } - - public boolean isL2Network() { - return _isL2Network; - } - - public boolean isL3Network() { - return _isL3Network; - } - - public boolean isVpc() { - return _isVpc; - } - - public boolean isShared() { - return _isShared; - } - - public String getDomainTemplateName() { - return _domainTemplateName; - } - - public boolean isFirewallServiceSupported() { - return _isFirewallServiceSupported; + public VspNetwork getNetwork() { + return _network; } public List getDnsServers() { return _dnsServers; } - public List> getIngressFirewallRules() { + public List getIngressFirewallRules() { return _ingressFirewallRules; } - public List> getEgressFirewallRules() { + public List getEgressFirewallRules() { return _egressFirewallRules; } - public List getAcsFipUuid() { - return _acsFipUuid; - } - - public boolean isEgressDefaultPolicy() { - return _egressDefaultPolicy; - } - - public static class Builder implements CmdBuilder { - private long _networkId; - private String _networkDomainUuid; - private String _networkUuid; - private String _networkName; - private String _vpcOrSubnetUuid; - private boolean _isL2Network; - private boolean _isL3Network; - private boolean _isVpc; - private boolean _isShared; - private String _domainTemplateName; - private boolean _isFirewallServiceSupported; - private List _dnsServers; - private List> _ingressFirewallRules; - private List> _egressFirewallRules; - private List _acsFipUuid; - private boolean _egressDefaultPolicy; - - public Builder networkId(long networkId) { - this._networkId = networkId; - return this; - } - - public Builder networkDomainUuid(String networkDomainUuid) { - this._networkDomainUuid = networkDomainUuid; - return this; - } - - public Builder networkUuid(String networkUuid) { - this._networkUuid = networkUuid; - return this; - } - - public Builder networkName(String networkName) { - this._networkName = networkName; - return this; - } - - public Builder vpcOrSubnetUuid(String vpcOrSubnetUuid) { - this._vpcOrSubnetUuid = vpcOrSubnetUuid; - return this; - } - - public Builder isL2Network(boolean isL2Network) { - this._isL2Network = isL2Network; - return this; - } - - public Builder isL3Network(boolean isL3Network) { - this._isL3Network = isL3Network; - return this; - } - - public Builder isVpc(boolean isVpc) { - this._isVpc = isVpc; - return this; - } - - public Builder isShared(boolean isShared) { - this._isShared = isShared; - return this; - } - - public Builder domainTemplateName(String domainTemplateName) { - this._domainTemplateName = domainTemplateName; - return this; - } - - public Builder isFirewallServiceSupported(boolean isFirewallServiceSupported) { - this._isFirewallServiceSupported = isFirewallServiceSupported; - return this; - } - - public Builder dnsServers(List dnsServers) { - this._dnsServers = dnsServers; - return this; - } - - public Builder ingressFirewallRules(List> ingressFirewallRules) { - this._ingressFirewallRules = ingressFirewallRules; - return this; - } - - public Builder egressFirewallRules(List> egressFirewallRules) { - this._egressFirewallRules = egressFirewallRules; - return this; - } - - public Builder acsFipUuid(List acsFipUuid) { - this._acsFipUuid = acsFipUuid; - return this; - } - - public Builder egressDefaultPolicy(boolean egressDefaultPolicy) { - this._egressDefaultPolicy = egressDefaultPolicy; - return this; - } - - @Override - public ImplementVspCommand build() { - return new ImplementVspCommand(_networkId, _networkDomainUuid, _networkUuid, _networkName, _vpcOrSubnetUuid, _isL2Network, _isL3Network, _isVpc, _isShared, - _domainTemplateName, _isFirewallServiceSupported, _dnsServers, _ingressFirewallRules, _egressFirewallRules, _acsFipUuid, _egressDefaultPolicy); - } + public List getFloatingIpUuids() { + return _floatingIpUuids; } @Override @@ -248,27 +76,14 @@ public class ImplementVspCommand extends Command { ImplementVspCommand that = (ImplementVspCommand) o; - if (_egressDefaultPolicy != that._egressDefaultPolicy) return false; - if (_isFirewallServiceSupported != that._isFirewallServiceSupported) return false; - if (_isL2Network != that._isL2Network) return false; - if (_isL3Network != that._isL3Network) return false; - if (_isShared != that._isShared) return false; - if (_isVpc != that._isVpc) return false; - if (_networkId != that._networkId) return false; - if (_acsFipUuid != null ? !_acsFipUuid.equals(that._acsFipUuid) : that._acsFipUuid != null) return false; if (_dnsServers != null ? !_dnsServers.equals(that._dnsServers) : that._dnsServers != null) return false; - if (_domainTemplateName != null ? !_domainTemplateName.equals(that._domainTemplateName) : that._domainTemplateName != 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 (_networkDomainUuid != null ? !_networkDomainUuid.equals(that._networkDomainUuid) : that._networkDomainUuid != null) - return false; - if (_networkName != null ? !_networkName.equals(that._networkName) : that._networkName != null) return false; - if (_networkUuid != null ? !_networkUuid.equals(that._networkUuid) : that._networkUuid != null) return false; - if (_vpcOrSubnetUuid != null ? !_vpcOrSubnetUuid.equals(that._vpcOrSubnetUuid) : that._vpcOrSubnetUuid != null) - return false; + if (_network != null ? !_network.equals(that._network) : that._network != null) return false; return true; } @@ -276,22 +91,11 @@ public class ImplementVspCommand extends Command { @Override public int hashCode() { int result = super.hashCode(); - result = 31 * result + (int) (_networkId ^ (_networkId >>> 32)); - result = 31 * result + (_networkDomainUuid != null ? _networkDomainUuid.hashCode() : 0); - result = 31 * result + (_networkUuid != null ? _networkUuid.hashCode() : 0); - result = 31 * result + (_networkName != null ? _networkName.hashCode() : 0); - result = 31 * result + (_vpcOrSubnetUuid != null ? _vpcOrSubnetUuid.hashCode() : 0); - result = 31 * result + (_isL2Network ? 1 : 0); - result = 31 * result + (_isL3Network ? 1 : 0); - result = 31 * result + (_isVpc ? 1 : 0); - result = 31 * result + (_isShared ? 1 : 0); - result = 31 * result + (_domainTemplateName != null ? _domainTemplateName.hashCode() : 0); - result = 31 * result + (_isFirewallServiceSupported ? 1 : 0); + 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 + (_acsFipUuid != null ? _acsFipUuid.hashCode() : 0); - result = 31 * result + (_egressDefaultPolicy ? 1 : 0); + result = 31 * result + (_floatingIpUuids != null ? _floatingIpUuids.hashCode() : 0); return result; } } diff --git a/plugins/network-elements/nuage-vsp/src/com/cloud/agent/api/element/ShutDownVpcVspCommand.java b/plugins/network-elements/nuage-vsp/src/com/cloud/agent/api/element/ShutDownVpcVspCommand.java index 4c41e5140ae..d91734bcf0b 100644 --- a/plugins/network-elements/nuage-vsp/src/com/cloud/agent/api/element/ShutDownVpcVspCommand.java +++ b/plugins/network-elements/nuage-vsp/src/com/cloud/agent/api/element/ShutDownVpcVspCommand.java @@ -19,7 +19,6 @@ package com.cloud.agent.api.element; -import com.cloud.agent.api.CmdBuilder; import com.cloud.agent.api.Command; public class ShutDownVpcVspCommand extends Command { @@ -28,7 +27,7 @@ public class ShutDownVpcVspCommand extends Command { private final String _vpcUuid; private final String _domainTemplateName; - private ShutDownVpcVspCommand(String domainUuid, String vpcUuid, String domainTemplateName) { + public ShutDownVpcVspCommand(String domainUuid, String vpcUuid, String domainTemplateName) { super(); this._domainUuid = domainUuid; this._vpcUuid = vpcUuid; @@ -47,32 +46,6 @@ public class ShutDownVpcVspCommand extends Command { return _domainTemplateName; } - public static class Builder implements CmdBuilder { - private String _domainUuid; - private String _vpcUuid; - private String _domainTemplateName; - - public Builder domainUuid(String domainUuid) { - this._domainUuid = domainUuid; - return this; - } - - public Builder vpcUuid(String vpcUuid) { - this._vpcUuid = vpcUuid; - return this; - } - - public Builder domainTemplateName(String domainTemplateName) { - this._domainTemplateName = domainTemplateName; - return this; - } - - @Override - public ShutDownVpcVspCommand build() { - return new ShutDownVpcVspCommand(_domainUuid, _vpcUuid, _domainTemplateName); - } - } - @Override public boolean executeInSequence() { return false; diff --git a/plugins/network-elements/nuage-vsp/src/com/cloud/agent/api/guru/DeallocateVmVspCommand.java b/plugins/network-elements/nuage-vsp/src/com/cloud/agent/api/guru/DeallocateVmVspCommand.java index 421fa4c6896..10dffccaccd 100644 --- a/plugins/network-elements/nuage-vsp/src/com/cloud/agent/api/guru/DeallocateVmVspCommand.java +++ b/plugins/network-elements/nuage-vsp/src/com/cloud/agent/api/guru/DeallocateVmVspCommand.java @@ -19,156 +19,34 @@ package com.cloud.agent.api.guru; -import com.cloud.agent.api.CmdBuilder; import com.cloud.agent.api.Command; +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; public class DeallocateVmVspCommand extends Command { - private final String _networkUuid; - private final String _nicFromDdUuid; - private final String _nicMacAddress; - private final String _nicIp4Address; - private final boolean _isL3Network; - private final boolean _isSharedNetwork; - private final String _vpcUuid; - private final String _networksDomainUuid; - private final String _vmInstanceName; - private final String _vmUuid; - private final boolean _isExpungingState; + private final VspNetwork _network; + private final VspVm _vm; + private final VspNic _nic; - private DeallocateVmVspCommand(String networkUuid, String nicFromDdUuid, String nicMacAddress, String nicIp4Address, boolean isL3Network, boolean isSharedNetwork, String vpcUuid, - String networksDomainUuid, String vmInstanceName, String vmUuid, boolean isExpungingState) { + public DeallocateVmVspCommand(VspNetwork network, VspVm vm, VspNic nic) { super(); - this._networkUuid = networkUuid; - this._nicFromDdUuid = nicFromDdUuid; - this._nicMacAddress = nicMacAddress; - this._nicIp4Address = nicIp4Address; - this._isL3Network = isL3Network; - this._isSharedNetwork = isSharedNetwork; - this._vpcUuid = vpcUuid; - this._networksDomainUuid = networksDomainUuid; - this._vmInstanceName = vmInstanceName; - this._vmUuid = vmUuid; - this._isExpungingState = isExpungingState; + this._network = network; + this._vm = vm; + this._nic = nic; } - public String getNetworkUuid() { - return _networkUuid; + public VspNetwork getNetwork() { + return this._network; } - public String getNicFromDdUuid() { - return _nicFromDdUuid; + public VspVm getVm() { + return this._vm; } - public String getNicMacAddress() { - return _nicMacAddress; - } - - public String getNicIp4Address() { - return _nicIp4Address; - } - - public boolean isL3Network() { - return _isL3Network; - } - - public boolean isSharedNetwork() { - return _isSharedNetwork; - } - - public String getVpcUuid() { - return _vpcUuid; - } - - public String getNetworksDomainUuid() { - return _networksDomainUuid; - } - - public String getVmInstanceName() { - return _vmInstanceName; - } - - public String getVmUuid() { - return _vmUuid; - } - - public boolean isExpungingState() { - return _isExpungingState; - } - - public static class Builder implements CmdBuilder { - private String _networkUuid; - private String _nicFromDdUuid; - private String _nicMacAddress; - private String _nicIp4Address; - private boolean _isL3Network; - private boolean _isSharedNetwork; - private String _vpcUuid; - private String _networksDomainUuid; - private String _vmInstanceName; - private String _vmUuid; - private boolean _isExpungingState; - - public Builder networkUuid(String networkUuid) { - this._networkUuid = networkUuid; - return this; - } - - public Builder nicFromDbUuid(String nicFromDbUuid) { - this._nicFromDdUuid = nicFromDbUuid; - return this; - } - - public Builder nicMacAddress(String nicMacAddress) { - this._nicMacAddress = nicMacAddress; - return this; - } - - public Builder nicIp4Address(String nicIp4Address) { - this._nicIp4Address = nicIp4Address; - return this; - } - - public Builder isL3Network(boolean isL3Network) { - this._isL3Network = isL3Network; - return this; - } - - public Builder isSharedNetwork(boolean isSharedNetwork) { - this._isSharedNetwork = isSharedNetwork; - return this; - } - - public Builder vpcUuid(String vpcUuid) { - this._vpcUuid = vpcUuid; - return this; - } - - public Builder networksDomainUuid(String networksDomainUuid) { - this._networksDomainUuid = networksDomainUuid; - return this; - } - - public Builder vmInstanceName(String vmInstanceName) { - this._vmInstanceName = vmInstanceName; - return this; - } - - public Builder vmUuid(String vmUuid) { - this._vmUuid = vmUuid; - return this; - } - - public Builder isExpungingState(boolean isExpungingState) { - this._isExpungingState = isExpungingState; - return this; - } - - @Override - public DeallocateVmVspCommand build() { - return new DeallocateVmVspCommand(_networkUuid,_nicFromDdUuid, _nicMacAddress, _nicIp4Address, _isL3Network, _isSharedNetwork, _vpcUuid, - _networksDomainUuid, _vmInstanceName, _vmUuid, _isExpungingState); - } + public VspNic getNic() { + return this._nic; } @Override @@ -184,22 +62,9 @@ public class DeallocateVmVspCommand extends Command { DeallocateVmVspCommand that = (DeallocateVmVspCommand) o; - if (_isExpungingState != that._isExpungingState) return false; - if (_isL3Network != that._isL3Network) return false; - if (_isSharedNetwork != that._isSharedNetwork) return false; - if (_networkUuid != null ? !_networkUuid.equals(that._networkUuid) : that._networkUuid != null) return false; - if (_networksDomainUuid != null ? !_networksDomainUuid.equals(that._networksDomainUuid) : that._networksDomainUuid != null) - return false; - if (_nicFromDdUuid != null ? !_nicFromDdUuid.equals(that._nicFromDdUuid) : that._nicFromDdUuid != null) - return false; - if (_nicIp4Address != null ? !_nicIp4Address.equals(that._nicIp4Address) : that._nicIp4Address != null) - return false; - if (_nicMacAddress != null ? !_nicMacAddress.equals(that._nicMacAddress) : that._nicMacAddress != null) - return false; - if (_vmInstanceName != null ? !_vmInstanceName.equals(that._vmInstanceName) : that._vmInstanceName != null) - return false; - if (_vmUuid != null ? !_vmUuid.equals(that._vmUuid) : that._vmUuid != null) return false; - if (_vpcUuid != null ? !_vpcUuid.equals(that._vpcUuid) : that._vpcUuid != null) return false; + 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; } @@ -207,17 +72,9 @@ public class DeallocateVmVspCommand extends Command { @Override public int hashCode() { int result = super.hashCode(); - result = 31 * result + (_networkUuid != null ? _networkUuid.hashCode() : 0); - result = 31 * result + (_nicFromDdUuid != null ? _nicFromDdUuid.hashCode() : 0); - result = 31 * result + (_nicMacAddress != null ? _nicMacAddress.hashCode() : 0); - result = 31 * result + (_nicIp4Address != null ? _nicIp4Address.hashCode() : 0); - result = 31 * result + (_isL3Network ? 1 : 0); - result = 31 * result + (_isSharedNetwork ? 1 : 0); - result = 31 * result + (_vpcUuid != null ? _vpcUuid.hashCode() : 0); - result = 31 * result + (_networksDomainUuid != null ? _networksDomainUuid.hashCode() : 0); - result = 31 * result + (_vmInstanceName != null ? _vmInstanceName.hashCode() : 0); - result = 31 * result + (_vmUuid != null ? _vmUuid.hashCode() : 0); - result = 31 * result + (_isExpungingState ? 1 : 0); + 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; } } diff --git a/plugins/network-elements/nuage-vsp/src/com/cloud/agent/api/guru/ImplementNetworkVspCommand.java b/plugins/network-elements/nuage-vsp/src/com/cloud/agent/api/guru/ImplementNetworkVspCommand.java index 575e57d3623..bb3575690d2 100644 --- a/plugins/network-elements/nuage-vsp/src/com/cloud/agent/api/guru/ImplementNetworkVspCommand.java +++ b/plugins/network-elements/nuage-vsp/src/com/cloud/agent/api/guru/ImplementNetworkVspCommand.java @@ -19,272 +19,30 @@ package com.cloud.agent.api.guru; -import com.cloud.agent.api.CmdBuilder; import com.cloud.agent.api.Command; +import net.nuage.vsp.acs.client.api.model.VspNetwork; -import java.util.Collection; import java.util.List; public class ImplementNetworkVspCommand extends Command { - private final String _networkDomainName; - private final String _networkDomainPath; - private final String _networkDomainUuid; - private final String _networkAccountName; - private final String _networkAccountUuid; - private final String _networkName; - private final String _networkCidr; - private final String _networkGateway; - private final Long _networkAclId; + private final VspNetwork _network; private final List _dnsServers; - private final List _gatewaySystemIds; - private final String _networkUuid; - private final boolean _isL3Network; - private final boolean _isVpc; - private final boolean _isSharedNetwork; - private final String _vpcName; - private final String _vpcUuid; - private final boolean _defaultEgressPolicy; - private final List _ipAddressRange; - private final String _domainTemplateName; - private ImplementNetworkVspCommand(String networkDomainName, String networkDomainPath, String networkDomainUuid, String networkAccountName, String networkAccountUuid, - String networkName, String networkCidr, String networkGateway, Long networkAclId, List dnsServers, List gatewaySystemIds, String networkUuid, - boolean isL3Network, boolean isVpc, boolean isSharedNetwork, String vpcName, String vpcUuid, boolean defaultEgressPolicy, List ipAddressRange, - String domainTemplateName) { + public ImplementNetworkVspCommand(VspNetwork network, List dnsServers) { super(); - this._networkDomainName = networkDomainName; - this._networkDomainPath = networkDomainPath; - this._networkDomainUuid = networkDomainUuid; - this._networkAccountName = networkAccountName; - this._networkAccountUuid = networkAccountUuid; - this._networkName = networkName; - this._networkCidr = networkCidr; - this._networkGateway = networkGateway; - this._networkAclId = networkAclId; + this._network = network; this._dnsServers = dnsServers; - this._gatewaySystemIds = gatewaySystemIds; - this._networkUuid = networkUuid; - this._isL3Network = isL3Network; - this._isVpc = isVpc; - this._isSharedNetwork = isSharedNetwork; - this._vpcName = vpcName; - this._vpcUuid = vpcUuid; - this._defaultEgressPolicy = defaultEgressPolicy; - this._ipAddressRange = ipAddressRange; - this._domainTemplateName = domainTemplateName; } - public String getNetworkDomainName() { - return _networkDomainName; - } - - public String getNetworkDomainPath() { - return _networkDomainPath; - } - - public String getNetworkDomainUuid() { - return _networkDomainUuid; - } - - public String getNetworkAccountName() { - return _networkAccountName; - } - - public String getNetworkAccountUuid() { - return _networkAccountUuid; - } - - public String getNetworkName() { - return _networkName; - } - - public String getNetworkCidr() { - return _networkCidr; - } - - public String getNetworkGateway() { - return _networkGateway; - } - - public Long getNetworkAclId() { - return _networkAclId; + public VspNetwork getNetwork() { + return _network; } public List getDnsServers() { return _dnsServers; } - public List getGatewaySystemIds() { - return _gatewaySystemIds; - } - - public String getNetworkUuid() { - return _networkUuid; - } - - public boolean isL3Network() { - return _isL3Network; - } - - public boolean isVpc() { - return _isVpc; - } - - public boolean isSharedNetwork() { - return _isSharedNetwork; - } - - public String getVpcName() { - return _vpcName; - } - - public String getVpcUuid() { - return _vpcUuid; - } - - public boolean isDefaultEgressPolicy() { - return _defaultEgressPolicy; - } - - public Collection getIpAddressRange() { - return _ipAddressRange; - } - - public String getDomainTemplateName() { - return _domainTemplateName; - } - - public static class Builder implements CmdBuilder { - private String _networkDomainName; - private String _networkDomainPath; - private String _networkDomainUuid; - private String _networkAccountName; - private String _networkAccountUuid; - private String _networkName; - private String _networkCidr; - private String _networkGateway; - private Long _networkAclId; - private List _dnsServers; - private List _gatewaySystemIds; - private String _networkUuid; - private boolean _isL3Network; - private boolean _isVpc; - private boolean _isSharedNetwork; - private String _vpcName; - private String _vpcUuid; - private boolean _defaultEgressPolicy; - private List _ipAddressRange; - private String _domainTemplateName; - - public Builder networkDomainName(String networkDomainName) { - this._networkDomainName = networkDomainName; - return this; - } - - public Builder networkDomainPath(String networkDomainPath) { - this._networkDomainPath = networkDomainPath; - return this; - } - - public Builder networkDomainUuid(String networkDomainUuid) { - this._networkDomainUuid = networkDomainUuid; - return this; - } - - public Builder networkAccountName(String networkAccountName) { - this._networkAccountName = networkAccountName; - return this; - } - - public Builder networkAccountUuid(String networkAccountUuid) { - this._networkAccountUuid = networkAccountUuid; - return this; - } - - public Builder networkName(String networkName) { - this._networkName = networkName; - return this; - } - - public Builder networkCidr(String networkCidr) { - this._networkCidr = networkCidr; - return this; - } - - public Builder networkGateway(String networkGateway) { - this._networkGateway = networkGateway; - return this; - } - - public Builder networkAclId(Long networkAclId) { - this._networkAclId = networkAclId; - return this; - } - - public Builder dnsServers(List dnsServers) { - this._dnsServers = dnsServers; - return this; - } - - public Builder gatewaySystemIds(List gatewaySystemIds) { - this._gatewaySystemIds = gatewaySystemIds; - return this; - } - - public Builder networkUuid(String networkUuid) { - this._networkUuid = networkUuid; - return this; - } - - public Builder isL3Network(boolean isL3Network) { - this._isL3Network = isL3Network; - return this; - } - - public Builder isVpc(boolean isVpc) { - this._isVpc = isVpc; - return this; - } - - public Builder isSharedNetwork(boolean isSharedNetwork) { - this._isSharedNetwork = isSharedNetwork; - return this; - } - - public Builder vpcName(String vpcName) { - this._vpcName = vpcName; - return this; - } - - public Builder vpcUuid(String vpcUuid) { - this._vpcUuid = vpcUuid; - return this; - } - - public Builder defaultEgressPolicy(boolean defaultEgressPolicy) { - this._defaultEgressPolicy = defaultEgressPolicy; - return this; - } - - public Builder ipAddressRange(List ipAddressRange) { - this._ipAddressRange = ipAddressRange; - return this; - } - - public Builder domainTemplateName(String domainTemplateName) { - this._domainTemplateName = domainTemplateName; - return this; - } - - @Override - public ImplementNetworkVspCommand build() { - return new ImplementNetworkVspCommand(_networkDomainName, _networkDomainPath, _networkDomainUuid, _networkAccountName, _networkAccountUuid, _networkName, - _networkCidr, _networkGateway, _networkAclId, _dnsServers, _gatewaySystemIds, _networkUuid, _isL3Network, _isVpc, _isSharedNetwork, _vpcName, _vpcUuid, - _defaultEgressPolicy, _ipAddressRange, _domainTemplateName); - } - } - @Override public boolean executeInSequence() { return false; @@ -298,36 +56,8 @@ public class ImplementNetworkVspCommand extends Command { ImplementNetworkVspCommand that = (ImplementNetworkVspCommand) o; - if (_defaultEgressPolicy != that._defaultEgressPolicy) return false; - if (_isL3Network != that._isL3Network) return false; - if (_isSharedNetwork != that._isSharedNetwork) return false; - if (_isVpc != that._isVpc) return false; if (_dnsServers != null ? !_dnsServers.equals(that._dnsServers) : that._dnsServers != null) return false; - if (_domainTemplateName != null ? !_domainTemplateName.equals(that._domainTemplateName) : that._domainTemplateName != null) - return false; - if (_gatewaySystemIds != null ? !_gatewaySystemIds.equals(that._gatewaySystemIds) : that._gatewaySystemIds != null) - return false; - if (_ipAddressRange != null ? !_ipAddressRange.equals(that._ipAddressRange) : that._ipAddressRange != null) - return false; - if (_networkAccountName != null ? !_networkAccountName.equals(that._networkAccountName) : that._networkAccountName != null) - return false; - if (_networkAccountUuid != null ? !_networkAccountUuid.equals(that._networkAccountUuid) : that._networkAccountUuid != null) - return false; - if (_networkAclId != null ? !_networkAclId.equals(that._networkAclId) : that._networkAclId != null) - return false; - if (_networkCidr != null ? !_networkCidr.equals(that._networkCidr) : that._networkCidr != null) return false; - if (_networkDomainName != null ? !_networkDomainName.equals(that._networkDomainName) : that._networkDomainName != null) - return false; - if (_networkDomainPath != null ? !_networkDomainPath.equals(that._networkDomainPath) : that._networkDomainPath != null) - return false; - if (_networkDomainUuid != null ? !_networkDomainUuid.equals(that._networkDomainUuid) : that._networkDomainUuid != null) - return false; - if (_networkGateway != null ? !_networkGateway.equals(that._networkGateway) : that._networkGateway != null) - return false; - if (_networkName != null ? !_networkName.equals(that._networkName) : that._networkName != null) return false; - if (_networkUuid != null ? !_networkUuid.equals(that._networkUuid) : that._networkUuid != null) return false; - if (_vpcName != null ? !_vpcName.equals(that._vpcName) : that._vpcName != null) return false; - if (_vpcUuid != null ? !_vpcUuid.equals(that._vpcUuid) : that._vpcUuid != null) return false; + if (_network != null ? !_network.equals(that._network) : that._network != null) return false; return true; } @@ -335,26 +65,8 @@ public class ImplementNetworkVspCommand extends Command { @Override public int hashCode() { int result = super.hashCode(); - result = 31 * result + (_networkDomainName != null ? _networkDomainName.hashCode() : 0); - result = 31 * result + (_networkDomainPath != null ? _networkDomainPath.hashCode() : 0); - result = 31 * result + (_networkDomainUuid != null ? _networkDomainUuid.hashCode() : 0); - result = 31 * result + (_networkAccountName != null ? _networkAccountName.hashCode() : 0); - result = 31 * result + (_networkAccountUuid != null ? _networkAccountUuid.hashCode() : 0); - result = 31 * result + (_networkName != null ? _networkName.hashCode() : 0); - result = 31 * result + (_networkCidr != null ? _networkCidr.hashCode() : 0); - result = 31 * result + (_networkGateway != null ? _networkGateway.hashCode() : 0); - result = 31 * result + (_networkAclId != null ? _networkAclId.hashCode() : 0); + result = 31 * result + (_network != null ? _network.hashCode() : 0); result = 31 * result + (_dnsServers != null ? _dnsServers.hashCode() : 0); - result = 31 * result + (_gatewaySystemIds != null ? _gatewaySystemIds.hashCode() : 0); - result = 31 * result + (_networkUuid != null ? _networkUuid.hashCode() : 0); - result = 31 * result + (_isL3Network ? 1 : 0); - result = 31 * result + (_isVpc ? 1 : 0); - result = 31 * result + (_isSharedNetwork ? 1 : 0); - result = 31 * result + (_vpcName != null ? _vpcName.hashCode() : 0); - result = 31 * result + (_vpcUuid != null ? _vpcUuid.hashCode() : 0); - result = 31 * result + (_defaultEgressPolicy ? 1 : 0); - result = 31 * result + (_ipAddressRange != null ? _ipAddressRange.hashCode() : 0); - result = 31 * result + (_domainTemplateName != null ? _domainTemplateName.hashCode() : 0); return result; } } diff --git a/plugins/network-elements/nuage-vsp/src/com/cloud/agent/api/guru/ReserveVmInterfaceVspCommand.java b/plugins/network-elements/nuage-vsp/src/com/cloud/agent/api/guru/ReserveVmInterfaceVspCommand.java index abcd0f2c694..299b9a6ec73 100644 --- a/plugins/network-elements/nuage-vsp/src/com/cloud/agent/api/guru/ReserveVmInterfaceVspCommand.java +++ b/plugins/network-elements/nuage-vsp/src/com/cloud/agent/api/guru/ReserveVmInterfaceVspCommand.java @@ -19,303 +19,41 @@ package com.cloud.agent.api.guru; -import com.cloud.agent.api.CmdBuilder; import com.cloud.agent.api.Command; +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; public class ReserveVmInterfaceVspCommand extends Command { - private final String _nicUuid; - private final String _nicMacAddress; - private final String _networkUuid; - private final boolean _isL3Network; - private final boolean _isSharedNetwork; - private final String _vpcUuid; - private final String _networkDomainUuid; - private final String _networksAccountUuid; - private final boolean _isDomainRouter; - private final String _domainRouterIp; - private final String _vmInstanceName; - private final String _vmUuid; - private final String _vmUserName; - private final String _vmUserDomainName; - private final boolean _useStaticIp; - private final String _staticIp; - private final String _staticNatIpUuid; - private final String _staticNatIpAddress; - private final boolean _isStaticNatIpAllocated; - private final boolean _isOneToOneNat; - private final String _staticNatVlanUuid; - private final String _staticNatVlanGateway; - private final String _staticNatVlanNetmask; + private final VspNetwork _network; + private final VspVm _vm; + private final VspNic _nic; + private final VspStaticNat _staticNat; - private ReserveVmInterfaceVspCommand(String nicUuid, String nicMacAddress, String networkUuid, boolean isL3Network, boolean isSharedNetwork, String vpcUuid, String networkDomainUuid, - String networksAccountUuid, boolean isDomainRouter, String domainRouterIp, String vmInstanceName, String vmUuid, String vmUserName, String vmUserDomainName, - boolean useStaticIp, String staticIp, String staticNatIpUuid, String staticNatIpAddress, boolean isStaticNatIpAllocated, boolean isOneToOneNat, String staticNatVlanUuid, - String staticNatVlanGateway, String staticNatVlanNetmask) { + public ReserveVmInterfaceVspCommand(VspNetwork network, VspVm vm, VspNic nic, VspStaticNat staticNat) { super(); - this._nicUuid = nicUuid; - this._nicMacAddress = nicMacAddress; - this._networkUuid = networkUuid; - this._isL3Network = isL3Network; - this._isSharedNetwork = isSharedNetwork; - this._vpcUuid = vpcUuid; - this._networkDomainUuid = networkDomainUuid; - this._networksAccountUuid = networksAccountUuid; - this._isDomainRouter = isDomainRouter; - this._domainRouterIp = domainRouterIp; - this._vmInstanceName = vmInstanceName; - this._vmUuid = vmUuid; - this._vmUserName = vmUserName; - this._vmUserDomainName = vmUserDomainName; - this._useStaticIp = useStaticIp; - this._staticIp = staticIp; - this._staticNatIpUuid = staticNatIpUuid; - this._staticNatIpAddress = staticNatIpAddress; - this._isStaticNatIpAllocated = isStaticNatIpAllocated; - this._isOneToOneNat = isOneToOneNat; - this._staticNatVlanUuid = staticNatVlanUuid; - this._staticNatVlanGateway = staticNatVlanGateway; - this._staticNatVlanNetmask = staticNatVlanNetmask; + this._network = network; + this._vm = vm; + this._nic = nic; + this._staticNat = staticNat; } - public String getNicUuid() { - return _nicUuid; + public VspNetwork getNetwork() { + return _network; } - public String getNicMacAddress() { - return _nicMacAddress; + public VspVm getVm() { + return _vm; } - public String getNetworkUuid() { - return _networkUuid; + public VspNic getNic() { + return _nic; } - public boolean isL3Network() { - return _isL3Network; - } - - public boolean isSharedNetwork() { - return _isSharedNetwork; - } - - public String getVpcUuid() { - return _vpcUuid; - } - - public String getNetworkDomainUuid() { - return _networkDomainUuid; - } - - public String getNetworksAccountUuid() { - return _networksAccountUuid; - } - - public boolean isDomainRouter() { - return _isDomainRouter; - } - - public String getDomainRouterIp() { - return _domainRouterIp; - } - - public String getVmInstanceName() { - return _vmInstanceName; - } - - public String getVmUuid() { - return _vmUuid; - } - - public String getVmUserName() { - return _vmUserName; - } - - public String getVmUserDomainName() { - return _vmUserDomainName; - } - - public boolean useStaticIp() { - return _useStaticIp; - } - - public String getStaticIp() { - return _staticIp; - } - - public String getStaticNatIpUuid() { - return _staticNatIpUuid; - } - - public String getStaticNatIpAddress() { - return _staticNatIpAddress; - } - - public boolean isStaticNatIpAllocated() { - return _isStaticNatIpAllocated; - } - - public boolean isOneToOneNat() { - return _isOneToOneNat; - } - - public String getStaticNatVlanUuid() { - return _staticNatVlanUuid; - } - - public String getStaticNatVlanGateway() { - return _staticNatVlanGateway; - } - - public String getStaticNatVlanNetmask() { - return _staticNatVlanNetmask; - } - - public static class Builder implements CmdBuilder { - private String _nicUuid; - private String _nicMacAddress; - private String _networkUuid; - private boolean _isL3Network; - private boolean _isSharedNetwork; - private String _vpcUuid; - private String _networkDomainUuid; - private String _networksAccountUuid; - private boolean _isDomainRouter; - private String _domainRouterIp; - private String _vmInstanceName; - private String _vmUuid; - private String _vmUserName; - private String _vmUserDomainName; - private boolean _useStaticIp; - private String _staticIp; - private String _staticNatIpUuid; - private String _staticNatIpAddress; - private boolean _isStaticNatIpAllocated; - private boolean _isOneToOneNat; - private String _staticNatVlanUuid; - private String _staticNatVlanGateway; - private String _staticNatVlanNetmask; - - public Builder nicUuid(String nicUuid) { - this._nicUuid = nicUuid; - return this; - } - - public Builder nicMacAddress(String nicMacAddress) { - this._nicMacAddress = nicMacAddress; - return this; - } - - public Builder networkUuid(String networkUuid) { - this._networkUuid = networkUuid; - return this; - } - - public Builder isL3Network(boolean isL3Network) { - this._isL3Network = isL3Network; - return this; - } - - public Builder isSharedNetwork(boolean isSharedNetwork) { - this._isSharedNetwork = isSharedNetwork; - return this; - } - - public Builder vpcUuid(String vpcUuid) { - this._vpcUuid = vpcUuid; - return this; - } - - public Builder networkDomainUuid(String networkDomainUuid) { - this._networkDomainUuid = networkDomainUuid; - return this; - } - - public Builder networksAccountUuid(String networksAccountUuid) { - this._networksAccountUuid = networksAccountUuid; - return this; - } - - public Builder isDomainRouter(boolean isDomainRouter) { - this._isDomainRouter = isDomainRouter; - return this; - } - - public Builder domainRouterIp(String domainRouterIp) { - this._domainRouterIp = domainRouterIp; - return this; - } - - public Builder vmInstanceName(String vmInstanceName) { - this._vmInstanceName = vmInstanceName; - return this; - } - - public Builder vmUuid(String vmUuid) { - this._vmUuid = vmUuid; - return this; - } - - public Builder vmUserName(String vmUserName) { - this._vmUserName = vmUserName; - return this; - } - - public Builder vmUserDomainName(String vmUserDomainName) { - this._vmUserDomainName = vmUserDomainName; - return this; - } - - public Builder useStaticIp(boolean useStaticIp) { - this._useStaticIp = useStaticIp; - return this; - } - - public Builder staticIp(String staticIp) { - this._staticIp = staticIp; - return this; - } - - public Builder staticNatIpUuid(String staticNatIpUuid) { - this._staticNatIpUuid = staticNatIpUuid; - return this; - } - - public Builder staticNatIpAddress(String staticNatIpAddress) { - this._staticNatIpAddress = staticNatIpAddress; - return this; - } - - public Builder isStaticNatIpAllocated(boolean isStaticNatIpAllocated) { - this._isStaticNatIpAllocated = isStaticNatIpAllocated; - return this; - } - - public Builder isOneToOneNat(boolean isOneToOneNat) { - this._isOneToOneNat = isOneToOneNat; - return this; - } - - public Builder staticNatVlanUuid(String staticNatVlanUuid) { - this._staticNatVlanUuid = staticNatVlanUuid; - return this; - } - - public Builder staticNatVlanGateway(String staticNatVlanGateway) { - this._staticNatVlanGateway = staticNatVlanGateway; - return this; - } - - public Builder staticNatVlanNetmask(String staticNatVlanNetmask) { - this._staticNatVlanNetmask = staticNatVlanNetmask; - return this; - } - - @Override - public ReserveVmInterfaceVspCommand build() { - return new ReserveVmInterfaceVspCommand(_nicUuid, _nicMacAddress, _networkUuid, _isL3Network, _isSharedNetwork, _vpcUuid, _networkDomainUuid, _networksAccountUuid, - _isDomainRouter, _domainRouterIp, _vmInstanceName, _vmUuid, _vmUserName, _vmUserDomainName, _useStaticIp, _staticIp, _staticNatIpUuid, _staticNatIpAddress, - _isStaticNatIpAllocated, _isOneToOneNat, _staticNatVlanUuid, _staticNatVlanGateway, _staticNatVlanNetmask); - } + public VspStaticNat getStaticNat() { + return _staticNat; } @Override @@ -331,40 +69,10 @@ public class ReserveVmInterfaceVspCommand extends Command { ReserveVmInterfaceVspCommand that = (ReserveVmInterfaceVspCommand) o; - if (_isDomainRouter != that._isDomainRouter) return false; - if (_isL3Network != that._isL3Network) return false; - if (_isOneToOneNat != that._isOneToOneNat) return false; - if (_isSharedNetwork != that._isSharedNetwork) return false; - if (_isStaticNatIpAllocated != that._isStaticNatIpAllocated) return false; - if (_useStaticIp != that._useStaticIp) return false; - if (_domainRouterIp != null ? !_domainRouterIp.equals(that._domainRouterIp) : that._domainRouterIp != null) - return false; - if (_networkDomainUuid != null ? !_networkDomainUuid.equals(that._networkDomainUuid) : that._networkDomainUuid != null) - return false; - if (_networkUuid != null ? !_networkUuid.equals(that._networkUuid) : that._networkUuid != null) return false; - if (_networksAccountUuid != null ? !_networksAccountUuid.equals(that._networksAccountUuid) : that._networksAccountUuid != null) - return false; - if (_nicMacAddress != null ? !_nicMacAddress.equals(that._nicMacAddress) : that._nicMacAddress != null) - return false; - if (_nicUuid != null ? !_nicUuid.equals(that._nicUuid) : that._nicUuid != null) return false; - if (_staticIp != null ? !_staticIp.equals(that._staticIp) : that._staticIp != null) return false; - if (_staticNatIpAddress != null ? !_staticNatIpAddress.equals(that._staticNatIpAddress) : that._staticNatIpAddress != null) - return false; - if (_staticNatIpUuid != null ? !_staticNatIpUuid.equals(that._staticNatIpUuid) : that._staticNatIpUuid != null) - return false; - if (_staticNatVlanGateway != null ? !_staticNatVlanGateway.equals(that._staticNatVlanGateway) : that._staticNatVlanGateway != null) - return false; - if (_staticNatVlanNetmask != null ? !_staticNatVlanNetmask.equals(that._staticNatVlanNetmask) : that._staticNatVlanNetmask != null) - return false; - if (_staticNatVlanUuid != null ? !_staticNatVlanUuid.equals(that._staticNatVlanUuid) : that._staticNatVlanUuid != null) - return false; - if (_vmInstanceName != null ? !_vmInstanceName.equals(that._vmInstanceName) : that._vmInstanceName != null) - return false; - if (_vmUserDomainName != null ? !_vmUserDomainName.equals(that._vmUserDomainName) : that._vmUserDomainName != null) - return false; - if (_vmUserName != null ? !_vmUserName.equals(that._vmUserName) : that._vmUserName != null) return false; - if (_vmUuid != null ? !_vmUuid.equals(that._vmUuid) : that._vmUuid != null) return false; - if (_vpcUuid != null ? !_vpcUuid.equals(that._vpcUuid) : that._vpcUuid != null) return false; + 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; } @@ -372,29 +80,10 @@ public class ReserveVmInterfaceVspCommand extends Command { @Override public int hashCode() { int result = super.hashCode(); - result = 31 * result + (_nicUuid != null ? _nicUuid.hashCode() : 0); - result = 31 * result + (_nicMacAddress != null ? _nicMacAddress.hashCode() : 0); - result = 31 * result + (_networkUuid != null ? _networkUuid.hashCode() : 0); - result = 31 * result + (_isL3Network ? 1 : 0); - result = 31 * result + (_isSharedNetwork ? 1 : 0); - result = 31 * result + (_vpcUuid != null ? _vpcUuid.hashCode() : 0); - result = 31 * result + (_networkDomainUuid != null ? _networkDomainUuid.hashCode() : 0); - result = 31 * result + (_networksAccountUuid != null ? _networksAccountUuid.hashCode() : 0); - result = 31 * result + (_isDomainRouter ? 1 : 0); - result = 31 * result + (_domainRouterIp != null ? _domainRouterIp.hashCode() : 0); - result = 31 * result + (_vmInstanceName != null ? _vmInstanceName.hashCode() : 0); - result = 31 * result + (_vmUuid != null ? _vmUuid.hashCode() : 0); - result = 31 * result + (_vmUserName != null ? _vmUserName.hashCode() : 0); - result = 31 * result + (_vmUserDomainName != null ? _vmUserDomainName.hashCode() : 0); - result = 31 * result + (_useStaticIp ? 1 : 0); - result = 31 * result + (_staticIp != null ? _staticIp.hashCode() : 0); - result = 31 * result + (_staticNatIpUuid != null ? _staticNatIpUuid.hashCode() : 0); - result = 31 * result + (_staticNatIpAddress != null ? _staticNatIpAddress.hashCode() : 0); - result = 31 * result + (_isStaticNatIpAllocated ? 1 : 0); - result = 31 * result + (_isOneToOneNat ? 1 : 0); - result = 31 * result + (_staticNatVlanUuid != null ? _staticNatVlanUuid.hashCode() : 0); - result = 31 * result + (_staticNatVlanGateway != null ? _staticNatVlanGateway.hashCode() : 0); - result = 31 * result + (_staticNatVlanNetmask != null ? _staticNatVlanNetmask.hashCode() : 0); + 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; } } diff --git a/plugins/network-elements/nuage-vsp/src/com/cloud/agent/api/guru/TrashNetworkVspCommand.java b/plugins/network-elements/nuage-vsp/src/com/cloud/agent/api/guru/TrashNetworkVspCommand.java index 4a01fdcc3de..b3f8f8e012a 100644 --- a/plugins/network-elements/nuage-vsp/src/com/cloud/agent/api/guru/TrashNetworkVspCommand.java +++ b/plugins/network-elements/nuage-vsp/src/com/cloud/agent/api/guru/TrashNetworkVspCommand.java @@ -19,94 +19,20 @@ package com.cloud.agent.api.guru; -import com.cloud.agent.api.CmdBuilder; import com.cloud.agent.api.Command; +import net.nuage.vsp.acs.client.api.model.VspNetwork; public class TrashNetworkVspCommand extends Command { - private final String _domainUuid; - private final String _networkUuid; - private final boolean _isL3Network; - private final boolean _isSharedNetwork; - private final String _vpcUuid; - private final String _domainTemplateName; + private final VspNetwork _network; - private TrashNetworkVspCommand(String domainUuid, String networkUuid, boolean isL3Network, boolean isSharedNetwork, String vpcUuid, String domainTemplateName) { + public TrashNetworkVspCommand(VspNetwork network) { super(); - this._domainUuid = domainUuid; - this._networkUuid = networkUuid; - this._isL3Network = isL3Network; - this._isSharedNetwork = isSharedNetwork; - this._vpcUuid = vpcUuid; - this._domainTemplateName = domainTemplateName; + this._network = network; } - public String getDomainUuid() { - return _domainUuid; - } - - public String getNetworkUuid() { - return _networkUuid; - } - - public boolean isL3Network() { - return _isL3Network; - } - - public boolean isSharedNetwork() { - return _isSharedNetwork; - } - - public String getVpcUuid() { - return _vpcUuid; - } - - public String getDomainTemplateName() { - return _domainTemplateName; - } - - public static class Builder implements CmdBuilder { - private String _domainUuid; - private String _networkUuid; - private boolean _isL3Network; - private boolean _isSharedNetwork; - private String _vpcUuid; - private String _domainTemplateName; - - public Builder domainUuid(String domainUuid) { - this._domainUuid = domainUuid; - return this; - } - - public Builder networkUuid(String networkUuid) { - this._networkUuid = networkUuid; - return this; - } - - public Builder isL3Network(boolean isL3Network) { - this._isL3Network = isL3Network; - return this; - } - - public Builder isSharedNetwork(boolean isSharedNetwork) { - this._isSharedNetwork = isSharedNetwork; - return this; - } - - public Builder vpcUuid(String vpcUuid) { - this._vpcUuid = vpcUuid; - return this; - } - - public Builder domainTemplateName(String domainTemplateName) { - this._domainTemplateName = domainTemplateName; - return this; - } - - @Override - public TrashNetworkVspCommand build() { - return new TrashNetworkVspCommand(_domainUuid, _networkUuid, _isL3Network, _isSharedNetwork, _vpcUuid, _domainTemplateName); - } + public VspNetwork getNetwork() { + return _network; } @Override @@ -122,13 +48,7 @@ public class TrashNetworkVspCommand extends Command { TrashNetworkVspCommand that = (TrashNetworkVspCommand) o; - if (_isL3Network != that._isL3Network) return false; - if (_isSharedNetwork != that._isSharedNetwork) 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 (_networkUuid != null ? !_networkUuid.equals(that._networkUuid) : that._networkUuid != null) return false; - if (_vpcUuid != null ? !_vpcUuid.equals(that._vpcUuid) : that._vpcUuid != null) return false; + if (_network != null ? !_network.equals(that._network) : that._network != null) return false; return true; } @@ -136,12 +56,7 @@ public class TrashNetworkVspCommand extends Command { @Override public int hashCode() { int result = super.hashCode(); - result = 31 * result + (_domainUuid != null ? _domainUuid.hashCode() : 0); - result = 31 * result + (_networkUuid != null ? _networkUuid.hashCode() : 0); - result = 31 * result + (_isL3Network ? 1 : 0); - result = 31 * result + (_isSharedNetwork ? 1 : 0); - result = 31 * result + (_vpcUuid != null ? _vpcUuid.hashCode() : 0); - result = 31 * result + (_domainTemplateName != null ? _domainTemplateName.hashCode() : 0); + result = 31 * result + (_network != null ? _network.hashCode() : 0); return result; } } diff --git a/plugins/network-elements/nuage-vsp/src/com/cloud/agent/api/sync/SyncVspCommand.java b/plugins/network-elements/nuage-vsp/src/com/cloud/agent/api/manager/GetApiDefaultsAnswer.java similarity index 56% rename from plugins/network-elements/nuage-vsp/src/com/cloud/agent/api/sync/SyncVspCommand.java rename to plugins/network-elements/nuage-vsp/src/com/cloud/agent/api/manager/GetApiDefaultsAnswer.java index cfcfb870cd1..c02eef1699f 100644 --- a/plugins/network-elements/nuage-vsp/src/com/cloud/agent/api/sync/SyncVspCommand.java +++ b/plugins/network-elements/nuage-vsp/src/com/cloud/agent/api/manager/GetApiDefaultsAnswer.java @@ -17,38 +17,37 @@ // under the License. // -package com.cloud.agent.api.sync; +package com.cloud.agent.api.manager; -import com.cloud.agent.api.Command; +import com.cloud.agent.api.Answer; +import net.nuage.vsp.acs.client.api.model.VspApiDefaults; -public class SyncVspCommand extends Command { +public class GetApiDefaultsAnswer extends Answer { - private final String _nuageVspEntity; + private VspApiDefaults _apiDefaults; - public SyncVspCommand(String nuageVspEntity) { - super(); - this._nuageVspEntity = nuageVspEntity; + public GetApiDefaultsAnswer(GetApiDefaultsCommand cmd, VspApiDefaults defaults) { + super(cmd); + this._apiDefaults = defaults; } - @Override - public boolean executeInSequence() { - return false; + public GetApiDefaultsAnswer(GetApiDefaultsCommand cmd, Exception e) { + super(cmd, e); } - public String getNuageVspEntity() { - return _nuageVspEntity; + public VspApiDefaults getApiDefaults() { + return _apiDefaults; } @Override public boolean equals(Object o) { if (this == o) return true; - if (!(o instanceof SyncVspCommand)) return false; + if (!(o instanceof GetApiDefaultsAnswer)) return false; if (!super.equals(o)) return false; - SyncVspCommand that = (SyncVspCommand) o; + GetApiDefaultsAnswer that = (GetApiDefaultsAnswer) o; - if (_nuageVspEntity != null ? !_nuageVspEntity.equals(that._nuageVspEntity) : that._nuageVspEntity != null) - return false; + if (_apiDefaults != null ? !_apiDefaults.equals(that._apiDefaults) : that._apiDefaults != null) return false; return true; } @@ -56,7 +55,7 @@ public class SyncVspCommand extends Command { @Override public int hashCode() { int result = super.hashCode(); - result = 31 * result + (_nuageVspEntity != null ? _nuageVspEntity.hashCode() : 0); + result = 31 * result + (_apiDefaults != null ? _apiDefaults.hashCode() : 0); return result; } } diff --git a/plugins/network-elements/nuage-vsp/src/com/cloud/agent/api/manager/GetClientDefaultsCommand.java b/plugins/network-elements/nuage-vsp/src/com/cloud/agent/api/manager/GetApiDefaultsCommand.java similarity index 92% rename from plugins/network-elements/nuage-vsp/src/com/cloud/agent/api/manager/GetClientDefaultsCommand.java rename to plugins/network-elements/nuage-vsp/src/com/cloud/agent/api/manager/GetApiDefaultsCommand.java index 2ffbe04ea42..3fca16a2420 100644 --- a/plugins/network-elements/nuage-vsp/src/com/cloud/agent/api/manager/GetClientDefaultsCommand.java +++ b/plugins/network-elements/nuage-vsp/src/com/cloud/agent/api/manager/GetApiDefaultsCommand.java @@ -25,9 +25,9 @@ import com.cloud.agent.api.Command; * The super class implementations for equals and hashCode are acceptable because this class does not track any state * in addition to the super class. */ -public class GetClientDefaultsCommand extends Command { +public class GetApiDefaultsCommand extends Command { - public GetClientDefaultsCommand() { + public GetApiDefaultsCommand() { super(); } diff --git a/plugins/network-elements/nuage-vsp/src/com/cloud/agent/api/manager/GetClientDefaultsAnswer.java b/plugins/network-elements/nuage-vsp/src/com/cloud/agent/api/manager/GetClientDefaultsAnswer.java deleted file mode 100644 index f748e1cbb44..00000000000 --- a/plugins/network-elements/nuage-vsp/src/com/cloud/agent/api/manager/GetClientDefaultsAnswer.java +++ /dev/null @@ -1,81 +0,0 @@ -// -// 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.manager; - -import com.cloud.agent.api.Answer; - -import java.util.Map; - -public class GetClientDefaultsAnswer extends Answer { - - private String _currentApiVersion; - private Integer _apiRetryCount; - private Long _apiRetryInterval; - - public GetClientDefaultsAnswer(GetClientDefaultsCommand cmd, Map defaults) { - super(cmd); - this._currentApiVersion = (String) defaults.get("CURRENT_API_VERSION"); - this._apiRetryCount = (Integer) defaults.get("DEFAULT_API_RETRY_COUNT"); - this._apiRetryInterval = (Long) defaults.get("DEFAULT_API_RETRY_INTERVAL"); - } - - public GetClientDefaultsAnswer(GetClientDefaultsCommand cmd, Exception e) { - super(cmd, e); - } - - public String getCurrentApiVersion() { - return _currentApiVersion; - } - - public Integer getApiRetryCount() { - return _apiRetryCount; - } - - public Long getApiRetryInterval() { - return _apiRetryInterval; - } - - @Override - public boolean equals(Object o) { - if (this == o) return true; - if (!(o instanceof GetClientDefaultsAnswer)) return false; - if (!super.equals(o)) return false; - - GetClientDefaultsAnswer that = (GetClientDefaultsAnswer) o; - - if (_apiRetryCount != null ? !_apiRetryCount.equals(that._apiRetryCount) : that._apiRetryCount != null) - return false; - if (_apiRetryInterval != null ? !_apiRetryInterval.equals(that._apiRetryInterval) : that._apiRetryInterval != null) - return false; - if (_currentApiVersion != null ? !_currentApiVersion.equals(that._currentApiVersion) : that._currentApiVersion != null) - return false; - - return true; - } - - @Override - public int hashCode() { - int result = super.hashCode(); - result = 31 * result + (_currentApiVersion != null ? _currentApiVersion.hashCode() : 0); - result = 31 * result + (_apiRetryCount != null ? _apiRetryCount.hashCode() : 0); - result = 31 * result + (_apiRetryInterval != null ? _apiRetryInterval.hashCode() : 0); - return result; - } -} diff --git a/plugins/network-elements/nuage-vsp/src/com/cloud/agent/api/sync/SyncDomainCommand.java b/plugins/network-elements/nuage-vsp/src/com/cloud/agent/api/sync/SyncDomainCommand.java index 7ae474f2d1e..90a30a4b3a4 100644 --- a/plugins/network-elements/nuage-vsp/src/com/cloud/agent/api/sync/SyncDomainCommand.java +++ b/plugins/network-elements/nuage-vsp/src/com/cloud/agent/api/sync/SyncDomainCommand.java @@ -20,34 +20,23 @@ package com.cloud.agent.api.sync; import com.cloud.agent.api.Command; +import net.nuage.vsp.acs.client.api.model.VspDomain; public class SyncDomainCommand extends Command { - private final String _domainUuid; - private final String _domainName; - private final String _domainPath; + private final VspDomain _domain; private final boolean _toAdd; private final boolean _toRemove; - public SyncDomainCommand(String domainUuid, String domainName, String domainPath, boolean toAdd, boolean toRemove) { + public SyncDomainCommand(VspDomain domain, boolean toAdd, boolean toRemove) { super(); - this._domainUuid = domainUuid; - this._domainName = domainName; - this._domainPath = domainPath; + this._domain = domain; this._toAdd = toAdd; this._toRemove = toRemove; } - public String getDomainUuid() { - return _domainUuid; - } - - public String getDomainName() { - return _domainName; - } - - public String getDomainPath() { - return _domainPath; + public VspDomain getDomain() { + return _domain; } public boolean isToAdd() { @@ -73,9 +62,7 @@ public class SyncDomainCommand extends Command { if (_toAdd != that._toAdd) return false; if (_toRemove != that._toRemove) return false; - if (_domainName != null ? !_domainName.equals(that._domainName) : that._domainName != null) return false; - if (_domainPath != null ? !_domainPath.equals(that._domainPath) : that._domainPath != null) return false; - if (_domainUuid != null ? !_domainUuid.equals(that._domainUuid) : that._domainUuid != null) return false; + if (_domain != null ? !_domain.equals(that._domain) : that._domain != null) return false; return true; } @@ -83,9 +70,7 @@ public class SyncDomainCommand extends Command { @Override public int hashCode() { int result = super.hashCode(); - result = 31 * result + (_domainUuid != null ? _domainUuid.hashCode() : 0); - result = 31 * result + (_domainName != null ? _domainName.hashCode() : 0); - result = 31 * result + (_domainPath != null ? _domainPath.hashCode() : 0); + result = 31 * result + (_domain != null ? _domain.hashCode() : 0); result = 31 * result + (_toAdd ? 1 : 0); result = 31 * result + (_toRemove ? 1 : 0); return result; diff --git a/plugins/network-elements/nuage-vsp/src/com/cloud/api/commands/AddNuageVspDeviceCmd.java b/plugins/network-elements/nuage-vsp/src/com/cloud/api/commands/AddNuageVspDeviceCmd.java index 7590901a5ff..62a15ea5a77 100644 --- a/plugins/network-elements/nuage-vsp/src/com/cloud/api/commands/AddNuageVspDeviceCmd.java +++ b/plugins/network-elements/nuage-vsp/src/com/cloud/api/commands/AddNuageVspDeviceCmd.java @@ -29,6 +29,7 @@ import com.cloud.exception.ResourceUnavailableException; import com.cloud.network.NuageVspDeviceVO; import com.cloud.network.manager.NuageVspManager; import com.cloud.utils.exception.CloudRuntimeException; +import org.apache.cloudstack.acl.RoleType; import org.apache.cloudstack.api.APICommand; import org.apache.cloudstack.api.ApiConstants; import org.apache.cloudstack.api.ApiErrorCode; @@ -41,9 +42,12 @@ import org.apache.cloudstack.context.CallContext; import javax.inject.Inject; -@APICommand(name = "addNuageVspDevice", responseObject = NuageVspDeviceResponse.class, description = "Adds a Nuage VSP device", since = "4.5") +@APICommand(name = AddNuageVspDeviceCmd.APINAME, description = "Adds a Nuage VSP device", responseObject = NuageVspDeviceResponse.class, + requestHasSensitiveInfo = false, responseHasSensitiveInfo = false, + since = "4.5", + authorized = {RoleType.Admin}) public class AddNuageVspDeviceCmd extends BaseAsyncCmd { - private static final String s_name = "addnuagevspdeviceresponse"; + public static final String APINAME = "addNuageVspDevice"; @Inject NuageVspManager _nuageVspManager; @@ -68,14 +72,14 @@ public class AddNuageVspDeviceCmd extends BaseAsyncCmd { @Parameter(name = ApiConstants.PASSWORD, type = CommandType.STRING, required = true, description = "the password of CMS user in Nuage VSD") private String password; - @Parameter(name = VspConstants.NUAGE_VSP_API_VERSION, type = CommandType.STRING, required = true, description = "the version of the API to use to communicate to Nuage VSD") + @Parameter(name = VspConstants.NUAGE_VSP_API_VERSION, type = CommandType.STRING, description = "the version of the API to use to communicate to Nuage VSD") private String apiVersion; - @Parameter(name = VspConstants.NUAGE_VSP_API_RETRY_COUNT, type = CommandType.INTEGER, required = true, description = "the number of retries on failure to communicate to Nuage VSD") - private int apiRetryCount; + @Parameter(name = VspConstants.NUAGE_VSP_API_RETRY_COUNT, type = CommandType.INTEGER, description = "the number of retries on failure to communicate to Nuage VSD") + private Integer apiRetryCount; - @Parameter(name = VspConstants.NUAGE_VSP_API_RETRY_INTERVAL, type = CommandType.LONG, required = true, description = "the time to wait after failure before retrying to communicate to Nuage VSD") - private long apiRetryInterval; + @Parameter(name = VspConstants.NUAGE_VSP_API_RETRY_INTERVAL, type = CommandType.LONG, description = "the time to wait after failure before retrying to communicate to Nuage VSD") + private Long apiRetryInterval; ///////////////////////////////////////////////////// /////////////////// Accessors /////////////////////// @@ -117,7 +121,7 @@ public class AddNuageVspDeviceCmd extends BaseAsyncCmd { this.apiVersion = apiVersion; } - public int getApiRetryCount() { + public Integer getApiRetryCount() { return apiRetryCount; } @@ -125,7 +129,7 @@ public class AddNuageVspDeviceCmd extends BaseAsyncCmd { this.apiRetryCount = apiRetryCount; } - public long getApiRetryInterval() { + public Long getApiRetryInterval() { return apiRetryInterval; } @@ -158,7 +162,7 @@ public class AddNuageVspDeviceCmd extends BaseAsyncCmd { @Override public String getCommandName() { - return s_name; + return APINAME.toLowerCase() + BaseCmd.RESPONSE_SUFFIX; } @Override diff --git a/plugins/network-elements/nuage-vsp/src/com/cloud/api/commands/DeleteNuageVspDeviceCmd.java b/plugins/network-elements/nuage-vsp/src/com/cloud/api/commands/DeleteNuageVspDeviceCmd.java index 971f9c93f4b..05a17d6734c 100644 --- a/plugins/network-elements/nuage-vsp/src/com/cloud/api/commands/DeleteNuageVspDeviceCmd.java +++ b/plugins/network-elements/nuage-vsp/src/com/cloud/api/commands/DeleteNuageVspDeviceCmd.java @@ -28,9 +28,11 @@ import com.cloud.exception.ResourceAllocationException; import com.cloud.exception.ResourceUnavailableException; import com.cloud.network.manager.NuageVspManager; import com.cloud.utils.exception.CloudRuntimeException; +import org.apache.cloudstack.acl.RoleType; import org.apache.cloudstack.api.APICommand; import org.apache.cloudstack.api.ApiErrorCode; import org.apache.cloudstack.api.BaseAsyncCmd; +import org.apache.cloudstack.api.BaseCmd; import org.apache.cloudstack.api.Parameter; import org.apache.cloudstack.api.ServerApiException; import org.apache.cloudstack.api.response.SuccessResponse; @@ -38,9 +40,13 @@ import org.apache.cloudstack.context.CallContext; import javax.inject.Inject; -@APICommand(name = "deleteNuageVspDevice", responseObject = SuccessResponse.class, description = "delete a nuage vsp device", since = "4.5") +@APICommand(name = DeleteNuageVspDeviceCmd.APINAME, description = "delete a nuage vsp device", responseObject = SuccessResponse.class, + requestHasSensitiveInfo = false, responseHasSensitiveInfo = false, + since = "4.5", + authorized = {RoleType.Admin}) public class DeleteNuageVspDeviceCmd extends BaseAsyncCmd { - private static final String s_name = "deletenuagevspdeviceresponse"; + public static final String APINAME = "deleteNuageVspDevice"; + @Inject NuageVspManager _nuageVspManager; @@ -83,7 +89,7 @@ public class DeleteNuageVspDeviceCmd extends BaseAsyncCmd { @Override public String getCommandName() { - return s_name; + return APINAME.toLowerCase() + BaseCmd.RESPONSE_SUFFIX; } @Override diff --git a/plugins/network-elements/nuage-vsp/src/com/cloud/api/commands/IssueNuageVspResourceRequestCmd.java b/plugins/network-elements/nuage-vsp/src/com/cloud/api/commands/IssueNuageVspResourceRequestCmd.java deleted file mode 100644 index 559b30d40a7..00000000000 --- a/plugins/network-elements/nuage-vsp/src/com/cloud/api/commands/IssueNuageVspResourceRequestCmd.java +++ /dev/null @@ -1,213 +0,0 @@ -// -// 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.api.commands; - -import com.cloud.agent.AgentManager; -import com.cloud.agent.api.VspResourceAnswer; -import com.cloud.agent.api.VspResourceCommand; -import com.cloud.api.response.NuageVspResourceResponse; -import com.cloud.domain.dao.DomainDao; -import com.cloud.exception.ConcurrentOperationException; -import com.cloud.exception.InsufficientCapacityException; -import com.cloud.exception.InvalidParameterValueException; -import com.cloud.exception.ResourceAllocationException; -import com.cloud.exception.ResourceUnavailableException; -import com.cloud.host.HostVO; -import com.cloud.host.dao.HostDao; -import com.cloud.network.NuageVspDeviceVO; -import com.cloud.network.dao.NuageVspDao; -import com.cloud.offering.NetworkOffering; -import com.cloud.user.Account; -import com.cloud.user.AccountManager; -import org.apache.cloudstack.api.APICommand; -import org.apache.cloudstack.api.ApiConstants; -import org.apache.cloudstack.api.ApiErrorCode; -import org.apache.cloudstack.api.BaseCmd; -import org.apache.cloudstack.api.Parameter; -import org.apache.cloudstack.api.ServerApiException; -import org.apache.cloudstack.api.response.NetworkOfferingResponse; -import org.apache.cloudstack.api.response.PhysicalNetworkResponse; -import org.apache.cloudstack.api.response.ZoneResponse; -import org.apache.cloudstack.context.CallContext; -import org.apache.commons.lang.StringUtils; -import org.apache.log4j.Logger; - -import javax.inject.Inject; -import java.util.List; - -@APICommand(name = "issueNuageVspResourceRequest", responseObject = NuageVspResourceResponse.class, description = "Issues a Nuage VSP REST API resource request", since = "4.5") -public class IssueNuageVspResourceRequestCmd extends BaseCmd { - private static final Logger s_logger = Logger.getLogger(IssueNuageVspResourceRequestCmd.class.getName()); - private static final String s_name = "nuagevspresourceresponse"; - - @Inject - protected AccountManager _accountMgr; - @Inject - protected DomainDao _domainDao; - @Inject - protected NuageVspDao _nuageConfigDao; - @Inject - HostDao _hostDao; - @Inject - AgentManager _agentMgr; - - ///////////////////////////////////////////////////// - //////////////// API parameters ///////////////////// - ///////////////////////////////////////////////////// - - @Parameter(name = ApiConstants.NETWORK_OFFERING_ID, type = CommandType.UUID, entityType = NetworkOfferingResponse.class, required = true, description = "the network offering id") - private Long networkOfferingId; - - @Parameter(name = ApiConstants.ZONE_ID, type = CommandType.UUID, entityType = ZoneResponse.class, required = true, description = "the Zone ID for the network") - private Long zoneId; - - @Parameter(name = ApiConstants.PHYSICAL_NETWORK_ID, type = CommandType.UUID, entityType = PhysicalNetworkResponse.class, description = "the ID of the physical network in to which Nuage VSP Controller is added") - private Long physicalNetworkId; - - @Parameter(name = VspConstants.NUAGE_VSP_API_METHOD, type = CommandType.STRING, required = true, description = "the Nuage VSP REST API method type") - private String method; - - @Parameter(name = VspConstants.NUAGE_VSP_API_RESOURCE, type = CommandType.STRING, required = true, description = "the resource in Nuage VSP") - private String resource; - - @Parameter(name = VspConstants.NUAGE_VSP_API_RESOURCE_ID, type = CommandType.STRING, description = "the ID of the resource in Nuage VSP") - private String resourceId; - - @Parameter(name = VspConstants.NUAGE_VSP_API_CHILD_RESOURCE, type = CommandType.STRING, description = "the child resource in Nuage VSP") - private String childResource; - - @Parameter(name = VspConstants.NUAGE_VSP_API_RESOURCE_FILTER, type = CommandType.STRING, description = "the resource filter in Nuage VSP") - private String resourceFilter; - - ///////////////////////////////////////////////////// - /////////////// API Implementation/////////////////// - ///////////////////////////////////////////////////// - - public Long getNetworkOfferingId() { - return networkOfferingId; - } - - public Long getZoneId() { - Long physicalNetworkId = getPhysicalNetworkId(); - - if (physicalNetworkId == null && zoneId == null) { - throw new InvalidParameterValueException("Zone id is required"); - } - - return zoneId; - } - - public Long getPhysicalNetworkId() { - if (physicalNetworkId != null) { - return physicalNetworkId; - } - - NetworkOffering offering = _entityMgr.findById(NetworkOffering.class, networkOfferingId); - if (offering == null) { - throw new InvalidParameterValueException("Unable to find network offering by id " + networkOfferingId); - } - - if (zoneId == null) { - throw new InvalidParameterValueException("ZoneId is required as physicalNetworkId is null"); - } - return _networkService.findPhysicalNetworkId(zoneId, offering.getTags(), offering.getTrafficType()); - } - - public String getMethod() { - return method; - } - - public void setMethod(String method) { - this.method = method; - } - - public String getResource() { - return resource; - } - - public void setResource(String resource) { - this.resource = resource; - } - - public String getResourceId() { - return resourceId; - } - - public void setResourceId(String resourceId) { - this.resourceId = resourceId; - } - - public String getChildResource() { - return childResource; - } - - public void setChildResource(String childResource) { - this.childResource = childResource; - } - - public String getResourceFilter() { - return resourceFilter; - } - - public void setResourceFilter(String resourceFilter) { - this.resourceFilter = resourceFilter; - } - - @Override - public void execute() throws ResourceUnavailableException, InsufficientCapacityException, ServerApiException, ConcurrentOperationException, ResourceAllocationException { - long accountId = CallContext.current().getCallingAccount().getAccountId(); - Account account = _accountMgr.getAccount(accountId); - - List nuageVspDevices = _nuageConfigDao.listByPhysicalNetwork(getPhysicalNetworkId()); - if (nuageVspDevices != null && (!nuageVspDevices.isEmpty())) { - NuageVspDeviceVO config = nuageVspDevices.iterator().next(); - HostVO nuageVspHost = _hostDao.findById(config.getHostId()); - VspResourceCommand cmd = new VspResourceCommand(method, resource, resourceId, childResource, null, resourceFilter, null, null); - VspResourceAnswer answer = (VspResourceAnswer)_agentMgr.easySend(nuageVspHost.getId(), cmd); - if (answer == null || !answer.getResult()) { - s_logger.error("VspResourceCommand failed"); - if ((null != answer) && (null != answer.getDetails())) { - throw new ServerApiException(ApiErrorCode.INTERNAL_ERROR, answer.getDetails()); - } - } else { - NuageVspResourceResponse response = new NuageVspResourceResponse(); - response.setResourceInfo(StringUtils.isBlank(answer.getResourceInfo()) ? "" : answer.getResourceInfo()); - response.setObjectName("nuagevspresource"); - response.setResponseName(getCommandName()); - this.setResponseObject(response); - } - } else { - String errorMessage = "No Nuage VSP Controller configured on physical network " + getPhysicalNetworkId(); - s_logger.error(errorMessage); - throw new ServerApiException(ApiErrorCode.INTERNAL_ERROR, errorMessage); - } - } - - @Override - public String getCommandName() { - return s_name; - } - - @Override - public long getEntityOwnerId() { - return CallContext.current().getCallingAccount().getId(); - } - -} \ No newline at end of file diff --git a/plugins/network-elements/nuage-vsp/src/com/cloud/api/commands/ListNuageVspDevicesCmd.java b/plugins/network-elements/nuage-vsp/src/com/cloud/api/commands/ListNuageVspDevicesCmd.java index 2d08e12e3dd..d9f80e7856f 100644 --- a/plugins/network-elements/nuage-vsp/src/com/cloud/api/commands/ListNuageVspDevicesCmd.java +++ b/plugins/network-elements/nuage-vsp/src/com/cloud/api/commands/ListNuageVspDevicesCmd.java @@ -28,9 +28,11 @@ import com.cloud.exception.ResourceUnavailableException; import com.cloud.network.NuageVspDeviceVO; import com.cloud.network.manager.NuageVspManager; import com.cloud.utils.exception.CloudRuntimeException; +import org.apache.cloudstack.acl.RoleType; import org.apache.cloudstack.api.APICommand; import org.apache.cloudstack.api.ApiConstants; import org.apache.cloudstack.api.ApiErrorCode; +import org.apache.cloudstack.api.BaseCmd; import org.apache.cloudstack.api.BaseListCmd; import org.apache.cloudstack.api.Parameter; import org.apache.cloudstack.api.ServerApiException; @@ -41,9 +43,13 @@ import javax.inject.Inject; import java.util.ArrayList; import java.util.List; -@APICommand(name = "listNuageVspDevices", responseObject = NuageVspDeviceResponse.class, description = "Lists Nuage VSP devices", since = "4.5") +@APICommand(name = ListNuageVspDevicesCmd.APINAME, description = "Lists Nuage VSP devices", responseObject = NuageVspDeviceResponse.class, + requestHasSensitiveInfo = false, responseHasSensitiveInfo = false, + since = "4.5", + authorized = {RoleType.Admin}) public class ListNuageVspDevicesCmd extends BaseListCmd { - private static final String s_name = "listnuagevspdeviceresponse"; + public static final String APINAME = "listNuageVspDevices"; + @Inject NuageVspManager _nuageVspManager; @@ -99,7 +105,7 @@ public class ListNuageVspDevicesCmd extends BaseListCmd { @Override public String getCommandName() { - return s_name; + return APINAME.toLowerCase() + BaseCmd.RESPONSE_SUFFIX; } } diff --git a/plugins/network-elements/nuage-vsp/src/com/cloud/api/commands/UpdateNuageVspDeviceCmd.java b/plugins/network-elements/nuage-vsp/src/com/cloud/api/commands/UpdateNuageVspDeviceCmd.java index d235b2b595a..4197bd65a7d 100755 --- a/plugins/network-elements/nuage-vsp/src/com/cloud/api/commands/UpdateNuageVspDeviceCmd.java +++ b/plugins/network-elements/nuage-vsp/src/com/cloud/api/commands/UpdateNuageVspDeviceCmd.java @@ -29,6 +29,7 @@ import com.cloud.exception.ResourceUnavailableException; import com.cloud.network.NuageVspDeviceVO; import com.cloud.network.manager.NuageVspManager; import com.cloud.utils.exception.CloudRuntimeException; +import org.apache.cloudstack.acl.RoleType; import org.apache.cloudstack.api.APICommand; import org.apache.cloudstack.api.ApiConstants; import org.apache.cloudstack.api.ApiErrorCode; @@ -38,14 +39,15 @@ import org.apache.cloudstack.api.Parameter; import org.apache.cloudstack.api.ServerApiException; import org.apache.cloudstack.api.response.PhysicalNetworkResponse; import org.apache.cloudstack.context.CallContext; -import org.apache.log4j.Logger; import javax.inject.Inject; -@APICommand(name = "updateNuageVspDevice", responseObject = NuageVspDeviceResponse.class, description = "Update a Nuage VSP device", since = "4.6") +@APICommand(name = UpdateNuageVspDeviceCmd.APINAME, description = "Update a Nuage VSP device", responseObject = NuageVspDeviceResponse.class, + requestHasSensitiveInfo = false, responseHasSensitiveInfo = false, + since = "4.6", + authorized = {RoleType.Admin}) public class UpdateNuageVspDeviceCmd extends BaseAsyncCmd { - private static final Logger s_logger = Logger.getLogger(UpdateNuageVspDeviceCmd.class); - private static final String s_name = "updatenuagevspdeviceresponse"; + public static final String APINAME = "updateNuageVspDevice"; @Inject NuageVspManager _nuageVspManager; @@ -160,7 +162,7 @@ public class UpdateNuageVspDeviceCmd extends BaseAsyncCmd { @Override public String getCommandName() { - return s_name; + return APINAME.toLowerCase() + BaseCmd.RESPONSE_SUFFIX; } @Override diff --git a/plugins/network-elements/nuage-vsp/src/com/cloud/network/element/NuageVspElement.java b/plugins/network-elements/nuage-vsp/src/com/cloud/network/element/NuageVspElement.java index d0d5ad21a68..531c8284ec0 100644 --- a/plugins/network-elements/nuage-vsp/src/com/cloud/network/element/NuageVspElement.java +++ b/plugins/network-elements/nuage-vsp/src/com/cloud/network/element/NuageVspElement.java @@ -74,14 +74,12 @@ 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.NuageVspUtil; import com.cloud.utils.component.AdapterBase; import com.cloud.utils.exception.CloudRuntimeException; import com.cloud.vm.NicProfile; @@ -91,11 +89,18 @@ import com.cloud.vm.VirtualMachineProfile; 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.log4j.Logger; +import javax.annotation.Nullable; import javax.inject.Inject; import javax.naming.ConfigurationException; import java.util.ArrayList; @@ -126,9 +131,9 @@ public class NuageVspElement extends AdapterBase implements ConnectivityProvider @Inject NetworkDao _networkDao; @Inject - protected DomainDao _domainDao; + DomainDao _domainDao; @Inject - protected DataCenterDao _dcDao; + DataCenterDao _dcDao; @Inject IPAddressDao _ipAddressDao; @Inject @@ -157,6 +162,10 @@ public class NuageVspElement extends AdapterBase implements ConnectivityProvider PhysicalNetworkDao _physicalNetworkDao; @Inject NetworkACLItemDao _networkACLItemDao; + @Inject + NuageVspEntityBuilder _nuageVspEntityBuilder; + @Inject + VpcDetailsDao _vpcDetailsDao; @Override public boolean applyIps(Network network, List ipAddress, Set service) throws ResourceUnavailableException { @@ -242,53 +251,21 @@ public class NuageVspElement extends AdapterBase implements ConnectivityProvider return false; } - boolean egressDefaultPolicy = offering.getEgressDefaultPolicy(); - Domain networkDomain = _domainDao.findById(network.getDomainId()); - boolean isFirewallServiceSupported = _networkModel.areServicesSupportedByNetworkOffering(offering.getId(), Service.Firewall); + + VspNetwork vspNetwork = _nuageVspEntityBuilder.buildVspNetwork(network, false); List dnsServers = _nuageVspManager.getDnsDetails(network); - - boolean isL2Network = false, isL3Network = false, isShared = false; - String subnetUuid = network.getUuid(); - if (offering.getGuestType() == Network.GuestType.Shared) { - isShared = true; - subnetUuid = networkDomain.getUuid(); - } else if (_ntwkOfferingSrvcDao.areServicesSupportedByNetworkOffering(offering.getId(), Service.SourceNat) - || _ntwkOfferingSrvcDao.areServicesSupportedByNetworkOffering(offering.getId(), Service.StaticNat) - || _ntwkOfferingSrvcDao.areServicesSupportedByNetworkOffering(offering.getId(), Service.Connectivity)) { - isL3Network = true; - } else { - isL2Network = true; - } - - String preConfiguredDomainTemplateName = NuageVspUtil.getPreConfiguredDomainTemplateName(_configDao, network, offering); - List> ingressFirewallRules = getFirewallRulesToApply(network.getId(), FirewallRule.TrafficType.Ingress, egressDefaultPolicy); - List> egressFirewallRules = getFirewallRulesToApply(network.getId(), FirewallRule.TrafficType.Egress, egressDefaultPolicy); + List ingressFirewallRules = getFirewallRulesToApply(network, FirewallRule.TrafficType.Ingress); + List egressFirewallRules = getFirewallRulesToApply(network, FirewallRule.TrafficType.Egress); List ips = _ipAddressDao.listStaticNatPublicIps(network.getId()); - List acsFipUuid = new ArrayList(); + List floatingIpUuids = new ArrayList(); for (IPAddressVO ip : ips) { - acsFipUuid.add(ip.getUuid()); + floatingIpUuids.add(ip.getUuid()); } HostVO nuageVspHost = getNuageVspHost(network.getPhysicalNetworkId()); - ImplementVspCommand.Builder cmdBuilder = new ImplementVspCommand.Builder() - .networkId(network.getId()) - .networkDomainUuid(networkDomain.getUuid()) - .networkUuid(network.getUuid()) - .networkName(network.getName()) - .vpcOrSubnetUuid(subnetUuid) - .isL2Network(isL2Network) - .isL3Network(isL3Network) - .isVpc(false) - .isShared(isShared) - .domainTemplateName(preConfiguredDomainTemplateName) - .isFirewallServiceSupported(isFirewallServiceSupported) - .dnsServers(dnsServers) - .ingressFirewallRules(ingressFirewallRules) - .egressFirewallRules(egressFirewallRules) - .acsFipUuid(acsFipUuid) - .egressDefaultPolicy(egressDefaultPolicy); - Answer answer = _agentMgr.easySend(nuageVspHost.getId(), cmdBuilder.build()); + ImplementVspCommand cmd = new ImplementVspCommand(vspNetwork, dnsServers, ingressFirewallRules, egressFirewallRules, floatingIpUuids); + 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")); if ((null != answer) && (null != answer.getDetails())) { @@ -302,23 +279,21 @@ public class NuageVspElement extends AdapterBase implements ConnectivityProvider private boolean applyACLRulesForVpc(Network network, NetworkOffering offering) throws ResourceUnavailableException { List rules = _networkACLItemDao.listByACL(network.getNetworkACLId()); if (_networkModel.areServicesSupportedByNetworkOffering(offering.getId(), Network.Service.NetworkACL)) { - applyACLRules(network, rules, true, null, false); + applyACLRules(network, rules, true, false); } return true; } - private List> getFirewallRulesToApply(long networkId, FirewallRule.TrafficType trafficType, final boolean egressDefaultPolicy) { - List firewallRulesToApply = _firewallRulesDao.listByNetworkPurposeTrafficType(networkId, FirewallRule.Purpose.Firewall, trafficType); + private List getFirewallRulesToApply(final Network network, FirewallRule.TrafficType trafficType) { + List firewallRulesToApply = _firewallRulesDao.listByNetworkPurposeTrafficType(network.getId(), FirewallRule.Purpose.Firewall, trafficType); + List vspAclRulesToApply = Lists.newArrayListWithExpectedSize(firewallRulesToApply.size()); + for (FirewallRuleVO rule : firewallRulesToApply) { - // load cidrs if any rule.setSourceCidrList(_firewallRulesCidrsDao.getSourceCidrs(rule.getId())); + VspAclRule vspAclRule = _nuageVspEntityBuilder.buildVspAclRule(rule, network); + vspAclRulesToApply.add(vspAclRule); } - return Lists.transform(firewallRulesToApply, new Function>() { - @Override - public Map apply(FirewallRuleVO firewallRuleVO) { - return getACLRuleDetails(firewallRuleVO, egressDefaultPolicy); - } - }); + return vspAclRulesToApply; } @Override @@ -463,48 +438,19 @@ public class NuageVspElement extends AdapterBase implements ConnectivityProvider @Override public boolean applyStaticNats(Network config, List rules) throws ResourceUnavailableException { - //Check if the network is associated to a VPC - Long vpcId = config.getVpcId(); - String vpcOrSubnetUuid = null; - if (vpcId != null) { - Vpc vpcObj = _vpcDao.findById(vpcId); - vpcOrSubnetUuid = vpcObj.getUuid(); - } else { - vpcOrSubnetUuid = config.getUuid(); - } - Domain networkDomain = _domainDao.findById(config.getDomainId()); - - long networkOfferingId = _ntwkOfferingDao.findById(config.getNetworkOfferingId()).getId(); - boolean isL3Network = isL3Network(networkOfferingId); - - List> sourceNatDetails = new ArrayList>(); + List vspStaticNatDetails = new ArrayList(); for (StaticNat staticNat : rules) { - Map sourceNatDetail = new HashMap(); IPAddressVO sourceNatIp = _ipAddressDao.findById(staticNat.getSourceIpAddressId()); - VlanVO sourceNatVan = _vlanDao.findById(sourceNatIp.getVlanId()); + VlanVO sourceNatVlan = _vlanDao.findById(sourceNatIp.getVlanId()); NicVO nicVO = _nicDao.findByIp4AddressAndNetworkId(staticNat.getDestIpAddress(), staticNat.getNetworkId()); - //Just get all the information about the sourceNat which will be used by NuageVsp - //client to process the request - sourceNatDetail.put("sourceNatIpUuid", sourceNatIp.getUuid()); - sourceNatDetail.put("sourceNatIpAddress", sourceNatIp.getAddress().addr()); - sourceNatDetail.put("nicUuid", nicVO == null ? null : nicVO.getUuid()); - sourceNatDetail.put("nicMacAddress", nicVO == null ? null : nicVO.getMacAddress()); - sourceNatDetail.put("isRevoke", staticNat.isForRevoke()); - sourceNatDetail.put("sourceNatVlanUuid", sourceNatVan.getUuid()); - sourceNatDetail.put("sourceNatVlanGateway", sourceNatVan.getVlanGateway()); - sourceNatDetail.put("sourceNatVlanNetmask", sourceNatVan.getVlanNetmask()); - sourceNatDetails.add(sourceNatDetail); + VspStaticNat vspStaticNat = _nuageVspEntityBuilder.buildVspStaticNat(staticNat.isForRevoke(), sourceNatIp, sourceNatVlan, nicVO); + vspStaticNatDetails.add(vspStaticNat); } + VspNetwork vspNetwork = _nuageVspEntityBuilder.buildVspNetwork(config, false); HostVO nuageVspHost = getNuageVspHost(config.getPhysicalNetworkId()); - ApplyStaticNatVspCommand.Builder cmdBuilder = new ApplyStaticNatVspCommand.Builder() - .networkDomainUuid(networkDomain.getUuid()) - .networkUuid(config.getUuid()) - .vpcOrSubnetUuid(vpcOrSubnetUuid) - .isL3Network(isL3Network) - .isVpc(vpcId != null) - .staticNatDetails(sourceNatDetails); - Answer answer = _agentMgr.easySend(nuageVspHost.getId(), cmdBuilder.build()); + ApplyStaticNatVspCommand cmd = new ApplyStaticNatVspCommand(vspNetwork, vspStaticNatDetails); + Answer answer = _agentMgr.easySend(nuageVspHost.getId(), cmd); if (answer == null || !answer.getResult()) { s_logger.error("ApplyStaticNatNuageVspCommand for network " + config.getUuid() + " failed on Nuage VSD " + nuageVspHost.getDetail("hostname")); if ((null != answer) && (null != answer.getDetails())) { @@ -534,44 +480,27 @@ public class NuageVspElement extends AdapterBase implements ConnectivityProvider } s_logger.info("Applying " + rules.size() + " Firewall Rules for network " + network.getName()); - return applyACLRules(network, rules, false, rules.iterator().next().getTrafficType().equals(FirewallRule.TrafficType.Ingress), false); + return applyACLRules(network, rules, false, false); } - protected boolean applyACLRules(Network network, List rules, boolean isNetworkAcl, Boolean isAcsIngressAcl, boolean networkReset) + protected boolean applyACLRules(final Network network, List rules, boolean isNetworkAcl, boolean networkReset) throws ResourceUnavailableException { - Domain networksDomain = _domainDao.findById(network.getDomainId()); - NetworkOfferingVO networkOfferingVO = _ntwkOfferingDao.findById(network.getNetworkOfferingId()); - Long vpcId = network.getVpcId(); - String vpcOrSubnetUuid = null; - if (vpcId != null) { - Vpc vpcObj = _vpcDao.findById(vpcId); - vpcOrSubnetUuid = vpcObj.getUuid(); - } else { - vpcOrSubnetUuid = network.getUuid(); - } - boolean egressDefaultPolicy = networkOfferingVO.getEgressDefaultPolicy(); - List> aclRules = new ArrayList>(); - for (InternalIdentity acl : rules) { - aclRules.add(getACLRuleDetails(acl, egressDefaultPolicy)); - } + VspNetwork vspNetwork = _nuageVspEntityBuilder.buildVspNetwork(network, false); + List vspAclRules = Lists.transform(rules, new Function() { + @Nullable + @Override + public VspAclRule apply(@Nullable InternalIdentity input) { + if (input instanceof FirewallRule) { + return _nuageVspEntityBuilder.buildVspAclRule((FirewallRule) input, network); + } + return _nuageVspEntityBuilder.buildVspAclRule((NetworkACLItem) input); + } + }); - boolean isL3Network = isL3Network(network.getNetworkOfferingId()); HostVO nuageVspHost = getNuageVspHost(network.getPhysicalNetworkId()); - String preConfiguredDomainTemplateName = NuageVspUtil.getPreConfiguredDomainTemplateName(_configDao, network, networkOfferingVO); - ApplyAclRuleVspCommand.Builder cmdBuilder = new ApplyAclRuleVspCommand.Builder() - .networkAcl(isNetworkAcl) - .networkUuid(network.getUuid()) - .networkDomainUuid(networksDomain.getUuid()) - .vpcOrSubnetUuid(vpcOrSubnetUuid) - .networkName(network.getName()) - .isL2Network(!isL3Network) - .aclRules(aclRules) - .networkId(network.getId()) - .egressDefaultPolicy(networkOfferingVO.getEgressDefaultPolicy()) - .acsIngressAcl(isAcsIngressAcl) - .networkReset(networkReset) - .domainTemplateName(preConfiguredDomainTemplateName); - Answer answer = _agentMgr.easySend(nuageVspHost.getId(), cmdBuilder.build()); + VspAclRule.ACLType vspAclType = isNetworkAcl ? VspAclRule.ACLType.NetworkACL : VspAclRule.ACLType.Firewall; + ApplyAclRuleVspCommand cmd = new ApplyAclRuleVspCommand(vspAclType, vspNetwork, vspAclRules, networkReset); + Answer answer = _agentMgr.easySend(nuageVspHost.getId(), cmd); if (answer == null || !answer.getResult()) { s_logger.error("ApplyAclRuleNuageVspCommand for network " + network.getUuid() + " failed on Nuage VSD " + nuageVspHost.getDetail("hostname")); if ((null != answer) && (null != answer.getDetails())) { @@ -594,7 +523,7 @@ public class NuageVspElement extends AdapterBase implements ConnectivityProvider } if (rules != null) { s_logger.info("Applying " + rules.size() + " Network ACLs for network " + config.getName()); - applyACLRules(config, rules, true, null, rules.isEmpty()); + applyACLRules(config, rules, true, rules.isEmpty()); } return true; } @@ -625,12 +554,17 @@ public class NuageVspElement extends AdapterBase implements ConnectivityProvider if (vpc.getState().equals(Vpc.State.Inactive)) { Domain vpcDomain = _domainDao.findById(vpc.getDomainId()); HostVO nuageVspHost = getNuageVspHost(getPhysicalNetworkId(vpc.getZoneId())); - String preConfiguredDomainTemplateName = _configDao.getValue(NuageVspManager.NuageVspVpcDomainTemplateName.key()); - ShutDownVpcVspCommand.Builder cmdBuilder = new ShutDownVpcVspCommand.Builder() - .domainUuid(vpcDomain.getUuid()) - .vpcUuid(vpc.getUuid()) - .domainTemplateName(preConfiguredDomainTemplateName); - Answer answer = _agentMgr.easySend(nuageVspHost.getId(), cmdBuilder.build()); + + String preConfiguredDomainTemplateName; + VpcDetailVO domainTemplateNameDetail = _vpcDetailsDao.findDetail(vpc.getId(), NuageVspManager.nuageDomainTemplateDetailName); + if (domainTemplateNameDetail != null) { + preConfiguredDomainTemplateName = domainTemplateNameDetail.getValue(); + } else { + preConfiguredDomainTemplateName = _configDao.getValue(NuageVspManager.NuageVspVpcDomainTemplateName.key()); + } + + ShutDownVpcVspCommand cmd = new ShutDownVpcVspCommand(vpcDomain.getUuid(), vpc.getUuid(), preConfiguredDomainTemplateName); + Answer answer = _agentMgr.easySend(nuageVspHost.getId(), cmd); if (answer == null || !answer.getResult()) { s_logger.error("ShutDownVpcVspCommand for VPC " + vpc.getUuid() + " failed on Nuage VSD " + nuageVspHost.getDetail("hostname")); if ((null != answer) && (null != answer.getDetails())) { @@ -707,50 +641,4 @@ public class NuageVspElement extends AdapterBase implements ConnectivityProvider } return nuageVspHost; } - - protected boolean isL3Network(Long offeringId) { - return _ntwkOfferingSrvcDao.areServicesSupportedByNetworkOffering(offeringId, Service.SourceNat) - || _ntwkOfferingSrvcDao.areServicesSupportedByNetworkOffering(offeringId, Service.StaticNat); - } - - private Map getACLRuleDetails(Object aclRule, boolean egressDefaultPolicy) { - Map aclDetails = new HashMap(); - if (aclRule instanceof FirewallRule) { - FirewallRule firewallRule = (FirewallRule)aclRule; - aclDetails.put("sourceCidrList", firewallRule.getSourceCidrList()); - aclDetails.put("uuid", firewallRule.getUuid()); - aclDetails.put("protocol", firewallRule.getProtocol()); - aclDetails.put("startPort", firewallRule.getSourcePortStart()); - aclDetails.put("endPort", firewallRule.getSourcePortEnd()); - aclDetails.put("state", firewallRule.getState().name()); - aclDetails.put("trafficType", firewallRule.getTrafficType().name()); - if (firewallRule.getSourceIpAddressId() != null) { - //add the source IP - IPAddressVO ipaddress = _ipAddressDao.findById(((FirewallRule)aclRule).getSourceIpAddressId()); - aclDetails.put("sourceIpAddress", ipaddress != null ? ipaddress.getVmIp() + "/32" : null); - } - if (firewallRule.getTrafficType().equals(FirewallRule.TrafficType.Egress) && egressDefaultPolicy) { - aclDetails.put("action", "Deny"); - } else { - aclDetails.put("action", "Allow"); - } - aclDetails.put("priority", -1); - aclDetails.put("type", "Firewall"); - } else { - NetworkACLItem networkAcl = (NetworkACLItem)aclRule; - aclDetails.put("sourceCidrList", networkAcl.getSourceCidrList()); - aclDetails.put("uuid", networkAcl.getUuid()); - aclDetails.put("protocol", networkAcl.getProtocol()); - aclDetails.put("startPort", networkAcl.getSourcePortStart()); - aclDetails.put("endPort", networkAcl.getSourcePortEnd()); - aclDetails.put("state", networkAcl.getState().name()); - aclDetails.put("trafficType", networkAcl.getTrafficType().name()); - //Set sourceIP to null as it is not applicable - aclDetails.put("sourceIpAddress", null); - aclDetails.put("action", networkAcl.getAction().name()); - aclDetails.put("priority", networkAcl.getNumber()); - aclDetails.put("type", "NetworkACL"); - } - return aclDetails; - } } \ No newline at end of file diff --git a/plugins/network-elements/nuage-vsp/src/com/cloud/network/guru/NuageVspGuestNetworkGuru.java b/plugins/network-elements/nuage-vsp/src/com/cloud/network/guru/NuageVspGuestNetworkGuru.java index 2037d925edb..a6c17e3517f 100644 --- a/plugins/network-elements/nuage-vsp/src/com/cloud/network/guru/NuageVspGuestNetworkGuru.java +++ b/plugins/network-elements/nuage-vsp/src/com/cloud/network/guru/NuageVspGuestNetworkGuru.java @@ -31,18 +31,14 @@ import com.cloud.dc.DataCenter.NetworkType; import com.cloud.dc.VlanVO; import com.cloud.deploy.DeployDestination; import com.cloud.deploy.DeploymentPlan; -import com.cloud.domain.Domain; -import com.cloud.domain.DomainVO; import com.cloud.domain.dao.DomainDao; import com.cloud.exception.ConcurrentOperationException; import com.cloud.exception.InsufficientAddressCapacityException; import com.cloud.exception.InsufficientVirtualNetworkCapacityException; import com.cloud.host.HostVO; import com.cloud.host.dao.HostDao; -import com.cloud.network.IpAddress; import com.cloud.network.Network; import com.cloud.network.Network.GuestType; -import com.cloud.network.Network.Service; import com.cloud.network.Network.State; import com.cloud.network.NetworkProfile; import com.cloud.network.Networks; @@ -50,11 +46,12 @@ import com.cloud.network.NuageVspDeviceVO; import com.cloud.network.PhysicalNetwork; import com.cloud.network.PhysicalNetwork.IsolationMethod; import com.cloud.network.dao.IPAddressVO; +import com.cloud.network.dao.NetworkDetailVO; +import com.cloud.network.dao.NetworkDetailsDao; import com.cloud.network.dao.NetworkVO; import com.cloud.network.dao.NuageVspDao; import com.cloud.network.dao.PhysicalNetworkVO; import com.cloud.network.manager.NuageVspManager; -import com.cloud.network.vpc.Vpc; import com.cloud.network.vpc.dao.VpcDao; import com.cloud.offering.NetworkOffering; import com.cloud.offerings.dao.NetworkOfferingDao; @@ -62,28 +59,25 @@ 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.NuageVspUtil; +import com.cloud.utils.StringUtils; import com.cloud.utils.db.DB; 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.ReservationContext; -import com.cloud.vm.VirtualMachine; import com.cloud.vm.VirtualMachineProfile; import com.google.common.base.Strings; -import org.apache.commons.lang.StringUtils; +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.net.URI; -import java.util.ArrayList; -import java.util.Collection; -import java.util.HashSet; -import java.util.Iterator; import java.util.List; -import java.util.Set; -import java.util.TreeSet; public class NuageVspGuestNetworkGuru extends GuestNetworkGuru { public static final Logger s_logger = Logger.getLogger(NuageVspGuestNetworkGuru.class); @@ -108,6 +102,12 @@ public class NuageVspGuestNetworkGuru extends GuestNetworkGuru { NuageVspManager _nuageVspManager; @Inject ConfigurationManager _configMgr; + @Inject + NuageVspEntityBuilder _nuageVspEntityBuilder; + @Inject + NetworkDetailsDao _networkDetailsDao; + @Inject + VpcDetailsDao _vpcDetailsDao; public NuageVspGuestNetworkGuru() { super(); @@ -148,33 +148,6 @@ public class NuageVspGuestNetworkGuru extends GuestNetworkGuru { throw new IllegalStateException("Network " + networkId + " is not in expected state Implementing, but is in state " + network.getState()); } - long dcId = dest.getDataCenter().getId(); - //Get physical network id - Long physicalNetworkId = network.getPhysicalNetworkId(); - //Physical network id can be null in Guest Network in Basic zone, so locate the physical network - if (physicalNetworkId == null) { - physicalNetworkId = _networkModel.findPhysicalNetworkId(dcId, offering.getTags(), offering.getTrafficType()); - } - implemented = new NetworkVO(network.getTrafficType(), network.getMode(), network.getBroadcastDomainType(), network.getNetworkOfferingId(), State.Allocated, - network.getDataCenterId(), physicalNetworkId, offering.getRedundantRouter()); - if (network.getGateway() != null) { - implemented.setGateway(network.getGateway()); - } - if (network.getCidr() != null) { - implemented.setCidr(network.getCidr()); - } - List ipAddressRanges = new ArrayList(); - String virtualRouterIp = getVirtualRouterIP(network, ipAddressRanges); - String networkUuid = implemented.getUuid(); - String tenantId = context.getDomain().getName() + "-" + context.getAccount().getAccountId(); - String broadcastUriStr = networkUuid + "/" + virtualRouterIp; - implemented.setBroadcastUri(Networks.BroadcastDomainType.Vsp.toUri(broadcastUriStr)); - implemented.setBroadcastDomainType(Networks.BroadcastDomainType.Vsp); - //Check if the network is associated to a VPC - Long vpcId = network.getVpcId(); - boolean isVpc = (vpcId != null); - //Check owner of the Network - Domain networksDomain = _domainDao.findById(network.getDomainId()); //Get the Account details and find the type AccountVO networksAccount = _accountDao.findById(network.getAccountId()); if (networksAccount.getType() == Account.ACCOUNT_TYPE_PROJECT) { @@ -183,52 +156,37 @@ public class NuageVspGuestNetworkGuru extends GuestNetworkGuru { s_logger.error(errorMessage); throw new InsufficientVirtualNetworkCapacityException(errorMessage, Account.class, network.getAccountId()); } - String vpcName = null; - String vpcUuid = null; - String preConfiguredDomainTemplateName = NuageVspUtil.getPreConfiguredDomainTemplateName(_configDao, network, offering); - boolean isSharedNetwork = offering.getGuestType() == GuestType.Shared; - boolean isL3Network = !isVpc && (isSharedNetwork || isL3Network(network)); - if (isVpc) { - Vpc vpcObj = _vpcDao.findById(vpcId); - vpcName = vpcObj.getName(); - vpcUuid = vpcObj.getUuid(); + long dcId = dest.getDataCenter().getId(); + //Get physical network id + Long physicalNetworkId = network.getPhysicalNetworkId(); + //Physical network id can be null in Guest Network in Basic zone, so locate the physical network + if (physicalNetworkId == null) { + physicalNetworkId = _networkModel.findPhysicalNetworkId(dcId, offering.getTags(), offering.getTrafficType()); } - if (isSharedNetwork) { - List vlans = _vlanDao.listVlansByNetworkId(network.getId()); - for (VlanVO vlan : vlans) { - boolean isIpv4 = StringUtils.isNotBlank(vlan.getIpRange()); - String[] range = isIpv4 ? vlan.getIpRange().split("-") : vlan.getIp6Range().split("-"); - ipAddressRanges.add(range); - } + implemented = new NetworkVO(network.getId(), network, network.getNetworkOfferingId(), network.getGuruName(), network.getDomainId(), network.getAccountId(), + network.getRelated(), network.getName(), network.getDisplayText(), network.getNetworkDomain(), network.getGuestType(), network.getDataCenterId(), + physicalNetworkId, network.getAclType(), network.getSpecifyIpRanges(), network.getVpcId(), offering.getRedundantRouter()); + implemented.setUuid(network.getUuid()); + implemented.setState(State.Allocated); + if (network.getGateway() != null) { + implemented.setGateway(network.getGateway()); } + if (network.getCidr() != null) { + implemented.setCidr(network.getCidr()); + } + + VspNetwork vspNetwork = _nuageVspEntityBuilder.buildVspNetwork(implemented, true); + String tenantId = context.getDomain().getName() + "-" + context.getAccount().getAccountId(); + String broadcastUriStr = implemented.getUuid() + "/" + vspNetwork.getVirtualRouterIp(); + implemented.setBroadcastUri(Networks.BroadcastDomainType.Vsp.toUri(broadcastUriStr)); + implemented.setBroadcastDomainType(Networks.BroadcastDomainType.Vsp); HostVO nuageVspHost = getNuageVspHost(physicalNetworkId); List dnsServers = _nuageVspManager.getDnsDetails(network); - List gatewaySystemIds = _nuageVspManager.getGatewaySystemIds(); - ImplementNetworkVspCommand.Builder cmdBuilder = new ImplementNetworkVspCommand.Builder() - .networkDomainName(networksDomain.getName()) - .networkDomainPath(networksDomain.getPath()) - .networkDomainUuid(networksDomain.getUuid()) - .networkAccountName(networksAccount.getAccountName()) - .networkAccountUuid(networksAccount.getUuid()) - .networkName(network.getName()) - .networkCidr(network.getCidr()) - .networkGateway(network.getGateway()) - .networkAclId(network.getNetworkACLId()) - .dnsServers(dnsServers) - .gatewaySystemIds(gatewaySystemIds) - .networkUuid(network.getUuid()) - .isL3Network(isL3Network) - .isVpc(isVpc) - .isSharedNetwork(isSharedNetwork) - .vpcName(vpcName) - .vpcUuid(vpcUuid) - .defaultEgressPolicy(offering.getEgressDefaultPolicy()) - .ipAddressRange(ipAddressRanges) - .domainTemplateName(preConfiguredDomainTemplateName); - Answer answer = _agentMgr.easySend(nuageVspHost.getId(), cmdBuilder.build()); + ImplementNetworkVspCommand cmd = new ImplementNetworkVspCommand(vspNetwork, dnsServers); + Answer answer = _agentMgr.easySend(nuageVspHost.getId(), cmd); if (answer == null || !answer.getResult()) { s_logger.error("ImplementNetworkVspCommand for network " + network.getUuid() + " failed on Nuage VSD " + nuageVspHost.getDetail("hostname")); @@ -237,7 +195,18 @@ public class NuageVspGuestNetworkGuru extends GuestNetworkGuru { } return null; } - s_logger.info("Implemented OK, network " + networkUuid + " in tenant " + tenantId + " linked to " + implemented.getBroadcastUri()); + + if (StringUtils.isNotBlank(vspNetwork.getDomainTemplateName())) { + if (network.getVpcId() != null) { + VpcDetailVO vpcDetail = new VpcDetailVO(network.getVpcId(), NuageVspManager.nuageDomainTemplateDetailName, vspNetwork.getDomainTemplateName(), false); + _vpcDetailsDao.persist(vpcDetail); + } else { + NetworkDetailVO networkDetail = new NetworkDetailVO(implemented.getId(), NuageVspManager.nuageDomainTemplateDetailName, vspNetwork.getDomainTemplateName(), false); + _networkDetailsDao.persist(networkDetail); + } + } + + s_logger.info("Implemented OK, network " + implemented.getUuid() + " in tenant " + tenantId + " linked to " + implemented.getBroadcastUri()); } finally { _networkDao.releaseFromLockTable(network.getId()); } @@ -262,68 +231,38 @@ public class NuageVspGuestNetworkGuru extends GuestNetworkGuru { if (s_logger.isDebugEnabled()) { s_logger.debug("Handling reserve() call back to with Create a new VM or add an interface to existing VM in network " + network.getName()); } - nic.setBroadcastUri(network.getBroadcastUri()); - nic.setIsolationUri(network.getBroadcastUri()); + DataCenter dc = _dcDao.findById(network.getDataCenterId()); - Account networksAccount = _accountDao.findById(network.getAccountId()); - DomainVO networksDomain = _domainDao.findById(network.getDomainId()); - //Get the Account details and find the type - long networkOwnedBy = network.getAccountId(); - AccountVO neworkAccountDetails = _accountDao.findById(networkOwnedBy); + AccountVO neworkAccountDetails = _accountDao.findById(network.getAccountId()); if (neworkAccountDetails.getType() == Account.ACCOUNT_TYPE_PROJECT) { throw new InsufficientVirtualNetworkCapacityException("CS project support is not yet implemented in NuageVsp", DataCenter.class, dc.getId()); } - //NicProfile does not contain the NIC UUID. We need this information to set it in the VMInterface and VPort - //that we create in VSP - NicVO nicFrmDB = _nicDao.findById(nic.getId()); - NetworkOffering networkOffering = _ntwkOfferingDao.findById(network.getNetworkOfferingId()); - boolean isDomainRouter = vm.getType().equals(VirtualMachine.Type.DomainRouter); - URI broadcastUri = network.getBroadcastUri(); - if (Strings.isNullOrEmpty(broadcastUri.getPath()) || !broadcastUri.getPath().startsWith("/")) { + if (Strings.isNullOrEmpty(network.getBroadcastUri().getPath()) || !network.getBroadcastUri().getPath().startsWith("/")) { throw new IllegalStateException("The broadcast URI path " + network.getBroadcastUri() + " is empty or in an incorrect format."); } - String domainRouterIp = network.getBroadcastUri().getPath().substring(1); - boolean isL3Network = isL3Network(network); - boolean isSharedNetwork = networkOffering.getGuestType() == GuestType.Shared; - Long vpcId = network.getVpcId(); - String vpcUuid = null; - if (vpcId != null) { - Vpc vpcObj = _vpcDao.findById(vpcId); - vpcUuid = vpcObj.getUuid(); - } - HostVO nuageVspHost = getNuageVspHost(network.getPhysicalNetworkId()); + + nic.setBroadcastUri(network.getBroadcastUri()); + nic.setIsolationUri(network.getBroadcastUri()); + + //NicProfile does not contain the NIC UUID. We need this information to set it in the VMInterface and VPort + //that we create in VSP + NicVO nicFromDb = _nicDao.findById(nic.getId()); IPAddressVO staticNatIp = _ipAddressDao.findByVmIdAndNetworkId(network.getId(), vm.getId()); - ReserveVmInterfaceVspCommand.Builder cmdBuilder = new ReserveVmInterfaceVspCommand.Builder() - .nicUuid(nicFrmDB.getUuid()) - .nicMacAddress(nic.getMacAddress()) - .networkUuid(network.getUuid()) - .isL3Network(isL3Network) - .isSharedNetwork(isSharedNetwork) - .vpcUuid(vpcUuid) - .networkDomainUuid(networksDomain.getUuid()) - .networksAccountUuid(networksAccount.getUuid()) - .isDomainRouter(isDomainRouter) - .domainRouterIp(domainRouterIp) - .vmInstanceName(vm.getInstanceName()) - .vmUuid(vm.getUuid()) - .vmUserName(networksDomain.getUuid()) - .vmUserDomainName(networksAccount.getUuid()) - .useStaticIp(true) - .staticIp(nic.getIPv4Address()); + VspNetwork vspNetwork = _nuageVspEntityBuilder.buildVspNetwork(network, false); + VspVm vspVm = _nuageVspEntityBuilder.buildVspVm(vm.getVirtualMachine(), network); + VspNic vspNic = _nuageVspEntityBuilder.buildVspNic(nicFromDb.getUuid(), nic); + VspStaticNat vspStaticNat = null; if (staticNatIp != null) { VlanVO staticNatVlan = _vlanDao.findById(staticNatIp.getVlanId()); - cmdBuilder = cmdBuilder.staticNatIpUuid(staticNatIp.getUuid()) - .staticNatIpAddress(staticNatIp.getAddress().addr()) - .isStaticNatIpAllocated(staticNatIp.getState().equals(IpAddress.State.Allocated)) - .isOneToOneNat(staticNatIp.isOneToOneNat()) - .staticNatVlanUuid(staticNatVlan.getUuid()) - .staticNatVlanGateway(staticNatVlan.getVlanGateway()) - .staticNatVlanNetmask(staticNatVlan.getVlanNetmask()); + vspStaticNat = _nuageVspEntityBuilder.buildVspStaticNat(null, staticNatIp, staticNatVlan, null); } - Answer answer = _agentMgr.easySend(nuageVspHost.getId(), cmdBuilder.build()); + HostVO nuageVspHost = getNuageVspHost(network.getPhysicalNetworkId()); + ReserveVmInterfaceVspCommand cmd = new ReserveVmInterfaceVspCommand(vspNetwork, vspVm, vspNic, vspStaticNat); + Answer answer = _agentMgr.easySend(nuageVspHost.getId(), cmd); + if (answer == null || !answer.getResult()) { s_logger.error("ReserveVmInterfaceNuageVspCommand failed for NIC " + nic.getId() + " attached to VM " + vm.getId() + " in network " + network.getId()); if ((null != answer) && (null != answer.getDetails())) { @@ -332,8 +271,8 @@ public class NuageVspGuestNetworkGuru extends GuestNetworkGuru { throw new InsufficientVirtualNetworkCapacityException("Failed to reserve VM in Nuage VSP.", Network.class, network.getId()); } - if (isDomainRouter) { - nic.setIPv4Address(domainRouterIp); + if (vspVm.getDomainRouter() == Boolean.TRUE) { + nic.setIPv4Address(vspVm.getDomainRouterIp()); } } finally { @@ -378,32 +317,16 @@ public class NuageVspGuestNetworkGuru extends GuestNetworkGuru { s_logger.debug("Handling deallocate() call back, which is called when a VM is destroyed or interface is removed, " + "to delete VM Interface with IP " + nic.getIPv4Address() + " from a VM " + vm.getInstanceName() + " with state " + vm.getVirtualMachine().getState()); } - DomainVO networksDomain = _domainDao.findById(network.getDomainId()); - NicVO nicFrmDd = _nicDao.findById(nic.getId()); - NetworkOffering networkOffering = _ntwkOfferingDao.findById(network.getNetworkOfferingId()); - boolean isL3Network = isL3Network(network); - boolean isSharedNetwork = networkOffering.getGuestType() == GuestType.Shared; - boolean isExpunging = vm.getVirtualMachine().getState() == VirtualMachine.State.Expunging; - Long vpcId = network.getVpcId(); - String vpcUuid = null; - if (vpcId != null) { - Vpc vpcObj = _vpcDao.findById(vpcId); - vpcUuid = vpcObj.getUuid(); - } + + NicVO nicFromDb = _nicDao.findById(nic.getId()); + + VspNetwork vspNetwork = _nuageVspEntityBuilder.buildVspNetwork(network, false); + VspVm vspVm = _nuageVspEntityBuilder.buildVspVm(vm.getVirtualMachine(), network); + VspNic vspNic = _nuageVspEntityBuilder.buildVspNic(nicFromDb.getUuid(), nic); HostVO nuageVspHost = getNuageVspHost(network.getPhysicalNetworkId()); - DeallocateVmVspCommand.Builder cmdBuilder = new DeallocateVmVspCommand.Builder() - .networkUuid(network.getUuid()) - .nicFromDbUuid(nicFrmDd.getUuid()) - .nicMacAddress(nic.getMacAddress()) - .nicIp4Address(nic.getIPv4Address()) - .isL3Network(isL3Network) - .isSharedNetwork(isSharedNetwork) - .vpcUuid(vpcUuid) - .networksDomainUuid(networksDomain.getUuid()) - .vmInstanceName(vm.getInstanceName()) - .vmUuid(vm.getUuid()) - .isExpungingState(isExpunging); - Answer answer = _agentMgr.easySend(nuageVspHost.getId(), cmdBuilder.build()); + + DeallocateVmVspCommand cmd = new DeallocateVmVspCommand(vspNetwork, vspVm, vspNic); + Answer answer = _agentMgr.easySend(nuageVspHost.getId(), cmd); if (answer == null || !answer.getResult()) { s_logger.error("DeallocateVmNuageVspCommand for VM " + vm.getUuid() + " failed on Nuage VSD " + nuageVspHost.getDetail("hostname")); if ((null != answer) && (null != answer.getDetails())) { @@ -451,27 +374,10 @@ public class NuageVspGuestNetworkGuru extends GuestNetworkGuru { if (s_logger.isDebugEnabled()) { s_logger.debug("Handling trash() call back to delete the network " + network.getName() + " with uuid " + network.getUuid() + " from VSP"); } - long domainId = network.getDomainId(); - Domain domain = _domainDao.findById(domainId); - boolean isL3Network = isL3Network(network); - boolean isSharedNetwork = offering.getGuestType() == GuestType.Shared; - Long vpcId = network.getVpcId(); - String vpcUuid = null; - if (vpcId != null) { - Vpc vpcObj = _vpcDao.findById(vpcId); - vpcUuid = vpcObj.getUuid(); - } - - String preConfiguredDomainTemplateName = NuageVspUtil.getPreConfiguredDomainTemplateName(_configDao, network, offering); + VspNetwork vspNetwork = _nuageVspEntityBuilder.buildVspNetwork(network, false); HostVO nuageVspHost = getNuageVspHost(network.getPhysicalNetworkId()); - TrashNetworkVspCommand.Builder cmdBuilder = new TrashNetworkVspCommand.Builder() - .domainUuid(domain.getUuid()) - .networkUuid(network.getUuid()) - .isL3Network(isL3Network) - .isSharedNetwork(isSharedNetwork) - .vpcUuid(vpcUuid) - .domainTemplateName(preConfiguredDomainTemplateName); - Answer answer = _agentMgr.easySend(nuageVspHost.getId(), cmdBuilder.build()); + TrashNetworkVspCommand cmd = new TrashNetworkVspCommand(vspNetwork); + Answer answer = _agentMgr.easySend(nuageVspHost.getId(), cmd); if (answer == null || !answer.getResult()) { s_logger.error("TrashNetworkNuageVspCommand for network " + network.getUuid() + " failed"); if ((null != answer) && (null != answer.getDetails())) { @@ -485,51 +391,6 @@ public class NuageVspGuestNetworkGuru extends GuestNetworkGuru { return super.trash(network, offering); } - private String getVirtualRouterIP(Network network, Collection ipAddressRanges) throws InsufficientVirtualNetworkCapacityException { - String virtualRouterIp; - //Check if the subnet has minimum 5 host in it. - String subnet = NetUtils.getCidrSubNet(network.getCidr()); - String netmask = NetUtils.getCidrNetmask(network.getCidr()); - long cidrSize = NetUtils.getCidrSize(netmask); - - Set allIPsInCidr = NetUtils.getAllIpsFromCidr(subnet, cidrSize, new HashSet()); - if (allIPsInCidr == null || !(allIPsInCidr instanceof TreeSet)) { - throw new IllegalStateException("The IPs in CIDR for subnet " + subnet + " where null or returned in a non-ordered set."); - } - - if (allIPsInCidr.size() > 3) { - //get the second IP and see if it the networks GatewayIP - Iterator ipIterator = allIPsInCidr.iterator(); - long vip = ipIterator.next(); - if (NetUtils.ip2Long(network.getGateway()) == vip) { - vip = ipIterator.next(); - virtualRouterIp = NetUtils.long2Ip(vip); - if (s_logger.isDebugEnabled()) { - s_logger.debug("1st IP is used as gateway IP. Reserving " + virtualRouterIp + " for the Virtual Router IP for Network(" + network.getName() + ")"); - } - } else { - virtualRouterIp = NetUtils.long2Ip(vip); - if (s_logger.isDebugEnabled()) { - s_logger.debug("1st IP is not used as the gateway IP. Reserving" + virtualRouterIp + " for the Virtual Router IP for Network(" + network.getName() + ")"); - } - } - ipAddressRanges.add(new String[] { - NetUtils.long2Ip(ipIterator.next()), - NetUtils.getIpRangeEndIpFromCidr(subnet, cidrSize) - }); - return virtualRouterIp; - } - - throw new InsufficientVirtualNetworkCapacityException("VSP allocates an IP for VirtualRouter." + " So, subnet should have atleast minimum 4 hosts ", Network.class, - network.getId()); - } - - private boolean isL3Network(Network network) { - return _ntwkOfferingSrvcDao.areServicesSupportedByNetworkOffering(network.getNetworkOfferingId(), Service.SourceNat) - || _ntwkOfferingSrvcDao.areServicesSupportedByNetworkOffering(network.getNetworkOfferingId(), Service.StaticNat) - || network.getGuestType() == GuestType.Shared; - } - private HostVO getNuageVspHost(long physicalNetworkId) { HostVO nuageVspHost; List nuageVspDevices = _nuageVspDao.listByPhysicalNetwork(physicalNetworkId); diff --git a/plugins/network-elements/nuage-vsp/src/com/cloud/network/manager/NuageVspManager.java b/plugins/network-elements/nuage-vsp/src/com/cloud/network/manager/NuageVspManager.java index 0aae22ccce2..4861fb240df 100644 --- a/plugins/network-elements/nuage-vsp/src/com/cloud/network/manager/NuageVspManager.java +++ b/plugins/network-elements/nuage-vsp/src/com/cloud/network/manager/NuageVspManager.java @@ -40,6 +40,8 @@ public interface NuageVspManager extends PluggableService { static final String nuageVPCOfferingDisplayText = "Nuage VSP VPC Offering"; + static final String nuageDomainTemplateDetailName = "domainTemplateName"; + static final ConfigKey NuageVspConfigDns = new ConfigKey(Boolean.class, "nuagevsp.configure.dns", "Advanced", "true", "Defines if NuageVsp plugin needs to configure DNS setting for a VM or not. True will configure the DNS and false will not configure the DNS settings", true, Scope.Global, null); diff --git a/plugins/network-elements/nuage-vsp/src/com/cloud/network/manager/NuageVspManagerImpl.java b/plugins/network-elements/nuage-vsp/src/com/cloud/network/manager/NuageVspManagerImpl.java index f38a9c702c6..04b1ccc9f94 100644 --- a/plugins/network-elements/nuage-vsp/src/com/cloud/network/manager/NuageVspManagerImpl.java +++ b/plugins/network-elements/nuage-vsp/src/com/cloud/network/manager/NuageVspManagerImpl.java @@ -27,8 +27,8 @@ import com.cloud.agent.api.Answer; import com.cloud.agent.api.Command; import com.cloud.agent.api.PingNuageVspCommand; import com.cloud.agent.api.StartupCommand; -import com.cloud.agent.api.manager.GetClientDefaultsAnswer; -import com.cloud.agent.api.manager.GetClientDefaultsCommand; +import com.cloud.agent.api.manager.GetApiDefaultsAnswer; +import com.cloud.agent.api.manager.GetApiDefaultsCommand; import com.cloud.agent.api.manager.SupportedApiVersionCommand; import com.cloud.agent.api.sync.SyncDomainAnswer; import com.cloud.agent.api.sync.SyncDomainCommand; @@ -37,7 +37,6 @@ import com.cloud.agent.api.sync.SyncNuageVspCmsIdCommand; import com.cloud.api.ApiDBUtils; import com.cloud.api.commands.AddNuageVspDeviceCmd; import com.cloud.api.commands.DeleteNuageVspDeviceCmd; -import com.cloud.api.commands.IssueNuageVspResourceRequestCmd; import com.cloud.api.commands.ListNuageVspDevicesCmd; import com.cloud.api.commands.UpdateNuageVspDeviceCmd; import com.cloud.api.response.NuageVspDeviceResponse; @@ -70,7 +69,6 @@ import com.cloud.network.dao.PhysicalNetworkServiceProviderDao; import com.cloud.network.dao.PhysicalNetworkServiceProviderVO; import com.cloud.network.dao.PhysicalNetworkVO; import com.cloud.network.resource.NuageVspResource; -import com.cloud.network.sync.NuageVspSync; import com.cloud.network.vpc.VpcManager; import com.cloud.network.vpc.VpcOffering; import com.cloud.network.vpc.VpcOfferingServiceMapVO; @@ -106,7 +104,10 @@ import com.google.common.collect.ImmutableSet; import com.google.common.collect.Lists; import com.google.common.collect.Maps; import com.google.common.collect.Sets; +import com.cloud.util.NuageVspEntityBuilder; import net.nuage.vsp.acs.NuageVspPluginClientLoader; +import net.nuage.vsp.acs.client.api.model.VspApiDefaults; +import net.nuage.vsp.acs.client.api.model.VspDomain; import org.apache.cloudstack.framework.config.ConfigKey; import org.apache.cloudstack.framework.config.Configurable; import org.apache.cloudstack.framework.config.dao.ConfigurationDao; @@ -127,7 +128,6 @@ import java.util.Map; import java.util.Set; import java.util.UUID; import java.util.concurrent.ExecutionException; -import java.util.concurrent.ScheduledExecutorService; import static com.cloud.agent.api.sync.SyncNuageVspCmsIdCommand.SyncType; @@ -135,8 +135,6 @@ public class NuageVspManagerImpl extends ManagerBase implements NuageVspManager, private static final Logger s_logger = Logger.getLogger(NuageVspManagerImpl.class); - private static final int ONE_MINUTE_MULTIPLIER = 60 * 1000; - public static final Map> NUAGE_VSP_VPC_SERVICE_MAP; private static final ConfigKey[] NUAGE_VSP_CONFIG_KEYS = new ConfigKey[] { NuageVspConfigDns, NuageVspDnsExternal, NuageVspConfigGateway, NuageVspSharedNetworkDomainTemplateName, NuageVspVpcDomainTemplateName, NuageVspIsolatedNetworkDomainTemplateName }; @@ -164,8 +162,6 @@ public class NuageVspManagerImpl extends ManagerBase implements NuageVspManager, @Inject NuageVspDao _nuageVspDao; @Inject - NuageVspSync _nuageVspSync; - @Inject DataCenterDao _dataCenterDao; @Inject ConfigurationDao _configDao; @@ -187,8 +183,8 @@ public class NuageVspManagerImpl extends ManagerBase implements NuageVspManager, NetworkOfferingDao _networkOfferingDao; @Inject NetworkOfferingServiceMapDao _networkOfferingServiceMapDao; - - private ScheduledExecutorService scheduler; + @Inject + NuageVspEntityBuilder _nuageVspEntityBuilder; @Inject MessageBus _messageBus; @@ -212,7 +208,7 @@ public class NuageVspManagerImpl extends ManagerBase implements NuageVspManager, @Override public List> getCommands() { return Lists.>newArrayList(AddNuageVspDeviceCmd.class, DeleteNuageVspDeviceCmd.class, ListNuageVspDevicesCmd.class, - IssueNuageVspResourceRequestCmd.class, UpdateNuageVspDeviceCmd.class); + UpdateNuageVspDeviceCmd.class); } @Override @@ -242,21 +238,21 @@ public class NuageVspManagerImpl extends ManagerBase implements NuageVspManager, } try { - NuageVspPluginClientLoader clientLoader = NuageVspPluginClientLoader.getClientLoader(null, null, 1, 1, null); + NuageVspPluginClientLoader clientLoader = NuageVspPluginClientLoader.getClientLoader(null, null, null, null, 1, 1, null); - Map clientDefaults = clientLoader.getNuageVspManagerClient().getClientDefaults(); - String apiVersion = MoreObjects.firstNonNull(cmd.getApiVersion(), (String) clientDefaults.get("CURRENT_API_VERSION")); + VspApiDefaults apiDefaults = clientLoader.getNuageVspManagerClient().getApiDefaults(); + String apiVersion = MoreObjects.firstNonNull(cmd.getApiVersion(), apiDefaults.getVersion()); if (!clientLoader.getNuageVspManagerClient().isSupportedApiVersion(apiVersion)) { throw new CloudRuntimeException("Unsupported API version : " + apiVersion); } int port = cmd.getPort(); if (0 == port) { - port = 8443; + port = 443; } String cmsUserPasswordBase64 = NuageVspUtil.encodePassword(cmd.getPassword()); - String retryCount = String.valueOf(MoreObjects.firstNonNull(cmd.getApiRetryCount(), clientDefaults.get("DEFAULT_API_RETRY_COUNT"))); - String retryInterval = String.valueOf(MoreObjects.firstNonNull(cmd.getApiRetryInterval(), clientDefaults.get("DEFAULT_API_RETRY_INTERVAL"))); + String retryCount = String.valueOf(MoreObjects.firstNonNull(cmd.getApiRetryCount(), apiDefaults.getRetryCount())); + String retryInterval = String.valueOf(MoreObjects.firstNonNull(cmd.getApiRetryInterval(), apiDefaults.getRetryInterval())); NuageVspResource.Configuration resourceConfiguration = new NuageVspResource.Configuration() .name("Nuage VSD - " + cmd.getHostName()) .guid(UUID.randomUUID().toString()) @@ -284,22 +280,33 @@ public class NuageVspManagerImpl extends ManagerBase implements NuageVspManager, _hostDetailsDao.persist(detail); ConfigurationVO cmsIdConfig = _configDao.findByName("nuagevsp.cms.id"); - host = findNuageVspHost(nuageVspDevice.getHostId()); - SyncNuageVspCmsIdCommand syncCmd = new SyncNuageVspCmsIdCommand(SyncType.REGISTER, null); - SyncNuageVspCmsIdAnswer answer = (SyncNuageVspCmsIdAnswer) _agentMgr.easySend(nuageVspDevice.getHostId(), syncCmd); - if (answer != null && answer.getSuccess()) { - registerNewNuageVspDevice(cmsIdConfig, nuageVspDevice.getId() + ":" + answer.getNuageVspCmsId()); - - detail = new DetailVO(host.getId(), "nuagevspcmsid", answer.getNuageVspCmsId()); - _hostDetailsDao.persist(detail); - - resourceConfiguration.nuageVspCmsId(answer.getNuageVspCmsId()); - resource.configure(cmd.getHostName(), Maps.newHashMap(resourceConfiguration.build())); - - auditDomainsOnVsp((HostVO) host, true, false); + NuageVspDeviceVO matchingNuageVspDevice = findMatchingNuageVspDevice(nuageVspDevice); + String cmsId; + if (matchingNuageVspDevice != null) { + cmsId = findNuageVspCmsIdForDevice(matchingNuageVspDevice.getId(), cmsIdConfig); } else { - throw new CloudRuntimeException("Failed to register CMS ID"); + SyncNuageVspCmsIdCommand syncCmd = new SyncNuageVspCmsIdCommand(SyncType.REGISTER, null); + SyncNuageVspCmsIdAnswer answer = (SyncNuageVspCmsIdAnswer) _agentMgr.easySend(nuageVspDevice.getHostId(), syncCmd); + if (answer != null && answer.getSuccess()) { + cmsId = answer.getNuageVspCmsId(); + } else { + throw new CloudRuntimeException("Failed to register CMS ID"); + } } + + host = findNuageVspHost(nuageVspDevice.getHostId()); + registerNewNuageVspDevice(cmsIdConfig, nuageVspDevice.getId() + ":" + cmsId); + + detail = new DetailVO(host.getId(), "nuagevspcmsid", cmsId); + _hostDetailsDao.persist(detail); + + resourceConfiguration.nuageVspCmsId(cmsId); + resource.configure(cmd.getHostName(), Maps.newHashMap(resourceConfiguration.build())); + + if (matchingNuageVspDevice == null) { + auditDomainsOnVsp((HostVO) host, true, false); + } + return nuageVspDevice; } catch (ConfigurationException e) { s_logger.error("Failed to configure Nuage VSD resource " + cmd.getHostName(), e); @@ -372,13 +379,13 @@ public class NuageVspManagerImpl extends ManagerBase implements NuageVspManager, updateRequired = true; } - GetClientDefaultsCommand getClientDefaultsCmd = new GetClientDefaultsCommand(); - GetClientDefaultsAnswer getClientDefaultsAnswer = (GetClientDefaultsAnswer) _agentMgr.easySend(nuageVspHost.getId(), getClientDefaultsCmd); + GetApiDefaultsCommand apiDefaultsCmd = new GetApiDefaultsCommand(); + GetApiDefaultsAnswer apiDefaultsAnswer = (GetApiDefaultsAnswer) _agentMgr.easySend(nuageVspHost.getId(), apiDefaultsCmd); String apiVersion = MoreObjects.firstNonNull(command.getApiVersion(), resourceConfiguration.apiVersion()); SupportedApiVersionCommand supportedApiVersionCmd = new SupportedApiVersionCommand(apiVersion); Answer supportedApiVersionAnswer = _agentMgr.easySend(nuageVspHost.getId(), supportedApiVersionCmd); if (!supportedApiVersionAnswer.getResult()) { - throw new CloudRuntimeException("Incorrect API version: Nuage plugin only supports " + getClientDefaultsAnswer.getCurrentApiVersion()); + throw new CloudRuntimeException("Incorrect API version: Nuage plugin only supports " + apiDefaultsAnswer.getApiDefaults().getVersion()); } String apiRelativePath = "/nuage/api/" + apiVersion; @@ -474,25 +481,31 @@ public class NuageVspManagerImpl extends ManagerBase implements NuageVspManager, } } + NuageVspDeviceVO matchingNuageVspDevice = findMatchingNuageVspDevice(nuageVspDevice); ConfigurationVO cmsIdConfig = _configDao.findByName("nuagevsp.cms.id"); HostVO host = findNuageVspHost(nuageVspDevice.getHostId()); - if (!auditDomainsOnVsp(host, false, true)) { - return false; + String nuageVspCmsId = findNuageVspCmsIdForDevice(nuageVspDevice.getId(), cmsIdConfig); + if (matchingNuageVspDevice == null) { + if (!auditDomainsOnVsp(host, false, true)) { + return false; + } + + SyncNuageVspCmsIdCommand syncCmd = new SyncNuageVspCmsIdCommand(SyncType.UNREGISTER, nuageVspCmsId); + SyncNuageVspCmsIdAnswer answer = (SyncNuageVspCmsIdAnswer) _agentMgr.easySend(nuageVspDevice.getHostId(), syncCmd); + if (answer == null || !answer.getSuccess()) { + return false; + } } - String nuageVspCmsId = findNuageVspCmsIdForDevice(nuageVspDevice.getId(), cmsIdConfig); - SyncNuageVspCmsIdCommand syncCmd = new SyncNuageVspCmsIdCommand(SyncType.UNREGISTER, nuageVspCmsId); - SyncNuageVspCmsIdAnswer answer = (SyncNuageVspCmsIdAnswer) _agentMgr.easySend(nuageVspDevice.getHostId(), syncCmd); - if (answer != null && answer.getSuccess()) { - String currentValue = cmsIdConfig.getValue(); - String newValue = currentValue.replace(nuageVspDevice.getId() + ":" + answer.getNuageVspCmsId(), ""); - if (!Strings.isNullOrEmpty(newValue) && newValue.startsWith(";")) { - newValue = newValue.substring(1); - } - _configDao.update("nuagevsp.cms.id", newValue); - } else { - return false; + String newValue = cmsIdConfig.getValue().replace(nuageVspDevice.getId() + ":" + nuageVspCmsId, ""); + if (newValue.startsWith(";")) { + newValue = newValue.substring(1); } + if (newValue.endsWith(";")) { + newValue = newValue.substring(0, newValue.length() - 1); + } + newValue = newValue.replaceAll(";+", ";"); + _configDao.update("nuagevsp.cms.id", newValue); HostVO nuageHost = _hostDao.findById(nuageVspDevice.getHostId()); Long hostId = nuageHost.getId(); @@ -505,6 +518,22 @@ public class NuageVspManagerImpl extends ManagerBase implements NuageVspManager, return true; } + private NuageVspDeviceVO findMatchingNuageVspDevice(NuageVspDeviceVO nuageVspDevice) { + List otherNuageVspDevices = _nuageVspDao.listAll(); + for (NuageVspDeviceVO otherNuageVspDevice : otherNuageVspDevices) { + if (otherNuageVspDevice.getId() == nuageVspDevice.getId()) continue; + + HostVO nuageVspDeviceHost = findNuageVspHost(nuageVspDevice.getHostId()); + HostVO otherNuageVspDeviceHost = findNuageVspHost(otherNuageVspDevice.getHostId()); + String nuageVspDeviceHostName = nuageVspDeviceHost.getDetail("hostname"); + String otherNuageVspDeviceHostName = otherNuageVspDeviceHost.getDetail("hostname"); + if (otherNuageVspDeviceHostName != null && otherNuageVspDeviceHostName.equals(nuageVspDeviceHostName)) { + return otherNuageVspDevice; + } + } + return null; + } + @Override public List listNuageVspDevices(ListNuageVspDevicesCmd cmd) { Long physicalNetworkId = cmd.getPhysicalNetworkId(); @@ -551,6 +580,8 @@ public class NuageVspManagerImpl extends ManagerBase implements NuageVspManager, } private void auditHost(HostVO host) { + if (host == null) return; + _hostDao.loadDetails(host); boolean validateDomains = true; @@ -585,7 +616,8 @@ public class NuageVspManagerImpl extends ManagerBase implements NuageVspManager, _hostDao.loadDetails(host); List allDomains = _domainDao.listAll(); for (DomainVO domain : allDomains) { - SyncDomainCommand cmd = new SyncDomainCommand(domain.getUuid(), domain.getName(), domain.getPath(), add, remove); + VspDomain vspDomain = _nuageVspEntityBuilder.buildVspDomain(domain); + SyncDomainCommand cmd = new SyncDomainCommand(vspDomain, add, remove); SyncDomainAnswer answer = (SyncDomainAnswer) _agentMgr.easySend(host.getId(), cmd); return answer.getSuccess(); } @@ -683,7 +715,8 @@ public class NuageVspManagerImpl extends ManagerBase implements NuageVspManager, List nuageVspDevices = _nuageVspDao.listAll(); for (NuageVspDeviceVO nuageVspDevice : nuageVspDevices) { HostVO host = findNuageVspHost(nuageVspDevice.getHostId()); - SyncDomainCommand cmd = new SyncDomainCommand(domain.getUuid(), domain.getName(), domain.getPath(), true, false); + VspDomain vspDomain = _nuageVspEntityBuilder.buildVspDomain(domain); + SyncDomainCommand cmd = new SyncDomainCommand(vspDomain, true, false); _agentMgr.easySend(host.getId(), cmd); } } finally { @@ -700,7 +733,8 @@ public class NuageVspManagerImpl extends ManagerBase implements NuageVspManager, List nuageVspDevices = _nuageVspDao.listAll(); for (NuageVspDeviceVO nuageVspDevice : nuageVspDevices) { HostVO host = findNuageVspHost(nuageVspDevice.getHostId()); - SyncDomainCommand cmd = new SyncDomainCommand(domain.getUuid(), domain.getName(), domain.getPath(), false, true); + VspDomain vspDomain = _nuageVspEntityBuilder.buildVspDomain(domain); + SyncDomainCommand cmd = new SyncDomainCommand(vspDomain, false, true); _agentMgr.easySend(host.getId(), cmd); } } diff --git a/plugins/network-elements/nuage-vsp/src/com/cloud/network/resource/NuageVspResource.java b/plugins/network-elements/nuage-vsp/src/com/cloud/network/resource/NuageVspResource.java index 8e142372d68..677fa9fce3e 100644 --- a/plugins/network-elements/nuage-vsp/src/com/cloud/network/resource/NuageVspResource.java +++ b/plugins/network-elements/nuage-vsp/src/com/cloud/network/resource/NuageVspResource.java @@ -30,8 +30,6 @@ import com.cloud.agent.api.ReadyAnswer; import com.cloud.agent.api.ReadyCommand; import com.cloud.agent.api.StartupCommand; import com.cloud.agent.api.StartupVspCommand; -import com.cloud.agent.api.VspResourceAnswer; -import com.cloud.agent.api.VspResourceCommand; import com.cloud.agent.api.element.ApplyAclRuleVspCommand; import com.cloud.agent.api.element.ApplyStaticNatVspCommand; import com.cloud.agent.api.element.ImplementVspCommand; @@ -40,14 +38,13 @@ 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.manager.GetClientDefaultsAnswer; -import com.cloud.agent.api.manager.GetClientDefaultsCommand; +import com.cloud.agent.api.manager.GetApiDefaultsAnswer; +import com.cloud.agent.api.manager.GetApiDefaultsCommand; import com.cloud.agent.api.manager.SupportedApiVersionCommand; import com.cloud.agent.api.sync.SyncDomainAnswer; import com.cloud.agent.api.sync.SyncDomainCommand; import com.cloud.agent.api.sync.SyncNuageVspCmsIdAnswer; import com.cloud.agent.api.sync.SyncNuageVspCmsIdCommand; -import com.cloud.agent.api.sync.SyncVspCommand; import com.cloud.host.Host; import com.cloud.resource.ServerResource; import com.cloud.util.NuageVspUtil; @@ -56,12 +53,11 @@ 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.NuageVspApiClient; -import net.nuage.vsp.acs.client.NuageVspElementClient; -import net.nuage.vsp.acs.client.NuageVspGuruClient; -import net.nuage.vsp.acs.client.NuageVspManagerClient; -import net.nuage.vsp.acs.client.NuageVspSyncClient; -import org.apache.commons.lang3.tuple.Pair; +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; @@ -91,7 +87,8 @@ public class NuageVspResource extends ManagerBase implements ServerResource { private String _name; private String _guid; private String _zoneId; - private String[] _cmsUserInfo; + private String _cmsUserLogin; + private String _cmsUserPassword; private String _hostName; private String _relativePath; private int _numRetries; @@ -102,7 +99,6 @@ public class NuageVspResource extends ManagerBase implements ServerResource { protected NuageVspApiClient _nuageVspApiClient; protected NuageVspGuruClient _nuageVspGuruClient; protected NuageVspElementClient _nuageVspElementClient; - protected NuageVspSyncClient _nuageVspSyncClient; protected NuageVspManagerClient _nuageVspManagerClient; protected boolean _isNuageVspClientLoaded; @@ -190,7 +186,8 @@ public class NuageVspResource extends ManagerBase implements ServerResource { _relativePath = new StringBuffer().append("https://").append(_hostName).append(":").append(port).append(apiRelativePath).toString(); String cmsUserPass = NuageVspUtil.decodePassword(cmsUserPassBase64); - _cmsUserInfo = new String[] {CMS_USER_ENTEPRISE_NAME, cmsUser, cmsUserPass}; + _cmsUserLogin = cmsUser; + _cmsUserPassword = cmsUserPass; _nuageVspCmsId = (String)params.get(NUAGE_VSP_CMS_ID); @@ -199,8 +196,8 @@ public class NuageVspResource extends ManagerBase implements ServerResource { try { login(); } catch (ExecutionException | ConfigurationException e) { - s_logger.error("Failed to login to Nuage VSD on " + name + " as user " + cmsUser, e); - throw new CloudRuntimeException("Failed to login to Nuage VSD on " + name + " as user " + cmsUser, e); + s_logger.error(e.getMessage(), e); + throw new CloudRuntimeException(e.getMessage(), e); } return true; @@ -211,23 +208,14 @@ public class NuageVspResource extends ManagerBase implements ServerResource { _nuageVspApiClient.login(); } - protected void loadNuageClient() { - - try { - NuageVspPluginClientLoader clientLoader = NuageVspPluginClientLoader.getClientLoader(_relativePath, _cmsUserInfo, _numRetries, _retryInterval, _nuageVspCmsId); - _nuageVspApiClient = clientLoader.getNuageVspApiClient(); - _nuageVspSyncClient = clientLoader.getNuageVspSyncClient(); - _nuageVspGuruClient = clientLoader.getNuageVspGuruClient(); - _nuageVspElementClient = clientLoader.getNuageVspElementClient(); - _nuageVspManagerClient = clientLoader.getNuageVspManagerClient(); - _isNuageVspClientLoaded = true; - } catch (ConfigurationException e) { - _isNuageVspClientLoaded = false; - String errorMessage = "Nuage Vsp Plugin client is not yet installed. Please install NuageVsp plugin client to use NuageVsp plugin in Cloudstack. "; - s_logger.error(errorMessage, e); - throw new CloudRuntimeException(errorMessage, e); - } - + protected void loadNuageClient() { + NuageVspPluginClientLoader clientLoader = NuageVspPluginClientLoader.getClientLoader(_relativePath, CMS_USER_ENTEPRISE_NAME, + _cmsUserLogin, _cmsUserPassword, _numRetries, _retryInterval, _nuageVspCmsId); + _nuageVspApiClient = clientLoader.getNuageVspApiClient(); + _nuageVspGuruClient = clientLoader.getNuageVspGuruClient(); + _nuageVspElementClient = clientLoader.getNuageVspElementClient(); + _nuageVspManagerClient = clientLoader.getNuageVspManagerClient(); + _isNuageVspClientLoaded = true; } @Override @@ -265,12 +253,12 @@ public class NuageVspResource extends ManagerBase implements ServerResource { @Override public PingCommand getCurrentStatus(long id) { - if (_relativePath == null || _relativePath.isEmpty()) { + if (Strings.isNullOrEmpty(_relativePath)) { s_logger.error("Refusing to ping Nuage VSD because the resource configuration is missing the relative path information"); _shouldAudit = true; return null; } - if (_cmsUserInfo == null || _cmsUserInfo.length < 2) { + if (Strings.isNullOrEmpty(_cmsUserLogin) || Strings.isNullOrEmpty(_cmsUserPassword)) { s_logger.error("Refusing to ping Nuage VSD because the resource configuration is missing the CMS user information"); _shouldAudit = true; return null; @@ -278,7 +266,7 @@ public class NuageVspResource extends ManagerBase implements ServerResource { try { login(); } catch (ExecutionException | ConfigurationException e) { - s_logger.error("Failed to ping to Nuage VSD on " + _name + " as user " + _cmsUserInfo[1], e); + s_logger.error("Failed to ping to Nuage VSD on " + _name + " as user " + _cmsUserLogin, e); _shouldAudit = true; return null; } @@ -293,8 +281,6 @@ public class NuageVspResource extends ManagerBase implements ServerResource { return executeRequest((ReadyCommand)cmd); } else if (cmd instanceof MaintainCommand) { return executeRequest((MaintainCommand)cmd); - } else if (cmd instanceof VspResourceCommand) { - return executeRequest((VspResourceCommand)cmd); } //Guru commands else if (cmd instanceof ImplementNetworkVspCommand) { @@ -317,16 +303,14 @@ public class NuageVspResource extends ManagerBase implements ServerResource { return executeRequest((ShutDownVpcVspCommand)cmd); } //Sync Commands - else if (cmd instanceof SyncVspCommand) { - return executeRequest((SyncVspCommand)cmd); - } else if (cmd instanceof SyncNuageVspCmsIdCommand) { + else if (cmd instanceof SyncNuageVspCmsIdCommand) { return executeRequest((SyncNuageVspCmsIdCommand)cmd); } else if (cmd instanceof SyncDomainCommand) { return executeRequest((SyncDomainCommand)cmd); } //Other commands - else if (cmd instanceof GetClientDefaultsCommand) { - return executeRequest((GetClientDefaultsCommand)cmd); + else if (cmd instanceof GetApiDefaultsCommand) { + return executeRequest((GetApiDefaultsCommand)cmd); } else if (cmd instanceof SupportedApiVersionCommand) { return executeRequest((SupportedApiVersionCommand)cmd); } @@ -357,29 +341,11 @@ public class NuageVspResource extends ManagerBase implements ServerResource { return new MaintainAnswer(cmd); } - private Answer executeRequest(VspResourceCommand cmd) { - try { - isNuageVspApiLoaded(); - if (cmd.getRequestType().equalsIgnoreCase("GETALL") || cmd.getRequestType().equalsIgnoreCase("GET") || cmd.getRequestType().equalsIgnoreCase("GETRELATED")) { - String resourceInfo = _nuageVspApiClient.executeRestApi(cmd.getRequestType(), cmd.getResource(), cmd.getResourceId(), cmd.getChildResource(), - cmd.getEntityDetails(), cmd.getResourceFilter(), cmd.getProxyUserUuid(), cmd.getProxyUserDomainuuid()); - return new VspResourceAnswer(cmd, resourceInfo, "Executed Issue Resource command"); - } - return new VspResourceAnswer(cmd, false, cmd.getRequestType() + " is not yet supported"); - } catch (ExecutionException | ConfigurationException e) { - s_logger.error("Failure during " + cmd + " on Nuage VSD " + _hostName, e); - return new VspResourceAnswer(cmd, e); - } - } - private Answer executeRequest(ImplementNetworkVspCommand cmd) { try { isNuageVspGuruLoaded(); - _nuageVspGuruClient.implement(cmd.getNetworkDomainName(), cmd.getNetworkDomainPath(), cmd.getNetworkDomainUuid(), cmd.getNetworkAccountName(), - cmd.getNetworkAccountUuid(), cmd.getNetworkName(), cmd.getNetworkCidr(), cmd.getNetworkGateway(), cmd.getNetworkAclId(), cmd.getDnsServers(), - cmd.getGatewaySystemIds(), cmd.isL3Network(), cmd.isVpc(), cmd.isSharedNetwork(), cmd.getNetworkUuid(), cmd.getVpcName(), cmd.getVpcUuid(), - cmd.isDefaultEgressPolicy(), cmd.getIpAddressRange(), cmd.getDomainTemplateName()); - return new Answer(cmd, true, "Created network mapping to " + cmd.getNetworkName() + " on Nuage VSD " + _hostName); + _nuageVspGuruClient.implement(cmd.getNetwork(), cmd.getDnsServers()); + 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); return new Answer(cmd, e); @@ -389,11 +355,8 @@ public class NuageVspResource extends ManagerBase implements ServerResource { private Answer executeRequest(ReserveVmInterfaceVspCommand cmd) { try { isNuageVspGuruLoaded(); - _nuageVspGuruClient.reserve(cmd.getNicUuid(), cmd.getNicMacAddress(), cmd.getNetworkUuid(), cmd.isL3Network(), - cmd.isSharedNetwork(), cmd.getVpcUuid(), cmd.getNetworkDomainUuid(), cmd.getNetworksAccountUuid(), cmd.isDomainRouter(), cmd.getDomainRouterIp(), - cmd.getVmInstanceName(), cmd.getVmUuid(), cmd.useStaticIp(), cmd.getStaticIp(), cmd.getStaticNatIpUuid(), cmd.getStaticNatIpAddress(), cmd.isStaticNatIpAllocated(), - cmd.isOneToOneNat(), cmd.getStaticNatVlanUuid(), cmd.getStaticNatVlanGateway(), cmd.getStaticNatVlanNetmask()); - return new Answer(cmd, true, "Created NIC that maps to nicUuid" + cmd.getNicUuid() + " on Nuage VSD " + _hostName); + _nuageVspGuruClient.reserve(cmd.getNetwork(), cmd.getVm(), cmd.getNic(), cmd.getStaticNat()); + 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); return new Answer(cmd, e); @@ -403,9 +366,9 @@ public class NuageVspResource extends ManagerBase implements ServerResource { private Answer executeRequest(DeallocateVmVspCommand cmd) { try { isNuageVspGuruLoaded(); - _nuageVspGuruClient.deallocate(cmd.getNetworkUuid(), cmd.getNicFromDdUuid(), cmd.getNicMacAddress(), cmd.getNicIp4Address(), cmd.isL3Network(), cmd.isSharedNetwork(), - cmd.getVpcUuid(), cmd.getNetworksDomainUuid(), cmd.getVmInstanceName(), cmd.getVmUuid(), cmd.isExpungingState()); - return new Answer(cmd, true, "Deallocated VM " + cmd.getVmInstanceName() + " on Nuage VSD " + _hostName); + + _nuageVspGuruClient.deallocate(cmd.getNetwork(), cmd.getVm(), cmd.getNic()); + return new Answer(cmd, true, "Deallocated VM " + cmd.getVm().getName() + " on Nuage VSD " + _hostName); } catch (ExecutionException | ConfigurationException e) { s_logger.error("Failure during " + cmd + " on Nuage VSD " + _hostName, e); return new Answer(cmd, e); @@ -415,8 +378,8 @@ public class NuageVspResource extends ManagerBase implements ServerResource { private Answer executeRequest(TrashNetworkVspCommand cmd) { try { isNuageVspGuruLoaded(); - _nuageVspGuruClient.trash(cmd.getDomainUuid(), cmd.getNetworkUuid(), cmd.isL3Network(), cmd.isSharedNetwork(), cmd.getVpcUuid(), cmd.getDomainTemplateName()); - return new Answer(cmd, true, "Deleted network mapping to " + cmd.getNetworkUuid() + " on Nuage VSD " + _hostName); + _nuageVspGuruClient.trash(cmd.getNetwork()); + return new Answer(cmd, true, "Deleted network mapping to " + cmd.getNetwork().getUuid() + " on Nuage VSD " + _hostName); } catch (ExecutionException | ConfigurationException e) { s_logger.error("Failure during " + cmd + " on Nuage VSD " + _hostName, e); return new Answer(cmd, e); @@ -426,9 +389,8 @@ public class NuageVspResource extends ManagerBase implements ServerResource { private Answer executeRequest(ApplyStaticNatVspCommand cmd) { try { isNuageVspElementLoaded(); - _nuageVspElementClient.applyStaticNats(cmd.getNetworkDomainUuid(), cmd.getNetworkUuid(), cmd.getVpcOrSubnetUuid(), cmd.isL3Network(), - cmd.isVpc(), cmd.getStaticNatDetails()); - return new Answer(cmd, true, "Applied Static NAT to network mapping " + cmd.getVpcOrSubnetUuid() + " on Nuage VSD " + _hostName); + _nuageVspElementClient.applyStaticNats(cmd.getNetwork(), cmd.getStaticNatDetails()); + return new Answer(cmd, true, "Applied Static NAT to network mapping " + cmd.getNetwork().getUuid() + " on Nuage VSD " + _hostName); } catch (ExecutionException | ConfigurationException e) { s_logger.error("Failure during " + cmd + " on Nuage VSD " + _hostName, e); return new Answer(cmd, e); @@ -438,10 +400,9 @@ public class NuageVspResource extends ManagerBase implements ServerResource { private Answer executeRequest(ImplementVspCommand cmd) { try { isNuageVspElementLoaded(); - boolean success = _nuageVspElementClient.implement(cmd.getNetworkId(), cmd.getNetworkDomainUuid(), cmd.getNetworkUuid(), cmd.getNetworkName(), cmd.getVpcOrSubnetUuid(), cmd.isL2Network(), - cmd.isL3Network(), cmd.isVpc(), cmd.isShared(), cmd.getDomainTemplateName(), cmd.isFirewallServiceSupported(), cmd.getDnsServers(), cmd.getIngressFirewallRules(), - cmd.getEgressFirewallRules(), cmd.getAcsFipUuid(), cmd.isEgressDefaultPolicy()); - return new Answer(cmd, success, "Implemented network " + cmd.getNetworkUuid() + " on Nuage VSD " + _hostName); + boolean success = _nuageVspElementClient.implement(cmd.getNetwork(), cmd.getDnsServers(), cmd.getIngressFirewallRules(), + cmd.getEgressFirewallRules(), cmd.getFloatingIpUuids()); + return new Answer(cmd, success, "Implemented network " + cmd.getNetwork().getUuid() + " on Nuage VSD " + _hostName); } catch (ExecutionException | ConfigurationException e) { s_logger.error("Failure during " + cmd + " on Nuage VSD " + _hostName, e); return new Answer(cmd, e); @@ -451,9 +412,8 @@ public class NuageVspResource extends ManagerBase implements ServerResource { private Answer executeRequest(ApplyAclRuleVspCommand cmd) { try { isNuageVspElementLoaded(); - _nuageVspElementClient.applyAclRules(cmd.isNetworkAcl(), cmd.getNetworkUuid(), cmd.getNetworkDomainUuid(), cmd.getVpcOrSubnetUuid(), cmd.getNetworkName(), - cmd.isL2Network(), cmd.getAclRules(), cmd.getNetworkId(), cmd.isEgressDefaultPolicy(), cmd.getAcsIngressAcl(), cmd.isNetworkReset(), cmd.getDomainTemplateName()); - return new Answer(cmd, true, "Applied ACL Rule to network mapping " + cmd.getVpcOrSubnetUuid() + " on Nuage VSD " + _hostName); + _nuageVspElementClient.applyAclRules(cmd.getAclType(), cmd.getNetwork(), cmd.getAclRules(), cmd.isNetworkReset()); + return new Answer(cmd, true, "Applied ACL Rule to network mapping " + cmd.getNetwork().getUuid() + " on Nuage VSD " + _hostName); } catch (ExecutionException | ConfigurationException e) { s_logger.error("Failure during " + cmd + " on Nuage VSD " + _hostName, e); return new Answer(cmd, e); @@ -471,17 +431,6 @@ public class NuageVspResource extends ManagerBase implements ServerResource { } } - private Answer executeRequest(SyncVspCommand cmd) { - try { - isNuageVspSyncLoaded(); - _nuageVspSyncClient.syncWithNuageVsp(cmd.getNuageVspEntity()); - return new Answer(cmd, true, "Synced " + cmd.getNuageVspEntity() + " on Nuage VSD " + _hostName); - } catch (ExecutionException | ConfigurationException e) { - s_logger.error("Failure during " + cmd + " on Nuage VSD " + _hostName, e); - return new Answer(cmd, e); - } - } - private Answer executeRequest(SyncNuageVspCmsIdCommand cmd) { try { isNuageVspManagerLoaded(); @@ -504,7 +453,7 @@ public class NuageVspResource extends ManagerBase implements ServerResource { private Answer executeRequest(SyncDomainCommand cmd) { try { isNuageVspManagerLoaded(); - boolean success = _nuageVspManagerClient.syncDomainWithNuageVsp(cmd.getDomainUuid(), cmd.getDomainName(), cmd.getDomainPath(), cmd.isToAdd(), cmd.isToRemove()); + boolean success = _nuageVspManagerClient.syncDomainWithNuageVsp(cmd.getDomain(), cmd.isToAdd(), cmd.isToRemove()); return new SyncDomainAnswer(success); } catch (ExecutionException | ConfigurationException e) { s_logger.error("Failure during " + cmd + " on Nuage VSD " + _hostName, e); @@ -512,14 +461,13 @@ public class NuageVspResource extends ManagerBase implements ServerResource { } } - private Answer executeRequest(GetClientDefaultsCommand cmd) { + private Answer executeRequest(GetApiDefaultsCommand cmd) { try { isNuageVspManagerLoaded(); - Map clientDefaults = _nuageVspManagerClient.getClientDefaults(); - return new GetClientDefaultsAnswer(cmd, clientDefaults); + return new GetApiDefaultsAnswer(cmd, _nuageVspManagerClient.getApiDefaults()); } catch (ExecutionException | ConfigurationException e) { s_logger.error("Failure during " + cmd + " on Nuage VSD " + _hostName, e); - return new GetClientDefaultsAnswer(cmd, e); + return new GetApiDefaultsAnswer(cmd, e); } } @@ -552,12 +500,6 @@ public class NuageVspResource extends ManagerBase implements ServerResource { } } - protected void isNuageVspSyncLoaded() throws ConfigurationException { - if (!_isNuageVspClientLoaded || _nuageVspSyncClient == null) { - throw new ConfigurationException(NUAGE_VSP_PLUGIN_ERROR_MESSAGE); - } - } - protected void isNuageVspManagerLoaded() throws ConfigurationException { if (!_isNuageVspClientLoaded || _nuageVspManagerClient == null) { throw new ConfigurationException(NUAGE_VSP_PLUGIN_ERROR_MESSAGE); diff --git a/plugins/network-elements/nuage-vsp/src/com/cloud/network/sync/NuageVspSync.java b/plugins/network-elements/nuage-vsp/src/com/cloud/network/sync/NuageVspSync.java deleted file mode 100644 index 4e1cc431e7e..00000000000 --- a/plugins/network-elements/nuage-vsp/src/com/cloud/network/sync/NuageVspSync.java +++ /dev/null @@ -1,26 +0,0 @@ -// -// 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.sync; - - -public interface NuageVspSync { - - public void syncWithNuageVsp(String nuageVspEntity); -} diff --git a/plugins/network-elements/nuage-vsp/src/com/cloud/network/sync/NuageVspSyncImpl.java b/plugins/network-elements/nuage-vsp/src/com/cloud/network/sync/NuageVspSyncImpl.java deleted file mode 100644 index 9180c179092..00000000000 --- a/plugins/network-elements/nuage-vsp/src/com/cloud/network/sync/NuageVspSyncImpl.java +++ /dev/null @@ -1,65 +0,0 @@ -// -// 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.sync; - -import com.cloud.agent.AgentManager; -import com.cloud.agent.api.Answer; -import com.cloud.agent.api.sync.SyncVspCommand; -import com.cloud.host.HostVO; -import com.cloud.host.dao.HostDao; -import com.cloud.network.NuageVspDeviceVO; -import com.cloud.network.dao.NuageVspDao; -import org.apache.log4j.Logger; -import org.springframework.stereotype.Component; - -import javax.inject.Inject; -import java.util.List; - -@Component -public class NuageVspSyncImpl implements NuageVspSync { - - private static final Logger s_logger = Logger.getLogger(NuageVspSyncImpl.class); - - @Inject - NuageVspDao _nuageVspDao; - @Inject - HostDao _hostDao; - @Inject - AgentManager _agentMgr; - - public void syncWithNuageVsp(String nuageVspEntity) { - //Get the NuageVspDevice and get the host information. - //This information is used to query VSP and synch the corresponding - //entities - List nuageVspDevices = _nuageVspDao.listAll(); - for (NuageVspDeviceVO nuageVspDevice : nuageVspDevices) { - HostVO nuageVspHost = _hostDao.findById(nuageVspDevice.getHostId()); - _hostDao.loadDetails(nuageVspHost); - SyncVspCommand cmd = new SyncVspCommand(nuageVspEntity); - Answer answer = _agentMgr.easySend(nuageVspHost.getId(), cmd); - if (answer == null || !answer.getResult()) { - s_logger.error("SyncNuageVspCommand for Nuage VSP Host " + nuageVspHost.getUuid() + " failed"); - if ((null != answer) && (null != answer.getDetails())) { - s_logger.error(answer.getDetails()); - } - } - } - } -} diff --git a/plugins/network-elements/nuage-vsp/src/com/cloud/util/NuageVspEntityBuilder.java b/plugins/network-elements/nuage-vsp/src/com/cloud/util/NuageVspEntityBuilder.java new file mode 100644 index 00000000000..135a552e2d5 --- /dev/null +++ b/plugins/network-elements/nuage-vsp/src/com/cloud/util/NuageVspEntityBuilder.java @@ -0,0 +1,368 @@ +// +// 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.util; + +import com.cloud.dc.VlanVO; +import com.cloud.dc.dao.VlanDao; +import com.cloud.domain.Domain; +import com.cloud.domain.DomainVO; +import com.cloud.domain.dao.DomainDao; +import com.cloud.exception.InsufficientVirtualNetworkCapacityException; +import com.cloud.network.Network; +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.rules.FirewallRule; +import com.cloud.network.vpc.NetworkACLItem; +import com.cloud.network.vpc.VpcVO; +import com.cloud.network.vpc.dao.VpcDao; +import com.cloud.offerings.NetworkOfferingVO; +import com.cloud.offerings.dao.NetworkOfferingDao; +import com.cloud.offerings.dao.NetworkOfferingServiceMapDao; +import com.cloud.user.AccountVO; +import com.cloud.user.dao.AccountDao; +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.VirtualMachine; +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.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.apache.commons.lang.StringUtils; +import org.apache.log4j.Logger; + +import javax.inject.Inject; +import java.util.HashSet; +import java.util.Iterator; +import java.util.List; +import java.util.Set; +import java.util.TreeSet; + +public class NuageVspEntityBuilder { + private static final Logger s_logger = Logger.getLogger(NuageVspEntityBuilder.class); + + @Inject + VpcDao _vpcDao; + @Inject + DomainDao _domainDao; + @Inject + AccountDao _accountDao; + @Inject + NetworkOfferingDao _networkOfferingDao; + @Inject + NetworkOfferingServiceMapDao _networkOfferingServiceMapDao; + @Inject + NetworkModel _networkModel; + @Inject + VlanDao _vlanDao; + @Inject + ConfigurationDao _configurationDao; + @Inject + IPAddressDao _ipAddressDao; + @Inject + NetworkDetailsDao _networkDetailsDao; + + public VspDomain buildVspDomain(Domain domain) { + return new VspDomain.Builder() + .uuid(domain.getUuid()) + .name(domain.getName()) + .path(domain.getPath()) + .build(); + } + + public VspNetwork buildVspNetwork(Network network, boolean fillAddressRange) { + VspNetwork.Builder vspNetworkBuilder = new VspNetwork.Builder() + .id(network.getId()) + .uuid(network.getUuid()) + .name(network.getName()) + .cidr(network.getCidr()) + .gateway(network.getGateway()); + + DomainVO domain = _domainDao.findById(network.getDomainId()); + VspDomain vspDomain = buildVspDomain(domain); + vspNetworkBuilder.domain(vspDomain); + + AccountVO account = _accountDao.findById(network.getAccountId()); + vspNetworkBuilder.accountUuid(account.getUuid()).accountName(account.getAccountName()); + + NetworkOfferingVO networkOffering = _networkOfferingDao.findById(network.getNetworkOfferingId()); + vspNetworkBuilder.egressDefaultPolicy(networkOffering.getEgressDefaultPolicy()); + + if (network.getVpcId() != null) { + VpcVO vpc = _vpcDao.findById(network.getVpcId()); + vspNetworkBuilder.vpcUuid(vpc.getUuid()) + .vpcName(vpc.getName()) + .networkType(VspNetwork.NetworkType.Vpc); + } else { + if (networkOffering.getGuestType() == Network.GuestType.Shared) { + vspNetworkBuilder.networkType(VspNetwork.NetworkType.Shared); + } else if (_networkOfferingServiceMapDao.areServicesSupportedByNetworkOffering(network.getNetworkOfferingId(), Network.Service.SourceNat) + || _networkOfferingServiceMapDao.areServicesSupportedByNetworkOffering(network.getNetworkOfferingId(), Network.Service.StaticNat)) { + vspNetworkBuilder.networkType(VspNetwork.NetworkType.L3); + } else { + vspNetworkBuilder.networkType(VspNetwork.NetworkType.L2); + } + } + + boolean firewallServiceSupported = _networkModel.areServicesSupportedByNetworkOffering(network.getNetworkOfferingId(), Network.Service.Firewall); + vspNetworkBuilder.firewallServiceSupported(firewallServiceSupported); + + String preConfiguredDomainTemplateName = NuageVspUtil.getPreConfiguredDomainTemplateName(_configurationDao, _networkDetailsDao, network, networkOffering); + vspNetworkBuilder.domainTemplateName(preConfiguredDomainTemplateName); + + if (fillAddressRange) { + try { + List> ipAddressRanges = getIpAddressRanges(networkOffering, network); + vspNetworkBuilder.ipAddressRanges(ipAddressRanges); + + String virtualRouterIp = getVirtualRouterIP(network, ipAddressRanges); + vspNetworkBuilder.virtualRouterIp(virtualRouterIp); + } catch (InsufficientVirtualNetworkCapacityException ex) { + s_logger.error("There is an insufficient network capacity in network " + network.getId(), ex); + throw new CloudRuntimeException("There is an insufficient network capacity in network " + network.getId(), ex); + } + } + + return vspNetworkBuilder.build(); + } + + private List> getIpAddressRanges(NetworkOfferingVO networkOffering, Network network) { + List> ipAddressRanges = Lists.newArrayList(); + if (networkOffering.getGuestType() == Network.GuestType.Shared) { + List vlans = _vlanDao.listVlansByNetworkId(network.getId()); + ipAddressRanges = Lists.newArrayList(); + for (VlanVO vlan : vlans) { + boolean isIpv4 = StringUtils.isNotBlank(vlan.getIpRange()); + String[] range = isIpv4 ? vlan.getIpRange().split("-") : vlan.getIp6Range().split("-"); + if (range.length == 2) { + ipAddressRanges.add(Pair.of(range[0], range[1])); + } + } + return ipAddressRanges; + } + + String subnet = NetUtils.getCidrSubNet(network.getCidr()); + String netmask = NetUtils.getCidrNetmask(network.getCidr()); + long cidrSize = NetUtils.getCidrSize(netmask); + Set allIPsInCidr = NetUtils.getAllIpsFromCidr(subnet, cidrSize, new HashSet()); + if (allIPsInCidr == null || !(allIPsInCidr instanceof TreeSet)) { + throw new IllegalStateException("The IPs in CIDR for subnet " + subnet + " where null or returned in a non-ordered set."); + } + + Iterator ipIterator = allIPsInCidr.iterator(); + long ip = ipIterator.next(); + if (NetUtils.ip2Long(network.getGateway()) == ip) { + ip = ipIterator.next(); + } + ipAddressRanges.add(Pair.of(NetUtils.long2Ip(ip), NetUtils.getIpRangeEndIpFromCidr(subnet, cidrSize))); + return ipAddressRanges; + } + + private String getVirtualRouterIP(Network network, List> ipAddressRanges) throws InsufficientVirtualNetworkCapacityException { + Pair lowestIpAddressRange = null; + if (ipAddressRanges.size() == 1) { + lowestIpAddressRange = Iterables.getOnlyElement(ipAddressRanges); + } else { + for (Pair ipAddressRange : ipAddressRanges) { + if (lowestIpAddressRange == null || NetUtils.ip2Long(ipAddressRange.getLeft()) < NetUtils.ip2Long(lowestIpAddressRange.getLeft())) { + lowestIpAddressRange = ipAddressRange; + } + } + } + + if (lowestIpAddressRange == null) { + throw new InsufficientVirtualNetworkCapacityException("VSP allocates an IP for VirtualRouter." + " But no ip address ranges are specified", Network.class, + network.getId()); + } else if (NetUtils.ip2Long(lowestIpAddressRange.getRight()) - NetUtils.ip2Long(lowestIpAddressRange.getLeft()) < 2) { + throw new InsufficientVirtualNetworkCapacityException("VSP allocates an IP for VirtualRouter." + " So, subnet should have atleast minimum 3 hosts", Network.class, + network.getId()); + } + + String virtualRouterIp = lowestIpAddressRange.getLeft(); + long lowestIp = NetUtils.ip2Long(lowestIpAddressRange.getLeft()); + lowestIp = lowestIp + 1; + lowestIpAddressRange.setLeft(NetUtils.long2Ip(lowestIp)); + return virtualRouterIp; + } + + public VspVm buildVspVm(VirtualMachine vm, Network network) { + VspVm.Builder vspVmBuilder = new VspVm.Builder() + .uuid(vm.getUuid()) + .name(vm.getInstanceName()); + + switch (vm.getState()) { + case Starting: + vspVmBuilder.state(VspVm.State.Starting); break; + case Running: + vspVmBuilder.state(VspVm.State.Running); break; + case Stopping: + vspVmBuilder.state(VspVm.State.Stopping); break; + case Stopped: + vspVmBuilder.state(VspVm.State.Stopped); break; + case Destroyed: + vspVmBuilder.state(VspVm.State.Destroyed); break; + case Expunging: + vspVmBuilder.state(VspVm.State.Expunging); break; + case Migrating: + vspVmBuilder.state(VspVm.State.Migrating); break; + case Error: + vspVmBuilder.state(VspVm.State.Error); break; + case Shutdowned: + vspVmBuilder.state(VspVm.State.Shutdowned); break; + default: + vspVmBuilder.state(VspVm.State.Unknown); + } + + boolean isDomainRouter = vm.getType().equals(VirtualMachine.Type.DomainRouter); + vspVmBuilder.domainRouter(isDomainRouter); + + if (network.getBroadcastUri() != null) { + String domainRouterIp = network.getBroadcastUri().getPath().substring(1); + vspVmBuilder.domainRouterIp(domainRouterIp); + } + + return vspVmBuilder.build(); + } + + public VspNic buildVspNic(String nicUuid, NicProfile nicProfile) { + VspNic.Builder vspNicBuilder = new VspNic.Builder() + .uuid(nicUuid) + .macAddress(nicProfile.getMacAddress()) + .useStaticIp(true) + .ip(nicProfile.getIPv4Address()); + return vspNicBuilder.build(); + } + + public VspNic buildVspNic(NicVO nic) { + VspNic.Builder vspNicBuilder = new VspNic.Builder() + .uuid(nic.getUuid()) + .macAddress(nic.getMacAddress()) + .useStaticIp(true) + .ip(nic.getIPv4Address()); + return vspNicBuilder.build(); + } + + public VspStaticNat buildVspStaticNat(Boolean forRevoke, IPAddressVO staticNatIp, VlanVO staticNatVlan, NicVO nic) { + VspStaticNat.Builder vspStaticNatBuilder = new VspStaticNat.Builder() + .ipUuid(staticNatIp.getUuid()) + .ipAddress(staticNatIp.getAddress().addr()) + .revoke(forRevoke) + .oneToOneNat(staticNatIp.isOneToOneNat()) + .vlanUuid(staticNatVlan.getUuid()) + .vlanGateway(staticNatVlan.getVlanGateway()) + .vlanNetmask(staticNatVlan.getVlanNetmask()); + + if (nic != null) { + VspNic vspNic = buildVspNic(nic); + vspStaticNatBuilder.nic(vspNic); + } + + return vspStaticNatBuilder.build(); + } + + public VspAclRule buildVspAclRule(FirewallRule firewallRule, Network network) { + VspAclRule.Builder vspAclRuleBuilder = new VspAclRule.Builder() + .uuid(firewallRule.getUuid()) + .protocol(firewallRule.getProtocol()) + .startPort(firewallRule.getSourcePortStart()) + .endPort(firewallRule.getSourcePortEnd()) + .sourceCidrList(firewallRule.getSourceCidrList()) + .priority(-1) + .type(VspAclRule.ACLType.Firewall); + + switch (firewallRule.getState()) { + case Active: + vspAclRuleBuilder.state(VspAclRule.ACLState.Active); break; + case Add: + vspAclRuleBuilder.state(VspAclRule.ACLState.Add); break; + case Revoke: + vspAclRuleBuilder.state(VspAclRule.ACLState.Revoke); + } + + switch (firewallRule.getTrafficType()) { + case Ingress: + vspAclRuleBuilder.trafficType(VspAclRule.ACLTrafficType.Ingress); break; + case Egress: + vspAclRuleBuilder.trafficType(VspAclRule.ACLTrafficType.Egress); + } + + NetworkOfferingVO networkOffering = _networkOfferingDao.findById(network.getNetworkOfferingId()); + if (firewallRule.getTrafficType() == FirewallRule.TrafficType.Egress && networkOffering.getEgressDefaultPolicy()) { + vspAclRuleBuilder.action(VspAclRule.ACLAction.Deny); + } else { + vspAclRuleBuilder.action(VspAclRule.ACLAction.Allow); + } + + if (firewallRule.getSourceIpAddressId() != null) { + IPAddressVO ipAddress = _ipAddressDao.findById(firewallRule.getSourceIpAddressId()); + if (ipAddress != null) { + vspAclRuleBuilder.sourceIpAddress(ipAddress.getVmIp() + "/32"); + } + } + + return vspAclRuleBuilder.build(); + } + + public VspAclRule buildVspAclRule(NetworkACLItem networkAcl) { + VspAclRule.Builder vspAclRuleBuilder = new VspAclRule.Builder() + .uuid(networkAcl.getUuid()) + .protocol(networkAcl.getProtocol()) + .startPort(networkAcl.getSourcePortStart()) + .endPort(networkAcl.getSourcePortEnd()) + .sourceIpAddress(null) + .sourceCidrList(networkAcl.getSourceCidrList()) + .priority(networkAcl.getNumber()) + .type(VspAclRule.ACLType.NetworkACL); + + switch (networkAcl.getState()) { + case Active: + vspAclRuleBuilder.state(VspAclRule.ACLState.Active); break; + case Add: + vspAclRuleBuilder.state(VspAclRule.ACLState.Add); break; + case Revoke: + vspAclRuleBuilder.state(VspAclRule.ACLState.Revoke); + } + + switch (networkAcl.getTrafficType()) { + case Ingress: + vspAclRuleBuilder.trafficType(VspAclRule.ACLTrafficType.Ingress); break; + case Egress: + vspAclRuleBuilder.trafficType(VspAclRule.ACLTrafficType.Egress); + } + + switch (networkAcl.getAction()) { + case Allow: + vspAclRuleBuilder.action(VspAclRule.ACLAction.Allow); break; + case Deny: + vspAclRuleBuilder.action(VspAclRule.ACLAction.Deny); + } + + return vspAclRuleBuilder.build(); + } +} diff --git a/plugins/network-elements/nuage-vsp/src/com/cloud/util/NuageVspUtil.java b/plugins/network-elements/nuage-vsp/src/com/cloud/util/NuageVspUtil.java index 23002892cec..fedf048db39 100644 --- a/plugins/network-elements/nuage-vsp/src/com/cloud/util/NuageVspUtil.java +++ b/plugins/network-elements/nuage-vsp/src/com/cloud/util/NuageVspUtil.java @@ -20,6 +20,8 @@ package com.cloud.util; import com.cloud.network.Network; +import com.cloud.network.dao.NetworkDetailVO; +import com.cloud.network.dao.NetworkDetailsDao; import com.cloud.network.manager.NuageVspManager; import com.cloud.offering.NetworkOffering; import com.cloud.utils.StringUtils; @@ -28,7 +30,12 @@ import org.apache.commons.codec.binary.Base64; public class NuageVspUtil { - public static String getPreConfiguredDomainTemplateName(ConfigurationDao configDao, Network network, NetworkOffering networkOffering) { + public static String getPreConfiguredDomainTemplateName(ConfigurationDao configDao, NetworkDetailsDao networkDetailsDao, Network network, NetworkOffering networkOffering) { + NetworkDetailVO domainTemplateNetworkDetail = networkDetailsDao.findDetail(network.getId(), NuageVspManager.nuageDomainTemplateDetailName); + if (domainTemplateNetworkDetail != null) { + return domainTemplateNetworkDetail.getValue(); + } + String configKey; if (network.getVpcId() != null) { configKey = NuageVspManager.NuageVspVpcDomainTemplateName.key(); diff --git a/plugins/network-elements/nuage-vsp/src/net/nuage/vsp/acs/NuageVspPluginClientLoader.java b/plugins/network-elements/nuage-vsp/src/net/nuage/vsp/acs/NuageVspPluginClientLoader.java index 57935b9f057..72ce2909e21 100644 --- a/plugins/network-elements/nuage-vsp/src/net/nuage/vsp/acs/NuageVspPluginClientLoader.java +++ b/plugins/network-elements/nuage-vsp/src/net/nuage/vsp/acs/NuageVspPluginClientLoader.java @@ -19,82 +19,53 @@ package net.nuage.vsp.acs; -import net.nuage.vsp.acs.client.NuageVspApiClient; -import net.nuage.vsp.acs.client.NuageVspElementClient; -import net.nuage.vsp.acs.client.NuageVspGuruClient; -import net.nuage.vsp.acs.client.NuageVspManagerClient; -import net.nuage.vsp.acs.client.NuageVspSyncClient; +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.api.impl.NuageVspApiClientImpl; +import net.nuage.vsp.acs.client.api.impl.NuageVspElementClientImpl; +import net.nuage.vsp.acs.client.api.impl.NuageVspGuruClientImpl; +import net.nuage.vsp.acs.client.api.impl.NuageVspManagerClientImpl; +import net.nuage.vsp.acs.client.api.model.VspHost; import org.apache.log4j.Logger; -import javax.naming.ConfigurationException; -import java.net.MalformedURLException; -import java.net.URL; -import java.net.URLClassLoader; public class NuageVspPluginClientLoader { - private ClassLoader _loader = null; private static final Logger s_logger = Logger.getLogger(NuageVspPluginClientLoader.class); private NuageVspApiClient _nuageVspApiClient; private NuageVspElementClient _nuageVspElementClient; private NuageVspGuruClient _nuageVspGuruClient; private NuageVspManagerClient _nuageVspManagerClient; - private NuageVspSyncClient _nuageVspSyncClient; - private static final String NUAGE_PLUGIN_CLIENT_JAR_FILE = "/usr/share/nuagevsp/lib/nuage-vsp-acs-client.jar"; - private static final String NUAGE_VSP_API_CLIENT_IMPL = "net.nuage.vsp.acs.client.impl.NuageVspApiClientImpl"; - private static final String NUAGE_VSP_SYNC_CLIENT_IMPL = "net.nuage.vsp.acs.client.impl.NuageVspSyncClientImpl"; - private static final String NUAGE_VSP_ELEMENT_CLIENT_IMPL = "net.nuage.vsp.acs.client.impl.NuageVspElementClientImpl"; - private static final String NUAGE_VSP_GURU_CLIENT_IMPL = "net.nuage.vsp.acs.client.impl.NuageVspGuruClientImpl"; - private static final String NUAGE_VSP_MANAGER_CLIENT_IMPL = "net.nuage.vsp.acs.client.impl.NuageVspManagerClientImpl"; + private NuageVspPluginClientLoader() { - private NuageVspPluginClientLoader(String nuagePluginClientJarLocation) { - try { - _loader = URLClassLoader.newInstance(new URL[] {new URL("jar:file:" + nuagePluginClientJarLocation + "!/")}, - getClass().getClassLoader()); - } catch (MalformedURLException e) { - throw new IllegalArgumentException(e); - } } - public static NuageVspPluginClientLoader getClientLoader(String relativePath, String[] cmsUserInfo, int numRetries, int retryInterval, - String nuageVspCmsId) throws ConfigurationException { - NuageVspPluginClientLoader nuageVspPluginClientClassloader = new NuageVspPluginClientLoader(NUAGE_PLUGIN_CLIENT_JAR_FILE); - nuageVspPluginClientClassloader.loadClasses(relativePath, cmsUserInfo, numRetries, retryInterval, nuageVspCmsId); + public static NuageVspPluginClientLoader getClientLoader(String relativePath, String cmsUserEnterprise, String cmsUserLogin, + String cmsUserPassword, int numRetries, int retryInterval, String nuageVspCmsId) { + NuageVspPluginClientLoader nuageVspPluginClientClassloader = new NuageVspPluginClientLoader(); + nuageVspPluginClientClassloader.loadClasses(relativePath, cmsUserEnterprise, cmsUserLogin, cmsUserPassword, numRetries, retryInterval, nuageVspCmsId); return nuageVspPluginClientClassloader; } - private void loadClasses(String relativePath, String[] cmsUserInfo, int numRetries, int retryInterval, String nuageVspCmsId) throws ConfigurationException { - try { - Class nuageVspApiClientClass = Class.forName(NUAGE_VSP_API_CLIENT_IMPL, true, _loader); - Class nuageVspSyncClientClass = Class.forName(NUAGE_VSP_SYNC_CLIENT_IMPL, true, _loader); - Class nuageVspGuruClientClass = Class.forName(NUAGE_VSP_GURU_CLIENT_IMPL, true, _loader); - Class nuageVspElementClientClass = Class.forName(NUAGE_VSP_ELEMENT_CLIENT_IMPL, true, _loader); - Class nuageVspManagerClientClass = Class.forName(NUAGE_VSP_MANAGER_CLIENT_IMPL, true, _loader); - - //Instantiate the instances - _nuageVspApiClient = (NuageVspApiClient)nuageVspApiClientClass.newInstance(); - _nuageVspApiClient.setNuageVspHost(relativePath, cmsUserInfo, numRetries, retryInterval, nuageVspCmsId); - _nuageVspSyncClient = (NuageVspSyncClient)nuageVspSyncClientClass.newInstance(); - _nuageVspSyncClient.setNuageVspApiClient(_nuageVspApiClient); - _nuageVspGuruClient = (NuageVspGuruClient)nuageVspGuruClientClass.newInstance(); - _nuageVspGuruClient.setNuageVspApiClient(_nuageVspApiClient); - _nuageVspElementClient = (NuageVspElementClient)nuageVspElementClientClass.newInstance(); - _nuageVspElementClient.setNuageVspApiClient(_nuageVspApiClient); - _nuageVspManagerClient = (NuageVspManagerClient)nuageVspManagerClientClass.newInstance(); - _nuageVspManagerClient.setNuageVspApiClient(_nuageVspApiClient); - } catch (ClassNotFoundException cnfe) { - s_logger.error("Error while loading classes of Nuage VSP client", cnfe); - throw new ConfigurationException("Error while loading classes of Nuage VSP client"); - } catch (InstantiationException ie) { - s_logger.error("Error while initializing classes of Nuage VSP client", ie); - throw new ConfigurationException("Error while initializing classes of Nuage VSP client"); - } catch (IllegalAccessException iae) { - s_logger.error("Error while accessing classes of Nuage VSP client", iae); - throw new ConfigurationException("Error while accessing classes of Nuage VSP client"); - } - + private void loadClasses(String relativePath, String cmsUserEnterprise, String cmsUserLogin, String cmsUserPassword, int numRetries, + int retryInterval, String nuageVspCmsId) { + VspHost vspHost = new VspHost.Builder() + .restRelativePath(relativePath) + .cmsUserEnterprise(cmsUserEnterprise) + .cmsUserLogin(cmsUserLogin) + .cmsUserPassword(cmsUserPassword) + .noofRetry(numRetries) + .retryInterval(retryInterval) + .nuageVspCmsId(nuageVspCmsId) + .build(); + _nuageVspApiClient = new NuageVspApiClientImpl(vspHost); + _nuageVspElementClient = new NuageVspElementClientImpl(_nuageVspApiClient); + _nuageVspGuruClient = new NuageVspGuruClientImpl(_nuageVspApiClient); + _nuageVspManagerClient = new NuageVspManagerClientImpl(_nuageVspApiClient); } public NuageVspApiClient getNuageVspApiClient() { @@ -112,8 +83,4 @@ public class NuageVspPluginClientLoader { public NuageVspManagerClient getNuageVspManagerClient() { return _nuageVspManagerClient; } - - public NuageVspSyncClient getNuageVspSyncClient() { - return _nuageVspSyncClient; - } } diff --git a/plugins/network-elements/nuage-vsp/src/net/nuage/vsp/acs/client/NuageVspApiClient.java b/plugins/network-elements/nuage-vsp/src/net/nuage/vsp/acs/client/NuageVspApiClient.java deleted file mode 100644 index d80daf9eef3..00000000000 --- a/plugins/network-elements/nuage-vsp/src/net/nuage/vsp/acs/client/NuageVspApiClient.java +++ /dev/null @@ -1,32 +0,0 @@ -// -// 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 net.nuage.vsp.acs.client; - -import java.util.concurrent.ExecutionException; - -public interface NuageVspApiClient { - - void login() throws ExecutionException; - - void setNuageVspHost(String restRelativePath, String[] cmsUserInfo, int noofRetry, int retryInterval, String nuageVspCmsId); - - String executeRestApi(String method, String resource, String resourceId, String childResource, Object entityDetails, String resourceFilter, String proxyUserUuid, - String proxyUserDomainuuid) throws ExecutionException; -} diff --git a/plugins/network-elements/nuage-vsp/src/net/nuage/vsp/acs/client/NuageVspElementClient.java b/plugins/network-elements/nuage-vsp/src/net/nuage/vsp/acs/client/NuageVspElementClient.java deleted file mode 100644 index acd4256a500..00000000000 --- a/plugins/network-elements/nuage-vsp/src/net/nuage/vsp/acs/client/NuageVspElementClient.java +++ /dev/null @@ -1,42 +0,0 @@ -// -// 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 net.nuage.vsp.acs.client; - -import java.util.List; -import java.util.Map; -import java.util.concurrent.ExecutionException; - -public interface NuageVspElementClient { - - boolean implement(long networkId, String networkDomainUuid, String networkUuid, String networkName, String vpcOrSubnetUuid, boolean isL2Network, boolean isL3Network, - boolean isVpc, boolean isShared, String domainTemplateName, boolean isFirewallServiceSupported, List dnsServers, List> ingressFirewallRules, - List> egressFirewallRules, List acsFipUuid, boolean egressDefaultPolicy) throws ExecutionException; - - void applyStaticNats(String networkDomainUuid, String networkUuid, String vpcOrSubnetUuid, boolean isL3Network, boolean isVpc, - List> staticNatDetails) throws ExecutionException; - - void applyAclRules(boolean isNetworkAcl, String networkUuid, String networkDomainUuid, String vpcOrSubnetUuid, String networkName, boolean isL2Network, - List> rules, long networkId, boolean egressDefaultPolicy, Boolean isAcsIngressAcl, boolean networkReset, String domainTemplateName) throws ExecutionException; - - void shutdownVpc(String domainUuid, String vpcUuid, String domainTemplateName) throws ExecutionException; - - void setNuageVspApiClient(NuageVspApiClient nuageVspApiClient); - -} diff --git a/plugins/network-elements/nuage-vsp/src/net/nuage/vsp/acs/client/NuageVspGuruClient.java b/plugins/network-elements/nuage-vsp/src/net/nuage/vsp/acs/client/NuageVspGuruClient.java deleted file mode 100644 index 2b3a63a2634..00000000000 --- a/plugins/network-elements/nuage-vsp/src/net/nuage/vsp/acs/client/NuageVspGuruClient.java +++ /dev/null @@ -1,43 +0,0 @@ -// -// 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 net.nuage.vsp.acs.client; - -import java.util.Collection; -import java.util.List; -import java.util.concurrent.ExecutionException; - -public interface NuageVspGuruClient { - - void implement(String networkDomainName, String networkDomainPath, String networkDomainUuid, String networkAccountName, String networkAccountUuid, String networkName, - String networkCidr, String networkGateway, Long networkAclId, List dnsServers, List gatewaySystemIds, boolean isL3Network, boolean isVpc, boolean isSharedNetwork, - String networkUuid, String vpcName, String vpcUuid, boolean defaultEgressPolicy, Collection ipAddressRange, String domainTemplateName) throws ExecutionException; - - void reserve(String nicUuid, String nicMacAddress, String networkUuid, boolean isL3Network, boolean isSharedNetwork, String vpcUuid, String networkDomainUuid, - String networksAccountUuid, boolean isDomainRouter, String domainRouterIp, String vmInstanceName, String vmUuid, boolean useStaticIp, String staticIp, String staticNatIpUuid, - String staticNatIpAddress, boolean isStaticNatIpAllocated, boolean isOneToOneNat, String staticNatVlanUuid, String staticNatVlanGateway, String staticNatVlanNetmask) throws ExecutionException; - - void deallocate(String networkUuid, String nicFrmDdUuid, String nicMacAddress, String nicIp4Address, boolean isL3Network, boolean isSharedNetwork, - String vpcUuid, String networksDomainUuid, String vmInstanceName, String vmUuid, boolean isExpungingState) throws ExecutionException; - - void trash(String domainUuid, String networkUuid, boolean isL3Network, boolean isSharedNetwork, String vpcUuid, String domainTemplateName) throws ExecutionException; - - void setNuageVspApiClient(NuageVspApiClient nuageVspApiClient); - -} diff --git a/plugins/network-elements/nuage-vsp/src/net/nuage/vsp/acs/client/NuageVspManagerClient.java b/plugins/network-elements/nuage-vsp/src/net/nuage/vsp/acs/client/NuageVspManagerClient.java deleted file mode 100644 index f134111bf78..00000000000 --- a/plugins/network-elements/nuage-vsp/src/net/nuage/vsp/acs/client/NuageVspManagerClient.java +++ /dev/null @@ -1,42 +0,0 @@ -// -// 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 net.nuage.vsp.acs.client; - -import org.apache.commons.lang3.tuple.Pair; - -import java.util.Map; -import java.util.concurrent.ExecutionException; - -public interface NuageVspManagerClient { - - Pair auditNuageVspCmsId(String nuageVspCmsId, boolean auditOnly) throws ExecutionException; - - String registerNuageVspCmsId() throws ExecutionException; - - boolean unregisterNuageVspCmsId(String nuageVspCmsId) throws ExecutionException; - - boolean isSupportedApiVersion(String version); - - Map getClientDefaults() throws ExecutionException; - - boolean syncDomainWithNuageVsp(String domainUuid, String domainName, String domainPath, boolean add, boolean remove) throws ExecutionException; - - void setNuageVspApiClient(NuageVspApiClient nuageVspApiClient); -} diff --git a/plugins/network-elements/nuage-vsp/src/net/nuage/vsp/acs/client/NuageVspSyncClient.java b/plugins/network-elements/nuage-vsp/src/net/nuage/vsp/acs/client/NuageVspSyncClient.java deleted file mode 100644 index 951ee5ad7ec..00000000000 --- a/plugins/network-elements/nuage-vsp/src/net/nuage/vsp/acs/client/NuageVspSyncClient.java +++ /dev/null @@ -1,29 +0,0 @@ -// -// 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 net.nuage.vsp.acs.client; - -import java.util.concurrent.ExecutionException; - -public interface NuageVspSyncClient { - - void syncWithNuageVsp(String nuageVspEntity) throws ExecutionException; - - void setNuageVspApiClient(NuageVspApiClient nuageVspApiClient); -} \ No newline at end of file diff --git a/plugins/network-elements/nuage-vsp/test/com/cloud/NuageTest.java b/plugins/network-elements/nuage-vsp/test/com/cloud/NuageTest.java new file mode 100644 index 00000000000..845a8be04f9 --- /dev/null +++ b/plugins/network-elements/nuage-vsp/test/com/cloud/NuageTest.java @@ -0,0 +1,157 @@ +// +// 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; + +import com.cloud.dc.VlanVO; +import com.cloud.domain.Domain; +import com.cloud.network.Network; +import com.cloud.network.NetworkModel; +import com.cloud.network.dao.IPAddressVO; +import com.cloud.network.rules.FirewallRule; +import com.cloud.network.vpc.NetworkACLItem; +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; +import static com.cloud.network.manager.NuageVspManager.NuageVspVpcDomainTemplateName; +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); + + @Before + public void setUp() throws Exception { + // Standard responses + when(_networkModel.isProviderForNetwork(Network.Provider.NuageVsp, NETWORK_ID)).thenReturn(true); + when(_configurationDao.getValue(NuageVspIsolatedNetworkDomainTemplateName.key())).thenReturn("IsolatedDomainTemplate"); + when(_configurationDao.getValue(NuageVspVpcDomainTemplateName.key())).thenReturn("VpcDomainTemplate"); + when(_configurationDao.getValue(NuageVspSharedNetworkDomainTemplateName.key())).thenReturn("SharedDomainTemplate"); + + when(_nuageVspEntityBuilder.buildVspDomain(any(Domain.class))).thenReturn(buildVspDomain()); + when(_nuageVspEntityBuilder.buildVspNetwork(any(Network.class), anyBoolean())).thenReturn(buildVspNetwork()); + when(_nuageVspEntityBuilder.buildVspVm(any(VirtualMachine.class), any(Network.class))).thenReturn(buildVspVm()); + when(_nuageVspEntityBuilder.buildVspNic(anyString(), any(NicProfile.class))).thenReturn(buildVspNic()); + when(_nuageVspEntityBuilder.buildVspNic(any(NicVO.class))).thenReturn(buildVspNic()); + when(_nuageVspEntityBuilder.buildVspStaticNat(anyBoolean(), any(IPAddressVO.class), any(VlanVO.class), any(NicVO.class))).thenReturn(buildVspStaticNat()); + when(_nuageVspEntityBuilder.buildVspAclRule(any(FirewallRule.class), any(Network.class))).thenReturn(buildVspAclRule()); + when(_nuageVspEntityBuilder.buildVspAclRule(any(NetworkACLItem.class))).thenReturn(buildVspAclRule()); + } + + protected VspDomain buildVspDomain() { + return new VspDomain.Builder() + .uuid("domainUuid") + .name("domainName") + .path("domainPath") + .build(); + } + + protected VspNetwork buildVspNetwork() { + return new VspNetwork.Builder() + .id(NETWORK_ID) + .uuid("networkUuid") + .name("networkName") + .domain(buildVspDomain()) + .accountUuid("networkAccountUuid") + .accountName("networkAccountName") + .vpcUuid("vpcUuid") + .vpcName("vpcName") + .networkType(VspNetwork.NetworkType.L3) + .firewallServiceSupported(true) + .egressDefaultPolicy(true) + .domainTemplateName("domainTemplateName") + .cidr("networkCidr") + .gateway("networkGateway") + .virtualRouterIp("virtualRouterIp") + .ipAddressRanges(new ArrayList>()) + .build(); + } + + protected VspVm buildVspVm() { + return new VspVm.Builder() + .state(VspVm.State.Running) + .uuid("vmUuid") + .name("vmName") + .domainRouter(true) + .domainRouterIp("domainRouterIp") + .build(); + } + + protected VspNic buildVspNic() { + return new VspNic.Builder() + .uuid("nicUuid") + .macAddress("macAddress") + .useStaticIp(true) + .ip("ip") + .build(); + } + + protected VspStaticNat buildVspStaticNat() { + return new VspStaticNat.Builder() + .state(VspStaticNat.State.Allocating) + .ipUuid("ipUuid") + .ipAddress("ipAddress") + .nic(buildVspNic()) + .revoke(false) + .oneToOneNat(true) + .vlanUuid("vlanUuid") + .vlanGateway("vlanGateway") + .vlanNetmask("vlanNetmask") + .build(); + } + + protected VspAclRule buildVspAclRule() { + return new VspAclRule.Builder() + .uuid("aclRuleUuid") + .protocol("protcol") + .startPort(1) + .endPort(9) + .state(VspAclRule.ACLState.Add) + .trafficType(VspAclRule.ACLTrafficType.Ingress) + .action(VspAclRule.ACLAction.Allow) + .sourceIpAddress("sourceIpAddress") + .sourceCidrList(new ArrayList()) + .priority(1) + .type(VspAclRule.ACLType.NetworkACL) + .build(); + } + +} diff --git a/plugins/network-elements/nuage-vsp/test/com/cloud/agent/api/CommandsTest.java b/plugins/network-elements/nuage-vsp/test/com/cloud/agent/api/CommandsTest.java index 817ab7a3bc4..2a0b07ad992 100644 --- a/plugins/network-elements/nuage-vsp/test/com/cloud/agent/api/CommandsTest.java +++ b/plugins/network-elements/nuage-vsp/test/com/cloud/agent/api/CommandsTest.java @@ -30,43 +30,41 @@ import com.cloud.agent.api.guru.TrashNetworkVspCommand; import com.cloud.agent.api.manager.SupportedApiVersionCommand; import com.cloud.agent.api.sync.SyncDomainCommand; import com.cloud.agent.api.sync.SyncNuageVspCmsIdCommand; -import com.cloud.agent.api.sync.SyncVspCommand; import com.google.common.collect.Maps; import com.google.common.testing.EqualsTester; import org.junit.Test; import java.lang.reflect.Constructor; import java.lang.reflect.InvocationTargetException; -import java.lang.reflect.Method; import java.util.Map; public class CommandsTest { @Test public void testCommandEquals() throws IllegalAccessException, InvocationTargetException, InstantiationException { - ApplyAclRuleVspCommand applyAclRuleVspCommand = fillBuilderObject(new ApplyAclRuleVspCommand.Builder()).build(); - ApplyAclRuleVspCommand otherApplyAclRuleVspCommand = fillBuilderObject(new ApplyAclRuleVspCommand.Builder()).build(); + ApplyAclRuleVspCommand applyAclRuleVspCommand = fillObject(ApplyAclRuleVspCommand.class); + ApplyAclRuleVspCommand otherApplyAclRuleVspCommand = fillObject(ApplyAclRuleVspCommand.class); - ApplyStaticNatVspCommand applyStaticNatVspCommand = fillBuilderObject(new ApplyStaticNatVspCommand.Builder()).build(); - ApplyStaticNatVspCommand otherApplyStaticNatVspCommand = fillBuilderObject(new ApplyStaticNatVspCommand.Builder()).build(); + ApplyStaticNatVspCommand applyStaticNatVspCommand = fillObject(ApplyStaticNatVspCommand.class); + ApplyStaticNatVspCommand otherApplyStaticNatVspCommand = fillObject(ApplyStaticNatVspCommand.class); - ImplementVspCommand implementVspCommand = fillBuilderObject(new ImplementVspCommand.Builder()).build(); - ImplementVspCommand otherImplementVspCommand = fillBuilderObject(new ImplementVspCommand.Builder()).build(); + ImplementVspCommand implementVspCommand = fillObject(ImplementVspCommand.class); + ImplementVspCommand otherImplementVspCommand = fillObject(ImplementVspCommand.class); - ShutDownVpcVspCommand shutDownVpcVspCommand = fillBuilderObject(new ShutDownVpcVspCommand.Builder()).build(); - ShutDownVpcVspCommand otherShutDownVpcVspCommand = fillBuilderObject(new ShutDownVpcVspCommand.Builder()).build(); + ShutDownVpcVspCommand shutDownVpcVspCommand = fillObject(ShutDownVpcVspCommand.class); + ShutDownVpcVspCommand otherShutDownVpcVspCommand = fillObject(ShutDownVpcVspCommand.class); - DeallocateVmVspCommand deallocateVmVspCommand = fillBuilderObject(new DeallocateVmVspCommand.Builder()).build(); - DeallocateVmVspCommand otherDeallocateVmVspCommand = fillBuilderObject(new DeallocateVmVspCommand.Builder()).build(); + DeallocateVmVspCommand deallocateVmVspCommand = fillObject(DeallocateVmVspCommand.class); + DeallocateVmVspCommand otherDeallocateVmVspCommand = fillObject(DeallocateVmVspCommand.class); - ImplementNetworkVspCommand implementNetworkVspCommand = fillBuilderObject(new ImplementNetworkVspCommand.Builder()).build(); - ImplementNetworkVspCommand otherImplementNetworkVspCommand = fillBuilderObject(new ImplementNetworkVspCommand.Builder()).build(); + ImplementNetworkVspCommand implementNetworkVspCommand = fillObject(ImplementNetworkVspCommand.class); + ImplementNetworkVspCommand otherImplementNetworkVspCommand = fillObject(ImplementNetworkVspCommand.class); - ReserveVmInterfaceVspCommand reserveVmInterfaceVspCommand = fillBuilderObject(new ReserveVmInterfaceVspCommand.Builder()).build(); - ReserveVmInterfaceVspCommand otherReserveVmInterfaceVspCommand = fillBuilderObject(new ReserveVmInterfaceVspCommand.Builder()).build(); + ReserveVmInterfaceVspCommand reserveVmInterfaceVspCommand = fillObject(ReserveVmInterfaceVspCommand.class); + ReserveVmInterfaceVspCommand otherReserveVmInterfaceVspCommand = fillObject(ReserveVmInterfaceVspCommand.class); - TrashNetworkVspCommand trashNetworkVspCommand = fillBuilderObject(new TrashNetworkVspCommand.Builder()).build(); - TrashNetworkVspCommand otherTrashNetworkVspCommand = fillBuilderObject(new TrashNetworkVspCommand.Builder()).build(); + TrashNetworkVspCommand trashNetworkVspCommand = fillObject(TrashNetworkVspCommand.class); + TrashNetworkVspCommand otherTrashNetworkVspCommand = fillObject(TrashNetworkVspCommand.class); SupportedApiVersionCommand supportedApiVersionCommand = new SupportedApiVersionCommand("3.2"); SupportedApiVersionCommand otherSupportedApiVersionCommand = new SupportedApiVersionCommand("3.2"); @@ -77,15 +75,9 @@ public class CommandsTest { SyncNuageVspCmsIdCommand syncNuageVspCmsIdCommand = fillObject(SyncNuageVspCmsIdCommand.class); SyncNuageVspCmsIdCommand otherSyncNuageVspCmsIdCommand = fillObject(SyncNuageVspCmsIdCommand.class); - SyncVspCommand syncVspCommand = fillObject(SyncVspCommand.class); - SyncVspCommand otherSyncVspCommand = fillObject(SyncVspCommand.class); - PingNuageVspCommand pingNuageVspCommand = fillObject(PingNuageVspCommand.class); PingNuageVspCommand otherPingNuageVspCommand = fillObject(PingNuageVspCommand.class); - VspResourceCommand vspResourceCommand = fillObject(VspResourceCommand.class); - VspResourceCommand otherVspResourceCommand = fillObject(VspResourceCommand.class); - new EqualsTester() .addEqualityGroup(applyAclRuleVspCommand, otherApplyAclRuleVspCommand) .addEqualityGroup(applyStaticNatVspCommand, otherApplyStaticNatVspCommand) @@ -98,33 +90,10 @@ public class CommandsTest { .addEqualityGroup(supportedApiVersionCommand, otherSupportedApiVersionCommand) .addEqualityGroup(syncDomainCommand, otherSyncDomainCommand) .addEqualityGroup(syncNuageVspCmsIdCommand, otherSyncNuageVspCmsIdCommand) - .addEqualityGroup(syncVspCommand, otherSyncVspCommand) .addEqualityGroup(pingNuageVspCommand, otherPingNuageVspCommand) - .addEqualityGroup(vspResourceCommand, otherVspResourceCommand) .testEquals(); } - private T fillBuilderObject(T obj) throws IllegalAccessException, InvocationTargetException { - Class clazz = obj.getClass(); - for (Method method : clazz.getDeclaredMethods()) { - if (method.getParameterTypes().length == 1) { - Class paramType = method.getParameterTypes()[0]; - if (isNumericType(paramType)) { - if (Long.class.isAssignableFrom(paramType)) { - method.invoke(obj, Long.valueOf(method.getName().length())); - } else { - method.invoke(obj, method.getName().length()); - } - } else if (String.class.isAssignableFrom(paramType)) { - method.invoke(obj, method.getName()); - } else if (Boolean.class.isAssignableFrom(paramType) || boolean.class.isAssignableFrom(paramType)) { - method.invoke(obj, method.getName().length() % 2 == 0); - } - } - } - return obj; - } - private T fillObject(Class clazz) throws IllegalAccessException, InvocationTargetException, InstantiationException { Constructor constructor = clazz.getDeclaredConstructors()[0]; Object[] constructorArgs = new Object[constructor.getParameterTypes().length]; diff --git a/plugins/network-elements/nuage-vsp/test/com/cloud/network/element/NuageVspElementTest.java b/plugins/network-elements/nuage-vsp/test/com/cloud/network/element/NuageVspElementTest.java index 2f5ce7d1939..e9f92b6976f 100644 --- a/plugins/network-elements/nuage-vsp/test/com/cloud/network/element/NuageVspElementTest.java +++ b/plugins/network-elements/nuage-vsp/test/com/cloud/network/element/NuageVspElementTest.java @@ -19,6 +19,7 @@ package com.cloud.network.element; +import com.cloud.NuageTest; import com.cloud.agent.AgentManager; import com.cloud.agent.api.Answer; import com.cloud.agent.api.Command; @@ -35,7 +36,6 @@ import com.cloud.network.Network; import com.cloud.network.Network.GuestType; import com.cloud.network.Network.Provider; import com.cloud.network.Network.Service; -import com.cloud.network.NetworkModel; import com.cloud.network.Networks.BroadcastDomainType; import com.cloud.network.Networks.TrafficType; import com.cloud.network.NuageVspDeviceVO; @@ -59,15 +59,13 @@ import com.cloud.offerings.dao.NetworkOfferingDao; import com.cloud.offerings.dao.NetworkOfferingServiceMapDao; import com.cloud.resource.ResourceManager; import com.cloud.user.Account; +import com.cloud.util.NuageVspEntityBuilder; import com.cloud.vm.ReservationContext; import com.google.common.collect.Lists; -import org.apache.cloudstack.engine.orchestration.service.NetworkOrchestrationService; -import org.apache.cloudstack.framework.config.dao.ConfigurationDao; +import org.apache.cloudstack.resourcedetail.dao.VpcDetailsDao; import org.junit.Before; import org.junit.Test; -import org.mockito.invocation.InvocationOnMock; -import javax.naming.ConfigurationException; import java.net.URI; import java.net.URISyntaxException; import java.util.ArrayList; @@ -76,9 +74,6 @@ import java.util.Collections; import java.util.HashSet; import java.util.Set; -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.junit.Assert.assertFalse; import static org.junit.Assert.assertTrue; import static org.mockito.Matchers.any; @@ -86,55 +81,46 @@ import static org.mockito.Matchers.eq; import static org.mockito.Mockito.mock; import static org.mockito.Mockito.when; -public class NuageVspElementTest { +public class NuageVspElementTest extends NuageTest { - private static final long NETWORK_ID = 42L; - NuageVspElement element = new NuageVspElement(); - NetworkOrchestrationService networkManager = mock(NetworkOrchestrationService.class); - NetworkModel networkModel = mock(NetworkModel.class); - NetworkServiceMapDao ntwkSrvcDao = mock(NetworkServiceMapDao.class); - AgentManager agentManager = mock(AgentManager.class); - HostDao hostDao = mock(HostDao.class); - NuageVspDao nuageVspDao = mock(NuageVspDao.class); - DomainDao domainDao = mock(DomainDao.class); - NetworkOfferingDao ntwkOfferingDao = mock(NetworkOfferingDao.class); - NetworkOfferingServiceMapDao ntwkOfferingSrvcDao = mock(NetworkOfferingServiceMapDao.class); - ConfigurationDao configDao = mock(ConfigurationDao.class); - NuageVspManager nuageVspManager = mock(NuageVspManager.class); - FirewallRulesDao firewallRulesDao = mock(FirewallRulesDao.class); - IPAddressDao ipAddressDao = mock(IPAddressDao.class); - PhysicalNetworkDao physNetDao = mock(PhysicalNetworkDao.class); + private NuageVspElement _nuageVspElement = new NuageVspElement(); - org.mockito.stubbing.Answer genericAnswer = new org.mockito.stubbing.Answer() { - public Object answer(InvocationOnMock invocation) { - return null; - } - }; + 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); @Before - public void setUp() throws ConfigurationException { - element._resourceMgr = mock(ResourceManager.class); - element._ntwkSrvcDao = ntwkSrvcDao; - element._networkModel = networkModel; - element._agentMgr = agentManager; - element._hostDao = hostDao; - element._nuageVspDao = nuageVspDao; - element._ntwkOfferingSrvcDao = ntwkOfferingSrvcDao; - element._domainDao = domainDao; - element._ntwkOfferingDao = ntwkOfferingDao; - element._configDao = configDao; - element._nuageVspManager = nuageVspManager; - element._firewallRulesDao = firewallRulesDao; - element._ipAddressDao = ipAddressDao; - element._physicalNetworkDao = physNetDao; + public void setUp() throws Exception { + super.setUp(); - // Standard responses - when(networkModel.isProviderForNetwork(Provider.NuageVsp, NETWORK_ID)).thenReturn(true); - when(configDao.getValue(NuageVspIsolatedNetworkDomainTemplateName.key())).thenReturn("IsolatedDomainTemplate"); - when(configDao.getValue(NuageVspVpcDomainTemplateName.key())).thenReturn("VpcDomainTemplate"); - when(configDao.getValue(NuageVspSharedNetworkDomainTemplateName.key())).thenReturn("SharedDomainTemplate"); + _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; - element.configure("NuageVspTestElement", Collections. emptyMap()); + _nuageVspElement.configure("NuageVspTestElement", Collections.emptyMap()); } @Test @@ -147,29 +133,29 @@ public class NuageVspElementTest { final NetworkOfferingVO ntwkoffer = mock(NetworkOfferingVO.class); when(ntwkoffer.getId()).thenReturn(NETWORK_ID); when(ntwkoffer.getIsPersistent()).thenReturn(true); - when(ntwkOfferingDao.findById(NETWORK_ID)).thenReturn(ntwkoffer); + when(_networkOfferingDao.findById(NETWORK_ID)).thenReturn(ntwkoffer); - when(ntwkSrvcDao.canProviderSupportServiceInNetwork(NETWORK_ID, Service.Connectivity, Provider.NuageVsp)).thenReturn(true); + when(_networkServiceMapDao.canProviderSupportServiceInNetwork(NETWORK_ID, Service.Connectivity, Provider.NuageVsp)).thenReturn(true); // Golden path - assertTrue(element.canHandle(net, Service.Connectivity)); + assertTrue(_nuageVspElement.canHandle(net, Service.Connectivity)); when(net.getBroadcastDomainType()).thenReturn(BroadcastDomainType.Vlan); // Only broadcastdomaintype Vsp is supported - assertFalse(element.canHandle(net, Service.Connectivity)); + assertFalse(_nuageVspElement.canHandle(net, Service.Connectivity)); when(net.getBroadcastDomainType()).thenReturn(BroadcastDomainType.Vsp); - when(ntwkSrvcDao.canProviderSupportServiceInNetwork(NETWORK_ID, Service.Connectivity, Provider.NuageVsp)).thenReturn(false); + when(_networkServiceMapDao.canProviderSupportServiceInNetwork(NETWORK_ID, Service.Connectivity, Provider.NuageVsp)).thenReturn(false); // No NuageVsp provider in the network - assertFalse(element.canHandle(net, Service.Connectivity)); + assertFalse(_nuageVspElement.canHandle(net, Service.Connectivity)); - when(networkModel.isProviderForNetwork(Provider.NuageVsp, NETWORK_ID)).thenReturn(false); - when(ntwkSrvcDao.canProviderSupportServiceInNetwork(NETWORK_ID, Service.Connectivity, Provider.NuageVsp)).thenReturn(true); + when(_networkModel.isProviderForNetwork(Provider.NuageVsp, NETWORK_ID)).thenReturn(false); + when(_networkServiceMapDao.canProviderSupportServiceInNetwork(NETWORK_ID, Service.Connectivity, Provider.NuageVsp)).thenReturn(true); // NusageVsp provider does not provide Connectivity for this network - assertFalse(element.canHandle(net, Service.Connectivity)); + assertFalse(_nuageVspElement.canHandle(net, Service.Connectivity)); - when(networkModel.isProviderForNetwork(Provider.NuageVsp, NETWORK_ID)).thenReturn(true); + when(_networkModel.isProviderForNetwork(Provider.NuageVsp, NETWORK_ID)).thenReturn(true); // Only service Connectivity is supported - assertFalse(element.canHandle(net, Service.Dhcp)); + assertFalse(_nuageVspElement.canHandle(net, Service.Dhcp)); } @@ -182,8 +168,8 @@ public class NuageVspElementTest { when(network.getBroadcastUri()).thenReturn(new URI("")); when(network.getPhysicalNetworkId()).thenReturn(NETWORK_ID); when(network.getDomainId()).thenReturn(NETWORK_ID); - when(networkModel.isProviderForNetwork(Provider.NuageVsp, NETWORK_ID)).thenReturn(true); - when(ntwkSrvcDao.canProviderSupportServiceInNetwork(NETWORK_ID, Service.Connectivity, Provider.NuageVsp)).thenReturn(true); + when(_networkModel.isProviderForNetwork(Provider.NuageVsp, NETWORK_ID)).thenReturn(true); + when(_networkServiceMapDao.canProviderSupportServiceInNetwork(NETWORK_ID, Service.Connectivity, Provider.NuageVsp)).thenReturn(true); final NetworkOffering offering = mock(NetworkOffering.class); when(offering.getId()).thenReturn(NETWORK_ID); @@ -194,7 +180,7 @@ public class NuageVspElementTest { final DomainVO dom = mock(DomainVO.class); when(dom.getName()).thenReturn("domain"); - when(domainDao.findById(NETWORK_ID)).thenReturn(dom); + when(_domainDao.findById(NETWORK_ID)).thenReturn(dom); final Account acc = mock(Account.class); when(acc.getAccountName()).thenReturn("accountname"); final ReservationContext context = mock(ReservationContext.class); @@ -205,15 +191,15 @@ public class NuageVspElementTest { 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(_nuageVspDao.listByPhysicalNetwork(NETWORK_ID)).thenReturn(Arrays.asList(new NuageVspDeviceVO[]{nuageVspDevice})); + when(_hostDao.findById(NETWORK_ID)).thenReturn(host); - when(firewallRulesDao.listByNetworkPurposeTrafficType(NETWORK_ID, FirewallRule.Purpose.Firewall, FirewallRule.TrafficType.Ingress)).thenReturn(new ArrayList()); - when(firewallRulesDao.listByNetworkPurposeTrafficType(NETWORK_ID, FirewallRule.Purpose.Firewall, FirewallRule.TrafficType.Egress)).thenReturn(new ArrayList()); - when(ipAddressDao.listStaticNatPublicIps(NETWORK_ID)).thenReturn(new ArrayList()); - when(nuageVspManager.getDnsDetails(network)).thenReturn(new ArrayList()); + when(_firewallRulesDao.listByNetworkPurposeTrafficType(NETWORK_ID, FirewallRule.Purpose.Firewall, FirewallRule.TrafficType.Ingress)).thenReturn(new ArrayList()); + when(_firewallRulesDao.listByNetworkPurposeTrafficType(NETWORK_ID, FirewallRule.Purpose.Firewall, FirewallRule.TrafficType.Egress)).thenReturn(new ArrayList()); + when(_ipAddressDao.listStaticNatPublicIps(NETWORK_ID)).thenReturn(new ArrayList()); + when(_nuageVspManager.getDnsDetails(network)).thenReturn(new ArrayList()); - assertTrue(element.implement(network, offering, deployDest, context)); + assertTrue(_nuageVspElement.implement(network, offering, deployDest, context)); } @Test @@ -224,14 +210,14 @@ public class NuageVspElementTest { services.add(Service.SourceNat); services.add(Service.Connectivity); services.add(Service.Firewall); - assertTrue(element.verifyServicesCombination(services)); + assertTrue(_nuageVspElement.verifyServicesCombination(services)); services = new HashSet(); services.add(Service.Dhcp); services.add(Service.StaticNat); services.add(Service.Connectivity); services.add(Service.Firewall); - assertFalse(element.verifyServicesCombination(services)); + assertFalse(_nuageVspElement.verifyServicesCombination(services)); } @Test @@ -244,25 +230,24 @@ public class NuageVspElementTest { when(network.getDomainId()).thenReturn(NETWORK_ID); final DomainVO domVo = mock(DomainVO.class); - when(domainDao.findById(41l)).thenReturn(domVo); + when(_domainDao.findById(41l)).thenReturn(domVo); final NetworkOfferingVO ntwkoffer = mock(NetworkOfferingVO.class); when(ntwkoffer.getId()).thenReturn(NETWORK_ID); - when(ntwkOfferingDao.findById(NETWORK_ID)).thenReturn(ntwkoffer); - when(element.isL3Network(NETWORK_ID)).thenReturn(true); + when(_networkOfferingDao.findById(NETWORK_ID)).thenReturn(ntwkoffer); 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(_nuageVspDao.listByPhysicalNetwork(NETWORK_ID)).thenReturn(Arrays.asList(new NuageVspDeviceVO[]{nuageVspDevice})); + when(_hostDao.findById(NETWORK_ID)).thenReturn(host); - when(domainDao.findById(NETWORK_ID)).thenReturn(mock(DomainVO.class)); + 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); - assertTrue(element.applyStaticNats(network, new ArrayList())); + when(_agentManager.easySend(eq(NETWORK_ID), (Command)any())).thenReturn(answer); + assertTrue(_nuageVspElement.applyStaticNats(network, new ArrayList())); } @Test @@ -277,21 +262,21 @@ public class NuageVspElementTest { final NetworkOfferingVO ntwkoffer = mock(NetworkOfferingVO.class); when(ntwkoffer.getId()).thenReturn(NETWORK_ID); when(ntwkoffer.getEgressDefaultPolicy()).thenReturn(true); - when(ntwkOfferingDao.findById(NETWORK_ID)).thenReturn(ntwkoffer); + when(_networkOfferingDao.findById(NETWORK_ID)).thenReturn(ntwkoffer); 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(_nuageVspDao.listByPhysicalNetwork(NETWORK_ID)).thenReturn(Arrays.asList(new NuageVspDeviceVO[]{nuageVspDevice})); + when(_hostDao.findById(NETWORK_ID)).thenReturn(host); - when(domainDao.findById(NETWORK_ID)).thenReturn(mock(DomainVO.class)); + 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); - assertTrue(element.applyFWRules(network, new ArrayList())); + when(_agentManager.easySend(eq(NETWORK_ID), (Command)any())).thenReturn(answer); + assertTrue(_nuageVspElement.applyFWRules(network, new ArrayList())); } @Test @@ -306,20 +291,20 @@ public class NuageVspElementTest { final NetworkOfferingVO ntwkoffer = mock(NetworkOfferingVO.class); when(ntwkoffer.getId()).thenReturn(NETWORK_ID); when(ntwkoffer.getEgressDefaultPolicy()).thenReturn(true); - when(ntwkOfferingDao.findById(NETWORK_ID)).thenReturn(ntwkoffer); + when(_networkOfferingDao.findById(NETWORK_ID)).thenReturn(ntwkoffer); 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(_nuageVspDao.listByPhysicalNetwork(NETWORK_ID)).thenReturn(Arrays.asList(new NuageVspDeviceVO[]{nuageVspDevice})); + when(_hostDao.findById(NETWORK_ID)).thenReturn(host); - when(domainDao.findById(NETWORK_ID)).thenReturn(mock(DomainVO.class)); + 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); - assertTrue(element.applyNetworkACLs(network, new ArrayList())); + when(_agentManager.easySend(eq(NETWORK_ID), (Command)any())).thenReturn(answer); + assertTrue(_nuageVspElement.applyNetworkACLs(network, new ArrayList())); } @Test @@ -332,7 +317,7 @@ public class NuageVspElementTest { final DomainVO dom = mock(DomainVO.class); when(dom.getName()).thenReturn("domain"); - when(domainDao.findById(NETWORK_ID)).thenReturn(dom); + when(_domainDao.findById(NETWORK_ID)).thenReturn(dom); final Account acc = mock(Account.class); when(acc.getAccountName()).thenReturn("accountname"); final ReservationContext context = mock(ReservationContext.class); @@ -342,18 +327,18 @@ public class NuageVspElementTest { PhysicalNetworkVO physNet = mock(PhysicalNetworkVO.class); when(physNet.getIsolationMethods()).thenReturn(Lists.newArrayList(PhysicalNetwork.IsolationMethod.VSP.name())); when(physNet.getId()).thenReturn(NETWORK_ID); - when(physNetDao.listByZone(NETWORK_ID)).thenReturn(Lists.newArrayList(physNet)); + when(_physicalNetworkDao.listByZone(NETWORK_ID)).thenReturn(Lists.newArrayList(physNet)); 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(_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); - assertTrue(element.shutdownVpc(vpc, context)); + when(_agentManager.easySend(eq(NETWORK_ID), (Command)any())).thenReturn(answer); + assertTrue(_nuageVspElement.shutdownVpc(vpc, context)); } } \ No newline at end of file diff --git a/plugins/network-elements/nuage-vsp/test/com/cloud/network/guru/NuageVspGuestNetworkGuruTest.java b/plugins/network-elements/nuage-vsp/test/com/cloud/network/guru/NuageVspGuestNetworkGuruTest.java index c8d23ab0478..f101e1e1a27 100644 --- a/plugins/network-elements/nuage-vsp/test/com/cloud/network/guru/NuageVspGuestNetworkGuruTest.java +++ b/plugins/network-elements/nuage-vsp/test/com/cloud/network/guru/NuageVspGuestNetworkGuruTest.java @@ -19,6 +19,7 @@ package com.cloud.network.guru; +import com.cloud.NuageTest; import com.cloud.agent.AgentManager; import com.cloud.agent.api.Answer; import com.cloud.agent.api.Command; @@ -46,6 +47,7 @@ import com.cloud.network.Networks.TrafficType; import com.cloud.network.NuageVspDeviceVO; import com.cloud.network.dao.IPAddressDao; import com.cloud.network.dao.NetworkDao; +import com.cloud.network.dao.NetworkDetailsDao; import com.cloud.network.dao.NetworkVO; import com.cloud.network.dao.NuageVspDao; import com.cloud.network.dao.PhysicalNetworkDao; @@ -64,7 +66,6 @@ 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.engine.orchestration.service.NetworkOrchestrationService; import org.apache.cloudstack.framework.config.dao.ConfigurationDao; import org.junit.Before; import org.junit.Test; @@ -86,60 +87,61 @@ import static org.mockito.Matchers.eq; import static org.mockito.Mockito.mock; import static org.mockito.Mockito.when; -public class NuageVspGuestNetworkGuruTest { +public class NuageVspGuestNetworkGuruTest extends NuageTest { private static final long NETWORK_ID = 42L; - PhysicalNetworkDao physnetdao = mock(PhysicalNetworkDao.class); - DataCenterDao dcdao = mock(DataCenterDao.class); - NetworkOfferingServiceMapDao nosd = mock(NetworkOfferingServiceMapDao.class); - AgentManager agentManager = mock(AgentManager.class); - NetworkOrchestrationService netmgr = mock(NetworkOrchestrationService.class); - NetworkModel networkModel = mock(NetworkModel.class); - AccountDao accountDao = mock(AccountDao.class); - DomainDao domainDao = mock(DomainDao.class); - NicDao nicDao = mock(NicDao.class); - NetworkOfferingDao ntwkOfferDao = mock(NetworkOfferingDao.class); - NuageVspDao nuageVspDao = mock(NuageVspDao.class); - HostDao hostDao = mock(HostDao.class); - NetworkDao networkDao = mock(NetworkDao.class); - ConfigurationDao configDao = mock(ConfigurationDao.class); - IPAddressDao ipAddressDao = mock(IPAddressDao.class); - NuageVspManager nuageVspManager = mock(NuageVspManager.class); - ConfigurationManager configurationManager = mock(ConfigurationManager.class); - - NetworkDao netdao = mock(NetworkDao.class); - NuageVspGuestNetworkGuru guru; + 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); + private NuageVspGuestNetworkGuru _nuageVspGuestNetworkGuru; @Before - public void setUp() { - guru = new NuageVspGuestNetworkGuru(); - guru._physicalNetworkDao = physnetdao; - guru._physicalNetworkDao = physnetdao; - guru._nuageVspDao = nuageVspDao; - guru._dcDao = dcdao; - guru._ntwkOfferingSrvcDao = nosd; - guru._networkModel = networkModel; - guru._hostDao = hostDao; - guru._agentMgr = agentManager; - guru._networkDao = netdao; - guru._networkDao = networkDao; - guru._accountDao = accountDao; - guru._domainDao = domainDao; - guru._nicDao = nicDao; - guru._ntwkOfferingDao = ntwkOfferDao; - guru._configDao = configDao; - guru._ipAddressDao = ipAddressDao; - guru._nuageVspManager = nuageVspManager; - guru._configMgr = configurationManager; + public void setUp() throws Exception { + 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); when(dc.getGuestNetworkCidr()).thenReturn("10.1.1.1/24"); - when(dcdao.findById((Long)any())).thenReturn(dc); + when(_dataCenterDao.findById((Long)any())).thenReturn(dc); - when(configDao.getValue(NuageVspIsolatedNetworkDomainTemplateName.key())).thenReturn("IsolatedDomainTemplate"); - when(configDao.getValue(NuageVspVpcDomainTemplateName.key())).thenReturn("VpcDomainTemplate"); - when(configDao.getValue(NuageVspSharedNetworkDomainTemplateName.key())).thenReturn("SharedDomainTemplate"); + when(_configurationDao.getValue(NuageVspIsolatedNetworkDomainTemplateName.key())).thenReturn("IsolatedDomainTemplate"); + when(_configurationDao.getValue(NuageVspVpcDomainTemplateName.key())).thenReturn("VpcDomainTemplate"); + when(_configurationDao.getValue(NuageVspSharedNetworkDomainTemplateName.key())).thenReturn("SharedDomainTemplate"); } @Test @@ -149,47 +151,47 @@ public class NuageVspGuestNetworkGuruTest { 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); + 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(nosd.areServicesSupportedByNetworkOffering(NETWORK_ID, Service.Connectivity)).thenReturn(true); + when(_networkOfferingServiceMapDao.areServicesSupportedByNetworkOffering(NETWORK_ID, Service.Connectivity)).thenReturn(true); - assertTrue(guru.canHandle(offering, NetworkType.Advanced, physnet)); + assertTrue(_nuageVspGuestNetworkGuru.canHandle(offering, NetworkType.Advanced, physnet) == true); // Not supported TrafficType != Guest when(offering.getTrafficType()).thenReturn(TrafficType.Management); - assertFalse(guru.canHandle(offering, NetworkType.Advanced, physnet)); + assertFalse(_nuageVspGuestNetworkGuru.canHandle(offering, NetworkType.Advanced, physnet) == true); // Supported: GuestType Shared when(offering.getTrafficType()).thenReturn(TrafficType.Guest); when(offering.getGuestType()).thenReturn(GuestType.Shared); - assertTrue(guru.canHandle(offering, NetworkType.Advanced, physnet)); + assertTrue(_nuageVspGuestNetworkGuru.canHandle(offering, NetworkType.Advanced, physnet) == true); // Not supported: Basic networking when(offering.getGuestType()).thenReturn(GuestType.Isolated); - assertFalse(guru.canHandle(offering, NetworkType.Basic, physnet)); + assertFalse(_nuageVspGuestNetworkGuru.canHandle(offering, NetworkType.Basic, physnet) == true); // Not supported: IsolationMethod != STT when(physnet.getIsolationMethods()).thenReturn(Arrays.asList(new String[] {"VLAN"})); - assertFalse(guru.canHandle(offering, NetworkType.Advanced, physnet)); + assertFalse(_nuageVspGuestNetworkGuru.canHandle(offering, NetworkType.Advanced, physnet) == true); // Not supported: Non-persistent VPC tier - when(configurationManager.isOfferingForVpc(any(NetworkOffering.class))).thenReturn(true); - assertFalse(guru.canHandle(offering, NetworkType.Advanced, physnet)); + when(_configurationManager.isOfferingForVpc(any(NetworkOffering.class))).thenReturn(true); + assertFalse(_nuageVspGuestNetworkGuru.canHandle(offering, NetworkType.Advanced, physnet)); } @Test public void testDesign() { final PhysicalNetworkVO physnet = mock(PhysicalNetworkVO.class); - when(physnetdao.findById((Long)any())).thenReturn(physnet); + 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(new NuageVspDeviceVO[]{device})); when(device.getId()).thenReturn(1L); final NetworkOffering offering = mock(NetworkOffering.class); @@ -197,32 +199,32 @@ public class NuageVspGuestNetworkGuruTest { 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); + when(_configurationManager.isOfferingForVpc(any(NetworkOffering.class))).thenReturn(false); - when(nosd.areServicesSupportedByNetworkOffering(NETWORK_ID, Service.Connectivity)).thenReturn(true); + when(_networkOfferingServiceMapDao.areServicesSupportedByNetworkOffering(NETWORK_ID, Service.Connectivity)).thenReturn(true); final DeploymentPlan plan = mock(DeploymentPlan.class); final Network network = mock(Network.class); final Account account = mock(Account.class); - final Network designednetwork = guru.design(offering, plan, network, account); + final Network designednetwork = _nuageVspGuestNetworkGuru.design(offering, plan, network, account); assertTrue(designednetwork != null); assertTrue(designednetwork.getBroadcastDomainType() == BroadcastDomainType.Vsp); // Can't design non-persistent VPC tier - when(configurationManager.isOfferingForVpc(any(NetworkOffering.class))).thenReturn(true); - assertNull(guru.design(offering, plan, network, account)); + when(_configurationManager.isOfferingForVpc(any(NetworkOffering.class))).thenReturn(true); + assertNull(_nuageVspGuestNetworkGuru.design(offering, plan, network, account)); } @Test public void testDesignNoElementOnPhysicalNetwork() { final PhysicalNetworkVO physnet = mock(PhysicalNetworkVO.class); - when(physnetdao.findById((Long)any())).thenReturn(physnet); + 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(nuageVspDao.listByPhysicalNetwork(NETWORK_ID)).thenReturn(Collections. emptyList()); + when(_nuageVspDao.listByPhysicalNetwork(NETWORK_ID)).thenReturn(Collections.emptyList()); final NetworkOffering offering = mock(NetworkOffering.class); when(offering.getId()).thenReturn(NETWORK_ID); @@ -233,19 +235,19 @@ public class NuageVspGuestNetworkGuruTest { final Network network = mock(Network.class); final Account account = mock(Account.class); - final Network designednetwork = guru.design(offering, plan, network, account); + final Network designednetwork = _nuageVspGuestNetworkGuru.design(offering, plan, network, account); assertTrue(designednetwork == null); } @Test public void testDesignNoIsolationMethodVSP() { final PhysicalNetworkVO physnet = mock(PhysicalNetworkVO.class); - when(physnetdao.findById((Long)any())).thenReturn(physnet); + 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(nuageVspDao.listByPhysicalNetwork(NETWORK_ID)).thenReturn(Collections. emptyList()); + when(_nuageVspDao.listByPhysicalNetwork(NETWORK_ID)).thenReturn(Collections.emptyList()); final NetworkOffering offering = mock(NetworkOffering.class); when(offering.getId()).thenReturn(NETWORK_ID); @@ -256,7 +258,7 @@ public class NuageVspGuestNetworkGuruTest { final Network network = mock(Network.class); final Account account = mock(Account.class); - final Network designednetwork = guru.design(offering, plan, network, account); + final Network designednetwork = _nuageVspGuestNetworkGuru.design(offering, plan, network, account); assertTrue(designednetwork == null); } @@ -274,20 +276,20 @@ public class NuageVspGuestNetworkGuruTest { when(network.getBroadcastUri()).thenReturn(new URI("vsp://aaaaaa-aavvv/10.1.1.1")); final DataCenterVO dataCenter = mock(DataCenterVO.class); - when(dcdao.findById(NETWORK_ID)).thenReturn(dataCenter); + when(_dataCenterDao.findById(NETWORK_ID)).thenReturn(dataCenter); final AccountVO networksAccount = mock(AccountVO.class); when(networksAccount.getUuid()).thenReturn("aaaa-abbbb"); when(networksAccount.getType()).thenReturn(Account.ACCOUNT_TYPE_NORMAL); - when(accountDao.findById(NETWORK_ID)).thenReturn(networksAccount); + when(_accountDao.findById(NETWORK_ID)).thenReturn(networksAccount); final DomainVO networksDomain = mock(DomainVO.class); when(networksDomain.getUuid()).thenReturn("aaaaa-bbbbb"); - when(domainDao.findById(NETWORK_ID)).thenReturn(networksDomain); + when(_domainDao.findById(NETWORK_ID)).thenReturn(networksDomain); final NicVO nicvo = mock(NicVO.class); when(nicvo.getId()).thenReturn(NETWORK_ID); when(nicvo.getMacAddress()).thenReturn("aa-aa-aa-aa-aa-aa"); when(nicvo.getUuid()).thenReturn("aaaa-fffff"); - when(nicDao.findById(NETWORK_ID)).thenReturn(nicvo); + when(_nicDao.findById(NETWORK_ID)).thenReturn(nicvo); final VirtualMachine vm = mock(VirtualMachine.class); when(vm.getId()).thenReturn(NETWORK_ID); @@ -306,24 +308,24 @@ public class NuageVspGuestNetworkGuruTest { final NetworkOfferingVO ntwkoffering = mock(NetworkOfferingVO.class); when(ntwkoffering.getId()).thenReturn(NETWORK_ID); - when(ntwkOfferDao.findById(NETWORK_ID)).thenReturn(ntwkoffering); + 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(_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)); + 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); + when(_agentManager.easySend(eq(NETWORK_ID), (Command)any())).thenReturn(answer); - guru.reserve(nicProfile, network, vmProfile, mock(DeployDestination.class), mock(ReservationContext.class)); + _nuageVspGuestNetworkGuru.reserve(nicProfile, network, vmProfile, mock(DeployDestination.class), mock(ReservationContext.class)); } @Test @@ -352,7 +354,7 @@ public class NuageVspGuestNetworkGuruTest { when(offering.getTags()).thenReturn("aaaa"); when(offering.getEgressDefaultPolicy()).thenReturn(true); - when(networkModel.findPhysicalNetworkId(NETWORK_ID, "aaa", TrafficType.Guest)).thenReturn(NETWORK_ID); + when(_networkModel.findPhysicalNetworkId(NETWORK_ID, "aaa", TrafficType.Guest)).thenReturn(NETWORK_ID); final ReservationContext reserveContext = mock(ReservationContext.class); final Domain domain = mock(Domain.class); @@ -362,29 +364,29 @@ public class NuageVspGuestNetworkGuruTest { when(account.getAccountId()).thenReturn(NETWORK_ID); when(reserveContext.getAccount()).thenReturn(account); final DomainVO domainVo = mock(DomainVO.class); - when(domainDao.findById(NETWORK_ID)).thenReturn(domainVo); + when(_domainDao.findById(NETWORK_ID)).thenReturn(domainVo); final AccountVO accountVo = mock(AccountVO.class); - when(accountDao.findById(NETWORK_ID)).thenReturn(accountVo); + 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()); - when(nuageVspManager.getGatewaySystemIds()).thenReturn(new ArrayList()); + 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()); + when(_nuageVspManager.getGatewaySystemIds()).thenReturn(new ArrayList()); final Answer answer = mock(Answer.class); when(answer.getResult()).thenReturn(true); - when(agentManager.easySend(eq(NETWORK_ID), (Command)any())).thenReturn(answer); + 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); when(deployDest.getDataCenter()).thenReturn(dc); - guru.implement(network, offering, deployDest, reserveContext); + _nuageVspGuestNetworkGuru.implement(network, offering, deployDest, reserveContext); } @Test @@ -396,22 +398,22 @@ public class NuageVspGuestNetworkGuruTest { when(network.getPhysicalNetworkId()).thenReturn(NETWORK_ID); when(network.getVpcId()).thenReturn(null); when(network.getDomainId()).thenReturn(NETWORK_ID); - when(networkDao.acquireInLockTable(NETWORK_ID, 1200)).thenReturn(network); + when(_networkDao.acquireInLockTable(NETWORK_ID, 1200)).thenReturn(network); final NetworkOfferingVO offering = mock(NetworkOfferingVO.class); when(offering.getId()).thenReturn(NETWORK_ID); when(offering.getTrafficType()).thenReturn(TrafficType.Guest); - when(ntwkOfferDao.findById(NETWORK_ID)).thenReturn(offering); + when(_networkOfferingDao.findById(NETWORK_ID)).thenReturn(offering); final DomainVO domain = mock(DomainVO.class); when(domain.getUuid()).thenReturn("aaaaaa"); - when(domainDao.findById(NETWORK_ID)).thenReturn(domain); + when(_domainDao.findById(NETWORK_ID)).thenReturn(domain); final NicVO nic = mock(NicVO.class); when(nic.getId()).thenReturn(NETWORK_ID); when(nic.getIPv4Address()).thenReturn("10.10.10.10"); when(nic.getMacAddress()).thenReturn("c8:60:00:56:e5:58"); - when(nicDao.findById(NETWORK_ID)).thenReturn(nic); + when(_nicDao.findById(NETWORK_ID)).thenReturn(nic); final NicProfile nicProfile = mock(NicProfile.class); when(nicProfile.getId()).thenReturn(NETWORK_ID); @@ -431,14 +433,14 @@ public class NuageVspGuestNetworkGuruTest { 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(_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); + when(_agentManager.easySend(eq(NETWORK_ID), (Command)any())).thenReturn(answer); - guru.deallocate(network, nicProfile, vmProfile); + _nuageVspGuestNetworkGuru.deallocate(network, nicProfile, vmProfile); } @Test @@ -451,31 +453,31 @@ public class NuageVspGuestNetworkGuruTest { when(network.getNetworkOfferingId()).thenReturn(NETWORK_ID); when(network.getPhysicalNetworkId()).thenReturn(NETWORK_ID); when(network.getVpcId()).thenReturn(null); - when(networkDao.acquireInLockTable(NETWORK_ID, 1200)).thenReturn(network); + when(_networkDao.acquireInLockTable(NETWORK_ID, 1200)).thenReturn(network); final NetworkOfferingVO offering = mock(NetworkOfferingVO.class); when(offering.getId()).thenReturn(NETWORK_ID); when(offering.getTrafficType()).thenReturn(TrafficType.Guest); - when(ntwkOfferDao.findById(NETWORK_ID)).thenReturn(offering); + when(_networkOfferingDao.findById(NETWORK_ID)).thenReturn(offering); final DomainVO domain = mock(DomainVO.class); when(domain.getUuid()).thenReturn("aaaaaa"); - when(domainDao.findById(NETWORK_ID)).thenReturn(domain); + 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()); - when(nuageVspManager.getGatewaySystemIds()).thenReturn(new ArrayList()); + 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()); + when(_nuageVspManager.getGatewaySystemIds()).thenReturn(new ArrayList()); final Answer answer = mock(Answer.class); when(answer.getResult()).thenReturn(true); - when(agentManager.easySend(eq(NETWORK_ID), (Command)any())).thenReturn(answer); + when(_agentManager.easySend(eq(NETWORK_ID), (Command)any())).thenReturn(answer); - assertTrue(guru.trash(network, offering)); + assertTrue(_nuageVspGuestNetworkGuru.trash(network, offering)); } } diff --git a/plugins/network-elements/nuage-vsp/test/com/cloud/network/manager/NuageVspManagerTest.java b/plugins/network-elements/nuage-vsp/test/com/cloud/network/manager/NuageVspManagerTest.java index a29e3d7894d..ec16a974d08 100644 --- a/plugins/network-elements/nuage-vsp/test/com/cloud/network/manager/NuageVspManagerTest.java +++ b/plugins/network-elements/nuage-vsp/test/com/cloud/network/manager/NuageVspManagerTest.java @@ -19,6 +19,7 @@ package com.cloud.network.manager; +import com.cloud.NuageTest; import com.cloud.agent.AgentManager; import com.cloud.agent.api.Command; import com.cloud.agent.api.sync.SyncNuageVspCmsIdAnswer; @@ -35,6 +36,7 @@ import com.cloud.network.dao.PhysicalNetworkDao; import com.cloud.network.dao.PhysicalNetworkServiceProviderDao; import com.cloud.network.dao.PhysicalNetworkVO; import com.cloud.resource.ResourceManager; +import com.cloud.util.NuageVspEntityBuilder; import org.apache.cloudstack.framework.config.dao.ConfigurationDao; import org.apache.cloudstack.framework.config.impl.ConfigurationVO; import org.junit.Before; @@ -48,34 +50,37 @@ import static org.mockito.Matchers.eq; import static org.mockito.Mockito.mock; import static org.mockito.Mockito.when; -public class NuageVspManagerTest { +public class NuageVspManagerTest extends NuageTest { private static final long NETWORK_ID = 42L; - PhysicalNetworkDao physicalNetworkDao = mock(PhysicalNetworkDao.class); - PhysicalNetworkServiceProviderDao physicalNetworkServiceProviderDao = mock(PhysicalNetworkServiceProviderDao.class); - ResourceManager resourceMgr = mock(ResourceManager.class); - HostDetailsDao hostDetailsDao = mock(HostDetailsDao.class); - NuageVspDao nuageVspDao = mock(NuageVspDao.class); - NetworkDao networkDao = mock(NetworkDao.class); - HostDao hostDao = mock(HostDao.class); - AgentManager agentManager = mock(AgentManager.class); - ConfigurationDao configDao = mock(ConfigurationDao.class); - - NuageVspManagerImpl manager; + private PhysicalNetworkDao _physicalNetworkDao = mock(PhysicalNetworkDao.class); + private PhysicalNetworkServiceProviderDao _physicalNetworkServiceProviderDao = mock(PhysicalNetworkServiceProviderDao.class); + private ResourceManager _resourceManager = mock(ResourceManager.class); + private HostDetailsDao _hostDetailsDao = mock(HostDetailsDao.class); + private NuageVspDao _nuageVspDao = mock(NuageVspDao.class); + private NetworkDao _networkDao = mock(NetworkDao.class); + private HostDao _hostDao = mock(HostDao.class); + private AgentManager _agentManager = mock(AgentManager.class); + private ConfigurationDao _configurationDao = mock(ConfigurationDao.class); + private NuageVspEntityBuilder _nuageVspEntityBuilder = mock(NuageVspEntityBuilder.class); + private NuageVspManagerImpl _nuageVspManager; @Before - public void setUp() { - manager = new NuageVspManagerImpl(); + public void setUp() throws Exception { + super.setUp(); - manager._physicalNetworkServiceProviderDao = physicalNetworkServiceProviderDao; - manager._physicalNetworkDao = physicalNetworkDao; - manager._resourceMgr = resourceMgr; - manager._hostDetailsDao = hostDetailsDao; - manager._nuageVspDao = nuageVspDao; - manager._networkDao = networkDao; - manager._hostDao = hostDao; - manager._agentMgr = agentManager; - manager._configDao = configDao; + _nuageVspManager = new NuageVspManagerImpl(); + + _nuageVspManager._physicalNetworkServiceProviderDao = _physicalNetworkServiceProviderDao; + _nuageVspManager._physicalNetworkDao = _physicalNetworkDao; + _nuageVspManager._resourceMgr = _resourceManager; + _nuageVspManager._hostDetailsDao = _hostDetailsDao; + _nuageVspManager._nuageVspDao = _nuageVspDao; + _nuageVspManager._networkDao = _networkDao; + _nuageVspManager._hostDao = _hostDao; + _nuageVspManager._agentMgr = _agentManager; + _nuageVspManager._configDao = _configurationDao; + _nuageVspManager._nuageVspEntityBuilder = _nuageVspEntityBuilder; } @Test @@ -84,31 +89,31 @@ public class NuageVspManagerTest { final PhysicalNetworkVO physicalNetwork = mock(PhysicalNetworkVO.class); when(physicalNetwork.getDataCenterId()).thenReturn(NETWORK_ID); when(physicalNetwork.getId()).thenReturn(NETWORK_ID); - when(physicalNetworkDao.findById(NETWORK_ID)).thenReturn(physicalNetwork); + when(_physicalNetworkDao.findById(NETWORK_ID)).thenReturn(physicalNetwork); final NuageVspDeviceVO nuageVspDevice = mock(NuageVspDeviceVO.class); when(nuageVspDevice.getPhysicalNetworkId()).thenReturn(NETWORK_ID); when(nuageVspDevice.getHostId()).thenReturn(NETWORK_ID); - when(nuageVspDao.findById(NETWORK_ID)).thenReturn(nuageVspDevice); + when(_nuageVspDao.findById(NETWORK_ID)).thenReturn(nuageVspDevice); - when(networkDao.listByPhysicalNetwork(NETWORK_ID)).thenReturn(new ArrayList()); + when(_networkDao.listByPhysicalNetwork(NETWORK_ID)).thenReturn(new ArrayList()); final HostVO host = mock(HostVO.class); when(host.getId()).thenReturn(NETWORK_ID); - when(hostDao.findById(NETWORK_ID)).thenReturn(host); + when(_hostDao.findById(NETWORK_ID)).thenReturn(host); final DeleteNuageVspDeviceCmd cmd = mock(DeleteNuageVspDeviceCmd.class); when(cmd.getNuageVspDeviceId()).thenReturn(NETWORK_ID); ConfigurationVO cmsIdConfig = mock(ConfigurationVO.class); when(cmsIdConfig.getValue()).thenReturn("1:1"); - when(configDao.findByName("nuagevsp.cms.id")).thenReturn(cmsIdConfig); + when(_configurationDao.findByName("nuagevsp.cms.id")).thenReturn(cmsIdConfig); final SyncNuageVspCmsIdAnswer answer = mock(SyncNuageVspCmsIdAnswer.class); when(answer.getResult()).thenReturn(true); - when(agentManager.easySend(eq(NETWORK_ID), (Command)any())).thenReturn(answer); + when(_agentManager.easySend(eq(NETWORK_ID), (Command)any())).thenReturn(answer); - manager.deleteNuageVspDevice(cmd); + _nuageVspManager.deleteNuageVspDevice(cmd); } @Test @@ -117,12 +122,12 @@ public class NuageVspManagerTest { when(nuageVspDevice.getPhysicalNetworkId()).thenReturn(NETWORK_ID); final PhysicalNetworkVO phyNtwkVO = mock(PhysicalNetworkVO.class); - when(physicalNetworkDao.findById(NETWORK_ID)).thenReturn(phyNtwkVO); - when(nuageVspDao.listByPhysicalNetwork(NETWORK_ID)).thenReturn(new ArrayList()); + when(_physicalNetworkDao.findById(NETWORK_ID)).thenReturn(phyNtwkVO); + when(_nuageVspDao.listByPhysicalNetwork(NETWORK_ID)).thenReturn(new ArrayList()); final ListNuageVspDevicesCmd cmd = mock(ListNuageVspDevicesCmd.class); when(cmd.getPhysicalNetworkId()).thenReturn(NETWORK_ID); when(cmd.getNuageVspDeviceId()).thenReturn(null); - manager.listNuageVspDevices(cmd); + _nuageVspManager.listNuageVspDevices(cmd); } } diff --git a/plugins/network-elements/nuage-vsp/test/com/cloud/network/resource/NuageVspResourceTest.java b/plugins/network-elements/nuage-vsp/test/com/cloud/network/resource/NuageVspResourceTest.java index 770e13f0dc4..9c51864e49a 100644 --- a/plugins/network-elements/nuage-vsp/test/com/cloud/network/resource/NuageVspResourceTest.java +++ b/plugins/network-elements/nuage-vsp/test/com/cloud/network/resource/NuageVspResourceTest.java @@ -19,6 +19,7 @@ package com.cloud.network.resource; +import com.cloud.NuageTest; import com.cloud.agent.api.Answer; import com.cloud.agent.api.PingCommand; import com.cloud.agent.api.StartupCommand; @@ -29,13 +30,17 @@ 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.sync.SyncVspCommand; import com.cloud.host.Host; +import com.google.common.collect.Lists; import com.google.common.collect.Maps; -import net.nuage.vsp.acs.client.NuageVspApiClient; -import net.nuage.vsp.acs.client.NuageVspElementClient; -import net.nuage.vsp.acs.client.NuageVspGuruClient; -import net.nuage.vsp.acs.client.NuageVspSyncClient; +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; @@ -43,20 +48,20 @@ 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; import static org.mockito.Mockito.mock; -public class NuageVspResourceTest { - NuageVspResource _resource; - NuageVspApiClient _mockNuageVspApiClient = mock(NuageVspApiClient.class); - NuageVspElementClient _mockNuageVspElementClient = mock(NuageVspElementClient.class); - NuageVspGuruClient _mockNuageVspGuruClient = mock(NuageVspGuruClient.class); - NuageVspSyncClient _mockNuageVspSyncClient = mock(NuageVspSyncClient.class); - NuageVspResource.Configuration _resourceConfiguration; - Map _hostDetails; +public class NuageVspResourceTest extends NuageTest { + private NuageVspResource _resource; + private NuageVspApiClient _mockNuageVspApiClient = mock(NuageVspApiClient.class); + private NuageVspElementClient _mockNuageVspElementClient = mock(NuageVspElementClient.class); + private NuageVspGuruClient _mockNuageVspGuruClient = mock(NuageVspGuruClient.class); + private NuageVspResource.Configuration _resourceConfiguration; + private Map _hostDetails; org.mockito.stubbing.Answer genericAnswer = new org.mockito.stubbing.Answer() { public Object answer(InvocationOnMock invocation) { @@ -66,6 +71,8 @@ public class NuageVspResourceTest { @Before public void setUp() throws Exception { + super.setUp(); + _resource = new NuageVspResource() { @Override @@ -74,8 +81,6 @@ public class NuageVspResourceTest { _nuageVspApiClient = _mockNuageVspApiClient; _nuageVspElementClient = _mockNuageVspElementClient; _nuageVspGuruClient = _mockNuageVspGuruClient; - _nuageVspSyncClient = _mockNuageVspSyncClient; - } protected void isNuageVspApiLoaded() throws ConfigurationException { @@ -87,9 +92,6 @@ public class NuageVspResourceTest { protected void isNuageVspElementLoaded() throws ConfigurationException { } - protected void isNuageVspSyncLoaded() throws ConfigurationException { - } - protected void login() throws ConfigurationException { } @@ -148,15 +150,10 @@ public class NuageVspResourceTest { public void testImplementNetworkVspCommand() throws Exception { _resource.configure("NuageVspResource", _hostDetails); - ImplementNetworkVspCommand.Builder cmdBuilder = new ImplementNetworkVspCommand.Builder().networkDomainName("networkDomainName").networkDomainPath("networkDomainPath") - .networkDomainUuid("networkDomainUuid").networkAccountName("networkAccountName").networkAccountUuid("networkAccountUuid").networkName("networkName") - .networkCidr("networkCidr").networkGateway("networkGateway").networkAclId(0L).dnsServers(new ArrayList()).gatewaySystemIds(new ArrayList()) - .networkUuid("networkUuid").isL3Network(true).isVpc(true).isSharedNetwork(true).vpcName("vpcName").vpcUuid("vpcUuid").defaultEgressPolicy(true) - .ipAddressRange(new ArrayList()).domainTemplateName("domainTemplateName"); - doAnswer(genericAnswer).when(_mockNuageVspGuruClient).implement("networkDomainName", "networkDomainPath", "networkDomainUuid", "networkAccountName", - "networkAccountUuid", "networkName", "networkCidr", "networkGateway", 0L, new ArrayList(), new ArrayList(), true, true, true, "networkUuid", - "vpcName", "vpcUuid", true, new ArrayList(), "domainTemplateName"); - com.cloud.agent.api.Answer implNtwkAns = _resource.executeRequest(cmdBuilder.build()); + VspNetwork vspNetwork = buildVspNetwork(); + ImplementNetworkVspCommand cmd = new ImplementNetworkVspCommand(vspNetwork, new ArrayList()); + doAnswer(genericAnswer).when(_mockNuageVspGuruClient).implement(vspNetwork, new ArrayList()); + com.cloud.agent.api.Answer implNtwkAns = _resource.executeRequest(cmd); assertTrue(implNtwkAns.getResult()); } @@ -164,16 +161,13 @@ public class NuageVspResourceTest { public void testReserveVmInterfaceVspCommand() throws Exception { _resource.configure("NuageVspResource", _hostDetails); - ReserveVmInterfaceVspCommand.Builder cmdBuilder = new ReserveVmInterfaceVspCommand.Builder().nicUuid("nicUuid").nicMacAddress("nicMacAddress") - .networkUuid("networkUuid").isL3Network(true).isSharedNetwork(true).vpcUuid("vpcUuid").networkDomainUuid("networkDomainUuid") - .networksAccountUuid("networksAccountUuid").isDomainRouter(false).domainRouterIp("domainRouterIp").vmInstanceName("vmInstanceName").vmUuid("vmUuid") - .vmUserName("vmUserName").vmUserDomainName("vmUserDomainName").useStaticIp(true).staticIp("staticIp").staticNatIpUuid("staticNatIpUuid") - .staticNatIpAddress("staticNatIpAddress").isStaticNatIpAllocated(true).isOneToOneNat(true).staticNatVlanUuid("staticNatVlanUuid") - .staticNatVlanGateway("staticNatVlanGateway").staticNatVlanNetmask("staticNatVlanNetmask"); - doAnswer(genericAnswer).when(_mockNuageVspGuruClient).reserve("nicUuid", "nicMacAddress", "networkUuid", true, true, "vpcUuid", "networkDomainUuid", - "networksAccountUuid", false, "domainRouterIp", "vmInstanceName", "vmUuid", true, "staticIp", "staticNatIpUuid", "staticNatIpAddress", - true, true, "staticNatVlanUuid", "staticNatVlanGateway", "staticNatVlanNetmask"); - Answer rsrvVmInfAns = _resource.executeRequest(cmdBuilder.build()); + VspNetwork vspNetwork = buildVspNetwork(); + 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); + Answer rsrvVmInfAns = _resource.executeRequest(cmd); assertTrue(rsrvVmInfAns.getResult()); } @@ -181,12 +175,12 @@ public class NuageVspResourceTest { public void testDeallocateVmVspCommand() throws Exception { _resource.configure("NuageVspResource", _hostDetails); - DeallocateVmVspCommand.Builder cmdBuilder = new DeallocateVmVspCommand.Builder().networkUuid("networkUuid").nicFromDbUuid("nicFromDbUuid") - .nicMacAddress("nicMacAddress").nicIp4Address("nicIp4Address").isL3Network(true).isSharedNetwork(true).vpcUuid("vpcUuid") - .networksDomainUuid("networksDomainUuid").vmInstanceName("vmInstanceName").vmUuid("vmUuid").isExpungingState(true); - doAnswer(genericAnswer).when(_mockNuageVspGuruClient).deallocate("networkUuid", "nicFrmDdUuid", "nicMacAddress", "nicIp4Address", true, true, "vpcUuid", "networksDomainUuid", - "vmInstanceName", "vmUuid", true); - Answer dellocateVmAns = _resource.executeRequest(cmdBuilder.build()); + VspNetwork vspNetwork = buildVspNetwork(); + VspVm vspVm = buildVspVm(); + VspNic vspNic = buildVspNic(); + DeallocateVmVspCommand cmd = new DeallocateVmVspCommand(vspNetwork, vspVm, vspNic); + doAnswer(genericAnswer).when(_mockNuageVspGuruClient).deallocate(vspNetwork, vspVm, vspNic); + Answer dellocateVmAns = _resource.executeRequest(cmd); assertTrue(dellocateVmAns.getResult()); } @@ -194,10 +188,10 @@ public class NuageVspResourceTest { public void testTrashNetworkVspCommand() throws Exception { _resource.configure("NuageVspResource", _hostDetails); - TrashNetworkVspCommand.Builder cmdBuilder = new TrashNetworkVspCommand.Builder().domainUuid("domainUuid").networkUuid("networkUuid") - .isL3Network(true).isSharedNetwork(true).vpcUuid("vpcUuid").domainTemplateName("domainTemplateName"); - doAnswer(genericAnswer).when(_mockNuageVspGuruClient).trash("domainUuid", "networkUuid", true, true, "vpcUuid", "domainTemplateName"); - Answer trashNtwkAns = _resource.executeRequest(cmdBuilder.build()); + VspNetwork vspNetwork = buildVspNetwork(); + TrashNetworkVspCommand cmd = new TrashNetworkVspCommand(vspNetwork); + doAnswer(genericAnswer).when(_mockNuageVspGuruClient).trash(vspNetwork); + Answer trashNtwkAns = _resource.executeRequest(cmd); assertTrue(trashNtwkAns.getResult()); } @@ -205,10 +199,11 @@ public class NuageVspResourceTest { public void testApplyStaticNatVspCommand() throws Exception { _resource.configure("NuageVspResource", _hostDetails); - ApplyStaticNatVspCommand.Builder cmdBuilder = new ApplyStaticNatVspCommand.Builder().networkDomainUuid("networkDomainUuid").networkUuid("networkUuid") - .vpcOrSubnetUuid("vpcOrSubnetUuid").isL3Network(true).isVpc(true).staticNatDetails(new ArrayList>()); - doAnswer(genericAnswer).when(_mockNuageVspElementClient).applyStaticNats("networkDomainUuid", "networkUuid", "vpcOrSubnetUuid", true, true, new ArrayList>()); - Answer applyNatAns = _resource.executeRequest(cmdBuilder.build()); + VspNetwork vspNetwork = buildVspNetwork(); + List vspStaticNatDetails = Lists.newArrayList(buildVspStaticNat()); + ApplyStaticNatVspCommand cmd = new ApplyStaticNatVspCommand(vspNetwork, vspStaticNatDetails); + doAnswer(genericAnswer).when(_mockNuageVspElementClient).applyStaticNats(vspNetwork, vspStaticNatDetails); + Answer applyNatAns = _resource.executeRequest(cmd); assertTrue(applyNatAns.getResult()); } @@ -216,12 +211,11 @@ public class NuageVspResourceTest { public void testApplyAclRuleVspCommand() throws Exception { _resource.configure("NuageVspResource", _hostDetails); - ApplyAclRuleVspCommand.Builder cmdBuilder = new ApplyAclRuleVspCommand.Builder().networkAcl(true).networkUuid("networkUuid").networkDomainUuid("networkDomainUuid") - .vpcOrSubnetUuid("vpcOrSubnetUuid").networkName("networkName").isL2Network(true).aclRules(new ArrayList>()).networkId(100) - .egressDefaultPolicy(false).acsIngressAcl(true).networkReset(true).domainTemplateName("domainTemplateName"); - doAnswer(genericAnswer).when(_mockNuageVspElementClient).applyAclRules(true, "networkUuid", "networkDomainUuid", "vpcOrSubnetUuid", "networkName", true, - new ArrayList>(), 100, false, true, true, "domainTemplateName"); - Answer applyAclAns = _resource.executeRequest(cmdBuilder.build()); + VspNetwork vspNetwork = buildVspNetwork(); + List vspAclRules = Lists.newArrayList(buildVspAclRule()); + ApplyAclRuleVspCommand cmd = new ApplyAclRuleVspCommand(VspAclRule.ACLType.NetworkACL, vspNetwork, vspAclRules, false); + doAnswer(genericAnswer).when(_mockNuageVspElementClient).applyAclRules(VspAclRule.ACLType.NetworkACL, vspNetwork, vspAclRules, false); + Answer applyAclAns = _resource.executeRequest(cmd); assertTrue(applyAclAns.getResult()); } @@ -229,19 +223,9 @@ public class NuageVspResourceTest { public void testShutDownVpcVspCommand() throws Exception { _resource.configure("NuageVspResource", _hostDetails); - ShutDownVpcVspCommand.Builder cmdBuilder = new ShutDownVpcVspCommand.Builder().domainUuid("domainUuid").vpcUuid("vpcUuid").domainTemplateName("domainTemplateName"); + ShutDownVpcVspCommand cmd = new ShutDownVpcVspCommand("domainUuid", "vpcUuid", "domainTemplateName"); doAnswer(genericAnswer).when(_mockNuageVspElementClient).shutdownVpc("domainUuid", "vpcUuid", "domainTemplateName"); - Answer shutVpcAns = _resource.executeRequest(cmdBuilder.build()); - assertTrue(shutVpcAns.getResult()); - } - - @Test - public void testSyncVspCommand() throws Exception { - _resource.configure("NuageVspResource", _hostDetails); - - SyncVspCommand shutVpcCmd = new SyncVspCommand("nuageVspEntity"); - doAnswer(genericAnswer).when(_mockNuageVspSyncClient).syncWithNuageVsp("nuageVspEntity"); - Answer shutVpcAns = _resource.executeRequest(shutVpcCmd); + Answer shutVpcAns = _resource.executeRequest(cmd); assertTrue(shutVpcAns.getResult()); } } diff --git a/plugins/network-elements/nuage-vsp/test/com/cloud/network/sync/NuageVspSyncTest.java b/plugins/network-elements/nuage-vsp/test/com/cloud/network/sync/NuageVspSyncTest.java deleted file mode 100644 index 23430d4685a..00000000000 --- a/plugins/network-elements/nuage-vsp/test/com/cloud/network/sync/NuageVspSyncTest.java +++ /dev/null @@ -1,72 +0,0 @@ -// -// 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.sync; - -import com.cloud.agent.AgentManager; -import com.cloud.agent.api.Answer; -import com.cloud.agent.api.Command; -import com.cloud.host.HostVO; -import com.cloud.host.dao.HostDao; -import com.cloud.network.NuageVspDeviceVO; -import com.cloud.network.dao.NuageVspDao; -import org.junit.Before; -import org.junit.Test; - -import java.util.Arrays; - -import static org.mockito.Matchers.any; -import static org.mockito.Matchers.eq; -import static org.mockito.Mockito.mock; -import static org.mockito.Mockito.when; - -public class NuageVspSyncTest { - private static final long NETWORK_ID = 42L; - NuageVspDao nuageVspDao = mock(NuageVspDao.class); - AgentManager agentManager = mock(AgentManager.class); - HostDao hostDao = mock(HostDao.class); - - NuageVspSyncImpl sync; - - @Before - public void setUp() { - sync = new NuageVspSyncImpl(); - sync._nuageVspDao = nuageVspDao; - sync._agentMgr = agentManager; - sync._hostDao = hostDao; - } - - @Test - public void testSyncWithNuageVsp() { - final NuageVspDeviceVO nuageVspDevice = mock(NuageVspDeviceVO.class); - when(nuageVspDevice.getHostId()).thenReturn(NETWORK_ID); - when(nuageVspDevice.getId()).thenReturn(NETWORK_ID); - when(nuageVspDao.listAll()).thenReturn(Arrays.asList(new NuageVspDeviceVO[] {nuageVspDevice})); - - final HostVO host = mock(HostVO.class); - when(host.getId()).thenReturn(NETWORK_ID); - 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); - - sync.syncWithNuageVsp("users"); - } -} diff --git a/plugins/network-elements/nuage-vsp/test/com/cloud/util/NuageVspEntityBuilderTest.java b/plugins/network-elements/nuage-vsp/test/com/cloud/util/NuageVspEntityBuilderTest.java new file mode 100644 index 00000000000..1ddc106877f --- /dev/null +++ b/plugins/network-elements/nuage-vsp/test/com/cloud/util/NuageVspEntityBuilderTest.java @@ -0,0 +1,412 @@ +// +// 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.util; + +import com.cloud.NuageTest; +import com.cloud.dc.VlanVO; +import com.cloud.dc.dao.VlanDao; +import com.cloud.domain.DomainVO; +import com.cloud.domain.dao.DomainDao; +import com.cloud.network.Network; +import com.cloud.network.dao.IPAddressDao; +import com.cloud.network.dao.IPAddressVO; +import com.cloud.network.dao.NetworkDetailsDao; +import com.cloud.network.dao.NetworkVO; +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.offerings.NetworkOfferingVO; +import com.cloud.offerings.dao.NetworkOfferingDao; +import com.cloud.offerings.dao.NetworkOfferingServiceMapDao; +import com.cloud.user.AccountVO; +import com.cloud.user.dao.AccountDao; +import com.cloud.utils.net.Ip; +import com.cloud.vm.NicProfile; +import com.cloud.vm.NicVO; +import com.cloud.vm.VirtualMachine; +import com.google.common.collect.Lists; +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.junit.Before; +import org.junit.Test; + +import java.util.List; + +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertNotNull; +import static org.junit.Assert.assertNull; +import static org.mockito.Mockito.mock; +import static org.mockito.Mockito.when; + +public class NuageVspEntityBuilderTest extends NuageTest { + + private static final long DOMAIN_ID = 1L; + private static final long ACCOUNT_ID = 1L; + private static final long NETWORK_OFFERING_ID = 1L; + private static final long SHARED_NETWORK_OFFERING_ID = 2L; + private static final long L2_NETWORK_OFFERING_ID = 3L; + private static final long VPC_ID = 1L; + private static final long SOURCE_IP_ADDRESS_ID = 1L; + + private VpcDao _vpcDao = mock(VpcDao.class); + private DomainDao _domainDao = mock(DomainDao.class); + private AccountDao _accountDao = mock(AccountDao.class); + private NetworkOfferingDao _networkOfferingDao = mock(NetworkOfferingDao.class); + private NetworkOfferingServiceMapDao _networkOfferingServiceMapDao = mock(NetworkOfferingServiceMapDao.class); + private VlanDao _vlanDao = mock(VlanDao.class); + private IPAddressDao _ipAddressDao = mock(IPAddressDao.class); + private NetworkDetailsDao _networkDetailsDao = mock(NetworkDetailsDao.class); + private NuageVspEntityBuilder _nuageVspEntityBuilder = new NuageVspEntityBuilder(); + + private DomainVO _mockedDomain = mock(DomainVO.class); + private AccountVO _mockedAccount = mock(AccountVO.class); + private NetworkOfferingVO _mockedNetworkOffering = mock(NetworkOfferingVO.class); + private NetworkOfferingVO _mockedSharedNetworkOffering = mock(NetworkOfferingVO.class); + private NetworkOfferingVO _mockedL2NetworkOffering = mock(NetworkOfferingVO.class); + private VlanVO _mockedVlan = mock(VlanVO.class); + private VpcVO _mockedVpc = mock(VpcVO.class); + private NetworkVO _mockedNetwork = mock(NetworkVO.class); + private NetworkVO _mockedVpcNetwork = mock(NetworkVO.class); + private NetworkVO _mockedSharedNetwork = mock(NetworkVO.class); + private NetworkVO _mockedL2Network = mock(NetworkVO.class); + private VirtualMachine _mockedUserVirtualMachine = mock(VirtualMachine.class); + private VirtualMachine _mockedDomainRouterVirtualMachine = mock(VirtualMachine.class); + private NicProfile _mockedNicProfile = mock(NicProfile.class); + private NicVO _mockedNic = mock(NicVO.class); + private IPAddressVO _mockedStaticNatIp = mock(IPAddressVO.class); + private VlanVO _mockedStaticNatVlan = mock(VlanVO.class); + private FirewallRule _mockedFirewallRule = mock(FirewallRule.class); + private NetworkACLItem _mockedNetworkAclItem = mock(NetworkACLItem.class); + + @Before + public void setUp() throws Exception { + super.setUp(); + + _nuageVspEntityBuilder._vpcDao = _vpcDao; + _nuageVspEntityBuilder._domainDao = _domainDao; + _nuageVspEntityBuilder._accountDao = _accountDao; + _nuageVspEntityBuilder._networkOfferingDao = _networkOfferingDao; + _nuageVspEntityBuilder._networkOfferingServiceMapDao = _networkOfferingServiceMapDao; + _nuageVspEntityBuilder._vlanDao = _vlanDao; + _nuageVspEntityBuilder._configurationDao = _configurationDao; + _nuageVspEntityBuilder._ipAddressDao = _ipAddressDao; + _nuageVspEntityBuilder._networkModel = _networkModel; + _nuageVspEntityBuilder._networkDetailsDao = _networkDetailsDao; + + setUpMockedDomain(); + setUpMockedAccount(); + setUpMockedNetworkOffering(_mockedNetworkOffering, Network.GuestType.Isolated); + setUpMockedNetworkOffering(_mockedSharedNetworkOffering, Network.GuestType.Shared); + setUpMockedNetworkOffering(_mockedL2NetworkOffering, Network.GuestType.Isolated); + setUpMockedVlan(); + setUpMockedVpc(); + setUpMockedNetwork(_mockedNetwork, NETWORK_OFFERING_ID, null); + setUpMockedNetwork(_mockedVpcNetwork, NETWORK_OFFERING_ID, VPC_ID); + setUpMockedNetwork(_mockedSharedNetwork, SHARED_NETWORK_OFFERING_ID, null); + setUpMockedNetwork(_mockedL2Network, L2_NETWORK_OFFERING_ID, null); + setUpMockedVirtualMachine(_mockedUserVirtualMachine, false); + setUpMockedVirtualMachine(_mockedDomainRouterVirtualMachine, true); + setUpMockedNicProfile(); + setUpMockedNic(); + setUpMockedStaticNatIp(); + setUpMockedStaticNatVlan(); + setUpMockedFirewallRule(); + setUpMockedNetworkAclItem(); + setUpMockedDaoCalls(); + } + + @Test + public void testBuildVspDomain() { + VspDomain vspDomain = _nuageVspEntityBuilder.buildVspDomain(_mockedDomain); + validateVspDomain(vspDomain); + } + + @Test + public void testBuildVspNetwork() { + VspNetwork vspNetwork = _nuageVspEntityBuilder.buildVspNetwork(_mockedL2Network, true); + validateVspNetwork(vspNetwork, true, false, false, false, "IsolatedDomainTemplate", true); + + vspNetwork = _nuageVspEntityBuilder.buildVspNetwork(_mockedL2Network, false); + validateVspNetwork(vspNetwork, true, false, false, false, "IsolatedDomainTemplate", false); + + vspNetwork = _nuageVspEntityBuilder.buildVspNetwork(_mockedNetwork, true); + validateVspNetwork(vspNetwork, false, true, false, false, "IsolatedDomainTemplate", true); + + vspNetwork = _nuageVspEntityBuilder.buildVspNetwork(_mockedNetwork, false); + validateVspNetwork(vspNetwork, false, true, false, false, "IsolatedDomainTemplate", false); + + vspNetwork = _nuageVspEntityBuilder.buildVspNetwork(_mockedVpcNetwork, true); + validateVspNetwork(vspNetwork, false, false, true, false, "VpcDomainTemplate", true); + + vspNetwork = _nuageVspEntityBuilder.buildVspNetwork(_mockedVpcNetwork, false); + validateVspNetwork(vspNetwork, false, false, true, false, "VpcDomainTemplate", false); + + vspNetwork = _nuageVspEntityBuilder.buildVspNetwork(_mockedSharedNetwork, true); + validateVspNetwork(vspNetwork, false, false, false, true, "SharedDomainTemplate", true); + + vspNetwork = _nuageVspEntityBuilder.buildVspNetwork(_mockedSharedNetwork, false); + validateVspNetwork(vspNetwork, false, false, false, true, "SharedDomainTemplate", false); + } + + @Test + public void testBuildVspVm() { + VspVm vspVm = _nuageVspEntityBuilder.buildVspVm(_mockedUserVirtualMachine, _mockedNetwork); + validateVspVm(vspVm, false); + + vspVm = _nuageVspEntityBuilder.buildVspVm(_mockedDomainRouterVirtualMachine, _mockedNetwork); + validateVspVm(vspVm, true); + } + + @Test + public void testBuildVspNic() { + VspNic vspNic = _nuageVspEntityBuilder.buildVspNic("nicUuid", _mockedNicProfile); + validateVspNic(vspNic); + + vspNic = _nuageVspEntityBuilder.buildVspNic(_mockedNic); + validateVspNic(vspNic); + } + + @Test + public void testBuildVspStaticNat() { + VspStaticNat vspStaticNat = _nuageVspEntityBuilder.buildVspStaticNat(true, _mockedStaticNatIp, _mockedStaticNatVlan, _mockedNic); + validateVspStaticNat(vspStaticNat, true); + } + + @Test + public void testBuildVspAclRule() { + VspAclRule vspAclRule = _nuageVspEntityBuilder.buildVspAclRule(_mockedFirewallRule, _mockedNetwork); + validateVspAclRule(vspAclRule, true); + + vspAclRule = _nuageVspEntityBuilder.buildVspAclRule(_mockedNetworkAclItem); + validateVspAclRule(vspAclRule, false); + } + + private void validateVspDomain(VspDomain vspDomain) { + assertEquals("domainUuid", vspDomain.getUuid()); + assertEquals("domainName", vspDomain.getName()); + assertEquals("domainPath", vspDomain.getPath()); + } + + private void validateVspNetwork(VspNetwork vspNetwork, boolean isL2, boolean isL3, boolean isVpc, boolean isShared, + String domainTemplateName, boolean hasAddressRanges) { + assertEquals(NETWORK_ID, vspNetwork.getId()); + assertEquals("networkUuid", vspNetwork.getUuid()); + assertEquals("networkName", vspNetwork.getName()); + assertNotNull(vspNetwork.getVspDomain()); + validateVspDomain(vspNetwork.getVspDomain()); + assertEquals("accountName", vspNetwork.getAccountName()); + assertEquals("accountUuid", vspNetwork.getAccountUuid()); + + if (isVpc) { + assertEquals("vpcUuid", vspNetwork.getVpcUuid()); + assertEquals("vpcName", vspNetwork.getVpcName()); + } else { + assertNull(vspNetwork.getVpcUuid()); + assertNull(vspNetwork.getVpcName()); + } + + assertEquals(isL2, vspNetwork.isL2()); + assertEquals(isL3, vspNetwork.isL3()); + assertEquals(isVpc, vspNetwork.isVpc()); + assertEquals(isShared, vspNetwork.isShared()); + assertEquals(true, vspNetwork.isFirewallServiceSupported()); + assertEquals(true, vspNetwork.isEgressDefaultPolicy()); + assertEquals(domainTemplateName, vspNetwork.getDomainTemplateName()); + assertEquals("10.10.10.0/24", vspNetwork.getCidr()); + assertEquals("10.10.10.1", vspNetwork.getGateway()); + + if (hasAddressRanges) { + if (isShared) { + assertEquals("192.168.2.2", vspNetwork.getVirtualRouterIp()); + } else { + assertEquals("10.10.10.2", vspNetwork.getVirtualRouterIp()); + } + + List> ipAddressRanges; + if (isShared) { + ipAddressRanges = Lists.newArrayList(Pair.of("192.168.2.3", "192.168.2.200")); + } else { + ipAddressRanges = Lists.newArrayList(Pair.of("10.10.10.3", "10.10.10.254")); + } + assertEquals(ipAddressRanges, vspNetwork.getIpAddressRanges()); + } + } + + private void validateVspVm(VspVm vspVm, boolean isDomainRouter) { + assertEquals("virtualMachineUuid", vspVm.getUuid()); + assertEquals("virtualMachineInstanceName", vspVm.getName()); + assertEquals(VspVm.State.Running, vspVm.getState()); + assertEquals(isDomainRouter, vspVm.getDomainRouter()); + } + + private void validateVspNic(VspNic vspNic) { + assertEquals("nicUuid", vspNic.getUuid()); + assertEquals("macAddress", vspNic.getMacAddress()); + assertEquals(true, vspNic.getUseStaticIp()); + assertEquals("10.10.10.2", vspNic.getIp()); + } + + private void validateVspStaticNat(VspStaticNat vspStaticNat, Boolean forRevoke) { + assertEquals("staticNatIpUuid", vspStaticNat.getIpUuid()); + assertEquals("10.10.10.2", vspStaticNat.getIpAddress()); + assertEquals(forRevoke, vspStaticNat.getRevoke()); + assertEquals(true, vspStaticNat.getOneToOneNat()); + assertEquals("staticNatVlanUuid", vspStaticNat.getVlanUuid()); + assertEquals("10.10.10.1", vspStaticNat.getVlanGateway()); + assertEquals("255.255.255.0", vspStaticNat.getVlanNetmask()); + } + + private void validateVspAclRule(VspAclRule vspAclRule, boolean isFirewall) { + assertEquals("aclUuid", vspAclRule.getUuid()); + assertEquals("aclProtocol", vspAclRule.getProtocol()); + assertEquals(new Integer(1), vspAclRule.getStartPort()); + assertEquals(new Integer(20), vspAclRule.getEndPort()); + assertEquals(Lists.newArrayList("10.10.0.0/16"), vspAclRule.getSourceCidrList()); + assertEquals(VspAclRule.ACLState.Active, vspAclRule.getState()); + assertEquals(VspAclRule.ACLTrafficType.Egress, vspAclRule.getTrafficType()); + + if (isFirewall) { + assertEquals(VspAclRule.ACLType.Firewall, vspAclRule.getType()); + assertEquals("192.168.0.24/32", vspAclRule.getSourceIpAddress()); + assertEquals(VspAclRule.ACLAction.Deny, vspAclRule.getAction()); + } else { + assertEquals(VspAclRule.ACLType.NetworkACL, vspAclRule.getType()); + assertNull(vspAclRule.getSourceIpAddress()); + assertEquals(VspAclRule.ACLAction.Allow, vspAclRule.getAction()); + } + } + + private void setUpMockedDomain() { + when(_mockedDomain.getUuid()).thenReturn("domainUuid"); + when(_mockedDomain.getName()).thenReturn("domainName"); + when(_mockedDomain.getPath()).thenReturn("domainPath"); + } + + private void setUpMockedAccount() { + when(_mockedAccount.getUuid()).thenReturn("accountUuid"); + when(_mockedAccount.getAccountName()).thenReturn("accountName"); + } + + private void setUpMockedNetworkOffering(NetworkOfferingVO networkOfferingToMock, Network.GuestType guestType) { + when(networkOfferingToMock.getEgressDefaultPolicy()).thenReturn(true); + when(networkOfferingToMock.getGuestType()).thenReturn(guestType); + } + + private void setUpMockedVlan() { + when(_mockedVlan.getIpRange()).thenReturn("192.168.2.2-192.168.2.200"); + } + + private void setUpMockedVpc() { + when(_mockedVpc.getUuid()).thenReturn("vpcUuid"); + when(_mockedVpc.getName()).thenReturn("vpcName"); + } + + private void setUpMockedNetwork(NetworkVO networkToMock, long networkOfferingId, Long vpcId) { + when(networkToMock.getId()).thenReturn(NETWORK_ID); + when(networkToMock.getUuid()).thenReturn("networkUuid"); + when(networkToMock.getName()).thenReturn("networkName"); + when(networkToMock.getCidr()).thenReturn("10.10.10.0/24"); + when(networkToMock.getGateway()).thenReturn("10.10.10.1"); + when(networkToMock.getDomainId()).thenReturn(DOMAIN_ID); + when(networkToMock.getAccountId()).thenReturn(ACCOUNT_ID); + when(networkToMock.getNetworkOfferingId()).thenReturn(networkOfferingId); + when(networkToMock.getVpcId()).thenReturn(vpcId != null ? vpcId : null); + } + + private void setUpMockedVirtualMachine(VirtualMachine virtualMachineToMock, boolean isDomainRouter) { + when(virtualMachineToMock.getUuid()).thenReturn("virtualMachineUuid"); + when(virtualMachineToMock.getInstanceName()).thenReturn("virtualMachineInstanceName"); + when(virtualMachineToMock.getState()).thenReturn(VirtualMachine.State.Running); + when(virtualMachineToMock.getType()).thenReturn(isDomainRouter ? VirtualMachine.Type.DomainRouter : VirtualMachine.Type.User); + } + + private void setUpMockedNicProfile() { + when(_mockedNicProfile.getMacAddress()).thenReturn("macAddress"); + when(_mockedNicProfile.getIPv4Address()).thenReturn("10.10.10.2"); + } + + private void setUpMockedNic() { + when(_mockedNic.getUuid()).thenReturn("nicUuid"); + when(_mockedNic.getMacAddress()).thenReturn("macAddress"); + when(_mockedNic.getIPv4Address()).thenReturn("10.10.10.2"); + } + + private void setUpMockedStaticNatIp() { + when(_mockedStaticNatIp.getUuid()).thenReturn("staticNatIpUuid"); + when(_mockedStaticNatIp.getAddress()).thenReturn(new Ip("10.10.10.2")); + when(_mockedStaticNatIp.isOneToOneNat()).thenReturn(true); + when(_mockedStaticNatIp.getVmIp()).thenReturn("192.168.0.24"); + } + + private void setUpMockedStaticNatVlan() { + when(_mockedStaticNatVlan.getUuid()).thenReturn("staticNatVlanUuid"); + when(_mockedStaticNatVlan.getVlanGateway()).thenReturn("10.10.10.1"); + when(_mockedStaticNatVlan.getVlanNetmask()).thenReturn("255.255.255.0"); + } + + private void setUpMockedFirewallRule() { + when(_mockedFirewallRule.getUuid()).thenReturn("aclUuid"); + when(_mockedFirewallRule.getProtocol()).thenReturn("aclProtocol"); + when(_mockedFirewallRule.getSourcePortStart()).thenReturn(1); + when(_mockedFirewallRule.getSourcePortEnd()).thenReturn(20); + when(_mockedFirewallRule.getSourceCidrList()).thenReturn(Lists.newArrayList("10.10.0.0/16")); + when(_mockedFirewallRule.getState()).thenReturn(FirewallRule.State.Active); + when(_mockedFirewallRule.getTrafficType()).thenReturn(FirewallRule.TrafficType.Egress); + when(_mockedFirewallRule.getSourceIpAddressId()).thenReturn(SOURCE_IP_ADDRESS_ID); + } + + private void setUpMockedNetworkAclItem() { + when(_mockedNetworkAclItem.getUuid()).thenReturn("aclUuid"); + when(_mockedNetworkAclItem.getProtocol()).thenReturn("aclProtocol"); + when(_mockedNetworkAclItem.getSourcePortStart()).thenReturn(1); + when(_mockedNetworkAclItem.getSourcePortEnd()).thenReturn(20); + when(_mockedNetworkAclItem.getSourceCidrList()).thenReturn(Lists.newArrayList("10.10.0.0/16")); + when(_mockedNetworkAclItem.getNumber()).thenReturn(1337); + when(_mockedNetworkAclItem.getState()).thenReturn(NetworkACLItem.State.Active); + when(_mockedNetworkAclItem.getTrafficType()).thenReturn(NetworkACLItem.TrafficType.Egress); + when(_mockedNetworkAclItem.getAction()).thenReturn(NetworkACLItem.Action.Allow); + } + + private void setUpMockedDaoCalls() { + when(_domainDao.findById(DOMAIN_ID)).thenReturn(_mockedDomain); + when(_accountDao.findById(ACCOUNT_ID)).thenReturn(_mockedAccount); + when(_networkOfferingDao.findById(NETWORK_OFFERING_ID)).thenReturn(_mockedNetworkOffering); + when(_networkOfferingDao.findById(SHARED_NETWORK_OFFERING_ID)).thenReturn(_mockedSharedNetworkOffering); + when(_networkOfferingDao.findById(L2_NETWORK_OFFERING_ID)).thenReturn(_mockedL2NetworkOffering); + when(_networkOfferingServiceMapDao.areServicesSupportedByNetworkOffering(NETWORK_OFFERING_ID, Network.Service.SourceNat)).thenReturn(true); + when(_networkOfferingServiceMapDao.areServicesSupportedByNetworkOffering(NETWORK_OFFERING_ID, Network.Service.StaticNat)).thenReturn(true); + when(_networkOfferingServiceMapDao.areServicesSupportedByNetworkOffering(SHARED_NETWORK_OFFERING_ID, Network.Service.SourceNat)).thenReturn(true); + when(_networkOfferingServiceMapDao.areServicesSupportedByNetworkOffering(SHARED_NETWORK_OFFERING_ID, Network.Service.StaticNat)).thenReturn(true); + when(_networkOfferingServiceMapDao.areServicesSupportedByNetworkOffering(L2_NETWORK_OFFERING_ID, Network.Service.SourceNat)).thenReturn(false); + when(_networkOfferingServiceMapDao.areServicesSupportedByNetworkOffering(L2_NETWORK_OFFERING_ID, Network.Service.StaticNat)).thenReturn(false); + when(_networkModel.areServicesSupportedByNetworkOffering(NETWORK_OFFERING_ID, Network.Service.Firewall)).thenReturn(true); + when(_networkModel.areServicesSupportedByNetworkOffering(SHARED_NETWORK_OFFERING_ID, Network.Service.Firewall)).thenReturn(true); + when(_networkModel.areServicesSupportedByNetworkOffering(L2_NETWORK_OFFERING_ID, Network.Service.Firewall)).thenReturn(true); + when(_vlanDao.listVlansByNetworkId(NETWORK_ID)).thenReturn(Lists.newArrayList(_mockedVlan)); + when(_vpcDao.findById(VPC_ID)).thenReturn(_mockedVpc); + when(_ipAddressDao.findById(SOURCE_IP_ADDRESS_ID)).thenReturn(_mockedStaticNatIp); + } +} diff --git a/plugins/pom.xml b/plugins/pom.xml index 25f06876fad..d05e6304113 100755 --- a/plugins/pom.xml +++ b/plugins/pom.xml @@ -75,6 +75,7 @@ network-elements/palo-alto network-elements/netscaler network-elements/nicira-nvp + network-elements/nuage-vsp network-elements/bigswitch network-elements/brocade-vcs network-elements/midonet @@ -170,17 +171,6 @@ network-elements/juniper-srx - - nuagevsp - - - noredist - - - - network-elements/nuage-vsp - - vmware diff --git a/ui/scripts/system.js b/ui/scripts/system.js index d54428322bc..642370feb2a 100644 --- a/ui/scripts/system.js +++ b/ui/scripts/system.js @@ -7109,7 +7109,7 @@ }, apiversion: { label: 'label.api.version', - defaultValue: 'v1_0', + defaultValue: 'v3_2', validation: { required: true }, @@ -13185,7 +13185,7 @@ }, apiversion: { label: 'label.api.version', - defaultValue: 'v1_0' + defaultValue: 'v3_2' }, retrycount: { label: 'label.numretries', From 4b6179940d8f29873a0cc0b4b0bc5b2f8e248ca5 Mon Sep 17 00:00:00 2001 From: Nick Livens Date: Mon, 2 May 2016 10:16:06 +0200 Subject: [PATCH 2/4] CLOUDSTACK-9294 : Make sure to remove VR from VSD when removing the VPC --- .../src/com/cloud/vm/dao/DomainRouterDao.java | 2 ++ .../com/cloud/vm/dao/DomainRouterDaoImpl.java | 8 ++++++++ .../api/element/ShutDownVpcVspCommand.java | 13 +++++++++++- .../network/element/NuageVspElement.java | 20 ++++++++++++++++++- .../network/resource/NuageVspResource.java | 2 +- .../network/element/NuageVspElementTest.java | 11 +++++++++- .../resource/NuageVspResourceTest.java | 4 ++-- 7 files changed, 54 insertions(+), 6 deletions(-) diff --git a/engine/schema/src/com/cloud/vm/dao/DomainRouterDao.java b/engine/schema/src/com/cloud/vm/dao/DomainRouterDao.java index d555e7930d0..ef8829ef018 100644 --- a/engine/schema/src/com/cloud/vm/dao/DomainRouterDao.java +++ b/engine/schema/src/com/cloud/vm/dao/DomainRouterDao.java @@ -156,4 +156,6 @@ public interface DomainRouterDao extends GenericDao { List listRunningByDataCenter(long dcId); List listStopped(long networkId); + + List listIncludingRemovedByVpcId(long vpcId); } diff --git a/engine/schema/src/com/cloud/vm/dao/DomainRouterDaoImpl.java b/engine/schema/src/com/cloud/vm/dao/DomainRouterDaoImpl.java index 271644f8362..85a8a936b5c 100644 --- a/engine/schema/src/com/cloud/vm/dao/DomainRouterDaoImpl.java +++ b/engine/schema/src/com/cloud/vm/dao/DomainRouterDaoImpl.java @@ -432,4 +432,12 @@ public class DomainRouterDaoImpl extends GenericDaoBase im sc.setParameters("states", State.Stopped); return listBy(sc); } + + @Override + public List listIncludingRemovedByVpcId(long vpcId) { + SearchCriteria sc = VpcSearch.create(); + sc.setParameters("vpcId", vpcId); + sc.setParameters("role", Role.VIRTUAL_ROUTER); + return listIncludingRemovedBy(sc); + } } diff --git a/plugins/network-elements/nuage-vsp/src/com/cloud/agent/api/element/ShutDownVpcVspCommand.java b/plugins/network-elements/nuage-vsp/src/com/cloud/agent/api/element/ShutDownVpcVspCommand.java index d91734bcf0b..6ad4ec6c401 100644 --- a/plugins/network-elements/nuage-vsp/src/com/cloud/agent/api/element/ShutDownVpcVspCommand.java +++ b/plugins/network-elements/nuage-vsp/src/com/cloud/agent/api/element/ShutDownVpcVspCommand.java @@ -21,17 +21,21 @@ package com.cloud.agent.api.element; import com.cloud.agent.api.Command; +import java.util.List; + public class ShutDownVpcVspCommand extends Command { private final String _domainUuid; private final String _vpcUuid; private final String _domainTemplateName; + private final List _domainRouterUuids; - public ShutDownVpcVspCommand(String domainUuid, String vpcUuid, String domainTemplateName) { + public ShutDownVpcVspCommand(String domainUuid, String vpcUuid, String domainTemplateName, List domainRouterUuids) { super(); this._domainUuid = domainUuid; this._vpcUuid = vpcUuid; this._domainTemplateName = domainTemplateName; + this._domainRouterUuids = domainRouterUuids; } public String getDomainUuid() { @@ -46,6 +50,10 @@ public class ShutDownVpcVspCommand extends Command { return _domainTemplateName; } + public List getDomainRouterUuids() { + return _domainRouterUuids; + } + @Override public boolean executeInSequence() { return false; @@ -59,6 +67,8 @@ public class ShutDownVpcVspCommand extends Command { 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; @@ -73,6 +83,7 @@ public class ShutDownVpcVspCommand extends Command { 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; } } diff --git a/plugins/network-elements/nuage-vsp/src/com/cloud/network/element/NuageVspElement.java b/plugins/network-elements/nuage-vsp/src/com/cloud/network/element/NuageVspElement.java index 531c8284ec0..1f36ae0c3d3 100644 --- a/plugins/network-elements/nuage-vsp/src/com/cloud/network/element/NuageVspElement.java +++ b/plugins/network-elements/nuage-vsp/src/com/cloud/network/element/NuageVspElement.java @@ -82,10 +82,12 @@ import com.cloud.resource.ServerResource; import com.cloud.resource.UnableDeleteHostException; import com.cloud.utils.component.AdapterBase; import com.cloud.utils.exception.CloudRuntimeException; +import com.cloud.vm.DomainRouterVO; import com.cloud.vm.NicProfile; import com.cloud.vm.NicVO; 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; @@ -98,6 +100,7 @@ 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; @@ -166,6 +169,8 @@ public class NuageVspElement extends AdapterBase implements ConnectivityProvider NuageVspEntityBuilder _nuageVspEntityBuilder; @Inject VpcDetailsDao _vpcDetailsDao; + @Inject + DomainRouterDao _routerDao; @Override public boolean applyIps(Network network, List ipAddress, Set service) throws ResourceUnavailableException { @@ -552,6 +557,19 @@ public class NuageVspElement extends AdapterBase implements ConnectivityProvider @Override public boolean shutdownVpc(Vpc vpc, ReservationContext context) throws ConcurrentOperationException, ResourceUnavailableException { if (vpc.getState().equals(Vpc.State.Inactive)) { + List routers = _routerDao.listByVpcId(vpc.getId()); + if (CollectionUtils.isEmpty(routers)) { + routers = _routerDao.listIncludingRemovedByVpcId(vpc.getId()); + } + + List domainRouterUuids = Lists.transform(routers, new Function() { + @Nullable + @Override + public String apply(@Nullable DomainRouterVO input) { + return input != null ? input.getUuid() : null; + } + }); + Domain vpcDomain = _domainDao.findById(vpc.getDomainId()); HostVO nuageVspHost = getNuageVspHost(getPhysicalNetworkId(vpc.getZoneId())); @@ -563,7 +581,7 @@ public class NuageVspElement extends AdapterBase implements ConnectivityProvider preConfiguredDomainTemplateName = _configDao.getValue(NuageVspManager.NuageVspVpcDomainTemplateName.key()); } - ShutDownVpcVspCommand cmd = new ShutDownVpcVspCommand(vpcDomain.getUuid(), vpc.getUuid(), preConfiguredDomainTemplateName); + ShutDownVpcVspCommand cmd = new ShutDownVpcVspCommand(vpcDomain.getUuid(), vpc.getUuid(), preConfiguredDomainTemplateName, domainRouterUuids); Answer answer = _agentMgr.easySend(nuageVspHost.getId(), cmd); if (answer == null || !answer.getResult()) { s_logger.error("ShutDownVpcVspCommand for VPC " + vpc.getUuid() + " failed on Nuage VSD " + nuageVspHost.getDetail("hostname")); diff --git a/plugins/network-elements/nuage-vsp/src/com/cloud/network/resource/NuageVspResource.java b/plugins/network-elements/nuage-vsp/src/com/cloud/network/resource/NuageVspResource.java index 677fa9fce3e..bdcb481a013 100644 --- a/plugins/network-elements/nuage-vsp/src/com/cloud/network/resource/NuageVspResource.java +++ b/plugins/network-elements/nuage-vsp/src/com/cloud/network/resource/NuageVspResource.java @@ -423,7 +423,7 @@ public class NuageVspResource extends ManagerBase implements ServerResource { private Answer executeRequest(ShutDownVpcVspCommand cmd) { try { isNuageVspElementLoaded(); - _nuageVspElementClient.shutdownVpc(cmd.getDomainUuid(), cmd.getVpcUuid(), cmd.getDomainTemplateName()); + _nuageVspElementClient.shutdownVpc(cmd.getDomainUuid(), cmd.getVpcUuid(), cmd.getDomainTemplateName(), cmd.getDomainRouterUuids()); return new Answer(cmd, true, "Shutdown VPC " + cmd.getVpcUuid() + " on Nuage VSD " + _hostName); } catch (ExecutionException | ConfigurationException e) { s_logger.error("Failure during " + cmd + " on Nuage VSD " + _hostName, e); diff --git a/plugins/network-elements/nuage-vsp/test/com/cloud/network/element/NuageVspElementTest.java b/plugins/network-elements/nuage-vsp/test/com/cloud/network/element/NuageVspElementTest.java index e9f92b6976f..85cbb361c9a 100644 --- a/plugins/network-elements/nuage-vsp/test/com/cloud/network/element/NuageVspElementTest.java +++ b/plugins/network-elements/nuage-vsp/test/com/cloud/network/element/NuageVspElementTest.java @@ -60,7 +60,9 @@ import com.cloud.offerings.dao.NetworkOfferingServiceMapDao; import com.cloud.resource.ResourceManager; import com.cloud.user.Account; 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; @@ -98,6 +100,7 @@ public class NuageVspElementTest extends NuageTest { private PhysicalNetworkDao _physicalNetworkDao = mock(PhysicalNetworkDao.class); private NuageVspEntityBuilder _nuageVspEntityBuilder = mock(NuageVspEntityBuilder.class); private VpcDetailsDao _vpcDetailsDao = mock(VpcDetailsDao.class); + private DomainRouterDao _domainRouterDao = mock(DomainRouterDao.class); @Before public void setUp() throws Exception { @@ -119,6 +122,7 @@ public class NuageVspElementTest extends NuageTest { _nuageVspElement._physicalNetworkDao = _physicalNetworkDao; _nuageVspElement._nuageVspEntityBuilder = _nuageVspEntityBuilder; _nuageVspElement._vpcDetailsDao = _vpcDetailsDao; + _nuageVspElement._routerDao = _domainRouterDao; _nuageVspElement.configure("NuageVspTestElement", Collections.emptyMap()); } @@ -314,6 +318,7 @@ public class NuageVspElementTest extends NuageTest { when(vpc.getState()).thenReturn(Vpc.State.Inactive); when(vpc.getDomainId()).thenReturn(NETWORK_ID); when(vpc.getZoneId()).thenReturn(NETWORK_ID); + when(vpc.getId()).thenReturn(NETWORK_ID); final DomainVO dom = mock(DomainVO.class); when(dom.getName()).thenReturn("domain"); @@ -333,9 +338,13 @@ public class NuageVspElementTest extends NuageTest { 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(_nuageVspDao.listByPhysicalNetwork(NETWORK_ID)).thenReturn(Lists.newArrayList(nuageVspDevice)); when(_hostDao.findById(NETWORK_ID)).thenReturn(host); + DomainRouterVO domainRouter = mock(DomainRouterVO.class); + when(domainRouter.getUuid()).thenReturn("aaaaaa"); + when(_domainRouterDao.listByVpcId(NETWORK_ID)).thenReturn(Lists.newArrayList(domainRouter)); + final Answer answer = mock(Answer.class); when(answer.getResult()).thenReturn(true); when(_agentManager.easySend(eq(NETWORK_ID), (Command)any())).thenReturn(answer); diff --git a/plugins/network-elements/nuage-vsp/test/com/cloud/network/resource/NuageVspResourceTest.java b/plugins/network-elements/nuage-vsp/test/com/cloud/network/resource/NuageVspResourceTest.java index 9c51864e49a..66d26323aa0 100644 --- a/plugins/network-elements/nuage-vsp/test/com/cloud/network/resource/NuageVspResourceTest.java +++ b/plugins/network-elements/nuage-vsp/test/com/cloud/network/resource/NuageVspResourceTest.java @@ -223,8 +223,8 @@ public class NuageVspResourceTest extends NuageTest { public void testShutDownVpcVspCommand() throws Exception { _resource.configure("NuageVspResource", _hostDetails); - ShutDownVpcVspCommand cmd = new ShutDownVpcVspCommand("domainUuid", "vpcUuid", "domainTemplateName"); - doAnswer(genericAnswer).when(_mockNuageVspElementClient).shutdownVpc("domainUuid", "vpcUuid", "domainTemplateName"); + ShutDownVpcVspCommand cmd = new ShutDownVpcVspCommand("domainUuid", "vpcUuid", "domainTemplateName", Lists.newArrayList()); + doAnswer(genericAnswer).when(_mockNuageVspElementClient).shutdownVpc("domainUuid", "vpcUuid", "domainTemplateName", Lists.newArrayList()); Answer shutVpcAns = _resource.executeRequest(cmd); assertTrue(shutVpcAns.getResult()); } From d862a09771dca8d71da1727fdd09234d602d573b Mon Sep 17 00:00:00 2001 From: Nick Livens Date: Mon, 2 May 2016 10:16:21 +0200 Subject: [PATCH 3/4] Nuage VSP : Fix for NPE while cleaning up account when there are still resources belonging to that account --- .../nuage-vsp/src/com/cloud/util/NuageVspEntityBuilder.java | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/plugins/network-elements/nuage-vsp/src/com/cloud/util/NuageVspEntityBuilder.java b/plugins/network-elements/nuage-vsp/src/com/cloud/util/NuageVspEntityBuilder.java index 135a552e2d5..8757ad02120 100644 --- a/plugins/network-elements/nuage-vsp/src/com/cloud/util/NuageVspEntityBuilder.java +++ b/plugins/network-elements/nuage-vsp/src/com/cloud/util/NuageVspEntityBuilder.java @@ -109,7 +109,9 @@ public class NuageVspEntityBuilder { vspNetworkBuilder.domain(vspDomain); AccountVO account = _accountDao.findById(network.getAccountId()); - vspNetworkBuilder.accountUuid(account.getUuid()).accountName(account.getAccountName()); + if (account != null) { + vspNetworkBuilder.accountUuid(account.getUuid()).accountName(account.getAccountName()); + } NetworkOfferingVO networkOffering = _networkOfferingDao.findById(network.getNetworkOfferingId()); vspNetworkBuilder.egressDefaultPolicy(networkOffering.getEgressDefaultPolicy()); From 2ca0d9b0e105e9b6d5462319e0ada716d3b66e55 Mon Sep 17 00:00:00 2001 From: Prashanth Manthena Date: Mon, 2 May 2016 10:16:34 +0200 Subject: [PATCH 4/4] Nuage VSP : Extending Marvin test coverage --- .../plugins/nuagevsp/nuageTestCase.py | 8 ++++-- .../nuagevsp/test_nuage_vpc_network.py | 28 +++++++++++++++---- tools/marvin/marvin/deployDataCenter.py | 17 ++++++++++- 3 files changed, 43 insertions(+), 10 deletions(-) diff --git a/test/integration/plugins/nuagevsp/nuageTestCase.py b/test/integration/plugins/nuagevsp/nuageTestCase.py index 9d0d07743a1..11032a62f11 100644 --- a/test/integration/plugins/nuagevsp/nuageTestCase.py +++ b/test/integration/plugins/nuagevsp/nuageTestCase.py @@ -50,7 +50,7 @@ import socket class nuageTestCase(cloudstackTestCase): @classmethod - def setUpClass(cls): + def setUpClass(cls, zone=None): cls.debug("setUpClass nuageTestCase") # We want to fail quicker, if it's a failure @@ -60,9 +60,11 @@ class nuageTestCase(cloudstackTestCase): cls.api_client = test_client.getApiClient() cls.db_client = test_client.getDbConnection() cls.test_data = test_client.getParsedTestDataConfig() - # Get Zone, Domain and templates - cls.zone = get_zone(cls.api_client) + cls.zone = get_zone(cls.api_client, + zone_name=zone.name if zone else None, + zone_id=zone.id if zone else None + ) cls.domain = get_domain(cls.api_client) cls.template = get_template(cls.api_client, cls.zone.id, diff --git a/test/integration/plugins/nuagevsp/test_nuage_vpc_network.py b/test/integration/plugins/nuagevsp/test_nuage_vpc_network.py index a8361d0e0bf..15134b628b3 100644 --- a/test/integration/plugins/nuagevsp/test_nuage_vpc_network.py +++ b/test/integration/plugins/nuagevsp/test_nuage_vpc_network.py @@ -15,22 +15,22 @@ # specific language governing permissions and limitations # under the License. -""" Tests for basic VPC Network functionality with Nuage VSP SDN plugin +""" Component tests for basic VPC Network functionality with Nuage VSP SDN plugin """ # Import Local Modules from nuageTestCase import nuageTestCase -from marvin.lib.base import Account +from marvin.lib.base import Account, Zone # Import System Modules from nose.plugins.attrib import attr -class TestVpcNetworkNuage(nuageTestCase): +class TestNuageVpcNetwork(nuageTestCase): """ Test basic VPC Network functionality with Nuage VSP SDN plugin """ @classmethod - def setUpClass(cls): - super(TestVpcNetworkNuage, cls).setUpClass() + def setUpClass(cls, zone=None): + super(TestNuageVpcNetwork, cls).setUpClass(zone=zone) return def setUp(self): @@ -45,7 +45,7 @@ class TestVpcNetworkNuage(nuageTestCase): @attr(tags=["advanced", "nuagevsp"], required_hardware="false") def test_nuage_vpc_network(self): - """ Test Basic VPC Network Functionality with Nuage VSP SDN plugin + """ Test basic VPC Network functionality with Nuage VSP SDN plugin """ # 1. Create Nuage VSP VPC offering, check if it is successfully created and enabled. @@ -97,3 +97,19 @@ class TestVpcNetworkNuage(nuageTestCase): # VSD verification for ACL item self.verify_vsp_firewall_rule(acl_item) + + @attr(tags=["advanced", "nuagevsp", "multizone"], required_hardware="false") + def test_nuage_vpc_network_multizone(self): + """ Test basic VPC Network functionality with Nuage VSP SDN plugin on multiple zones + """ + + # Repeat the tests in the above testcase "test_nuage_vpc_network" on multiple zones + + self.debug("Testing basic VPC Network functionality with Nuage VSP SDN plugin on multiple zones...") + zones = Zone.list(self.api_client) + if len(zones) == 1: + self.skipTest("There is only one Zone configured: skipping test") + for zone in zones: + self.debug("Zone - %s" % zone.name) + self.setUpClass(zone=zone) + self.test_nuage_vpc_network() diff --git a/tools/marvin/marvin/deployDataCenter.py b/tools/marvin/marvin/deployDataCenter.py index 889aab510b8..24133289ed8 100644 --- a/tools/marvin/marvin/deployDataCenter.py +++ b/tools/marvin/marvin/deployDataCenter.py @@ -561,7 +561,7 @@ class DeployDataCenters(object): netprov.physicalnetworkid = phynetwrk.id result = self.__apiClient.addNetworkServiceProvider(netprov) self.enableProvider(result.id) - elif provider.name in ['Netscaler', 'JuniperSRX', 'F5BigIp', 'NiciraNvp']: + elif provider.name in ['Netscaler', 'JuniperSRX', 'F5BigIp', 'NiciraNvp', 'NuageVsp']: netprov = addNetworkServiceProvider.\ addNetworkServiceProviderCmd() netprov.name = provider.name @@ -631,6 +631,21 @@ class DeployDataCenters(object): self.__tcRunLogger.\ debug("==== AddNiciraNvp Successful =====") self.__addToCleanUp("NiciraNvp", ret.id) + elif provider.name == 'NuageVsp': + dev = addNuageVspDevice.addNuageVspDeviceCmd() + dev.hostname = device.hostname + dev.port = device.port + dev.username = device.username + dev.password = device.password + dev.retrycount = device.retrycount + dev.retryinterval = device.retryinterval + dev.physicalnetworkid = phynetwrk.id + ret = self.__apiClient.addNuageVspDevice(dev) + if ret.id: + self.__tcRunLogger.\ + debug("==== addNuageVspDevice " + "Successful=====") + self.__addToCleanUp("addNuageVspDevice", ret.id) else: raise InvalidParameterException( "Device %s doesn't match "