mirror of
				https://github.com/apache/cloudstack.git
				synced 2025-10-26 08:42:29 +01:00 
			
		
		
		
	Netris Network Plugin Integration with CloudStack (#10458)
The Netris Plugin introduces Netris as a network service provider in CloudStack to be able to create and manage Virtual Private Clouds (VPCs) in CloudStack, being able to orchestrate the following network functionalities: - Network segmentation with Netris-VXLAN isolation method - Routing between "public" IP and network segments with an ACS ROUTED mode offering - SourceNAT, DNAT, 1:1 NAT between "public" IP and network segments with an ACS NATTED mode offering - Routing between VPC network segments (tiers in ACS nomenclature) - Access Lists (ACLs) between VPC tiers and "public" network (TCP, UDP, ICMP) both as global egress rules and "public" IP specific ingress rules. - ACLs between VPC network tiers (TCP, UDP, ICMP) - External load balancing – between VPC network tiers and "public" IP - Internal load balancing – between VPC network tiers - CloudStack Virtual Router services (DHCP, DNS, UserData, Password Injection, etc…)
This commit is contained in:
		
							parent
							
								
									ae50103704
								
							
						
					
					
						commit
						0d4147f3f6
					
				| @ -47,7 +47,7 @@ public class FirewallRuleTO implements InternalIdentity { | |||||||
|     int[] srcPortRange; |     int[] srcPortRange; | ||||||
|     boolean revoked; |     boolean revoked; | ||||||
|     boolean alreadyAdded; |     boolean alreadyAdded; | ||||||
|     private List<String> sourceCidrList; |     protected List<String> sourceCidrList; | ||||||
|     private List<String> destCidrList; |     private List<String> destCidrList; | ||||||
|     FirewallRule.Purpose purpose; |     FirewallRule.Purpose purpose; | ||||||
|     private Integer icmpType; |     private Integer icmpType; | ||||||
|  | |||||||
| @ -21,8 +21,6 @@ import com.cloud.network.rules.PortForwardingRule; | |||||||
| import com.cloud.utils.net.NetUtils; | import com.cloud.utils.net.NetUtils; | ||||||
| import org.apache.commons.lang3.StringUtils; | import org.apache.commons.lang3.StringUtils; | ||||||
| 
 | 
 | ||||||
| import java.util.List; |  | ||||||
| 
 |  | ||||||
| /** | /** | ||||||
|  * PortForwardingRuleTO specifies one port forwarding rule. |  * PortForwardingRuleTO specifies one port forwarding rule. | ||||||
|  * |  * | ||||||
| @ -32,8 +30,6 @@ public class PortForwardingRuleTO extends FirewallRuleTO { | |||||||
|     String dstIp; |     String dstIp; | ||||||
|     int[] dstPortRange; |     int[] dstPortRange; | ||||||
| 
 | 
 | ||||||
|     List<String> sourceCidrList; |  | ||||||
| 
 |  | ||||||
|     protected PortForwardingRuleTO() { |     protected PortForwardingRuleTO() { | ||||||
|         super(); |         super(); | ||||||
|     } |     } | ||||||
|  | |||||||
| @ -17,7 +17,11 @@ | |||||||
| package com.cloud.configuration; | package com.cloud.configuration; | ||||||
| 
 | 
 | ||||||
| import java.util.List; | import java.util.List; | ||||||
|  | import java.util.Map; | ||||||
|  | import java.util.Objects; | ||||||
| 
 | 
 | ||||||
|  | import com.cloud.network.Network; | ||||||
|  | import org.apache.cloudstack.api.ApiConstants; | ||||||
| import org.apache.cloudstack.api.command.admin.config.ResetCfgCmd; | import org.apache.cloudstack.api.command.admin.config.ResetCfgCmd; | ||||||
| import org.apache.cloudstack.api.command.admin.config.UpdateCfgCmd; | import org.apache.cloudstack.api.command.admin.config.UpdateCfgCmd; | ||||||
| import org.apache.cloudstack.api.command.admin.network.CreateGuestNetworkIpv6PrefixCmd; | import org.apache.cloudstack.api.command.admin.network.CreateGuestNetworkIpv6PrefixCmd; | ||||||
| @ -373,4 +377,16 @@ public interface ConfigurationService { | |||||||
|     List<? extends PortableIp> listPortableIps(long id); |     List<? extends PortableIp> listPortableIps(long id); | ||||||
| 
 | 
 | ||||||
|     Boolean isAccountAllowedToCreateOfferingsWithTags(IsAccountAllowedToCreateOfferingsWithTagsCmd cmd); |     Boolean isAccountAllowedToCreateOfferingsWithTags(IsAccountAllowedToCreateOfferingsWithTagsCmd cmd); | ||||||
|  | 
 | ||||||
|  |     public static final Map<String, String> ProviderDetailKeyMap = Map.of( | ||||||
|  |             Network.Provider.Nsx.getName(), ApiConstants.NSX_DETAIL_KEY, | ||||||
|  |             Network.Provider.Netris.getName(), ApiConstants.NETRIS_DETAIL_KEY | ||||||
|  |     ); | ||||||
|  | 
 | ||||||
|  |     public static boolean IsIpRangeForProvider(Network.Provider provider) { | ||||||
|  |         if (Objects.isNull(provider)) { | ||||||
|  |             return false; | ||||||
|  |         } | ||||||
|  |         return ProviderDetailKeyMap.containsKey(provider.getName()); | ||||||
|  |     } | ||||||
| } | } | ||||||
|  | |||||||
| @ -499,6 +499,8 @@ public class EventTypes { | |||||||
| 
 | 
 | ||||||
|     public static final String EVENT_ZONE_VLAN_ASSIGN = "ZONE.VLAN.ASSIGN"; |     public static final String EVENT_ZONE_VLAN_ASSIGN = "ZONE.VLAN.ASSIGN"; | ||||||
|     public static final String EVENT_ZONE_VLAN_RELEASE = "ZONE.VLAN.RELEASE"; |     public static final String EVENT_ZONE_VLAN_RELEASE = "ZONE.VLAN.RELEASE"; | ||||||
|  |     public static final String EVENT_ZONE_VXLAN_ASSIGN = "ZONE.VXLAN.ASSIGN"; | ||||||
|  |     public static final String EVENT_ZONE_VXLAN_RELEASE = "ZONE.VXLAN.RELEASE"; | ||||||
| 
 | 
 | ||||||
|     // Projects |     // Projects | ||||||
|     public static final String EVENT_PROJECT_CREATE = "PROJECT.CREATE"; |     public static final String EVENT_PROJECT_CREATE = "PROJECT.CREATE"; | ||||||
|  | |||||||
| @ -99,4 +99,5 @@ public interface IpAddress extends ControlledEntity, Identity, InternalIdentity, | |||||||
| 
 | 
 | ||||||
|     boolean isForSystemVms(); |     boolean isForSystemVms(); | ||||||
| 
 | 
 | ||||||
|  |     boolean isForRouter(); | ||||||
| } | } | ||||||
|  | |||||||
| @ -206,6 +206,7 @@ public interface Network extends ControlledEntity, StateObject<Network.State>, I | |||||||
|         public static final Provider Tungsten = new Provider("Tungsten", false); |         public static final Provider Tungsten = new Provider("Tungsten", false); | ||||||
| 
 | 
 | ||||||
|         public static final Provider Nsx = new Provider("Nsx", false); |         public static final Provider Nsx = new Provider("Nsx", false); | ||||||
|  |         public static final Provider Netris = new Provider("Netris", false); | ||||||
| 
 | 
 | ||||||
|         private final String name; |         private final String name; | ||||||
|         private final boolean isExternal; |         private final boolean isExternal; | ||||||
|  | |||||||
| @ -129,7 +129,8 @@ public class Networks { | |||||||
|         UnDecided(null, null), |         UnDecided(null, null), | ||||||
|         OpenDaylight("opendaylight", String.class), |         OpenDaylight("opendaylight", String.class), | ||||||
|         TUNGSTEN("tf", String.class), |         TUNGSTEN("tf", String.class), | ||||||
|         NSX("nsx", String.class); |         NSX("nsx", String.class), | ||||||
|  |         Netris("netris", String.class); | ||||||
| 
 | 
 | ||||||
|         private final String scheme; |         private final String scheme; | ||||||
|         private final Class<?> type; |         private final Class<?> type; | ||||||
|  | |||||||
							
								
								
									
										358
									
								
								api/src/main/java/com/cloud/network/SDNProviderNetworkRule.java
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										358
									
								
								api/src/main/java/com/cloud/network/SDNProviderNetworkRule.java
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,358 @@ | |||||||
|  | // Licensed to the Apache Software Foundation (ASF) under one | ||||||
|  | // or more contributor license agreements.  See the NOTICE file | ||||||
|  | // distributed with this work for additional information | ||||||
|  | // regarding copyright ownership.  The ASF licenses this file | ||||||
|  | // to you under the Apache License, Version 2.0 (the | ||||||
|  | // "License"); you may not use this file except in compliance | ||||||
|  | // with the License.  You may obtain a copy of the License at | ||||||
|  | // | ||||||
|  | //   http://www.apache.org/licenses/LICENSE-2.0 | ||||||
|  | // | ||||||
|  | // Unless required by applicable law or agreed to in writing, | ||||||
|  | // software distributed under the License is distributed on an | ||||||
|  | // "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY | ||||||
|  | // KIND, either express or implied.  See the License for the | ||||||
|  | // specific language governing permissions and limitations | ||||||
|  | // under the License. | ||||||
|  | package com.cloud.network; | ||||||
|  | 
 | ||||||
|  | import java.util.List; | ||||||
|  | 
 | ||||||
|  | public class SDNProviderNetworkRule { | ||||||
|  | 
 | ||||||
|  |     protected long domainId; | ||||||
|  |     protected long accountId; | ||||||
|  |     protected long zoneId; | ||||||
|  |     protected Long networkResourceId; | ||||||
|  |     protected String networkResourceName; | ||||||
|  |     protected boolean isVpcResource; | ||||||
|  |     protected long vmId; | ||||||
|  |     protected long ruleId; | ||||||
|  |     protected String publicIp; | ||||||
|  |     protected String vmIp; | ||||||
|  |     protected String publicPort; | ||||||
|  |     protected String privatePort; | ||||||
|  |     protected String protocol; | ||||||
|  |     protected String algorithm; | ||||||
|  |     protected List<String> sourceCidrList; | ||||||
|  |     protected List<String> destinationCidrList; | ||||||
|  |     protected Integer icmpCode; | ||||||
|  | 
 | ||||||
|  |     protected Integer icmpType; | ||||||
|  |     protected String trafficType; | ||||||
|  |     protected Network.Service service; | ||||||
|  | 
 | ||||||
|  |     public long getDomainId() { | ||||||
|  |         return domainId; | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|  |     public void setDomainId(long domainId) { | ||||||
|  |         this.domainId = domainId; | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|  |     public long getAccountId() { | ||||||
|  |         return accountId; | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|  |     public void setAccountId(long accountId) { | ||||||
|  |         this.accountId = accountId; | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|  |     public long getZoneId() { | ||||||
|  |         return zoneId; | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|  |     public void setZoneId(long zoneId) { | ||||||
|  |         this.zoneId = zoneId; | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|  |     public Long getNetworkResourceId() { | ||||||
|  |         return networkResourceId; | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|  |     public void setNetworkResourceId(Long networkResourceId) { | ||||||
|  |         this.networkResourceId = networkResourceId; | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|  |     public String getNetworkResourceName() { | ||||||
|  |         return networkResourceName; | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|  |     public void setNetworkResourceName(String networkResourceName) { | ||||||
|  |         this.networkResourceName = networkResourceName; | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|  |     public boolean isVpcResource() { | ||||||
|  |         return isVpcResource; | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|  |     public void setVpcResource(boolean vpcResource) { | ||||||
|  |         isVpcResource = vpcResource; | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|  |     public long getVmId() { | ||||||
|  |         return vmId; | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|  |     public void setVmId(long vmId) { | ||||||
|  |         this.vmId = vmId; | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|  |     public long getRuleId() { | ||||||
|  |         return ruleId; | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|  |     public void setRuleId(long ruleId) { | ||||||
|  |         this.ruleId = ruleId; | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|  |     public String getPublicIp() { | ||||||
|  |         return publicIp; | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|  |     public void setPublicIp(String publicIp) { | ||||||
|  |         this.publicIp = publicIp; | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|  |     public String getVmIp() { | ||||||
|  |         return vmIp; | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|  |     public void setVmIp(String vmIp) { | ||||||
|  |         this.vmIp = vmIp; | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|  |     public String getPublicPort() { | ||||||
|  |         return publicPort; | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|  |     public void setPublicPort(String publicPort) { | ||||||
|  |         this.publicPort = publicPort; | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|  |     public String getPrivatePort() { | ||||||
|  |         return privatePort; | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|  |     public void setPrivatePort(String privatePort) { | ||||||
|  |         this.privatePort = privatePort; | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|  |     public String getProtocol() { | ||||||
|  |         return protocol; | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|  |     public void setProtocol(String protocol) { | ||||||
|  |         this.protocol = protocol; | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|  |     public void setAlgorithm(String algorithm) { | ||||||
|  |         this.algorithm = algorithm; | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|  |     public String getAlgorithm() { | ||||||
|  |         return algorithm; | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|  |     public Network.Service getService() { | ||||||
|  |         return service; | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|  |     public void setService(Network.Service service) { | ||||||
|  |         this.service = service; | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|  |     public Integer getIcmpCode() { | ||||||
|  |         return icmpCode; | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|  |     public void setIcmpCode(Integer icmpCode) { | ||||||
|  |         this.icmpCode = icmpCode; | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|  |     public Integer getIcmpType() { | ||||||
|  |         return icmpType; | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|  |     public void setIcmpType(Integer icmpType) { | ||||||
|  |         this.icmpType = icmpType; | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|  |     public List<String> getSourceCidrList() { | ||||||
|  |         return sourceCidrList; | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|  |     public void setSourceCidrList(List<String> sourceCidrList) { | ||||||
|  |         this.sourceCidrList = sourceCidrList; | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|  |     public List<String> getDestinationCidrList() { | ||||||
|  |         return destinationCidrList; | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|  |     public void setDestinationCidrList(List<String> destinationCidrList) { | ||||||
|  |         this.destinationCidrList = destinationCidrList; | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|  |     public String getTrafficType() { | ||||||
|  |         return trafficType; | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|  |     public void setTrafficType(String trafficType) { | ||||||
|  |         this.trafficType = trafficType; | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|  |     public static class Builder { | ||||||
|  |         public long domainId; | ||||||
|  |         public long accountId; | ||||||
|  |         public long zoneId; | ||||||
|  |         public Long networkResourceId; | ||||||
|  |         public String networkResourceName; | ||||||
|  |         public boolean isVpcResource; | ||||||
|  |         public long vmId; | ||||||
|  | 
 | ||||||
|  |         public long ruleId; | ||||||
|  |         public String publicIp; | ||||||
|  |         public String vmIp; | ||||||
|  |         public String publicPort; | ||||||
|  |         public String privatePort; | ||||||
|  |         public String protocol; | ||||||
|  |         public String algorithm; | ||||||
|  |         public List<String> sourceCidrList; | ||||||
|  |         public List<String> destinationCidrList; | ||||||
|  |         public String trafficType; | ||||||
|  |         public Integer icmpType; | ||||||
|  |         public Integer icmpCode; | ||||||
|  |         public Network.Service service; | ||||||
|  | 
 | ||||||
|  |         public Builder() { | ||||||
|  |             // Default constructor | ||||||
|  |         } | ||||||
|  | 
 | ||||||
|  |         public Builder setDomainId(long domainId) { | ||||||
|  |             this.domainId = domainId; | ||||||
|  |             return this; | ||||||
|  |         } | ||||||
|  | 
 | ||||||
|  |         public Builder setAccountId(long accountId) { | ||||||
|  |             this.accountId = accountId; | ||||||
|  |             return this; | ||||||
|  |         } | ||||||
|  | 
 | ||||||
|  |         public Builder setZoneId(long zoneId) { | ||||||
|  |             this.zoneId = zoneId; | ||||||
|  |             return this; | ||||||
|  |         } | ||||||
|  | 
 | ||||||
|  |         public Builder setNetworkResourceId(Long networkResourceId) { | ||||||
|  |             this.networkResourceId = networkResourceId; | ||||||
|  |             return this; | ||||||
|  |         } | ||||||
|  | 
 | ||||||
|  |         public Builder setNetworkResourceName(String networkResourceName) { | ||||||
|  |             this.networkResourceName = networkResourceName; | ||||||
|  |             return this; | ||||||
|  |         } | ||||||
|  | 
 | ||||||
|  |         public Builder setVpcResource(boolean isVpcResource) { | ||||||
|  |             this.isVpcResource = isVpcResource; | ||||||
|  |             return this; | ||||||
|  |         } | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  |         public Builder setVmId(long vmId) { | ||||||
|  |             this.vmId = vmId; | ||||||
|  |             return this; | ||||||
|  |         } | ||||||
|  | 
 | ||||||
|  |         public Builder setRuleId(long ruleId) { | ||||||
|  |             this.ruleId = ruleId; | ||||||
|  |             return this; | ||||||
|  |         } | ||||||
|  | 
 | ||||||
|  |         public Builder setPublicIp(String publicIp) { | ||||||
|  |             this.publicIp = publicIp; | ||||||
|  |             return this; | ||||||
|  |         } | ||||||
|  | 
 | ||||||
|  |         public Builder setVmIp(String vmIp) { | ||||||
|  |             this.vmIp = vmIp; | ||||||
|  |             return this; | ||||||
|  |         } | ||||||
|  | 
 | ||||||
|  |         public Builder setPublicPort(String publicPort) { | ||||||
|  |             this.publicPort = publicPort; | ||||||
|  |             return this; | ||||||
|  |         } | ||||||
|  | 
 | ||||||
|  |         public Builder setPrivatePort(String privatePort) { | ||||||
|  |             this.privatePort = privatePort; | ||||||
|  |             return this; | ||||||
|  |         } | ||||||
|  | 
 | ||||||
|  |         public Builder setProtocol(String protocol) { | ||||||
|  |             this.protocol = protocol; | ||||||
|  |             return this; | ||||||
|  |         } | ||||||
|  | 
 | ||||||
|  |         public Builder setAlgorithm(String algorithm) { | ||||||
|  |             this.algorithm = algorithm; | ||||||
|  |             return this; | ||||||
|  |         } | ||||||
|  | 
 | ||||||
|  |         public Builder setTrafficType(String trafficType) { | ||||||
|  |             this.trafficType = trafficType; | ||||||
|  |             return this; | ||||||
|  |         } | ||||||
|  | 
 | ||||||
|  |         public Builder setIcmpType(Integer icmpType) { | ||||||
|  |             this.icmpType = icmpType; | ||||||
|  |             return this; | ||||||
|  |         } | ||||||
|  | 
 | ||||||
|  |         public Builder setIcmpCode(Integer icmpCode) { | ||||||
|  |             this.icmpCode = icmpCode; | ||||||
|  |             return this; | ||||||
|  |         } | ||||||
|  | 
 | ||||||
|  |         public Builder setSourceCidrList(List<String> sourceCidrList) { | ||||||
|  |             this.sourceCidrList = sourceCidrList; | ||||||
|  |             return this; | ||||||
|  |         } | ||||||
|  | 
 | ||||||
|  |         public Builder setDestinationCidrList(List<String> destinationCidrList) { | ||||||
|  |             this.destinationCidrList = destinationCidrList; | ||||||
|  |             return this; | ||||||
|  |         } | ||||||
|  | 
 | ||||||
|  |         public Builder setService(Network.Service service) { | ||||||
|  |             this.service = service; | ||||||
|  |             return this; | ||||||
|  |         } | ||||||
|  | 
 | ||||||
|  |         public SDNProviderNetworkRule build() { | ||||||
|  |             SDNProviderNetworkRule rule = new SDNProviderNetworkRule(); | ||||||
|  |             rule.setDomainId(this.domainId); | ||||||
|  |             rule.setAccountId(this.accountId); | ||||||
|  |             rule.setZoneId(this.zoneId); | ||||||
|  |             rule.setNetworkResourceId(this.networkResourceId); | ||||||
|  |             rule.setNetworkResourceName(this.networkResourceName); | ||||||
|  |             rule.setVpcResource(this.isVpcResource); | ||||||
|  |             rule.setVmId(this.vmId); | ||||||
|  |             rule.setVmIp(this.vmIp); | ||||||
|  |             rule.setPublicIp(this.publicIp); | ||||||
|  |             rule.setPublicPort(this.publicPort); | ||||||
|  |             rule.setPrivatePort(this.privatePort); | ||||||
|  |             rule.setProtocol(this.protocol); | ||||||
|  |             rule.setRuleId(this.ruleId); | ||||||
|  |             rule.setAlgorithm(this.algorithm); | ||||||
|  |             rule.setIcmpType(this.icmpType); | ||||||
|  |             rule.setIcmpCode(this.icmpCode); | ||||||
|  |             rule.setSourceCidrList(this.sourceCidrList); | ||||||
|  |             rule.setDestinationCidrList(this.destinationCidrList); | ||||||
|  |             rule.setTrafficType(this.trafficType); | ||||||
|  |             rule.setService(service); | ||||||
|  |             return rule; | ||||||
|  |         } | ||||||
|  |     } | ||||||
|  | } | ||||||
| @ -24,7 +24,7 @@ import org.apache.cloudstack.api.InternalIdentity; | |||||||
| 
 | 
 | ||||||
| public interface Site2SiteVpnConnection extends ControlledEntity, InternalIdentity, Displayable { | public interface Site2SiteVpnConnection extends ControlledEntity, InternalIdentity, Displayable { | ||||||
|     enum State { |     enum State { | ||||||
|         Pending, Connecting, Connected, Disconnected, Error, |         Pending, Connecting, Connected, Disconnected, Error, Removed | ||||||
|     } |     } | ||||||
| 
 | 
 | ||||||
|     @Override |     @Override | ||||||
|  | |||||||
| @ -23,6 +23,7 @@ import com.cloud.deploy.DeployDestination; | |||||||
| import com.cloud.exception.ConcurrentOperationException; | import com.cloud.exception.ConcurrentOperationException; | ||||||
| import com.cloud.exception.InsufficientCapacityException; | import com.cloud.exception.InsufficientCapacityException; | ||||||
| import com.cloud.exception.ResourceUnavailableException; | import com.cloud.exception.ResourceUnavailableException; | ||||||
|  | import com.cloud.network.IpAddress; | ||||||
| import com.cloud.network.Network; | import com.cloud.network.Network; | ||||||
| import com.cloud.network.Network.Capability; | import com.cloud.network.Network.Capability; | ||||||
| import com.cloud.network.Network.Provider; | import com.cloud.network.Network.Provider; | ||||||
| @ -87,6 +88,14 @@ public interface NetworkElement extends Adapter { | |||||||
|     boolean release(Network network, NicProfile nic, VirtualMachineProfile vm, ReservationContext context) throws ConcurrentOperationException, |     boolean release(Network network, NicProfile nic, VirtualMachineProfile vm, ReservationContext context) throws ConcurrentOperationException, | ||||||
|         ResourceUnavailableException; |         ResourceUnavailableException; | ||||||
| 
 | 
 | ||||||
|  |     /** | ||||||
|  |      * Release IP from the network provider if reserved | ||||||
|  |      * @param ipAddress | ||||||
|  |      */ | ||||||
|  |     default boolean releaseIp(IpAddress ipAddress) { | ||||||
|  |         return true; | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|     /** |     /** | ||||||
|      * The network is being shutdown. |      * The network is being shutdown. | ||||||
|      * @param network |      * @param network | ||||||
|  | |||||||
| @ -17,12 +17,40 @@ | |||||||
| package com.cloud.network.element; | package com.cloud.network.element; | ||||||
| 
 | 
 | ||||||
| import java.util.List; | import java.util.List; | ||||||
|  | import java.util.Objects; | ||||||
| 
 | 
 | ||||||
| import com.cloud.exception.ResourceUnavailableException; | import com.cloud.exception.ResourceUnavailableException; | ||||||
| import com.cloud.network.Network; | import com.cloud.network.Network; | ||||||
|  | import com.cloud.network.rules.FirewallRule; | ||||||
| import com.cloud.network.rules.PortForwardingRule; | import com.cloud.network.rules.PortForwardingRule; | ||||||
|  | import com.cloud.network.vpc.NetworkACLItem; | ||||||
| 
 | 
 | ||||||
| public interface PortForwardingServiceProvider extends NetworkElement, IpDeployingRequester { | public interface PortForwardingServiceProvider extends NetworkElement, IpDeployingRequester { | ||||||
|  | 
 | ||||||
|  |     static String getPublicPortRange(PortForwardingRule rule) { | ||||||
|  |         return Objects.equals(rule.getSourcePortStart(), rule.getSourcePortEnd()) ? | ||||||
|  |                 String.valueOf(rule.getSourcePortStart()) : | ||||||
|  |                 String.valueOf(rule.getSourcePortStart()).concat("-").concat(String.valueOf(rule.getSourcePortEnd())); | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|  |     static String getPrivatePFPortRange(PortForwardingRule rule) { | ||||||
|  |         return rule.getDestinationPortStart() == rule.getDestinationPortEnd() ? | ||||||
|  |                 String.valueOf(rule.getDestinationPortStart()) : | ||||||
|  |                 String.valueOf(rule.getDestinationPortStart()).concat("-").concat(String.valueOf(rule.getDestinationPortEnd())); | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|  |     static String getPrivatePortRange(FirewallRule rule) { | ||||||
|  |         return Objects.equals(rule.getSourcePortStart(), rule.getSourcePortEnd()) ? | ||||||
|  |                 String.valueOf(rule.getSourcePortStart()) : | ||||||
|  |                 String.valueOf(rule.getSourcePortStart()).concat("-").concat(String.valueOf(rule.getSourcePortEnd())); | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|  |     static String getPrivatePortRangeForACLRule(NetworkACLItem rule) { | ||||||
|  |         return Objects.equals(rule.getSourcePortStart(), rule.getSourcePortEnd()) ? | ||||||
|  |                 String.valueOf(rule.getSourcePortStart()) : | ||||||
|  |                 String.valueOf(rule.getSourcePortStart()).concat("-").concat(String.valueOf(rule.getSourcePortEnd())); | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|     /** |     /** | ||||||
|      * Apply rules |      * Apply rules | ||||||
|      * @param network |      * @param network | ||||||
|  | |||||||
| @ -55,4 +55,8 @@ public interface VpcProvider extends NetworkElement { | |||||||
|     boolean applyACLItemsToPrivateGw(PrivateGateway gateway, List<? extends NetworkACLItem> rules) throws ResourceUnavailableException; |     boolean applyACLItemsToPrivateGw(PrivateGateway gateway, List<? extends NetworkACLItem> rules) throws ResourceUnavailableException; | ||||||
| 
 | 
 | ||||||
|     boolean updateVpcSourceNatIp(Vpc vpc, IpAddress address); |     boolean updateVpcSourceNatIp(Vpc vpc, IpAddress address); | ||||||
|  | 
 | ||||||
|  |     default boolean updateVpc(Vpc vpc, String previousVpcName) { | ||||||
|  |         return true; | ||||||
|  |     } | ||||||
| } | } | ||||||
|  | |||||||
| @ -215,4 +215,8 @@ public interface NetworkGuru extends Adapter { | |||||||
|     default boolean isSlaacV6Only() { |     default boolean isSlaacV6Only() { | ||||||
|         return true; |         return true; | ||||||
|     } |     } | ||||||
|  | 
 | ||||||
|  |     default boolean update(Network network, String prevNetworkName) { | ||||||
|  |         return true; | ||||||
|  |     } | ||||||
| } | } | ||||||
|  | |||||||
| @ -0,0 +1,41 @@ | |||||||
|  | // Licensed to the Apache Software Foundation (ASF) under one | ||||||
|  | // or more contributor license agreements.  See the NOTICE file | ||||||
|  | // distributed with this work for additional information | ||||||
|  | // regarding copyright ownership.  The ASF licenses this file | ||||||
|  | // to you under the Apache License, Version 2.0 (the | ||||||
|  | // "License"); you may not use this file except in compliance | ||||||
|  | // with the License.  You may obtain a copy of the License at | ||||||
|  | // | ||||||
|  | //   http://www.apache.org/licenses/LICENSE-2.0 | ||||||
|  | // | ||||||
|  | // Unless required by applicable law or agreed to in writing, | ||||||
|  | // software distributed under the License is distributed on an | ||||||
|  | // "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY | ||||||
|  | // KIND, either express or implied.  See the License for the | ||||||
|  | // specific language governing permissions and limitations | ||||||
|  | // under the License. | ||||||
|  | package com.cloud.network.netris; | ||||||
|  | 
 | ||||||
|  | public class NetrisLbBackend { | ||||||
|  |     private long vmId; | ||||||
|  |     private String vmIp; | ||||||
|  |     private int port; | ||||||
|  | 
 | ||||||
|  |     public NetrisLbBackend(long vmId, String vmIp, int port) { | ||||||
|  |         this.vmId = vmId; | ||||||
|  |         this.vmIp = vmIp; | ||||||
|  |         this.port = port; | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|  |     public long getVmId() { | ||||||
|  |         return vmId; | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|  |     public String getVmIp() { | ||||||
|  |         return vmIp; | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|  |     public int getPort() { | ||||||
|  |         return port; | ||||||
|  |     } | ||||||
|  | } | ||||||
| @ -0,0 +1,108 @@ | |||||||
|  | // Licensed to the Apache Software Foundation (ASF) under one | ||||||
|  | // or more contributor license agreements.  See the NOTICE file | ||||||
|  | // distributed with this work for additional information | ||||||
|  | // regarding copyright ownership.  The ASF licenses this file | ||||||
|  | // to you under the Apache License, Version 2.0 (the | ||||||
|  | // "License"); you may not use this file except in compliance | ||||||
|  | // with the License.  You may obtain a copy of the License at | ||||||
|  | // | ||||||
|  | //   http://www.apache.org/licenses/LICENSE-2.0 | ||||||
|  | // | ||||||
|  | // Unless required by applicable law or agreed to in writing, | ||||||
|  | // software distributed under the License is distributed on an | ||||||
|  | // "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY | ||||||
|  | // KIND, either express or implied.  See the License for the | ||||||
|  | // specific language governing permissions and limitations | ||||||
|  | // under the License. | ||||||
|  | package com.cloud.network.netris; | ||||||
|  | 
 | ||||||
|  | import com.cloud.network.SDNProviderNetworkRule; | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | import java.util.List; | ||||||
|  | 
 | ||||||
|  | public class NetrisNetworkRule { | ||||||
|  |     public enum NetrisRuleAction { | ||||||
|  |         PERMIT, DENY | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|  |     private SDNProviderNetworkRule baseRule; | ||||||
|  |     private NetrisRuleAction aclAction; | ||||||
|  |     private List<NetrisLbBackend> lbBackends; | ||||||
|  |     private String lbRuleName; | ||||||
|  |     private String lbCidrList; | ||||||
|  |     private String reason; | ||||||
|  | 
 | ||||||
|  |     public NetrisNetworkRule(Builder builder) { | ||||||
|  |         this.baseRule = builder.baseRule; | ||||||
|  |         this.aclAction = builder.aclAction; | ||||||
|  |         this.lbBackends = builder.lbBackends; | ||||||
|  |         this.reason = builder.reason; | ||||||
|  |         this.lbCidrList = builder.lbCidrList; | ||||||
|  |         this.lbRuleName = builder.lbRuleName; | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|  |     public NetrisRuleAction getAclAction() { | ||||||
|  |         return aclAction; | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|  |     public List<NetrisLbBackend> getLbBackends() { | ||||||
|  |         return lbBackends; | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|  |     public String getReason() { | ||||||
|  |         return reason; | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|  |     public String getLbCidrList() {return lbCidrList; } | ||||||
|  | 
 | ||||||
|  |     public String getLbRuleName() { return lbRuleName; } | ||||||
|  | 
 | ||||||
|  |     public SDNProviderNetworkRule getBaseRule() { | ||||||
|  |         return baseRule; | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|  |     // Builder class extending the parent builder | ||||||
|  |     public static class Builder { | ||||||
|  |         private SDNProviderNetworkRule baseRule; | ||||||
|  |         private NetrisRuleAction aclAction; | ||||||
|  |         private List<NetrisLbBackend> lbBackends; | ||||||
|  |         private String reason; | ||||||
|  |         private String lbCidrList; | ||||||
|  |         private String lbRuleName; | ||||||
|  | 
 | ||||||
|  |         public Builder baseRule(SDNProviderNetworkRule baseRule) { | ||||||
|  |             this.baseRule = baseRule; | ||||||
|  |             return this; | ||||||
|  |         } | ||||||
|  | 
 | ||||||
|  |         public Builder aclAction(NetrisRuleAction aclAction) { | ||||||
|  |             this.aclAction = aclAction; | ||||||
|  |             return this; | ||||||
|  |         } | ||||||
|  | 
 | ||||||
|  |         public Builder lbBackends(List<NetrisLbBackend> lbBackends) { | ||||||
|  |             this.lbBackends = lbBackends; | ||||||
|  |             return this; | ||||||
|  |         } | ||||||
|  | 
 | ||||||
|  |         public Builder reason(String reason) { | ||||||
|  |             this.reason = reason; | ||||||
|  |             return this; | ||||||
|  |         } | ||||||
|  | 
 | ||||||
|  |         public Builder lbCidrList(String lbCidrList) { | ||||||
|  |             this.lbCidrList = lbCidrList; | ||||||
|  |             return this; | ||||||
|  |         } | ||||||
|  | 
 | ||||||
|  |         public Builder lbRuleName(String lbRuleName) { | ||||||
|  |             this.lbRuleName = lbRuleName; | ||||||
|  |             return this; | ||||||
|  |         } | ||||||
|  | 
 | ||||||
|  |         public NetrisNetworkRule build() { | ||||||
|  |             return new NetrisNetworkRule(this); | ||||||
|  |         } | ||||||
|  |     } | ||||||
|  | } | ||||||
| @ -0,0 +1,30 @@ | |||||||
|  | // Licensed to the Apache Software Foundation (ASF) under one | ||||||
|  | // or more contributor license agreements.  See the NOTICE file | ||||||
|  | // distributed with this work for additional information | ||||||
|  | // regarding copyright ownership.  The ASF licenses this file | ||||||
|  | // to you under the Apache License, Version 2.0 (the | ||||||
|  | // "License"); you may not use this file except in compliance | ||||||
|  | // with the License.  You may obtain a copy of the License at | ||||||
|  | // | ||||||
|  | //   http://www.apache.org/licenses/LICENSE-2.0 | ||||||
|  | // | ||||||
|  | // Unless required by applicable law or agreed to in writing, | ||||||
|  | // software distributed under the License is distributed on an | ||||||
|  | // "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY | ||||||
|  | // KIND, either express or implied.  See the License for the | ||||||
|  | // specific language governing permissions and limitations | ||||||
|  | // under the License. | ||||||
|  | package com.cloud.network.netris; | ||||||
|  | 
 | ||||||
|  | import org.apache.cloudstack.api.Identity; | ||||||
|  | import org.apache.cloudstack.api.InternalIdentity; | ||||||
|  | 
 | ||||||
|  | public interface NetrisProvider extends InternalIdentity, Identity { | ||||||
|  |     long getZoneId(); | ||||||
|  |     String getName(); | ||||||
|  |     String getUrl(); | ||||||
|  |     String getUsername(); | ||||||
|  |     String getSiteName(); | ||||||
|  |     String getTenantName(); | ||||||
|  |     String getNetrisTag(); | ||||||
|  | } | ||||||
							
								
								
									
										310
									
								
								api/src/main/java/com/cloud/network/netris/NetrisService.java
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										310
									
								
								api/src/main/java/com/cloud/network/netris/NetrisService.java
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,310 @@ | |||||||
|  | // Licensed to the Apache Software Foundation (ASF) under one | ||||||
|  | // or more contributor license agreements.  See the NOTICE file | ||||||
|  | // distributed with this work for additional information | ||||||
|  | // regarding copyright ownership.  The ASF licenses this file | ||||||
|  | // to you under the Apache License, Version 2.0 (the | ||||||
|  | // "License"); you may not use this file except in compliance | ||||||
|  | // with the License.  You may obtain a copy of the License at | ||||||
|  | // | ||||||
|  | //   http://www.apache.org/licenses/LICENSE-2.0 | ||||||
|  | // | ||||||
|  | // Unless required by applicable law or agreed to in writing, | ||||||
|  | // software distributed under the License is distributed on an | ||||||
|  | // "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY | ||||||
|  | // KIND, either express or implied.  See the License for the | ||||||
|  | // specific language governing permissions and limitations | ||||||
|  | // under the License. | ||||||
|  | package com.cloud.network.netris; | ||||||
|  | 
 | ||||||
|  | import com.cloud.network.IpAddress; | ||||||
|  | import com.cloud.network.Network; | ||||||
|  | import com.cloud.network.SDNProviderNetworkRule; | ||||||
|  | import com.cloud.network.vpc.StaticRoute; | ||||||
|  | import com.cloud.network.vpc.Vpc; | ||||||
|  | 
 | ||||||
|  | import java.util.List; | ||||||
|  | 
 | ||||||
|  | /** | ||||||
|  |  * Interface for Netris Services that provides methods to manage VPCs, networks, | ||||||
|  |  * NAT rules, network rules, and static routes in an SDN (Software Defined Networking) environment. | ||||||
|  |  */ | ||||||
|  | 
 | ||||||
|  | public interface NetrisService { | ||||||
|  | 
 | ||||||
|  |     /** | ||||||
|  |      * Creates IPAM (IP Address Management) allocations for zone-level public ranges. | ||||||
|  |      * | ||||||
|  |      * @param zoneId the ID of the zone | ||||||
|  |      * @return true if the operation is successful, false otherwise | ||||||
|  |      */ | ||||||
|  |     boolean createIPAMAllocationsForZoneLevelPublicRanges(long zoneId); | ||||||
|  | 
 | ||||||
|  |     /** | ||||||
|  |      * Creates a VPC (Virtual Private Cloud) resource. | ||||||
|  |      * | ||||||
|  |      * @param zoneId           the ID of the zone | ||||||
|  |      * @param accountId        the ID of the account | ||||||
|  |      * @param domainId         the ID of the domain | ||||||
|  |      * @param vpcId            the ID of the VPC | ||||||
|  |      * @param vpcName          the name of the VPC | ||||||
|  |      * @param sourceNatEnabled true if source NAT is enabled | ||||||
|  |      * @param cidr             the CIDR of the VPC | ||||||
|  |      * @param isVpcNetwork     true if it is a VPC network | ||||||
|  |      * @return true if the operation is successful, false otherwise | ||||||
|  |      */ | ||||||
|  |     boolean createVpcResource(long zoneId, long accountId, long domainId, Long vpcId, String vpcName, boolean sourceNatEnabled, String cidr, boolean isVpcNetwork); | ||||||
|  | 
 | ||||||
|  |     /** | ||||||
|  |      * Updates an existing VPC resource. | ||||||
|  |      * | ||||||
|  |      * @param zoneId           the ID of the zone | ||||||
|  |      * @param accountId        the ID of the account | ||||||
|  |      * @param domainId         the ID of the domain | ||||||
|  |      * @param vpcId            the ID of the VPC | ||||||
|  |      * @param vpcName          the new name of the VPC | ||||||
|  |      * @param previousVpcName  the previous name of the VPC | ||||||
|  |      * @return true if the operation is successful, false otherwise | ||||||
|  |      */ | ||||||
|  |     boolean updateVpcResource(long zoneId, long accountId, long domainId, Long vpcId, String vpcName, String previousVpcName); | ||||||
|  | 
 | ||||||
|  |     /** | ||||||
|  |      * Deletes a VPC resource. | ||||||
|  |      * | ||||||
|  |      * @param zoneId   the ID of the zone | ||||||
|  |      * @param accountId the ID of the account | ||||||
|  |      * @param domainId the ID of the domain | ||||||
|  |      * @param vpc      the VPC to delete | ||||||
|  |      * @return true if the operation is successful, false otherwise | ||||||
|  |      */ | ||||||
|  |     boolean deleteVpcResource(long zoneId, long accountId, long domainId, Vpc vpc); | ||||||
|  | 
 | ||||||
|  |     /** | ||||||
|  |      * Creates a virtual network (vNet) resource. | ||||||
|  |      * | ||||||
|  |      * @param zoneId           the ID of the zone | ||||||
|  |      * @param accountId        the ID of the account | ||||||
|  |      * @param domainId         the ID of the domain | ||||||
|  |      * @param vpcName          the name of the VPC | ||||||
|  |      * @param vpcId            the ID of the VPC | ||||||
|  |      * @param networkName      the name of the network | ||||||
|  |      * @param networkId        the ID of the network | ||||||
|  |      * @param cidr             the CIDR of the network | ||||||
|  |      * @param globalRouting    true if global routing is enabled | ||||||
|  |      * @return true if the operation is successful, false otherwise | ||||||
|  |      */ | ||||||
|  |     boolean createVnetResource(Long zoneId, long accountId, long domainId, String vpcName, Long vpcId, String networkName, Long networkId, String cidr, Boolean globalRouting); | ||||||
|  | 
 | ||||||
|  |     /** | ||||||
|  |      * Updates an existing vNet resource. | ||||||
|  |      * | ||||||
|  |      * @param zoneId          the ID of the zone | ||||||
|  |      * @param accountId       the ID of the account | ||||||
|  |      * @param domainId        the ID of the domain | ||||||
|  |      * @param vpcName         the name of the VPC | ||||||
|  |      * @param vpcId           the ID of the VPC | ||||||
|  |      * @param networkName     the new name of the network | ||||||
|  |      * @param networkId       the ID of the network | ||||||
|  |      * @param prevNetworkName the previous name of the network | ||||||
|  |      * @return true if the operation is successful, false otherwise | ||||||
|  |      */ | ||||||
|  |     boolean updateVnetResource(Long zoneId, long accountId, long domainId, String vpcName, Long vpcId, String networkName, Long networkId, String prevNetworkName); | ||||||
|  | 
 | ||||||
|  |     /** | ||||||
|  |      * Deletes an existing vNet resource. | ||||||
|  |      * | ||||||
|  |      * @param zoneId       the ID of the zone | ||||||
|  |      * @param accountId    the ID of the account | ||||||
|  |      * @param domainId     the ID of the domain | ||||||
|  |      * @param vpcName      the name of the VPC | ||||||
|  |      * @param vpcId        the ID of the VPC | ||||||
|  |      * @param networkName  the name of the network | ||||||
|  |      * @param networkId    the ID of the network | ||||||
|  |      * @param cidr         the CIDR of the network | ||||||
|  |      * @return true if the operation is successful, false otherwise | ||||||
|  |      */ | ||||||
|  |     boolean deleteVnetResource(long zoneId, long accountId, long domainId, String vpcName, Long vpcId, String networkName, Long networkId, String cidr); | ||||||
|  | 
 | ||||||
|  |     /** | ||||||
|  |      * Creates a source NAT rule for a VPC or network. | ||||||
|  |      * | ||||||
|  |      * @param zoneId          the ID of the zone | ||||||
|  |      * @param accountId       the ID of the account | ||||||
|  |      * @param domainId        the ID of the domain | ||||||
|  |      * @param vpcName         the name of the VPC | ||||||
|  |      * @param vpcId           the ID of the VPC | ||||||
|  |      * @param networkName     the name of the network | ||||||
|  |      * @param networkId       the ID of the network | ||||||
|  |      * @param isForVpc        true if the rule applies to a VPC | ||||||
|  |      * @param vpcCidr         the VPC CIDR | ||||||
|  |      * @param sourceNatIp     the source NAT IP | ||||||
|  |      * @return true if the operation is successful, false otherwise | ||||||
|  |      */ | ||||||
|  |     boolean createSnatRule(long zoneId, long accountId, long domainId, String vpcName, long vpcId, String networkName, long networkId, boolean isForVpc, String vpcCidr, String sourceNatIp); | ||||||
|  | 
 | ||||||
|  |     /** | ||||||
|  |      * Creates a port forwarding rule for a VPC or network. | ||||||
|  |      * | ||||||
|  |      * @param zoneId          the ID of the zone | ||||||
|  |      * @param accountId       the ID of the account | ||||||
|  |      * @param domainId        the ID of the domain | ||||||
|  |      * @param vpcName         the name of the VPC | ||||||
|  |      * @param vpcId           the ID of the VPC | ||||||
|  |      * @param networkName     the name of the network | ||||||
|  |      * @param networkId       the ID of the network | ||||||
|  |      * @param isForVpc        true if the rule applies to a VPC | ||||||
|  |      * @param vpcCidr         the VPC CIDR | ||||||
|  |      * @param networkRule     the network rule to forward | ||||||
|  |      * @return true if the operation is successful, false otherwise | ||||||
|  |      */ | ||||||
|  |     boolean createPortForwardingRule(long zoneId, long accountId, long domainId, String vpcName, long vpcId, String networkName, Long networkId, boolean isForVpc, String vpcCidr, SDNProviderNetworkRule networkRule); | ||||||
|  | 
 | ||||||
|  |     /** | ||||||
|  |      * Deletes a port forwarding rule for a VPC or network. | ||||||
|  |      * | ||||||
|  |      * @param zoneId          the ID of the zone | ||||||
|  |      * @param accountId       the ID of the account | ||||||
|  |      * @param domainId        the ID of the domain | ||||||
|  |      * @param vpcName         the name of the VPC | ||||||
|  |      * @param vpcId           the ID of the VPC | ||||||
|  |      * @param networkName     the name of the network | ||||||
|  |      * @param networkId       the ID of the network | ||||||
|  |      * @param isForVpc        true if the rule applies to a VPC | ||||||
|  |      * @param vpcCidr         the VPC CIDR | ||||||
|  |      * @param networkRule     the network rule to remove | ||||||
|  |      * @return true if the operation is successful, false otherwise | ||||||
|  |      */ | ||||||
|  |     boolean deletePortForwardingRule(long zoneId, long accountId, long domainId, String vpcName, Long vpcId, String networkName, Long networkId, boolean isForVpc, String vpcCidr, SDNProviderNetworkRule networkRule); | ||||||
|  | 
 | ||||||
|  |     /** | ||||||
|  |      * Updates the source NAT IP for a specified VPC. | ||||||
|  |      * | ||||||
|  |      * @param vpc     the VPC to updates | ||||||
|  |      * @param address the new source NAT IP address | ||||||
|  |      * @return true if the operation is successful, false otherwise | ||||||
|  |      */ | ||||||
|  |     boolean updateVpcSourceNatIp(Vpc vpc, IpAddress address); | ||||||
|  | 
 | ||||||
|  |     /** | ||||||
|  |      * Creates a static NAT rule for a specific VM. | ||||||
|  |      * | ||||||
|  |      * @param zoneId             the ID of the zone | ||||||
|  |      * @param accountId          the ID of the account | ||||||
|  |      * @param domainId           the ID of the domain | ||||||
|  |      * @param networkResourceName the name of the network resource | ||||||
|  |      * @param networkResourceId  the ID of the network resource | ||||||
|  |      * @param isForVpc           true if the rule applies to a VPC | ||||||
|  |      * @param vpcCidr            the VPC CIDR | ||||||
|  |      * @param staticNatIp        the static NAT IP | ||||||
|  |      * @param vmIp               the VM's IP address | ||||||
|  |      * @param vmId               the ID of the VM | ||||||
|  |      * @return true if the operation is successful, false otherwise | ||||||
|  |      */ | ||||||
|  |     boolean createStaticNatRule(long zoneId, long accountId, long domainId, String networkResourceName, Long networkResourceId, boolean isForVpc, String vpcCidr, String staticNatIp, String vmIp, long vmId); | ||||||
|  | 
 | ||||||
|  |     /** | ||||||
|  |      * Deletes a static NAT rule for a specific VM. | ||||||
|  |      * | ||||||
|  |      * @param zoneId             the ID of the zone | ||||||
|  |      * @param accountId          the ID of the account | ||||||
|  |      * @param domainId           the ID of the domain | ||||||
|  |      * @param networkResourceName the name of the network resource | ||||||
|  |      * @param networkResourceId  the ID of the network resource | ||||||
|  |      * @param isForVpc           true if the rule applies to a VPC | ||||||
|  |      * @param staticNatIp        the static NAT IP | ||||||
|  |      * @param vmId               the ID of the VM | ||||||
|  |      * @return true if the operation is successful, false otherwise | ||||||
|  |      */ | ||||||
|  |     boolean deleteStaticNatRule(long zoneId, long accountId, long domainId, String networkResourceName, Long networkResourceId, boolean isForVpc, String staticNatIp, long vmId); | ||||||
|  | 
 | ||||||
|  |     /** | ||||||
|  |      * Adds firewall rules to a specific network. | ||||||
|  |      * | ||||||
|  |      * @param network       the target network | ||||||
|  |      * @param firewallRules the list of firewall rules to add | ||||||
|  |      * @return true if the operation is successful, false otherwise | ||||||
|  |      */ | ||||||
|  |     boolean addFirewallRules(Network network, List<NetrisNetworkRule> firewallRules); | ||||||
|  | 
 | ||||||
|  |     /** | ||||||
|  |      * Deletes firewall rules from a specific network. | ||||||
|  |      * | ||||||
|  |      * @param network       the target network | ||||||
|  |      * @param firewallRules the list of firewall rules to delete | ||||||
|  |      * @return true if the operation is successful, false otherwise | ||||||
|  |      */ | ||||||
|  |     boolean deleteFirewallRules(Network network, List<NetrisNetworkRule> firewallRules); | ||||||
|  | 
 | ||||||
|  |     /** | ||||||
|  |      * Adds or updates a static route for a specific network or VPC. | ||||||
|  |      * | ||||||
|  |      * @param zoneId             the ID of the zone | ||||||
|  |      * @param accountId          the ID of the account | ||||||
|  |      * @param domainId           the ID of the domain | ||||||
|  |      * @param networkResourceName the name of the network resource | ||||||
|  |      * @param networkResourceId  the ID of the network resource | ||||||
|  |      * @param isForVpc           true if it is for a VPC | ||||||
|  |      * @param prefix             the IP prefix of the route | ||||||
|  |      * @param nextHop            the next hop address | ||||||
|  |      * @param routeId            the ID of the route | ||||||
|  |      * @param updateRoute        true if the route should be updated | ||||||
|  |      * @return true if the operation is successful, false otherwise | ||||||
|  |      */ | ||||||
|  |     boolean addOrUpdateStaticRoute(long zoneId, long accountId, long domainId, String networkResourceName, Long networkResourceId, boolean isForVpc, String prefix, String nextHop, Long routeId, boolean updateRoute); | ||||||
|  | 
 | ||||||
|  |     /** | ||||||
|  |      * Deletes a specific static route for a network or VPC. | ||||||
|  |      * | ||||||
|  |      * @param zoneId             the ID of the zone | ||||||
|  |      * @param accountId          the ID of the account | ||||||
|  |      * @param domainId           the ID of the domain | ||||||
|  |      * @param networkResourceName the name of the network resource | ||||||
|  |      * @param networkResourceId  the ID of the network resource | ||||||
|  |      * @param isForVpc           true if it is for a VPC | ||||||
|  |      * @param prefix             the IP prefix of the route | ||||||
|  |      * @param nextHop            the next hop address | ||||||
|  |      * @param routeId            the ID of the route | ||||||
|  |      * @return true if the operation is successful, false otherwise | ||||||
|  |      */ | ||||||
|  |     boolean deleteStaticRoute(long zoneId, long accountId, long domainId, String networkResourceName, Long networkResourceId, boolean isForVpc, String prefix, String nextHop, Long routeId); | ||||||
|  | 
 | ||||||
|  |     /** | ||||||
|  |      * Lists static routes for a specific network or VPC. | ||||||
|  |      * | ||||||
|  |      * @param zoneId             the ID of the zone | ||||||
|  |      * @param accountId          the ID of the account | ||||||
|  |      * @param domainId           the ID of the domain | ||||||
|  |      * @param networkResourceName the name of the network resource | ||||||
|  |      * @param networkResourceId  the ID of the network resource | ||||||
|  |      * @param isForVpc           true if it is for a VPC | ||||||
|  |      * @param prefix             the IP prefix of the route | ||||||
|  |      * @param nextHop            the next hop address | ||||||
|  |      * @param routeId            the ID of the route | ||||||
|  |      * @return a list of static routes | ||||||
|  |      */ | ||||||
|  |     List<StaticRoute> listStaticRoutes(long zoneId, long accountId, long domainId, String networkResourceName, Long networkResourceId, boolean isForVpc, String prefix, String nextHop, Long routeId); | ||||||
|  | 
 | ||||||
|  |     /** | ||||||
|  |      * Releases a NAT IP address. | ||||||
|  |      * | ||||||
|  |      * @param zoneId   the ID of the zone | ||||||
|  |      * @param publicIp the public NAT IP to release | ||||||
|  |      * @return true if the operation is successful, false otherwise | ||||||
|  |      */ | ||||||
|  |     boolean releaseNatIp(long zoneId, String publicIp); | ||||||
|  | 
 | ||||||
|  |     /** | ||||||
|  |      * Creates or updates a load balancer (LB) rule. | ||||||
|  |      * | ||||||
|  |      * @param rule the network rule for the load balancer | ||||||
|  |      * @return true if the operation is successful, false otherwise | ||||||
|  |      */ | ||||||
|  |     boolean createOrUpdateLbRule(NetrisNetworkRule rule); | ||||||
|  | 
 | ||||||
|  |     /** | ||||||
|  |      * Deletes a load balancer (LB) rule. | ||||||
|  |      * | ||||||
|  |      * @param rule the network rule to delete | ||||||
|  |      * @return true if the operation is successful, false otherwise | ||||||
|  |      */ | ||||||
|  |     boolean deleteLbRule(NetrisNetworkRule rule); | ||||||
|  | } | ||||||
| @ -25,6 +25,7 @@ public interface StaticRoute extends ControlledEntity, Identity, InternalIdentit | |||||||
|         Staged, // route been created but has never got through network rule conflict detection.  Routes in this state can not be sent to VPC virtual router. |         Staged, // route been created but has never got through network rule conflict detection.  Routes in this state can not be sent to VPC virtual router. | ||||||
|         Add,    // Add means the route has been created and has gone through network rule conflict detection. |         Add,    // Add means the route has been created and has gone through network rule conflict detection. | ||||||
|         Active, // Route has been sent to the VPC router and reported to be active. |         Active, // Route has been sent to the VPC router and reported to be active. | ||||||
|  |         Update, | ||||||
|         Revoke,  // Revoke means this route has been revoked. If this route has been sent to the VPC router, the route will be deleted from database. |         Revoke,  // Revoke means this route has been revoked. If this route has been sent to the VPC router, the route will be deleted from database. | ||||||
|         Deleting // rule has been revoked and is scheduled for deletion |         Deleting // rule has been revoked and is scheduled for deletion | ||||||
|     } |     } | ||||||
| @ -32,7 +33,9 @@ public interface StaticRoute extends ControlledEntity, Identity, InternalIdentit | |||||||
|     /** |     /** | ||||||
|      * @return |      * @return | ||||||
|      */ |      */ | ||||||
|     long getVpcGatewayId(); |     Long getVpcGatewayId(); | ||||||
|  | 
 | ||||||
|  |     String getNextHop(); | ||||||
| 
 | 
 | ||||||
|     /** |     /** | ||||||
|      * @return |      * @return | ||||||
|  | |||||||
| @ -23,7 +23,8 @@ public class StaticRouteProfile implements StaticRoute { | |||||||
|     private String targetCidr; |     private String targetCidr; | ||||||
|     private long accountId; |     private long accountId; | ||||||
|     private long domainId; |     private long domainId; | ||||||
|     private long gatewayId; |     private Long gatewayId; | ||||||
|  |     private String nextHop; | ||||||
|     private StaticRoute.State state; |     private StaticRoute.State state; | ||||||
|     private long vpcId; |     private long vpcId; | ||||||
|     String vlanTag; |     String vlanTag; | ||||||
| @ -46,6 +47,18 @@ public class StaticRouteProfile implements StaticRoute { | |||||||
|         ipAddress = gateway.getIp4Address(); |         ipAddress = gateway.getIp4Address(); | ||||||
|     } |     } | ||||||
| 
 | 
 | ||||||
|  |     public StaticRouteProfile(StaticRoute staticRoute) { | ||||||
|  |         id = staticRoute.getId(); | ||||||
|  |         uuid = staticRoute.getUuid(); | ||||||
|  |         targetCidr = staticRoute.getCidr(); | ||||||
|  |         accountId = staticRoute.getAccountId(); | ||||||
|  |         domainId = staticRoute.getDomainId(); | ||||||
|  |         gatewayId = staticRoute.getVpcGatewayId(); | ||||||
|  |         state = staticRoute.getState(); | ||||||
|  |         vpcId = staticRoute.getVpcId(); | ||||||
|  |         gateway = staticRoute.getNextHop(); | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|     @Override |     @Override | ||||||
|     public long getAccountId() { |     public long getAccountId() { | ||||||
|         return accountId; |         return accountId; | ||||||
| @ -57,10 +70,15 @@ public class StaticRouteProfile implements StaticRoute { | |||||||
|     } |     } | ||||||
| 
 | 
 | ||||||
|     @Override |     @Override | ||||||
|     public long getVpcGatewayId() { |     public Long getVpcGatewayId() { | ||||||
|         return gatewayId; |         return gatewayId; | ||||||
|     } |     } | ||||||
| 
 | 
 | ||||||
|  |     @Override | ||||||
|  |     public String getNextHop() { | ||||||
|  |         return nextHop; | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|     @Override |     @Override | ||||||
|     public String getCidr() { |     public String getCidr() { | ||||||
|         return targetCidr; |         return targetCidr; | ||||||
|  | |||||||
| @ -32,6 +32,8 @@ public interface VpcOffering extends InternalIdentity, Identity { | |||||||
|     public static final String redundantVPCOfferingName = "Redundant VPC offering"; |     public static final String redundantVPCOfferingName = "Redundant VPC offering"; | ||||||
|     public static final String DEFAULT_VPC_NAT_NSX_OFFERING_NAME = "VPC offering with NSX - NAT Mode"; |     public static final String DEFAULT_VPC_NAT_NSX_OFFERING_NAME = "VPC offering with NSX - NAT Mode"; | ||||||
|     public static final String DEFAULT_VPC_ROUTE_NSX_OFFERING_NAME = "VPC offering with NSX - Route Mode"; |     public static final String DEFAULT_VPC_ROUTE_NSX_OFFERING_NAME = "VPC offering with NSX - Route Mode"; | ||||||
|  |     public static final String DEFAULT_VPC_ROUTE_NETRIS_OFFERING_NAME = "VPC offering with Netris - Route Mode"; | ||||||
|  |     public static final String DEFAULT_VPC_NAT_NETRIS_OFFERING_NAME = "VPC offering with Netris - NAT Mode"; | ||||||
| 
 | 
 | ||||||
|     /** |     /** | ||||||
|      * |      * | ||||||
| @ -56,8 +58,6 @@ public interface VpcOffering extends InternalIdentity, Identity { | |||||||
|      */ |      */ | ||||||
|     boolean isDefault(); |     boolean isDefault(); | ||||||
| 
 | 
 | ||||||
|     boolean isForNsx(); |  | ||||||
| 
 |  | ||||||
|     NetworkOffering.NetworkMode getNetworkMode(); |     NetworkOffering.NetworkMode getNetworkMode(); | ||||||
| 
 | 
 | ||||||
|     /** |     /** | ||||||
|  | |||||||
| @ -37,7 +37,7 @@ public interface VpcProvisioningService { | |||||||
|     VpcOffering createVpcOffering(String name, String displayText, List<String> supportedServices, |     VpcOffering createVpcOffering(String name, String displayText, List<String> supportedServices, | ||||||
|                                   Map<String, List<String>> serviceProviders, |                                   Map<String, List<String>> serviceProviders, | ||||||
|                                   Map serviceCapabilitystList, NetUtils.InternetProtocol internetProtocol, |                                   Map serviceCapabilitystList, NetUtils.InternetProtocol internetProtocol, | ||||||
|                                   Long serviceOfferingId, Boolean forNsx, NetworkOffering.NetworkMode networkMode, |                                   Long serviceOfferingId, String externalProvider, NetworkOffering.NetworkMode networkMode, | ||||||
|                                   List<Long> domainIds, List<Long> zoneIds, VpcOffering.State state, |                                   List<Long> domainIds, List<Long> zoneIds, VpcOffering.State state, | ||||||
|                                   NetworkOffering.RoutingMode routingMode, boolean specifyAsNumber); |                                   NetworkOffering.RoutingMode routingMode, boolean specifyAsNumber); | ||||||
| 
 | 
 | ||||||
|  | |||||||
| @ -238,7 +238,7 @@ public interface VpcService { | |||||||
|      * @param cidr |      * @param cidr | ||||||
|      * @return |      * @return | ||||||
|      */ |      */ | ||||||
|     StaticRoute createStaticRoute(long gatewayId, String cidr) throws NetworkRuleConflictException; |     StaticRoute createStaticRoute(Long gatewayId, Long vpcId, String nextHop, String cidr) throws NetworkRuleConflictException; | ||||||
| 
 | 
 | ||||||
|     /** |     /** | ||||||
|      * Lists static routes based on parameters passed to the call |      * Lists static routes based on parameters passed to the call | ||||||
|  | |||||||
| @ -64,6 +64,8 @@ public interface NetworkOffering extends InfrastructureEntity, InternalIdentity, | |||||||
|     public static final String DEFAULT_NAT_NSX_OFFERING_FOR_VPC = "DefaultNATNSXNetworkOfferingForVpc"; |     public static final String DEFAULT_NAT_NSX_OFFERING_FOR_VPC = "DefaultNATNSXNetworkOfferingForVpc"; | ||||||
|     public static final String DEFAULT_NAT_NSX_OFFERING_FOR_VPC_WITH_ILB = "DefaultNATNSXNetworkOfferingForVpcWithInternalLB"; |     public static final String DEFAULT_NAT_NSX_OFFERING_FOR_VPC_WITH_ILB = "DefaultNATNSXNetworkOfferingForVpcWithInternalLB"; | ||||||
|     public static final String DEFAULT_ROUTED_NSX_OFFERING_FOR_VPC = "DefaultRoutedNSXNetworkOfferingForVpc"; |     public static final String DEFAULT_ROUTED_NSX_OFFERING_FOR_VPC = "DefaultRoutedNSXNetworkOfferingForVpc"; | ||||||
|  |     public static final String DEFAULT_ROUTED_NETRIS_OFFERING_FOR_VPC = "DefaultRoutedNetrisNetworkOfferingForVpc"; | ||||||
|  |     public static final String DEFAULT_NAT_NETRIS_OFFERING_FOR_VPC = "DefaultNATNetrisNetworkOfferingForVpc"; | ||||||
|     public static final String DEFAULT_NAT_NSX_OFFERING = "DefaultNATNSXNetworkOffering"; |     public static final String DEFAULT_NAT_NSX_OFFERING = "DefaultNATNSXNetworkOffering"; | ||||||
|     public static final String DEFAULT_ROUTED_NSX_OFFERING = "DefaultRoutedNSXNetworkOffering"; |     public static final String DEFAULT_ROUTED_NSX_OFFERING = "DefaultRoutedNSXNetworkOffering"; | ||||||
|     public final static String QuickCloudNoServices = "QuickCloudNoServices"; |     public final static String QuickCloudNoServices = "QuickCloudNoServices"; | ||||||
| @ -102,10 +104,6 @@ public interface NetworkOffering extends InfrastructureEntity, InternalIdentity, | |||||||
| 
 | 
 | ||||||
|     boolean isForVpc(); |     boolean isForVpc(); | ||||||
| 
 | 
 | ||||||
|     boolean isForTungsten(); |  | ||||||
| 
 |  | ||||||
|     boolean isForNsx(); |  | ||||||
| 
 |  | ||||||
|     NetworkMode getNetworkMode(); |     NetworkMode getNetworkMode(); | ||||||
| 
 | 
 | ||||||
|     TrafficType getTrafficType(); |     TrafficType getTrafficType(); | ||||||
|  | |||||||
| @ -227,6 +227,7 @@ public class ApiConstants { | |||||||
|     public static final String FORMAT = "format"; |     public static final String FORMAT = "format"; | ||||||
|     public static final String FOR_VIRTUAL_NETWORK = "forvirtualnetwork"; |     public static final String FOR_VIRTUAL_NETWORK = "forvirtualnetwork"; | ||||||
|     public static final String FOR_SYSTEM_VMS = "forsystemvms"; |     public static final String FOR_SYSTEM_VMS = "forsystemvms"; | ||||||
|  |     public static final String FOR_PROVIDER = "forprovider"; | ||||||
|     public static final String FULL_PATH = "fullpath"; |     public static final String FULL_PATH = "fullpath"; | ||||||
|     public static final String GATEWAY = "gateway"; |     public static final String GATEWAY = "gateway"; | ||||||
|     public static final String IP6_GATEWAY = "ip6gateway"; |     public static final String IP6_GATEWAY = "ip6gateway"; | ||||||
| @ -271,6 +272,7 @@ public class ApiConstants { | |||||||
|     public static final String PREVIOUS_OWNER_ID = "previousownerid"; |     public static final String PREVIOUS_OWNER_ID = "previousownerid"; | ||||||
|     public static final String PREVIOUS_OWNER_NAME = "previousownername"; |     public static final String PREVIOUS_OWNER_NAME = "previousownername"; | ||||||
|     public static final String NEXT_ACL_RULE_ID = "nextaclruleid"; |     public static final String NEXT_ACL_RULE_ID = "nextaclruleid"; | ||||||
|  |     public static final String NEXT_HOP = "nexthop"; | ||||||
|     public static final String MOVE_ACL_CONSISTENCY_HASH = "aclconsistencyhash"; |     public static final String MOVE_ACL_CONSISTENCY_HASH = "aclconsistencyhash"; | ||||||
|     public static final String IMAGE_PATH = "imagepath"; |     public static final String IMAGE_PATH = "imagepath"; | ||||||
|     public static final String INSTANCE_CONVERSION_SUPPORTED = "instanceconversionsupported"; |     public static final String INSTANCE_CONVERSION_SUPPORTED = "instanceconversionsupported"; | ||||||
| @ -352,6 +354,8 @@ public class ApiConstants { | |||||||
|     public static final String MIN_CPU_NUMBER = "mincpunumber"; |     public static final String MIN_CPU_NUMBER = "mincpunumber"; | ||||||
|     public static final String MIN_MEMORY = "minmemory"; |     public static final String MIN_MEMORY = "minmemory"; | ||||||
|     public static final String MIGRATION_TYPE = "migrationtype"; |     public static final String MIGRATION_TYPE = "migrationtype"; | ||||||
|  |     public static final String MIGRATION_JOB_ID = "migrationjobid"; | ||||||
|  |     public static final String MIGRATION_JOB_STATUS = "migrationjobstatus"; | ||||||
|     public static final String MIGRATIONS = "migrations"; |     public static final String MIGRATIONS = "migrations"; | ||||||
|     public static final String MEMORY = "memory"; |     public static final String MEMORY = "memory"; | ||||||
|     public static final String MODE = "mode"; |     public static final String MODE = "mode"; | ||||||
| @ -488,6 +492,7 @@ public class ApiConstants { | |||||||
|     public static final String SIGNATURE = "signature"; |     public static final String SIGNATURE = "signature"; | ||||||
|     public static final String SIGNATURE_VERSION = "signatureversion"; |     public static final String SIGNATURE_VERSION = "signatureversion"; | ||||||
|     public static final String SINCE = "since"; |     public static final String SINCE = "since"; | ||||||
|  |     public static final String SITE_NAME = "sitename"; | ||||||
|     public static final String SIZE = "size"; |     public static final String SIZE = "size"; | ||||||
|     public static final String SIZEGB = "sizegb"; |     public static final String SIZEGB = "sizegb"; | ||||||
|     public static final String SNAPSHOT = "snapshot"; |     public static final String SNAPSHOT = "snapshot"; | ||||||
| @ -536,6 +541,7 @@ public class ApiConstants { | |||||||
|     public static final String TIMEOUT = "timeout"; |     public static final String TIMEOUT = "timeout"; | ||||||
|     public static final String TIMEZONE = "timezone"; |     public static final String TIMEZONE = "timezone"; | ||||||
|     public static final String TIMEZONEOFFSET = "timezoneoffset"; |     public static final String TIMEZONEOFFSET = "timezoneoffset"; | ||||||
|  |     public static final String TENANT_NAME = "tenantname"; | ||||||
|     public static final String TOTAL = "total"; |     public static final String TOTAL = "total"; | ||||||
|     public static final String TOTAL_SUBNETS = "totalsubnets"; |     public static final String TOTAL_SUBNETS = "totalsubnets"; | ||||||
|     public static final String TYPE = "type"; |     public static final String TYPE = "type"; | ||||||
| @ -912,6 +918,8 @@ public class ApiConstants { | |||||||
|     public static final String NETWORK = "network"; |     public static final String NETWORK = "network"; | ||||||
|     public static final String VPC_ID = "vpcid"; |     public static final String VPC_ID = "vpcid"; | ||||||
|     public static final String VPC_NAME = "vpcname"; |     public static final String VPC_NAME = "vpcname"; | ||||||
|  |     public static final String VPC_GATEWAY_ID = "vpcgatewayid"; | ||||||
|  |     public static final String VPC_GATEWAY_IP = "vpcgatewayip"; | ||||||
|     public static final String GATEWAY_ID = "gatewayid"; |     public static final String GATEWAY_ID = "gatewayid"; | ||||||
|     public static final String CAN_USE_FOR_DEPLOY = "canusefordeploy"; |     public static final String CAN_USE_FOR_DEPLOY = "canusefordeploy"; | ||||||
|     public static final String RESOURCE_IDS = "resourceids"; |     public static final String RESOURCE_IDS = "resourceids"; | ||||||
| @ -1207,6 +1215,9 @@ public class ApiConstants { | |||||||
|     public static final String SOURCE_NAT_IP_ID = "sourcenatipaddressid"; |     public static final String SOURCE_NAT_IP_ID = "sourcenatipaddressid"; | ||||||
|     public static final String HAS_RULES = "hasrules"; |     public static final String HAS_RULES = "hasrules"; | ||||||
|     public static final String NSX_DETAIL_KEY = "forNsx"; |     public static final String NSX_DETAIL_KEY = "forNsx"; | ||||||
|  |     public static final String NETRIS_DETAIL_KEY = "forNetris"; | ||||||
|  |     public static final String NETRIS_TAG = "netristag"; | ||||||
|  |     public static final String NETRIS_VXLAN_ID = "netrisvxlanid"; | ||||||
|     public static final String DISK_PATH = "diskpath"; |     public static final String DISK_PATH = "diskpath"; | ||||||
|     public static final String IMPORT_SOURCE = "importsource"; |     public static final String IMPORT_SOURCE = "importsource"; | ||||||
|     public static final String TEMP_PATH = "temppath"; |     public static final String TEMP_PATH = "temppath"; | ||||||
|  | |||||||
| @ -17,6 +17,7 @@ | |||||||
| package org.apache.cloudstack.api.command.admin.network; | package org.apache.cloudstack.api.command.admin.network; | ||||||
| 
 | 
 | ||||||
| import java.util.ArrayList; | import java.util.ArrayList; | ||||||
|  | import java.util.Arrays; | ||||||
| import java.util.Collection; | import java.util.Collection; | ||||||
| import java.util.HashMap; | import java.util.HashMap; | ||||||
| import java.util.Iterator; | import java.util.Iterator; | ||||||
| @ -140,12 +141,19 @@ public class CreateNetworkOfferingCmd extends BaseCmd { | |||||||
|             description = "true if network offering is meant to be used for VPC, false otherwise.") |             description = "true if network offering is meant to be used for VPC, false otherwise.") | ||||||
|     private Boolean forVpc; |     private Boolean forVpc; | ||||||
| 
 | 
 | ||||||
|  |     @Deprecated | ||||||
|     @Parameter(name = ApiConstants.FOR_NSX, |     @Parameter(name = ApiConstants.FOR_NSX, | ||||||
|             type = CommandType.BOOLEAN, |             type = CommandType.BOOLEAN, | ||||||
|             description = "true if network offering is meant to be used for NSX, false otherwise.", |             description = "true if network offering is meant to be used for NSX, false otherwise.", | ||||||
|             since = "4.20.0") |             since = "4.20.0") | ||||||
|     private Boolean forNsx; |     private Boolean forNsx; | ||||||
| 
 | 
 | ||||||
|  |     @Parameter(name = ApiConstants.PROVIDER, | ||||||
|  |             type = CommandType.STRING, | ||||||
|  |             description = "Name of the provider providing the service", | ||||||
|  |             since = "4.21.0") | ||||||
|  |     private String provider; | ||||||
|  | 
 | ||||||
|     @Parameter(name = ApiConstants.NSX_SUPPORT_LB, |     @Parameter(name = ApiConstants.NSX_SUPPORT_LB, | ||||||
|             type = CommandType.BOOLEAN, |             type = CommandType.BOOLEAN, | ||||||
|             description = "true if network offering for NSX network offering supports Load balancer service.", |             description = "true if network offering for NSX network offering supports Load balancer service.", | ||||||
| @ -257,18 +265,38 @@ public class CreateNetworkOfferingCmd extends BaseCmd { | |||||||
|         return serviceOfferingId; |         return serviceOfferingId; | ||||||
|     } |     } | ||||||
| 
 | 
 | ||||||
|  |     public boolean isExternalNetworkProvider() { | ||||||
|  |         return Arrays.asList("NSX", "Netris").stream() | ||||||
|  |                 .anyMatch(s -> provider != null && s.equalsIgnoreCase(provider)); | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|  |     public boolean isForNsx() { | ||||||
|  |         return provider != null && provider.equalsIgnoreCase("NSX"); | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|  |     public boolean isForNetris() { | ||||||
|  |         return provider != null && provider.equalsIgnoreCase("Netris"); | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|  |     public String getProvider() { | ||||||
|  |         return provider; | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|     public List<String> getSupportedServices() { |     public List<String> getSupportedServices() { | ||||||
|         if (!isForNsx()) { |         if (!isExternalNetworkProvider()) { | ||||||
|             return supportedServices == null ? new ArrayList<String>() : supportedServices; |             return supportedServices == null ? new ArrayList<String>() : supportedServices; | ||||||
|         } else { |         } else { | ||||||
|             List<String> services = new ArrayList<>(List.of( |             List<String> services = new ArrayList<>(List.of( | ||||||
|                     Dhcp.getName(), |                     Dhcp.getName(), | ||||||
|                     Dns.getName(), |                     Dns.getName(), | ||||||
|                     StaticNat.getName(), |  | ||||||
|                     SourceNat.getName(), |  | ||||||
|                     PortForwarding.getName(), |  | ||||||
|                     UserData.getName() |                     UserData.getName() | ||||||
|             )); |             )); | ||||||
|  |             if (NetworkOffering.NetworkMode.NATTED.name().equalsIgnoreCase(getNetworkMode())) { | ||||||
|  |                 services.addAll(Arrays.asList( | ||||||
|  |                         StaticNat.getName(), | ||||||
|  |                         SourceNat.getName(), | ||||||
|  |                         PortForwarding.getName())); | ||||||
|  |             } | ||||||
|             if (getNsxSupportsLbService()) { |             if (getNsxSupportsLbService()) { | ||||||
|                 services.add(Lb.getName()); |                 services.add(Lb.getName()); | ||||||
|             } |             } | ||||||
| @ -308,10 +336,6 @@ public class CreateNetworkOfferingCmd extends BaseCmd { | |||||||
|         return forVpc; |         return forVpc; | ||||||
|     } |     } | ||||||
| 
 | 
 | ||||||
|     public boolean isForNsx() { |  | ||||||
|         return BooleanUtils.isTrue(forNsx); |  | ||||||
|     } |  | ||||||
| 
 |  | ||||||
|     public String getNetworkMode() { |     public String getNetworkMode() { | ||||||
|         return networkMode; |         return networkMode; | ||||||
|     } |     } | ||||||
| @ -345,7 +369,7 @@ public class CreateNetworkOfferingCmd extends BaseCmd { | |||||||
| 
 | 
 | ||||||
|     public Map<String, List<String>> getServiceProviders() { |     public Map<String, List<String>> getServiceProviders() { | ||||||
|         Map<String, List<String>> serviceProviderMap = new HashMap<>(); |         Map<String, List<String>> serviceProviderMap = new HashMap<>(); | ||||||
|         if (serviceProviderList != null && !serviceProviderList.isEmpty() && !isForNsx()) { |         if (serviceProviderList != null && !serviceProviderList.isEmpty() && !isExternalNetworkProvider()) { | ||||||
|             Collection servicesCollection = serviceProviderList.values(); |             Collection servicesCollection = serviceProviderList.values(); | ||||||
|             Iterator iter = servicesCollection.iterator(); |             Iterator iter = servicesCollection.iterator(); | ||||||
|             while (iter.hasNext()) { |             while (iter.hasNext()) { | ||||||
| @ -361,17 +385,16 @@ public class CreateNetworkOfferingCmd extends BaseCmd { | |||||||
|                 providerList.add(provider); |                 providerList.add(provider); | ||||||
|                 serviceProviderMap.put(service, providerList); |                 serviceProviderMap.put(service, providerList); | ||||||
|             } |             } | ||||||
|         } else if (Boolean.TRUE.equals(forNsx)) { |         } else if (isExternalNetworkProvider()) { | ||||||
|             getServiceProviderMapForNsx(serviceProviderMap); |             getServiceProviderMapForExternalProvider(serviceProviderMap, Network.Provider.getProvider(provider).getName()); | ||||||
|         } |         } | ||||||
|         return serviceProviderMap; |         return serviceProviderMap; | ||||||
|     } |     } | ||||||
| 
 | 
 | ||||||
|     private void getServiceProviderMapForNsx(Map<String, List<String>> serviceProviderMap) { |     private void getServiceProviderMapForExternalProvider(Map<String, List<String>> serviceProviderMap, String provider) { | ||||||
|         String routerProvider = Boolean.TRUE.equals(getForVpc()) ? VirtualRouterProvider.Type.VPCVirtualRouter.name() : |         String routerProvider = Boolean.TRUE.equals(getForVpc()) ? VirtualRouterProvider.Type.VPCVirtualRouter.name() : | ||||||
|                 VirtualRouterProvider.Type.VirtualRouter.name(); |                 VirtualRouterProvider.Type.VirtualRouter.name(); | ||||||
|         List<String> unsupportedServices = new ArrayList<>(List.of("Vpn", "SecurityGroup", "Connectivity", |         List<String> unsupportedServices = new ArrayList<>(List.of("Vpn", "Gateway", "SecurityGroup", "Connectivity", "BaremetalPxeService")); | ||||||
|                 "Gateway", "BaremetalPxeService")); |  | ||||||
|         List<String> routerSupported = List.of("Dhcp", "Dns", "UserData"); |         List<String> routerSupported = List.of("Dhcp", "Dns", "UserData"); | ||||||
|         List<String> allServices = Service.listAllServices().stream().map(Service::getName).collect(Collectors.toList()); |         List<String> allServices = Service.listAllServices().stream().map(Service::getName).collect(Collectors.toList()); | ||||||
|         if (routerProvider.equals(VirtualRouterProvider.Type.VPCVirtualRouter.name())) { |         if (routerProvider.equals(VirtualRouterProvider.Type.VPCVirtualRouter.name())) { | ||||||
| @ -384,8 +407,9 @@ public class CreateNetworkOfferingCmd extends BaseCmd { | |||||||
|                 continue; |                 continue; | ||||||
|             if (routerSupported.contains(service)) |             if (routerSupported.contains(service)) | ||||||
|                 serviceProviderMap.put(service, List.of(routerProvider)); |                 serviceProviderMap.put(service, List.of(routerProvider)); | ||||||
|             else |             else if (NetworkOffering.NetworkMode.NATTED.name().equalsIgnoreCase(getNetworkMode()) || NetworkACL.getName().equalsIgnoreCase(service)) { | ||||||
|                 serviceProviderMap.put(service, List.of(Network.Provider.Nsx.getName())); |                     serviceProviderMap.put(service, List.of(provider)); | ||||||
|  |                 } | ||||||
|             if (!getNsxSupportsLbService()) { |             if (!getNsxSupportsLbService()) { | ||||||
|                 serviceProviderMap.remove(Lb.getName()); |                 serviceProviderMap.remove(Lb.getName()); | ||||||
|             } |             } | ||||||
|  | |||||||
| @ -16,6 +16,8 @@ | |||||||
| // under the License. | // under the License. | ||||||
| package org.apache.cloudstack.api.command.admin.vlan; | package org.apache.cloudstack.api.command.admin.vlan; | ||||||
| 
 | 
 | ||||||
|  | import com.cloud.configuration.ConfigurationService; | ||||||
|  | import com.cloud.network.Network; | ||||||
| import com.cloud.utils.net.NetUtils; | import com.cloud.utils.net.NetUtils; | ||||||
| 
 | 
 | ||||||
| import org.apache.cloudstack.api.APICommand; | import org.apache.cloudstack.api.APICommand; | ||||||
| @ -39,7 +41,6 @@ import com.cloud.exception.ResourceAllocationException; | |||||||
| import com.cloud.exception.ResourceUnavailableException; | import com.cloud.exception.ResourceUnavailableException; | ||||||
| import com.cloud.user.Account; | import com.cloud.user.Account; | ||||||
| 
 | 
 | ||||||
| import java.util.Objects; |  | ||||||
| 
 | 
 | ||||||
| @APICommand(name = "createVlanIpRange", description = "Creates a VLAN IP range.", responseObject = VlanIpRangeResponse.class, | @APICommand(name = "createVlanIpRange", description = "Creates a VLAN IP range.", responseObject = VlanIpRangeResponse.class, | ||||||
|         requestHasSensitiveInfo = false, responseHasSensitiveInfo = false) |         requestHasSensitiveInfo = false, responseHasSensitiveInfo = false) | ||||||
| @ -114,8 +115,8 @@ public class CreateVlanIpRangeCmd extends BaseCmd { | |||||||
|     @Parameter(name = ApiConstants.FOR_SYSTEM_VMS, type = CommandType.BOOLEAN, description = "true if IP range is set to system vms, false if not") |     @Parameter(name = ApiConstants.FOR_SYSTEM_VMS, type = CommandType.BOOLEAN, description = "true if IP range is set to system vms, false if not") | ||||||
|     private Boolean forSystemVms; |     private Boolean forSystemVms; | ||||||
| 
 | 
 | ||||||
|     @Parameter(name = ApiConstants.FOR_NSX, type = CommandType.BOOLEAN, description = "true if the IP range is used for NSX resource", since = "4.20.0") |     @Parameter(name = ApiConstants.PROVIDER, type = CommandType.STRING, description = "Provider name for which the IP range is reserved for", since = "4.21.0") | ||||||
|     private boolean forNsx; |     private String provider; | ||||||
| 
 | 
 | ||||||
|     ///////////////////////////////////////////////////// |     ///////////////////////////////////////////////////// | ||||||
|     /////////////////// Accessors /////////////////////// |     /////////////////// Accessors /////////////////////// | ||||||
| @ -157,12 +158,12 @@ public class CreateVlanIpRangeCmd extends BaseCmd { | |||||||
|         return startIp; |         return startIp; | ||||||
|     } |     } | ||||||
| 
 | 
 | ||||||
|     public boolean isForNsx() { |     public Network.Provider getProvider() { | ||||||
|         return !Objects.isNull(forNsx) && forNsx; |         return Network.Provider.getProvider(provider); | ||||||
|     } |     } | ||||||
| 
 | 
 | ||||||
|     public String getVlan() { |     public String getVlan() { | ||||||
|         if ((vlan == null || vlan.isEmpty()) && !isForNsx()) { |         if ((vlan == null || vlan.isEmpty()) && !ConfigurationService.IsIpRangeForProvider(getProvider())) { | ||||||
|             vlan = "untagged"; |             vlan = "untagged"; | ||||||
|         } |         } | ||||||
|         return vlan; |         return vlan; | ||||||
|  | |||||||
| @ -17,6 +17,7 @@ | |||||||
| package org.apache.cloudstack.api.command.admin.vpc; | package org.apache.cloudstack.api.command.admin.vpc; | ||||||
| 
 | 
 | ||||||
| import java.util.ArrayList; | import java.util.ArrayList; | ||||||
|  | import java.util.Arrays; | ||||||
| import java.util.Collection; | import java.util.Collection; | ||||||
| import java.util.HashMap; | import java.util.HashMap; | ||||||
| import java.util.Iterator; | import java.util.Iterator; | ||||||
| @ -25,10 +26,12 @@ import java.util.List; | |||||||
| import java.util.Map; | import java.util.Map; | ||||||
| import java.util.Set; | import java.util.Set; | ||||||
| import java.util.stream.Collectors; | import java.util.stream.Collectors; | ||||||
|  | import java.util.stream.Stream; | ||||||
| 
 | 
 | ||||||
| import com.cloud.exception.InvalidParameterValueException; | import com.cloud.exception.InvalidParameterValueException; | ||||||
| import com.cloud.network.Network; | import com.cloud.network.Network; | ||||||
| import com.cloud.network.VirtualRouterProvider; | import com.cloud.network.VirtualRouterProvider; | ||||||
|  | import com.cloud.offering.NetworkOffering; | ||||||
| import org.apache.cloudstack.api.response.DomainResponse; | import org.apache.cloudstack.api.response.DomainResponse; | ||||||
| import org.apache.cloudstack.api.response.ZoneResponse; | import org.apache.cloudstack.api.response.ZoneResponse; | ||||||
| import org.apache.commons.collections.CollectionUtils; | import org.apache.commons.collections.CollectionUtils; | ||||||
| @ -57,6 +60,7 @@ import static com.cloud.network.Network.Service.SourceNat; | |||||||
| import static com.cloud.network.Network.Service.PortForwarding; | import static com.cloud.network.Network.Service.PortForwarding; | ||||||
| import static com.cloud.network.Network.Service.NetworkACL; | import static com.cloud.network.Network.Service.NetworkACL; | ||||||
| import static com.cloud.network.Network.Service.UserData; | import static com.cloud.network.Network.Service.UserData; | ||||||
|  | import static com.cloud.network.Network.Service.Gateway; | ||||||
| 
 | 
 | ||||||
| @APICommand(name = "createVPCOffering", description = "Creates VPC offering", responseObject = VpcOfferingResponse.class, | @APICommand(name = "createVPCOffering", description = "Creates VPC offering", responseObject = VpcOfferingResponse.class, | ||||||
|         requestHasSensitiveInfo = false, responseHasSensitiveInfo = false) |         requestHasSensitiveInfo = false, responseHasSensitiveInfo = false) | ||||||
| @ -112,12 +116,19 @@ public class CreateVPCOfferingCmd extends BaseAsyncCreateCmd { | |||||||
|             since = "4.13") |             since = "4.13") | ||||||
|     private List<Long> zoneIds; |     private List<Long> zoneIds; | ||||||
| 
 | 
 | ||||||
|  |     @Deprecated | ||||||
|     @Parameter(name = ApiConstants.FOR_NSX, |     @Parameter(name = ApiConstants.FOR_NSX, | ||||||
|             type = CommandType.BOOLEAN, |             type = CommandType.BOOLEAN, | ||||||
|             description = "true if network offering is meant to be used for NSX, false otherwise.", |             description = "true if network offering is meant to be used for NSX, false otherwise.", | ||||||
|             since = "4.20.0") |             since = "4.20.0") | ||||||
|     private Boolean forNsx; |     private Boolean forNsx; | ||||||
| 
 | 
 | ||||||
|  |     @Parameter(name = ApiConstants.PROVIDER, | ||||||
|  |             type = CommandType.STRING, | ||||||
|  |             description = "Name of the provider providing the service", | ||||||
|  |             since = "4.21.0") | ||||||
|  |     private String provider; | ||||||
|  | 
 | ||||||
|     @Parameter(name = ApiConstants.NSX_SUPPORT_LB, |     @Parameter(name = ApiConstants.NSX_SUPPORT_LB, | ||||||
|             type = CommandType.BOOLEAN, |             type = CommandType.BOOLEAN, | ||||||
|             description = "true if network offering for NSX VPC offering supports Load balancer service.", |             description = "true if network offering for NSX VPC offering supports Load balancer service.", | ||||||
| @ -158,20 +169,31 @@ public class CreateVPCOfferingCmd extends BaseAsyncCreateCmd { | |||||||
|         return StringUtils.isEmpty(displayText) ? vpcOfferingName : displayText; |         return StringUtils.isEmpty(displayText) ? vpcOfferingName : displayText; | ||||||
|     } |     } | ||||||
| 
 | 
 | ||||||
|  |     public boolean isExternalNetworkProvider() { | ||||||
|  |         return Arrays.asList("NSX", "Netris").stream() | ||||||
|  |                 .anyMatch(s -> provider != null && s.equalsIgnoreCase(provider)); | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|     public List<String> getSupportedServices() { |     public List<String> getSupportedServices() { | ||||||
|         if (!isForNsx() && CollectionUtils.isEmpty(supportedServices)) { |         if (!isExternalNetworkProvider() && CollectionUtils.isEmpty(supportedServices)) { | ||||||
|             throw new InvalidParameterValueException("Supported services needs to be provided"); |             throw new InvalidParameterValueException("Supported services needs to be provided"); | ||||||
|         } |         } | ||||||
|         if (isForNsx()) { |         if (isExternalNetworkProvider()) { | ||||||
|             supportedServices = new ArrayList<>(List.of( |             supportedServices = new ArrayList<>(List.of( | ||||||
|                     Dhcp.getName(), |                     Dhcp.getName(), | ||||||
|                     Dns.getName(), |                     Dns.getName(), | ||||||
|                     StaticNat.getName(), |  | ||||||
|                     SourceNat.getName(), |  | ||||||
|                     NetworkACL.getName(), |                     NetworkACL.getName(), | ||||||
|                     PortForwarding.getName(), |  | ||||||
|                     UserData.getName() |                     UserData.getName() | ||||||
|                     )); |                     )); | ||||||
|  |             if (NetworkOffering.NetworkMode.NATTED.name().equalsIgnoreCase(getNetworkMode())) { | ||||||
|  |                 supportedServices.addAll(Arrays.asList( | ||||||
|  |                         StaticNat.getName(), | ||||||
|  |                         SourceNat.getName(), | ||||||
|  |                         PortForwarding.getName())); | ||||||
|  |             } | ||||||
|  |             if (NetworkOffering.NetworkMode.ROUTED.name().equalsIgnoreCase(getNetworkMode())) { | ||||||
|  |                 supportedServices.add(Gateway.getName()); | ||||||
|  |             } | ||||||
|             if (getNsxSupportsLbService()) { |             if (getNsxSupportsLbService()) { | ||||||
|                 supportedServices.add(Lb.getName()); |                 supportedServices.add(Lb.getName()); | ||||||
|             } |             } | ||||||
| @ -179,8 +201,8 @@ public class CreateVPCOfferingCmd extends BaseAsyncCreateCmd { | |||||||
|         return supportedServices; |         return supportedServices; | ||||||
|     } |     } | ||||||
| 
 | 
 | ||||||
|     public boolean isForNsx() { |     public String getProvider() { | ||||||
|         return BooleanUtils.isTrue(forNsx); |         return provider; | ||||||
|     } |     } | ||||||
| 
 | 
 | ||||||
|     public String getNetworkMode() { |     public String getNetworkMode() { | ||||||
| @ -193,7 +215,7 @@ public class CreateVPCOfferingCmd extends BaseAsyncCreateCmd { | |||||||
| 
 | 
 | ||||||
|     public Map<String, List<String>> getServiceProviders() { |     public Map<String, List<String>> getServiceProviders() { | ||||||
|         Map<String, List<String>> serviceProviderMap = new HashMap<>(); |         Map<String, List<String>> serviceProviderMap = new HashMap<>(); | ||||||
|         if (serviceProviderList != null && !serviceProviderList.isEmpty() && !isForNsx()) { |         if (serviceProviderList != null && !serviceProviderList.isEmpty() && !isExternalNetworkProvider()) { | ||||||
|             Collection<? extends Map<String, String>> servicesCollection = serviceProviderList.values(); |             Collection<? extends Map<String, String>> servicesCollection = serviceProviderList.values(); | ||||||
|             Iterator<? extends Map<String, String>> iter = servicesCollection.iterator(); |             Iterator<? extends Map<String, String>> iter = servicesCollection.iterator(); | ||||||
|             while (iter.hasNext()) { |             while (iter.hasNext()) { | ||||||
| @ -213,16 +235,18 @@ public class CreateVPCOfferingCmd extends BaseAsyncCreateCmd { | |||||||
|                 providerList.add(provider); |                 providerList.add(provider); | ||||||
|                 serviceProviderMap.put(service, providerList); |                 serviceProviderMap.put(service, providerList); | ||||||
|             } |             } | ||||||
|         } else if (Boolean.TRUE.equals(forNsx)) { |         } else if (isExternalNetworkProvider()) { | ||||||
|             getServiceProviderMapForNsx(serviceProviderMap); |             getServiceProviderMapForExternalProvider(serviceProviderMap, Network.Provider.getProvider(provider).getName()); | ||||||
|         } |         } | ||||||
| 
 | 
 | ||||||
|         return serviceProviderMap; |         return serviceProviderMap; | ||||||
|     } |     } | ||||||
| 
 | 
 | ||||||
|     private void getServiceProviderMapForNsx(Map<String, List<String>> serviceProviderMap) { |     private void getServiceProviderMapForExternalProvider(Map<String, List<String>> serviceProviderMap, String provider) { | ||||||
|         List<String> unsupportedServices = List.of("Vpn", "BaremetalPxeService", "SecurityGroup", "Connectivity", |         List<String> unsupportedServices = new ArrayList<>(List.of("Vpn", "BaremetalPxeService", "SecurityGroup", "Connectivity", "Firewall")); | ||||||
|                 "Gateway", "Firewall"); |         if (NetworkOffering.NetworkMode.NATTED.name().equalsIgnoreCase(getNetworkMode())) { | ||||||
|  |             unsupportedServices.add("Gateway"); | ||||||
|  |         } | ||||||
|         List<String> routerSupported = List.of("Dhcp", "Dns", "UserData"); |         List<String> routerSupported = List.of("Dhcp", "Dns", "UserData"); | ||||||
|         List<String> allServices = Network.Service.listAllServices().stream().map(Network.Service::getName).collect(Collectors.toList()); |         List<String> allServices = Network.Service.listAllServices().stream().map(Network.Service::getName).collect(Collectors.toList()); | ||||||
|         for (String service : allServices) { |         for (String service : allServices) { | ||||||
| @ -230,8 +254,10 @@ public class CreateVPCOfferingCmd extends BaseAsyncCreateCmd { | |||||||
|                 continue; |                 continue; | ||||||
|             if (routerSupported.contains(service)) |             if (routerSupported.contains(service)) | ||||||
|                 serviceProviderMap.put(service, List.of(VirtualRouterProvider.Type.VPCVirtualRouter.name())); |                 serviceProviderMap.put(service, List.of(VirtualRouterProvider.Type.VPCVirtualRouter.name())); | ||||||
|             else |             else if (NetworkOffering.NetworkMode.NATTED.name().equalsIgnoreCase(getNetworkMode()) || | ||||||
|                 serviceProviderMap.put(service, List.of(Network.Provider.Nsx.getName())); |                     Stream.of(NetworkACL.getName(), Gateway.getName()).anyMatch(s -> s.equalsIgnoreCase(service))) { | ||||||
|  |                 serviceProviderMap.put(service, List.of(provider)); | ||||||
|  |             } | ||||||
|         } |         } | ||||||
|         if (!getNsxSupportsLbService()) { |         if (!getNsxSupportsLbService()) { | ||||||
|             serviceProviderMap.remove(Lb.getName()); |             serviceProviderMap.remove(Lb.getName()); | ||||||
|  | |||||||
| @ -108,6 +108,9 @@ public class ListPublicIpAddressesCmd extends BaseListRetrieveOnlyResourceCountC | |||||||
|     @Parameter(name = ApiConstants.FOR_SYSTEM_VMS, type = CommandType.BOOLEAN, description = "true if range is dedicated for system VMs", since = "4.20.0") |     @Parameter(name = ApiConstants.FOR_SYSTEM_VMS, type = CommandType.BOOLEAN, description = "true if range is dedicated for system VMs", since = "4.20.0") | ||||||
|     private Boolean forSystemVMs; |     private Boolean forSystemVMs; | ||||||
| 
 | 
 | ||||||
|  |     @Parameter(name = ApiConstants.FOR_PROVIDER, type = CommandType.BOOLEAN, description = "true if range is dedicated for external network provider", since = "4.21.0") | ||||||
|  |     private Boolean forProvider; | ||||||
|  | 
 | ||||||
|     ///////////////////////////////////////////////////// |     ///////////////////////////////////////////////////// | ||||||
|     /////////////////// Accessors /////////////////////// |     /////////////////// Accessors /////////////////////// | ||||||
|     ///////////////////////////////////////////////////// |     ///////////////////////////////////////////////////// | ||||||
| @ -183,6 +186,10 @@ public class ListPublicIpAddressesCmd extends BaseListRetrieveOnlyResourceCountC | |||||||
|         return BooleanUtils.isTrue(forSystemVMs); |         return BooleanUtils.isTrue(forSystemVMs); | ||||||
|     } |     } | ||||||
| 
 | 
 | ||||||
|  |     public boolean isForProvider() { | ||||||
|  |         return BooleanUtils.isTrue(forProvider); | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|     ///////////////////////////////////////////////////// |     ///////////////////////////////////////////////////// | ||||||
|     /////////////// API Implementation/////////////////// |     /////////////// API Implementation/////////////////// | ||||||
|     ///////////////////////////////////////////////////// |     ///////////////////////////////////////////////////// | ||||||
|  | |||||||
| @ -27,6 +27,7 @@ import org.apache.cloudstack.api.Parameter; | |||||||
| import org.apache.cloudstack.api.ServerApiException; | import org.apache.cloudstack.api.ServerApiException; | ||||||
| import org.apache.cloudstack.api.response.PrivateGatewayResponse; | import org.apache.cloudstack.api.response.PrivateGatewayResponse; | ||||||
| import org.apache.cloudstack.api.response.StaticRouteResponse; | import org.apache.cloudstack.api.response.StaticRouteResponse; | ||||||
|  | import org.apache.cloudstack.api.response.VpcResponse; | ||||||
| import org.apache.cloudstack.context.CallContext; | import org.apache.cloudstack.context.CallContext; | ||||||
| 
 | 
 | ||||||
| import com.cloud.event.EventTypes; | import com.cloud.event.EventTypes; | ||||||
| @ -45,20 +46,40 @@ public class CreateStaticRouteCmd extends BaseAsyncCreateCmd { | |||||||
|     @Parameter(name = ApiConstants.GATEWAY_ID, |     @Parameter(name = ApiConstants.GATEWAY_ID, | ||||||
|                type = CommandType.UUID, |                type = CommandType.UUID, | ||||||
|                entityType = PrivateGatewayResponse.class, |                entityType = PrivateGatewayResponse.class, | ||||||
|                required = true, |                description = "the gateway id we are creating static route for. Mutually exclusive with the nexthop parameter") | ||||||
|                description = "the gateway id we are creating static route for") |  | ||||||
|     private Long gatewayId; |     private Long gatewayId; | ||||||
| 
 | 
 | ||||||
|  |     @Parameter(name = ApiConstants.VPC_ID, | ||||||
|  |             type = CommandType.UUID, | ||||||
|  |             entityType = VpcResponse.class, | ||||||
|  |             description = "the vpc id for which the static route is created. This is required for nexthop parameter", | ||||||
|  |             since = "4.21.0") | ||||||
|  |     private Long vpcId; | ||||||
|  | 
 | ||||||
|  |     @Parameter(name = ApiConstants.NEXT_HOP, | ||||||
|  |             type = CommandType.STRING, | ||||||
|  |             description = "the next hop of static route. Mutually exclusive with the gatewayid parameter", | ||||||
|  |             since = "4.21.0") | ||||||
|  |     private String nextHop; | ||||||
|  | 
 | ||||||
|     @Parameter(name = ApiConstants.CIDR, required = true, type = CommandType.STRING, description = "static route cidr") |     @Parameter(name = ApiConstants.CIDR, required = true, type = CommandType.STRING, description = "static route cidr") | ||||||
|     private String cidr; |     private String cidr; | ||||||
| 
 | 
 | ||||||
|     ///////////////////////////////////////////////////// |     ///////////////////////////////////////////////////// | ||||||
|     /////////////////// Accessors /////////////////////// |     /////////////////// Accessors /////////////////////// | ||||||
|     ///////////////////////////////////////////////////// |     ///////////////////////////////////////////////////// | ||||||
|     public long getGatewayId() { |     public Long getGatewayId() { | ||||||
|         return gatewayId; |         return gatewayId; | ||||||
|     } |     } | ||||||
| 
 | 
 | ||||||
|  |     public Long getVpcId() { | ||||||
|  |         return vpcId; | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|  |     public String getNextHop() { | ||||||
|  |         return nextHop; | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|     public String getCidr() { |     public String getCidr() { | ||||||
|         return cidr; |         return cidr; | ||||||
|     } |     } | ||||||
| @ -69,7 +90,7 @@ public class CreateStaticRouteCmd extends BaseAsyncCreateCmd { | |||||||
|     @Override |     @Override | ||||||
|     public void create() throws ResourceAllocationException { |     public void create() throws ResourceAllocationException { | ||||||
|         try { |         try { | ||||||
|             StaticRoute result = _vpcService.createStaticRoute(getGatewayId(), getCidr()); |             StaticRoute result = _vpcService.createStaticRoute(getGatewayId(), getVpcId(), getNextHop(), getCidr()); | ||||||
|             setEntityId(result.getId()); |             setEntityId(result.getId()); | ||||||
|             setEntityUuid(result.getUuid()); |             setEntityUuid(result.getUuid()); | ||||||
|         } catch (NetworkRuleConflictException ex) { |         } catch (NetworkRuleConflictException ex) { | ||||||
| @ -114,11 +135,8 @@ public class CreateStaticRouteCmd extends BaseAsyncCreateCmd { | |||||||
| 
 | 
 | ||||||
|     @Override |     @Override | ||||||
|     public long getEntityOwnerId() { |     public long getEntityOwnerId() { | ||||||
|         VpcGateway gateway = _entityMgr.findById(VpcGateway.class, gatewayId); |         Long vpcId = getSyncObjId(); | ||||||
|         if (gateway == null) { |         return _entityMgr.findById(Vpc.class, vpcId).getAccountId(); | ||||||
|             throw new InvalidParameterValueException("Invalid gateway id is specified"); |  | ||||||
|         } |  | ||||||
|         return _entityMgr.findById(Vpc.class, gateway.getVpcId()).getAccountId(); |  | ||||||
|     } |     } | ||||||
| 
 | 
 | ||||||
|     @Override |     @Override | ||||||
| @ -128,11 +146,20 @@ public class CreateStaticRouteCmd extends BaseAsyncCreateCmd { | |||||||
| 
 | 
 | ||||||
|     @Override |     @Override | ||||||
|     public Long getSyncObjId() { |     public Long getSyncObjId() { | ||||||
|         VpcGateway gateway = _entityMgr.findById(VpcGateway.class, gatewayId); |         if (gatewayId != null) { | ||||||
|         if (gateway == null) { |             VpcGateway gateway = _entityMgr.findById(VpcGateway.class, gatewayId); | ||||||
|             throw new InvalidParameterValueException("Invalid id is specified for the gateway"); |             if (gateway == null) { | ||||||
|  |                 throw new InvalidParameterValueException("Invalid id is specified for the gateway"); | ||||||
|  |             } | ||||||
|  |             return gateway.getVpcId(); | ||||||
|  |         } else if (vpcId != null) { | ||||||
|  |             Vpc vpc = _entityMgr.findById(Vpc.class, vpcId); | ||||||
|  |             if (vpc == null) { | ||||||
|  |                 throw new InvalidParameterValueException("Invalid vpc id is specified"); | ||||||
|  |             } | ||||||
|  |             return vpc.getId(); | ||||||
|         } |         } | ||||||
|         return gateway.getVpcId(); |         throw new InvalidParameterValueException("One of vpcId or gatewayId must be specified"); | ||||||
|     } |     } | ||||||
| 
 | 
 | ||||||
|     @Override |     @Override | ||||||
|  | |||||||
| @ -28,6 +28,7 @@ import org.apache.cloudstack.api.BaseAsyncCmd; | |||||||
| import org.apache.cloudstack.api.BaseAsyncCreateCmd; | import org.apache.cloudstack.api.BaseAsyncCreateCmd; | ||||||
| import org.apache.cloudstack.api.Parameter; | import org.apache.cloudstack.api.Parameter; | ||||||
| import org.apache.cloudstack.api.ServerApiException; | import org.apache.cloudstack.api.ServerApiException; | ||||||
|  | import org.apache.cloudstack.api.response.IPAddressResponse; | ||||||
| import org.apache.cloudstack.api.response.Site2SiteVpnGatewayResponse; | import org.apache.cloudstack.api.response.Site2SiteVpnGatewayResponse; | ||||||
| import org.apache.cloudstack.api.response.VpcResponse; | import org.apache.cloudstack.api.response.VpcResponse; | ||||||
| import org.apache.cloudstack.context.CallContext; | import org.apache.cloudstack.context.CallContext; | ||||||
| @ -44,9 +45,16 @@ public class CreateVpnGatewayCmd extends BaseAsyncCreateCmd { | |||||||
|                type = CommandType.UUID, |                type = CommandType.UUID, | ||||||
|                entityType = VpcResponse.class, |                entityType = VpcResponse.class, | ||||||
|                required = true, |                required = true, | ||||||
|                description = "public ip address id of the vpn gateway") |                description = "id of the vpc") | ||||||
|     private Long vpcId; |     private Long vpcId; | ||||||
| 
 | 
 | ||||||
|  |     @Parameter(name = ApiConstants.IP_ADDRESS_ID, | ||||||
|  |             type = CommandType.UUID, | ||||||
|  |             entityType = IPAddressResponse.class, | ||||||
|  |             description = "the public IP address ID for which VPN gateway is being enabled. By default the source NAT IP or router IP will be used.", | ||||||
|  |             since = "4.21.0") | ||||||
|  |     private Long ipAddressId; | ||||||
|  | 
 | ||||||
|     @Parameter(name = ApiConstants.FOR_DISPLAY, type = CommandType.BOOLEAN, description = "an optional field, whether to the display the vpn to the end user or not", since = "4.4", authorized = {RoleType.Admin}) |     @Parameter(name = ApiConstants.FOR_DISPLAY, type = CommandType.BOOLEAN, description = "an optional field, whether to the display the vpn to the end user or not", since = "4.4", authorized = {RoleType.Admin}) | ||||||
|     private Boolean display; |     private Boolean display; | ||||||
| 
 | 
 | ||||||
| @ -58,6 +66,10 @@ public class CreateVpnGatewayCmd extends BaseAsyncCreateCmd { | |||||||
|         return vpcId; |         return vpcId; | ||||||
|     } |     } | ||||||
| 
 | 
 | ||||||
|  |     public Long getIpAddressId() { | ||||||
|  |         return ipAddressId; | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|     @Deprecated |     @Deprecated | ||||||
|     public Boolean getDisplay() { |     public Boolean getDisplay() { | ||||||
|         return display; |         return display; | ||||||
|  | |||||||
| @ -55,10 +55,6 @@ public class AsyncJobResponse extends BaseResponse { | |||||||
|     @Param(description = "the async command executed") |     @Param(description = "the async command executed") | ||||||
|     private String cmd; |     private String cmd; | ||||||
| 
 | 
 | ||||||
|     @SerializedName("jobstatus") |  | ||||||
|     @Param(description = "the current job status-should be 0 for PENDING") |  | ||||||
|     private Integer jobStatus; |  | ||||||
| 
 |  | ||||||
|     @SerializedName("jobprocstatus") |     @SerializedName("jobprocstatus") | ||||||
|     @Param(description = "the progress information of the PENDING job") |     @Param(description = "the progress information of the PENDING job") | ||||||
|     private Integer jobProcStatus; |     private Integer jobProcStatus; | ||||||
| @ -123,11 +119,6 @@ public class AsyncJobResponse extends BaseResponse { | |||||||
|         this.cmd = cmd; |         this.cmd = cmd; | ||||||
|     } |     } | ||||||
| 
 | 
 | ||||||
|     @Override |  | ||||||
|     public void setJobStatus(Integer jobStatus) { |  | ||||||
|         this.jobStatus = jobStatus; |  | ||||||
|     } |  | ||||||
| 
 |  | ||||||
|     public void setJobProcStatus(Integer jobProcStatus) { |     public void setJobProcStatus(Integer jobProcStatus) { | ||||||
|         this.jobProcStatus = jobProcStatus; |         this.jobProcStatus = jobProcStatus; | ||||||
|     } |     } | ||||||
|  | |||||||
| @ -50,13 +50,13 @@ public class ClusterDrsPlanMigrationResponse extends BaseResponse { | |||||||
|     @Param(description = "Destination host for VM migration") |     @Param(description = "Destination host for VM migration") | ||||||
|     String destHostName; |     String destHostName; | ||||||
| 
 | 
 | ||||||
|     @SerializedName(ApiConstants.JOB_ID) |     @SerializedName(ApiConstants.MIGRATION_JOB_ID) | ||||||
|     @Param(description = "id of VM migration async job") |     @Param(description = "id of VM migration async job") | ||||||
|     private Long jobId; |     private Long migrationJobId; | ||||||
| 
 | 
 | ||||||
|     @SerializedName(ApiConstants.JOB_STATUS) |     @SerializedName(ApiConstants.MIGRATION_JOB_STATUS) | ||||||
|     @Param(description = "Job status of VM migration async job") |     @Param(description = "Job status of VM migration async job") | ||||||
|     private JobInfo.Status jobStatus; |     private JobInfo.Status migrationJobStatus; | ||||||
| 
 | 
 | ||||||
| 
 | 
 | ||||||
|     public ClusterDrsPlanMigrationResponse(String vmId, String vmName, String srcHostId, String srcHostName, |     public ClusterDrsPlanMigrationResponse(String vmId, String vmName, String srcHostId, String srcHostName, | ||||||
| @ -68,8 +68,8 @@ public class ClusterDrsPlanMigrationResponse extends BaseResponse { | |||||||
|         this.srcHostName = srcHostName; |         this.srcHostName = srcHostName; | ||||||
|         this.destHostId = destHostId; |         this.destHostId = destHostId; | ||||||
|         this.destHostName = destHostName; |         this.destHostName = destHostName; | ||||||
|         this.jobId = jobId; |         this.migrationJobId = jobId; | ||||||
|         this.jobStatus = jobStatus; |         this.migrationJobStatus = jobStatus; | ||||||
|         this.setObjectName(ApiConstants.MIGRATIONS); |         this.setObjectName(ApiConstants.MIGRATIONS); | ||||||
|     } |     } | ||||||
| } | } | ||||||
|  | |||||||
| @ -175,6 +175,10 @@ public class IPAddressResponse extends BaseResponseWithAnnotations implements Co | |||||||
|     @Param(description="true if range is dedicated for System VMs") |     @Param(description="true if range is dedicated for System VMs") | ||||||
|     private boolean forSystemVms; |     private boolean forSystemVms; | ||||||
| 
 | 
 | ||||||
|  |     @SerializedName(ApiConstants.FOR_PROVIDER) | ||||||
|  |     @Param(description="true if range is dedicated for external network providers", since = "4.21.0") | ||||||
|  |     private boolean forProvider; | ||||||
|  | 
 | ||||||
|     public void setIpAddress(String ipAddress) { |     public void setIpAddress(String ipAddress) { | ||||||
|         this.ipAddress = ipAddress; |         this.ipAddress = ipAddress; | ||||||
|     } |     } | ||||||
| @ -332,4 +336,8 @@ public class IPAddressResponse extends BaseResponseWithAnnotations implements Co | |||||||
|     public void setForSystemVms(boolean forSystemVms) { |     public void setForSystemVms(boolean forSystemVms) { | ||||||
|         this.forSystemVms = forSystemVms; |         this.forSystemVms = forSystemVms; | ||||||
|     } |     } | ||||||
|  | 
 | ||||||
|  |     public void setForProvider(boolean forProvider) { | ||||||
|  |         this.forProvider = forProvider; | ||||||
|  |     } | ||||||
| } | } | ||||||
|  | |||||||
| @ -211,14 +211,6 @@ public class NetworkResponse extends BaseResponseWithAssociatedNetwork implement | |||||||
|     @Param(description = "Name of the VPC to which this network belongs", since = "4.15") |     @Param(description = "Name of the VPC to which this network belongs", since = "4.15") | ||||||
|     private String vpcName; |     private String vpcName; | ||||||
| 
 | 
 | ||||||
|     @SerializedName(ApiConstants.ASSOCIATED_NETWORK_ID) |  | ||||||
|     @Param(description = "the ID of the Network associated with this network") |  | ||||||
|     private String associatedNetworkId; |  | ||||||
| 
 |  | ||||||
|     @SerializedName(ApiConstants.ASSOCIATED_NETWORK) |  | ||||||
|     @Param(description = "the name of the Network associated with this network") |  | ||||||
|     private String associatedNetworkName; |  | ||||||
| 
 |  | ||||||
|     @SerializedName(ApiConstants.TUNGSTEN_VIRTUAL_ROUTER_UUID) |     @SerializedName(ApiConstants.TUNGSTEN_VIRTUAL_ROUTER_UUID) | ||||||
|     @Param(description = "Tungsten-Fabric virtual router the network belongs to") |     @Param(description = "Tungsten-Fabric virtual router the network belongs to") | ||||||
|     private String tungstenVirtualRouterUuid; |     private String tungstenVirtualRouterUuid; | ||||||
| @ -619,14 +611,6 @@ public class NetworkResponse extends BaseResponseWithAssociatedNetwork implement | |||||||
|         this.vpcName = vpcName; |         this.vpcName = vpcName; | ||||||
|     } |     } | ||||||
| 
 | 
 | ||||||
|     public void setAssociatedNetworkId(String associatedNetworkId) { |  | ||||||
|         this.associatedNetworkId = associatedNetworkId; |  | ||||||
|     } |  | ||||||
| 
 |  | ||||||
|     public void setAssociatedNetworkName(String associatedNetworkName) { |  | ||||||
|         this.associatedNetworkName = associatedNetworkName; |  | ||||||
|     } |  | ||||||
| 
 |  | ||||||
|     @Override |     @Override | ||||||
|     public void setResourceIconResponse(ResourceIconResponse icon) { |     public void setResourceIconResponse(ResourceIconResponse icon) { | ||||||
|         this.icon = icon; |         this.icon = icon; | ||||||
|  | |||||||
| @ -42,9 +42,17 @@ public class StaticRouteResponse extends BaseResponse implements ControlledEntit | |||||||
|     @Param(description = "VPC the static route belongs to") |     @Param(description = "VPC the static route belongs to") | ||||||
|     private String vpcId; |     private String vpcId; | ||||||
| 
 | 
 | ||||||
|     @SerializedName(ApiConstants.GATEWAY_ID) |     @SerializedName(ApiConstants.VPC_GATEWAY_ID) | ||||||
|     @Param(description = "VPC gateway the route is created for") |     @Param(description = "VPC gateway the route is created for") | ||||||
|     private String gatewayId; |     private String vpcGatewayId; | ||||||
|  | 
 | ||||||
|  |     @SerializedName(ApiConstants.VPC_GATEWAY_IP) | ||||||
|  |     @Param(description = "IP of VPC gateway the route is created for", since = "4.21.0") | ||||||
|  |     private String vpcGatewayIp; | ||||||
|  | 
 | ||||||
|  |     @SerializedName(ApiConstants.NEXT_HOP) | ||||||
|  |     @Param(description = "Next hop of the static route", since = "4.21.0") | ||||||
|  |     private String nextHop; | ||||||
| 
 | 
 | ||||||
|     @SerializedName(ApiConstants.CIDR) |     @SerializedName(ApiConstants.CIDR) | ||||||
|     @Param(description = "static route CIDR") |     @Param(description = "static route CIDR") | ||||||
| @ -95,8 +103,16 @@ public class StaticRouteResponse extends BaseResponse implements ControlledEntit | |||||||
|         this.vpcId = vpcId; |         this.vpcId = vpcId; | ||||||
|     } |     } | ||||||
| 
 | 
 | ||||||
|     public void setGatewayId(String gatewayId) { |     public void setVpcGatewayId(String vpcGatewayId) { | ||||||
|         this.gatewayId = gatewayId; |         this.vpcGatewayId = vpcGatewayId; | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|  |     public void setVpcGatewayIp(String vpcGatewayIp) { | ||||||
|  |         this.vpcGatewayIp = vpcGatewayIp; | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|  |     public void setNextHop(String nextHop) { | ||||||
|  |         this.nextHop = nextHop; | ||||||
|     } |     } | ||||||
| 
 | 
 | ||||||
|     public void setCidr(String cidr) { |     public void setCidr(String cidr) { | ||||||
|  | |||||||
| @ -38,14 +38,6 @@ public class SystemVmResponse extends BaseResponseWithAnnotations { | |||||||
|     @Param(description = "the system VM type") |     @Param(description = "the system VM type") | ||||||
|     private String systemVmType; |     private String systemVmType; | ||||||
| 
 | 
 | ||||||
|     @SerializedName("jobid") |  | ||||||
|     @Param(description = "the job ID associated with the system VM. This is only displayed if the router listed is part of a currently running asynchronous job.") |  | ||||||
|     private String jobId; |  | ||||||
| 
 |  | ||||||
|     @SerializedName("jobstatus") |  | ||||||
|     @Param(description = "the job status associated with the system VM.  This is only displayed if the router listed is part of a currently running asynchronous job.") |  | ||||||
|     private Integer jobStatus; |  | ||||||
| 
 |  | ||||||
|     @SerializedName("zoneid") |     @SerializedName("zoneid") | ||||||
|     @Param(description = "the Zone ID for the system VM") |     @Param(description = "the Zone ID for the system VM") | ||||||
|     private String zoneId; |     private String zoneId; | ||||||
|  | |||||||
| @ -127,9 +127,9 @@ public class VlanIpRangeResponse extends BaseResponse implements ControlledEntit | |||||||
|     @Param(description = "indicates whether VLAN IP range is dedicated to system vms or not") |     @Param(description = "indicates whether VLAN IP range is dedicated to system vms or not") | ||||||
|     private Boolean forSystemVms; |     private Boolean forSystemVms; | ||||||
| 
 | 
 | ||||||
|     @SerializedName(ApiConstants.FOR_NSX) |     @SerializedName(ApiConstants.PROVIDER) | ||||||
|     @Param(description = "indicates whether IP range is dedicated to NSX resources or not") |     @Param(description = "indicates to which provider the IP range is dedicated to", since = "4.21.0") | ||||||
|     private Boolean forNsx; |     private String provider; | ||||||
| 
 | 
 | ||||||
|     public void setId(String id) { |     public void setId(String id) { | ||||||
|         this.id = id; |         this.id = id; | ||||||
| @ -249,7 +249,7 @@ public class VlanIpRangeResponse extends BaseResponse implements ControlledEntit | |||||||
|         this.ip6Cidr = ip6Cidr; |         this.ip6Cidr = ip6Cidr; | ||||||
|     } |     } | ||||||
| 
 | 
 | ||||||
|     public void setForNsx(Boolean forNsx) { |     public void setProvider(String provider) { | ||||||
|         this.forNsx = forNsx; |         this.provider = provider; | ||||||
|     } |     } | ||||||
| } | } | ||||||
|  | |||||||
| @ -145,10 +145,15 @@ public class ZoneResponse extends BaseResponseWithAnnotations implements SetReso | |||||||
|     @Param(description = "the type of the zone - core or edge", since = "4.18.0") |     @Param(description = "the type of the zone - core or edge", since = "4.18.0") | ||||||
|     String type; |     String type; | ||||||
| 
 | 
 | ||||||
|  |     @Deprecated(since = "4.21.0") | ||||||
|     @SerializedName(ApiConstants.NSX_ENABLED) |     @SerializedName(ApiConstants.NSX_ENABLED) | ||||||
|     @Param(description = "true, if zone is NSX enabled", since = "4.20.0") |     @Param(description = "true, if zone is NSX enabled", since = "4.20.0") | ||||||
|     private boolean nsxEnabled = false; |     private boolean nsxEnabled = false; | ||||||
| 
 | 
 | ||||||
|  |     @SerializedName(ApiConstants.PROVIDER) | ||||||
|  |     @Param(description = "External network provider if any", since = "4.21.0") | ||||||
|  |     private String provider = null; | ||||||
|  | 
 | ||||||
|     @SerializedName(ApiConstants.MULTI_ARCH) |     @SerializedName(ApiConstants.MULTI_ARCH) | ||||||
|     @Param(description = "true, if zone contains clusters and hosts from different CPU architectures", since = "4.20") |     @Param(description = "true, if zone contains clusters and hosts from different CPU architectures", since = "4.20") | ||||||
|     private boolean multiArch; |     private boolean multiArch; | ||||||
| @ -381,6 +386,14 @@ public class ZoneResponse extends BaseResponseWithAnnotations implements SetReso | |||||||
|         return nsxEnabled; |         return nsxEnabled; | ||||||
|     } |     } | ||||||
| 
 | 
 | ||||||
|  |     public String getProvider() { | ||||||
|  |         return provider; | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|  |     public void setProvider(String provider) { | ||||||
|  |         this.provider = provider; | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|     @Override |     @Override | ||||||
|     public void setResourceIconResponse(ResourceIconResponse resourceIconResponse) { |     public void setResourceIconResponse(ResourceIconResponse resourceIconResponse) { | ||||||
|         this.resourceIconResponse = resourceIconResponse; |         this.resourceIconResponse = resourceIconResponse; | ||||||
|  | |||||||
| @ -1092,6 +1092,11 @@ | |||||||
|                     <artifactId>cloud-plugin-network-nsx</artifactId> |                     <artifactId>cloud-plugin-network-nsx</artifactId> | ||||||
|                     <version>${project.version}</version> |                     <version>${project.version}</version> | ||||||
|                 </dependency> |                 </dependency> | ||||||
|  |                 <dependency> | ||||||
|  |                     <groupId>org.apache.cloudstack</groupId> | ||||||
|  |                     <artifactId>cloud-plugin-network-netris</artifactId> | ||||||
|  |                     <version>${project.version}</version> | ||||||
|  |                 </dependency> | ||||||
|                 <dependency> |                 <dependency> | ||||||
|                     <groupId>org.apache.cloudstack</groupId> |                     <groupId>org.apache.cloudstack</groupId> | ||||||
|                     <artifactId>cloud-plugin-network-tungsten</artifactId> |                     <artifactId>cloud-plugin-network-tungsten</artifactId> | ||||||
|  | |||||||
| @ -25,7 +25,6 @@ import java.util.Map; | |||||||
| public class CheckS2SVpnConnectionsAnswer extends Answer { | public class CheckS2SVpnConnectionsAnswer extends Answer { | ||||||
|     Map<String, Boolean> ipToConnected; |     Map<String, Boolean> ipToConnected; | ||||||
|     Map<String, String> ipToDetail; |     Map<String, String> ipToDetail; | ||||||
|     String details; |  | ||||||
| 
 | 
 | ||||||
|     protected CheckS2SVpnConnectionsAnswer() { |     protected CheckS2SVpnConnectionsAnswer() { | ||||||
|         ipToConnected = new HashMap<String, Boolean>(); |         ipToConnected = new HashMap<String, Boolean>(); | ||||||
|  | |||||||
| @ -36,6 +36,7 @@ public class SetupGuestNetworkCommand extends NetworkElementCommand { | |||||||
|     String routerIpv6Gateway = null; |     String routerIpv6Gateway = null; | ||||||
|     String routerIpv6Cidr = null; |     String routerIpv6Cidr = null; | ||||||
|     boolean isVrGuestGateway = false; |     boolean isVrGuestGateway = false; | ||||||
|  |     long networkId; | ||||||
| 
 | 
 | ||||||
|     public NicTO getNic() { |     public NicTO getNic() { | ||||||
|         return nic; |         return nic; | ||||||
| @ -123,4 +124,12 @@ public class SetupGuestNetworkCommand extends NetworkElementCommand { | |||||||
|     public void setVrGuestGateway(boolean vrGuestGateway) { |     public void setVrGuestGateway(boolean vrGuestGateway) { | ||||||
|         isVrGuestGateway = vrGuestGateway; |         isVrGuestGateway = vrGuestGateway; | ||||||
|     } |     } | ||||||
|  | 
 | ||||||
|  |     public long getNetworkId() { | ||||||
|  |         return networkId; | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|  |     public void setNetworkId(long networkId) { | ||||||
|  |         this.networkId = networkId; | ||||||
|  |     } | ||||||
| } | } | ||||||
|  | |||||||
| @ -76,6 +76,7 @@ public class SetGuestNetworkConfigItem extends AbstractConfigItemFacade { | |||||||
|         guestNetwork.setRouterIp6Gateway(command.getRouterIpv6Gateway()); |         guestNetwork.setRouterIp6Gateway(command.getRouterIpv6Gateway()); | ||||||
|         guestNetwork.setRouterIp6Cidr(command.getRouterIpv6Cidr()); |         guestNetwork.setRouterIp6Cidr(command.getRouterIpv6Cidr()); | ||||||
|         guestNetwork.setVrGuestGateway(command.isVrGuestGateway()); |         guestNetwork.setVrGuestGateway(command.isVrGuestGateway()); | ||||||
|  |         guestNetwork.setNetworkId(command.getNetworkId()); | ||||||
| 
 | 
 | ||||||
|         return generateConfigItems(guestNetwork); |         return generateConfigItems(guestNetwork); | ||||||
|     } |     } | ||||||
|  | |||||||
| @ -38,6 +38,7 @@ public class GuestNetwork extends ConfigBase { | |||||||
|     private String routerIp6Gateway; |     private String routerIp6Gateway; | ||||||
|     private String routerIp6Cidr; |     private String routerIp6Cidr; | ||||||
|     private boolean isVrGuestGateway; |     private boolean isVrGuestGateway; | ||||||
|  |     long networkId; | ||||||
| 
 | 
 | ||||||
|     private Integer mtu; |     private Integer mtu; | ||||||
| 
 | 
 | ||||||
| @ -211,4 +212,12 @@ public class GuestNetwork extends ConfigBase { | |||||||
|     public void setVrGuestGateway(boolean vrGuestGateway) { |     public void setVrGuestGateway(boolean vrGuestGateway) { | ||||||
|         isVrGuestGateway = vrGuestGateway; |         isVrGuestGateway = vrGuestGateway; | ||||||
|     } |     } | ||||||
|  | 
 | ||||||
|  |     public long getNetworkId() { | ||||||
|  |         return networkId; | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|  |     public void setNetworkId(long networkId) { | ||||||
|  |         this.networkId = networkId; | ||||||
|  |     } | ||||||
| } | } | ||||||
|  | |||||||
| @ -75,13 +75,17 @@ public class ArrayTypeAdaptor<T> implements JsonDeserializer<T[]>, JsonSerialize | |||||||
|             try { |             try { | ||||||
|                 clazz = Class.forName(name); |                 clazz = Class.forName(name); | ||||||
|             } catch (ClassNotFoundException e) { |             } catch (ClassNotFoundException e) { | ||||||
|                 throw new CloudRuntimeException("can't find " + name); |                 throw new JsonParseException("can't find " + name); | ||||||
|             } |             } | ||||||
|             T cmd = (T)_gson.fromJson(entry.getValue(), clazz); |             T cmd = (T)_gson.fromJson(entry.getValue(), clazz); | ||||||
|             cmds.add(cmd); |             cmds.add(cmd); | ||||||
|         } |         } | ||||||
|         Class<?> type = ((Class<?>)typeOfT).getComponentType(); |         try { | ||||||
|         T[] ts = (T[])Array.newInstance(type, cmds.size()); |             Class<?> type =  Class.forName(typeOfT.getTypeName().replace("[]", "")); | ||||||
|         return cmds.toArray(ts); |             T[] ts = (T[])Array.newInstance(type, cmds.size()); | ||||||
|  |             return cmds.toArray(ts); | ||||||
|  |         } catch (ClassNotFoundException e) { | ||||||
|  |             throw new CloudRuntimeException("can't find " + typeOfT.getTypeName()); | ||||||
|  |         } | ||||||
|     } |     } | ||||||
| } | } | ||||||
|  | |||||||
| @ -0,0 +1,46 @@ | |||||||
|  | // | ||||||
|  | // 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.transport; | ||||||
|  | 
 | ||||||
|  | import junit.framework.TestCase; | ||||||
|  | 
 | ||||||
|  | import org.apache.logging.log4j.Logger; | ||||||
|  | import org.apache.logging.log4j.LogManager; | ||||||
|  | import org.junit.Assert; | ||||||
|  | import com.cloud.agent.api.Answer; | ||||||
|  | import com.cloud.agent.api.CheckS2SVpnConnectionsAnswer; | ||||||
|  | 
 | ||||||
|  | import com.cloud.agent.transport.Request.Version; | ||||||
|  | 
 | ||||||
|  | public class ResponseTest extends TestCase { | ||||||
|  |     protected Logger logger = LogManager.getLogger(getClass()); | ||||||
|  | 
 | ||||||
|  |     public void testCheckS2SVpnConnectionsAnswer() { | ||||||
|  |         logger.info("Testing CheckS2SVpnConnectionsAnswer"); | ||||||
|  |         String content = "[{\"com.cloud.agent.api.CheckS2SVpnConnectionsAnswer\":{\"ipToConnected\":{\"10.0.53.13\":true}," + | ||||||
|  |                 "\"ipToDetail\":{\"10.0.53.13\":\"IPsec SA found;Site-to-site VPN have connected\"}," + | ||||||
|  |                 "\"details\":\"10.0.53.13:0:IPsec SA found;Site-to-site VPN have connected\\u0026\\n\"," + | ||||||
|  |                 "\"result\":true,\"contextMap\":{},\"wait\":0,\"bypassHostMaintenance\":false}}]"; | ||||||
|  |         Response response = new Response(Version.v2, 1L, 2L, 3L, 1L, (short)1, content); | ||||||
|  |         Answer answer = response.getAnswer(); | ||||||
|  |         Assert.assertTrue(answer instanceof CheckS2SVpnConnectionsAnswer); | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|  | } | ||||||
							
								
								
									
										3
									
								
								deps/install-non-oss.sh
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										3
									
								
								deps/install-non-oss.sh
									
									
									
									
										vendored
									
									
								
							| @ -85,4 +85,7 @@ mvn install:install-file -Dfile=juniper-contrail-api-1.0-SNAPSHOT.jar -DgroupId= | |||||||
| # From https://github.com/radu-todirica/tungsten-api/raw/master/net/juniper/tungsten/juniper-tungsten-api/2.0/juniper-tungsten-api-2.0.jar | # From https://github.com/radu-todirica/tungsten-api/raw/master/net/juniper/tungsten/juniper-tungsten-api/2.0/juniper-tungsten-api-2.0.jar | ||||||
| mvn install:install-file -Dfile=juniper-tungsten-api-2.0.jar -DgroupId=net.juniper.tungsten -DartifactId=juniper-tungsten-api -Dversion=2.0 -Dpackaging=jar | mvn install:install-file -Dfile=juniper-tungsten-api-2.0.jar -DgroupId=net.juniper.tungsten -DartifactId=juniper-tungsten-api -Dversion=2.0 -Dpackaging=jar | ||||||
| 
 | 
 | ||||||
|  | # Netris Integration | ||||||
|  | mvn install:install-file -Dfile=netris-java-sdk-1.0.0.jar -DgroupId=io.netris -DartifactId=netris-java-sdk -Dversion=1.0.0 -Dpackaging=jar | ||||||
|  | 
 | ||||||
| exit 0 | exit 0 | ||||||
|  | |||||||
| @ -112,6 +112,9 @@ public interface NetworkOrchestrationService { | |||||||
|     static final ConfigKey<Boolean> NSX_ENABLED = new ConfigKey<>(Boolean.class, "nsx.plugin.enable", "Advanced", "false", |     static final ConfigKey<Boolean> NSX_ENABLED = new ConfigKey<>(Boolean.class, "nsx.plugin.enable", "Advanced", "false", | ||||||
|             "Indicates whether to enable the NSX plugin", false, ConfigKey.Scope.Zone, null); |             "Indicates whether to enable the NSX plugin", false, ConfigKey.Scope.Zone, null); | ||||||
| 
 | 
 | ||||||
|  |     ConfigKey<Boolean> NETRIS_ENABLED = new ConfigKey<>(Boolean.class, "netris.plugin.enable", "Advanced", "false", | ||||||
|  |             "Indicates whether to enable the Netris plugin", false, ConfigKey.Scope.Zone, null); | ||||||
|  | 
 | ||||||
|     List<? extends Network> setupNetwork(Account owner, NetworkOffering offering, DeploymentPlan plan, String name, String displayText, boolean isDefault) |     List<? extends Network> setupNetwork(Account owner, NetworkOffering offering, DeploymentPlan plan, String name, String displayText, boolean isDefault) | ||||||
|         throws ConcurrentOperationException; |         throws ConcurrentOperationException; | ||||||
| 
 | 
 | ||||||
|  | |||||||
| @ -223,6 +223,7 @@ public interface ConfigurationManager { | |||||||
|      * @param forVpc |      * @param forVpc | ||||||
|      * @param forTungsten |      * @param forTungsten | ||||||
|      * @param forNsx |      * @param forNsx | ||||||
|  |      * @param forNetris | ||||||
|      * @param domainIds |      * @param domainIds | ||||||
|      * @param zoneIds |      * @param zoneIds | ||||||
|      * @return network offering object |      * @return network offering object | ||||||
| @ -232,11 +233,11 @@ public interface ConfigurationManager { | |||||||
|                                             Integer networkRate, Map<Service, Set<Provider>> serviceProviderMap, boolean isDefault, Network.GuestType type, boolean systemOnly, Long serviceOfferingId, |                                             Integer networkRate, Map<Service, Set<Provider>> serviceProviderMap, boolean isDefault, Network.GuestType type, boolean systemOnly, Long serviceOfferingId, | ||||||
|                                             boolean conserveMode, Map<Service, Map<Capability, String>> serviceCapabilityMap, boolean specifyIpRanges, boolean isPersistent, |                                             boolean conserveMode, Map<Service, Map<Capability, String>> serviceCapabilityMap, boolean specifyIpRanges, boolean isPersistent, | ||||||
|                                             Map<NetworkOffering.Detail, String> details, boolean egressDefaultPolicy, Integer maxconn, boolean enableKeepAlive, Boolean forVpc, |                                             Map<NetworkOffering.Detail, String> details, boolean egressDefaultPolicy, Integer maxconn, boolean enableKeepAlive, Boolean forVpc, | ||||||
|                                             Boolean forTungsten, boolean forNsx, NetworkOffering.NetworkMode networkMode, List<Long> domainIds, List<Long> zoneIds, boolean enableOffering, final NetUtils.InternetProtocol internetProtocol, |                                             Boolean forTungsten, boolean forNsx, boolean forNetris, NetworkOffering.NetworkMode networkMode, List<Long> domainIds, List<Long> zoneIds, boolean enableOffering, final NetUtils.InternetProtocol internetProtocol, | ||||||
|                                             NetworkOffering.RoutingMode routingMode, boolean specifyAsNumber); |                                             NetworkOffering.RoutingMode routingMode, boolean specifyAsNumber); | ||||||
| 
 | 
 | ||||||
|     Vlan createVlanAndPublicIpRange(long zoneId, long networkId, long physicalNetworkId, boolean forVirtualNetwork, boolean forSystemVms, Long podId, String startIP, String endIP, |     Vlan createVlanAndPublicIpRange(long zoneId, long networkId, long physicalNetworkId, boolean forVirtualNetwork, boolean forSystemVms, Long podId, String startIP, String endIP, | ||||||
|         String vlanGateway, String vlanNetmask, String vlanId, boolean bypassVlanOverlapCheck, Domain domain, Account vlanOwner, String startIPv6, String endIPv6, String vlanIp6Gateway, String vlanIp6Cidr, boolean forNsx) |         String vlanGateway, String vlanNetmask, String vlanId, boolean bypassVlanOverlapCheck, Domain domain, Account vlanOwner, String startIPv6, String endIPv6, String vlanIp6Gateway, String vlanIp6Cidr, Provider provider) | ||||||
|         throws InsufficientCapacityException, ConcurrentOperationException, InvalidParameterValueException; |         throws InsufficientCapacityException, ConcurrentOperationException, InvalidParameterValueException; | ||||||
| 
 | 
 | ||||||
|     void createDefaultSystemNetworks(long zoneId) throws ConcurrentOperationException; |     void createDefaultSystemNetworks(long zoneId) throws ConcurrentOperationException; | ||||||
|  | |||||||
| @ -275,5 +275,9 @@ public class PublicIp implements PublicIpAddress { | |||||||
|         return false; |         return false; | ||||||
|     } |     } | ||||||
| 
 | 
 | ||||||
|  |     @Override | ||||||
|  |     public boolean isForRouter() { | ||||||
|  |         return _addr.isForRouter(); | ||||||
|  |     } | ||||||
| 
 | 
 | ||||||
| } | } | ||||||
|  | |||||||
| @ -54,6 +54,8 @@ public interface RulesManager extends RulesService { | |||||||
| 
 | 
 | ||||||
|     boolean disableStaticNat(long ipAddressId, Account caller, long callerUserId, boolean releaseIpIfElastic) throws ResourceUnavailableException; |     boolean disableStaticNat(long ipAddressId, Account caller, long callerUserId, boolean releaseIpIfElastic) throws ResourceUnavailableException; | ||||||
| 
 | 
 | ||||||
|  |     boolean applyStaticNatForIp(long sourceIpId, boolean continueOnError, Account caller, boolean forRevoke); | ||||||
|  | 
 | ||||||
|     /** |     /** | ||||||
|      * @param networkId |      * @param networkId | ||||||
|      * @param continueOnError |      * @param continueOnError | ||||||
|  | |||||||
| @ -93,5 +93,5 @@ public interface NetworkACLManager { | |||||||
| 
 | 
 | ||||||
|     boolean applyACLToPrivateGw(PrivateGateway gateway) throws ResourceUnavailableException; |     boolean applyACLToPrivateGw(PrivateGateway gateway) throws ResourceUnavailableException; | ||||||
| 
 | 
 | ||||||
|     boolean reorderAclRules(VpcVO vpc, List<? extends Network> networks, List<? extends NetworkACLItem> networkACLItems); |     boolean reorderAclRules(VpcVO vpc, List<? extends Network> networks, List<? extends NetworkACLItem> networkACLItems, Network.Provider networkProvider); | ||||||
| } | } | ||||||
|  | |||||||
| @ -195,4 +195,20 @@ public interface VpcManager { | |||||||
|      * @return |      * @return | ||||||
|      */ |      */ | ||||||
|     boolean isSrcNatIpRequired(long vpcOfferingId); |     boolean isSrcNatIpRequired(long vpcOfferingId); | ||||||
|  | 
 | ||||||
|  |     boolean isSrcNatIpRequiredForVpcVr(long vpcOfferingId); | ||||||
|  | 
 | ||||||
|  |     List<StaticRouteVO> getVpcStaticRoutes(Long vpcId); | ||||||
|  | 
 | ||||||
|  |     List<StaticRouteProfile> getVpcStaticRoutes(List<? extends StaticRoute> routes); | ||||||
|  | 
 | ||||||
|  |     boolean isProviderSupportServiceInVpc(long vpcId, Service service, Provider provider); | ||||||
|  | 
 | ||||||
|  |     IPAddressVO getIpAddressForVpcVr(Vpc vpc, IPAddressVO ipAddress, boolean allocateIpIfNeeded); | ||||||
|  | 
 | ||||||
|  |     boolean configStaticNatForVpcVr(Vpc vpc, IPAddressVO ipAddress); | ||||||
|  | 
 | ||||||
|  |     void reconfigStaticNatForVpcVr(Long vpcId); | ||||||
|  | 
 | ||||||
|  |     boolean applyStaticRouteForVpcVpnIfNeeded(Long vpcId, boolean updateAllVpn) throws ResourceUnavailableException; | ||||||
| } | } | ||||||
|  | |||||||
| @ -43,6 +43,8 @@ import com.cloud.bgp.BGPService; | |||||||
| import com.cloud.dc.VlanDetailsVO; | import com.cloud.dc.VlanDetailsVO; | ||||||
| import com.cloud.dc.dao.ASNumberDao; | import com.cloud.dc.dao.ASNumberDao; | ||||||
| import com.cloud.dc.dao.VlanDetailsDao; | import com.cloud.dc.dao.VlanDetailsDao; | ||||||
|  | import com.cloud.network.dao.Ipv6GuestPrefixSubnetNetworkMapDao; | ||||||
|  | import com.cloud.network.dao.NetrisProviderDao; | ||||||
| import com.cloud.network.dao.NsxProviderDao; | import com.cloud.network.dao.NsxProviderDao; | ||||||
| import org.apache.cloudstack.acl.ControlledEntity.ACLType; | import org.apache.cloudstack.acl.ControlledEntity.ACLType; | ||||||
| import org.apache.cloudstack.annotation.AnnotationService; | import org.apache.cloudstack.annotation.AnnotationService; | ||||||
| @ -355,9 +357,13 @@ public class NetworkOrchestrator extends ManagerBase implements NetworkOrchestra | |||||||
|     @Inject |     @Inject | ||||||
|     private NsxProviderDao nsxProviderDao; |     private NsxProviderDao nsxProviderDao; | ||||||
|     @Inject |     @Inject | ||||||
|  |     private NetrisProviderDao netrisProviderDao; | ||||||
|  |     @Inject | ||||||
|     private ASNumberDao asNumberDao; |     private ASNumberDao asNumberDao; | ||||||
|     @Inject |     @Inject | ||||||
|     private BGPService bgpService; |     private BGPService bgpService; | ||||||
|  |     @Inject | ||||||
|  |     private Ipv6GuestPrefixSubnetNetworkMapDao ipv6GuestPrefixSubnetNetworkMapDao; | ||||||
| 
 | 
 | ||||||
|     @Override |     @Override | ||||||
|     public List<NetworkGuru> getNetworkGurus() { |     public List<NetworkGuru> getNetworkGurus() { | ||||||
| @ -558,27 +564,27 @@ public class NetworkOrchestrator extends ManagerBase implements NetworkOrchestra | |||||||
|                 if (_networkOfferingDao.findByUniqueName(NetworkOffering.QuickCloudNoServices) == null) { |                 if (_networkOfferingDao.findByUniqueName(NetworkOffering.QuickCloudNoServices) == null) { | ||||||
|                     offering = _configMgr.createNetworkOffering(NetworkOffering.QuickCloudNoServices, "Offering for QuickCloud with no services", TrafficType.Guest, null, true, |                     offering = _configMgr.createNetworkOffering(NetworkOffering.QuickCloudNoServices, "Offering for QuickCloud with no services", TrafficType.Guest, null, true, | ||||||
|                             Availability.Optional, null, new HashMap<Network.Service, Set<Network.Provider>>(), true, Network.GuestType.Shared, false, null, true, null, true, |                             Availability.Optional, null, new HashMap<Network.Service, Set<Network.Provider>>(), true, Network.GuestType.Shared, false, null, true, null, true, | ||||||
|                             false, null, false, null, true, false, false, false, null, null, null, true, null, null, false); |                             false, null, false, null, true, false, false, false, false, null, null, null, true, null, null, false); | ||||||
|                 } |                 } | ||||||
| 
 | 
 | ||||||
|                 //#2 - SG enabled network offering |                 //#2 - SG enabled network offering | ||||||
|                 if (_networkOfferingDao.findByUniqueName(NetworkOffering.DefaultSharedNetworkOfferingWithSGService) == null) { |                 if (_networkOfferingDao.findByUniqueName(NetworkOffering.DefaultSharedNetworkOfferingWithSGService) == null) { | ||||||
|                     offering = _configMgr.createNetworkOffering(NetworkOffering.DefaultSharedNetworkOfferingWithSGService, "Offering for Shared Security group enabled networks", |                     offering = _configMgr.createNetworkOffering(NetworkOffering.DefaultSharedNetworkOfferingWithSGService, "Offering for Shared Security group enabled networks", | ||||||
|                             TrafficType.Guest, null, true, Availability.Optional, null, defaultSharedNetworkOfferingProviders, true, Network.GuestType.Shared, false, null, true, |                             TrafficType.Guest, null, true, Availability.Optional, null, defaultSharedNetworkOfferingProviders, true, Network.GuestType.Shared, false, null, true, | ||||||
|                             null, true, false, null, false, null, true, false, false, false, null, null, null, true, null, null, false); |                             null, true, false, null, false, null, true, false, false, false, false, null, null, null, true, null, null, false); | ||||||
|                 } |                 } | ||||||
| 
 | 
 | ||||||
|                 //#3 - shared network offering with no SG service |                 //#3 - shared network offering with no SG service | ||||||
|                 if (_networkOfferingDao.findByUniqueName(NetworkOffering.DefaultSharedNetworkOffering) == null) { |                 if (_networkOfferingDao.findByUniqueName(NetworkOffering.DefaultSharedNetworkOffering) == null) { | ||||||
|                     offering = _configMgr.createNetworkOffering(NetworkOffering.DefaultSharedNetworkOffering, "Offering for Shared networks", TrafficType.Guest, null, true, |                     offering = _configMgr.createNetworkOffering(NetworkOffering.DefaultSharedNetworkOffering, "Offering for Shared networks", TrafficType.Guest, null, true, | ||||||
|                             Availability.Optional, null, defaultSharedNetworkOfferingProviders, true, Network.GuestType.Shared, false, null, true, null, true, false, null, false, |                             Availability.Optional, null, defaultSharedNetworkOfferingProviders, true, Network.GuestType.Shared, false, null, true, null, true, false, null, false, | ||||||
|                             null, true, false, false, false, null,null, null, true, null, null, false); |                             null, true, false, false, false, false, null, null, null, true, null, null, false); | ||||||
|                 } |                 } | ||||||
| 
 | 
 | ||||||
|                 if (_networkOfferingDao.findByUniqueName(NetworkOffering.DEFAULT_TUNGSTEN_SHARED_NETWORK_OFFERING_WITH_SGSERVICE) == null) { |                 if (_networkOfferingDao.findByUniqueName(NetworkOffering.DEFAULT_TUNGSTEN_SHARED_NETWORK_OFFERING_WITH_SGSERVICE) == null) { | ||||||
|                     offering = _configMgr.createNetworkOffering(NetworkOffering.DEFAULT_TUNGSTEN_SHARED_NETWORK_OFFERING_WITH_SGSERVICE, "Offering for Tungsten Shared Security group enabled networks", |                     offering = _configMgr.createNetworkOffering(NetworkOffering.DEFAULT_TUNGSTEN_SHARED_NETWORK_OFFERING_WITH_SGSERVICE, "Offering for Tungsten Shared Security group enabled networks", | ||||||
|                             TrafficType.Guest, null, true, Availability.Optional, null, defaultTungstenSharedSGEnabledNetworkOfferingProviders, true, Network.GuestType.Shared, false, null, true, |                             TrafficType.Guest, null, true, Availability.Optional, null, defaultTungstenSharedSGEnabledNetworkOfferingProviders, true, Network.GuestType.Shared, false, null, true, | ||||||
|                             null, true, false, null, false, null, true, false, true, false, null, null,null, true, null, null, false); |                             null, true, false, null, false, null, true, false, true, false, false, null, null, null, true, null, null, false); | ||||||
|                     offering.setState(NetworkOffering.State.Enabled); |                     offering.setState(NetworkOffering.State.Enabled); | ||||||
|                     _networkOfferingDao.update(offering.getId(), offering); |                     _networkOfferingDao.update(offering.getId(), offering); | ||||||
|                 } |                 } | ||||||
| @ -588,15 +594,14 @@ public class NetworkOrchestrator extends ManagerBase implements NetworkOrchestra | |||||||
|                     offering = _configMgr.createNetworkOffering(NetworkOffering.DefaultIsolatedNetworkOfferingWithSourceNatService, |                     offering = _configMgr.createNetworkOffering(NetworkOffering.DefaultIsolatedNetworkOfferingWithSourceNatService, | ||||||
|                             "Offering for Isolated networks with Source Nat service enabled", TrafficType.Guest, null, false, Availability.Required, null, |                             "Offering for Isolated networks with Source Nat service enabled", TrafficType.Guest, null, false, Availability.Required, null, | ||||||
|                             defaultIsolatedSourceNatEnabledNetworkOfferingProviders, true, Network.GuestType.Isolated, false, null, true, null, false, false, null, false, null, |                             defaultIsolatedSourceNatEnabledNetworkOfferingProviders, true, Network.GuestType.Isolated, false, null, true, null, false, false, null, false, null, | ||||||
|                             true, false, false, false, null, null,null, true, null, null, false); |                             true, false, false, false, false, null, null, null, true, null, null, false); | ||||||
|                 } |                 } | ||||||
| 
 | 
 | ||||||
