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()) {

Reply via email to