Skip to content

Instantly share code, notes, and snippets.

@blakesmith
Created March 31, 2012 03:17
Show Gist options
  • Save blakesmith/2258923 to your computer and use it in GitHub Desktop.
Save blakesmith/2258923 to your computer and use it in GitHub Desktop.
(ns letterleaf-provision.core
(:use [clojure.tools.cli])
(:require [pallet.core :as core]
[pallet.compute :as compute]
[pallet.phase :as phase]
[pallet.crate.java :as java]
[pallet.crate.automated-admin-user :as automated-admin-user]))
(defn service [provider]
(compute/service provider))
(def base-server
(core/server-spec
:phases
{:bootstrap (phase/phase-fn (automated-admin-user/automated-admin-user))
:configure (phase/phase-fn (java/java :sun :jdk))}))
(defn node-image [provider]
(provider
{:aws {:image-id "us-east-1/ami-f333fe9a"}
:vb {:os-family :ubuntu :os-version-matches "10.10"}}))
(defn generate-node [provider]
(core/node-spec
:image (node-image provider)
:network {:inbound-ports [22 80]}))
(defn group [n provider]
(core/group-spec "letterleaf"
:count n
:extends [base-server] :node-spec (generate-node provider)))
(defn list-nodes [provider]
(compute/nodes (service provider)))
(defn change [n provider]
(core/converge (group n provider) :compute (service provider))
(list-nodes provider))
(defn -main [& args]
(let [[opts trailing-args help-doc]
(cli args
["-c" "--converge" "Change running node quantity" :flag true]
["-l" "--list-all" "List all running nodes" :flag true]
["-n" "--node-count" "Number of nodes to start or stop" :parse-fn #(Integer. %)]
["-p" "--provider" "Provider name: eg: aws virtualbox" :default :aws :parse-fn #(keyword %)])]
(cond
(:list-all opts) (list-nodes (:provider opts))
(and (:converge opts) (:node-count opts)) (change (:node-count opts) (:provider opts))
:else (do (println help-doc) (System/exit 0)))))
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment