You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@jclouds.apache.org by an...@apache.org on 2016/07/15 08:59:23 UTC
jclouds-labs git commit: [azure-arm] add supports to port ranges to
addNetworkSecurityGroup
Repository: jclouds-labs
Updated Branches:
refs/heads/master 6a51667e6 -> b975be5e8
[azure-arm] add supports to port ranges to addNetworkSecurityGroup
- add unit tests
Project: http://git-wip-us.apache.org/repos/asf/jclouds-labs/repo
Commit: http://git-wip-us.apache.org/repos/asf/jclouds-labs/commit/b975be5e
Tree: http://git-wip-us.apache.org/repos/asf/jclouds-labs/tree/b975be5e
Diff: http://git-wip-us.apache.org/repos/asf/jclouds-labs/diff/b975be5e
Branch: refs/heads/master
Commit: b975be5e826a68a541a64416c1e7d0fedb7ae220
Parents: 6a51667
Author: Andrea Turli <an...@gmail.com>
Authored: Wed Jul 13 10:47:52 2016 +0200
Committer: Andrea Turli <an...@gmail.com>
Committed: Fri Jul 15 10:58:13 2016 +0200
----------------------------------------------------------------------
.../arm/util/DeploymentTemplateBuilder.java | 91 ++++++++++++++------
.../features/DeploymentTemplateBuilderTest.java | 32 +++++--
2 files changed, 93 insertions(+), 30 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/jclouds-labs/blob/b975be5e/azurecompute-arm/src/main/java/org/jclouds/azurecompute/arm/util/DeploymentTemplateBuilder.java
----------------------------------------------------------------------
diff --git a/azurecompute-arm/src/main/java/org/jclouds/azurecompute/arm/util/DeploymentTemplateBuilder.java b/azurecompute-arm/src/main/java/org/jclouds/azurecompute/arm/util/DeploymentTemplateBuilder.java
index f7850d4..89de398 100644
--- a/azurecompute-arm/src/main/java/org/jclouds/azurecompute/arm/util/DeploymentTemplateBuilder.java
+++ b/azurecompute-arm/src/main/java/org/jclouds/azurecompute/arm/util/DeploymentTemplateBuilder.java
@@ -16,11 +16,11 @@
*/
package org.jclouds.azurecompute.arm.util;
-import com.google.common.base.Strings;
-import com.google.common.collect.Lists;
-import com.google.inject.assistedinject.Assisted;
-import com.google.common.base.Joiner;
-import com.google.common.base.Preconditions;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
import org.jclouds.azurecompute.arm.compute.config.AzureComputeServiceContextModule;
import org.jclouds.azurecompute.arm.compute.extensions.AzureComputeImageExtension;
@@ -32,38 +32,37 @@ import org.jclouds.azurecompute.arm.domain.DeploymentTemplate;
import org.jclouds.azurecompute.arm.domain.DiagnosticsProfile;
import org.jclouds.azurecompute.arm.domain.DnsSettings;
import org.jclouds.azurecompute.arm.domain.HardwareProfile;
+import org.jclouds.azurecompute.arm.domain.IdReference;
import org.jclouds.azurecompute.arm.domain.ImageReference;
import org.jclouds.azurecompute.arm.domain.IpConfiguration;
import org.jclouds.azurecompute.arm.domain.IpConfigurationProperties;
import org.jclouds.azurecompute.arm.domain.KeyVaultReference;
import org.jclouds.azurecompute.arm.domain.NetworkInterfaceCardProperties;
import org.jclouds.azurecompute.arm.domain.NetworkProfile;
+import org.jclouds.azurecompute.arm.domain.NetworkSecurityGroupProperties;
+import org.jclouds.azurecompute.arm.domain.NetworkSecurityRule;
+import org.jclouds.azurecompute.arm.domain.NetworkSecurityRuleProperties;
import org.jclouds.azurecompute.arm.domain.OSDisk;
import org.jclouds.azurecompute.arm.domain.OSProfile;
import org.jclouds.azurecompute.arm.domain.PublicIPAddressProperties;
+import org.jclouds.azurecompute.arm.domain.ResourceDefinition;
import org.jclouds.azurecompute.arm.domain.StorageProfile;
import org.jclouds.azurecompute.arm.domain.StorageService;
+import org.jclouds.azurecompute.arm.domain.StorageService.StorageServiceProperties;
import org.jclouds.azurecompute.arm.domain.TemplateParameterType;
import org.jclouds.azurecompute.arm.domain.VHD;
import org.jclouds.azurecompute.arm.domain.VirtualMachineProperties;
-import org.jclouds.azurecompute.arm.domain.StorageService.StorageServiceProperties;
-import org.jclouds.azurecompute.arm.domain.IdReference;
-import org.jclouds.azurecompute.arm.domain.ResourceDefinition;
-import org.jclouds.azurecompute.arm.domain.NetworkSecurityGroupProperties;
-import org.jclouds.azurecompute.arm.domain.NetworkSecurityRule;
-import org.jclouds.azurecompute.arm.domain.NetworkSecurityRuleProperties;
import org.jclouds.compute.domain.Template;
import org.jclouds.json.Json;
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
-
-import static com.google.common.io.BaseEncoding.base64;
+import com.google.common.base.Joiner;
+import com.google.common.base.Preconditions;
+import com.google.common.base.Strings;
+import com.google.common.collect.Lists;
import com.google.inject.Inject;
+import com.google.inject.assistedinject.Assisted;
+import static com.google.common.io.BaseEncoding.base64;
import static org.jclouds.azurecompute.arm.compute.extensions.AzureComputeImageExtension.CUSTOM_IMAGE_PREFIX;
import static org.jclouds.azurecompute.arm.config.AzureComputeProperties.STORAGE_API_VERSION;
@@ -280,32 +279,36 @@ public class DeploymentTemplateBuilder {
}
private void addNetworkSecurityGroup() {
- int ports[] = options.getInboundPorts();
- if ((ports != null) && (ports.length > 0)) {
+ int inboundPorts[] = options.getInboundPorts();
+ if ((inboundPorts != null) && (inboundPorts.length > 0)) {
variables.put("networkSecurityGroupName", name + "nsg");
variables.put("networkSecurityGroupNameReference", "[resourceId('Microsoft.Network/networkSecurityGroups',variables('networkSecurityGroupName'))]");
+ List<String> portRanges = simplifyPorts(inboundPorts);
+
List<NetworkSecurityRule> rules = new ArrayList<NetworkSecurityRule>();
- for (int i = 0; i < ports.length; i++) {
+ int priority = 1234;
+ for (String portRange : portRanges) {
NetworkSecurityRuleProperties ruleProperties = NetworkSecurityRuleProperties.builder()
- .description("default-allow-port-" + ports[i])
+ .description("default-allow-port-" + portRange)
.protocol(NetworkSecurityRuleProperties.Protocol.All)
.access(NetworkSecurityRuleProperties.Access.Allow)
.sourcePortRange("*")
- .destinationPortRange(Integer.toString(ports[i]))
+ .destinationPortRange(portRange)
.sourceAddressPrefix("*")
.destinationAddressPrefix("*")
- .priority(1234 + i)
+ .priority(priority)
.direction(NetworkSecurityRuleProperties.Direction.Inbound)
.build();
NetworkSecurityRule networkSecurityRule = NetworkSecurityRule.create(
- "default-allow-port-" + ports[i],
+ "default-allow-port-" + portRange,
null,
null,
ruleProperties);
rules.add(networkSecurityRule);
+ priority++;
}
NetworkSecurityGroupProperties networkSecurityGroupProperties = NetworkSecurityGroupProperties.builder()
@@ -323,6 +326,44 @@ public class DeploymentTemplateBuilder {
}
+ /**
+ * Helper function for simplifying an array of ports to a list of ranges as list of strings
+ * @param ports array of int
+ * @return list of strings representing ranges
+ */
+ public static List<String> simplifyPorts(int[] ports) {
+ Preconditions.checkArgument(ports != null && ports.length != 0);
+ ArrayList<String> output = new ArrayList<String>();
+ Arrays.sort(ports);
+
+ int range_start = ports[0];
+ int range_end = ports[0];
+ for (int i = 1; i < ports.length; i++) {
+ if ((ports[i - 1] == ports[i] - 1) || (ports[i - 1] == ports[i])){
+ // Range continues.
+ range_end = ports[i];
+ }
+ else {
+ // Range ends.
+ output.add(formatRange(range_start, range_end));
+ range_start = ports[i];
+ range_end = ports[i];
+ }
+ }
+ // Make sure we get the last range.
+ output.add(formatRange(range_start, range_end));
+ return output;
+ }
+
+ private static String formatRange(int start, int finish) {
+ if (start == finish){
+ return Integer.toString(start);
+ }
+ else {
+ return String.format("%s-%s", Integer.toString(start), Integer.toString(finish));
+ }
+ }
+
private void addVirtualMachine() {
//Build OS Profile
final String computerName = name + "pc";
http://git-wip-us.apache.org/repos/asf/jclouds-labs/blob/b975be5e/azurecompute-arm/src/test/java/org/jclouds/azurecompute/arm/features/DeploymentTemplateBuilderTest.java
----------------------------------------------------------------------
diff --git a/azurecompute-arm/src/test/java/org/jclouds/azurecompute/arm/features/DeploymentTemplateBuilderTest.java b/azurecompute-arm/src/test/java/org/jclouds/azurecompute/arm/features/DeploymentTemplateBuilderTest.java
index ad5b1f3..07ab6ef 100644
--- a/azurecompute-arm/src/test/java/org/jclouds/azurecompute/arm/features/DeploymentTemplateBuilderTest.java
+++ b/azurecompute-arm/src/test/java/org/jclouds/azurecompute/arm/features/DeploymentTemplateBuilderTest.java
@@ -16,8 +16,9 @@
*/
package org.jclouds.azurecompute.arm.features;
-import org.jclouds.azurecompute.arm.internal.BaseAzureComputeApiMockTest;
-import org.jclouds.compute.options.TemplateOptions;
+import java.util.List;
+import java.util.Map;
+
import org.jclouds.azurecompute.arm.compute.options.AzureTemplateOptions;
import org.jclouds.azurecompute.arm.domain.DeploymentBody;
import org.jclouds.azurecompute.arm.domain.ImageReference;
@@ -29,6 +30,7 @@ import org.jclouds.azurecompute.arm.domain.ResourceDefinition;
import org.jclouds.azurecompute.arm.domain.StorageService;
import org.jclouds.azurecompute.arm.domain.StorageService.StorageServiceProperties;
import org.jclouds.azurecompute.arm.domain.VirtualMachineProperties;
+import org.jclouds.azurecompute.arm.internal.BaseAzureComputeApiMockTest;
import org.jclouds.azurecompute.arm.util.DeploymentTemplateBuilder;
import org.jclouds.compute.domain.Hardware;
import org.jclouds.compute.domain.HardwareBuilder;
@@ -37,14 +39,12 @@ import org.jclouds.compute.domain.ImageBuilder;
import org.jclouds.compute.domain.OperatingSystem;
import org.jclouds.compute.domain.Template;
import org.jclouds.compute.domain.internal.TemplateImpl;
+import org.jclouds.compute.options.TemplateOptions;
import org.jclouds.domain.Location;
import org.jclouds.domain.LocationBuilder;
import org.jclouds.domain.LocationScope;
import org.testng.annotations.Test;
-import java.util.Map;
-import java.util.List;
-
import static org.testng.Assert.assertEquals;
import static org.testng.Assert.assertNotNull;
import static org.testng.Assert.assertTrue;
@@ -171,6 +171,28 @@ public class DeploymentTemplateBuilderTest extends BaseAzureComputeApiMockTest {
assertNotNull(virtualMachineProperties.osProfile().linuxConfiguration().ssh().publicKeys());
}
+ @Test(expectedExceptions = IllegalArgumentException.class)
+ void testSimplifyPortsWithPortsNull() {
+ int[] ports = null;
+ DeploymentTemplateBuilder.simplifyPorts(ports);
+ }
+
+ @Test(expectedExceptions = IllegalArgumentException.class)
+ void testSimplifyPortsWithPortsEmpty() {
+ int[] ports = new int[0];
+ DeploymentTemplateBuilder.simplifyPorts(ports);
+ }
+
+ @Test
+ void testSimplifyPorts() {
+ int[] ports = {8084, 22, 8081, 8080, 8082};
+ List<String> ranges = DeploymentTemplateBuilder.simplifyPorts(ports);
+ assertEquals(ranges.size(), 3);
+ assertEquals(ranges.get(0), "22");
+ assertEquals(ranges.get(1), "8080-8082");
+ assertEquals(ranges.get(2), "8084");
+ }
+
private Template getMockTemplate(TemplateOptions options) {
((AzureTemplateOptions)options).virtualNetworkName(vnetName);
((AzureTemplateOptions)options).subnetId(subnetId);