JCLOUDS-1323: use security group names in openstack nova options - fix NovaComputeServiceExpectTest
Project: http://git-wip-us.apache.org/repos/asf/jclouds/repo Commit: http://git-wip-us.apache.org/repos/asf/jclouds/commit/7c58f9d7 Tree: http://git-wip-us.apache.org/repos/asf/jclouds/tree/7c58f9d7 Diff: http://git-wip-us.apache.org/repos/asf/jclouds/diff/7c58f9d7 Branch: refs/heads/master Commit: 7c58f9d77d048442ede9e3f52c1af18cde5e1696 Parents: c61fa9d Author: Andrea Turli <andrea.tu...@gmail.com> Authored: Sun Aug 6 16:57:09 2017 +0200 Committer: Andrea Turli <andrea.tu...@gmail.com> Committed: Wed Aug 9 12:25:53 2017 +0200 ---------------------------------------------------------------------- ...eNodesWithGroupEncodedIntoNameThenAddToSet.java | 17 ++++++++++++++--- 1 file changed, 14 insertions(+), 3 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/jclouds/blob/7c58f9d7/apis/openstack-nova/src/main/java/org/jclouds/openstack/nova/v2_0/compute/strategy/ApplyNovaTemplateOptionsCreateNodesWithGroupEncodedIntoNameThenAddToSet.java ---------------------------------------------------------------------- diff --git a/apis/openstack-nova/src/main/java/org/jclouds/openstack/nova/v2_0/compute/strategy/ApplyNovaTemplateOptionsCreateNodesWithGroupEncodedIntoNameThenAddToSet.java b/apis/openstack-nova/src/main/java/org/jclouds/openstack/nova/v2_0/compute/strategy/ApplyNovaTemplateOptionsCreateNodesWithGroupEncodedIntoNameThenAddToSet.java index 673781c..5f747e6 100644 --- a/apis/openstack-nova/src/main/java/org/jclouds/openstack/nova/v2_0/compute/strategy/ApplyNovaTemplateOptionsCreateNodesWithGroupEncodedIntoNameThenAddToSet.java +++ b/apis/openstack-nova/src/main/java/org/jclouds/openstack/nova/v2_0/compute/strategy/ApplyNovaTemplateOptionsCreateNodesWithGroupEncodedIntoNameThenAddToSet.java @@ -18,6 +18,7 @@ package org.jclouds.openstack.nova.v2_0.compute.strategy; import static com.google.common.base.Preconditions.checkArgument; import static com.google.common.base.Preconditions.checkNotNull; +import static com.google.common.base.Preconditions.checkState; import java.util.List; import java.util.Map; @@ -43,6 +44,7 @@ import org.jclouds.openstack.nova.v2_0.compute.functions.AllocateAndAddFloatingI import org.jclouds.openstack.nova.v2_0.compute.options.NodeAndNovaTemplateOptions; import org.jclouds.openstack.nova.v2_0.compute.options.NovaTemplateOptions; import org.jclouds.openstack.nova.v2_0.domain.KeyPair; +import org.jclouds.openstack.nova.v2_0.domain.SecurityGroup; import org.jclouds.openstack.nova.v2_0.domain.regionscoped.RegionAndName; import org.jclouds.openstack.nova.v2_0.domain.regionscoped.RegionSecurityGroupNameAndPorts; import org.jclouds.openstack.nova.v2_0.domain.regionscoped.SecurityGroupInRegion; @@ -52,6 +54,7 @@ import com.google.common.base.Strings; import com.google.common.base.Throwables; import com.google.common.cache.LoadingCache; import com.google.common.collect.ImmutableList; +import com.google.common.collect.Iterables; import com.google.common.collect.Multimap; import com.google.common.primitives.Ints; import com.google.common.util.concurrent.Atomics; @@ -92,7 +95,7 @@ public class ApplyNovaTemplateOptionsCreateNodesWithGroupEncodedIntoNameThenAddT Map<NodeMetadata, Exception> badNodes, Multimap<NodeMetadata, CustomizationResponse> customizationResponses) { NovaTemplateOptions templateOptions = NovaTemplateOptions.class.cast(template.getOptions()); - String region = template.getLocation().getId(); + final String region = template.getLocation().getId(); if (templateOptions.shouldAutoAssignFloatingIp()) { checkArgument(novaApi.getFloatingIPApi(region).isPresent(), @@ -104,7 +107,7 @@ public class ApplyNovaTemplateOptionsCreateNodesWithGroupEncodedIntoNameThenAddT "Key Pairs are required by options, but the extension is not available! options: %s", templateOptions); } - List<Integer> inboundPorts = Ints.asList(templateOptions.getInboundPorts()); + final List<Integer> inboundPorts = Ints.asList(templateOptions.getInboundPorts()); if (!templateOptions.getGroups().isEmpty() || !inboundPorts.isEmpty()) { checkArgument(novaApi.getSecurityGroupApi(region).isPresent(), "Security groups are required by options, but the extension is not available! options: %s", @@ -129,8 +132,16 @@ public class ApplyNovaTemplateOptionsCreateNodesWithGroupEncodedIntoNameThenAddT ImmutableList.Builder<String> tagsBuilder = ImmutableList.builder(); if (!templateOptions.getGroups().isEmpty()) { + Set<String> securityGroupNames = novaApi.getSecurityGroupApi(region).get().list() + .transform(new Function<SecurityGroup, String>() { + @Override + public String apply(SecurityGroup input) { + return input.getName(); + } + }) + .toSet(); for (String securityGroupName : templateOptions.getGroups()) { - checkNotNull(novaApi.getSecurityGroupApi(region).get().get(securityGroupName), "security group %s doesn't exist", securityGroupName); + checkState(securityGroupNames.contains(securityGroupName), "Cannot find security group with name " + securityGroupName + ". \nSecurity groups available are: \n" + Iterables.toString(securityGroupNames)); // { } } else if (!inboundPorts.isEmpty()) {