This is an automated email from the ASF dual-hosted git repository. pearl11594 pushed a commit to branch netris-update-vpc-and-tier-names in repository https://gitbox.apache.org/repos/asf/cloudstack.git
commit 1ee69a923abb91fb11bd4ba4971b14bc7c14c489 Author: Pearl Dsilva <[email protected]> AuthorDate: Wed Mar 5 17:48:27 2025 -0500 add support to update vpc tier name --- .../java/com/cloud/network/guru/NetworkGuru.java | 4 + .../com/cloud/network/netris/NetrisService.java | 2 + .../engine/orchestration/NetworkOrchestrator.java | 4 +- .../agent/api/UpdateNetrisVnetCommand.java | 18 +++ .../apache/cloudstack/resource/NetrisResource.java | 19 +++ .../apache/cloudstack/service/NetrisApiClient.java | 3 + .../cloudstack/service/NetrisApiClientImpl.java | 139 ++++++++++++++++++++- .../cloudstack/service/NetrisGuestNetworkGuru.java | 14 +++ .../cloudstack/service/NetrisServiceImpl.java | 11 ++ .../java/com/cloud/network/NetworkServiceImpl.java | 11 +- .../cloudstack/service/NetrisServiceMockTest.java | 5 + 11 files changed, 225 insertions(+), 5 deletions(-) diff --git a/api/src/main/java/com/cloud/network/guru/NetworkGuru.java b/api/src/main/java/com/cloud/network/guru/NetworkGuru.java index 7b81c75ed84..ced664e54a9 100644 --- a/api/src/main/java/com/cloud/network/guru/NetworkGuru.java +++ b/api/src/main/java/com/cloud/network/guru/NetworkGuru.java @@ -215,4 +215,8 @@ public interface NetworkGuru extends Adapter { default boolean isSlaacV6Only() { return true; } + + default boolean update(Network network, String prevNetworkName) { + return true; + } } diff --git a/api/src/main/java/com/cloud/network/netris/NetrisService.java b/api/src/main/java/com/cloud/network/netris/NetrisService.java index f14e531b4da..5607d53f55b 100644 --- a/api/src/main/java/com/cloud/network/netris/NetrisService.java +++ b/api/src/main/java/com/cloud/network/netris/NetrisService.java @@ -34,6 +34,8 @@ public interface NetrisService { boolean createVnetResource(Long zoneId, long accountId, long domainId, String vpcName, Long vpcId, String networkName, Long networkId, String cidr, Boolean globalRouting); + boolean updateVnetResource(Long zoneId, long accountId, long domainId, String vpcName, Long vpcId, String networkName, Long networkId, String prevNetworkName); + boolean deleteVnetResource(long zoneId, long accountId, long domainId, String vpcName, Long vpcId, String networkName, Long networkId, String cidr); boolean createSnatRule(long zoneId, long accountId, long domainId, String vpcName, long vpcId, String networkName, long networkId, boolean isForVpc, String vpcCidr, String sourceNatIp); diff --git a/engine/orchestration/src/main/java/org/apache/cloudstack/engine/orchestration/NetworkOrchestrator.java b/engine/orchestration/src/main/java/org/apache/cloudstack/engine/orchestration/NetworkOrchestrator.java index 7e1ca652f47..30b63053927 100644 --- a/engine/orchestration/src/main/java/org/apache/cloudstack/engine/orchestration/NetworkOrchestrator.java +++ b/engine/orchestration/src/main/java/org/apache/cloudstack/engine/orchestration/NetworkOrchestrator.java @@ -1099,8 +1099,8 @@ public class NetworkOrchestrator extends ManagerBase implements NetworkOrchestra nsxGuru.allocate(network, profile, vm); } else if (isNicAllocatedForProviderPublicNetworkOnVR(network, profile, vm, Provider.Netris)) { String guruName = "NetrisPublicNetworkGuru"; - NetworkGuru nsxGuru = AdapterBase.getAdapterByName(networkGurus, guruName); - nsxGuru.allocate(network, profile, vm); + NetworkGuru netrisGuru = AdapterBase.getAdapterByName(networkGurus, guruName); + netrisGuru.allocate(network, profile, vm); } if (isDefaultNic != null) { diff --git a/plugins/network-elements/netris/src/main/java/org/apache/cloudstack/agent/api/UpdateNetrisVnetCommand.java b/plugins/network-elements/netris/src/main/java/org/apache/cloudstack/agent/api/UpdateNetrisVnetCommand.java index 98fa9b7643a..e3307cb8842 100644 --- a/plugins/network-elements/netris/src/main/java/org/apache/cloudstack/agent/api/UpdateNetrisVnetCommand.java +++ b/plugins/network-elements/netris/src/main/java/org/apache/cloudstack/agent/api/UpdateNetrisVnetCommand.java @@ -2,6 +2,8 @@ package org.apache.cloudstack.agent.api; public class UpdateNetrisVnetCommand extends NetrisCommand{ private String prevNetworkName; + private String vpcName; + private Long vpcId; public UpdateNetrisVnetCommand(long zoneId, Long accountId, Long domainId, String name, Long id, boolean isVpc) { super(zoneId, accountId, domainId, name, id, isVpc); @@ -14,4 +16,20 @@ public class UpdateNetrisVnetCommand extends NetrisCommand{ public void setPrevNetworkName(String prevNetworkName) { this.prevNetworkName = prevNetworkName; } + + public String getVpcName() { + return vpcName; + } + + public void setVpcName(String vpcName) { + this.vpcName = vpcName; + } + + public Long getVpcId() { + return vpcId; + } + + public void setVpcId(Long vpcId) { + this.vpcId = vpcId; + } } diff --git a/plugins/network-elements/netris/src/main/java/org/apache/cloudstack/resource/NetrisResource.java b/plugins/network-elements/netris/src/main/java/org/apache/cloudstack/resource/NetrisResource.java index 6cb072e87e3..32dac893073 100644 --- a/plugins/network-elements/netris/src/main/java/org/apache/cloudstack/resource/NetrisResource.java +++ b/plugins/network-elements/netris/src/main/java/org/apache/cloudstack/resource/NetrisResource.java @@ -44,6 +44,7 @@ import org.apache.cloudstack.agent.api.NetrisAnswer; import org.apache.cloudstack.StartupNetrisCommand; import org.apache.cloudstack.agent.api.ReleaseNatIpCommand; import org.apache.cloudstack.agent.api.SetupNetrisPublicRangeCommand; +import org.apache.cloudstack.agent.api.UpdateNetrisVnetCommand; import org.apache.cloudstack.agent.api.UpdateNetrisVpcCommand; import org.apache.cloudstack.service.NetrisApiClient; import org.apache.cloudstack.service.NetrisApiClientImpl; @@ -105,6 +106,8 @@ public class NetrisResource implements ServerResource { return executeRequest((DeleteNetrisVpcCommand) cmd); } else if (cmd instanceof CreateNetrisVnetCommand) { return executeRequest((CreateNetrisVnetCommand) cmd); + } else if (cmd instanceof UpdateNetrisVnetCommand) { + return executeRequest((UpdateNetrisVnetCommand) cmd); } else if (cmd instanceof DeleteNetrisVnetCommand) { return executeRequest((DeleteNetrisVnetCommand) cmd); } else if (cmd instanceof SetupNetrisPublicRangeCommand) { @@ -274,6 +277,22 @@ public class NetrisResource implements ServerResource { } } + private Answer executeRequest(UpdateNetrisVnetCommand cmd) { + try { + String networkName = cmd.getName(); + String prevNetworkName = cmd.getPrevNetworkName(); + boolean result = netrisApiClient.updateVnet(cmd); + if (!result) { + return new NetrisAnswer(cmd, false, String.format("Failed to update network name from %s to %s", prevNetworkName, networkName)); + } + return new NetrisAnswer(cmd, true, "OK"); + } catch (CloudRuntimeException e) { + String msg = String.format("Error updating Netris vNet: %s", e.getMessage()); + logger.error(msg, e); + return new NetrisAnswer(cmd, new CloudRuntimeException(msg)); + } + } + private Answer executeRequest(DeleteNetrisVnetCommand cmd) { try { String networkName = cmd.getName(); diff --git a/plugins/network-elements/netris/src/main/java/org/apache/cloudstack/service/NetrisApiClient.java b/plugins/network-elements/netris/src/main/java/org/apache/cloudstack/service/NetrisApiClient.java index 8f7fcbbb4c7..1b4e64bf971 100644 --- a/plugins/network-elements/netris/src/main/java/org/apache/cloudstack/service/NetrisApiClient.java +++ b/plugins/network-elements/netris/src/main/java/org/apache/cloudstack/service/NetrisApiClient.java @@ -34,6 +34,7 @@ import org.apache.cloudstack.agent.api.DeleteNetrisVnetCommand; import org.apache.cloudstack.agent.api.DeleteNetrisVpcCommand; import org.apache.cloudstack.agent.api.ReleaseNatIpCommand; import org.apache.cloudstack.agent.api.SetupNetrisPublicRangeCommand; +import org.apache.cloudstack.agent.api.UpdateNetrisVnetCommand; import org.apache.cloudstack.agent.api.UpdateNetrisVpcCommand; import java.util.List; @@ -67,6 +68,8 @@ public interface NetrisApiClient { */ boolean createVnet(CreateNetrisVnetCommand cmd); + boolean updateVnet(UpdateNetrisVnetCommand cmd); + /** * Deletion of a VPC network tier deletes the following Netris resources: * - Deletes the Netris IPAM Subnet for the specified network tier's CIDR diff --git a/plugins/network-elements/netris/src/main/java/org/apache/cloudstack/service/NetrisApiClientImpl.java b/plugins/network-elements/netris/src/main/java/org/apache/cloudstack/service/NetrisApiClientImpl.java index 857959d4e1d..c2b52093934 100644 --- a/plugins/network-elements/netris/src/main/java/org/apache/cloudstack/service/NetrisApiClientImpl.java +++ b/plugins/network-elements/netris/src/main/java/org/apache/cloudstack/service/NetrisApiClientImpl.java @@ -94,6 +94,9 @@ import io.netris.model.VnetAddBodyDhcp; import io.netris.model.VnetAddBodyDhcpOptionSet; import io.netris.model.VnetAddBodyGateways; import io.netris.model.VnetAddBodyVpc; +import io.netris.model.VnetEditBody; +import io.netris.model.VnetEditBodyDhcp; +import io.netris.model.VnetEditBodyGateways; import io.netris.model.VnetResAddBody; import io.netris.model.VnetResDeleteBody; import io.netris.model.VnetResListBody; @@ -119,6 +122,7 @@ import org.apache.cloudstack.agent.api.DeleteNetrisVpcCommand; import org.apache.cloudstack.agent.api.NetrisCommand; import org.apache.cloudstack.agent.api.ReleaseNatIpCommand; import org.apache.cloudstack.agent.api.SetupNetrisPublicRangeCommand; +import org.apache.cloudstack.agent.api.UpdateNetrisVnetCommand; import org.apache.cloudstack.agent.api.UpdateNetrisVpcCommand; import org.apache.cloudstack.resource.NetrisResourceObjectUtils; import org.apache.commons.collections.CollectionUtils; @@ -989,6 +993,127 @@ public class NetrisApiClientImpl implements NetrisApiClient { return true; } + @Override + public boolean updateVnet(UpdateNetrisVnetCommand cmd) { + String networkName = cmd.getName(); + Long networkId = cmd.getId(); + String prevNetworkName = cmd.getPrevNetworkName(); + String vpcName = cmd.getVpcName(); + Long vpcId = cmd.getVpcId(); + boolean isVpc = cmd.isVpc(); + + String netrisVpcName = getNetrisVpcName(cmd, vpcId, vpcName); + VPCListing associatedVpc = getNetrisVpcResource(netrisVpcName); + if (associatedVpc == null) { + logger.error("Failed to find Netris VPC with name: {}, to create the corresponding vNet for network {}", netrisVpcName, networkName); + return false; + } + + String vNetName; + String prevVnetName; + if (isVpc) { + vNetName = String.format("V%s-N%s-%s", vpcId, networkId, networkName); + prevVnetName = String.format("V%s-N%s-%s", vpcId, networkId, prevNetworkName); + } else { + vNetName = String.format("N%s-%s", networkId, networkName); + prevVnetName = String.format("N%s-%s", networkId, prevNetworkName); + } + String netrisVnetName = NetrisResourceObjectUtils.retrieveNetrisResourceObjectName(cmd, NetrisResourceObjectUtils.NetrisObjectType.VNET, vNetName) ; + String prevNetrisVnetName = NetrisResourceObjectUtils.retrieveNetrisResourceObjectName(cmd, NetrisResourceObjectUtils.NetrisObjectType.VNET, prevVnetName) ; + + VnetResAddBody response = updateVnetInternal(associatedVpc, netrisVnetName, prevNetrisVnetName); + if (response == null || !response.isIsSuccess()) { + String reason = response == null ? "Empty response" : "Operation failed on Netris"; + logger.debug("Netris vNet: {} update failed: {}", vNetName, reason); + return false; + } + return true; + } + + + private VnetResAddBody updateVnetInternal(VPCListing associatedVpc, String netrisVnetName, String prevVnetName) { + logger.debug("Updating Netris vNet name from {} to {} ", netrisVnetName, prevVnetName); + try { + FilterByVpc vpcFilter = new FilterByVpc(); + vpcFilter.add(associatedVpc.getId()); + FilterBySites siteFilter = new FilterBySites(); + siteFilter.add(siteId); + List<VnetsBody> vnetsList = getVnets(associatedVpc, prevVnetName, siteFilter, vpcFilter); + if (CollectionUtils.isEmpty(vnetsList)) { + String errorMsg = String.format("Could not find vNet with name: %s", prevVnetName); + logger.error(errorMsg); + throw new CloudRuntimeException(errorMsg); + } + VnetsBody vnetsBody = vnetsList.get(0); + + VnetEditBody vnetBody = new VnetEditBody(); + + vnetBody.setCustomAnycastMac(vnetBody.getCustomAnycastMac()); + + VnetEditBodyGateways gatewayV4 = new VnetEditBodyGateways(); + gatewayV4.prefix(vnetsBody.getGateways().get(0).getPrefix()); + gatewayV4.setDhcpEnabled(false); + VnetEditBodyDhcp dhcp = new VnetEditBodyDhcp(); + dhcp.setEnd(""); + dhcp.setStart(""); + dhcp.setOptionSet(new VnetAddBodyDhcpOptionSet()); + gatewayV4.setDhcp(dhcp); + List<VnetEditBodyGateways> gatewaysList = new ArrayList<>(); + gatewaysList.add(gatewayV4); + + + if (vnetsBody.getGateways().size() > 1 && Objects.nonNull(vnetsBody.getGateways().get(1))) { + String netrisV6Gateway = vnetsBody.getGateways().get(1).getPrefix(); + VnetEditBodyGateways gatewayV6 = new VnetEditBodyGateways(); + gatewayV6.prefix(netrisV6Gateway); + gatewayV6.setDhcpEnabled(false); + gatewayV6.setDhcp(dhcp); + gatewaysList.add(gatewayV6); + } + + vnetBody.setGateways(gatewaysList); + vnetBody.setGuestTenants(new ArrayList<>()); + vnetBody.setL3vpn(false); + vnetBody.setName(netrisVnetName); + vnetBody.setNativeVlan(0); + vnetBody.setVxlanID(vnetsBody.getVxlanID()); + vnetBody.setPorts(new ArrayList<>()); + + IpTreeSubnetSites subnetSites = new IpTreeSubnetSites(); + subnetSites.setId(new BigDecimal(siteId)); + subnetSites.setName(siteName); + List<IpTreeSubnetSites> subnetSitesList = new ArrayList<>(); + subnetSitesList.add(subnetSites); + vnetBody.setSites(subnetSitesList); + + vnetBody.setState(VnetEditBody.StateEnum.ACTIVE); + + vnetBody.setTags(new ArrayList<>()); + + IpTreeAllocationTenant allocationTenant = new IpTreeAllocationTenant(); + allocationTenant.setId(new BigDecimal(tenantId)); + allocationTenant.setName(tenantName); + vnetBody.setTenant(allocationTenant); + + vnetBody.setVlan(0); + vnetBody.setVlanAware(false); + vnetBody.setVlans(""); + + VnetAddBodyVpc vpc = new VnetAddBodyVpc(); + vpc.setName(associatedVpc.getName()); + vpc.setId(associatedVpc.getId()); + vnetBody.setVpc(vpc); + + vnetBody.setTags(vnetsBody.getTags()); + + VNetApi vnetApi = apiClient.getApiStubForMethod(VNetApi.class); + return vnetApi.apiV2VnetIdPut(vnetBody, vnetsBody.getId().intValue()); + } catch (ApiException e) { + logAndThrowException(String.format("Error creating Netris vNet %s for VPC %s", netrisVnetName, associatedVpc.getName()), e); + return null; + } + } + @Override public boolean deleteVnet(DeleteNetrisVnetCommand cmd) { String vpcName = cmd.getVpcName(); @@ -1400,14 +1525,24 @@ public class NetrisApiClientImpl implements NetrisApiClient { return true; } - private void deleteVnetInternal(VPCListing associatedVpc, FilterBySites siteFilter, FilterByVpc vpcFilter, String netrisVnetName, String vNetName) { + private List<VnetsBody> getVnets(VPCListing associatedVpc, String netrisVnetName, FilterBySites siteFilter, FilterByVpc vpcFilter) { try { VNetApi vNetApi = apiClient.getApiStubForMethod(VNetApi.class); VnetResListBody vnetList = vNetApi.apiV2VnetGet(siteFilter, vpcFilter); if (vnetList == null || !vnetList.isIsSuccess()) { throw new CloudRuntimeException(String.format("Failed to list vNets for the given VPC: %s and site: %s", associatedVpc.getName(), siteName)); } - List<VnetsBody> vnetsList = vnetList.getData().stream().filter(vnet -> vnet.getName().equals(netrisVnetName)).collect(Collectors.toList()); + return vnetList.getData().stream().filter(vnet -> vnet.getName().equals(netrisVnetName)).collect(Collectors.toList()); + } catch (ApiException e) { + logAndThrowException(String.format("Failed to get vNets: %s", netrisVnetName), e); + } + return Collections.emptyList(); + } + + private void deleteVnetInternal(VPCListing associatedVpc, FilterBySites siteFilter, FilterByVpc vpcFilter, String netrisVnetName, String vNetName) { + try { + VNetApi vNetApi = apiClient.getApiStubForMethod(VNetApi.class); + List<VnetsBody> vnetsList = getVnets(associatedVpc, netrisVnetName, siteFilter, vpcFilter); if (CollectionUtils.isEmpty(vnetsList)) { logger.debug("vNet: {} for the given VPC: {} appears to already be deleted on Netris", vNetName, associatedVpc.getName()); return; diff --git a/plugins/network-elements/netris/src/main/java/org/apache/cloudstack/service/NetrisGuestNetworkGuru.java b/plugins/network-elements/netris/src/main/java/org/apache/cloudstack/service/NetrisGuestNetworkGuru.java index e1f05c2a905..3e3b75e0dc7 100644 --- a/plugins/network-elements/netris/src/main/java/org/apache/cloudstack/service/NetrisGuestNetworkGuru.java +++ b/plugins/network-elements/netris/src/main/java/org/apache/cloudstack/service/NetrisGuestNetworkGuru.java @@ -159,6 +159,20 @@ public class NetrisGuestNetworkGuru extends GuestNetworkGuru implements Network // Do nothing } + @Override + public boolean update(Network network, String prevNetworkName) { + Long vpcId = network.getVpcId(); + String vpcName = null; + if (Objects.nonNull(vpcId)) { + VpcVO vpc = _vpcDao.findById(vpcId); + if (Objects.nonNull(vpc)) { + vpcName = vpc.getName(); + } + } + return netrisService.updateVnetResource(network.getDataCenterId(), network.getAccountId(), network.getDomainId(), + vpcName, vpcId, network.getName(), network.getId(), prevNetworkName); + } + @Override public Network implement(Network network, NetworkOffering offering, DeployDestination dest, ReservationContext context) throws InsufficientVirtualNetworkCapacityException { diff --git a/plugins/network-elements/netris/src/main/java/org/apache/cloudstack/service/NetrisServiceImpl.java b/plugins/network-elements/netris/src/main/java/org/apache/cloudstack/service/NetrisServiceImpl.java index b47f908958e..541390a8053 100644 --- a/plugins/network-elements/netris/src/main/java/org/apache/cloudstack/service/NetrisServiceImpl.java +++ b/plugins/network-elements/netris/src/main/java/org/apache/cloudstack/service/NetrisServiceImpl.java @@ -58,6 +58,7 @@ import org.apache.cloudstack.agent.api.NetrisAnswer; import org.apache.cloudstack.agent.api.NetrisCommand; import org.apache.cloudstack.agent.api.ReleaseNatIpCommand; import org.apache.cloudstack.agent.api.SetupNetrisPublicRangeCommand; +import org.apache.cloudstack.agent.api.UpdateNetrisVnetCommand; import org.apache.cloudstack.agent.api.UpdateNetrisVpcCommand; import org.apache.cloudstack.api.ApiConstants; import org.apache.cloudstack.framework.config.ConfigKey; @@ -233,6 +234,16 @@ public class NetrisServiceImpl implements NetrisService, Configurable { return answer.getResult(); } + @Override + public boolean updateVnetResource(Long zoneId, long accountId, long domainId, String vpcName, Long vpcId, String networkName, Long networkId, String prevNetworkName) { + UpdateNetrisVnetCommand cmd = new UpdateNetrisVnetCommand(zoneId, accountId, domainId, networkName, networkId, Objects.nonNull(vpcId)); + cmd.setPrevNetworkName(prevNetworkName); + cmd.setVpcId(vpcId); + cmd.setVpcName(vpcName); + NetrisAnswer answer = sendNetrisCommand(cmd, zoneId); + return answer.getResult(); + } + @Override public boolean deleteVnetResource(long zoneId, long accountId, long domainId, String vpcName, Long vpcId, String networkName, Long networkId, String cidr) { DeleteNetrisVnetCommand cmd = new DeleteNetrisVnetCommand(zoneId, accountId, domainId, networkName, networkId, vpcName, vpcId, cidr, Objects.nonNull(vpcName)); diff --git a/server/src/main/java/com/cloud/network/NetworkServiceImpl.java b/server/src/main/java/com/cloud/network/NetworkServiceImpl.java index 3d218f3b0a5..4c8d599a28e 100644 --- a/server/src/main/java/com/cloud/network/NetworkServiceImpl.java +++ b/server/src/main/java/com/cloud/network/NetworkServiceImpl.java @@ -51,6 +51,7 @@ import com.cloud.network.element.NsxProviderVO; import com.cloud.network.element.VirtualRouterProviderVO; import com.cloud.offering.ServiceOffering; import com.cloud.service.dao.ServiceOfferingDao; +import com.cloud.utils.component.AdapterBase; import org.apache.cloudstack.acl.ControlledEntity.ACLType; import org.apache.cloudstack.acl.SecurityChecker.AccessType; import org.apache.cloudstack.alert.AlertService; @@ -3087,7 +3088,7 @@ public class NetworkServiceImpl extends ManagerBase implements NetworkService, C // verify input parameters final NetworkVO network = getNetworkVO(networkId, "Specified network id doesn't exist in the system"); - + String prevNetworkName = network.getName(); //perform below validation if the network is vpc network if (network.getVpcId() != null && networkOfferingId != null) { Vpc vpc = _entityMgr.findById(Vpc.class, network.getVpcId()); @@ -3572,9 +3573,17 @@ public class NetworkServiceImpl extends ManagerBase implements NetworkService, C Network updatedNetwork = getNetwork(network.getId()); UsageEventUtils.publishUsageEvent(EventTypes.EVENT_NETWORK_UPDATE, updatedNetwork.getAccountId(), updatedNetwork.getDataCenterId(), updatedNetwork.getId(), updatedNetwork.getName(), updatedNetwork.getNetworkOfferingId(), null, updatedNetwork.getState().name(), Network.class.getName(), updatedNetwork.getUuid(), true); + updateProviderNetwork(updatedNetwork, prevNetworkName); return updatedNetwork; } + private void updateProviderNetwork(Network network, String prevNetworkName) { + final NetworkGuru guru = AdapterBase.getAdapterByName(_networkGurus, network.getGuruName()); + if (Objects.nonNull(guru) && !guru.update(network, prevNetworkName)) { + logger.error("Failed to update name of network on provider"); + } + } + protected Pair<Integer, Integer> validateMtuOnUpdate(NetworkVO network, Long zoneId, Integer publicMtu, Integer privateMtu) { if (!AllowUsersToSpecifyVRMtu.valueIn(zoneId)) { return new Pair<>(null, null); diff --git a/server/src/test/java/org/apache/cloudstack/service/NetrisServiceMockTest.java b/server/src/test/java/org/apache/cloudstack/service/NetrisServiceMockTest.java index dd3707c6051..d2b63253d22 100644 --- a/server/src/test/java/org/apache/cloudstack/service/NetrisServiceMockTest.java +++ b/server/src/test/java/org/apache/cloudstack/service/NetrisServiceMockTest.java @@ -51,6 +51,11 @@ public class NetrisServiceMockTest implements NetrisService { return true; } + @Override + public boolean updateVnetResource(Long zoneId, long accountId, long domainId, String vpcName, Long vpcId, String networkName, Long networkId, String prevNetworkName) { + return true; + } + @Override public boolean deleteVnetResource(long zoneId, long accountId, long domainId, String vpcName, Long vpcId, String networkName, Long networkId, String cidr) { return true;
