http://git-wip-us.apache.org/repos/asf/stratos/blob/1d88fdf4/dependencies/jclouds/apis/cloudstack/1.8.0-stratos/src/main/java/org/jclouds/cloudstack/compute/options/CloudStackTemplateOptions.java
----------------------------------------------------------------------
diff --git 
a/dependencies/jclouds/apis/cloudstack/1.8.0-stratos/src/main/java/org/jclouds/cloudstack/compute/options/CloudStackTemplateOptions.java
 
b/dependencies/jclouds/apis/cloudstack/1.8.0-stratos/src/main/java/org/jclouds/cloudstack/compute/options/CloudStackTemplateOptions.java
deleted file mode 100644
index 1bcad0c..0000000
--- 
a/dependencies/jclouds/apis/cloudstack/1.8.0-stratos/src/main/java/org/jclouds/cloudstack/compute/options/CloudStackTemplateOptions.java
+++ /dev/null
@@ -1,509 +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.cloudstack.compute.options;
-
-import static com.google.common.base.Preconditions.checkNotNull;
-
-import java.util.Map;
-import java.util.Set;
-
-import org.jclouds.compute.options.TemplateOptions;
-
-import com.google.common.collect.Iterables;
-import com.google.common.collect.Maps;
-import com.google.common.collect.Sets;
-
-/**
- * Contains options supported by the
- * {@link ComputeService#createNodesInGroup(String, int, TemplateOptions)} and
- * {@link ComputeService#createNodesInGroup(String, int, TemplateOptions)}
- * operations on the <em>gogrid</em> provider.
- * 
- * <h2>Usage</h2> The recommended way to instantiate a
- * {@link CloudStackTemplateOptions} object is to statically import
- * {@code CloudStackTemplateOptions.*} and invoke a static creation method
- * followed by an instance mutator (if needed):
- * <p>
- * 
- * <pre>
- * import static 
org.jclouds.compute.options.CloudStackTemplateOptions.Builder.*;
- * ComputeService client = // get connection
- * templateBuilder.options(inboundPorts(22, 80, 8080, 443));
- * Set&lt;? extends NodeMetadata&gt; set = client.createNodesInGroup(tag, 2, 
templateBuilder.build());
- * </pre>
- */
-public class CloudStackTemplateOptions extends TemplateOptions implements 
Cloneable {
-
-   protected Set<String> securityGroupIds = Sets.<String> newLinkedHashSet();
-   protected Map<String, String> ipsToNetworks = Maps.<String, 
String>newLinkedHashMap();
-   protected String ipOnDefaultNetwork;
-   protected String keyPair;
-   protected boolean setupStaticNat = true;
-   protected String account;
-   protected String domainId;
-   protected boolean generateKeyPair = false;
-   protected boolean generateSecurityGroup = false;
-   protected String diskOfferingId;
-   protected int dataDiskSize;
-   
-   @Override
-   public CloudStackTemplateOptions clone() {
-      CloudStackTemplateOptions options = new CloudStackTemplateOptions();
-      copyTo(options);
-      return options;
-   }
-
-   @Override
-   public void copyTo(TemplateOptions to) {
-      super.copyTo(to);
-      if (to instanceof CloudStackTemplateOptions) {
-         CloudStackTemplateOptions eTo = 
CloudStackTemplateOptions.class.cast(to);
-         eTo.securityGroupIds(this.securityGroupIds);
-         eTo.ipsToNetworks(this.ipsToNetworks);
-         eTo.ipOnDefaultNetwork(this.ipOnDefaultNetwork);
-         eTo.keyPair(this.keyPair);
-         eTo.generateKeyPair(shouldGenerateKeyPair());
-         eTo.generateSecurityGroup(shouldGenerateSecurityGroup());
-         eTo.account(this.account);
-         eTo.domainId(this.domainId);
-         eTo.setupStaticNat(setupStaticNat);
-         eTo.diskOfferingId(diskOfferingId);
-         eTo.dataDiskSize(dataDiskSize);
-      }
-   }
-
-   /**
-    * @see 
org.jclouds.cloudstack.options.DeployVirtualMachineOptions#diskOfferingId
-    */
-   public CloudStackTemplateOptions diskOfferingId(String diskOfferingId) {
-      this.diskOfferingId = diskOfferingId;
-      return this;
-   }
-
-   public String getDiskOfferingId() {
-      return diskOfferingId;
-   }
-
-   /**
-    * @see DeployVirtualMachineOptions#dataDiskSize
-    */
-   public CloudStackTemplateOptions dataDiskSize(int dataDiskSize) {
-      this.dataDiskSize = dataDiskSize;
-      return this;
-   }
-
-   public int getDataDiskSize() {
-      return dataDiskSize;
-   }
-
-   /**
-    * @see DeployVirtualMachineOptions#securityGroupId
-    */
-   public CloudStackTemplateOptions securityGroupId(String securityGroupId) {
-      this.securityGroupIds.add(securityGroupId);
-      return this;
-   }
-
-   /**
-    * @see DeployVirtualMachineOptions#securityGroupIds
-    */
-   public CloudStackTemplateOptions securityGroupIds(Iterable<String> 
securityGroupIds) {
-      Iterables.addAll(this.securityGroupIds, checkNotNull(securityGroupIds, 
"securityGroupIds was null"));
-      return this;
-   }
-
-   public Set<String> getSecurityGroupIds() {
-      return securityGroupIds;
-   }
-
-   /**
-    * @see #shouldGenerateKeyPair()
-    */
-   public CloudStackTemplateOptions generateSecurityGroup(boolean enable) {
-      this.generateSecurityGroup = enable;
-      return this;
-   }
-
-   /**
-    * @return true if auto generation of keypairs is enabled
-    */
-   public boolean shouldGenerateSecurityGroup() {
-      return generateSecurityGroup;
-   }
-
-   /**
-    * @deprecated See TemplateOptions#networks
-    * @see DeployVirtualMachineOptions#networkId
-    */
-   @Deprecated
-   public CloudStackTemplateOptions networkId(String networkId) {
-      this.networks.add(networkId);
-      return this;
-   }
-
-   /**
-    * @deprecated See TemplateOptions#networks
-    * @see DeployVirtualMachineOptions#networkIds
-    */
-   @Deprecated
-   public CloudStackTemplateOptions networkIds(Iterable<String> networkIds) {
-      Iterables.addAll(this.networks, checkNotNull(networkIds, "networkIds was 
null"));
-      return this;
-   }
-
-   /**
-    * @deprecated See TemplateOptions#getNetworks
-    */
-   @Deprecated
-   public Set<String> getNetworkIds() {
-      return this.getNetworks();
-   }
-
-   public CloudStackTemplateOptions setupStaticNat(boolean setupStaticNat) {
-      this.setupStaticNat = setupStaticNat;
-      return this;
-   }
-
-   public boolean shouldSetupStaticNat() {
-      return this.setupStaticNat;
-   }
-
-   /**
-    * @see DeployVirtualMachineOptions#ipOnDefaultNetwork
-    */
-   public CloudStackTemplateOptions ipOnDefaultNetwork(String 
ipOnDefaultNetwork) {
-      this.ipOnDefaultNetwork = ipOnDefaultNetwork;
-      return this;
-   }
-
-   public String getIpOnDefaultNetwork() {
-      return ipOnDefaultNetwork;
-   }
-
-   /**
-    * @see DeployVirtualMachineOptions#ipOnDefaultNetwork(String)
-    */
-   public CloudStackTemplateOptions ipsToNetworks(Map<String, String> 
ipsToNetworks) {
-      this.ipsToNetworks.putAll(ipsToNetworks);
-      return this;
-   }
-
-   public Map<String, String> getIpsToNetworks() {
-      return ipsToNetworks;
-   }
-
-   /**
-    * @see DeployVirtualMachineOptions#keyPair(String)
-    */
-   public CloudStackTemplateOptions keyPair(String keyPair) {
-      this.keyPair = keyPair;
-      return this;
-   }
-
-   public String getKeyPair() {
-      return keyPair;
-   }
-
-   /**
-    * @see #shouldGenerateKeyPair()
-    */
-   public CloudStackTemplateOptions generateKeyPair(boolean enable) {
-      this.generateKeyPair = enable;
-      return this;
-   }
-
-   /**
-    * @return true if auto generation of keypairs is enabled
-    */
-   public boolean shouldGenerateKeyPair() {
-      return generateKeyPair;
-   }
-
-   /**
-    * @see DeployVirtualMachineOptions#accountInDomain(String,String)
-    */
-   public CloudStackTemplateOptions account(String account) {
-      this.account = account;
-      return this;
-   }
-
-   public String getAccount() {
-      return account;
-   }
-
-   /**
-    * @see DeployVirtualMachineOptions#accountInDomain(String,String)
-    * @see DeployVirtualMachineOptions#domainId(String)
-    */
-   public CloudStackTemplateOptions domainId(String domainId) {
-      this.domainId = domainId;
-      return this;
-   }
-
-   public String getDomainId() {
-      return domainId;
-   }
-
-   public static final CloudStackTemplateOptions NONE = new 
CloudStackTemplateOptions();
-
-   public static class Builder {
-
-      /**
-       * @see CloudStackTemplateOptions#diskOfferingId
-       */
-      public static CloudStackTemplateOptions diskOfferingId(String 
diskOfferingId) {
-         CloudStackTemplateOptions options = new CloudStackTemplateOptions();
-         return options.diskOfferingId(diskOfferingId);
-      }
-
-      /**
-       * @see CloudStackTemplateOptions#dataDiskSize
-       */
-      public static CloudStackTemplateOptions dataDiskSize(int dataDiskSize) {
-         CloudStackTemplateOptions options = new CloudStackTemplateOptions();
-         return options.dataDiskSize(dataDiskSize);
-      }
-
-      /**
-       * @see CloudStackTemplateOptions#securityGroupId
-       */
-      public static CloudStackTemplateOptions securityGroupId(String id) {
-         CloudStackTemplateOptions options = new CloudStackTemplateOptions();
-         return options.securityGroupId(id);
-      }
-
-      /**
-       * @see CloudStackTemplateOptions#securityGroupIds
-       */
-      public static CloudStackTemplateOptions 
securityGroupIds(Iterable<String> securityGroupIds) {
-         CloudStackTemplateOptions options = new CloudStackTemplateOptions();
-         return options.securityGroupIds(securityGroupIds);
-      }
-
-      /**
-       * @see CloudStackTemplateOptions#shouldGenerateSecurityGroup() 
-       */
-      public static CloudStackTemplateOptions generateSecurityGroup(boolean 
enable) {
-         return new CloudStackTemplateOptions().generateSecurityGroup(enable);
-      }
-
-      /**
-       * @deprecated See TemplateOptions#networks
-       * @see CloudStackTemplateOptions#networkId
-       */
-      @Deprecated
-      public static CloudStackTemplateOptions networkId(String id) {
-         return networks(id);
-      }
-
-      /**
-       * @deprecated see TemplateOptions#networks
-       * @see CloudStackTemplateOptions#networkIds
-       */
-      @Deprecated
-      public static CloudStackTemplateOptions networkIds(Iterable<String> 
networkIds) {
-         return networks(networkIds);
-      }
-
-      /**
-       * @see CloudStackTemplateOptions#ipOnDefaultNetwork
-       */
-      public static CloudStackTemplateOptions ipOnDefaultNetwork(String 
ipAddress) {
-         CloudStackTemplateOptions options = new CloudStackTemplateOptions();
-         return options.ipOnDefaultNetwork(ipAddress);
-      }
-
-      /**
-       * @see CloudStackTemplateOptions#ipsToNetworks
-       */
-      public static CloudStackTemplateOptions ipsToNetworks(Map<String, 
String> ipToNetworkMap) {
-         CloudStackTemplateOptions options = new CloudStackTemplateOptions();
-         return options.ipsToNetworks(ipToNetworkMap);
-      }
-
-      /**
-       * @see CloudStackTemplateOptions#setupStaticNat
-       */
-      public static CloudStackTemplateOptions setupStaticNat(boolean 
setupStaticNat) {
-         CloudStackTemplateOptions options = new CloudStackTemplateOptions();
-         return options.setupStaticNat(setupStaticNat);
-      }
-
-      /**
-       * @see CloudStackTemplateOptions#keyPair
-       */
-      public static CloudStackTemplateOptions keyPair(String keyPair) {
-         CloudStackTemplateOptions options = new CloudStackTemplateOptions();
-         return options.keyPair(keyPair);
-      }
-
-      /**
-       * @see CloudStackTemplateOptions#shouldGenerateKeyPair() 
-       */
-      public static CloudStackTemplateOptions generateKeyPair(boolean enable) {
-         return new CloudStackTemplateOptions().generateKeyPair(enable);
-      }
-
-      /**
-       * @see CloudStackTemplateOptions#account
-       */
-      public static CloudStackTemplateOptions account(String account) {
-         CloudStackTemplateOptions options = new CloudStackTemplateOptions();
-         return options.account(account);
-      }
-
-      /**
-       * @see CloudStackTemplateOptions#domainId
-       */
-      public static CloudStackTemplateOptions domainId(String domainId) {
-         CloudStackTemplateOptions options = new CloudStackTemplateOptions();
-         return options.domainId(domainId);
-      }
-
-      // methods that only facilitate returning the correct object type
-
-      /**
-       * @see TemplateOptions#inboundPorts(int...)
-       */
-      public static CloudStackTemplateOptions inboundPorts(int... ports) {
-         CloudStackTemplateOptions options = new CloudStackTemplateOptions();
-         return 
CloudStackTemplateOptions.class.cast(options.inboundPorts(ports));
-      }
-
-      /**
-       * @see TemplateOptions#blockOnPort(int, int)
-       */
-      public static CloudStackTemplateOptions blockOnPort(int port, int 
seconds) {
-         CloudStackTemplateOptions options = new CloudStackTemplateOptions();
-         return CloudStackTemplateOptions.class.cast(options.blockOnPort(port, 
seconds));
-      }
-
-      /**
-       * @see TemplateOptions#userMetadata(Map)
-       */
-      public static CloudStackTemplateOptions userMetadata(Map<String, String> 
userMetadata) {
-         CloudStackTemplateOptions options = new CloudStackTemplateOptions();
-         return 
CloudStackTemplateOptions.class.cast(options.userMetadata(userMetadata));
-      }
-
-      /**
-       * @see TemplateOptions#userMetadata(String, String)
-       */
-      public static CloudStackTemplateOptions userMetadata(String key, String 
value) {
-         CloudStackTemplateOptions options = new CloudStackTemplateOptions();
-         return CloudStackTemplateOptions.class.cast(options.userMetadata(key, 
value));
-      }
-
-      /**
-       * @see TemplateOptions#nodeNames(Iterable)
-       */
-      public static CloudStackTemplateOptions nodeNames(Iterable<String> 
nodeNames) {
-         CloudStackTemplateOptions options = new CloudStackTemplateOptions();
-         return 
CloudStackTemplateOptions.class.cast(options.nodeNames(nodeNames));
-      }
-
-      /**
-       * @see TemplateOptions#networks(Iterable)
-       */
-      public static CloudStackTemplateOptions networks(Iterable<String> 
networks) {
-         CloudStackTemplateOptions options = new CloudStackTemplateOptions();
-         return 
CloudStackTemplateOptions.class.cast(options.networks(networks));
-      }
-
-      /**
-       * @see TemplateOptions#networks(String...)
-       */
-      public static CloudStackTemplateOptions networks(String... networks) {
-         CloudStackTemplateOptions options = new CloudStackTemplateOptions();
-         return 
CloudStackTemplateOptions.class.cast(options.networks(networks));
-      }
-   }
-
-   // methods that only facilitate returning the correct object type
-
-   /**
-    * @see TemplateOptions#blockOnPort(int, int)
-    */
-   @Override
-   public CloudStackTemplateOptions blockOnPort(int port, int seconds) {
-      return CloudStackTemplateOptions.class.cast(super.blockOnPort(port, 
seconds));
-   }
-
-   /**
-    * @see TemplateOptions#inboundPorts(int...)
-    */
-   @Override
-   public CloudStackTemplateOptions inboundPorts(int... ports) {
-      return CloudStackTemplateOptions.class.cast(super.inboundPorts(ports));
-   }
-
-   /**
-    * @see TemplateOptions#authorizePublicKey(String)
-    */
-   @Override
-   public CloudStackTemplateOptions authorizePublicKey(String publicKey) {
-      return 
CloudStackTemplateOptions.class.cast(super.authorizePublicKey(publicKey));
-   }
-
-   /**
-    * @see TemplateOptions#installPrivateKey(String)
-    */
-   @Override
-   public CloudStackTemplateOptions installPrivateKey(String privateKey) {
-      return 
CloudStackTemplateOptions.class.cast(super.installPrivateKey(privateKey));
-   }
-
-   /**
-    * {@inheritDoc}
-    */
-   @Override
-   public CloudStackTemplateOptions userMetadata(Map<String, String> 
userMetadata) {
-      return 
CloudStackTemplateOptions.class.cast(super.userMetadata(userMetadata));
-   }
-
-   /**
-    * {@inheritDoc}
-    */
-   @Override
-   public CloudStackTemplateOptions userMetadata(String key, String value) {
-      return CloudStackTemplateOptions.class.cast(super.userMetadata(key, 
value));
-   }
-
-   /**
-    * {@inheritDoc}
-    */
-   @Override
-   public CloudStackTemplateOptions nodeNames(Iterable<String> nodeNames) {
-      return CloudStackTemplateOptions.class.cast(super.nodeNames(nodeNames));
-   }
-
-   /**
-    * {@inheritDoc}
-    */
-   @Override
-   public CloudStackTemplateOptions networks(Iterable<String> networks) {
-      return CloudStackTemplateOptions.class.cast(super.networks(networks));
-   }
-
-   /**
-    * {@inheritDoc}
-    */
-   @Override
-   public CloudStackTemplateOptions networks(String... networks) {
-      return CloudStackTemplateOptions.class.cast(super.networks(networks));
-   }
-}

http://git-wip-us.apache.org/repos/asf/stratos/blob/1d88fdf4/dependencies/jclouds/apis/cloudstack/1.8.0-stratos/src/main/java/org/jclouds/cloudstack/compute/predicates/AllNodesInGroupTerminated.java
----------------------------------------------------------------------
diff --git 
a/dependencies/jclouds/apis/cloudstack/1.8.0-stratos/src/main/java/org/jclouds/cloudstack/compute/predicates/AllNodesInGroupTerminated.java
 
b/dependencies/jclouds/apis/cloudstack/1.8.0-stratos/src/main/java/org/jclouds/cloudstack/compute/predicates/AllNodesInGroupTerminated.java
deleted file mode 100644
index 6a4bd89..0000000
--- 
a/dependencies/jclouds/apis/cloudstack/1.8.0-stratos/src/main/java/org/jclouds/cloudstack/compute/predicates/AllNodesInGroupTerminated.java
+++ /dev/null
@@ -1,53 +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.cloudstack.compute.predicates;
-
-import static com.google.common.base.Preconditions.checkNotNull;
-import static com.google.common.base.Predicates.and;
-import static com.google.common.collect.Iterables.all;
-import static org.jclouds.compute.predicates.NodePredicates.TERMINATED;
-import static org.jclouds.compute.predicates.NodePredicates.inGroup;
-import static org.jclouds.compute.predicates.NodePredicates.locationId;
-import static org.jclouds.compute.predicates.NodePredicates.parentLocationId;
-
-import javax.inject.Inject;
-
-import org.jclouds.compute.ComputeService;
-import org.jclouds.compute.domain.ComputeMetadata;
-import org.jclouds.cloudstack.domain.ZoneAndName;
-
-import com.google.common.base.Predicate;
-import com.google.common.base.Predicates;
-
-public class AllNodesInGroupTerminated implements Predicate<ZoneAndName> {
-   private final ComputeService computeService;
-
-   
-   //TODO: TESTME
-   @Inject
-   public AllNodesInGroupTerminated(ComputeService computeService) {
-      this.computeService = checkNotNull(computeService, "computeService");
-   }
-
-   @Override
-   public boolean apply(ZoneAndName input) {
-      // new nodes can have the zone as their location, existing nodes, the 
parent is the
-      // location
-      return 
all(computeService.listNodesDetailsMatching(Predicates.<ComputeMetadata> 
or(locationId(input.getZone()),
-               parentLocationId(input.getZone()))), 
and(inGroup(input.getName()), TERMINATED));
-   }
-}

http://git-wip-us.apache.org/repos/asf/stratos/blob/1d88fdf4/dependencies/jclouds/apis/cloudstack/1.8.0-stratos/src/main/java/org/jclouds/cloudstack/compute/strategy/AdvancedNetworkOptionsConverter.java
----------------------------------------------------------------------
diff --git 
a/dependencies/jclouds/apis/cloudstack/1.8.0-stratos/src/main/java/org/jclouds/cloudstack/compute/strategy/AdvancedNetworkOptionsConverter.java
 
b/dependencies/jclouds/apis/cloudstack/1.8.0-stratos/src/main/java/org/jclouds/cloudstack/compute/strategy/AdvancedNetworkOptionsConverter.java
deleted file mode 100644
index efbce39..0000000
--- 
a/dependencies/jclouds/apis/cloudstack/1.8.0-stratos/src/main/java/org/jclouds/cloudstack/compute/strategy/AdvancedNetworkOptionsConverter.java
+++ /dev/null
@@ -1,59 +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.cloudstack.compute.strategy;
-
-import com.google.common.collect.Iterables;
-import org.jclouds.cloudstack.compute.options.CloudStackTemplateOptions;
-import org.jclouds.cloudstack.domain.Network;
-import org.jclouds.cloudstack.options.DeployVirtualMachineOptions;
-
-import java.util.Map;
-
-import static com.google.common.base.Preconditions.checkArgument;
-import static com.google.common.base.Predicates.and;
-import static com.google.common.collect.Iterables.filter;
-import static 
org.jclouds.cloudstack.predicates.NetworkPredicates.defaultNetworkInZone;
-import static 
org.jclouds.cloudstack.predicates.NetworkPredicates.isIsolatedNetwork;
-import static 
org.jclouds.cloudstack.predicates.NetworkPredicates.supportsStaticNAT;
-
-/**
- * Convert template options into DeployVirtualMachineOptions, when the target 
zone has advanced networking.
- */
-public class AdvancedNetworkOptionsConverter implements OptionsConverter {
-   @Override
-   public DeployVirtualMachineOptions apply(CloudStackTemplateOptions 
templateOptions, Map<String, Network> networks, String zoneId, 
DeployVirtualMachineOptions options) {
-      // security groups not allowed.
-      // at least one network must be given to CloudStack,
-      // but jclouds will try to autodetect an appropriate network if none 
given.
-      checkArgument(templateOptions.getSecurityGroupIds().isEmpty(), "security 
groups cannot be specified for locations (zones) that use advanced networking");
-      if (!templateOptions.getNetworks().isEmpty()) {
-         options.networkIds(templateOptions.getNetworks());
-      } else if (templateOptions.getIpsToNetworks().isEmpty()) {
-         checkArgument(!networks.isEmpty(), "please setup a network for zone: 
" + zoneId);
-         Network defaultNetworkInZone = 
Iterables.getFirst(filter(networks.values(), and(defaultNetworkInZone(zoneId), 
supportsStaticNAT())), null);
-         if (defaultNetworkInZone == null) {
-             defaultNetworkInZone = 
Iterables.getFirst(filter(networks.values(), isIsolatedNetwork()), null);
-         }
-         if (defaultNetworkInZone == null) {
-             throw new IllegalArgumentException("please choose a specific 
network in zone " + zoneId + ": " + networks);
-         } else {
-             options.networkId(defaultNetworkInZone.getId());
-         }
-      }
-      return options;
-   }
-}

http://git-wip-us.apache.org/repos/asf/stratos/blob/1d88fdf4/dependencies/jclouds/apis/cloudstack/1.8.0-stratos/src/main/java/org/jclouds/cloudstack/compute/strategy/BasicNetworkOptionsConverter.java
----------------------------------------------------------------------
diff --git 
a/dependencies/jclouds/apis/cloudstack/1.8.0-stratos/src/main/java/org/jclouds/cloudstack/compute/strategy/BasicNetworkOptionsConverter.java
 
b/dependencies/jclouds/apis/cloudstack/1.8.0-stratos/src/main/java/org/jclouds/cloudstack/compute/strategy/BasicNetworkOptionsConverter.java
deleted file mode 100644
index 181ddc7..0000000
--- 
a/dependencies/jclouds/apis/cloudstack/1.8.0-stratos/src/main/java/org/jclouds/cloudstack/compute/strategy/BasicNetworkOptionsConverter.java
+++ /dev/null
@@ -1,41 +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.cloudstack.compute.strategy;
-
-import org.jclouds.cloudstack.compute.options.CloudStackTemplateOptions;
-import org.jclouds.cloudstack.domain.Network;
-import org.jclouds.cloudstack.options.DeployVirtualMachineOptions;
-
-import java.util.Map;
-
-/**
- * Convert template options into DeployVirtualMachineOptions, when the target 
zone has basic networking.
- */
-public class BasicNetworkOptionsConverter implements OptionsConverter {
-   @Override
-   public DeployVirtualMachineOptions apply(CloudStackTemplateOptions 
templateOptions, Map<String, Network> networks, String zoneId, 
DeployVirtualMachineOptions options) {
-      // both security groups and networks are optional, and CloudStack will
-      // use the zone/user's default network/security group if none given
-      if (!templateOptions.getSecurityGroupIds().isEmpty()) {
-         options.securityGroupIds(templateOptions.getSecurityGroupIds());
-      }
-      if (!templateOptions.getNetworks().isEmpty()) {
-         options.networkIds(templateOptions.getNetworks());
-      }
-      return options;
-   }
-}

http://git-wip-us.apache.org/repos/asf/stratos/blob/1d88fdf4/dependencies/jclouds/apis/cloudstack/1.8.0-stratos/src/main/java/org/jclouds/cloudstack/compute/strategy/CloudStackComputeServiceAdapter.java
----------------------------------------------------------------------
diff --git 
a/dependencies/jclouds/apis/cloudstack/1.8.0-stratos/src/main/java/org/jclouds/cloudstack/compute/strategy/CloudStackComputeServiceAdapter.java
 
b/dependencies/jclouds/apis/cloudstack/1.8.0-stratos/src/main/java/org/jclouds/cloudstack/compute/strategy/CloudStackComputeServiceAdapter.java
deleted file mode 100644
index 29f5c85..0000000
--- 
a/dependencies/jclouds/apis/cloudstack/1.8.0-stratos/src/main/java/org/jclouds/cloudstack/compute/strategy/CloudStackComputeServiceAdapter.java
+++ /dev/null
@@ -1,476 +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.cloudstack.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 static com.google.common.collect.Iterables.contains;
-import static com.google.common.collect.Iterables.filter;
-import static com.google.common.collect.Iterables.get;
-import static 
org.jclouds.cloudstack.options.DeployVirtualMachineOptions.Builder.displayName;
-import static org.jclouds.cloudstack.options.ListTemplatesOptions.Builder.id;
-import static org.jclouds.cloudstack.predicates.TemplatePredicates.isReady;
-import static 
org.jclouds.cloudstack.predicates.ZonePredicates.supportsSecurityGroups;
-import static org.jclouds.ssh.SshKeys.fingerprintPrivateKey;
-
-import java.util.List;
-import java.util.Map;
-import java.util.Set;
-
-import javax.annotation.Resource;
-import javax.inject.Inject;
-import javax.inject.Named;
-import javax.inject.Singleton;
-
-import org.jclouds.cloudstack.CloudStackApi;
-import org.jclouds.cloudstack.compute.options.CloudStackTemplateOptions;
-import org.jclouds.cloudstack.domain.AsyncCreateResponse;
-import org.jclouds.cloudstack.domain.Capabilities;
-import org.jclouds.cloudstack.domain.FirewallRule;
-import org.jclouds.cloudstack.domain.IPForwardingRule;
-import org.jclouds.cloudstack.domain.Network;
-import org.jclouds.cloudstack.domain.NetworkType;
-import org.jclouds.cloudstack.domain.Project;
-import org.jclouds.cloudstack.domain.PublicIPAddress;
-import org.jclouds.cloudstack.domain.SecurityGroup;
-import org.jclouds.cloudstack.domain.ServiceOffering;
-import org.jclouds.cloudstack.domain.SshKeyPair;
-import org.jclouds.cloudstack.domain.Template;
-import org.jclouds.cloudstack.domain.VirtualMachine;
-import org.jclouds.cloudstack.domain.Zone;
-import org.jclouds.cloudstack.domain.ZoneAndName;
-import org.jclouds.cloudstack.domain.ZoneSecurityGroupNamePortsCidrs;
-import org.jclouds.cloudstack.features.TemplateApi;
-import org.jclouds.cloudstack.functions.CreateFirewallRulesForIP;
-import org.jclouds.cloudstack.functions.CreatePortForwardingRulesForIP;
-import org.jclouds.cloudstack.functions.StaticNATVirtualMachineInNetwork;
-import 
org.jclouds.cloudstack.functions.StaticNATVirtualMachineInNetwork.Factory;
-import org.jclouds.cloudstack.options.DeployVirtualMachineOptions;
-import org.jclouds.cloudstack.options.ListFirewallRulesOptions;
-import org.jclouds.cloudstack.options.ListTemplatesOptions;
-import org.jclouds.cloudstack.strategy.BlockUntilJobCompletesAndReturnResult;
-import org.jclouds.collect.Memoized;
-import org.jclouds.compute.ComputeServiceAdapter;
-import org.jclouds.compute.functions.GroupNamingConvention;
-import org.jclouds.compute.reference.ComputeServiceConstants;
-import org.jclouds.domain.Credentials;
-import org.jclouds.domain.LoginCredentials;
-import org.jclouds.logging.Logger;
-
-import com.google.common.base.Predicate;
-import com.google.common.base.Supplier;
-import com.google.common.cache.LoadingCache;
-import com.google.common.collect.ImmutableSet;
-import com.google.common.collect.ImmutableSet.Builder;
-import com.google.common.collect.Sets;
-import com.google.common.primitives.Ints;
-
-/**
- * defines the connection between the {@link CloudStackApi} implementation
- * and the jclouds {@link ComputeService}
- */
-@Singleton
-public class CloudStackComputeServiceAdapter implements
-   ComputeServiceAdapter<VirtualMachine, ServiceOffering, Template, Zone> {
-
-   @Resource
-   @Named(ComputeServiceConstants.COMPUTE_LOGGER)
-   protected Logger logger = Logger.NULL;
-
-   private final CloudStackApi client;
-   private final Predicate<String> jobComplete;
-   private final Supplier<Map<String, Network>> networkSupplier;
-   private final Supplier<Map<String, Project>> projectSupplier;
-   private final BlockUntilJobCompletesAndReturnResult 
blockUntilJobCompletesAndReturnResult;
-   private final Factory staticNATVMInNetwork;
-   private final CreatePortForwardingRulesForIP setupPortForwardingRulesForIP;
-   private final CreateFirewallRulesForIP setupFirewallRulesForIP;
-   private final LoadingCache<String, Set<IPForwardingRule>> vmToRules;
-   private final Map<String, Credentials> credentialStore;
-   private final Map<NetworkType, ? extends OptionsConverter> 
optionsConverters;
-   private final Supplier<LoadingCache<String, Zone>> zoneIdToZone;
-   private final LoadingCache<ZoneAndName, SecurityGroup> securityGroupCache;
-   private final LoadingCache<String, SshKeyPair> keyPairCache;
-   private final GroupNamingConvention.Factory namingConvention;
-
-   @Inject
-   public CloudStackComputeServiceAdapter(CloudStackApi client, 
Predicate<String> jobComplete,
-                                          @Memoized Supplier<Map<String, 
Network>> networkSupplier,
-                                          @Memoized Supplier<Map<String, 
Project>> projectSupplier,
-                                          
BlockUntilJobCompletesAndReturnResult blockUntilJobCompletesAndReturnResult,
-                                          
StaticNATVirtualMachineInNetwork.Factory staticNATVMInNetwork,
-                                          CreatePortForwardingRulesForIP 
setupPortForwardingRulesForIP,
-                                          CreateFirewallRulesForIP 
setupFirewallRulesForIP,
-                                          LoadingCache<String, 
Set<IPForwardingRule>> vmToRules,
-                                          Map<String, Credentials> 
credentialStore,
-                                          Map<NetworkType, ? extends 
OptionsConverter> optionsConverters,
-                                          Supplier<LoadingCache<String, Zone>> 
zoneIdToZone,
-                                          LoadingCache<ZoneAndName, 
SecurityGroup> securityGroupCache,
-                                          LoadingCache<String, SshKeyPair> 
keyPairCache,
-                                          GroupNamingConvention.Factory 
namingConvention) {
-      this.client = checkNotNull(client, "client");
-      this.jobComplete = checkNotNull(jobComplete, "jobComplete");
-      this.networkSupplier = checkNotNull(networkSupplier, "networkSupplier");
-      this.projectSupplier = checkNotNull(projectSupplier, "projectSupplier");
-      this.blockUntilJobCompletesAndReturnResult = 
checkNotNull(blockUntilJobCompletesAndReturnResult,
-         "blockUntilJobCompletesAndReturnResult");
-      this.staticNATVMInNetwork = checkNotNull(staticNATVMInNetwork, 
"staticNATVMInNetwork");
-      this.setupPortForwardingRulesForIP = 
checkNotNull(setupPortForwardingRulesForIP, "setupPortForwardingRulesForIP");
-      this.setupFirewallRulesForIP = checkNotNull(setupFirewallRulesForIP, 
"setupFirewallRulesForIP");
-      this.vmToRules = checkNotNull(vmToRules, "vmToRules");
-      this.credentialStore = checkNotNull(credentialStore, "credentialStore");
-      this.securityGroupCache = checkNotNull(securityGroupCache, 
"securityGroupCache");
-      this.keyPairCache = checkNotNull(keyPairCache, "keyPairCache");
-      this.optionsConverters = optionsConverters;
-      this.zoneIdToZone = zoneIdToZone;
-      this.namingConvention = namingConvention;
-   }
-
-   @Override
-   public NodeAndInitialCredentials<VirtualMachine> 
createNodeWithGroupEncodedIntoName(String group, String name,
-                                                                               
        org.jclouds.compute.domain.Template template) {
-
-      checkNotNull(template, "template was null");
-      checkNotNull(template.getOptions(), "template options was null");
-      
checkArgument(template.getOptions().getClass().isAssignableFrom(CloudStackTemplateOptions.class),
-         "options class %s should have been assignable from 
CloudStackTemplateOptions", template.getOptions()
-         .getClass());
-      Map<String, Network> networks = networkSupplier.get();
-
-      final String zoneId = template.getLocation().getId();
-      Zone zone = zoneIdToZone.get().getUnchecked(zoneId);
-
-      CloudStackTemplateOptions templateOptions = 
template.getOptions().as(CloudStackTemplateOptions.class);
-
-      checkState(optionsConverters.containsKey(zone.getNetworkType()), "no 
options converter configured for network type %s", zone.getNetworkType());
-      DeployVirtualMachineOptions options = displayName(name).name(name);
-      if (templateOptions.getAccount() != null) {
-          options.accountInDomain(templateOptions.getAccount(), 
templateOptions.getDomainId());
-      } else if (templateOptions.getDomainId() != null) {
-          options.domainId(templateOptions.getDomainId());
-      }
-
-      OptionsConverter optionsConverter = 
optionsConverters.get(zone.getNetworkType());
-      options = optionsConverter.apply(templateOptions, networks, zoneId, 
options);
-
-      options.group(group);
-
-      if (templateOptions.getIpOnDefaultNetwork() != null) {
-         options.ipOnDefaultNetwork(templateOptions.getIpOnDefaultNetwork());
-      }
-
-      if (!templateOptions.getIpsToNetworks().isEmpty()) {
-         options.ipsToNetworks(templateOptions.getIpsToNetworks());
-      }
-
-      if (templateOptions.getKeyPair() != null) {
-         SshKeyPair keyPair = null;
-         if (templateOptions.getLoginPrivateKey() != null) {
-            String pem = templateOptions.getLoginPrivateKey();
-            keyPair = SshKeyPair.builder().name(templateOptions.getKeyPair())
-               
.fingerprint(fingerprintPrivateKey(pem)).privateKey(pem).build();
-            keyPairCache.asMap().put(keyPair.getName(), keyPair);
-            options.keyPair(keyPair.getName());
-         } else if 
(client.getSSHKeyPairApi().getSSHKeyPair(templateOptions.getKeyPair()) != null) 
{
-            keyPair = 
client.getSSHKeyPairApi().getSSHKeyPair(templateOptions.getKeyPair());
-         }
-         if (keyPair != null) {
-            keyPairCache.asMap().put(keyPair.getName(), keyPair);
-            options.keyPair(keyPair.getName());
-         }
-      } else if (templateOptions.shouldGenerateKeyPair()) {
-         SshKeyPair keyPair = 
keyPairCache.getUnchecked(namingConvention.create()
-                                                        
.sharedNameForGroup(group));
-         keyPairCache.asMap().put(keyPair.getName(), keyPair);
-         templateOptions.keyPair(keyPair.getName());
-         options.keyPair(keyPair.getName());
-      }
-
-      if (templateOptions.getDiskOfferingId() != null) {
-         options.diskOfferingId(templateOptions.getDiskOfferingId());
-         if (templateOptions.getDataDiskSize() > 0) {
-            options.dataDiskSize(templateOptions.getDataDiskSize());
-         }
-      }
-
-      if (supportsSecurityGroups().apply(zone)) {
-         List<Integer> inboundPorts = 
Ints.asList(templateOptions.getInboundPorts());
-
-         if (templateOptions.getSecurityGroupIds().isEmpty()
-             && !inboundPorts.isEmpty()
-             && templateOptions.shouldGenerateSecurityGroup()) {
-            String securityGroupName = 
namingConvention.create().sharedNameForGroup(group);
-            SecurityGroup sg = 
securityGroupCache.getUnchecked(ZoneSecurityGroupNamePortsCidrs.builder()
-                                                               
.zone(zone.getId())
-                                                               
.name(securityGroupName)
-                                                               
.ports(ImmutableSet.copyOf(inboundPorts))
-                                                               
.cidrs(ImmutableSet.<String> of()).build());
-            options.securityGroupId(sg.getId());
-         }
-      }
-
-      String templateId = template.getImage().getId();
-      String serviceOfferingId = template.getHardware().getId();
-
-      logger.debug("serviceOfferingId %s, templateId %s, zoneId %s, options 
%s%n", serviceOfferingId, templateId,
-         zoneId, options);
-      AsyncCreateResponse job = 
client.getVirtualMachineApi().deployVirtualMachineInZone(zoneId, 
serviceOfferingId,
-         templateId, options);
-      VirtualMachine vm = 
blockUntilJobCompletesAndReturnResult.<VirtualMachine>apply(job);
-      logger.debug("--- virtualmachine: %s", vm);
-      LoginCredentials.Builder credentialsBuilder = LoginCredentials.builder();
-      if (templateOptions.getKeyPair() != null) {
-         SshKeyPair keyPair = 
keyPairCache.getUnchecked(templateOptions.getKeyPair());
-         credentialsBuilder.privateKey(keyPair.getPrivateKey());
-      } else if (vm.isPasswordEnabled()) {
-         assert vm.getPassword() != null : vm;
-         credentialsBuilder.password(vm.getPassword());
-      }
-
-      try {
-          if (templateOptions.shouldSetupStaticNat()) {
-             Capabilities capabilities = 
client.getConfigurationApi().listCapabilities();
-             // TODO: possibly not all network ids, do we want to do this
-             for (String networkId : options.getNetworkIds()) {
-                logger.debug(">> creating static NAT for virtualMachine(%s) in 
network(%s)", vm.getId(), networkId);
-                PublicIPAddress ip = 
staticNATVMInNetwork.create(networks.get(networkId)).apply(vm);
-                logger.trace("<< static NATed IPAddress(%s) to 
virtualMachine(%s)", ip.getId(), vm.getId());
-                vm = 
client.getVirtualMachineApi().getVirtualMachine(vm.getId());
-                List<Integer> ports = 
Ints.asList(templateOptions.getInboundPorts());
-                if (capabilities.getCloudStackVersion().startsWith("2")) {
-                   logger.debug(">> setting up IP forwarding for IPAddress(%s) 
rules(%s)", ip.getId(), ports);
-                   Set<IPForwardingRule> rules = 
setupPortForwardingRulesForIP.apply(ip, ports);
-                   logger.trace("<< setup %d IP forwarding rules on 
IPAddress(%s)", rules.size(), ip.getId());
-                } else {
-                   logger.debug(">> setting up firewall rules for 
IPAddress(%s) rules(%s)", ip.getId(), ports);
-                   Set<FirewallRule> rules = setupFirewallRulesForIP.apply(ip, 
ports);
-                   logger.trace("<< setup %d firewall rules on IPAddress(%s)", 
rules.size(), ip.getId());
-                }
-             }
-          }
-      } catch (RuntimeException re) {
-          logger.error("-- exception after node has been created, trying to 
destroy the created virtualMachine(%s)", vm.getId());
-          try {
-              destroyNode(vm.getId());
-          } catch (RuntimeException re2) {
-              logger.debug("-- exception in exceptionHandler while executing 
destroyNode for virtualMachine(%s), ignoring and rethrowing original 
exception", vm.getId());
-          }
-          throw re;
-      }
-      return new NodeAndInitialCredentials<VirtualMachine>(vm, vm.getId() + 
"", credentialsBuilder.build());
-   }
-
-   @Override
-   public Iterable<ServiceOffering> listHardwareProfiles() {
-      // TODO: we may need to filter these
-      return client.getOfferingApi().listServiceOfferings();
-   }
-
-   @Override
-   public Iterable<Template> listImages() {
-      TemplateApi templateApi = client.getTemplateApi();
-      ImmutableSet.Builder<Template> templates = ImmutableSet.builder();
-      templates.addAll(templateApi.listTemplates());
-      for (String project : projectSupplier.get().keySet()) {
-         
templates.addAll(templateApi.listTemplates(ListTemplatesOptions.Builder.projectId(project)));
-      }
-
-      return filter(templates.build(), isReady());
-   }
-
-   @Override
-   public Template getImage(String id) {
-      return get(client.getTemplateApi().listTemplates(id(id)), 0, null);
-   }
-
-   @Override
-   public Iterable<VirtualMachine> listNodes() {
-      return client.getVirtualMachineApi().listVirtualMachines();
-   }
-
-   @Override
-   public Iterable<VirtualMachine> listNodesByIds(final Iterable<String> ids) {
-      return filter(listNodes(), new Predicate<VirtualMachine>() {
-
-            @Override
-            public boolean apply(VirtualMachine vm) {
-               return contains(ids, vm.getId());
-            }
-         });
-   }
-
-   @Override
-   public Iterable<Zone> listLocations() {
-      // TODO: we may need to filter these
-      return client.getZoneApi().listZones();
-   }
-
-   @Override
-   public VirtualMachine getNode(String id) {
-      String virtualMachineId = id;
-      return client.getVirtualMachineApi().getVirtualMachine(virtualMachineId);
-   }
-
-   @Override
-   public void destroyNode(String id) {
-      String virtualMachineId = id;
-      // There was a bug in 2.2.12 release happening when static nat IP address
-      // was being released, and corresponding firewall rules were left behind.
-      // So next time the same IP is allocated, it might be not be static nat
-      // enabled, but there are still rules associated with it. And when you 
try
-      // to release this IP, the release will fail.
-      //
-      // The bug was fixed in 2.2.13 release only, and the current system 
wasn't
-      // updated yet.
-      //
-      // To avoid the issue, every time you release a static nat ip address, do
-      // the following:
-
-      // 1) Delete IP forwarding rules associated with IP.
-      Set<String> ipAddresses = 
deleteIPForwardingRulesForVMAndReturnDistinctIPs(virtualMachineId);
-
-      // 2) Delete firewall rules associated with IP.
-      
ipAddresses.addAll(deleteFirewallRulesForVMAndReturnDistinctIPs(virtualMachineId));
-
-      // 3) Disable static nat rule for the IP.
-      disableStaticNATOnIPAddresses(ipAddresses);
-
-      // 4) Only after 1 and 2 release the IP address.
-      disassociateIPAddresses(ipAddresses);
-
-      destroyVirtualMachine(virtualMachineId);
-
-      vmToRules.invalidate(virtualMachineId);
-   }
-
-   public void disassociateIPAddresses(Set<String> ipAddresses) {
-      for (String ipAddress : ipAddresses) {
-         logger.debug(">> disassociating IPAddress(%s)", ipAddress);
-         client.getAddressApi().disassociateIPAddress(ipAddress);
-      }
-   }
-
-   public void destroyVirtualMachine(String virtualMachineId) {
-
-      String destroyVirtualMachine = 
client.getVirtualMachineApi().destroyVirtualMachine(virtualMachineId);
-      if (destroyVirtualMachine != null) {
-         logger.debug(">> destroying virtualMachine(%s) job(%s)", 
virtualMachineId, destroyVirtualMachine);
-         awaitCompletion(destroyVirtualMachine);
-      } else {
-         logger.trace("<< virtualMachine(%s) not found", virtualMachineId);
-      }
-
-   }
-
-   public void disableStaticNATOnIPAddresses(Set<String> ipAddresses) {
-      Builder<String> jobsToTrack = ImmutableSet.builder();
-      for (String ipAddress : ipAddresses) {
-         String disableStaticNAT = 
client.getNATApi().disableStaticNATOnPublicIP(ipAddress);
-         if (disableStaticNAT != null) {
-            logger.debug(">> disabling static NAT IPAddress(%s) job(%s)", 
ipAddress, disableStaticNAT);
-            jobsToTrack.add(disableStaticNAT);
-         }
-      }
-      awaitCompletion(jobsToTrack.build());
-   }
-
-   public Set<String> deleteIPForwardingRulesForVMAndReturnDistinctIPs(String 
virtualMachineId) {
-      Builder<String> jobsToTrack = ImmutableSet.builder();
-
-      // immutable doesn't permit duplicates
-      Set<String> ipAddresses = Sets.newLinkedHashSet();
-
-      Set<IPForwardingRule> forwardingRules = 
client.getNATApi().getIPForwardingRulesForVirtualMachine(
-         virtualMachineId);
-      for (IPForwardingRule rule : forwardingRules) {
-         if (!"Deleting".equals(rule.getState())) {
-            ipAddresses.add(rule.getIPAddressId());
-            String deleteForwardingRule = 
client.getNATApi().deleteIPForwardingRule(rule.getId());
-            if (deleteForwardingRule != null) {
-               logger.debug(">> deleting IPForwardingRule(%s) job(%s)", 
rule.getId(), deleteForwardingRule);
-               jobsToTrack.add(deleteForwardingRule);
-            }
-         }
-      }
-      awaitCompletion(jobsToTrack.build());
-      return ipAddresses;
-   }
-
-   public Set<String> deleteFirewallRulesForVMAndReturnDistinctIPs(String 
virtualMachineId) {
-      // immutable doesn't permit duplicates
-      Set<String> ipAddresses = Sets.newLinkedHashSet();
-
-      String publicIpId = 
client.getVirtualMachineApi().getVirtualMachine(virtualMachineId).getPublicIPId();
-      if (publicIpId != null) {
-         Set<FirewallRule> firewallRules = client.getFirewallApi()
-            
.listFirewallRules(ListFirewallRulesOptions.Builder.ipAddressId(client.getVirtualMachineApi().getVirtualMachine(virtualMachineId).getPublicIPId()));
-
-         for (FirewallRule rule : firewallRules) {
-            if (rule.getState() != FirewallRule.State.DELETING) {
-               ipAddresses.add(rule.getIpAddressId());
-               client.getFirewallApi().deleteFirewallRule(rule.getId());
-               logger.debug(">> deleting FirewallRule(%s)", rule.getId());
-            }
-         }
-      }
-      return ipAddresses;
-   }
-
-   public void awaitCompletion(Iterable<String> jobs) {
-      logger.debug(">> awaiting completion of jobs(%s)", jobs);
-      for (String job : jobs)
-         awaitCompletion(job);
-      logger.trace("<< completed jobs(%s)", jobs);
-   }
-
-   public void awaitCompletion(String job) {
-      boolean completed = jobComplete.apply(job);
-      logger.trace("<< job(%s) complete(%s)", job, completed);
-   }
-
-   @Override
-   public void rebootNode(String id) {
-      String virtualMachineId = id;
-      String job = 
client.getVirtualMachineApi().rebootVirtualMachine(virtualMachineId);
-      if (job != null) {
-         logger.debug(">> rebooting virtualMachine(%s) job(%s)", 
virtualMachineId, job);
-         awaitCompletion(job);
-      }
-   }
-
-   @Override
-   public void resumeNode(String id) {
-      String virtualMachineId = id;
-      String job = client.getVirtualMachineApi().startVirtualMachine(id);
-      if (job != null) {
-         logger.debug(">> starting virtualMachine(%s) job(%s)", 
virtualMachineId, job);
-         awaitCompletion(job);
-      }
-   }
-
-   @Override
-   public void suspendNode(String id) {
-      String virtualMachineId = id;
-      String job = client.getVirtualMachineApi().stopVirtualMachine(id);
-      if (job != null) {
-         logger.debug(">> stopping virtualMachine(%s) job(%s)", 
virtualMachineId, job);
-         awaitCompletion(job);
-      }
-   }
-
-}

http://git-wip-us.apache.org/repos/asf/stratos/blob/1d88fdf4/dependencies/jclouds/apis/cloudstack/1.8.0-stratos/src/main/java/org/jclouds/cloudstack/compute/strategy/OptionsConverter.java
----------------------------------------------------------------------
diff --git 
a/dependencies/jclouds/apis/cloudstack/1.8.0-stratos/src/main/java/org/jclouds/cloudstack/compute/strategy/OptionsConverter.java
 
b/dependencies/jclouds/apis/cloudstack/1.8.0-stratos/src/main/java/org/jclouds/cloudstack/compute/strategy/OptionsConverter.java
deleted file mode 100644
index 4cc6b9f..0000000
--- 
a/dependencies/jclouds/apis/cloudstack/1.8.0-stratos/src/main/java/org/jclouds/cloudstack/compute/strategy/OptionsConverter.java
+++ /dev/null
@@ -1,43 +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.cloudstack.compute.strategy;
-
-import java.util.Map;
-
-import org.jclouds.cloudstack.compute.options.CloudStackTemplateOptions;
-import org.jclouds.cloudstack.domain.Network;
-import org.jclouds.cloudstack.options.DeployVirtualMachineOptions;
-
-/**
- * Convert template options into DeployVirtualMachineOptions. Expressed as an 
interface, because in
- * CloudStack different zone network types have different requirements when it 
comes to networks and
- * security groups.
- */
-public interface OptionsConverter {
-
-   /**
-    * Convert a CloudStackTemplateOptions and apply to a 
DeployVirtualMachineOptions instance.
-    *
-    * @param templateOptions the input set of options
-    * @param networks the networks available
-    * @param zoneId the zone of the new virtual machine
-    * @param options where the resulting set of options will be applied
-    * @return same as "options" parameter
-    */
-   DeployVirtualMachineOptions apply(CloudStackTemplateOptions 
templateOptions, Map<String, Network> networks, String zoneId, 
DeployVirtualMachineOptions options);
-
-}

http://git-wip-us.apache.org/repos/asf/stratos/blob/1d88fdf4/dependencies/jclouds/apis/cloudstack/1.8.0-stratos/src/main/java/org/jclouds/cloudstack/config/CloudStackHttpApiModule.java
----------------------------------------------------------------------
diff --git 
a/dependencies/jclouds/apis/cloudstack/1.8.0-stratos/src/main/java/org/jclouds/cloudstack/config/CloudStackHttpApiModule.java
 
b/dependencies/jclouds/apis/cloudstack/1.8.0-stratos/src/main/java/org/jclouds/cloudstack/config/CloudStackHttpApiModule.java
deleted file mode 100644
index 95f186e..0000000
--- 
a/dependencies/jclouds/apis/cloudstack/1.8.0-stratos/src/main/java/org/jclouds/cloudstack/config/CloudStackHttpApiModule.java
+++ /dev/null
@@ -1,154 +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.cloudstack.config;
-
-import static org.jclouds.rest.config.BinderUtils.bindHttpApi;
-
-import java.util.concurrent.TimeUnit;
-
-import org.jclouds.Constants;
-import org.jclouds.cloudstack.CloudStackApi;
-import org.jclouds.cloudstack.CloudStackDomainApi;
-import org.jclouds.cloudstack.CloudStackGlobalApi;
-import org.jclouds.cloudstack.domain.LoginResponse;
-import org.jclouds.cloudstack.features.SessionApi;
-import org.jclouds.cloudstack.filters.AddSessionKeyAndJSessionIdToRequest;
-import org.jclouds.cloudstack.filters.AuthenticationFilter;
-import org.jclouds.cloudstack.filters.QuerySigner;
-import org.jclouds.cloudstack.handlers.CloudStackErrorHandler;
-import 
org.jclouds.cloudstack.handlers.InvalidateSessionAndRetryOn401AndLogoutOnClose;
-import org.jclouds.cloudstack.loaders.LoginWithPasswordCredentials;
-import org.jclouds.domain.Credentials;
-import org.jclouds.http.HttpErrorHandler;
-import org.jclouds.http.HttpRetryHandler;
-import org.jclouds.http.annotation.ClientError;
-import org.jclouds.http.annotation.Redirection;
-import org.jclouds.http.annotation.ServerError;
-import org.jclouds.location.Provider;
-import org.jclouds.location.suppliers.ImplicitLocationSupplier;
-import org.jclouds.location.suppliers.implicit.OnlyLocationOrFirstZone;
-import org.jclouds.rest.ConfiguresHttpApi;
-import org.jclouds.rest.ApiContext;
-import org.jclouds.rest.config.HttpApiModule;
-import org.jclouds.rest.internal.ApiContextImpl;
-
-import com.google.common.base.Supplier;
-import com.google.common.cache.CacheBuilder;
-import com.google.common.cache.LoadingCache;
-import com.google.inject.Inject;
-import com.google.inject.Provides;
-import com.google.inject.Scopes;
-import com.google.inject.Singleton;
-import com.google.inject.TypeLiteral;
-import com.google.inject.name.Named;
-
-/**
- * Configures the cloudstack connection.
- */
-@ConfiguresHttpApi
-public class CloudStackHttpApiModule extends HttpApiModule<CloudStackApi> {
-
-   @Override
-   protected void configure() {
-      bind(new TypeLiteral<ApiContext<CloudStackDomainApi>>() {
-      }).to(new TypeLiteral<ApiContextImpl<CloudStackDomainApi>>() {
-      });
-      bind(new TypeLiteral<ApiContext<CloudStackGlobalApi>>() {
-      }).to(new TypeLiteral<ApiContextImpl<CloudStackGlobalApi>>() {
-      });
-      
bind(CredentialType.class).toProvider(CredentialTypeFromPropertyOrDefault.class);
-      // session client is used directly for filters and retry handlers, so 
let's bind it explicitly
-      bindHttpApi(binder(), SessionApi.class);
-      bindHttpApi(binder(), CloudStackDomainApi.class);
-      bindHttpApi(binder(), CloudStackGlobalApi.class);
-      
bind(HttpRetryHandler.class).annotatedWith(ClientError.class).to(InvalidateSessionAndRetryOn401AndLogoutOnClose.class);
-      
-      super.configure();
-   }
-
-   @Override
-   protected void installLocations() {
-      super.installLocations();
-      
bind(ImplicitLocationSupplier.class).to(OnlyLocationOrFirstZone.class).in(Scopes.SINGLETON);
-   }
-
-   @Override
-   protected void bindErrorHandlers() {
-      
bind(HttpErrorHandler.class).annotatedWith(Redirection.class).to(CloudStackErrorHandler.class);
-      
bind(HttpErrorHandler.class).annotatedWith(ClientError.class).to(CloudStackErrorHandler.class);
-      
bind(HttpErrorHandler.class).annotatedWith(ServerError.class).to(CloudStackErrorHandler.class);
-   }
-
-   @Singleton
-   static class CredentialTypeFromPropertyOrDefault implements 
javax.inject.Provider<CredentialType> {
-      /**
-       * use optional injection to supply a default value for credential type. 
so that we don't have
-       * to set a default property.
-       */
-      @Inject(optional = true)
-      @Named(CloudStackProperties.CREDENTIAL_TYPE)
-      String credentialType = 
CredentialType.API_ACCESS_KEY_CREDENTIALS.toString();
-
-      @Override
-      public CredentialType get() {
-         return CredentialType.fromValue(credentialType);
-      }
-   }
-
-   /**
-    * we use the type of credentials specified at login to determine which way 
we want to filter the
-    * request. <br/>
-    * for ex, if we are getting passwords, we know we will need to 
login/logout. Otherwise we are
-    * signing requests.
-    */
-   @Provides
-   @Singleton
-   protected AuthenticationFilter 
authenticationFilterForCredentialType(CredentialType credentialType,
-            AddSessionKeyAndJSessionIdToRequest 
addSessionKeyAndJSessionIdToRequest, QuerySigner querySigner) {
-      switch (credentialType) {
-         case PASSWORD_CREDENTIALS:
-            return addSessionKeyAndJSessionIdToRequest;
-         case API_ACCESS_KEY_CREDENTIALS:
-            return querySigner;
-         default:
-            throw new IllegalArgumentException("credential type not supported: 
" + credentialType);
-      }
-   }
-
-   // PROPERTY_SESSION_INTERVAL is default to 60 seconds
-   @Provides
-   @Singleton
-   protected LoadingCache<Credentials, LoginResponse> 
provideLoginResponseCache(
-            LoginWithPasswordCredentials getLoginResponse,
-            @Named(Constants.PROPERTY_SESSION_INTERVAL) int seconds) {
-      return CacheBuilder.newBuilder().expireAfterWrite(seconds, 
TimeUnit.SECONDS).build(getLoginResponse);
-   }
-
-   // Temporary conversion of a cache to a supplier until there is a 
single-element cache
-   // http://code.google.com/p/guava-libraries/issues/detail?id=872
-   @Provides
-   @Singleton
-   protected Supplier<LoginResponse> provideLoginResponseSupplier(final 
LoadingCache<Credentials, LoginResponse> cache,
-         @Provider final Supplier<Credentials> creds) {
-      return new Supplier<LoginResponse>() {
-         @Override
-         public LoginResponse get() {
-            return cache.getUnchecked(creds.get());
-         }
-      };
-   }
-}

http://git-wip-us.apache.org/repos/asf/stratos/blob/1d88fdf4/dependencies/jclouds/apis/cloudstack/1.8.0-stratos/src/main/java/org/jclouds/cloudstack/config/CloudStackParserModule.java
----------------------------------------------------------------------
diff --git 
a/dependencies/jclouds/apis/cloudstack/1.8.0-stratos/src/main/java/org/jclouds/cloudstack/config/CloudStackParserModule.java
 
b/dependencies/jclouds/apis/cloudstack/1.8.0-stratos/src/main/java/org/jclouds/cloudstack/config/CloudStackParserModule.java
deleted file mode 100644
index ab1fac0..0000000
--- 
a/dependencies/jclouds/apis/cloudstack/1.8.0-stratos/src/main/java/org/jclouds/cloudstack/config/CloudStackParserModule.java
+++ /dev/null
@@ -1,105 +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.cloudstack.config;
-
-import java.io.IOException;
-import java.util.Date;
-
-import javax.inject.Inject;
-
-import org.jclouds.date.DateService;
-import org.jclouds.json.config.GsonModule.DateAdapter;
-import org.jclouds.json.config.GsonModule.Iso8601DateAdapter;
-import 
org.jclouds.json.internal.NullFilteringTypeAdapterFactories.IterableTypeAdapter;
-import 
org.jclouds.json.internal.NullFilteringTypeAdapterFactories.IterableTypeAdapterFactory;
-
-import com.google.common.base.Splitter;
-import com.google.common.base.Strings;
-import com.google.common.collect.ImmutableSet;
-import com.google.gson.TypeAdapter;
-import com.google.gson.stream.JsonReader;
-import com.google.gson.stream.JsonToken;
-import com.google.gson.stream.JsonWriter;
-import com.google.inject.AbstractModule;
-
-public class CloudStackParserModule extends AbstractModule {
-
-   @Override
-   protected void configure() {
-      bind(DateAdapter.class).to(CloudStackDateAdapter.class);
-      
bind(IterableTypeAdapterFactory.class).to(CommaDelimitedOKIterableTypeAdapterFactory.class);
-   }
-
-   /**
-    * Data adapter for the date formats used by CloudStack.
-    * 
-    * Essentially this is a workaround for the CloudStack getUsage() API call 
returning a corrupted form of ISO-8601
-    * dates, which have an unexpected pair of apostrophes, like 
2011-12-12'T'00:00:00+00:00
-    * 
-    */
-   public static class CloudStackDateAdapter extends Iso8601DateAdapter {
-
-      @Inject
-      private CloudStackDateAdapter(DateService dateService) {
-         super(dateService);
-      }
-
-      public Date read(JsonReader reader) throws IOException {
-         return parseDate(reader.nextString().replaceAll("'T'", "T"));
-      }
-
-   }
-
-   /**
-    * Handles types that were previously strings and now arrays (ex. tags)
-    * 
-    */
-   public static class CommaDelimitedOKIterableTypeAdapterFactory extends 
IterableTypeAdapterFactory {
-
-      @Override
-      @SuppressWarnings("unchecked")
-      protected <E, I> TypeAdapter<I> newAdapter(TypeAdapter<E> 
elementAdapter) {
-         return (TypeAdapter<I>) new Adapter<E>(elementAdapter);
-      }
-
-      public static final class Adapter<E> extends TypeAdapter<Iterable<E>> {
-
-         private final IterableTypeAdapter<E> delegate;
-
-         public Adapter(TypeAdapter<E> elementAdapter) {
-            this.delegate = new IterableTypeAdapter<E>(elementAdapter);
-            nullSafe();
-         }
-
-         public void write(JsonWriter out, Iterable<E> value) throws 
IOException {
-            this.delegate.write(out, value);
-         }
-
-         @SuppressWarnings("unchecked")
-         @Override
-         public Iterable<E> read(JsonReader in) throws IOException {
-            // HACK as cloudstack changed a field from String to Set!
-            if (in.peek() == JsonToken.STRING) {
-               String val = Strings.emptyToNull(in.nextString());
-               return (Iterable<E>) (val != null ? Splitter.on(',').split(val) 
: ImmutableSet.of());
-            } else {
-               return delegate.read(in);
-            }
-         }
-      }
-   }
-}

http://git-wip-us.apache.org/repos/asf/stratos/blob/1d88fdf4/dependencies/jclouds/apis/cloudstack/1.8.0-stratos/src/main/java/org/jclouds/cloudstack/config/CloudStackProperties.java
----------------------------------------------------------------------
diff --git 
a/dependencies/jclouds/apis/cloudstack/1.8.0-stratos/src/main/java/org/jclouds/cloudstack/config/CloudStackProperties.java
 
b/dependencies/jclouds/apis/cloudstack/1.8.0-stratos/src/main/java/org/jclouds/cloudstack/config/CloudStackProperties.java
deleted file mode 100644
index e123847..0000000
--- 
a/dependencies/jclouds/apis/cloudstack/1.8.0-stratos/src/main/java/org/jclouds/cloudstack/config/CloudStackProperties.java
+++ /dev/null
@@ -1,52 +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.cloudstack.config;
-
-
-/**
- * Configuration properties and constants used in CloudStack connections.
- */
-public final class CloudStackProperties {
-
-   /**
-    * Type of credentials specified during {@link 
ComputeServiceContextBuilder#overrides}. If
-    * {@link CredentialType#API_ACCESS_KEY_CREDENTIALS}, the request signing 
is used. If
-    * {@link CredentialType#PASSWORD_CREDENTIALS}, login will happen and a 
session will be
-    * persisted.
-    * 
-    * <h3>valid values</h3>
-    * <ul>
-    * <li>apiAccessKeyCredentials</li>
-    * <li>passwordCredentials</li>
-    * </ul>
-    * 
-    * @see CredentialType
-    * @see <a 
href="http://docs.cloud.com/CloudStack_Documentation/Customizing_the_CloudStack_UI#Cross_Site_Request_Forgery_%28CSRF%29";
-    *      />
-    */
-   public static final String CREDENTIAL_TYPE = 
"jclouds.cloudstack.credential-type";
-
-   /**
-    * Whenever a node is created, automatically generate keypairs for groups, 
as needed, also
-    * delete the keypair(s) when the last node in the group is destroyed.
-    */
-   public static final String AUTO_GENERATE_KEYPAIRS = 
"jclouds.cloudstack.auto-generate-keypairs";
-
-   private CloudStackProperties() {
-      throw new AssertionError("intentionally unimplemented");
-   }
-}

http://git-wip-us.apache.org/repos/asf/stratos/blob/1d88fdf4/dependencies/jclouds/apis/cloudstack/1.8.0-stratos/src/main/java/org/jclouds/cloudstack/config/CredentialType.java
----------------------------------------------------------------------
diff --git 
a/dependencies/jclouds/apis/cloudstack/1.8.0-stratos/src/main/java/org/jclouds/cloudstack/config/CredentialType.java
 
b/dependencies/jclouds/apis/cloudstack/1.8.0-stratos/src/main/java/org/jclouds/cloudstack/config/CredentialType.java
deleted file mode 100644
index 628e96c..0000000
--- 
a/dependencies/jclouds/apis/cloudstack/1.8.0-stratos/src/main/java/org/jclouds/cloudstack/config/CredentialType.java
+++ /dev/null
@@ -1,42 +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.cloudstack.config;
-
-import static com.google.common.base.Preconditions.checkNotNull;
-
-import com.google.common.base.CaseFormat;
-
-/**
- * Decides what type of credentials createContext is supplied with.
- */
-public enum CredentialType {
-
-   API_ACCESS_KEY_CREDENTIALS,
-
-   PASSWORD_CREDENTIALS;
-
-   @Override
-   public String toString() {
-      return CaseFormat.UPPER_UNDERSCORE.to(CaseFormat.LOWER_CAMEL, name());
-   }
-
-   public static CredentialType fromValue(String credentialType) {
-      return valueOf(CaseFormat.LOWER_CAMEL.to(CaseFormat.UPPER_UNDERSCORE, 
checkNotNull(credentialType,
-               "credentialType")));
-   }
-
-}

Reply via email to