You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@brooklyn.apache.org by he...@apache.org on 2016/02/01 18:50:11 UTC
[14/50] [abbrv] brooklyn-server git commit: fixes for AWS VPC issues
fixes for AWS VPC issues
* give a detailed message if we hit the classic/vpc problem
* treat `networkName` as `subnetId` in AWS
* longer timeout for AWS security group creation
* use `eu-central-1` in the default catalog as it gives a default VPC which works best
Project: http://git-wip-us.apache.org/repos/asf/brooklyn-server/repo
Commit: http://git-wip-us.apache.org/repos/asf/brooklyn-server/commit/c7a79283
Tree: http://git-wip-us.apache.org/repos/asf/brooklyn-server/tree/c7a79283
Diff: http://git-wip-us.apache.org/repos/asf/brooklyn-server/diff/c7a79283
Branch: refs/heads/0.7.0-incubating
Commit: c7a7928315dc6f4ab51b7bd4b3df3a7d2766439f
Parents: 53656bd
Author: Alex Heneveld <al...@cloudsoftcorp.com>
Authored: Mon Jun 22 23:11:20 2015 -0700
Committer: Alex Heneveld <al...@cloudsoftcorp.com>
Committed: Wed Jun 24 00:40:34 2015 -0700
----------------------------------------------------------------------
.../jclouds/ComputeServiceRegistryImpl.java | 7 +++++
.../location/jclouds/JcloudsLocation.java | 29 ++++++++++++++++++--
.../location/jclouds/JcloudsLocationConfig.java | 2 +-
.../main/resources/brooklyn/default.catalog.bom | 12 ++++----
4 files changed, 41 insertions(+), 9 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/brooklyn-server/blob/c7a79283/locations/jclouds/src/main/java/brooklyn/location/jclouds/ComputeServiceRegistryImpl.java
----------------------------------------------------------------------
diff --git a/locations/jclouds/src/main/java/brooklyn/location/jclouds/ComputeServiceRegistryImpl.java b/locations/jclouds/src/main/java/brooklyn/location/jclouds/ComputeServiceRegistryImpl.java
index b3da5a6..a1786ec 100644
--- a/locations/jclouds/src/main/java/brooklyn/location/jclouds/ComputeServiceRegistryImpl.java
+++ b/locations/jclouds/src/main/java/brooklyn/location/jclouds/ComputeServiceRegistryImpl.java
@@ -31,6 +31,7 @@ import org.jclouds.Constants;
import org.jclouds.ContextBuilder;
import org.jclouds.compute.ComputeService;
import org.jclouds.compute.ComputeServiceContext;
+import org.jclouds.ec2.reference.EC2Constants;
import org.jclouds.encryption.bouncycastle.config.BouncyCastleCryptoModule;
import org.jclouds.logging.slf4j.config.SLF4JLoggingModule;
import org.jclouds.sshj.config.SshjSshClientModule;
@@ -40,6 +41,7 @@ import org.slf4j.LoggerFactory;
import brooklyn.entity.basic.Sanitizer;
import brooklyn.util.collections.MutableMap;
import brooklyn.util.config.ConfigBag;
+import brooklyn.util.time.Duration;
import com.google.common.base.Predicates;
import com.google.common.collect.ImmutableSet;
@@ -96,6 +98,11 @@ public class ComputeServiceRegistryImpl implements ComputeServiceRegistry, Jclou
* Filter.3.Name=image-type&Filter.3.Value.1=machine&
*/
}
+
+ // occasionally can get com.google.common.util.concurrent.UncheckedExecutionException: java.lang.RuntimeException:
+ // security group eu-central-1/jclouds#brooklyn-bxza-alex-eu-central-shoul-u2jy-nginx-ielm is not available after creating
+ // the default timeout was 500ms so let's raise it in case that helps
+ properties.setProperty(EC2Constants.PROPERTY_EC2_TIMEOUT_SECURITYGROUP_PRESENT, ""+Duration.seconds(30).toMilliseconds());
}
// FIXME Deprecated mechanism, should have a ConfigKey for overrides
http://git-wip-us.apache.org/repos/asf/brooklyn-server/blob/c7a79283/locations/jclouds/src/main/java/brooklyn/location/jclouds/JcloudsLocation.java
----------------------------------------------------------------------
diff --git a/locations/jclouds/src/main/java/brooklyn/location/jclouds/JcloudsLocation.java b/locations/jclouds/src/main/java/brooklyn/location/jclouds/JcloudsLocation.java
index a0d30d4..969d41d 100644
--- a/locations/jclouds/src/main/java/brooklyn/location/jclouds/JcloudsLocation.java
+++ b/locations/jclouds/src/main/java/brooklyn/location/jclouds/JcloudsLocation.java
@@ -53,6 +53,7 @@ import java.util.regex.Pattern;
import javax.annotation.Nullable;
+import org.jclouds.aws.ec2.compute.AWSEC2TemplateOptions;
import org.jclouds.cloudstack.compute.options.CloudStackTemplateOptions;
import org.jclouds.compute.ComputeService;
import org.jclouds.compute.RunNodesException;
@@ -979,10 +980,20 @@ public class JcloudsLocation extends AbstractCloudMachineProvisioningLocation im
// sometimes AWS nodes come up busted (eg ssh not allowed); just throw it back (and maybe try for another one)
boolean destroyNode = (node != null) && Boolean.TRUE.equals(setup.get(DESTROY_ON_FAILURE));
+ if (e.toString().contains("VPCResourceNotSpecified")) {
+ LOG.error("Detected that your EC2 account is a legacy 'classic' account, but the recommended instance type requires VPC. "
+ + "You can specify the 'eu-central-1' region to avoid this problem, or you can specify a classic-compatible instance type, "
+ + "or you can specify a subnet to use with 'networkName' "
+ + "(taking care that the subnet auto-assigns public IP's and allows ingress on all ports, "
+ + "as Brooklyn does not currently configure security groups for non-default VPC's; "
+ + "or setting up Brooklyn to be in the subnet or have a jump host or other subnet access configuration). "
+ + "For more information on VPC vs classic see http://docs.aws.amazon.com/AWSEC2/latest/UserGuide/using-vpc.html.");
+ }
+
LOG.error("Failed to start VM for {}{}: {}",
new Object[] {setup.getDescription(), (destroyNode ? " (destroying "+node+")" : ""), e.getMessage()});
LOG.debug(Throwables.getStackTraceAsString(e));
-
+
if (destroyNode) {
if (machineLocation != null) {
releaseSafely(machineLocation);
@@ -1241,7 +1252,21 @@ public class JcloudsLocation extends AbstractCloudMachineProvisioningLocation im
}})
.put(NETWORK_NAME, new CustomizeTemplateOptions() {
public void apply(TemplateOptions t, ConfigBag props, Object v) {
- t.networks((String)v);
+ if (t instanceof AWSEC2TemplateOptions) {
+ // subnet ID is the sensible interpretation of network name in EC2
+ ((AWSEC2TemplateOptions)t).subnetId((String)v);
+
+ } else {
+ if (t instanceof SoftLayerTemplateOptions) {
+ LOG.warn("networkName may not be supported in SoftLayer; use `templateOptions` with `primaryNetworkComponentNetworkVlanId` or `primaryNetworkBackendComponentNetworkVlanId`");
+ } else if (!(t instanceof CloudStackTemplateOptions) && !(t instanceof NovaTemplateOptions)) {
+ LOG.warn("networkName may not be supported in this cloud; only known to work in CloudStack and OpenStack");
+ }
+
+ // looks like this is only supported in Cloudstack and Openstack
+ // should we log warning if using another cloud?
+ t.networks((String)v);
+ }
}})
.put(DOMAIN_NAME, new CustomizeTemplateOptions() {
public void apply(TemplateOptions t, ConfigBag props, Object v) {
http://git-wip-us.apache.org/repos/asf/brooklyn-server/blob/c7a79283/locations/jclouds/src/main/java/brooklyn/location/jclouds/JcloudsLocationConfig.java
----------------------------------------------------------------------
diff --git a/locations/jclouds/src/main/java/brooklyn/location/jclouds/JcloudsLocationConfig.java b/locations/jclouds/src/main/java/brooklyn/location/jclouds/JcloudsLocationConfig.java
index ab0007a..c37d915 100644
--- a/locations/jclouds/src/main/java/brooklyn/location/jclouds/JcloudsLocationConfig.java
+++ b/locations/jclouds/src/main/java/brooklyn/location/jclouds/JcloudsLocationConfig.java
@@ -193,7 +193,7 @@ public interface JcloudsLocationConfig extends CloudLocationConfig {
public static final ConfigKey<Integer> OVERRIDE_RAM = ConfigKeys.newIntegerConfigKey("overrideRam", "Custom ram value");
public static final ConfigKey<String> NETWORK_NAME = ConfigKeys.newStringConfigKey(
- "networkName", "Network name to specify as template option (e.g. GCE)");
+ "networkName", "Network name or ID where the instance should be created (e.g. the subnet ID in AWS");
/**
* CUSTOM_MACHINE_SETUP_SCRIPT_URL accepts a URL location that points to a shell script.
http://git-wip-us.apache.org/repos/asf/brooklyn-server/blob/c7a79283/usage/cli/src/main/resources/brooklyn/default.catalog.bom
----------------------------------------------------------------------
diff --git a/usage/cli/src/main/resources/brooklyn/default.catalog.bom b/usage/cli/src/main/resources/brooklyn/default.catalog.bom
index 4da8319..70c7d57 100644
--- a/usage/cli/src/main/resources/brooklyn/default.catalog.bom
+++ b/usage/cli/src/main/resources/brooklyn/default.catalog.bom
@@ -59,15 +59,15 @@ brooklyn.catalog:
- type: server
name: My VM
- # location can be `softlayer` or `jclouds:openstack-nova:https://9.9.9.9:9999/v2.0/`,
+ # location can be e.g. `softlayer` or `jclouds:openstack-nova:https://9.9.9.9:9999/v2.0/`,
# or `localhost` or `byon: { nodes: [ 10.0.0.1, 10.0.0.2, 10.0.1.{1,2} ] }`
location:
jclouds:aws-ec2:
- # edit these to use your credential(or delete if credentials specified in brooklyn.properties)
+ # edit these to use your credential (or delete if credentials specified in brooklyn.properties)
identity: <REPLACE>
credential: <REPLACE>
- region: eu-west-1
+ region: eu-central-1
# we want Ubuntu, with a lot of RAM
osFamily: ubuntu
@@ -156,7 +156,7 @@ brooklyn.catalog:
location:
jclouds:aws-ec2:
- region: eu-west-1
+ region: eu-central-1
# edit these (or delete if credentials specified in brooklyn.properties)
identity: <REPLACE>
credential: <REPLACE>
@@ -202,7 +202,7 @@ brooklyn.catalog:
location:
jclouds:aws-ec2:
- region: eu-west-1
+ region: eu-central-1
# edit these (or delete if credentials specified in brooklyn.properties)
identity: <REPLACE>
credential: <REPLACE>
@@ -355,5 +355,5 @@ brooklyn.catalog:
identity: <REPLACE>
credential: <REPLACE>
- region: eu-west-1
+ region: eu-central-1
minRam: 2gb