Built by Surendra Reddy and his team, PARC’s private cloud has already hit the headlines in Business Week so we were curious to see how easy it would be to integrate with this. As we well know by now, there are usually some bumps to be expected when meeting a new cloud API.
After some intros, in particular to Roger Hoover, we jokingly asked “PowerPoint or Eclipse?” and Surendra fired back with “What about NetBeans or Intelli-J?”, which answered the real question in the affirmative: it was going to be a coding session.
As PARC operates a strict security policy and we only had access to their guest network, Roger drove, starting with a straightforward:
git clone https://github.com/brooklyncentral/brooklyn.git cd brooklyn mvn clean install
While that ran, we created
~/.brooklyn/brooklyn.properties (and went for coffee):
brooklyn.location.named.parc-hpa-lab-1=jclouds:openstack:http://<endpoint> brooklyn.location.named.parc-hpa-lab-1.identity=<user> brooklyn.location.named.parc-hpa-lab-1.credential=<credential>
Re-upped with caffeine, we were ready to come back and fly through the inevitable clear air turbulence! We started with the simplest example.
cd examples/simple-web-cluster mvn assembly:assembly rm -rf /tmp/brooklyn-parc-catalog-0.1.0-SNAPSHOT tar -x -C /tmp -f target/brooklyn-example-simple-web-cluster-0.6.0-SNAPSHOT-bin.tar.gz pushd /tmp/brooklyn-example-simple-web-cluster-0.6.0-SNAPSHOT ./start.sh
It was clear right away that we’d gotten something wrong. We tried various other endpoints and settings, even Nebula’s EC2 bridge API endpoint, before we came back to a couple obvious (but always forgotten) points – we needed to specify a tenant and set the provider to openstack-nova, and so on.
The magic properties were:
brooklyn.location.named.parc-hpa-lab-1=jclouds:openstack-nova:http:<endpoint> brooklyn.location.named.parc-hpa-lab-1.identity=<tenant>:<user> brooklyn.location.named.parc-hpa-lab-1.credential=<credential>
And we were logged in; it auto-detected a nice looking image and a nice big flavour, and then bam — everyone’s favourite “request limit exceeded”. The request limit is very low on OpenStack by default. A quick fix in this case is to specify both the key pair and the security group Brooklyn uses (or you can tune the frequency used by Brooklyn, or see about getting a higher request limit).
We also hit a similar VM name length limit as we did with Abiquo, and used the same solution. There was ample capacity here, so we went for a beefy machine, and we opted to use a specific preferred base image. The new properties were:
brooklyn.location.named.parc-hpa-lab-1.keyPair=cloudsoft brooklyn.location.named.parc-hpa-lab-1.securityGroups=universal brooklyn.location.named.parc-hpa-lab-1.vmNameMaxLength=32 brooklyn.location.named.parc-hpa-lab-1.minRam=4096 brooklyn.location.named.parc-hpa-lab-1.imageId=RegionOne/uuid brooklyn.location.named.parc-hpa-lab-1.loginUser=ubuntu brooklyn.location.named.parc-hpa-lab-1.loginUser.privateKeyFile=/path/to/id_rsa brooklyn.location.named.parc-hpa-lab-1.dontCreateUser=true brooklyn.location.named.parc-hpa-lab-1.user=ubuntu
And it created the VM, we wait, we wait, then fail. The error message shows it couldn’t reach the machine via ssh. The logs showed that in fact the VM booted in well under a minute. “Of course,” Roger said, “it runs in its own private subnet.”
We went for lunch and schemed. We could deploy brooklyn to the same subnet. Or we could create floating IP’s or VPN’s. The latter seemed like a couple hours’ work however, whereas the former is just a couple minutes. But when we returned from lunch we had an email telling us to look at
One more line in our
brooklyn.properties file would do the trick, the email alleged:
Result! A VM we could log in to. Pretty soon we had JBoss and nginx installing and our simple web cluster done and dusted. On a roll we soon had Cloudera (our stock smoke test for any cloud) deployed and running.
Non-plussed, the PARC team wanted more and Roger raised their first issue – in this case Storm. Sensible given our support for Kafka.
As we’ve said in the past Thank God we chose to go to the Moon. A little closer to home we can now say “Thank goodness NASA & RackSpace decided to create OpenStack!”