|                 //#5 - default vpc offering with LB service |                 //#5 - default vpc offering with LB service | ||||||
|                 if (_networkOfferingDao.findByUniqueName(NetworkOffering.DefaultIsolatedNetworkOfferingForVpcNetworks) == null) { |                 if (_networkOfferingDao.findByUniqueName(NetworkOffering.DefaultIsolatedNetworkOfferingForVpcNetworks) == null) { | ||||||
|                     offering = _configMgr.createNetworkOffering(NetworkOffering.DefaultIsolatedNetworkOfferingForVpcNetworks, |                     offering = _configMgr.createNetworkOffering(NetworkOffering.DefaultIsolatedNetworkOfferingForVpcNetworks, | ||||||
|                             "Offering for Isolated VPC networks with Source Nat service enabled", TrafficType.Guest, null, false, Availability.Optional, null, |                             "Offering for Isolated VPC networks with Source Nat service enabled", TrafficType.Guest, null, false, Availability.Optional, null, | ||||||
|                             defaultVPCOffProviders, true, Network.GuestType.Isolated, false, null, true, null, false, false, null, false, null, true, true, false, false, null, null, null,true, null, null, false); |                             defaultVPCOffProviders, true, Network.GuestType.Isolated, false, null, true, null, false, false, null, false, null, true, true, false, false, false, null, null, null, true, null, null, false); | ||||||
| 
 |  | ||||||
|                 } |                 } | ||||||
| 
 | 
 | ||||||
