Switch Nova to use standard IpProtocol, add converter from Nova SecurityGroupRule to standard IpPermission
Project: http://git-wip-us.apache.org/repos/asf/incubator-jclouds/repo Commit: http://git-wip-us.apache.org/repos/asf/incubator-jclouds/commit/a4128723 Tree: http://git-wip-us.apache.org/repos/asf/incubator-jclouds/tree/a4128723 Diff: http://git-wip-us.apache.org/repos/asf/incubator-jclouds/diff/a4128723 Branch: refs/heads/jclouds-101 Commit: a412872332418d5410458f2fd0306202ec416fc0 Parents: 77417cb Author: Andrew Bayer <[email protected]> Authored: Thu Jun 13 10:19:48 2013 -0700 Committer: Andrew Bayer <[email protected]> Committed: Thu Jun 13 10:19:48 2013 -0700 ---------------------------------------------------------------------- .../functions/CreateSecurityGroupIfNeeded.java | 2 +- .../SecurityGroupRuleToIpPermission.java | 57 +++++++++++++ .../openstack/nova/v2_0/domain/Ingress.java | 1 + .../openstack/nova/v2_0/domain/IpProtocol.java | 39 --------- .../nova/v2_0/domain/SecurityGroupRule.java | 1 + .../SecurityGroupRuleToIpPermissionTest.java | 87 ++++++++++++++++++++ .../extensions/SecurityGroupApiExpectTest.java | 2 +- .../extensions/SecurityGroupApiLiveTest.java | 2 +- ...eComputeServiceTypicalSecurityGroupTest.java | 2 +- .../v2_0/parse/ParseSecurityGroupListTest.java | 2 +- .../nova/v2_0/parse/ParseSecurityGroupTest.java | 2 +- 11 files changed, 152 insertions(+), 45 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/incubator-jclouds/blob/a4128723/apis/openstack-nova/src/main/java/org/jclouds/openstack/nova/v2_0/compute/functions/CreateSecurityGroupIfNeeded.java ---------------------------------------------------------------------- diff --git a/apis/openstack-nova/src/main/java/org/jclouds/openstack/nova/v2_0/compute/functions/CreateSecurityGroupIfNeeded.java b/apis/openstack-nova/src/main/java/org/jclouds/openstack/nova/v2_0/compute/functions/CreateSecurityGroupIfNeeded.java index 04f992e..6b5d519 100644 --- a/apis/openstack-nova/src/main/java/org/jclouds/openstack/nova/v2_0/compute/functions/CreateSecurityGroupIfNeeded.java +++ b/apis/openstack-nova/src/main/java/org/jclouds/openstack/nova/v2_0/compute/functions/CreateSecurityGroupIfNeeded.java @@ -28,9 +28,9 @@ import javax.inject.Singleton; import org.jclouds.compute.reference.ComputeServiceConstants; import org.jclouds.logging.Logger; +import org.jclouds.net.domain.IpProtocol; import org.jclouds.openstack.nova.v2_0.NovaApi; import org.jclouds.openstack.nova.v2_0.domain.Ingress; -import org.jclouds.openstack.nova.v2_0.domain.IpProtocol; import org.jclouds.openstack.nova.v2_0.domain.SecurityGroup; import org.jclouds.openstack.nova.v2_0.domain.zonescoped.SecurityGroupInZone; import org.jclouds.openstack.nova.v2_0.domain.zonescoped.ZoneSecurityGroupNameAndPorts; http://git-wip-us.apache.org/repos/asf/incubator-jclouds/blob/a4128723/apis/openstack-nova/src/main/java/org/jclouds/openstack/nova/v2_0/compute/functions/SecurityGroupRuleToIpPermission.java ---------------------------------------------------------------------- diff --git a/apis/openstack-nova/src/main/java/org/jclouds/openstack/nova/v2_0/compute/functions/SecurityGroupRuleToIpPermission.java b/apis/openstack-nova/src/main/java/org/jclouds/openstack/nova/v2_0/compute/functions/SecurityGroupRuleToIpPermission.java new file mode 100644 index 0000000..c2e5e64 --- /dev/null +++ b/apis/openstack-nova/src/main/java/org/jclouds/openstack/nova/v2_0/compute/functions/SecurityGroupRuleToIpPermission.java @@ -0,0 +1,57 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.jclouds.openstack.nova.v2_0.compute.functions; + +import javax.annotation.Resource; +import javax.inject.Named; + +import org.jclouds.compute.reference.ComputeServiceConstants; +import org.jclouds.logging.Logger; +import org.jclouds.net.domain.IpPermission; +import org.jclouds.openstack.nova.v2_0.domain.SecurityGroupRule; + +import com.google.common.base.Function; + + +/** + * A function for transforming a nova-specific SecurityGroupRule into a generic + * IpPermission object. + * + * @author Andrew Bayer + */ +public class SecurityGroupRuleToIpPermission implements Function<SecurityGroupRule, IpPermission> { + @Resource + @Named(ComputeServiceConstants.COMPUTE_LOGGER) + protected Logger logger = Logger.NULL; + + public SecurityGroupRuleToIpPermission() { + } + + @Override + public IpPermission apply(SecurityGroupRule rule) { + IpPermission.Builder builder = IpPermission.builder(); + builder.ipProtocol(rule.getIpProtocol()); + builder.fromPort(rule.getFromPort()); + builder.toPort(rule.getToPort()); + if (rule.getGroup() != null) + builder.tenantIdGroupNamePair(rule.getGroup().getTenantId(), rule.getGroup().getName()); + if (rule.getIpRange() != null) + builder.cidrBlock(rule.getIpRange()); + + return builder.build(); + } +} \ No newline at end of file http://git-wip-us.apache.org/repos/asf/incubator-jclouds/blob/a4128723/apis/openstack-nova/src/main/java/org/jclouds/openstack/nova/v2_0/domain/Ingress.java ---------------------------------------------------------------------- diff --git a/apis/openstack-nova/src/main/java/org/jclouds/openstack/nova/v2_0/domain/Ingress.java b/apis/openstack-nova/src/main/java/org/jclouds/openstack/nova/v2_0/domain/Ingress.java index d687e83..3a9322d 100644 --- a/apis/openstack-nova/src/main/java/org/jclouds/openstack/nova/v2_0/domain/Ingress.java +++ b/apis/openstack-nova/src/main/java/org/jclouds/openstack/nova/v2_0/domain/Ingress.java @@ -21,6 +21,7 @@ import java.beans.ConstructorProperties; import javax.inject.Named; import org.jclouds.javax.annotation.Nullable; +import org.jclouds.net.domain.IpProtocol; import com.google.common.annotations.Beta; import com.google.common.base.Objects; http://git-wip-us.apache.org/repos/asf/incubator-jclouds/blob/a4128723/apis/openstack-nova/src/main/java/org/jclouds/openstack/nova/v2_0/domain/IpProtocol.java ---------------------------------------------------------------------- diff --git a/apis/openstack-nova/src/main/java/org/jclouds/openstack/nova/v2_0/domain/IpProtocol.java b/apis/openstack-nova/src/main/java/org/jclouds/openstack/nova/v2_0/domain/IpProtocol.java deleted file mode 100644 index ac13977..0000000 --- a/apis/openstack-nova/src/main/java/org/jclouds/openstack/nova/v2_0/domain/IpProtocol.java +++ /dev/null @@ -1,39 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed with - * this work for additional information regarding copyright ownership. - * The ASF licenses this file to You under the Apache License, Version 2.0 - * (the "License"); you may not use this file except in compliance with - * the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -package org.jclouds.openstack.nova.v2_0.domain; - -import static com.google.common.base.Preconditions.checkNotNull; - -public enum IpProtocol { - TCP, UDP, ICMP, UNRECOGNIZED; - public String value() { - return name().toLowerCase(); - } - - @Override - public String toString() { - return value(); - } - - public static IpProtocol fromValue(String protocol) { - try { - return valueOf(checkNotNull(protocol, "protocol").toUpperCase()); - } catch (IllegalArgumentException e) { - return UNRECOGNIZED; - } - } -} http://git-wip-us.apache.org/repos/asf/incubator-jclouds/blob/a4128723/apis/openstack-nova/src/main/java/org/jclouds/openstack/nova/v2_0/domain/SecurityGroupRule.java ---------------------------------------------------------------------- diff --git a/apis/openstack-nova/src/main/java/org/jclouds/openstack/nova/v2_0/domain/SecurityGroupRule.java b/apis/openstack-nova/src/main/java/org/jclouds/openstack/nova/v2_0/domain/SecurityGroupRule.java index 3da080d..92d58f7 100644 --- a/apis/openstack-nova/src/main/java/org/jclouds/openstack/nova/v2_0/domain/SecurityGroupRule.java +++ b/apis/openstack-nova/src/main/java/org/jclouds/openstack/nova/v2_0/domain/SecurityGroupRule.java @@ -23,6 +23,7 @@ import java.beans.ConstructorProperties; import javax.inject.Named; import org.jclouds.javax.annotation.Nullable; +import org.jclouds.net.domain.IpProtocol; import com.google.common.base.Objects; import com.google.common.base.Objects.ToStringHelper; http://git-wip-us.apache.org/repos/asf/incubator-jclouds/blob/a4128723/apis/openstack-nova/src/test/java/org/jclouds/openstack/nova/v2_0/compute/functions/SecurityGroupRuleToIpPermissionTest.java ---------------------------------------------------------------------- diff --git a/apis/openstack-nova/src/test/java/org/jclouds/openstack/nova/v2_0/compute/functions/SecurityGroupRuleToIpPermissionTest.java b/apis/openstack-nova/src/test/java/org/jclouds/openstack/nova/v2_0/compute/functions/SecurityGroupRuleToIpPermissionTest.java new file mode 100644 index 0000000..b0b70eb --- /dev/null +++ b/apis/openstack-nova/src/test/java/org/jclouds/openstack/nova/v2_0/compute/functions/SecurityGroupRuleToIpPermissionTest.java @@ -0,0 +1,87 @@ +/* + * 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.jclouds.openstack.nova.v2_0.compute.functions; + +import static org.testng.Assert.assertEquals; +import static org.testng.Assert.assertTrue; + +import org.jclouds.net.domain.IpPermission; +import org.jclouds.net.domain.IpProtocol; +import org.jclouds.openstack.nova.v2_0.domain.SecurityGroupRule; +import org.jclouds.openstack.nova.v2_0.domain.TenantIdAndName; +import org.testng.annotations.Test; + +import com.google.common.collect.ImmutableSet; + + +/** + * Tests for the function for transforming a nova specific SecurityGroupRule into a generic + * IpPermission object. + * + * @author Andrew Bayer + */ +public class SecurityGroupRuleToIpPermissionTest { + + @Test + public void testApplyWithGroup() { + + TenantIdAndName group = TenantIdAndName.builder().tenantId("tenant").name("name").build(); + + SecurityGroupRule ruleToConvert = SecurityGroupRule.builder() + .id("some-id") + .ipProtocol(IpProtocol.TCP) + .fromPort(10) + .toPort(20) + .group(group) + .parentGroupId("some-other-id") + .build(); + + SecurityGroupRuleToIpPermission converter = new SecurityGroupRuleToIpPermission(); + + IpPermission convertedPerm = converter.apply(ruleToConvert); + + assertEquals(convertedPerm.getIpProtocol(), ruleToConvert.getIpProtocol()); + assertEquals(convertedPerm.getFromPort(), ruleToConvert.getFromPort()); + assertEquals(convertedPerm.getToPort(), ruleToConvert.getToPort()); + assertTrue(convertedPerm.getTenantIdGroupNamePairs().containsKey(group.getTenantId())); + assertTrue(convertedPerm.getTenantIdGroupNamePairs().containsValue(group.getName())); + assertTrue(convertedPerm.getCidrBlocks().size() == 0); + } + + @Test + public void testApplyWithCidr() { + SecurityGroupRule ruleToConvert = SecurityGroupRule.builder() + .id("some-id") + .ipProtocol(IpProtocol.TCP) + .fromPort(10) + .toPort(20) + .ipRange("0.0.0.0/0") + .parentGroupId("some-other-id") + .build(); + + SecurityGroupRuleToIpPermission converter = new SecurityGroupRuleToIpPermission(); + + IpPermission convertedPerm = converter.apply(ruleToConvert); + + assertEquals(convertedPerm.getIpProtocol(), ruleToConvert.getIpProtocol()); + assertEquals(convertedPerm.getFromPort(), ruleToConvert.getFromPort()); + assertEquals(convertedPerm.getToPort(), ruleToConvert.getToPort()); + assertEquals(convertedPerm.getToPort(), ruleToConvert.getToPort()); + assertEquals(convertedPerm.getCidrBlocks(), ImmutableSet.of("0.0.0.0/0")); + assertTrue(convertedPerm.getTenantIdGroupNamePairs().size() == 0); + } +} http://git-wip-us.apache.org/repos/asf/incubator-jclouds/blob/a4128723/apis/openstack-nova/src/test/java/org/jclouds/openstack/nova/v2_0/extensions/SecurityGroupApiExpectTest.java ---------------------------------------------------------------------- diff --git a/apis/openstack-nova/src/test/java/org/jclouds/openstack/nova/v2_0/extensions/SecurityGroupApiExpectTest.java b/apis/openstack-nova/src/test/java/org/jclouds/openstack/nova/v2_0/extensions/SecurityGroupApiExpectTest.java index 1a9f4fd..1fa8416 100644 --- a/apis/openstack-nova/src/test/java/org/jclouds/openstack/nova/v2_0/extensions/SecurityGroupApiExpectTest.java +++ b/apis/openstack-nova/src/test/java/org/jclouds/openstack/nova/v2_0/extensions/SecurityGroupApiExpectTest.java @@ -24,9 +24,9 @@ import java.net.URI; import org.jclouds.http.HttpRequest; import org.jclouds.http.HttpResponse; +import org.jclouds.net.domain.IpProtocol; import org.jclouds.openstack.nova.v2_0.NovaApi; import org.jclouds.openstack.nova.v2_0.domain.Ingress; -import org.jclouds.openstack.nova.v2_0.domain.IpProtocol; import org.jclouds.openstack.nova.v2_0.domain.SecurityGroup; import org.jclouds.openstack.nova.v2_0.domain.SecurityGroupRule; import org.jclouds.openstack.nova.v2_0.internal.BaseNovaApiExpectTest; http://git-wip-us.apache.org/repos/asf/incubator-jclouds/blob/a4128723/apis/openstack-nova/src/test/java/org/jclouds/openstack/nova/v2_0/extensions/SecurityGroupApiLiveTest.java ---------------------------------------------------------------------- diff --git a/apis/openstack-nova/src/test/java/org/jclouds/openstack/nova/v2_0/extensions/SecurityGroupApiLiveTest.java b/apis/openstack-nova/src/test/java/org/jclouds/openstack/nova/v2_0/extensions/SecurityGroupApiLiveTest.java index 665bb4e..c0fb2df 100644 --- a/apis/openstack-nova/src/test/java/org/jclouds/openstack/nova/v2_0/extensions/SecurityGroupApiLiveTest.java +++ b/apis/openstack-nova/src/test/java/org/jclouds/openstack/nova/v2_0/extensions/SecurityGroupApiLiveTest.java @@ -20,8 +20,8 @@ import static org.testng.Assert.assertNotNull; import java.util.Set; +import org.jclouds.net.domain.IpProtocol; import org.jclouds.openstack.nova.v2_0.domain.Ingress; -import org.jclouds.openstack.nova.v2_0.domain.IpProtocol; import org.jclouds.openstack.nova.v2_0.domain.SecurityGroup; import org.jclouds.openstack.nova.v2_0.domain.SecurityGroupRule; import org.jclouds.openstack.nova.v2_0.internal.BaseNovaApiLiveTest; http://git-wip-us.apache.org/repos/asf/incubator-jclouds/blob/a4128723/apis/openstack-nova/src/test/java/org/jclouds/openstack/nova/v2_0/parse/ParseComputeServiceTypicalSecurityGroupTest.java ---------------------------------------------------------------------- diff --git a/apis/openstack-nova/src/test/java/org/jclouds/openstack/nova/v2_0/parse/ParseComputeServiceTypicalSecurityGroupTest.java b/apis/openstack-nova/src/test/java/org/jclouds/openstack/nova/v2_0/parse/ParseComputeServiceTypicalSecurityGroupTest.java index 5da793f..9b056b9 100644 --- a/apis/openstack-nova/src/test/java/org/jclouds/openstack/nova/v2_0/parse/ParseComputeServiceTypicalSecurityGroupTest.java +++ b/apis/openstack-nova/src/test/java/org/jclouds/openstack/nova/v2_0/parse/ParseComputeServiceTypicalSecurityGroupTest.java @@ -23,8 +23,8 @@ import javax.ws.rs.core.MediaType; import org.jclouds.json.BaseItemParserTest; import org.jclouds.json.config.GsonModule; +import org.jclouds.net.domain.IpProtocol; import org.jclouds.openstack.nova.v2_0.config.NovaParserModule; -import org.jclouds.openstack.nova.v2_0.domain.IpProtocol; import org.jclouds.openstack.nova.v2_0.domain.SecurityGroup; import org.jclouds.openstack.nova.v2_0.domain.SecurityGroupRule; import org.jclouds.openstack.nova.v2_0.domain.TenantIdAndName; http://git-wip-us.apache.org/repos/asf/incubator-jclouds/blob/a4128723/apis/openstack-nova/src/test/java/org/jclouds/openstack/nova/v2_0/parse/ParseSecurityGroupListTest.java ---------------------------------------------------------------------- diff --git a/apis/openstack-nova/src/test/java/org/jclouds/openstack/nova/v2_0/parse/ParseSecurityGroupListTest.java b/apis/openstack-nova/src/test/java/org/jclouds/openstack/nova/v2_0/parse/ParseSecurityGroupListTest.java index 9f477ee..4e46ede 100644 --- a/apis/openstack-nova/src/test/java/org/jclouds/openstack/nova/v2_0/parse/ParseSecurityGroupListTest.java +++ b/apis/openstack-nova/src/test/java/org/jclouds/openstack/nova/v2_0/parse/ParseSecurityGroupListTest.java @@ -23,8 +23,8 @@ import javax.ws.rs.core.MediaType; import org.jclouds.json.BaseSetParserTest; import org.jclouds.json.config.GsonModule; +import org.jclouds.net.domain.IpProtocol; import org.jclouds.openstack.nova.v2_0.config.NovaParserModule; -import org.jclouds.openstack.nova.v2_0.domain.IpProtocol; import org.jclouds.openstack.nova.v2_0.domain.SecurityGroup; import org.jclouds.openstack.nova.v2_0.domain.SecurityGroupRule; import org.jclouds.rest.annotations.SelectJson; http://git-wip-us.apache.org/repos/asf/incubator-jclouds/blob/a4128723/apis/openstack-nova/src/test/java/org/jclouds/openstack/nova/v2_0/parse/ParseSecurityGroupTest.java ---------------------------------------------------------------------- diff --git a/apis/openstack-nova/src/test/java/org/jclouds/openstack/nova/v2_0/parse/ParseSecurityGroupTest.java b/apis/openstack-nova/src/test/java/org/jclouds/openstack/nova/v2_0/parse/ParseSecurityGroupTest.java index a5c83f4..784a0bd 100644 --- a/apis/openstack-nova/src/test/java/org/jclouds/openstack/nova/v2_0/parse/ParseSecurityGroupTest.java +++ b/apis/openstack-nova/src/test/java/org/jclouds/openstack/nova/v2_0/parse/ParseSecurityGroupTest.java @@ -23,8 +23,8 @@ import javax.ws.rs.core.MediaType; import org.jclouds.json.BaseItemParserTest; import org.jclouds.json.config.GsonModule; +import org.jclouds.net.domain.IpProtocol; import org.jclouds.openstack.nova.v2_0.config.NovaParserModule; -import org.jclouds.openstack.nova.v2_0.domain.IpProtocol; import org.jclouds.openstack.nova.v2_0.domain.SecurityGroup; import org.jclouds.openstack.nova.v2_0.domain.SecurityGroupRule; import org.jclouds.openstack.nova.v2_0.domain.TenantIdAndName;
