Permalink
Browse files

Added chef basics example

This example combines the compute-basics example with the Chef features
in jclouds to bootstrap the created nodes.

When using the SOLO action, the node will download the cookbooks from
the Opscode github repository and will run them without interacting with
a Chef Server.

When using the CHEF action, the node will be registered in the provided
Chef Server (can be a Community Chef, a Hosted chef or a Private Chef)
and will run the cookbooks accordingly.
  • Loading branch information...
nacx committed Nov 12, 2012
1 parent 60080c6 commit 84ed0db8a4b4dfd1ed5cccf4eadc91c2b357bee9
View
@@ -58,6 +58,10 @@ This repository contains various examples of using
<td><a href="jclouds-examples/tree/master/rackspace/">Rackspace (Java)</a></td>
<td>Example code that uses jclouds to perform common tasks on the Rackspace open cloud.</td>
</tr>
+ <tr>
+ <td><a href="jclouds-examples/tree/master/chef-basics/">Chef Basics (Java)</a></td>
+ <td>Example code to add nodes to a group and execute Chef cookbooks on them using Chef Solo or a standard or Hosted Chef Server.</td>
+ </tr>
</tbody>
</table>
View
@@ -0,0 +1,58 @@
+# chef-basics
+
+This is a simple example command line client that creates a node in a [ComputeService](http://code.google.com/p/jclouds/wiki/ComputeGuide) provider and installs an Apache web server on everything in its group using Chef.
+
+## Build
+
+Ensure you have maven 3.02 or higher installed, then execute 'mvn install' to build the example. Note you also need an ssh key setup in your home directory.
+
+If you don't already have ~/.ssh/id_rsa present, generate a key with the command 'ssh-keygen -t rsa' and leave the passphrase blank.
+
+Also make sure you have the private keys for the client and validator if you are using a Chef Server.
+
+## Run
+
+Invoke the jar, passing the name of the cloud provider you with to access (ex. aws-ec2, gogrid), identity (ex. accesskey, username), credential (ex. secretkey, password), then the name of the group you'd like to add the node to. The 5th parameter must be add, chef or destroy, noting that destroy will destroy all nodes in the group. If the 5th parameter is chef or solo, you must provide the list of recipes to install, separated by commas.
+
+Also, if the 5th parameter is 'chef', you must provide the connection details to the chef server. See the examples below:
+
+java -jar target/chef-basics-jar-with-dependencies.jar provider identity credential mygroup add
+
+java -Dchef.endpoint=http://chefendpoint -Dchef.client=clientname -Dchef.validator=validatorname -jar target/chef-basics-jar-with-dependencies.jar provider identity credential mygroup chef apache2
+
+java -jar target/chef-basics-jar-with-dependencies.jar provider identity credential mygroup solo apache2
+
+java -jar target/chef-basics-jar-with-dependencies.jar provider identity credential mygroup destroy
+
+Ex. for Amazon EC2
+
+java -jar target/chef-basics-jar-with-dependencies.jar aws-ec2 accesskey secretkey mygroup add
+
+Ex. for HP Cloud
+
+java -jar target/chef-basics-jar-with-dependencies.jar hpcloud-compute tenantId:accesskey secretkey mygroup add
+
+Ex. for TryStack.org
+
+java -jar target/chef-basics-jar-with-dependencies.jar trystack-nova tenantId:user password mygroup add
+
+Ex. for Abiquo
+
+java -Dabiquo.endpoint=http://abiquohost/api -jar target/chef-basics-jar-with-dependencies.jar abiquo user password mygroup add
+
+Ex. for your own OpenStack Nova
+
+java -Dopenstack-nova.image-id=RegionOne/15 -Dopenstack-nova.login-user=ubuntu -Djclouds.trust-all-certs=true -Djclouds.keystone.credential-type=passwordCredentials -Dopenstack-nova.endpoint=https://keystone:35357 -jar target/chef-basics-jar-with-dependencies.jar openstack-nova tenantId:user password mygroup add
+
+Ex. for Virtualbox
+java -jar target/chef-basics-jar-with-dependencies.jar virtualbox vboxwebsrv-username vboxwebsrv-password mygroup add
+
+Ex. for your own OpenStack Nova emulating EC2
+
+java -Dopenstack-nova-ec2.image-id=nova/ami-00000009 -Dopenstack-nova-ec2.login-user=ubuntu -Djclouds.trust-all-certs=true -Dopenstack-nova-ec2.endpoint=https://novahost/services/Cloud -jar target/chef-basics-jar-with-dependencies.jar openstack-nova-ec2 tenantId:accesskey secretkey mygroup add
+
+## License
+
+Copyright (C) 2009-2012 jclouds, Inc.
+
+Licensed under the Apache License, Version 2.0
View
@@ -0,0 +1,192 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+
+ Licensed to jclouds, Inc. (jclouds) under one or more
+ contributor license agreements. See the NOTICE file
+ distributed with this work for additional information
+ regarding copyright ownership. jclouds 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.
+
+-->
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+ <modelVersion>4.0.0</modelVersion>
+ <groupId>org.jclouds.examples</groupId>
+ <artifactId>chef-basics</artifactId>
+ <version>1.6.0-SNAPSHOT</version>
+ <name>chef-basics</name>
+ <description>jclouds chef example that adds a node to a group, then installs an Apache web server on all nodes</description>
+
+ <properties>
+ <jclouds.version>1.6.0-SNAPSHOT</jclouds.version>
+ </properties>
+
+ <dependencies>
+ <dependency>
+ <groupId>org.jclouds</groupId>
+ <artifactId>jclouds-compute</artifactId>
+ <version>${jclouds.version}</version>
+ </dependency>
+ <dependency>
+ <groupId>org.jclouds.api</groupId>
+ <artifactId>chef</artifactId>
+ <version>${jclouds.version}</version>
+ </dependency>
+ <dependency>
+ <groupId>org.jclouds</groupId>
+ <artifactId>jclouds-allcompute</artifactId>
+ <version>${jclouds.version}</version>
+ </dependency>
+ <dependency>
+ <groupId>org.jclouds.labs</groupId>
+ <artifactId>joyentcloud</artifactId>
+ <version>${jclouds.version}</version>
+ </dependency>
+ <dependency>
+ <groupId>org.jclouds.labs</groupId>
+ <artifactId>virtualbox</artifactId>
+ <version>${jclouds.version}</version>
+ </dependency>
+ <dependency>
+ <groupId>org.jclouds.labs</groupId>
+ <artifactId>abiquo</artifactId>
+ <version>${jclouds.version}</version>
+ </dependency>
+ <!-- note that if you want a smaller distribution
+ remove the above dependency and place something
+ like below -->
+ <!--
+ <dependency>
+ <groupId>org.jclouds.provider</groupId>
+ <artifactId>gogrid</artifactId>
+ <version>${jclouds.version}</version>
+ </dependency>
+ -->
+ <dependency>
+ <groupId>org.bouncycastle</groupId>
+ <artifactId>bcprov-jdk16</artifactId>
+ <version>1.46</version>
+ <scope>provided</scope>
+ </dependency>
+ <dependency>
+ <groupId>org.jclouds.driver</groupId>
+ <artifactId>jclouds-bouncycastle</artifactId>
+ <version>${jclouds.version}</version>
+ <exclusions>
+ <!-- bouncy castle is a provider, so
+ it must be signed and used as-is.
+ we are doing this to prevent its
+ classes from getting into the
+ jar-with-dependencies -->
+ <exclusion>
+ <groupId>org.bouncycastle</groupId>
+ <artifactId>bcprov-jdk16</artifactId>
+ </exclusion>
+ </exclusions>
+ </dependency>
+ <dependency>
+ <groupId>org.jclouds.driver</groupId>
+ <artifactId>jclouds-sshj</artifactId>
+ <version>${jclouds.version}</version>
+ </dependency>
+ <dependency>
+ <groupId>org.jclouds.driver</groupId>
+ <artifactId>jclouds-enterprise</artifactId>
+ <version>${jclouds.version}</version>
+ </dependency>
+ <dependency>
+ <groupId>ch.qos.logback</groupId>
+ <artifactId>logback-classic</artifactId>
+ <version>1.0.0</version>
+ </dependency>
+ </dependencies>
+ <build>
+ <finalName>${project.artifactId}</finalName>
+ <plugins>
+ <plugin>
+ <artifactId>maven-compiler-plugin</artifactId>
+ <configuration>
+ <encoding>${project.build.sourceEncoding}</encoding>
+ <source>1.6</source>
+ <target>1.6</target>
+ </configuration>
+ </plugin>
+ <plugin>
+ <groupId>org.apache.maven.plugins</groupId>
+ <artifactId>maven-jar-plugin</artifactId>
+ <configuration>
+ <archive>
+ <manifest>
+ <mainClass>org.jclouds.examples.chef.basics.MainApp</mainClass>
+ </manifest>
+ </archive>
+ </configuration>
+ </plugin>
+ <plugin>
+ <artifactId>maven-assembly-plugin</artifactId>
+ <version>2.2.1</version>
+ <configuration>
+ <descriptors>
+ <descriptor>src/main/assembly/jar-with-dependencies.xml</descriptor>
+ </descriptors>
+ <archive>
+ <manifest>
+ <mainClass>org.jclouds.examples.chef.basics.MainApp</mainClass>
+ </manifest>
+ <manifestEntries>
+ <Class-Path>bcprov-jdk16.jar</Class-Path>
+ </manifestEntries>
+ </archive>
+ </configuration>
+ <executions>
+ <execution>
+ <id>make-assembly</id>
+ <phase>package</phase>
+ <goals>
+ <goal>single</goal>
+ </goals>
+ </execution>
+ </executions>
+ </plugin>
+ <plugin>
+ <groupId>org.apache.maven.plugins</groupId>
+ <artifactId>maven-dependency-plugin</artifactId>
+ <version>2.3</version>
+ <executions>
+ <execution>
+ <id>copy</id>
+ <phase>package</phase>
+ <goals>
+ <goal>copy</goal>
+ </goals>
+ <configuration>
+ <artifactItems>
+ <artifactItem>
+ <groupId>org.bouncycastle</groupId>
+ <artifactId>bcprov-jdk16</artifactId>
+ <overWrite>false</overWrite>
+ <destFileName>bcprov-jdk16.jar</destFileName>
+ </artifactItem>
+ </artifactItems>
+ <outputDirectory>${project.build.directory}</outputDirectory>
+ <overWriteReleases>false</overWriteReleases>
+ <overWriteSnapshots>true</overWriteSnapshots>
+ </configuration>
+ </execution>
+ </executions>
+ </plugin>
+ </plugins>
+ </build>
+
+</project>
@@ -0,0 +1,24 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<assembly xmlns="http://maven.apache.org/plugins/maven-assembly-plugin/assembly/1.1.0"
+ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xsi:schemaLocation="http://maven.apache.org/plugins/maven-assembly-plugin/assembly/1.1.0 http://maven.apache.org/xsd/assembly-1.1.0.xsd">
+ <!-- copied from jar-with-dependencies (http://maven.apache.org/plugins/maven-assembly-plugin/descriptor-refs.html#jar-with-dependencies) -->
+ <id>jar-with-dependencies</id>
+ <formats>
+ <format>jar</format>
+ </formats>
+ <includeBaseDirectory>false</includeBaseDirectory>
+ <containerDescriptorHandlers>
+ <containerDescriptorHandler>
+ <handlerName>metaInf-services</handlerName>
+ </containerDescriptorHandler>
+ </containerDescriptorHandlers>
+ <dependencySets>
+ <dependencySet>
+ <outputDirectory>/</outputDirectory>
+ <useProjectArtifact>true</useProjectArtifact>
+ <unpack>true</unpack>
+ <scope>runtime</scope>
+ </dependencySet>
+ </dependencySets>
+</assembly>
Oops, something went wrong.

0 comments on commit 84ed0db

Please sign in to comment.