|                 //#6 - default vpc offering with no LB service |                 //#6 - default vpc offering with no LB service | ||||||
| @ -605,14 +610,14 @@ public class NetworkOrchestrator extends ManagerBase implements NetworkOrchestra | |||||||
|                     defaultVPCOffProviders.remove(Service.Lb); |                     defaultVPCOffProviders.remove(Service.Lb); | ||||||
|                     offering = _configMgr.createNetworkOffering(NetworkOffering.DefaultIsolatedNetworkOfferingForVpcNetworksNoLB, |                     offering = _configMgr.createNetworkOffering(NetworkOffering.DefaultIsolatedNetworkOfferingForVpcNetworksNoLB, | ||||||
|                             "Offering for Isolated VPC networks with Source Nat service enabled and LB service disabled", TrafficType.Guest, null, false, Availability.Optional, |                             "Offering for Isolated VPC networks with Source Nat service enabled and LB service disabled", TrafficType.Guest, null, false, Availability.Optional, | ||||||
|                             null, defaultVPCOffProviders, true, Network.GuestType.Isolated, false, null, false, null, false, false, null, false, null, true, true, false, false, null, null, null,true, null, null, false); |                             null, defaultVPCOffProviders, true, Network.GuestType.Isolated, false, null, false, null, false, false, null, false, null, true, true, false, false, false, null, null, null, true, null, null, false); | ||||||
|                 } |                 } | ||||||
| 
 | 
 | ||||||
|                 //#7 - isolated offering with source nat disabled |                 //#7 - isolated offering with source nat disabled | ||||||
|                 if (_networkOfferingDao.findByUniqueName(NetworkOffering.DefaultIsolatedNetworkOffering) == null) { |                 if (_networkOfferingDao.findByUniqueName(NetworkOffering.DefaultIsolatedNetworkOffering) == null) { | ||||||
|                     offering = _configMgr.createNetworkOffering(NetworkOffering.DefaultIsolatedNetworkOffering, "Offering for Isolated networks with no Source Nat service", |                     offering = _configMgr.createNetworkOffering(NetworkOffering.DefaultIsolatedNetworkOffering, "Offering for Isolated networks with no Source Nat service", | ||||||
|                             TrafficType.Guest, null, true, Availability.Optional, null, defaultIsolatedNetworkOfferingProviders, true, Network.GuestType.Isolated, false, null, |                             TrafficType.Guest, null, true, Availability.Optional, null, defaultIsolatedNetworkOfferingProviders, true, Network.GuestType.Isolated, false, null, | ||||||
|                             true, null, true, false, null, false, null, true, false, false, false, null, null, null, true, null, null, false); |                             true, null, true, false, null, false, null, true, false, false, false, false, null, null, null, true, null, null, false); | ||||||
|                 } |                 } | ||||||
| 
 | 
 | ||||||
|                 //#8 - network offering with internal lb service |                 //#8 - network offering with internal lb service | ||||||
| @ -634,7 +639,7 @@ public class NetworkOrchestrator extends ManagerBase implements NetworkOrchestra | |||||||
|                 if (_networkOfferingDao.findByUniqueName(NetworkOffering.DefaultIsolatedNetworkOfferingForVpcNetworksWithInternalLB) == null) { |                 if (_networkOfferingDao.findByUniqueName(NetworkOffering.DefaultIsolatedNetworkOfferingForVpcNetworksWithInternalLB) == null) { | ||||||
|                     offering = _configMgr.createNetworkOffering(NetworkOffering.DefaultIsolatedNetworkOfferingForVpcNetworksWithInternalLB, |                     offering = _configMgr.createNetworkOffering(NetworkOffering.DefaultIsolatedNetworkOfferingForVpcNetworksWithInternalLB, | ||||||
|                             "Offering for Isolated VPC networks with Internal Lb support", TrafficType.Guest, null, false, Availability.Optional, null, internalLbOffProviders, |                             "Offering for Isolated VPC networks with Internal Lb support", TrafficType.Guest, null, false, Availability.Optional, null, internalLbOffProviders, | ||||||
|                             true, Network.GuestType.Isolated, false, null, false, null, false, false, null, false, null, true, true, false, false, null, null, null, true, null, null, false); |                             true, Network.GuestType.Isolated, false, null, false, null, false, false, null, false, null, true, true, false, false, false, null, null, null, true, null, null, false); | ||||||
|                     offering.setInternalLb(true); |                     offering.setInternalLb(true); | ||||||
|                     offering.setPublicLb(false); |                     offering.setPublicLb(false); | ||||||
|                     _networkOfferingDao.update(offering.getId(), offering); |                     _networkOfferingDao.update(offering.getId(), offering); | ||||||
| @ -665,7 +670,7 @@ public class NetworkOrchestrator extends ManagerBase implements NetworkOrchestra | |||||||
|                 if (_networkOfferingDao.findByUniqueName(NetworkOffering.DefaultSharedEIPandELBNetworkOffering) == null) { |                 if (_networkOfferingDao.findByUniqueName(NetworkOffering.DefaultSharedEIPandELBNetworkOffering) == null) { | ||||||
|                     offering = _configMgr.createNetworkOffering(NetworkOffering.DefaultSharedEIPandELBNetworkOffering, |                     offering = _configMgr.createNetworkOffering(NetworkOffering.DefaultSharedEIPandELBNetworkOffering, | ||||||
|                             "Offering for Shared networks with Elastic IP and Elastic LB capabilities", TrafficType.Guest, null, true, Availability.Optional, null, |                             "Offering for Shared networks with Elastic IP and Elastic LB capabilities", TrafficType.Guest, null, true, Availability.Optional, null, | ||||||
|                             netscalerServiceProviders, true, Network.GuestType.Shared, false, null, true, serviceCapabilityMap, true, false, null, false, null, true, false, false, false, null, null, null, true, null, null, false); |                             netscalerServiceProviders, true, Network.GuestType.Shared, false, null, true, serviceCapabilityMap, true, false, null, false, null, true, false, false, false, false, null, null, null, true, null, null, false); | ||||||
|                     offering.setDedicatedLB(false); |                     offering.setDedicatedLB(false); | ||||||
|                     _networkOfferingDao.update(offering.getId(), offering); |                     _networkOfferingDao.update(offering.getId(), offering); | ||||||
|                 } |                 } | ||||||
| @ -822,6 +827,11 @@ public class NetworkOrchestrator extends ManagerBase implements NetworkOrchestra | |||||||
|                         if (domainId != null && aclType == ACLType.Domain) { |                         if (domainId != null && aclType == ACLType.Domain) { | ||||||
|                             _networksDao.addDomainToNetwork(id, domainId, subdomainAccess == null || subdomainAccess); |                             _networksDao.addDomainToNetwork(id, domainId, subdomainAccess == null || subdomainAccess); | ||||||
|                         } |                         } | ||||||
|  |                         String ipv6Cidr = network.getIp6Cidr(); | ||||||
|  |                         String ipv6Gateway = network.getIp6Gateway(); | ||||||
|  |                         if (StringUtils.isNoneBlank(ipv6Cidr, ipv6Gateway)) { | ||||||
|  |                             ipv6Service.assignIpv6SubnetToNetwork(ipv6Cidr, networkPersisted.getId()); | ||||||
|  |                         } | ||||||
|                     } |                     } | ||||||
|                 }); |                 }); | ||||||
|                 guru.setup(network, relatedFile); |                 guru.setup(network, relatedFile); | ||||||
| @ -1056,7 +1066,7 @@ public class NetworkOrchestrator extends ManagerBase implements NetworkOrchestra | |||||||
|         return Transaction.execute(new TransactionCallback<NicVO>() { |         return Transaction.execute(new TransactionCallback<NicVO>() { | ||||||
|             @Override |             @Override | ||||||
|             public NicVO doInTransaction(TransactionStatus status) { |             public NicVO doInTransaction(TransactionStatus status) { | ||||||
|                 NicVO vo = _nicDao.findByIp4AddressAndNetworkId(profile.getIPv4Address(), networkId); |                 NicVO vo = _nicDao.findNonPlaceHolderByIp4AddressAndNetworkId(profile.getIPv4Address(), networkId); | ||||||
|                 if (vo == null) { |                 if (vo == null) { | ||||||
|                     applyProfileToNic(nic, profile, deviceId); |                     applyProfileToNic(nic, profile, deviceId); | ||||||
|                     vo = _nicDao.persist(nic); |                     vo = _nicDao.persist(nic); | ||||||
| @ -1083,10 +1093,14 @@ public class NetworkOrchestrator extends ManagerBase implements NetworkOrchestra | |||||||
|                 return null; |                 return null; | ||||||
|             } |             } | ||||||
| 
 | 
 | ||||||
|             if (isNicAllocatedForNsxPublicNetworkOnVR(network, profile, vm)) { |             if (isNicAllocatedForProviderPublicNetworkOnVR(network, profile, vm, Provider.Nsx)) { | ||||||
|                 String guruName = "NsxPublicNetworkGuru"; |                 String guruName = "NsxPublicNetworkGuru"; | ||||||
|                 NetworkGuru nsxGuru = AdapterBase.getAdapterByName(networkGurus, guruName); |                 NetworkGuru nsxGuru = AdapterBase.getAdapterByName(networkGurus, guruName); | ||||||
|                 nsxGuru.allocate(network, profile, vm); |                 nsxGuru.allocate(network, profile, vm); | ||||||
|  |             } else if (isNicAllocatedForProviderPublicNetworkOnVR(network, profile, vm, Provider.Netris)) { | ||||||
|  |                 String guruName = "NetrisPublicNetworkGuru"; | ||||||
|  |                 NetworkGuru netrisGuru = AdapterBase.getAdapterByName(networkGurus, guruName); | ||||||
|  |                 netrisGuru.allocate(network, profile, vm); | ||||||
|             } |             } | ||||||
| 
 | 
 | ||||||
|             if (isDefaultNic != null) { |             if (isDefaultNic != null) { | ||||||
| @ -1149,7 +1163,7 @@ public class NetworkOrchestrator extends ManagerBase implements NetworkOrchestra | |||||||
|         return new Pair<NicProfile, Integer>(vmNic, Integer.valueOf(deviceId)); |         return new Pair<NicProfile, Integer>(vmNic, Integer.valueOf(deviceId)); | ||||||
|     } |     } | ||||||
| 
 | 
 | ||||||
|     private boolean isNicAllocatedForNsxPublicNetworkOnVR(Network network, NicProfile requested, VirtualMachineProfile vm) { |     private boolean isNicAllocatedForProviderPublicNetworkOnVR(Network network, NicProfile requested, VirtualMachineProfile vm, Provider provider) { | ||||||
|         if (ObjectUtils.anyNull(network, requested, vm)) { |         if (ObjectUtils.anyNull(network, requested, vm)) { | ||||||
|             return false; |             return false; | ||||||
|         } |         } | ||||||
| @ -1159,7 +1173,9 @@ public class NetworkOrchestrator extends ManagerBase implements NetworkOrchestra | |||||||
|             return false; |             return false; | ||||||
|         } |         } | ||||||
|         long dataCenterId = vm.getVirtualMachine().getDataCenterId(); |         long dataCenterId = vm.getVirtualMachine().getDataCenterId(); | ||||||
|         if (nsxProviderDao.findByZoneId(dataCenterId) == null) { |         if (Provider.Nsx == provider && nsxProviderDao.findByZoneId(dataCenterId) == null) { | ||||||
|  |             return false; | ||||||
|  |         } else if (Provider.Netris == provider && netrisProviderDao.findByZoneId(dataCenterId) == null) { | ||||||
|             return false; |             return false; | ||||||
|         } |         } | ||||||
| 
 | 
 | ||||||
| @ -1169,14 +1185,16 @@ public class NetworkOrchestrator extends ManagerBase implements NetworkOrchestra | |||||||
|         if (CollectionUtils.isEmpty(ips)) { |         if (CollectionUtils.isEmpty(ips)) { | ||||||
|             return false; |             return false; | ||||||
|         } |         } | ||||||
|  | 
 | ||||||
|         ips = ips.stream().filter(x -> !x.getAddress().addr().equals(requested.getIPv4Address())).collect(Collectors.toList()); |         ips = ips.stream().filter(x -> !x.getAddress().addr().equals(requested.getIPv4Address())).collect(Collectors.toList()); | ||||||
|         IPAddressVO ip = ips.get(0); |         IPAddressVO ip = ips.get(0); | ||||||
|         VlanDetailsVO vlanDetail = vlanDetailsDao.findDetail(ip.getVlanId(), ApiConstants.NSX_DETAIL_KEY); |         String detailKey = Provider.Nsx == provider ? ApiConstants.NSX_DETAIL_KEY : ApiConstants.NETRIS_DETAIL_KEY; | ||||||
|  |         VlanDetailsVO vlanDetail = vlanDetailsDao.findDetail(ip.getVlanId(), detailKey); | ||||||
|         if (vlanDetail == null) { |         if (vlanDetail == null) { | ||||||
|             return false; |             return false; | ||||||
|         } |         } | ||||||
|         boolean isForNsx = vlanDetail.getValue().equalsIgnoreCase("true"); |         boolean isForProvider = vlanDetail.getValue().equalsIgnoreCase("true"); | ||||||
|         return isForNsx && !ip.isForSystemVms(); |         return isForProvider && !ip.isForSystemVms(); | ||||||
|     } |     } | ||||||
| 
 | 
 | ||||||
|     private void setMtuDetailsInVRNic(final Pair<NetworkVO, VpcVO> networks, Network network, NicVO vo) { |     private void setMtuDetailsInVRNic(final Pair<NetworkVO, VpcVO> networks, Network network, NicVO vo) { | ||||||
| @ -1694,6 +1712,7 @@ public class NetworkOrchestrator extends ManagerBase implements NetworkOrchestra | |||||||
|                     } |                     } | ||||||
|                 } |                 } | ||||||
|             } |             } | ||||||
|  |             reconfigureAndApplyStaticRouteForVpcVpn(network); | ||||||
|         } finally { |         } finally { | ||||||
|             for (final NetworkElement element : networkElements) { |             for (final NetworkElement element : networkElements) { | ||||||
|                 if (element instanceof AggregatedCommandExecutor && providersToImplement.contains(element.getProvider())) { |                 if (element instanceof AggregatedCommandExecutor && providersToImplement.contains(element.getProvider())) { | ||||||
| @ -1703,6 +1722,17 @@ public class NetworkOrchestrator extends ManagerBase implements NetworkOrchestra | |||||||
|         } |         } | ||||||
|     } |     } | ||||||
| 
 | 
 | ||||||
|  |     private void reconfigureAndApplyStaticRouteForVpcVpn(Network network) { | ||||||
|  |         if (network.getVpcId() != null) { | ||||||
|  |             _vpcMgr.reconfigStaticNatForVpcVr(network.getVpcId()); | ||||||
|  |             try { | ||||||
|  |                 _vpcMgr.applyStaticRouteForVpcVpnIfNeeded(network.getVpcId(), true); | ||||||
|  |             } catch (ResourceUnavailableException e) { | ||||||
|  |                 logger.error("Unable to apply static routes for vpc " + network.getVpcId() + " due to " + e.getMessage()); | ||||||
|  |             } | ||||||
|  |         } | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|     private void implementNetworkElements(final DeployDestination dest, final ReservationContext context, final Network network, final NetworkOffering offering, final List<Provider> providersToImplement) |     private void implementNetworkElements(final DeployDestination dest, final ReservationContext context, final Network network, final NetworkOffering offering, final List<Provider> providersToImplement) | ||||||
|             throws ConcurrentOperationException, ResourceUnavailableException, InsufficientCapacityException { |             throws ConcurrentOperationException, ResourceUnavailableException, InsufficientCapacityException { | ||||||
|         for (NetworkElement element : networkElements) { |         for (NetworkElement element : networkElements) { | ||||||
| @ -1939,6 +1969,7 @@ public class NetworkOrchestrator extends ManagerBase implements NetworkOrchestra | |||||||
|                                 ip.setOneToOneNat(false); |                                 ip.setOneToOneNat(false); | ||||||
|                                 ip.setAssociatedWithVmId(null); |                                 ip.setAssociatedWithVmId(null); | ||||||
|                                 ip.setVmIp(null); |                                 ip.setVmIp(null); | ||||||
|  |                                 ip.setForRouter(false); | ||||||
|                                 _ipAddressDao.update(ip.getId(), ip); |                                 _ipAddressDao.update(ip.getId(), ip); | ||||||
|                             } |                             } | ||||||
|                         } |                         } | ||||||
| @ -3296,6 +3327,7 @@ public class NetworkOrchestrator extends ManagerBase implements NetworkOrchestra | |||||||
|                 } |                 } | ||||||
|             } |             } | ||||||
|         } |         } | ||||||
|  |         reconfigureAndApplyStaticRouteForVpcVpn(network); | ||||||
|         return success; |         return success; | ||||||
|     } |     } | ||||||
| 
 | 
 | ||||||
| @ -4877,6 +4909,6 @@ public class NetworkOrchestrator extends ManagerBase implements NetworkOrchestra | |||||||
|         return new ConfigKey<?>[]{NetworkGcWait, NetworkGcInterval, NetworkLockTimeout, DeniedRoutes, |         return new ConfigKey<?>[]{NetworkGcWait, NetworkGcInterval, NetworkLockTimeout, DeniedRoutes, | ||||||
|                 GuestDomainSuffix, NetworkThrottlingRate, MinVRVersion, |                 GuestDomainSuffix, NetworkThrottlingRate, MinVRVersion, | ||||||
|                 PromiscuousMode, MacAddressChanges, ForgedTransmits, MacLearning, RollingRestartEnabled, |                 PromiscuousMode, MacAddressChanges, ForgedTransmits, MacLearning, RollingRestartEnabled, | ||||||
|                 TUNGSTEN_ENABLED, NSX_ENABLED }; |                 TUNGSTEN_ENABLED, NSX_ENABLED, NETRIS_ENABLED }; | ||||||
|     } |     } | ||||||
| } | } | ||||||
|  | |||||||
| @ -64,4 +64,6 @@ public interface VlanDao extends GenericDao<VlanVO, Long> { | |||||||
|     List<VlanVO> listIpv6RangeByZoneIdAndVlanId(long zoneId, String vlanId); |     List<VlanVO> listIpv6RangeByZoneIdAndVlanId(long zoneId, String vlanId); | ||||||
| 
 | 
 | ||||||
|     List<VlanVO> listIpv6SupportingVlansByZone(long zoneId); |     List<VlanVO> listIpv6SupportingVlansByZone(long zoneId); | ||||||
|  | 
 | ||||||
|  |     List<VlanVO> listVlansForExternalNetworkProvider(long zoneId, String detailKey); | ||||||
| } | } | ||||||
|  | |||||||
| @ -26,6 +26,7 @@ import java.util.Map; | |||||||
| import javax.inject.Inject; | import javax.inject.Inject; | ||||||
| import javax.naming.ConfigurationException; | import javax.naming.ConfigurationException; | ||||||
| 
 | 
 | ||||||
|  | import com.cloud.dc.VlanDetailsVO; | ||||||
| import org.apache.commons.lang3.ArrayUtils; | import org.apache.commons.lang3.ArrayUtils; | ||||||
| import org.apache.commons.lang3.StringUtils; | import org.apache.commons.lang3.StringUtils; | ||||||
| import org.springframework.stereotype.Component; | import org.springframework.stereotype.Component; | ||||||
| @ -67,6 +68,8 @@ public class VlanDaoImpl extends GenericDaoBase<VlanVO, Long> implements VlanDao | |||||||
|     protected SearchBuilder<VlanVO> ZoneVlanIp6Search; |     protected SearchBuilder<VlanVO> ZoneVlanIp6Search; | ||||||
|     protected SearchBuilder<VlanVO> ZoneIp6Search; |     protected SearchBuilder<VlanVO> ZoneIp6Search; | ||||||
|     protected SearchBuilder<VlanVO> ZoneVlansSearch; |     protected SearchBuilder<VlanVO> ZoneVlansSearch; | ||||||
|  |     protected SearchBuilder<VlanVO> ProviderVlanSearch; | ||||||
|  |     protected SearchBuilder<VlanDetailsVO> VlanDetailsProviderSearch; | ||||||
| 
 | 
 | ||||||
|     protected SearchBuilder<AccountVlanMapVO> AccountVlanMapSearch; |     protected SearchBuilder<AccountVlanMapVO> AccountVlanMapSearch; | ||||||
|     protected SearchBuilder<DomainVlanMapVO> DomainVlanMapSearch; |     protected SearchBuilder<DomainVlanMapVO> DomainVlanMapSearch; | ||||||
| @ -79,6 +82,8 @@ public class VlanDaoImpl extends GenericDaoBase<VlanVO, Long> implements VlanDao | |||||||
|     protected DomainVlanMapDao _domainVlanMapDao; |     protected DomainVlanMapDao _domainVlanMapDao; | ||||||
|     @Inject |     @Inject | ||||||
|     protected IPAddressDao _ipAddressDao; |     protected IPAddressDao _ipAddressDao; | ||||||
|  |     @Inject | ||||||
|  |     protected VlanDetailsDao vlanDetailsDao; | ||||||
| 
 | 
 | ||||||
|     @Override |     @Override | ||||||
|     public VlanVO findByZoneAndVlanId(long zoneId, String vlanId) { |     public VlanVO findByZoneAndVlanId(long zoneId, String vlanId) { | ||||||
| @ -277,6 +282,19 @@ public class VlanDaoImpl extends GenericDaoBase<VlanVO, Long> implements VlanDao | |||||||
|         ZoneVlansSearch.and("zoneId", ZoneVlansSearch.entity().getDataCenterId(), SearchCriteria.Op.EQ); |         ZoneVlansSearch.and("zoneId", ZoneVlansSearch.entity().getDataCenterId(), SearchCriteria.Op.EQ); | ||||||
|         ZoneVlansSearch.and("vlan", ZoneVlansSearch.entity().getVlanTag(), SearchCriteria.Op.IN); |         ZoneVlansSearch.and("vlan", ZoneVlansSearch.entity().getVlanTag(), SearchCriteria.Op.IN); | ||||||
|         ZoneVlansSearch.done(); |         ZoneVlansSearch.done(); | ||||||
|  | 
 | ||||||
|  |         ProviderVlanSearch = createSearchBuilder(); | ||||||
|  |         ProviderVlanSearch.and("removed", ProviderVlanSearch.entity().getRemoved(), SearchCriteria.Op.NULL); | ||||||
|  |         ProviderVlanSearch.and("dataCenterId", ProviderVlanSearch.entity().getDataCenterId(), SearchCriteria.Op.EQ); | ||||||
|  |         VlanDetailsProviderSearch = vlanDetailsDao.createSearchBuilder(); | ||||||
|  |         VlanDetailsProviderSearch.and("name", VlanDetailsProviderSearch.entity().getName(), SearchCriteria.Op.EQ); | ||||||
|  |         VlanDetailsProviderSearch.and("value", VlanDetailsProviderSearch.entity().getValue(), SearchCriteria.Op.EQ); | ||||||
|  |         ProviderVlanSearch.join("VlanDetailsProviderSearch", VlanDetailsProviderSearch, ProviderVlanSearch.entity().getId(), | ||||||
|  |                 VlanDetailsProviderSearch.entity().getResourceId(), JoinBuilder.JoinType.INNER); | ||||||
|  | 
 | ||||||
|  |         VlanDetailsProviderSearch.done(); | ||||||
|  |         ProviderVlanSearch.done(); | ||||||
|  | 
 | ||||||
|         return result; |         return result; | ||||||
|     } |     } | ||||||
| 
 | 
 | ||||||
| @ -434,4 +452,13 @@ public class VlanDaoImpl extends GenericDaoBase<VlanVO, Long> implements VlanDao | |||||||
|         return listBy(sc); |         return listBy(sc); | ||||||
|     } |     } | ||||||
| 
 | 
 | ||||||
|  |     @Override | ||||||
|  |     public List<VlanVO> listVlansForExternalNetworkProvider(long zoneId, String detailKey) { | ||||||
|  |         SearchCriteria<VlanVO> sc = ProviderVlanSearch.create(); | ||||||
|  |         sc.setParameters("dataCenterId", zoneId); | ||||||
|  |         sc.setJoinParameters("VlanDetailsProviderSearch", "name", detailKey); | ||||||
|  |         sc.setJoinParameters("VlanDetailsProviderSearch", "value", "true"); | ||||||
|  |         return search(sc, null); | ||||||
|  |     } | ||||||
|  | 
 | ||||||
| } | } | ||||||
|  | |||||||
| @ -197,6 +197,7 @@ public class IPAddressDaoImpl extends GenericDaoBase<IPAddressVO, Long> implemen | |||||||
|         address.setSourceNat(false); |         address.setSourceNat(false); | ||||||
|         address.setOneToOneNat(false); |         address.setOneToOneNat(false); | ||||||
|         address.setAssociatedWithVmId(null); |         address.setAssociatedWithVmId(null); | ||||||
|  |         address.setForRouter(false); | ||||||
|         address.setState(State.Free); |         address.setState(State.Free); | ||||||
|         address.setAssociatedWithNetworkId(null); |         address.setAssociatedWithNetworkId(null); | ||||||
|         address.setVpcId(null); |         address.setVpcId(null); | ||||||
|  | |||||||
| @ -117,6 +117,9 @@ public class IPAddressVO implements IpAddress { | |||||||
|     @Column(name = "forsystemvms") |     @Column(name = "forsystemvms") | ||||||
|     private boolean forSystemVms = false; |     private boolean forSystemVms = false; | ||||||
| 
 | 
 | ||||||
|  |     @Column(name = "for_router") | ||||||
|  |     private boolean forRouter = false; | ||||||
|  | 
 | ||||||
|     @Column(name= GenericDao.REMOVED_COLUMN) |     @Column(name= GenericDao.REMOVED_COLUMN) | ||||||
|     private Date removed; |     private Date removed; | ||||||
| 
 | 
 | ||||||
| @ -388,4 +391,13 @@ public class IPAddressVO implements IpAddress { | |||||||
|     public boolean isForSystemVms() { |     public boolean isForSystemVms() { | ||||||
|         return forSystemVms; |         return forSystemVms; | ||||||
|     } |     } | ||||||
|  | 
 | ||||||
|  |     @Override | ||||||
|  |     public boolean isForRouter() { | ||||||
|  |         return forRouter; | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|  |     public void setForRouter(boolean forRouter) { | ||||||
|  |         this.forRouter = forRouter; | ||||||
|  |     } | ||||||
| } | } | ||||||
|  | |||||||
| @ -0,0 +1,24 @@ | |||||||
|  | // Licensed to the Apache Software Foundation (ASF) under one | ||||||
|  | // or more contributor license agreements.  See the NOTICE file | ||||||
|  | // distributed with this work for additional information | ||||||
|  | // regarding copyright ownership.  The ASF licenses this file | ||||||
|  | // to you under the Apache License, Version 2.0 (the | ||||||
|  | // "License"); you may not use this file except in compliance | ||||||
|  | // with the License.  You may obtain a copy of the License at | ||||||
|  | // | ||||||
|  | //   http://www.apache.org/licenses/LICENSE-2.0 | ||||||
|  | // | ||||||
|  | // Unless required by applicable law or agreed to in writing, | ||||||
|  | // software distributed under the License is distributed on an | ||||||
|  | // "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY | ||||||
|  | // KIND, either express or implied.  See the License for the | ||||||
|  | // specific language governing permissions and limitations | ||||||
|  | // under the License. | ||||||
|  | package com.cloud.network.dao; | ||||||
|  | 
 | ||||||
|  | import com.cloud.network.element.NetrisProviderVO; | ||||||
|  | import com.cloud.utils.db.GenericDao; | ||||||
|  | 
 | ||||||
|  | public interface NetrisProviderDao extends GenericDao<NetrisProviderVO, Long> { | ||||||
|  |     NetrisProviderVO findByZoneId(long zoneId); | ||||||
|  | } | ||||||
| @ -0,0 +1,52 @@ | |||||||
|  | // Licensed to the Apache Software Foundation (ASF) under one | ||||||
|  | // or more contributor license agreements.  See the NOTICE file | ||||||
|  | // distributed with this work for additional information | ||||||
|  | // regarding copyright ownership.  The ASF licenses this file | ||||||
|  | // to you under the Apache License, Version 2.0 (the | ||||||
|  | // "License"); you may not use this file except in compliance | ||||||
|  | // with the License.  You may obtain a copy of the License at | ||||||
|  | // | ||||||
|  | //   http://www.apache.org/licenses/LICENSE-2.0 | ||||||
|  | // | ||||||
|  | // Unless required by applicable law or agreed to in writing, | ||||||
|  | // software distributed under the License is distributed on an | ||||||
|  | // "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY | ||||||
|  | // KIND, either express or implied.  See the License for the | ||||||
|  | // specific language governing permissions and limitations | ||||||
|  | // under the License. | ||||||
|  | package com.cloud.network.dao; | ||||||
|  | 
 | ||||||
|  | import com.cloud.network.element.NetrisProviderVO; | ||||||
|  | import com.cloud.utils.db.DB; | ||||||
|  | import com.cloud.utils.db.GenericDaoBase; | ||||||
|  | import com.cloud.utils.db.SearchBuilder; | ||||||
|  | import com.cloud.utils.db.SearchCriteria; | ||||||
|  | import org.springframework.stereotype.Component; | ||||||
|  | 
 | ||||||
|  | @Component | ||||||
|  | @DB() | ||||||
|  | public class NetrisProviderDaoImpl extends GenericDaoBase<NetrisProviderVO, Long> implements NetrisProviderDao { | ||||||
|  | 
 | ||||||
|  |     final SearchBuilder<NetrisProviderVO> allFieldsSearch; | ||||||
|  | 
 | ||||||
|  |     public NetrisProviderDaoImpl() { | ||||||
|  |         super(); | ||||||
|  |         allFieldsSearch = createSearchBuilder(); | ||||||
|  |         allFieldsSearch.and("id", allFieldsSearch.entity().getId(), | ||||||
|  |                 SearchCriteria.Op.EQ); | ||||||
|  |         allFieldsSearch.and("uuid", allFieldsSearch.entity().getUuid(), | ||||||
|  |                 SearchCriteria.Op.EQ); | ||||||
|  |         allFieldsSearch.and("hostname", allFieldsSearch.entity().getUrl(), | ||||||
|  |                 SearchCriteria.Op.EQ); | ||||||
|  |         allFieldsSearch.and("zone_id", allFieldsSearch.entity().getZoneId(), | ||||||
|  |                 SearchCriteria.Op.EQ); | ||||||
|  |         allFieldsSearch.done(); | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|  |     @Override | ||||||
|  |     public NetrisProviderVO findByZoneId(long zoneId) { | ||||||
|  |         SearchCriteria<NetrisProviderVO> sc = allFieldsSearch.create(); | ||||||
|  |         sc.setParameters("zone_id", zoneId); | ||||||
|  |         return findOneBy(sc); | ||||||
|  |     } | ||||||
|  | } | ||||||
| @ -33,4 +33,6 @@ public interface RemoteAccessVpnDao extends GenericDao<RemoteAccessVpnVO, Long> | |||||||
|     List<RemoteAccessVpnVO> findByAccount(Long accountId); |     List<RemoteAccessVpnVO> findByAccount(Long accountId); | ||||||
| 
 | 
 | ||||||
|     List<RemoteAccessVpnVO> listByNetworkId(Long networkId); |     List<RemoteAccessVpnVO> listByNetworkId(Long networkId); | ||||||
|  | 
 | ||||||
|  |     List<RemoteAccessVpnVO> listByVpcId(Long vpcId); | ||||||
| } | } | ||||||
|  | |||||||
| @ -85,4 +85,11 @@ public class RemoteAccessVpnDaoImpl extends GenericDaoBase<RemoteAccessVpnVO, Lo | |||||||
|         sc.setParameters("networkId", networkId); |         sc.setParameters("networkId", networkId); | ||||||
|         return listBy(sc); |         return listBy(sc); | ||||||
|     } |     } | ||||||
|  | 
 | ||||||
|  |     @Override | ||||||
|  |     public List<RemoteAccessVpnVO> listByVpcId(Long vpcId) { | ||||||
|  |         SearchCriteria<RemoteAccessVpnVO> sc = AllFieldsSearch.create(); | ||||||
|  |         sc.setParameters("vpcId", vpcId); | ||||||
|  |         return listBy(sc); | ||||||
|  |     } | ||||||
| } | } | ||||||
|  | |||||||
| @ -20,4 +20,6 @@ import com.cloud.utils.db.GenericDao; | |||||||
| 
 | 
 | ||||||
| public interface Site2SiteVpnGatewayDao extends GenericDao<Site2SiteVpnGatewayVO, Long> { | public interface Site2SiteVpnGatewayDao extends GenericDao<Site2SiteVpnGatewayVO, Long> { | ||||||
|     Site2SiteVpnGatewayVO findByVpcId(long vpcId); |     Site2SiteVpnGatewayVO findByVpcId(long vpcId); | ||||||
|  | 
 | ||||||
|  |     Site2SiteVpnGatewayVO findByPublicIpAddress(long ipAddressId); | ||||||
| } | } | ||||||
|  | |||||||
| @ -35,6 +35,7 @@ public class Site2SiteVpnGatewayDaoImpl extends GenericDaoBase<Site2SiteVpnGatew | |||||||
|     protected Site2SiteVpnGatewayDaoImpl() { |     protected Site2SiteVpnGatewayDaoImpl() { | ||||||
|         AllFieldsSearch = createSearchBuilder(); |         AllFieldsSearch = createSearchBuilder(); | ||||||
|         AllFieldsSearch.and("vpcId", AllFieldsSearch.entity().getVpcId(), SearchCriteria.Op.EQ); |         AllFieldsSearch.and("vpcId", AllFieldsSearch.entity().getVpcId(), SearchCriteria.Op.EQ); | ||||||
|  |         AllFieldsSearch.and("ipAddressId", AllFieldsSearch.entity().getAddrId(), SearchCriteria.Op.EQ); | ||||||
|         AllFieldsSearch.done(); |         AllFieldsSearch.done(); | ||||||
|     } |     } | ||||||
| 
 | 
 | ||||||
| @ -44,4 +45,11 @@ public class Site2SiteVpnGatewayDaoImpl extends GenericDaoBase<Site2SiteVpnGatew | |||||||
|         sc.setParameters("vpcId", vpcId); |         sc.setParameters("vpcId", vpcId); | ||||||
|         return findOneBy(sc); |         return findOneBy(sc); | ||||||
|     } |     } | ||||||
|  | 
 | ||||||
|  |     @Override | ||||||
|  |     public Site2SiteVpnGatewayVO findByPublicIpAddress(long ipAddressId) { | ||||||
|  |         SearchCriteria<Site2SiteVpnGatewayVO> sc = AllFieldsSearch.create(); | ||||||
|  |         sc.setParameters("ipAddressId", ipAddressId); | ||||||
|  |         return findOneBy(sc); | ||||||
|  |     } | ||||||
| } | } | ||||||
|  | |||||||
| @ -0,0 +1,265 @@ | |||||||
|  | // Licensed to the Apache Software Foundation (ASF) under one | ||||||
|  | // or more contributor license agreements.  See the NOTICE file | ||||||
|  | // distributed with this work for additional information | ||||||
|  | // regarding copyright ownership.  The ASF licenses this file | ||||||
|  | // to you under the Apache License, Version 2.0 (the | ||||||
|  | // "License"); you may not use this file except in compliance | ||||||
|  | // with the License.  You may obtain a copy of the License at | ||||||
|  | // | ||||||
|  | //   http://www.apache.org/licenses/LICENSE-2.0 | ||||||
|  | // | ||||||
|  | // Unless required by applicable law or agreed to in writing, | ||||||
|  | // software distributed under the License is distributed on an | ||||||
|  | // "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY | ||||||
|  | // KIND, either express or implied.  See the License for the | ||||||
|  | // specific language governing permissions and limitations | ||||||
|  | // under the License. | ||||||
|  | package com.cloud.network.element; | ||||||
|  | 
 | ||||||
|  | import com.cloud.network.netris.NetrisProvider; | ||||||
|  | 
 | ||||||
|  | import javax.persistence.Column; | ||||||
|  | import javax.persistence.Entity; | ||||||
|  | import javax.persistence.GeneratedValue; | ||||||
|  | import javax.persistence.GenerationType; | ||||||
|  | import javax.persistence.Id; | ||||||
|  | import javax.persistence.Table; | ||||||
|  | import java.util.Date; | ||||||
|  | import java.util.UUID; | ||||||
|  | 
 | ||||||
