You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@cloudstack.apache.org by re...@apache.org on 2015/11/18 12:11:19 UTC

[5/7] git commit: updated refs/heads/master to 95ae796

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/645f8758/plugins/network-elements/nuage-vsp/src/com/cloud/agent/api/guru/ImplementNetworkVspCommand.java
----------------------------------------------------------------------
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 0ffbda4..575e57d 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,30 +19,39 @@
 
 package com.cloud.agent.api.guru;
 
-import java.util.Collection;
-
+import com.cloud.agent.api.CmdBuilder;
 import com.cloud.agent.api.Command;
 
+import java.util.Collection;
+import java.util.List;
+
 public class ImplementNetworkVspCommand extends Command {
 
-    String _networkDomainName;
-    String _networkDomainPath;
-    String _networkDomainUuid;
-    String _networkAccountName;
-    String _networkAccountUuid;
-    String _networkName;
-    String _networkCidr;
-    String _networkGateway;
-    String _networkUuid;
-    boolean _isL3Network;
-    String _vpcName;
-    String _vpcUuid;
-    boolean _defaultEgressPolicy;
-    Collection<String> _ipAddressRange;
-
-    public ImplementNetworkVspCommand(String networkDomainName, String networkDomainPath, String networkDomainUuid, String networkAccountName, String networkAccountUuid,
-            String networkName, String networkCidr, String networkGateway, String networkUuid, boolean isL3Network, String vpcName, String vpcUuid, boolean defaultEgressPolicy,
-            Collection<String> ipAddressRange) {
+    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 List<String> _dnsServers;
+    private final List<String> _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<String[]> _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<String> dnsServers, List<String> gatewaySystemIds, String networkUuid,
+            boolean isL3Network, boolean isVpc, boolean isSharedNetwork, String vpcName, String vpcUuid, boolean defaultEgressPolicy, List<String[]> ipAddressRange,
+            String domainTemplateName) {
         super();
         this._networkDomainName = networkDomainName;
         this._networkDomainPath = networkDomainPath;
@@ -52,12 +61,18 @@ public class ImplementNetworkVspCommand extends Command {
         this._networkName = networkName;
         this._networkCidr = networkCidr;
         this._networkGateway = networkGateway;
+        this._networkAclId = networkAclId;
+        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() {
@@ -92,6 +107,18 @@ public class ImplementNetworkVspCommand extends Command {
         return _networkGateway;
     }
 
+    public Long getNetworkAclId() {
+        return _networkAclId;
+    }
+
+    public List<String> getDnsServers() {
+        return _dnsServers;
+    }
+
+    public List<String> getGatewaySystemIds() {
+        return _gatewaySystemIds;
+    }
+
     public String getNetworkUuid() {
         return _networkUuid;
     }
@@ -100,6 +127,14 @@ public class ImplementNetworkVspCommand extends Command {
         return _isL3Network;
     }
 
+    public boolean isVpc() {
+        return _isVpc;
+    }
+
+    public boolean isSharedNetwork() {
+        return _isSharedNetwork;
+    }
+
     public String getVpcName() {
         return _vpcName;
     }
@@ -112,13 +147,214 @@ public class ImplementNetworkVspCommand extends Command {
         return _defaultEgressPolicy;
     }
 
-    public Collection<String> getIpAddressRange() {
+    public Collection<String[]> getIpAddressRange() {
         return _ipAddressRange;
     }
 
+    public String getDomainTemplateName() {
+        return _domainTemplateName;
+    }
+
+    public static class Builder implements CmdBuilder<ImplementNetworkVspCommand> {
+        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<String> _dnsServers;
+        private List<String> _gatewaySystemIds;
+        private String _networkUuid;
+        private boolean _isL3Network;
+        private boolean _isVpc;
+        private boolean _isSharedNetwork;
+        private String _vpcName;
+        private String _vpcUuid;
+        private boolean _defaultEgressPolicy;
+        private List<String[]> _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<String> dnsServers) {
+            this._dnsServers = dnsServers;
+            return this;
+        }
+
+        public Builder gatewaySystemIds(List<String> 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<String[]> 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;
     }
 
+    @Override
+    public boolean equals(Object o) {
+        if (this == o) return true;
+        if (!(o instanceof ImplementNetworkVspCommand)) return false;
+        if (!super.equals(o)) return false;
+
+        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;
+
+        return true;
+    }
+
+    @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 + (_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;
+    }
 }

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/645f8758/plugins/network-elements/nuage-vsp/src/com/cloud/agent/api/guru/ReleaseVmVspAnswer.java
----------------------------------------------------------------------
diff --git a/plugins/network-elements/nuage-vsp/src/com/cloud/agent/api/guru/ReleaseVmVspAnswer.java b/plugins/network-elements/nuage-vsp/src/com/cloud/agent/api/guru/ReleaseVmVspAnswer.java
deleted file mode 100644
index 8bc8e4c..0000000
--- a/plugins/network-elements/nuage-vsp/src/com/cloud/agent/api/guru/ReleaseVmVspAnswer.java
+++ /dev/null
@@ -1,34 +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.guru;
-
-import com.cloud.agent.api.Answer;
-import com.cloud.agent.api.Command;
-
-public class ReleaseVmVspAnswer extends Answer {
-
-    public ReleaseVmVspAnswer(Command command, Exception e) {
-        super(command, e);
-    }
-
-    public ReleaseVmVspAnswer(ReleaseVmVspCommand cmd, boolean success, String details) {
-        super(cmd, success, details);
-    }
-}

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/645f8758/plugins/network-elements/nuage-vsp/src/com/cloud/agent/api/guru/ReleaseVmVspCommand.java
----------------------------------------------------------------------
diff --git a/plugins/network-elements/nuage-vsp/src/com/cloud/agent/api/guru/ReleaseVmVspCommand.java b/plugins/network-elements/nuage-vsp/src/com/cloud/agent/api/guru/ReleaseVmVspCommand.java
deleted file mode 100644
index 9a6a4d7..0000000
--- a/plugins/network-elements/nuage-vsp/src/com/cloud/agent/api/guru/ReleaseVmVspCommand.java
+++ /dev/null
@@ -1,54 +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.guru;
-
-import com.cloud.agent.api.Command;
-
-public class ReleaseVmVspCommand extends Command {
-
-    String _networkUuid;
-    String _vmUuid;
-    String _vmInstanceName;
-
-    public ReleaseVmVspCommand(String networkUuid, String vmUuid, String vmInstanceName) {
-        super();
-        this._networkUuid = networkUuid;
-        this._vmUuid = vmUuid;
-        this._vmInstanceName = vmInstanceName;
-    }
-
-    public String getNetworkUuid() {
-        return _networkUuid;
-    }
-
-    public String getVmUuid() {
-        return _vmUuid;
-    }
-
-    public String getVmInstanceName() {
-        return _vmInstanceName;
-    }
-
-    @Override
-    public boolean executeInSequence() {
-        return false;
-    }
-
-}

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/645f8758/plugins/network-elements/nuage-vsp/src/com/cloud/agent/api/guru/ReserveVmInterfaceVspAnswer.java
----------------------------------------------------------------------
diff --git a/plugins/network-elements/nuage-vsp/src/com/cloud/agent/api/guru/ReserveVmInterfaceVspAnswer.java b/plugins/network-elements/nuage-vsp/src/com/cloud/agent/api/guru/ReserveVmInterfaceVspAnswer.java
deleted file mode 100644
index 8fabbef..0000000
--- a/plugins/network-elements/nuage-vsp/src/com/cloud/agent/api/guru/ReserveVmInterfaceVspAnswer.java
+++ /dev/null
@@ -1,44 +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.guru;
-
-import java.util.List;
-import java.util.Map;
-
-import com.cloud.agent.api.Answer;
-import com.cloud.agent.api.Command;
-
-public class ReserveVmInterfaceVspAnswer extends Answer {
-
-    public List<Map<String, String>> _interfaceDetails;
-
-    public ReserveVmInterfaceVspAnswer(Command cmd, List<Map<String, String>> interfaceDetails, String details) {
-        super(cmd, true, details);
-        this._interfaceDetails = interfaceDetails;
-    }
-
-    public ReserveVmInterfaceVspAnswer(Command cmd, Exception e) {
-        super(cmd, e);
-    }
-
-    public List<Map<String, String>> getInterfaceDetails() {
-        return this._interfaceDetails;
-    }
-}

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/645f8758/plugins/network-elements/nuage-vsp/src/com/cloud/agent/api/guru/ReserveVmInterfaceVspCommand.java
----------------------------------------------------------------------
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 6844bf9..abcd0f2 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,31 +19,45 @@
 
 package com.cloud.agent.api.guru;
 
+import com.cloud.agent.api.CmdBuilder;
 import com.cloud.agent.api.Command;
 
 public class ReserveVmInterfaceVspCommand extends Command {
 
-    String _nicUuid;
-    String _nicMacAddress;
-    String _networkUuid;
-    boolean _isL3Network;
-    String _vpcUuid;
-    String _networkDomainUuid;
-    String _networksAccountUuid;
-    boolean _isDomainRouter;
-    String _domainRouterIp;
-    String _vmInstanceName;
-    String _vmUuid;
-    String _vmUserName;
-    String _vmUserDomainName;
-
-    public ReserveVmInterfaceVspCommand(String nicUuid, String nicMacAddress, String networkUuid, boolean isL3Network, String vpcUuid, String networkDomainUuid,
-            String networksAccountUuid, boolean isDomainRouter, String domainRouterIp, String vmInstanceName, String vmUuid, String vmUserName, String vmUserDomainName) {
+    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 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) {
         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;
@@ -53,6 +67,15 @@ public class ReserveVmInterfaceVspCommand extends Command {
         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;
     }
 
     public String getNicUuid() {
@@ -71,6 +94,10 @@ public class ReserveVmInterfaceVspCommand extends Command {
         return _isL3Network;
     }
 
+    public boolean isSharedNetwork() {
+        return _isSharedNetwork;
+    }
+
     public String getVpcUuid() {
         return _vpcUuid;
     }
@@ -87,29 +114,287 @@ public class ReserveVmInterfaceVspCommand extends Command {
         return _isDomainRouter;
     }
 
-    public String _getDomainRouterIp() {
+    public String getDomainRouterIp() {
         return _domainRouterIp;
     }
 
-    public String _getVmInstanceName() {
+    public String getVmInstanceName() {
         return _vmInstanceName;
     }
 
-    public String _getVmUuid() {
+    public String getVmUuid() {
         return _vmUuid;
     }
 
-    public String _getVmUserName() {
+    public String getVmUserName() {
         return _vmUserName;
     }
 
-    public String _getVmUserDomainName() {
+    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<ReserveVmInterfaceVspCommand> {
+        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);
+        }
+    }
+
     @Override
     public boolean executeInSequence() {
         return false;
     }
 
+    @Override
+    public boolean equals(Object o) {
+        if (this == o) return true;
+        if (!(o instanceof ReserveVmInterfaceVspCommand)) return false;
+        if (!super.equals(o)) return false;
+
+        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;
+
+        return true;
+    }
+
+    @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);
+        return result;
+    }
 }

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/645f8758/plugins/network-elements/nuage-vsp/src/com/cloud/agent/api/guru/TrashNetworkVspAnswer.java
----------------------------------------------------------------------
diff --git a/plugins/network-elements/nuage-vsp/src/com/cloud/agent/api/guru/TrashNetworkVspAnswer.java b/plugins/network-elements/nuage-vsp/src/com/cloud/agent/api/guru/TrashNetworkVspAnswer.java
deleted file mode 100644
index 0c0c0d2..0000000
--- a/plugins/network-elements/nuage-vsp/src/com/cloud/agent/api/guru/TrashNetworkVspAnswer.java
+++ /dev/null
@@ -1,34 +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.guru;
-
-import com.cloud.agent.api.Answer;
-import com.cloud.agent.api.Command;
-
-public class TrashNetworkVspAnswer extends Answer {
-
-    public TrashNetworkVspAnswer(Command command, Exception e) {
-        super(command, e);
-    }
-
-    public TrashNetworkVspAnswer(TrashNetworkVspCommand cmd, boolean success, String details) {
-        super(cmd, success, details);
-    }
-}

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/645f8758/plugins/network-elements/nuage-vsp/src/com/cloud/agent/api/guru/TrashNetworkVspCommand.java
----------------------------------------------------------------------
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 e10e9be..4a01fdc 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,21 +19,26 @@
 
 package com.cloud.agent.api.guru;
 
+import com.cloud.agent.api.CmdBuilder;
 import com.cloud.agent.api.Command;
 
 public class TrashNetworkVspCommand extends Command {
 
-    String _domainUuid;
-    String _networkUuid;
-    boolean _isL3Network;
-    String _vpcUuid;
+    private final String _domainUuid;
+    private final String _networkUuid;
+    private final boolean _isL3Network;
+    private final boolean _isSharedNetwork;
+    private final String _vpcUuid;
+    private final String _domainTemplateName;
 
-    public TrashNetworkVspCommand(String domainUuid, String networkUuid, boolean isL3Network, String vpcUuid) {
+    private TrashNetworkVspCommand(String domainUuid, String networkUuid, boolean isL3Network, boolean isSharedNetwork, String vpcUuid, String domainTemplateName) {
         super();
         this._domainUuid = domainUuid;
         this._networkUuid = networkUuid;
         this._isL3Network = isL3Network;
+        this._isSharedNetwork = isSharedNetwork;
         this._vpcUuid = vpcUuid;
+        this._domainTemplateName = domainTemplateName;
     }
 
     public String getDomainUuid() {
@@ -48,13 +53,95 @@ public class TrashNetworkVspCommand extends Command {
         return _isL3Network;
     }
 
+    public boolean isSharedNetwork() {
+        return _isSharedNetwork;
+    }
+
     public String getVpcUuid() {
         return _vpcUuid;
     }
 
+    public String getDomainTemplateName() {
+        return _domainTemplateName;
+    }
+
+    public static class Builder implements CmdBuilder<TrashNetworkVspCommand> {
+        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);
+        }
+    }
+
     @Override
     public boolean executeInSequence() {
         return false;
     }
 
+    @Override
+    public boolean equals(Object o) {
+        if (this == o) return true;
+        if (!(o instanceof TrashNetworkVspCommand)) return false;
+        if (!super.equals(o)) return false;
+
+        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;
+
+        return true;
+    }
+
+    @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);
+        return result;
+    }
 }

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/645f8758/plugins/network-elements/nuage-vsp/src/com/cloud/agent/api/manager/GetClientDefaultsAnswer.java
----------------------------------------------------------------------
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
new file mode 100644
index 0000000..f748e1c
--- /dev/null
+++ b/plugins/network-elements/nuage-vsp/src/com/cloud/agent/api/manager/GetClientDefaultsAnswer.java
@@ -0,0 +1,81 @@
+//
+// 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<String, Object> 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;
+    }
+}

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/645f8758/plugins/network-elements/nuage-vsp/src/com/cloud/agent/api/manager/GetClientDefaultsCommand.java
----------------------------------------------------------------------
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/GetClientDefaultsCommand.java
new file mode 100644
index 0000000..2ffbe04
--- /dev/null
+++ b/plugins/network-elements/nuage-vsp/src/com/cloud/agent/api/manager/GetClientDefaultsCommand.java
@@ -0,0 +1,38 @@
+//
+// 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.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 GetClientDefaultsCommand() {
+        super();
+    }
+
+    @Override
+    public boolean executeInSequence() {
+        return false;
+    }
+}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/645f8758/plugins/network-elements/nuage-vsp/src/com/cloud/agent/api/manager/SupportedApiVersionCommand.java
----------------------------------------------------------------------
diff --git a/plugins/network-elements/nuage-vsp/src/com/cloud/agent/api/manager/SupportedApiVersionCommand.java b/plugins/network-elements/nuage-vsp/src/com/cloud/agent/api/manager/SupportedApiVersionCommand.java
new file mode 100644
index 0000000..7a331d6
--- /dev/null
+++ b/plugins/network-elements/nuage-vsp/src/com/cloud/agent/api/manager/SupportedApiVersionCommand.java
@@ -0,0 +1,61 @@
+//
+// 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.Command;
+
+public class SupportedApiVersionCommand extends Command {
+
+    private final String _apiVersion;
+
+    public SupportedApiVersionCommand(String apiVersion) {
+        super();
+        this._apiVersion = apiVersion;
+    }
+
+    public String getApiVersion() {
+        return _apiVersion;
+    }
+
+    @Override
+    public boolean executeInSequence() {
+        return false;
+    }
+
+    @Override
+    public boolean equals(Object o) {
+        if (this == o) return true;
+        if (!(o instanceof SupportedApiVersionCommand)) return false;
+        if (!super.equals(o)) return false;
+
+        SupportedApiVersionCommand that = (SupportedApiVersionCommand) o;
+
+        if (_apiVersion != null ? !_apiVersion.equals(that._apiVersion) : that._apiVersion != null) return false;
+
+        return true;
+    }
+
+    @Override
+    public int hashCode() {
+        int result = super.hashCode();
+        result = 31 * result + (_apiVersion != null ? _apiVersion.hashCode() : 0);
+        return result;
+    }
+}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/645f8758/plugins/network-elements/nuage-vsp/src/com/cloud/agent/api/sync/SyncDomainAnswer.java
----------------------------------------------------------------------
diff --git a/plugins/network-elements/nuage-vsp/src/com/cloud/agent/api/sync/SyncDomainAnswer.java b/plugins/network-elements/nuage-vsp/src/com/cloud/agent/api/sync/SyncDomainAnswer.java
new file mode 100644
index 0000000..fd4822c
--- /dev/null
+++ b/plugins/network-elements/nuage-vsp/src/com/cloud/agent/api/sync/SyncDomainAnswer.java
@@ -0,0 +1,57 @@
+//
+// 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.sync;
+
+import com.cloud.agent.api.Answer;
+
+public class SyncDomainAnswer extends Answer {
+
+    private final boolean _success;
+
+    public SyncDomainAnswer(boolean success) {
+        super();
+        this._success = success;
+    }
+
+    public boolean getSuccess() {
+        return _success;
+    }
+
+
+    @Override
+    public boolean equals(Object o) {
+        if (this == o) return true;
+        if (!(o instanceof SyncDomainAnswer)) return false;
+        if (!super.equals(o)) return false;
+
+        SyncDomainAnswer that = (SyncDomainAnswer) o;
+
+        if (_success != that._success) return false;
+
+        return true;
+    }
+
+    @Override
+    public int hashCode() {
+        int result = super.hashCode();
+        result = 31 * result + (_success ? 1 : 0);
+        return result;
+    }
+}

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/645f8758/plugins/network-elements/nuage-vsp/src/com/cloud/agent/api/sync/SyncDomainCommand.java
----------------------------------------------------------------------
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
new file mode 100644
index 0000000..7ae474f
--- /dev/null
+++ b/plugins/network-elements/nuage-vsp/src/com/cloud/agent/api/sync/SyncDomainCommand.java
@@ -0,0 +1,93 @@
+//
+// 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.sync;
+
+import com.cloud.agent.api.Command;
+
+public class SyncDomainCommand extends Command {
+
+    private final String _domainUuid;
+    private final String _domainName;
+    private final String _domainPath;
+    private final boolean _toAdd;
+    private final boolean _toRemove;
+
+    public SyncDomainCommand(String domainUuid, String domainName, String domainPath, boolean toAdd, boolean toRemove) {
+        super();
+        this._domainUuid = domainUuid;
+        this._domainName = domainName;
+        this._domainPath = domainPath;
+        this._toAdd = toAdd;
+        this._toRemove = toRemove;
+    }
+
+    public String getDomainUuid() {
+        return _domainUuid;
+    }
+
+    public String getDomainName() {
+        return _domainName;
+    }
+
+    public String getDomainPath() {
+        return _domainPath;
+    }
+
+    public boolean isToAdd() {
+        return _toAdd;
+    }
+
+    public boolean isToRemove() {
+        return _toRemove;
+    }
+
+    @Override
+    public boolean executeInSequence() {
+        return false;
+    }
+
+    @Override
+    public boolean equals(Object o) {
+        if (this == o) return true;
+        if (!(o instanceof SyncDomainCommand)) return false;
+        if (!super.equals(o)) return false;
+
+        SyncDomainCommand that = (SyncDomainCommand) o;
+
+        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;
+
+        return true;
+    }
+
+    @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 + (_toAdd ? 1 : 0);
+        result = 31 * result + (_toRemove ? 1 : 0);
+        return result;
+    }
+}

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/645f8758/plugins/network-elements/nuage-vsp/src/com/cloud/agent/api/sync/SyncNuageVspCmsIdAnswer.java
----------------------------------------------------------------------
diff --git a/plugins/network-elements/nuage-vsp/src/com/cloud/agent/api/sync/SyncNuageVspCmsIdAnswer.java b/plugins/network-elements/nuage-vsp/src/com/cloud/agent/api/sync/SyncNuageVspCmsIdAnswer.java
new file mode 100644
index 0000000..b0430e6
--- /dev/null
+++ b/plugins/network-elements/nuage-vsp/src/com/cloud/agent/api/sync/SyncNuageVspCmsIdAnswer.java
@@ -0,0 +1,73 @@
+//
+// 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.sync;
+
+import com.cloud.agent.api.Answer;
+
+public class SyncNuageVspCmsIdAnswer extends Answer {
+
+    private final boolean _success;
+    private final String _nuageVspCmsId;
+    private final SyncNuageVspCmsIdCommand.SyncType _syncType;
+
+    public SyncNuageVspCmsIdAnswer(boolean success, String nuageVspCmsId, SyncNuageVspCmsIdCommand.SyncType syncType) {
+        super();
+        this._success = success;
+        this._nuageVspCmsId = nuageVspCmsId;
+        this._syncType = syncType;
+    }
+
+    public boolean getSuccess() {
+        return _success;
+    }
+
+    public String getNuageVspCmsId() {
+        return _nuageVspCmsId;
+    }
+
+    public SyncNuageVspCmsIdCommand.SyncType getSyncType() {
+        return _syncType;
+    }
+
+    @Override
+    public boolean equals(Object o) {
+        if (this == o) return true;
+        if (!(o instanceof SyncNuageVspCmsIdAnswer)) return false;
+        if (!super.equals(o)) return false;
+
+        SyncNuageVspCmsIdAnswer that = (SyncNuageVspCmsIdAnswer) o;
+
+        if (_success != that._success) return false;
+        if (_nuageVspCmsId != null ? !_nuageVspCmsId.equals(that._nuageVspCmsId) : that._nuageVspCmsId != null)
+            return false;
+        if (_syncType != that._syncType) return false;
+
+        return true;
+    }
+
+    @Override
+    public int hashCode() {
+        int result = super.hashCode();
+        result = 31 * result + (_success ? 1 : 0);
+        result = 31 * result + (_nuageVspCmsId != null ? _nuageVspCmsId.hashCode() : 0);
+        result = 31 * result + (_syncType != null ? _syncType.hashCode() : 0);
+        return result;
+    }
+}

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/645f8758/plugins/network-elements/nuage-vsp/src/com/cloud/agent/api/sync/SyncNuageVspCmsIdCommand.java
----------------------------------------------------------------------
diff --git a/plugins/network-elements/nuage-vsp/src/com/cloud/agent/api/sync/SyncNuageVspCmsIdCommand.java b/plugins/network-elements/nuage-vsp/src/com/cloud/agent/api/sync/SyncNuageVspCmsIdCommand.java
new file mode 100644
index 0000000..48651ff
--- /dev/null
+++ b/plugins/network-elements/nuage-vsp/src/com/cloud/agent/api/sync/SyncNuageVspCmsIdCommand.java
@@ -0,0 +1,72 @@
+//
+// 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.sync;
+
+import com.cloud.agent.api.Command;
+
+public class SyncNuageVspCmsIdCommand extends Command {
+
+    public static enum SyncType { AUDIT, AUDIT_ONLY, REGISTER, UNREGISTER }
+
+    private final SyncType _syncType;
+    private final String _nuageVspCmsId;
+
+    public SyncNuageVspCmsIdCommand(SyncType syncType, String nuageVspCmsId) {
+        super();
+        this._syncType = syncType;
+        this._nuageVspCmsId = nuageVspCmsId;
+    }
+
+    public SyncType getSyncType() {
+        return _syncType;
+    }
+
+    public String getNuageVspCmsId() {
+        return _nuageVspCmsId;
+    }
+
+    @Override
+    public boolean executeInSequence() {
+        return false;
+    }
+
+    @Override
+    public boolean equals(Object o) {
+        if (this == o) return true;
+        if (!(o instanceof SyncNuageVspCmsIdCommand)) return false;
+        if (!super.equals(o)) return false;
+
+        SyncNuageVspCmsIdCommand that = (SyncNuageVspCmsIdCommand) o;
+
+        if (_nuageVspCmsId != null ? !_nuageVspCmsId.equals(that._nuageVspCmsId) : that._nuageVspCmsId != null)
+            return false;
+        if (_syncType != that._syncType) return false;
+
+        return true;
+    }
+
+    @Override
+    public int hashCode() {
+        int result = super.hashCode();
+        result = 31 * result + (_syncType != null ? _syncType.hashCode() : 0);
+        result = 31 * result + (_nuageVspCmsId != null ? _nuageVspCmsId.hashCode() : 0);
+        return result;
+    }
+}

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/645f8758/plugins/network-elements/nuage-vsp/src/com/cloud/agent/api/sync/SyncVspAnswer.java
----------------------------------------------------------------------
diff --git a/plugins/network-elements/nuage-vsp/src/com/cloud/agent/api/sync/SyncVspAnswer.java b/plugins/network-elements/nuage-vsp/src/com/cloud/agent/api/sync/SyncVspAnswer.java
deleted file mode 100644
index 52848e5..0000000
--- a/plugins/network-elements/nuage-vsp/src/com/cloud/agent/api/sync/SyncVspAnswer.java
+++ /dev/null
@@ -1,34 +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.sync;
-
-import com.cloud.agent.api.Answer;
-
-public class SyncVspAnswer extends Answer {
-
-    public SyncVspAnswer(SyncVspCommand cmd, boolean success, String details) {
-        super(cmd, success, details);
-    }
-
-    public SyncVspAnswer(SyncVspCommand cmd, Exception e) {
-        super(cmd, e);
-    }
-
-}

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/645f8758/plugins/network-elements/nuage-vsp/src/com/cloud/agent/api/sync/SyncVspCommand.java
----------------------------------------------------------------------
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/sync/SyncVspCommand.java
index 8ccd84d..cfcfb87 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/sync/SyncVspCommand.java
@@ -23,7 +23,7 @@ import com.cloud.agent.api.Command;
 
 public class SyncVspCommand extends Command {
 
-    String _nuageVspEntity;
+    private final String _nuageVspEntity;
 
     public SyncVspCommand(String nuageVspEntity) {
         super();
@@ -39,4 +39,24 @@ public class SyncVspCommand extends Command {
         return _nuageVspEntity;
     }
 
+    @Override
+    public boolean equals(Object o) {
+        if (this == o) return true;
+        if (!(o instanceof SyncVspCommand)) return false;
+        if (!super.equals(o)) return false;
+
+        SyncVspCommand that = (SyncVspCommand) o;
+
+        if (_nuageVspEntity != null ? !_nuageVspEntity.equals(that._nuageVspEntity) : that._nuageVspEntity != null)
+            return false;
+
+        return true;
+    }
+
+    @Override
+    public int hashCode() {
+        int result = super.hashCode();
+        result = 31 * result + (_nuageVspEntity != null ? _nuageVspEntity.hashCode() : 0);
+        return result;
+    }
 }

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/645f8758/plugins/network-elements/nuage-vsp/src/com/cloud/api/commands/AddNuageVspDeviceCmd.java
----------------------------------------------------------------------
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 19f2d09..7590901 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
@@ -19,18 +19,6 @@
 
 package com.cloud.api.commands;
 
-import javax.inject.Inject;
-
-import org.apache.cloudstack.api.APICommand;
-import org.apache.cloudstack.api.ApiConstants;
-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.PhysicalNetworkResponse;
-import org.apache.cloudstack.context.CallContext;
-
 import com.cloud.api.response.NuageVspDeviceResponse;
 import com.cloud.event.EventTypes;
 import com.cloud.exception.ConcurrentOperationException;
@@ -41,8 +29,19 @@ 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.api.APICommand;
+import org.apache.cloudstack.api.ApiConstants;
+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.PhysicalNetworkResponse;
+import org.apache.cloudstack.context.CallContext;
+
+import javax.inject.Inject;
 
-@APICommand(name = "addNuageVspDevice", responseObject = NuageVspDeviceResponse.class, description = "Adds a Nuage VSP device")
+@APICommand(name = "addNuageVspDevice", responseObject = NuageVspDeviceResponse.class, description = "Adds a Nuage VSP device", since = "4.5")
 public class AddNuageVspDeviceCmd extends BaseAsyncCmd {
     private static final String s_name = "addnuagevspdeviceresponse";
 

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/645f8758/plugins/network-elements/nuage-vsp/src/com/cloud/api/commands/DeleteNuageVspDeviceCmd.java
----------------------------------------------------------------------
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 ae81c84..971f9c9 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
@@ -19,16 +19,6 @@
 
 package com.cloud.api.commands;
 
-import javax.inject.Inject;
-
-import org.apache.cloudstack.api.APICommand;
-import org.apache.cloudstack.api.ApiErrorCode;
-import org.apache.cloudstack.api.BaseAsyncCmd;
-import org.apache.cloudstack.api.Parameter;
-import org.apache.cloudstack.api.ServerApiException;
-import org.apache.cloudstack.api.response.SuccessResponse;
-import org.apache.cloudstack.context.CallContext;
-
 import com.cloud.api.response.NuageVspDeviceResponse;
 import com.cloud.event.EventTypes;
 import com.cloud.exception.ConcurrentOperationException;
@@ -38,8 +28,17 @@ 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.api.APICommand;
+import org.apache.cloudstack.api.ApiErrorCode;
+import org.apache.cloudstack.api.BaseAsyncCmd;
+import org.apache.cloudstack.api.Parameter;
+import org.apache.cloudstack.api.ServerApiException;
+import org.apache.cloudstack.api.response.SuccessResponse;
+import org.apache.cloudstack.context.CallContext;
+
+import javax.inject.Inject;
 
-@APICommand(name = "deleteNuageVspDevice", responseObject = SuccessResponse.class, description = "delete a nuage vsp device")
+@APICommand(name = "deleteNuageVspDevice", responseObject = SuccessResponse.class, description = "delete a nuage vsp device", since = "4.5")
 public class DeleteNuageVspDeviceCmd extends BaseAsyncCmd {
     private static final String s_name = "deletenuagevspdeviceresponse";
     @Inject

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/645f8758/plugins/network-elements/nuage-vsp/src/com/cloud/api/commands/IssueNuageVspResourceRequestCmd.java
----------------------------------------------------------------------
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
index f0e3ff8..559b30d 100644
--- 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
@@ -19,23 +19,6 @@
 
 package com.cloud.api.commands;
 
-import java.util.List;
-
-import javax.inject.Inject;
-
-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 com.cloud.agent.AgentManager;
 import com.cloud.agent.api.VspResourceAnswer;
 import com.cloud.agent.api.VspResourceCommand;
@@ -53,8 +36,23 @@ 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")
+@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";

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/645f8758/plugins/network-elements/nuage-vsp/src/com/cloud/api/commands/ListNuageVspDevicesCmd.java
----------------------------------------------------------------------
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 46797e0..2d08e12 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
@@ -19,20 +19,6 @@
 
 package com.cloud.api.commands;
 
-import java.util.ArrayList;
-import java.util.List;
-
-import javax.inject.Inject;
-
-import org.apache.cloudstack.api.APICommand;
-import org.apache.cloudstack.api.ApiConstants;
-import org.apache.cloudstack.api.ApiErrorCode;
-import org.apache.cloudstack.api.BaseListCmd;
-import org.apache.cloudstack.api.Parameter;
-import org.apache.cloudstack.api.ServerApiException;
-import org.apache.cloudstack.api.response.ListResponse;
-import org.apache.cloudstack.api.response.PhysicalNetworkResponse;
-
 import com.cloud.api.response.NuageVspDeviceResponse;
 import com.cloud.exception.ConcurrentOperationException;
 import com.cloud.exception.InsufficientCapacityException;
@@ -42,8 +28,20 @@ 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.api.APICommand;
+import org.apache.cloudstack.api.ApiConstants;
+import org.apache.cloudstack.api.ApiErrorCode;
+import org.apache.cloudstack.api.BaseListCmd;
+import org.apache.cloudstack.api.Parameter;
+import org.apache.cloudstack.api.ServerApiException;
+import org.apache.cloudstack.api.response.ListResponse;
+import org.apache.cloudstack.api.response.PhysicalNetworkResponse;
+
+import javax.inject.Inject;
+import java.util.ArrayList;
+import java.util.List;
 
-@APICommand(name = "listNuageVspDevices", responseObject = NuageVspDeviceResponse.class, description = "Lists Nuage VSP devices")
+@APICommand(name = "listNuageVspDevices", responseObject = NuageVspDeviceResponse.class, description = "Lists Nuage VSP devices", since = "4.5")
 public class ListNuageVspDevicesCmd extends BaseListCmd {
     private static final String s_name = "listnuagevspdeviceresponse";
     @Inject

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/645f8758/plugins/network-elements/nuage-vsp/src/com/cloud/api/commands/UpdateNuageVspDeviceCmd.java
----------------------------------------------------------------------
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
new file mode 100755
index 0000000..d235b2b
--- /dev/null
+++ b/plugins/network-elements/nuage-vsp/src/com/cloud/api/commands/UpdateNuageVspDeviceCmd.java
@@ -0,0 +1,180 @@
+//
+// 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.api.response.NuageVspDeviceResponse;
+import com.cloud.event.EventTypes;
+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.network.NuageVspDeviceVO;
+import com.cloud.network.manager.NuageVspManager;
+import com.cloud.utils.exception.CloudRuntimeException;
+import org.apache.cloudstack.api.APICommand;
+import org.apache.cloudstack.api.ApiConstants;
+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.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")
+public class UpdateNuageVspDeviceCmd extends BaseAsyncCmd {
+    private static final Logger s_logger = Logger.getLogger(UpdateNuageVspDeviceCmd.class);
+    private static final String s_name = "updatenuagevspdeviceresponse";
+
+    @Inject
+    NuageVspManager _nuageVspManager;
+
+    /////////////////////////////////////////////////////
+    //////////////// API parameters /////////////////////
+    /////////////////////////////////////////////////////
+
+    @Parameter(name = ApiConstants.PHYSICAL_NETWORK_ID, type = BaseCmd.CommandType.UUID, entityType = PhysicalNetworkResponse.class,
+            required = true, description = "the ID of the physical network in to which Nuage VSP is added")
+    private Long physicalNetworkId;
+
+    @Parameter(name = VspConstants.NUAGE_VSP_API_PORT, type = CommandType.INTEGER, description = "the port to communicate to Nuage VSD")
+    private Integer port;
+
+    @Parameter(name = ApiConstants.HOST_NAME, type = CommandType.STRING, description = "the hostname of the Nuage VSD")
+    private String hostName;
+
+    @Parameter(name = ApiConstants.USERNAME, type = CommandType.STRING, description = "the user name of the CMS user in Nuage VSD")
+    private String userName;
+
+    @Parameter(name = ApiConstants.PASSWORD, type = CommandType.STRING, description = "the password of CMS user in Nuage VSD")
+    private String password;
+
+    @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, 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, description = "the time to wait after failure before retrying to communicate to Nuage VSD")
+    private Long apiRetryInterval;
+
+    /////////////////////////////////////////////////////
+    /////////////////// Accessors ///////////////////////
+    /////////////////////////////////////////////////////
+
+    public Long getPhysicalNetworkId() {
+        return physicalNetworkId;
+    }
+
+    public Integer getPort() {
+        return port;
+    }
+
+    public void setPort(Integer port) {
+        this.port = port;
+    }
+
+    public String getHostName() {
+        return hostName;
+    }
+
+    public void setHostName(String hostName) {
+        this.hostName = hostName;
+    }
+
+    public String getUserName() {
+        return userName;
+    }
+
+    public String getPassword() {
+        return password;
+    }
+
+    public String getApiVersion() {
+        return apiVersion;
+    }
+
+    public void setApiVersion(String apiVersion) {
+        this.apiVersion = apiVersion;
+    }
+
+    public Integer getApiRetryCount() {
+        return apiRetryCount;
+    }
+
+    public void setApiRetryCount(Integer apiRetryCount) {
+        this.apiRetryCount = apiRetryCount;
+    }
+
+    public Long getApiRetryInterval() {
+        return apiRetryInterval;
+    }
+
+    public void setApiRetryInterval(Long apiRetryInterval) {
+        this.apiRetryInterval = apiRetryInterval;
+    }
+
+    /////////////////////////////////////////////////////
+    /////////////// API Implementation///////////////////
+    /////////////////////////////////////////////////////
+
+    @Override
+    public void execute() throws ResourceUnavailableException, InsufficientCapacityException, ServerApiException, ConcurrentOperationException, ResourceAllocationException {
+        try {
+            NuageVspDeviceVO nuageVspDeviceVO = _nuageVspManager.updateNuageVspDevice(this);
+            if (nuageVspDeviceVO != null) {
+                NuageVspDeviceResponse response = _nuageVspManager.createNuageVspDeviceResponse(nuageVspDeviceVO);
+                response.setObjectName("nuagevspdevice");
+                response.setResponseName(getCommandName());
+                this.setResponseObject(response);
+            } else {
+                throw new ServerApiException(ApiErrorCode.INTERNAL_ERROR, "Failed to add Nuage VSP device due to internal error.");
+            }
+        } catch (InvalidParameterValueException invalidParamExcp) {
+            throw new ServerApiException(ApiErrorCode.PARAM_ERROR, invalidParamExcp.getMessage());
+        } catch (CloudRuntimeException runtimeExcp) {
+            throw new ServerApiException(ApiErrorCode.INTERNAL_ERROR, runtimeExcp.getMessage());
+        }
+    }
+
+    @Override
+    public String getCommandName() {
+        return s_name;
+    }
+
+    @Override
+    public long getEntityOwnerId() {
+        return CallContext.current().getCallingAccount().getId();
+    }
+
+    @Override
+    public String getEventType() {
+        return EventTypes.EVENT_EXTERNAL_VSP_VSD_UPDATE;
+    }
+
+    @Override
+    public String getEventDescription() {
+        return "Updating a Nuage VSD";
+    }
+}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/645f8758/plugins/network-elements/nuage-vsp/src/com/cloud/api/response/NuageVspDeviceResponse.java
----------------------------------------------------------------------
diff --git a/plugins/network-elements/nuage-vsp/src/com/cloud/api/response/NuageVspDeviceResponse.java b/plugins/network-elements/nuage-vsp/src/com/cloud/api/response/NuageVspDeviceResponse.java
index b0bbcc8..136a465 100644
--- a/plugins/network-elements/nuage-vsp/src/com/cloud/api/response/NuageVspDeviceResponse.java
+++ b/plugins/network-elements/nuage-vsp/src/com/cloud/api/response/NuageVspDeviceResponse.java
@@ -21,13 +21,12 @@ package com.cloud.api.response;
 
 import com.cloud.api.commands.VspConstants;
 import com.cloud.network.NuageVspDeviceVO;
+import com.cloud.serializer.Param;
+import com.google.gson.annotations.SerializedName;
 import org.apache.cloudstack.api.ApiConstants;
 import org.apache.cloudstack.api.BaseResponse;
 import org.apache.cloudstack.api.EntityReference;
 
-import com.cloud.serializer.Param;
-import com.google.gson.annotations.SerializedName;
-
 @EntityReference(value = NuageVspDeviceVO.class)
 public class NuageVspDeviceResponse extends BaseResponse {
     @SerializedName(VspConstants.NUAGE_VSP_DEVICE_ID)

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/645f8758/plugins/network-elements/nuage-vsp/src/com/cloud/api/response/NuageVspResourceResponse.java
----------------------------------------------------------------------
diff --git a/plugins/network-elements/nuage-vsp/src/com/cloud/api/response/NuageVspResourceResponse.java b/plugins/network-elements/nuage-vsp/src/com/cloud/api/response/NuageVspResourceResponse.java
index 8e620ed..7002413 100644
--- a/plugins/network-elements/nuage-vsp/src/com/cloud/api/response/NuageVspResourceResponse.java
+++ b/plugins/network-elements/nuage-vsp/src/com/cloud/api/response/NuageVspResourceResponse.java
@@ -20,10 +20,9 @@
 package com.cloud.api.response;
 
 import com.cloud.api.commands.VspConstants;
-import org.apache.cloudstack.api.BaseResponse;
-
 import com.cloud.serializer.Param;
 import com.google.gson.annotations.SerializedName;
+import org.apache.cloudstack.api.BaseResponse;
 
 public class NuageVspResourceResponse extends BaseResponse {
     @SerializedName(VspConstants.NUAGE_VSP_API_RESOURCE_INFO)

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/645f8758/plugins/network-elements/nuage-vsp/src/com/cloud/network/NuageVspDeviceVO.java
----------------------------------------------------------------------
diff --git a/plugins/network-elements/nuage-vsp/src/com/cloud/network/NuageVspDeviceVO.java b/plugins/network-elements/nuage-vsp/src/com/cloud/network/NuageVspDeviceVO.java
index 00cb1e4..ad5a7eb 100644
--- a/plugins/network-elements/nuage-vsp/src/com/cloud/network/NuageVspDeviceVO.java
+++ b/plugins/network-elements/nuage-vsp/src/com/cloud/network/NuageVspDeviceVO.java
@@ -19,7 +19,7 @@
 
 package com.cloud.network;
 
-import java.util.UUID;
+import org.apache.cloudstack.api.InternalIdentity;
 
 import javax.persistence.Column;
 import javax.persistence.Entity;
@@ -27,8 +27,7 @@ import javax.persistence.GeneratedValue;
 import javax.persistence.GenerationType;
 import javax.persistence.Id;
 import javax.persistence.Table;
-
-import org.apache.cloudstack.api.InternalIdentity;
+import java.util.UUID;
 
 @Entity
 @Table(name = "external_nuage_vsp_devices")

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/645f8758/plugins/network-elements/nuage-vsp/src/com/cloud/network/dao/NuageVspDao.java
----------------------------------------------------------------------
diff --git a/plugins/network-elements/nuage-vsp/src/com/cloud/network/dao/NuageVspDao.java b/plugins/network-elements/nuage-vsp/src/com/cloud/network/dao/NuageVspDao.java
index 6cf7e1a..aa795eb 100644
--- a/plugins/network-elements/nuage-vsp/src/com/cloud/network/dao/NuageVspDao.java
+++ b/plugins/network-elements/nuage-vsp/src/com/cloud/network/dao/NuageVspDao.java
@@ -33,4 +33,12 @@ public interface NuageVspDao extends GenericDao<NuageVspDeviceVO, Long> {
      */
     List<NuageVspDeviceVO> listByPhysicalNetwork(long physicalNetworkId);
 
+    /**
+     * List all the Nuage Vsp devices by a specific host
+     *
+     * @param hostId host Id
+     * @return list of NuageVspDeviceVO for this host.
+     */
+    List<NuageVspDeviceVO> listByHost(long hostId);
+
 }