Skip to content

Instantly share code, notes, and snippets.

@hugoduncan
Created February 7, 2010 01:39
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save hugoduncan/297120 to your computer and use it in GitHub Desktop.
Save hugoduncan/297120 to your computer and use it in GitHub Desktop.
(ns example
(:use crane.compute)
(:use clojure.contrib.pprint)
(:import org.jclouds.compute.domain.OsFamily)
(:import org.jclouds.compute.options.TemplateOptions)
(:import org.jclouds.logging.log4j.config.Log4JLoggingModule)
(:import org.jclouds.ssh.jsch.config.JschSshClientModule)
(:import org.jclouds.enterprise.config.EnterpriseConfigurationModule))
(defn load-resource-as-byte-array
([name] (load-resource-as-byte-array name (* 2048 1024)))
([#^String name #^Integer size]
(let [bytes #^bytes (byte-array size)
stream #^java.io.BufferedInputStream (load-resource name)
n (. stream (read bytes 0 size))]
(byte-array n bytes))))
(defn modules
"Build a list of modules suitable for passing to compute-context"
[& modules]
(.build (reduce #(.add %1 %2)
(com.google.common.collect.ImmutableSet/builder)
modules)))
(def rackspace-user "user")
(def rackspace-key "apikey")
(def rackspace-compute-name "cloudservers")
(defn rackspace []
(compute-context rackspace-compute-name rackspace-user rackspace-key
(modules
(Log4JLoggingModule.)
(JschSshClientModule.)
(EnterpriseConfigurationModule.))))
(defn server-template [#^org.jclouds.compute.ComputeServiceContext compute]
(.. compute (getComputeService) (templateBuilder)
(osFamily OsFamily/UBUNTU)
(osDescriptionMatches ".*8.10.*")
smallest
(options (.. (org.jclouds.compute.options.TemplateOptions$Builder/authorizePublicKey (slurp (resource-path "id_rsa.pub")))
(runScript (load-resource-as-byte-array "server_init.sh"))))
build))
(defn create-node [compute tag template]
(run-nodes compute tag 1 template))
(defn create-server []
(let [rackspace-compute (rackspace)]
(create-node rackspace-compute "myserver" (server-template rackspace-compute))))
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment