Skip to content

Instantly share code, notes, and snippets.

View aledsage's full-sized avatar

Aled Sage aledsage

View GitHub Profile
When deploying to Softlayer (in a brooklyn live test), it failed to provision. There were two separate problems (shown in the log snippets below):
1. failed to login to the VM: `doesn't have login details within 3600000ms`
2. failed to delete the VM, when discarding it: softlayer sent back a 500 Internal Server Error `This cancellation could not be processed please contact support.This cancellation could not be processed. Please contact support. There is currently an active transaction.`
```
2016-12-13 12:45:23,293 INFO Creating VM null in JcloudsLocation[softlayer:software-development@pl9nu7srsh]
2016-12-13 12:45:32,963 INFO ignoring auto-generate-keypairs(false) in VM creation because not supported for cloud/type ({})
Manifest-Version: 1.0
Implementation-SHA-1: 41638183a07c9cf0f4866d7f02b8068f926e8c75
Export-Package: io.brooklyn.ambari.agent;uses:="com.google.common.refl
ect,org.apache.brooklyn.util.javalang,org.apache.brooklyn.api.entity,
javax.annotation,org.apache.brooklyn.api.sensor,org.apache.brooklyn.u
til.core.flags,org.apache.brooklyn.api.catalog,org.apache.brooklyn.co
re.sensor,io.brooklyn.ambari,org.apache.brooklyn.core.config,org.apac
he.brooklyn.config,org.apache.brooklyn.entity.java,org.apache.brookly
n.util.core.config,org.apache.brooklyn.entity.software.base,org.apach
e.brooklyn.api.internal,io.brooklyn.ambari.server,org.apache.brooklyn
@aledsage
aledsage / gist:5186734
Created March 18, 2013 12:06
Brooklyn entity creation API
/*
* Below is an example of 0.5.0-M2 code using ApplicationBuilder:
*/
public class MyExample extends ApplicationBuilder {
protected void doBuild() {
MySqlNode mysql = createChild(BasicEntitySpec.newInstance(MySqlNode.class)
.configure(MySqlNode.CREATION_SCRIPT_URL, myUrl));
}
}
@aledsage
aledsage / gist:5095696
Created March 6, 2013 00:28
brooklyn docs build fails
Aleds-MacBook-Pro:docs aled [0.5.0-M2] $./_scripts/build.sh
Configuration from /Users/aled/repos/cloudsoft/brooklyn/docs/_config.yml
Building site: /Users/aled/repos/cloudsoft/brooklyn/docs -> /Users/aled/repos/cloudsoft/brooklyn/docs/_site
Liquid Exception: No such file or directory - /Users/aled/repos/cloudsoft/brooklyn/docs/use/guide/quickstart/eclipse.include.md in ide.md
/Library/Ruby/Gems/1.8/gems/jekyll-0.12.1/bin/../lib/jekyll/convertible.rb:28:in `read'
/Library/Ruby/Gems/1.8/gems/jekyll-0.12.1/bin/../lib/jekyll/convertible.rb:28:in `read_yaml'
/Library/Ruby/Gems/1.8/gems/jekyll-0.12.1/bin/../lib/jekyll/page.rb:24:in `initialize'
/Users/aled/repos/cloudsoft/brooklyn/docs/_plugins/read.rb:51:in `new'
/Users/aled/repos/cloudsoft/brooklyn/docs/_plugins/read.rb:51:in `render'
/Library/Ruby/Gems/1.8/gems/liquid-2.4.1/lib/liquid/block.rb:94:in `render_all'
@aledsage
aledsage / gist:4284263
Created December 14, 2012 10:12
Proposed "feeds" for polling an underlying resource for populating brooklyn attributes
// FROM JBOSS AS 7, polling its http management api
@Override
protected void connectSensors() {
super.connectSensors();
httpFeed = HttpFeed.builder()
.entity(this)
.period(200)
.baseUri(String.format("http://%s:%s/management/subsystem/web/connector/http/read-resource", host, port))
@aledsage
aledsage / gist:3143723
Created July 19, 2012 12:59
Proposed brooklyn Java code to poll an underlying resource, to update attributes (aka sensors) - v2
// See v1 proposal at https://gist.github.com/3122130
//
// This example shows use of a builder pattern to construct an immmutable JmxSensorAdapter
// before passing it to register(...).
//
// Most contentious issues:
// 1. immutability of JmxSensorAdapter
// 2. explicitly passing in entity(...) so can infer the jmx url from its attributes
// 3. use of withObjectName(...) to create a kind of sub-context so subsequent calls to pollAttribute
// don't need to keep repeating the object name
@aledsage
aledsage / gist:3122488
Last active October 7, 2015 06:48
Application-author example
// Application authors write an "ApplicationBuilder"...
// The advantage is that it separates the Entity API from this builder API,
// allowing each API to be optimised for the appropriate role (i.e. top-level
// methods for the common operations so they are easy to find and use).
//
// e.g. aim of ApplicationBuilder is to make it easy to create + configure +
// wire together pre-existing types of entity, and to associate policies with them.
// It uses the "Recipes" of these pre-existing entity types to configure them,
// without worrying about how that implementation handles its children etc.
@aledsage
aledsage / gist:3122497
Last active October 7, 2015 06:48
Entity-author example
/**
* Everyone uses this interface when dealing with MySqlNode instances.
*/
@ImplementedBy(MySqlNodeImpl.class)
public interface MySqlNode extends Entity, Startable {
// Note needs this generic to make sub-classing simple
public static class Recipe<T extends MySqlNode> extends SoftwareProcessEntity.Recipe<T> {
private PortRange port = PortRanges.fromString("3306, 13306+");
private String creationScriptContents;
@aledsage
aledsage / gist:3122130
Created July 16, 2012 11:00
Proposed brooklyn Java code to poll an underlying resource, to update attributes (aka sensors)
// Polls the given JMX attribute every minute; transforms the result from tabular data
// into a java.util.Map and sets the given brooklyn sensor (aka attribute) accordingly.
// The onSuccess is passed the JMX attribute's value.
JmxSensorAdapter jmxAdapter = registry.register(new JmxSensorAdapter());
jmxAdapter.withObjectName(myJmxObjectName)
.pollAttribute(new JmxAttributePollConfig<Map>(MY_BROOKLYN_SENSOR)
.attributeName(myJmxAttributeName)
.period(1, TimeUnit.MINUTES)
.onSuccess(JmxResponseFunctions.tabularDataToMap()));
@aledsage
aledsage / gist:3122026
Created July 16, 2012 10:31
Example brooklyn groovy code to poll an underlying resource, to update attributes (aka sensors)
// Polls a given URL, and uses the HTTP response to set the
// two Brooklyn entity attributes SERVICE_UP and REQUEST_COUNT
def http = sensorRegistry.register(
new HttpSensorAdapter("http://$host:$port/management/subsystem/web/connector/http/read-resource",
period: 200*TimeUnit.MILLISECONDS).
vars("include-runtime":true) )
with(http) {
poll(SERVICE_UP) { responseCode==200 }