|  | @Entity | ||||||
|  | @Table(name = "netris_providers") | ||||||
|  | public class NetrisProviderVO implements NetrisProvider { | ||||||
|  | 
 | ||||||
|  |     @Id | ||||||
|  |     @GeneratedValue(strategy = GenerationType.IDENTITY) | ||||||
|  |     @Column(name = "id") | ||||||
|  |     long id; | ||||||
|  | 
 | ||||||
|  |     @Column(name = "uuid") | ||||||
|  |     private String uuid; | ||||||
|  | 
 | ||||||
|  |     @Column(name = "name") | ||||||
|  |     private String name; | ||||||
|  | 
 | ||||||
|  |     @Column(name = "zone_id") | ||||||
|  |     private long zoneId; | ||||||
|  | 
 | ||||||
|  |     @Column(name = "host_id") | ||||||
|  |     private long hostId; | ||||||
|  | 
 | ||||||
|  |     @Column(name = "url") | ||||||
|  |     private String url; | ||||||
|  | 
 | ||||||
|  |     @Column(name = "username") | ||||||
|  |     private String username; | ||||||
|  | 
 | ||||||
|  |     @Column(name = "password") | ||||||
|  |     private String password; | ||||||
|  | 
 | ||||||
|  |     @Column(name = "site_name") | ||||||
|  |     private String siteName; | ||||||
|  | 
 | ||||||
|  |     @Column(name = "tenant_name") | ||||||
|  |     private String tenantName; | ||||||
|  | 
 | ||||||
|  |     @Column(name = "netris_tag") | ||||||
|  |     private String netrisTag; | ||||||
|  | 
 | ||||||
|  |     @Column(name = "created") | ||||||
|  |     private Date created; | ||||||
|  | 
 | ||||||
|  |     @Column(name = "removed") | ||||||
|  |     private Date removed; | ||||||
|  | 
 | ||||||
|  |     public NetrisProviderVO() { | ||||||
|  |         this.uuid = UUID.randomUUID().toString(); | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|  |     @Override | ||||||
|  |     public long getId() { | ||||||
|  |         return id; | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|  |     public void setId(long id) { | ||||||
|  |         this.id = id; | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|  |     @Override | ||||||
|  |     public String getUuid() { | ||||||
|  |         return uuid; | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|  |     public void setUuid(String uuid) { | ||||||
|  |         this.uuid = uuid; | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|  |     @Override | ||||||
|  |     public String getName() { | ||||||
|  |         return name; | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|  |     public void setName(String name) { | ||||||
|  |         this.name = name; | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|  |     @Override | ||||||
|  |     public long getZoneId() { | ||||||
|  |         return zoneId; | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|  |     public void setZoneId(long zoneId) { | ||||||
|  |         this.zoneId = zoneId; | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|  |     public long getHostId() { | ||||||
|  |         return hostId; | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|  |     public void setHostId(long hostId) { | ||||||
|  |         this.hostId = hostId; | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|  |     @Override | ||||||
|  |     public String getUrl() { | ||||||
|  |         return url; | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|  |     public void setUrl(String url) { | ||||||
|  |         this.url = url; | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|  |     @Override | ||||||
|  |     public String getUsername() { | ||||||
|  |         return username; | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|  |     public void setUsername(String username) { | ||||||
|  |         this.username = username; | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|  |     public String getPassword() { | ||||||
|  |         return password; | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|  |     public void setPassword(String password) { | ||||||
|  |         this.password = password; | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|  |     public String getSiteName() { | ||||||
|  |         return siteName; | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|  |     public void setSiteName(String siteName) { | ||||||
|  |         this.siteName = siteName; | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|  |     public String getTenantName() { | ||||||
|  |         return tenantName; | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|  |     public void setTenantName(String tenantName) { | ||||||
|  |         this.tenantName = tenantName; | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|  |     public String getNetrisTag() { | ||||||
|  |         return netrisTag; | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|  |     public void setNetrisTag(String netrisTag) { | ||||||
|  |         this.netrisTag = netrisTag; | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|  |     public Date getCreated() { | ||||||
|  |         return created; | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|  |     public void setCreated(Date created) { | ||||||
|  |         this.created = created; | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|  |     public Date getRemoved() { | ||||||
|  |         return removed; | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|  |     public void setRemoved(Date removed) { | ||||||
|  |         this.removed = removed; | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|  |     public static final class Builder { | ||||||
|  |         private long zoneId; | ||||||
|  |         private long hostId; | ||||||
|  |         private String name; | ||||||
|  |         private String url; | ||||||
|  |         private String username; | ||||||
|  |         private String password; | ||||||
|  |         private String siteName; | ||||||
|  |         private String tenantName; | ||||||
|  |         private String netrisTag; | ||||||
|  | 
 | ||||||
|  |         public Builder() { | ||||||
|  |             // Default constructor | ||||||
|  |         } | ||||||
|  | 
 | ||||||
|  |         public Builder setZoneId(long zoneId) { | ||||||
|  |             this.zoneId = zoneId; | ||||||
|  |             return this; | ||||||
|  |         } | ||||||
|  | 
 | ||||||
|  |         public Builder setHostId(long hostId) { | ||||||
|  |             this.hostId = hostId; | ||||||
|  |             return this; | ||||||
|  |         } | ||||||
|  | 
 | ||||||
|  |         public Builder setName(String name) { | ||||||
|  |             this.name = name; | ||||||
|  |             return this; | ||||||
|  |         } | ||||||
|  | 
 | ||||||
|  |         public Builder setUrl(String url) { | ||||||
|  |             this.url = url; | ||||||
|  |             return this; | ||||||
|  |         } | ||||||
|  | 
 | ||||||
|  |         public Builder setUsername(String username) { | ||||||
|  |             this.username = username; | ||||||
|  |             return this; | ||||||
|  |         } | ||||||
|  | 
 | ||||||
|  |         public Builder setPassword(String password) { | ||||||
|  |             this.password = password; | ||||||
|  |             return this; | ||||||
|  |         } | ||||||
|  | 
 | ||||||
|  |         public Builder setSiteName(String siteName) { | ||||||
|  |             this.siteName = siteName; | ||||||
|  |             return this; | ||||||
|  |         } | ||||||
|  | 
 | ||||||
|  |         public Builder setTenantName(String tenantName) { | ||||||
|  |             this.tenantName = tenantName; | ||||||
|  |             return this; | ||||||
|  |         } | ||||||
|  | 
 | ||||||
|  |         public Builder setNetrisTag(String netrisTag) { | ||||||
|  |             this.netrisTag = netrisTag; | ||||||
|  |             return this; | ||||||
|  |         } | ||||||
|  | 
 | ||||||
|  |         public NetrisProviderVO build() { | ||||||
|  |             NetrisProviderVO provider = new NetrisProviderVO(); | ||||||
|  |             provider.setZoneId(this.zoneId); | ||||||
|  |             provider.setHostId(this.hostId); | ||||||
|  |             provider.setUuid(UUID.randomUUID().toString()); | ||||||
|  |             provider.setName(this.name); | ||||||
|  |             provider.setUrl(this.url); | ||||||
|  |             provider.setUsername(this.username); | ||||||
|  |             provider.setPassword(this.password); | ||||||
|  |             provider.setSiteName(this.siteName); | ||||||
|  |             provider.setTenantName(this.tenantName); | ||||||
|  |             provider.setNetrisTag(this.netrisTag); | ||||||
|  |             provider.setCreated(new Date()); | ||||||
|  |             return provider; | ||||||
|  |         } | ||||||
|  |     } | ||||||
|  | } | ||||||
| @ -27,6 +27,7 @@ import javax.persistence.GeneratedValue; | |||||||
| import javax.persistence.GenerationType; | import javax.persistence.GenerationType; | ||||||
| import javax.persistence.Id; | import javax.persistence.Id; | ||||||
| import javax.persistence.Table; | import javax.persistence.Table; | ||||||
|  | import javax.persistence.Transient; | ||||||
| 
 | 
 | ||||||
| import com.cloud.utils.db.GenericDao; | import com.cloud.utils.db.GenericDao; | ||||||
| 
 | 
 | ||||||
| @ -42,7 +43,10 @@ public class StaticRouteVO implements StaticRoute { | |||||||
|     String uuid; |     String uuid; | ||||||
| 
 | 
 | ||||||
|     @Column(name = "vpc_gateway_id", updatable = false) |     @Column(name = "vpc_gateway_id", updatable = false) | ||||||
|     long vpcGatewayId; |     Long vpcGatewayId; | ||||||
|  | 
 | ||||||
|  |     @Column(name = "next_hop") | ||||||
|  |     private String nextHop; | ||||||
| 
 | 
 | ||||||
|     @Column(name = "cidr") |     @Column(name = "cidr") | ||||||
|     private String cidr; |     private String cidr; | ||||||
| @ -67,6 +71,9 @@ public class StaticRouteVO implements StaticRoute { | |||||||
|         uuid = UUID.randomUUID().toString(); |         uuid = UUID.randomUUID().toString(); | ||||||
|     } |     } | ||||||
| 
 | 
 | ||||||
|  |     @Transient | ||||||
|  |     boolean forVpn = false; | ||||||
|  | 
 | ||||||
|     /** |     /** | ||||||
|      * @param vpcGatewayId |      * @param vpcGatewayId | ||||||
|      * @param cidr |      * @param cidr | ||||||
| @ -74,7 +81,7 @@ public class StaticRouteVO implements StaticRoute { | |||||||
|      * @param accountId TODO |      * @param accountId TODO | ||||||
|      * @param domainId TODO |      * @param domainId TODO | ||||||
|      */ |      */ | ||||||
|     public StaticRouteVO(long vpcGatewayId, String cidr, Long vpcId, long accountId, long domainId) { |     public StaticRouteVO(Long vpcGatewayId, String cidr, Long vpcId, long accountId, long domainId, String nextHop) { | ||||||
|         super(); |         super(); | ||||||
|         this.vpcGatewayId = vpcGatewayId; |         this.vpcGatewayId = vpcGatewayId; | ||||||
|         this.cidr = cidr; |         this.cidr = cidr; | ||||||
| @ -82,14 +89,32 @@ public class StaticRouteVO implements StaticRoute { | |||||||
|         this.vpcId = vpcId; |         this.vpcId = vpcId; | ||||||
|         this.accountId = accountId; |         this.accountId = accountId; | ||||||
|         this.domainId = domainId; |         this.domainId = domainId; | ||||||
|  |         this.nextHop = nextHop; | ||||||
|         uuid = UUID.randomUUID().toString(); |         uuid = UUID.randomUUID().toString(); | ||||||
|     } |     } | ||||||
| 
 | 
 | ||||||
|  |     public StaticRouteVO(String cidr, Long vpcId, long accountId, long domainId, String nextHop, State state, boolean forVpn) { | ||||||
|  |         super(); | ||||||
|  |         this.cidr = cidr; | ||||||
|  |         this.state = state; | ||||||
|  |         this.vpcId = vpcId; | ||||||
|  |         this.accountId = accountId; | ||||||
|  |         this.domainId = domainId; | ||||||
|  |         this.nextHop = nextHop; | ||||||
|  |         uuid = UUID.randomUUID().toString(); | ||||||
|  |         this.forVpn = forVpn; | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|     @Override |     @Override | ||||||
|     public long getVpcGatewayId() { |     public Long getVpcGatewayId() { | ||||||
|         return vpcGatewayId; |         return vpcGatewayId; | ||||||
|     } |     } | ||||||
| 
 | 
 | ||||||
|  |     @Override | ||||||
|  |     public String getNextHop() { | ||||||
|  |         return nextHop; | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|     @Override |     @Override | ||||||
|     public String getCidr() { |     public String getCidr() { | ||||||
|         return cidr; |         return cidr; | ||||||
| @ -145,4 +170,8 @@ public class StaticRouteVO implements StaticRoute { | |||||||
|     public String getName() { |     public String getName() { | ||||||
|         return null; |         return null; | ||||||
|     } |     } | ||||||
|  | 
 | ||||||
|  |     public boolean isForVpn() { | ||||||
|  |         return forVpn; | ||||||
|  |     } | ||||||
| } | } | ||||||
|  | |||||||
| @ -60,9 +60,6 @@ public class VpcOfferingVO implements VpcOffering { | |||||||
|     @Column(name = "default") |     @Column(name = "default") | ||||||
|     boolean isDefault = false; |     boolean isDefault = false; | ||||||
| 
 | 
 | ||||||
|     @Column(name = "for_nsx") |  | ||||||
|     boolean forNsx = false; |  | ||||||
| 
 |  | ||||||
|     @Column(name = "network_mode") |     @Column(name = "network_mode") | ||||||
|     NetworkOffering.NetworkMode networkMode; |     NetworkOffering.NetworkMode networkMode; | ||||||
| 
 | 
 | ||||||
| @ -159,14 +156,6 @@ public class VpcOfferingVO implements VpcOffering { | |||||||
|         return isDefault; |         return isDefault; | ||||||
|     } |     } | ||||||
| 
 | 
 | ||||||
|     public boolean isForNsx() { |  | ||||||
|         return forNsx; |  | ||||||
|     } |  | ||||||
| 
 |  | ||||||
|     public void setForNsx(boolean forNsx) { |  | ||||||
|         this.forNsx = forNsx; |  | ||||||
|     } |  | ||||||
| 
 |  | ||||||
|     public NetworkOffering.NetworkMode getNetworkMode() { |     public NetworkOffering.NetworkMode getNetworkMode() { | ||||||
|         return networkMode; |         return networkMode; | ||||||
|     } |     } | ||||||
|  | |||||||
| @ -18,6 +18,7 @@ package com.cloud.network.vpc.dao; | |||||||
| 
 | 
 | ||||||
| import java.util.List; | import java.util.List; | ||||||
| 
 | 
 | ||||||
|  | import com.cloud.network.Network; | ||||||
| import com.cloud.network.Network.Service; | import com.cloud.network.Network.Service; | ||||||
| import com.cloud.network.vpc.VpcOfferingServiceMapVO; | import com.cloud.network.vpc.VpcOfferingServiceMapVO; | ||||||
| import com.cloud.utils.db.GenericDao; | import com.cloud.utils.db.GenericDao; | ||||||
| @ -37,4 +38,8 @@ public interface VpcOfferingServiceMapDao extends GenericDao<VpcOfferingServiceM | |||||||
| 
 | 
 | ||||||
|     VpcOfferingServiceMapVO findByServiceProviderAndOfferingId(String service, String provider, long vpcOfferingId); |     VpcOfferingServiceMapVO findByServiceProviderAndOfferingId(String service, String provider, long vpcOfferingId); | ||||||
| 
 | 
 | ||||||
|  |     boolean isProviderForVpcOffering(Network.Provider provider, long vpcOfferingId); | ||||||
|  | 
 | ||||||
|  |     List<VpcOfferingServiceMapVO> listProvidersForServiceForVpcOffering(long vpcOfferingId, Service service); | ||||||
|  | 
 | ||||||
| } | } | ||||||
|  | |||||||
| @ -19,6 +19,7 @@ package com.cloud.network.vpc.dao; | |||||||
| import java.util.List; | import java.util.List; | ||||||
| 
 | 
 | ||||||
| 
 | 
 | ||||||
|  | import com.cloud.network.Network; | ||||||
| import org.springframework.stereotype.Component; | import org.springframework.stereotype.Component; | ||||||
| 
 | 
 | ||||||
| import com.cloud.network.Network.Service; | import com.cloud.network.Network.Service; | ||||||
| @ -110,4 +111,22 @@ public class VpcOfferingServiceMapDaoImpl extends GenericDaoBase<VpcOfferingServ | |||||||
| 
 | 
 | ||||||
|         return findOneBy(sc); |         return findOneBy(sc); | ||||||
|     } |     } | ||||||
|  | 
 | ||||||
|  |     @Override | ||||||
|  |     public boolean isProviderForVpcOffering(Network.Provider provider, long vpcOfferingId) { | ||||||
|  |         SearchCriteria<VpcOfferingServiceMapVO> sc = AllFieldsSearch.create(); | ||||||
|  |         sc.setParameters("vpcOffId", vpcOfferingId); | ||||||
|  |         sc.setParameters("provider", provider.getName()); | ||||||
|  |         return findOneBy(sc) != null; | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|  |     @Override | ||||||
|  |     public List<VpcOfferingServiceMapVO> listProvidersForServiceForVpcOffering(long vpcOfferingId, Service service) { | ||||||
|  |         SearchCriteria<VpcOfferingServiceMapVO> sc = AllFieldsSearch.create(); | ||||||
|  | 
 | ||||||
|  |         sc.setParameters("vpcOffId", vpcOfferingId); | ||||||
|  |         sc.setParameters("service", service.getName()); | ||||||
|  | 
 | ||||||
|  |         return customSearch(sc, null); | ||||||
|  |     } | ||||||
| } | } | ||||||
|  | |||||||
| @ -68,8 +68,15 @@ public class VpcServiceMapDaoImpl extends GenericDaoBase<VpcServiceMapVO, Long> | |||||||
| 
 | 
 | ||||||
|     @Override |     @Override | ||||||
|     public boolean canProviderSupportServiceInVpc(long vpcId, Service service, Provider provider) { |     public boolean canProviderSupportServiceInVpc(long vpcId, Service service, Provider provider) { | ||||||
|         // TODO Auto-generated method stub |         SearchCriteria<VpcServiceMapVO> sc = AllFieldsSearch.create(); | ||||||
|         return false; |         sc.setParameters("vpcId", vpcId); | ||||||
|  |         sc.setParameters("service", service.getName()); | ||||||
|  |         sc.setParameters("provider", provider.getName()); | ||||||
|  |         if (findOneBy(sc) != null) { | ||||||
|  |             return true; | ||||||
|  |         } else { | ||||||
|  |             return false; | ||||||
|  |         } | ||||||
|     } |     } | ||||||
| 
 | 
 | ||||||
|     @Override |     @Override | ||||||
|  | |||||||
| @ -134,12 +134,6 @@ public class NetworkOfferingVO implements NetworkOffering { | |||||||
|     @Column(name = "for_vpc") |     @Column(name = "for_vpc") | ||||||
|     boolean forVpc; |     boolean forVpc; | ||||||
| 
 | 
 | ||||||
|     @Column(name = "for_tungsten") |  | ||||||
|     boolean forTungsten = false; |  | ||||||
| 
 |  | ||||||
|     @Column(name = "for_nsx") |  | ||||||
|     boolean forNsx = false; |  | ||||||
| 
 |  | ||||||
|     @Column(name = "network_mode") |     @Column(name = "network_mode") | ||||||
|     NetworkMode networkMode; |     NetworkMode networkMode; | ||||||
| 
 | 
 | ||||||
| @ -200,24 +194,6 @@ public class NetworkOfferingVO implements NetworkOffering { | |||||||
|         this.forVpc = isForVpc; |         this.forVpc = isForVpc; | ||||||
|     } |     } | ||||||
| 
 | 
 | ||||||
|     @Override |  | ||||||
|     public boolean isForTungsten() { |  | ||||||
|         return forTungsten; |  | ||||||
|     } |  | ||||||
| 
 |  | ||||||
|     public void setForTungsten(boolean forTungsten) { |  | ||||||
|         this.forTungsten = forTungsten; |  | ||||||
|     } |  | ||||||
| 
 |  | ||||||
|     @Override |  | ||||||
|     public boolean isForNsx() { |  | ||||||
|         return forNsx; |  | ||||||
|     } |  | ||||||
| 
 |  | ||||||
|     public void setForNsx(boolean forNsx) { |  | ||||||
|         this.forNsx = forNsx; |  | ||||||
|     } |  | ||||||
| 
 |  | ||||||
|     @Override |     @Override | ||||||
|     public NetworkMode getNetworkMode() { |     public NetworkMode getNetworkMode() { | ||||||
|         return networkMode; |         return networkMode; | ||||||
|  | |||||||
| @ -46,8 +46,12 @@ public interface NicDao extends GenericDao<NicVO, Long> { | |||||||
| 
 | 
 | ||||||
|     NicVO findByNetworkIdAndTypeIncludingRemoved(long networkId, VirtualMachine.Type vmType); |     NicVO findByNetworkIdAndTypeIncludingRemoved(long networkId, VirtualMachine.Type vmType); | ||||||
| 
 | 
 | ||||||
|  |     NicVO findNonPlaceHolderByNetworkIdAndType(long networkId, VirtualMachine.Type vmType); | ||||||
|  | 
 | ||||||
|     NicVO findByIp4AddressAndNetworkId(String ip4Address, long networkId); |     NicVO findByIp4AddressAndNetworkId(String ip4Address, long networkId); | ||||||
| 
 | 
 | ||||||
|  |     NicVO findNonPlaceHolderByIp4AddressAndNetworkId(String ip4Address, long networkId); | ||||||
|  | 
 | ||||||
|     NicVO findByNetworkIdAndMacAddress(long networkId, String mac); |     NicVO findByNetworkIdAndMacAddress(long networkId, String mac); | ||||||
| 
 | 
 | ||||||
|     NicVO findDefaultNicForVM(long instanceId); |     NicVO findDefaultNicForVM(long instanceId); | ||||||
|  | |||||||
| @ -69,6 +69,7 @@ public class NicDaoImpl extends GenericDaoBase<NicVO, Long> implements NicDao { | |||||||
|         AllFieldsSearch.and("secondaryip", AllFieldsSearch.entity().getSecondaryIp(), Op.EQ); |         AllFieldsSearch.and("secondaryip", AllFieldsSearch.entity().getSecondaryIp(), Op.EQ); | ||||||
|         AllFieldsSearch.and("nicid", AllFieldsSearch.entity().getId(), Op.EQ); |         AllFieldsSearch.and("nicid", AllFieldsSearch.entity().getId(), Op.EQ); | ||||||
|         AllFieldsSearch.and("strategy", AllFieldsSearch.entity().getReservationStrategy(), Op.EQ); |         AllFieldsSearch.and("strategy", AllFieldsSearch.entity().getReservationStrategy(), Op.EQ); | ||||||
|  |         AllFieldsSearch.and("strategyNEQ", AllFieldsSearch.entity().getReservationStrategy(), Op.NEQ); | ||||||
|         AllFieldsSearch.and("reserverName",AllFieldsSearch.entity().getReserver(),Op.EQ); |         AllFieldsSearch.and("reserverName",AllFieldsSearch.entity().getReserver(),Op.EQ); | ||||||
|         AllFieldsSearch.and("macAddress", AllFieldsSearch.entity().getMacAddress(), Op.EQ); |         AllFieldsSearch.and("macAddress", AllFieldsSearch.entity().getMacAddress(), Op.EQ); | ||||||
|         AllFieldsSearch.and("deviceid", AllFieldsSearch.entity().getDeviceId(), Op.EQ); |         AllFieldsSearch.and("deviceid", AllFieldsSearch.entity().getDeviceId(), Op.EQ); | ||||||
| @ -195,6 +196,15 @@ public class NicDaoImpl extends GenericDaoBase<NicVO, Long> implements NicDao { | |||||||
|         return findByNetworkIdAndTypeInternal(networkId, vmType, true); |         return findByNetworkIdAndTypeInternal(networkId, vmType, true); | ||||||
|     } |     } | ||||||
| 
 | 
 | ||||||
|  |     @Override | ||||||
|  |     public NicVO findNonPlaceHolderByNetworkIdAndType(long networkId, VirtualMachine.Type vmType) { | ||||||
|  |         SearchCriteria<NicVO> sc = AllFieldsSearch.create(); | ||||||
|  |         sc.setParameters("network", networkId); | ||||||
|  |         sc.setParameters("vmType", vmType); | ||||||
|  |         sc.setParameters("strategyNEQ", Nic.ReservationStrategy.PlaceHolder.toString()); | ||||||
|  |         return findOneBy(sc); | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|     @Override |     @Override | ||||||
|     public NicVO findByNetworkIdTypeAndGateway(long networkId, VirtualMachine.Type vmType, String gateway) { |     public NicVO findByNetworkIdTypeAndGateway(long networkId, VirtualMachine.Type vmType, String gateway) { | ||||||
|         SearchCriteria<NicVO> sc = AllFieldsSearch.create(); |         SearchCriteria<NicVO> sc = AllFieldsSearch.create(); | ||||||
| @ -222,6 +232,16 @@ public class NicDaoImpl extends GenericDaoBase<NicVO, Long> implements NicDao { | |||||||
|         return findOneBy(sc); |         return findOneBy(sc); | ||||||
|     } |     } | ||||||
| 
 | 
 | ||||||
|  |     @Override | ||||||
|  |     public NicVO findNonPlaceHolderByIp4AddressAndNetworkId(String ip4Address, long networkId) { | ||||||
|  |         SearchCriteria<NicVO> sc = AllFieldsSearch.create(); | ||||||
|  |         sc.setParameters("address", ip4Address); | ||||||
|  |         sc.setParameters("network", networkId); | ||||||
|  |         sc.setParameters("strategyNEQ", Nic.ReservationStrategy.PlaceHolder.toString()); | ||||||
|  |         return findOneBy(sc); | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|     @Override |     @Override | ||||||
|     public NicVO findByNetworkIdAndMacAddress(long networkId, String mac) { |     public NicVO findByNetworkIdAndMacAddress(long networkId, String mac) { | ||||||
|         SearchCriteria<NicVO> sc = AllFieldsSearch.create(); |         SearchCriteria<NicVO> sc = AllFieldsSearch.create(); | ||||||
|  | |||||||
| @ -138,6 +138,7 @@ | |||||||
|   <bean id="objectInDataStoreDaoImpl" class="org.apache.cloudstack.storage.db.ObjectInDataStoreDaoImpl" /> |   <bean id="objectInDataStoreDaoImpl" class="org.apache.cloudstack.storage.db.ObjectInDataStoreDaoImpl" /> | ||||||
|   <bean id="ovsProviderDaoImpl" class="com.cloud.network.dao.OvsProviderDaoImpl" /> |   <bean id="ovsProviderDaoImpl" class="com.cloud.network.dao.OvsProviderDaoImpl" /> | ||||||
|   <bean id="nsxControllerDaoImpl" class="com.cloud.network.dao.NsxProviderDaoImpl" /> |   <bean id="nsxControllerDaoImpl" class="com.cloud.network.dao.NsxProviderDaoImpl" /> | ||||||
|  |   <bean id="netrisProviderDaoImpl" class="com.cloud.network.dao.NetrisProviderDaoImpl" /> | ||||||
|   <bean id="tungstenControllerDaoImpl" class="com.cloud.network.dao.TungstenProviderDaoImpl"/> |   <bean id="tungstenControllerDaoImpl" class="com.cloud.network.dao.TungstenProviderDaoImpl"/> | ||||||
|   <bean id="physicalNetworkDaoImpl" class="com.cloud.network.dao.PhysicalNetworkDaoImpl" /> |   <bean id="physicalNetworkDaoImpl" class="com.cloud.network.dao.PhysicalNetworkDaoImpl" /> | ||||||
|   <bean id="physicalNetworkIsolationMethodDaoImpl" class="com.cloud.network.dao.PhysicalNetworkIsolationMethodDaoImpl" /> |   <bean id="physicalNetworkIsolationMethodDaoImpl" class="com.cloud.network.dao.PhysicalNetworkIsolationMethodDaoImpl" /> | ||||||
|  | |||||||
| @ -238,6 +238,43 @@ CREATE TABLE IF NOT EXISTS `cloud`.`gui_themes_details` ( | |||||||
|     CONSTRAINT `fk_gui_themes_details__gui_theme_id` FOREIGN KEY (`gui_theme_id`) REFERENCES `gui_themes`(`id`) |     CONSTRAINT `fk_gui_themes_details__gui_theme_id` FOREIGN KEY (`gui_theme_id`) REFERENCES `gui_themes`(`id`) | ||||||
| ); | ); | ||||||
| 
 | 
 | ||||||
|  | -- Netris Plugin | ||||||
|  | CREATE TABLE `cloud`.`netris_providers` ( | ||||||
|  |                                             `id` bigint unsigned NOT NULL auto_increment COMMENT 'id', | ||||||
|  |                                             `uuid` varchar(40), | ||||||
|  |                                             `zone_id` bigint unsigned NOT NULL COMMENT 'Zone ID', | ||||||
|  |                                             `host_id` bigint unsigned NOT NULL COMMENT 'Host ID', | ||||||
|  |                                             `name` varchar(40), | ||||||
|  |                                             `url` varchar(255) NOT NULL, | ||||||
|  |                                             `username` varchar(255) NOT NULL, | ||||||
|  |                                             `password` varchar(255) NOT NULL, | ||||||
|  |                                             `site_name` varchar(255) NOT NULL, | ||||||
|  |                                             `tenant_name` varchar(255) NOT NULL, | ||||||
|  |                                             `netris_tag` varchar(255) NOT NULL, | ||||||
|  |                                             `created` datetime NOT NULL COMMENT 'created date', | ||||||
|  |                                             `removed` datetime COMMENT 'removed date if not null', | ||||||
|  |                                             PRIMARY KEY (`id`), | ||||||
|  |                                             CONSTRAINT `fk_netris_providers__zone_id` FOREIGN KEY `fk_netris_providers__zone_id` (`zone_id`) REFERENCES `data_center`(`id`) ON DELETE CASCADE, | ||||||
|  |                                             INDEX `i_netris_providers__zone_id`(`zone_id`) | ||||||
|  | ) ENGINE=InnoDB DEFAULT CHARSET=utf8; | ||||||
|  | 
 | ||||||
|  | -- Drop the Tungsten and NSX columns from the network offerings (replaced by checking the provider on the ntwk_offering_service_map table) | ||||||
|  | ALTER TABLE `cloud`.`network_offerings` DROP COLUMN `for_tungsten`; | ||||||
|  | ALTER TABLE `cloud`.`network_offerings` DROP COLUMN `for_nsx`; | ||||||
|  | 
 | ||||||
|  | -- Drop the Tungsten and NSX columns from the VPC offerings (replaced by checking the provider on the vpc_offering_service_map table) | ||||||
|  | ALTER TABLE `cloud`.`vpc_offerings` DROP COLUMN `for_nsx`; | ||||||
|  | 
 | ||||||
|  | -- Add next_hop to the static_routes table | ||||||
|  | CALL `cloud`.`IDEMPOTENT_ADD_COLUMN`('cloud.static_routes', 'next_hop', 'varchar(50) COMMENT "next hop of the static route" AFTER `vpc_gateway_id`'); | ||||||
|  | 
 | ||||||
|  | -- Add `for_router` to `user_ip_address` table | ||||||
|  | CALL `cloud`.`IDEMPOTENT_ADD_COLUMN`('cloud.user_ip_address', 'for_router', 'tinyint(1) DEFAULT 0 COMMENT "True if the ip address is used by Domain Router to expose services"'); | ||||||
|  | 
 | ||||||
|  | -- Add Netris Autoscaling rules | ||||||
|  | INSERT IGNORE INTO `cloud`.`counter` (uuid, provider, source, name, value, created) VALUES (UUID(), 'Netris', 'cpu', 'VM CPU - average percentage', 'vm.cpu.average.percentage', NOW()); | ||||||
|  | INSERT IGNORE INTO `cloud`.`counter` (uuid, provider, source, name, value, created) VALUES (UUID(), 'Netris', 'memory', 'VM Memory - average percentage', 'vm.memory.average.percentage', NOW()); | ||||||
|  | 
 | ||||||
| -- Rename user_vm_details to vm_instance_details | -- Rename user_vm_details to vm_instance_details | ||||||
| ALTER TABLE `cloud`.`user_vm_details` RENAME TO `cloud`.`vm_instance_details`; | ALTER TABLE `cloud`.`user_vm_details` RENAME TO `cloud`.`vm_instance_details`; | ||||||
| ALTER TABLE `cloud`.`vm_instance_details` DROP FOREIGN KEY `fk_user_vm_details__vm_id`; | ALTER TABLE `cloud`.`vm_instance_details` DROP FOREIGN KEY `fk_user_vm_details__vm_id`; | ||||||
|  | |||||||
| @ -59,8 +59,6 @@ SELECT | |||||||
|     `network_offerings`.`supports_public_access` AS `supports_public_access`, |     `network_offerings`.`supports_public_access` AS `supports_public_access`, | ||||||
|     `network_offerings`.`supports_vm_autoscaling` AS `supports_vm_autoscaling`, |     `network_offerings`.`supports_vm_autoscaling` AS `supports_vm_autoscaling`, | ||||||
|     `network_offerings`.`for_vpc` AS `for_vpc`, |     `network_offerings`.`for_vpc` AS `for_vpc`, | ||||||
|     `network_offerings`.`for_tungsten` AS `for_tungsten`, |  | ||||||
|     `network_offerings`.`for_nsx` AS `for_nsx`, |  | ||||||
|     `network_offerings`.`network_mode` AS `network_mode`, |     `network_offerings`.`network_mode` AS `network_mode`, | ||||||
|     `network_offerings`.`service_package_id` AS `service_package_id`, |     `network_offerings`.`service_package_id` AS `service_package_id`, | ||||||
|     `network_offerings`.`routing_mode` AS `routing_mode`, |     `network_offerings`.`routing_mode` AS `routing_mode`, | ||||||
|  | |||||||
| @ -28,7 +28,6 @@ select | |||||||
|     `vpc_offerings`.`display_text` AS `display_text`, |     `vpc_offerings`.`display_text` AS `display_text`, | ||||||
|     `vpc_offerings`.`state` AS `state`, |     `vpc_offerings`.`state` AS `state`, | ||||||
|     `vpc_offerings`.`default` AS `default`, |     `vpc_offerings`.`default` AS `default`, | ||||||
|     `vpc_offerings`.`for_nsx` AS `for_nsx`, |  | ||||||
|     `vpc_offerings`.`network_mode` AS `network_mode`, |     `vpc_offerings`.`network_mode` AS `network_mode`, | ||||||
|     `vpc_offerings`.`created` AS `created`, |     `vpc_offerings`.`created` AS `created`, | ||||||
|     `vpc_offerings`.`removed` AS `removed`, |     `vpc_offerings`.`removed` AS `removed`, | ||||||
|  | |||||||
| @ -51,6 +51,10 @@ public class BridgeVifDriver extends VifDriverBase { | |||||||
|     private String _controlCidr = NetUtils.getLinkLocalCIDR(); |     private String _controlCidr = NetUtils.getLinkLocalCIDR(); | ||||||
|     private Long libvirtVersion; |     private Long libvirtVersion; | ||||||
| 
 | 
 | ||||||
|  |     private static boolean isVxlanOrNetris(String protocol) { | ||||||
|  |         return protocol.equals(Networks.BroadcastDomainType.Vxlan.scheme()) || protocol.equals(Networks.BroadcastDomainType.Netris.scheme()); | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|     @Override |     @Override | ||||||
|     public void configure(Map<String, Object> params) throws ConfigurationException { |     public void configure(Map<String, Object> params) throws ConfigurationException { | ||||||
| 
 | 
 | ||||||
| @ -177,7 +181,7 @@ public class BridgeVifDriver extends VifDriverBase { | |||||||
| 
 | 
 | ||||||
|     protected boolean isBroadcastTypeVlanOrVxlan(final NicTO nic) { |     protected boolean isBroadcastTypeVlanOrVxlan(final NicTO nic) { | ||||||
|         return nic != null && (nic.getBroadcastType() == Networks.BroadcastDomainType.Vlan |         return nic != null && (nic.getBroadcastType() == Networks.BroadcastDomainType.Vlan | ||||||
|                 || nic.getBroadcastType() == Networks.BroadcastDomainType.Vxlan); |                 || nic.getBroadcastType() == Networks.BroadcastDomainType.Vxlan || nic.getBroadcastType() == Networks.BroadcastDomainType.Netris); | ||||||
|     } |     } | ||||||
| 
 | 
 | ||||||
|     protected boolean isValidProtocolAndVnetId(final String vNetId, final String protocol) { |     protected boolean isValidProtocolAndVnetId(final String vNetId, final String protocol) { | ||||||
| @ -284,7 +288,7 @@ public class BridgeVifDriver extends VifDriverBase { | |||||||
| 
 | 
 | ||||||
|     private String createVnetBr(String vNetId, String pifKey, String protocol) throws InternalErrorException { |     private String createVnetBr(String vNetId, String pifKey, String protocol) throws InternalErrorException { | ||||||
|         String nic = _pifs.get(pifKey); |         String nic = _pifs.get(pifKey); | ||||||
|         if (nic == null || protocol.equals(Networks.BroadcastDomainType.Vxlan.scheme())) { |         if (nic == null || isVxlanOrNetris(protocol)) { | ||||||
|             // if not found in bridge map, maybe traffic label refers to pif already? |             // if not found in bridge map, maybe traffic label refers to pif already? | ||||||
|             File pif = new File("/sys/class/net/" + pifKey); |             File pif = new File("/sys/class/net/" + pifKey); | ||||||
|             if (pif.isDirectory()) { |             if (pif.isDirectory()) { | ||||||
| @ -292,7 +296,7 @@ public class BridgeVifDriver extends VifDriverBase { | |||||||
|             } |             } | ||||||
|         } |         } | ||||||
|         String brName = ""; |         String brName = ""; | ||||||
|         if (protocol.equals(Networks.BroadcastDomainType.Vxlan.scheme())) { |         if (isVxlanOrNetris(protocol)) { | ||||||
|             brName = generateVxnetBrName(nic, vNetId); |             brName = generateVxnetBrName(nic, vNetId); | ||||||
|         } else { |         } else { | ||||||
|             brName = generateVnetBrName(nic, vNetId); |             brName = generateVnetBrName(nic, vNetId); | ||||||
| @ -304,7 +308,7 @@ public class BridgeVifDriver extends VifDriverBase { | |||||||
|     private void createVnet(String vnetId, String pif, String brName, String protocol) throws InternalErrorException { |     private void createVnet(String vnetId, String pif, String brName, String protocol) throws InternalErrorException { | ||||||
|         synchronized (_vnetBridgeMonitor) { |         synchronized (_vnetBridgeMonitor) { | ||||||
|             String script = _modifyVlanPath; |             String script = _modifyVlanPath; | ||||||
|             if (protocol.equals(Networks.BroadcastDomainType.Vxlan.scheme())) { |             if (isVxlanOrNetris(protocol)) { | ||||||
|                 script = _modifyVxlanPath; |                 script = _modifyVxlanPath; | ||||||
|             } |             } | ||||||
|             final Script command = new Script(script, _timeout, logger); |             final Script command = new Script(script, _timeout, logger); | ||||||
|  | |||||||
| @ -24,7 +24,6 @@ import java.util.Set; | |||||||
| 
 | 
 | ||||||
| import javax.inject.Inject; | import javax.inject.Inject; | ||||||
| 
 | 
 | ||||||
| 
 |  | ||||||
| import com.cloud.api.commands.DeleteCiscoNexusVSMCmd; | import com.cloud.api.commands.DeleteCiscoNexusVSMCmd; | ||||||
| import com.cloud.api.commands.DisableCiscoNexusVSMCmd; | import com.cloud.api.commands.DisableCiscoNexusVSMCmd; | ||||||
| import com.cloud.api.commands.EnableCiscoNexusVSMCmd; | import com.cloud.api.commands.EnableCiscoNexusVSMCmd; | ||||||
|  | |||||||
| @ -2646,7 +2646,6 @@ public class KubernetesClusterManagerImpl extends ManagerBase implements Kuberne | |||||||
|                         forVpc, true, false, false); |                         forVpc, true, false, false); | ||||||
|         if (forNsx) { |         if (forNsx) { | ||||||
|             defaultKubernetesServiceNetworkOffering.setNetworkMode(NetworkOffering.NetworkMode.NATTED); |             defaultKubernetesServiceNetworkOffering.setNetworkMode(NetworkOffering.NetworkMode.NATTED); | ||||||
|             defaultKubernetesServiceNetworkOffering.setForNsx(true); |  | ||||||
|         } |         } | ||||||
|         defaultKubernetesServiceNetworkOffering.setSupportsVmAutoScaling(true); |         defaultKubernetesServiceNetworkOffering.setSupportsVmAutoScaling(true); | ||||||
|         defaultKubernetesServiceNetworkOffering.setState(NetworkOffering.State.Enabled); |         defaultKubernetesServiceNetworkOffering.setState(NetworkOffering.State.Enabled); | ||||||
|  | |||||||
| @ -701,7 +701,7 @@ public class MetricsServiceImpl extends MutualExclusiveIdsManagerBase implements | |||||||
|             metricsResponse.setCpuTotal(hostResponse.getCpuNumber(), hostResponse.getCpuSpeed()); |             metricsResponse.setCpuTotal(hostResponse.getCpuNumber(), hostResponse.getCpuSpeed()); | ||||||
|             metricsResponse.setCpuUsed(hostResponse.getCpuUsed(), hostResponse.getCpuNumber(), hostResponse.getCpuSpeed()); |             metricsResponse.setCpuUsed(hostResponse.getCpuUsed(), hostResponse.getCpuNumber(), hostResponse.getCpuSpeed()); | ||||||
|             metricsResponse.setCpuAllocated(hostResponse.getCpuAllocated(), hostResponse.getCpuNumber(), hostResponse.getCpuSpeed()); |             metricsResponse.setCpuAllocated(hostResponse.getCpuAllocated(), hostResponse.getCpuNumber(), hostResponse.getCpuSpeed()); | ||||||
|             metricsResponse.setLoadAverage(hostResponse.getAverageLoad()); |             metricsResponse.setCpuAverageLoad(hostResponse.getAverageLoad()); | ||||||
|             metricsResponse.setMemTotal(hostResponse.getMemoryTotal()); |             metricsResponse.setMemTotal(hostResponse.getMemoryTotal()); | ||||||
|             metricsResponse.setMemAllocated(hostResponse.getMemoryAllocated()); |             metricsResponse.setMemAllocated(hostResponse.getMemoryAllocated()); | ||||||
|             metricsResponse.setMemUsed(hostResponse.getMemoryUsed()); |             metricsResponse.setMemUsed(hostResponse.getMemoryUsed()); | ||||||
|  | |||||||
| @ -52,10 +52,6 @@ public class HostMetricsResponse extends HostResponse { | |||||||
|     @Param(description = "the total cpu allocated in Ghz") |     @Param(description = "the total cpu allocated in Ghz") | ||||||
|     private String cpuAllocated; |     private String cpuAllocated; | ||||||
| 
 | 
 | ||||||
|     @SerializedName("cpuloadaverage") |  | ||||||
|     @Param(description = "the average cpu load the last minute") |  | ||||||
|     private Double loadAverage; |  | ||||||
| 
 |  | ||||||
|     @SerializedName("memorytotalgb") |     @SerializedName("memorytotalgb") | ||||||
|     @Param(description = "the total memory capacity in GiB") |     @Param(description = "the total memory capacity in GiB") | ||||||
|     private String memTotal; |     private String memTotal; | ||||||
| @ -132,12 +128,6 @@ public class HostMetricsResponse extends HostResponse { | |||||||
|         } |         } | ||||||
|     } |     } | ||||||
| 
 | 
 | ||||||
|     public void setLoadAverage(final Double loadAverage) { |  | ||||||
|         if (loadAverage != null) { |  | ||||||
|             this.loadAverage = loadAverage; |  | ||||||
|         } |  | ||||||
|     } |  | ||||||
| 
 |  | ||||||
|     public void setCpuAllocated(final String cpuAllocated, final Integer cpuNumber, final Long cpuSpeed) { |     public void setCpuAllocated(final String cpuAllocated, final Integer cpuNumber, final Long cpuSpeed) { | ||||||
|         if (cpuAllocated != null && cpuNumber != null && cpuSpeed != null) { |         if (cpuAllocated != null && cpuNumber != null && cpuSpeed != null) { | ||||||
|             this.cpuAllocated = String.format("%.2f Ghz", parseCPU(cpuAllocated) * cpuNumber * cpuSpeed / (100.0 * 1000.0)); |             this.cpuAllocated = String.format("%.2f Ghz", parseCPU(cpuAllocated) * cpuNumber * cpuSpeed / (100.0 * 1000.0)); | ||||||
|  | |||||||
| @ -22,7 +22,6 @@ import org.apache.cloudstack.api.MetricConstants; | |||||||
| import org.apache.cloudstack.api.response.ManagementServerResponse; | import org.apache.cloudstack.api.response.ManagementServerResponse; | ||||||
| 
 | 
 | ||||||
| import java.util.Date; | import java.util.Date; | ||||||
| import java.util.List; |  | ||||||
| 
 | 
 | ||||||
| public class ManagementServerMetricsResponse extends ManagementServerResponse { | public class ManagementServerMetricsResponse extends ManagementServerResponse { | ||||||
| 
 | 
 | ||||||
| @ -30,14 +29,6 @@ public class ManagementServerMetricsResponse extends ManagementServerResponse { | |||||||
|     @Param(description = "the number of processors available to the JVM") |     @Param(description = "the number of processors available to the JVM") | ||||||
|     private Integer availableProcessors; |     private Integer availableProcessors; | ||||||
| 
 | 
 | ||||||
|     @SerializedName(MetricConstants.LAST_AGENTS) |  | ||||||
|     @Param(description = "the last agents this Management Server is responsible for, before shutdown or preparing for maintenance", since = "4.21.0.0") |  | ||||||
|     private List<String> lastAgents; |  | ||||||
| 
 |  | ||||||
|     @SerializedName(MetricConstants.AGENTS) |  | ||||||
|     @Param(description = "the agents this Management Server is responsible for", since = "4.21.0.0") |  | ||||||
|     private List<String> agents; |  | ||||||
| 
 |  | ||||||
|     @SerializedName(MetricConstants.AGENT_COUNT) |     @SerializedName(MetricConstants.AGENT_COUNT) | ||||||
|     @Param(description = "the number of agents this Management Server is responsible for") |     @Param(description = "the number of agents this Management Server is responsible for") | ||||||
|     private Integer agentCount; |     private Integer agentCount; | ||||||
| @ -130,14 +121,6 @@ public class ManagementServerMetricsResponse extends ManagementServerResponse { | |||||||
|         this.availableProcessors = availableProcessors; |         this.availableProcessors = availableProcessors; | ||||||
|     } |     } | ||||||
| 
 | 
 | ||||||
|     public void setLastAgents(List<String> lastAgents) { |  | ||||||
|         this.lastAgents = lastAgents; |  | ||||||
|     } |  | ||||||
| 
 |  | ||||||
|     public void setAgents(List<String> agents) { |  | ||||||
|         this.agents = agents; |  | ||||||
|     } |  | ||||||
| 
 |  | ||||||
|     public void setAgentCount(int agentCount) { |     public void setAgentCount(int agentCount) { | ||||||
|         this.agentCount = agentCount; |         this.agentCount = agentCount; | ||||||
|     } |     } | ||||||
|  | |||||||
| @ -217,7 +217,7 @@ public class ContrailManagerImpl extends ManagerBase implements ContrailManager | |||||||
|         ConfigurationManager configMgr = (ConfigurationManager) _configService; |         ConfigurationManager configMgr = (ConfigurationManager) _configService; | ||||||
|         NetworkOfferingVO voffer = configMgr.createNetworkOffering(offeringName, offeringDisplayText, |         NetworkOfferingVO voffer = configMgr.createNetworkOffering(offeringName, offeringDisplayText, | ||||||
|                 TrafficType.Public, null, true, Availability.Optional, null, serviceProviderMap, true, |                 TrafficType.Public, null, true, Availability.Optional, null, serviceProviderMap, true, | ||||||
|                 Network.GuestType.Shared, false, null, false, null, true, false, null, true, null, false, false, false, false, null, null, null, true, null, null, false); |                 Network.GuestType.Shared, false, null, false, null, true, false, null, true, null, false, false, false, false, false, null, null, null, true, null, null, false); | ||||||
|         long id = voffer.getId(); |         long id = voffer.getId(); | ||||||
|         _networkOfferingDao.update(id, voffer); |         _networkOfferingDao.update(id, voffer); | ||||||
|         return _networkOfferingDao.findById(id); |         return _networkOfferingDao.findById(id); | ||||||
| @ -252,7 +252,7 @@ public class ContrailManagerImpl extends ManagerBase implements ContrailManager | |||||||
|         ConfigurationManager configMgr = (ConfigurationManager)_configService; |         ConfigurationManager configMgr = (ConfigurationManager)_configService; | ||||||
|         NetworkOfferingVO voffer = |         NetworkOfferingVO voffer = | ||||||
|                 configMgr.createNetworkOffering(offeringName, offeringDisplayText, TrafficType.Guest, null, false, Availability.Optional, null, serviceProviderMap, true, |                 configMgr.createNetworkOffering(offeringName, offeringDisplayText, TrafficType.Guest, null, false, Availability.Optional, null, serviceProviderMap, true, | ||||||
|                         Network.GuestType.Isolated, false, null, false, null, false, true, null, true, null, false, offeringName.equals(vpcRouterOfferingName), false, false, null,  null, null, true, null, null, false); |                         Network.GuestType.Isolated, false, null, false, null, false, true, null, true, null, false, offeringName.equals(vpcRouterOfferingName), false, false, false, null,  null, null, true, null, null, false); | ||||||
|         if (offeringName.equals(vpcRouterOfferingName)) { |         if (offeringName.equals(vpcRouterOfferingName)) { | ||||||
|             voffer.setInternalLb(true); |             voffer.setInternalLb(true); | ||||||
|         } |         } | ||||||
| @ -293,7 +293,7 @@ public class ContrailManagerImpl extends ManagerBase implements ContrailManager | |||||||
|             } |             } | ||||||
|             serviceProviderMap.put(svc, providerSet); |             serviceProviderMap.put(svc, providerSet); | ||||||
|         } |         } | ||||||
|         vpcOffer = _vpcProvSvc.createVpcOffering(juniperVPCOfferingName, juniperVPCOfferingDisplayText, services, serviceProviderMap, null, null, null, false, null, null, null, VpcOffering.State.Enabled, null, false); |         vpcOffer = _vpcProvSvc.createVpcOffering(juniperVPCOfferingName, juniperVPCOfferingDisplayText, services, serviceProviderMap, null, null, null, null, null, null, null, VpcOffering.State.Enabled, null, false); | ||||||
|         long id = vpcOffer.getId(); |         long id = vpcOffer.getId(); | ||||||
|         _vpcOffDao.update(id, (VpcOfferingVO)vpcOffer); |         _vpcOffDao.update(id, (VpcOfferingVO)vpcOffer); | ||||||
|         return _vpcOffDao.findById(id); |         return _vpcOffDao.findById(id); | ||||||
|  | |||||||
							
								
								
									
										44
									
								
								plugins/network-elements/netris/pom.xml
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										44
									
								
								plugins/network-elements/netris/pom.xml
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,44 @@ | |||||||
|  | <!-- | ||||||
|  |   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. | ||||||
|  | --> | ||||||
|  | <project xmlns="http://maven.apache.org/POM/4.0.0" | ||||||
|  |          xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" | ||||||
|  |          xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> | ||||||
|  |     <modelVersion>4.0.0</modelVersion> | ||||||
|  |     <artifactId>cloud-plugin-network-netris</artifactId> | ||||||
|  |     <name>Apache CloudStack Plugin - Netris</name> | ||||||
|  | 
 | ||||||
|  |     <parent> | ||||||
|  |         <groupId>org.apache.cloudstack</groupId> | ||||||
|  |         <artifactId>cloudstack-plugins</artifactId> | ||||||
|  |         <version>4.21.0.0-SNAPSHOT</version> | ||||||
|  |         <relativePath>../../pom.xml</relativePath> | ||||||
|  |     </parent> | ||||||
|  |     <dependencies> | ||||||
|  |         <dependency> | ||||||
|  |             <groupId>io.netris</groupId> | ||||||
|  |             <artifactId>netris-java-sdk</artifactId> | ||||||
|  |             <version>1.0.0</version> | ||||||
|  |         </dependency> | ||||||
|  |         <dependency> | ||||||
|  |             <groupId>com.github.seancfoley</groupId> | ||||||
|  |             <artifactId>ipaddress</artifactId> | ||||||
|  |             <version>5.5.1</version> | ||||||
|  |         </dependency> | ||||||
|  |     </dependencies> | ||||||
|  | </project> | ||||||
| @ -0,0 +1,26 @@ | |||||||
|  | // 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 org.apache.cloudstack; | ||||||
|  | 
 | ||||||
|  | import com.cloud.agent.api.StartupCommand; | ||||||
|  | import com.cloud.host.Host; | ||||||
|  | 
 | ||||||
|  | public class StartupNetrisCommand extends StartupCommand { | ||||||
|  |     public StartupNetrisCommand() { | ||||||
|  |         super(Host.Type.L2Networking); | ||||||
|  |     } | ||||||
|  | } | ||||||
| @ -0,0 +1,48 @@ | |||||||
|  | // 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 org.apache.cloudstack.agent.api; | ||||||
|  | 
 | ||||||
|  | public class AddOrUpdateNetrisStaticRouteCommand extends NetrisCommand { | ||||||
|  |     private String prefix; | ||||||
|  |     private String nextHop; | ||||||
|  |     private Long routeId; | ||||||
|  |     private boolean updateRoute; | ||||||
|  | 
 | ||||||
|  |     public AddOrUpdateNetrisStaticRouteCommand(long zoneId, Long accountId, Long domainId, String name, Long id, boolean isVpc, String prefix, String nextHop, Long routeId, boolean updateRoute) { | ||||||
|  |         super(zoneId, accountId, domainId, name, id, isVpc); | ||||||
|  |         this.prefix = prefix; | ||||||
|  |         this.nextHop = nextHop; | ||||||
|  |         this.routeId = routeId; | ||||||
|  |         this.updateRoute = updateRoute; | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|  |     public String getPrefix() { | ||||||
|  |         return prefix; | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|  |     public String getNextHop() { | ||||||
|  |         return nextHop; | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|  |     public Long getRouteId() { | ||||||
|  |         return routeId; | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|  |     public boolean isUpdateRoute() { | ||||||
|  |         return updateRoute; | ||||||
|  |     } | ||||||
|  | } | ||||||
| @ -0,0 +1,119 @@ | |||||||
|  | // 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 org.apache.cloudstack.agent.api; | ||||||
|  | 
 | ||||||
|  | import org.apache.cloudstack.resource.NetrisPortGroup; | ||||||
|  | 
 | ||||||
|  | public class CreateNetrisACLCommand extends NetrisCommand { | ||||||
|  |     private String vpcName; | ||||||
|  |     private Long vpcId; | ||||||
|  |     private String action; | ||||||
|  |     private String destPrefix; | ||||||
|  |     private String sourcePrefix; | ||||||
|  |     private Integer destPortStart; | ||||||
|  |     private Integer destPortEnd; | ||||||
|  |     private Integer icmpType; | ||||||
|  |     private String protocol; | ||||||
|  |     private NetrisPortGroup portGroup; | ||||||
|  |     private String netrisAclName; | ||||||
|  |     private String reason; | ||||||
|  | 
 | ||||||
|  |     public CreateNetrisACLCommand(long zoneId, Long accountId, Long domainId, String name, Long id, String vpcName, Long vpcId, boolean isVpc, String action, | ||||||
|  |                                   String sourcePrefix, String destPrefix, Integer destPortStart, Integer destPortEnd, String protocol) { | ||||||
|  |         super(zoneId, accountId, domainId, name, id, isVpc); | ||||||
|  |         this.vpcName = vpcName; | ||||||
|  |         this.vpcId = vpcId; | ||||||
|  |         this.action = action; | ||||||
|  |         this.sourcePrefix = sourcePrefix; | ||||||
|  |         this.destPrefix = destPrefix; | ||||||
|  |         this.destPortStart = destPortStart; | ||||||
|  |         this.destPortEnd = destPortEnd; | ||||||
|  |         this.protocol = protocol; | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|  |     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; | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|  |     public String getAction() { | ||||||
|  |         return action; | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|  |     public String getDestPrefix() { | ||||||
|  |         return destPrefix; | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|  |     public String getSourcePrefix() { | ||||||
|  |         return sourcePrefix; | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|  |     public Integer getDestPortStart() { | ||||||
|  |         return destPortStart; | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|  |     public Integer getDestPortEnd() { | ||||||
|  |         return destPortEnd; | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|  |     public String getProtocol() { | ||||||
|  |         return protocol; | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|  |     public NetrisPortGroup getPortGroup() { | ||||||
|  |         return portGroup; | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|  |     public void setPortGroup(NetrisPortGroup portGroup) { | ||||||
|  |         this.portGroup = portGroup; | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|  |     public Integer getIcmpType() { | ||||||
|  |         return icmpType; | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|  |     public void setIcmpType(Integer icmpType) { | ||||||
|  |         this.icmpType = icmpType; | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|  |     public String getNetrisAclName() { | ||||||
|  |         return netrisAclName; | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|  |     public void setNetrisAclName(String netrisAclName) { | ||||||
|  |         this.netrisAclName = netrisAclName; | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|  |     public String getReason() { | ||||||
|  |         return reason; | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|  |     public void setReason(String reason) { | ||||||
|  |         this.reason = reason; | ||||||
|  |     } | ||||||
|  | } | ||||||
| @ -0,0 +1,84 @@ | |||||||
|  | // Licensed to the Apache Software Foundation (ASF) under one | ||||||
|  | // or more contributor license agreements.  See the NOTICE file | ||||||
|  | // distributed with this work for additional information | ||||||
|  | // regarding copyright ownership.  The ASF licenses this file | ||||||
|  | // to you under the Apache License, Version 2.0 (the | ||||||
|  | // "License"); you may not use this file except in compliance | ||||||
|  | // with the License.  You may obtain a copy of the License at | ||||||
|  | // | ||||||
|  | //   http://www.apache.org/licenses/LICENSE-2.0 | ||||||
|  | // | ||||||
|  | // Unless required by applicable law or agreed to in writing, | ||||||
|  | // software distributed under the License is distributed on an | ||||||
|  | // "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY | ||||||
|  | // KIND, either express or implied.  See the License for the | ||||||
|  | // specific language governing permissions and limitations | ||||||
|  | // under the License. | ||||||
|  | package org.apache.cloudstack.agent.api; | ||||||
|  | 
 | ||||||
|  | public class CreateNetrisVnetCommand extends NetrisCommand { | ||||||
|  |     private String vpcName; | ||||||
|  |     private Long vpcId; | ||||||
|  |     private String cidr; | ||||||
|  |     private Integer vxlanId; | ||||||
|  |     private String gateway; | ||||||
|  |     private String netrisTag; | ||||||
|  |     private String ipv6Cidr; | ||||||
|  |     private Boolean globalRouting; | ||||||
|  | 
 | ||||||
|  |     public CreateNetrisVnetCommand(Long zoneId, Long accountId, Long domainId, String vpcName, Long vpcId, String vNetName, Long networkId, String cidr, String gateway, boolean isVpc) { | ||||||
|  |         super(zoneId, accountId, domainId, vNetName, networkId, isVpc); | ||||||
|  |         this.vpcId = vpcId; | ||||||
|  |         this.vpcName = vpcName; | ||||||
|  |         this.cidr = cidr; | ||||||
|  |         this.gateway = gateway; | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|  |     public Long getVpcId() { | ||||||
|  |         return vpcId; | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|  |     public String getVpcName() { | ||||||
|  |         return vpcName; | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|  |     public String getCidr() { | ||||||
|  |         return cidr; | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|  |     public Integer getVxlanId() { | ||||||
|  |         return vxlanId; | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|  |     public void setVxlanId(Integer vxlanId) { | ||||||
|  |         this.vxlanId = vxlanId; | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|  |     public String getGateway() { | ||||||
|  |         return gateway; | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|  |     public String getNetrisTag() { | ||||||
|  |         return netrisTag; | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|  |     public void setNetrisTag(String netrisTag) { | ||||||
|  |         this.netrisTag = netrisTag; | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|  |     public String getIpv6Cidr() { | ||||||
|  |         return ipv6Cidr; | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|  |     public void setIpv6Cidr(String ipv6Cidr) { | ||||||
|  |         this.ipv6Cidr = ipv6Cidr; | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|  |     public Boolean isGlobalRouting() { | ||||||
|  |         return globalRouting; | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|  |     public void setGlobalRouting(Boolean globalRouting) { | ||||||
|  |         this.globalRouting = globalRouting; | ||||||
|  |     } | ||||||
|  | } | ||||||
| @ -0,0 +1,31 @@ | |||||||
|  | // 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 org.apache.cloudstack.agent.api; | ||||||
|  | 
 | ||||||
|  | public class CreateNetrisVpcCommand extends NetrisCommand { | ||||||
|  | 
 | ||||||
|  |     private final String cidr; | ||||||
|  | 
 | ||||||
|  |     public CreateNetrisVpcCommand(long zoneId, long accountId, long domainId, String name, String cidr, long vpcId, boolean isVpc) { | ||||||
|  |         super(zoneId, accountId, domainId, name, vpcId, isVpc); | ||||||
|  |         this.cidr = cidr; | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|  |     public String getCidr() { | ||||||
|  |         return cidr; | ||||||
|  |     } | ||||||
|  | } | ||||||
| @ -0,0 +1,119 @@ | |||||||
|  | // 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 org.apache.cloudstack.agent.api; | ||||||
|  | 
 | ||||||
|  | import org.apache.cloudstack.resource.NetrisPortGroup; | ||||||
|  | 
 | ||||||
|  | public class CreateOrUpdateNetrisACLCommand extends NetrisCommand { | ||||||
|  |     private String vpcName; | ||||||
|  |     private Long vpcId; | ||||||
|  |     private String action; | ||||||
|  |     private String destPrefix; | ||||||
|  |     private String sourcePrefix; | ||||||
|  |     private Integer destPortStart; | ||||||
|  |     private Integer destPortEnd; | ||||||
|  |     private Integer icmpType; | ||||||
|  |     private String protocol; | ||||||
|  |     private NetrisPortGroup portGroup; | ||||||
|  |     private String netrisAclName; | ||||||
|  |     private String reason; | ||||||
|  | 
 | ||||||
|  |     public CreateOrUpdateNetrisACLCommand(long zoneId, Long accountId, Long domainId, String name, Long id, String vpcName, Long vpcId, boolean isVpc, String action, | ||||||
|  |                                           String sourcePrefix, String destPrefix, Integer destPortStart, Integer destPortEnd, String protocol) { | ||||||
|  |         super(zoneId, accountId, domainId, name, id, isVpc); | ||||||
|  |         this.vpcName = vpcName; | ||||||
|  |         this.vpcId = vpcId; | ||||||
|  |         this.action = action; | ||||||
|  |         this.sourcePrefix = sourcePrefix; | ||||||
|  |         this.destPrefix = destPrefix; | ||||||
|  |         this.destPortStart = destPortStart; | ||||||
|  |         this.destPortEnd = destPortEnd; | ||||||
|  |         this.protocol = protocol; | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|  |     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; | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|  |     public String getAction() { | ||||||
|  |         return action; | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|  |     public String getDestPrefix() { | ||||||
|  |         return destPrefix; | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|  |     public String getSourcePrefix() { | ||||||
|  |         return sourcePrefix; | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|  |     public Integer getDestPortStart() { | ||||||
|  |         return destPortStart; | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|  |     public Integer getDestPortEnd() { | ||||||
|  |         return destPortEnd; | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|  |     public String getProtocol() { | ||||||
|  |         return protocol; | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|  |     public NetrisPortGroup getPortGroup() { | ||||||
|  |         return portGroup; | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|  |     public void setPortGroup(NetrisPortGroup portGroup) { | ||||||
|  |         this.portGroup = portGroup; | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|  |     public Integer getIcmpType() { | ||||||
|  |         return icmpType; | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|  |     public void setIcmpType(Integer icmpType) { | ||||||
|  |         this.icmpType = icmpType; | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|  |     public String getNetrisAclName() { | ||||||
|  |         return netrisAclName; | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|  |     public void setNetrisAclName(String netrisAclName) { | ||||||
|  |         this.netrisAclName = netrisAclName; | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|  |     public String getReason() { | ||||||
|  |         return reason; | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|  |     public void setReason(String reason) { | ||||||
|  |         this.reason = reason; | ||||||
|  |     } | ||||||
|  | } | ||||||
| @ -0,0 +1,90 @@ | |||||||
|  | // 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 org.apache.cloudstack.agent.api; | ||||||
|  | 
 | ||||||
|  | import com.cloud.network.netris.NetrisLbBackend; | ||||||
|  | 
 | ||||||
|  | import java.util.List; | ||||||
|  | 
 | ||||||
|  | public class CreateOrUpdateNetrisLoadBalancerRuleCommand extends NetrisCommand { | ||||||
|  |     private final String publicPort; | ||||||
|  |     private final String privatePort; | ||||||
|  |     private final String algorithm; | ||||||
|  |     private final String protocol; | ||||||
|  |     List<NetrisLbBackend> lbBackends; | ||||||
|  |     private String publicIp; | ||||||
|  |     private final Long lbId; | ||||||
|  |     private String cidrList; | ||||||
|  |     private String ruleName; | ||||||
|  | 
 | ||||||
|  |     public CreateOrUpdateNetrisLoadBalancerRuleCommand(long zoneId, Long accountId, Long domainId, String name, Long id, boolean isVpc, | ||||||
|  |                                                        List<NetrisLbBackend> lbBackends, long lbId, String publicIp, String publicPort, | ||||||
|  |                                                        String privatePort, String algorithm, String protocol) { | ||||||
|  |         super(zoneId, accountId, domainId, name, id, isVpc); | ||||||
|  |         this.lbId = lbId; | ||||||
|  |         this.publicIp = publicIp; | ||||||
|  |         this.publicPort = publicPort; | ||||||
|  |         this.privatePort = privatePort; | ||||||
|  |         this.algorithm = algorithm; | ||||||
|  |         this.protocol = protocol; | ||||||
|  |         this.lbBackends = lbBackends; | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|  |     public String getPublicPort() { | ||||||
|  |         return publicPort; | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|  |     public String getPrivatePort() { | ||||||
|  |         return privatePort; | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|  |     public String getAlgorithm() { | ||||||
|  |         return algorithm; | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|  |     public String getProtocol() { | ||||||
|  |         return protocol; | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|  |     public List<NetrisLbBackend> getLbBackends() { | ||||||
|  |         return lbBackends; | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|  |     public Long getLbId() { | ||||||
|  |         return lbId; | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|  |     public String getPublicIp() { | ||||||
|  |         return publicIp; | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|  |     public String getCidrList() { | ||||||
|  |         return cidrList; | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|  |     public void setCidrList(String cidrList) { | ||||||
|  |         this.cidrList = cidrList; | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|  |     public String getRuleName() { | ||||||
|  |         return ruleName; | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|  |     public void setRuleName(String ruleName) { | ||||||
|  |         this.ruleName = ruleName; | ||||||
|  |     } | ||||||
|  | } | ||||||
| @ -0,0 +1,148 @@ | |||||||
|  | // 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 org.apache.cloudstack.agent.api; | ||||||
|  | 
 | ||||||
|  | public class CreateOrUpdateNetrisNatCommand extends NetrisCommand { | ||||||
|  |     private String vpcName; | ||||||
|  |     private Long vpcId; | ||||||
|  |     private String vpcCidr; | ||||||
|  |     private String natRuleName; | ||||||
|  |     private String natIp; | ||||||
|  |     private String natRuleType; | ||||||
|  | 
 | ||||||
|  |     // Parameters for DNAT | ||||||
|  |     private String protocol; | ||||||
|  |     private String sourceAddress; | ||||||
|  |     private String sourcePort; | ||||||
|  |     private String destinationAddress; | ||||||
|  |     private String destinationPort; | ||||||
|  |     private String state; | ||||||
|  | 
 | ||||||
|  |     // Parameters for SNAT (Static NAT) | ||||||
|  |     private String vmIp; | ||||||
|  | 
 | ||||||
|  |     public CreateOrUpdateNetrisNatCommand(long zoneId, Long accountId, Long domainId, String vpcName, Long vpcId, String vNetName, Long networkId, boolean isVpc, String vpcCidr) { | ||||||
|  |         super(zoneId, accountId, domainId, vNetName, networkId, isVpc); | ||||||
|  |         this.vpcName = vpcName; | ||||||
|  |         this.vpcId = vpcId; | ||||||
|  |         this.vpcCidr = vpcCidr; | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|  |     public String getVpcName() { | ||||||
|  |         return vpcName; | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|  |     public Long getVpcId() { | ||||||
|  |         return vpcId; | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|  |     public String getNatIp() { | ||||||
|  |         return natIp; | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|  |     public void setNatRuleName(String natRuleName) { | ||||||
|  |         this.natRuleName = natRuleName; | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|  |     public String getNatRuleName() { | ||||||
|  |         return natRuleName; | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|  |     public String getVpcCidr() { | ||||||
|  |         return vpcCidr; | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|  |     public void setNatIp(String natIp) { | ||||||
|  |         this.natIp = natIp; | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|  |     public String getVmIp() { | ||||||
|  |         return vmIp; | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|  |     public void setVmIp(String vmIp) { | ||||||
|  |         this.vmIp = vmIp; | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|  |     public String getNatRuleType() { | ||||||
|  |         return natRuleType; | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|  |     public void setNatRuleType(String natRuleType) { | ||||||
|  |         this.natRuleType = natRuleType; | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|  |     public void setVpcName(String vpcName) { | ||||||
|  |         this.vpcName = vpcName; | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|  |     public void setVpcId(Long vpcId) { | ||||||
|  |         this.vpcId = vpcId; | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|  |     public void setVpcCidr(String vpcCidr) { | ||||||
|  |         this.vpcCidr = vpcCidr; | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|  |     public String getProtocol() { | ||||||
|  |         return protocol; | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|  |     public void setProtocol(String protocol) { | ||||||
|  |         this.protocol = protocol; | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|  |     public String getSourceAddress() { | ||||||
|  |         return sourceAddress; | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|  |     public void setSourceAddress(String sourceAddress) { | ||||||
|  |         this.sourceAddress = sourceAddress; | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|  |     public String getSourcePort() { | ||||||
|  |         return sourcePort; | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|  |     public void setSourcePort(String sourcePort) { | ||||||
|  |         this.sourcePort = sourcePort; | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|  |     public String getDestinationAddress() { | ||||||
|  |         return destinationAddress; | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|  |     public void setDestinationAddress(String destinationAddress) { | ||||||
|  |         this.destinationAddress = destinationAddress; | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|  |     public String getDestinationPort() { | ||||||
|  |         return destinationPort; | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|  |     public void setDestinationPort(String destinationPort) { | ||||||
|  |         this.destinationPort = destinationPort; | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|  |     public String getState() { | ||||||
|  |         return state; | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|  |     public void setState(String state) { | ||||||
|  |         this.state = state; | ||||||
|  |     } | ||||||
|  | } | ||||||
| @ -0,0 +1,46 @@ | |||||||
|  | // 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 org.apache.cloudstack.agent.api; | ||||||
|  | 
 | ||||||
|  | import java.util.List; | ||||||
|  | 
 | ||||||
|  | public class DeleteNetrisACLCommand extends NetrisCommand { | ||||||
|  |     Long vpcId; | ||||||
|  |     String vpcName; | ||||||
|  |     List<String> aclRuleNames; | ||||||
|  |     public DeleteNetrisACLCommand(long zoneId, Long accountId, Long domainId, String name, Long id, boolean isVpc, Long vpcId, String vpcName) { | ||||||
|  |         super(zoneId, accountId, domainId, name, id, isVpc); | ||||||
|  |         this.vpcId = vpcId; | ||||||
|  |         this.vpcName = vpcName; | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|  |     public Long getVpcId() { | ||||||
|  |         return vpcId; | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|  |     public String getVpcName() { | ||||||
|  |         return vpcName; | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|  |     public List<String> getAclRuleNames() { | ||||||
|  |         return aclRuleNames; | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|  |     public void setAclRuleNames(List<String> aclRuleNames) { | ||||||
|  |         this.aclRuleNames = aclRuleNames; | ||||||
|  |     } | ||||||
|  | } | ||||||
| @ -0,0 +1,52 @@ | |||||||
|  | // 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 org.apache.cloudstack.agent.api; | ||||||
|  | 
 | ||||||
|  | public class DeleteNetrisLoadBalancerRuleCommand extends NetrisCommand { | ||||||
|  |     private Long lbId; | ||||||
|  |     private String ruleName; | ||||||
|  |     private String cidrList; | ||||||
|  | 
 | ||||||
|  |     public DeleteNetrisLoadBalancerRuleCommand(long zoneId, Long accountId, Long domainId, String name, Long id, boolean isVpc, Long lbId) { | ||||||
|  |         super(zoneId, accountId, domainId, name, id, isVpc); | ||||||
|  |         this.lbId = lbId; | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|  |     public Long getLbId() { | ||||||
|  |         return lbId; | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|  |     public void setLbId(Long lbId) { | ||||||
|  |         this.lbId = lbId; | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|  |     public String getRuleName() { | ||||||
|  |         return ruleName; | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|  |     public void setRuleName(String ruleName) { | ||||||
|  |         this.ruleName = ruleName; | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|  |     public String getCidrList() { | ||||||
|  |         return cidrList; | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|  |     public void setCidrList(String cidrList) { | ||||||
|  |         this.cidrList = cidrList; | ||||||
|  |     } | ||||||
|  | } | ||||||
| @ -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 org.apache.cloudstack.agent.api; | ||||||
|  | 
 | ||||||
|  | public class DeleteNetrisNatRuleCommand extends NetrisCommand { | ||||||
|  | 
 | ||||||
|  |     private String vpcName; | ||||||
|  |     private Long vpcId; | ||||||
|  |     private String natRuleType; | ||||||
|  |     private String natRuleName; | ||||||
|  |     private String natIp; | ||||||
|  | 
 | ||||||
|  |     public DeleteNetrisNatRuleCommand(long zoneId, Long accountId, Long domainId, String vpcName, Long vpcId, String vNetName, Long networkId, boolean isVpc) { | ||||||
|  |         super(zoneId, accountId, domainId, vNetName, networkId, isVpc); | ||||||
|  |         this.vpcName = vpcName; | ||||||
|  |         this.vpcId = vpcId; | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|  |     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; | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|  |     public String getNatRuleType() { | ||||||
|  |         return natRuleType; | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|  |     public void setNatRuleType(String natRuleType) { | ||||||
|  |         this.natRuleType = natRuleType; | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|  |     public String getNatRuleName() { | ||||||
|  |         return natRuleName; | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|  |     public void setNatRuleName(String natRuleName) { | ||||||
|  |         this.natRuleName = natRuleName; | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|  |     public String getNatIp() { | ||||||
|  |         return natIp; | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|  |     public void setNatIp(String natIp) { | ||||||
|  |         this.natIp = natIp; | ||||||
|  |     } | ||||||
|  | } | ||||||
| @ -0,0 +1,23 @@ | |||||||
|  | // 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 org.apache.cloudstack.agent.api; | ||||||
|  | 
 | ||||||
|  | public class DeleteNetrisStaticRouteCommand extends AddOrUpdateNetrisStaticRouteCommand { | ||||||
|  |     public DeleteNetrisStaticRouteCommand(long zoneId, Long accountId, Long domainId, String name, Long id, boolean isVpc, String prefix, String nextHop, Long routeId) { | ||||||
|  |         super(zoneId, accountId, domainId, name, id, isVpc, prefix, nextHop, routeId, false); | ||||||
|  |     } | ||||||
|  | } | ||||||
| @ -0,0 +1,51 @@ | |||||||
|  | // 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 org.apache.cloudstack.agent.api; | ||||||
|  | 
 | ||||||
|  | public class DeleteNetrisVnetCommand extends NetrisCommand { | ||||||
|  |     private String vpcName; | ||||||
|  |     private Long vpcId; | ||||||
|  |     private final String vNetCidr; | ||||||
|  |     private String vNetV6Cidr; | ||||||
|  | 
 | ||||||
|  |     public DeleteNetrisVnetCommand(long zoneId, long accountId, long domainId, String name, long id, String vpcName, Long vpcId, String vNetCidr, boolean isVpc) { | ||||||
|  |         super(zoneId, accountId, domainId, name, id, isVpc); | ||||||
|  |         this.vpcName = vpcName; | ||||||
|  |         this.vpcId = vpcId; | ||||||
|  |         this.vNetCidr = vNetCidr; | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|  |     public String getVpcName() { | ||||||
|  |         return vpcName; | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|  |     public Long getVpcId() { | ||||||
|  |         return vpcId; | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|  |     public String getVNetCidr() { | ||||||
|  |         return vNetCidr; | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|  |     public String getvNetV6Cidr() { | ||||||
|  |         return vNetV6Cidr; | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|  |     public void setvNetV6Cidr(String vNetV6Cidr) { | ||||||
|  |         this.vNetV6Cidr = vNetV6Cidr; | ||||||
|  |     } | ||||||
|  | } | ||||||
| @ -0,0 +1,30 @@ | |||||||
|  | // 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 org.apache.cloudstack.agent.api; | ||||||
|  | 
 | ||||||
|  | public class DeleteNetrisVpcCommand extends NetrisCommand { | ||||||
|  |     private final String cidr; | ||||||
|  | 
 | ||||||
|  |     public DeleteNetrisVpcCommand(long zoneId, long accountId, long domainId, String name, String cidr, long vpcId, boolean isVpc) { | ||||||
|  |         super(zoneId, accountId, domainId, name, vpcId, isVpc); | ||||||
|  |         this.cidr = cidr; | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|  |     public String getCidr() { | ||||||
|  |         return cidr; | ||||||
|  |     } | ||||||
|  | } | ||||||
| @ -0,0 +1,36 @@ | |||||||
|  | // Licensed to the Apache Software Foundation (ASF) under one | ||||||
|  | // or more contributor license agreements.  See the NOTICE file | ||||||
|  | // distributed with this work for additional information | ||||||
|  | // regarding copyright ownership.  The ASF licenses this file | ||||||
|  | // to you under the Apache License, Version 2.0 (the | ||||||
|  | // "License"); you may not use this file except in compliance | ||||||
|  | // with the License.  You may obtain a copy of the License at | ||||||
|  | // | ||||||
|  | //   http://www.apache.org/licenses/LICENSE-2.0 | ||||||
|  | // | ||||||
|  | // Unless required by applicable law or agreed to in writing, | ||||||
|  | // software distributed under the License is distributed on an | ||||||
|  | // "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY | ||||||
|  | // KIND, either express or implied.  See the License for the | ||||||
|  | // specific language governing permissions and limitations | ||||||
|  | // under the License. | ||||||
|  | package org.apache.cloudstack.agent.api; | ||||||
|  | 
 | ||||||
|  | import com.cloud.agent.api.Command; | ||||||
|  | import com.cloud.network.vpc.StaticRoute; | ||||||
|  | 
 | ||||||
|  | import java.util.List; | ||||||
|  | 
 | ||||||
|  | public class ListNetrisStaticRoutesAnswer extends NetrisAnswer { | ||||||
|  | 
 | ||||||
|  |     List<StaticRoute> staticRoutes; | ||||||
|  | 
 | ||||||
|  |     public ListNetrisStaticRoutesAnswer(final Command command, final List<StaticRoute> staticRoutes) { | ||||||
|  |         super(command, true, "OK"); | ||||||
|  |         this.staticRoutes = staticRoutes; | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|  |     public List<StaticRoute> getStaticRoutes() { | ||||||
|  |         return staticRoutes; | ||||||
|  |     } | ||||||
|  | } | ||||||
| @ -0,0 +1,23 @@ | |||||||
|  | // 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 org.apache.cloudstack.agent.api; | ||||||
|  | 
 | ||||||
|  | public class ListNetrisStaticRoutesCommand extends AddOrUpdateNetrisStaticRouteCommand { | ||||||
|  |     public ListNetrisStaticRoutesCommand(long zoneId, Long accountId, Long domainId, String name, Long id, boolean isVpc, String prefix, String nextHop, Long routeId) { | ||||||
|  |         super(zoneId, accountId, domainId, name, id, isVpc, prefix, nextHop, routeId, false); | ||||||
|  |     } | ||||||
|  | } | ||||||
Some files were not shown because too many files have changed in this diff Show More
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user