Skip to content
This repository was archived by the owner on Jan 5, 2019. It is now read-only.
Open
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
23 changes: 20 additions & 3 deletions src/mami/core.clj
Original file line number Diff line number Diff line change
Expand Up @@ -32,13 +32,22 @@
(:public-ip-address instance)))

(defn wait-for-state [creds state instance-id]
(log/info "Waiting for instance to enter state " state)
(loop [{[{[{status :state}] :instances}] :reservations} (describe-instances creds {:instance-ids [instance-id]})]
(log/info "instance status" status)
(if-not (= state (:name status))
(do
(Thread/sleep 1000)
(recur (describe-instances creds {:instance-ids [instance-id]}))))))

(defn wait-for-ami-state [creds state image-id]
(log/info "waiting for image to be available...")
(log/info (describe-images creds {:image-ids [image-id]}))
(loop [{[{status :state}] :images} (describe-images creds {:image-ids [image-id]})]
(if-not (= state status)
(do
(Thread/sleep 1000)
(recur (describe-images creds {:image-ids [image-id]}))))))

(defn do-with-ssh [keypair username public-ip & fns]
(let [agent (ssh-agent {})]
(add-identity agent {:private-key (:key-material keypair)})
Expand Down Expand Up @@ -223,9 +232,13 @@

(log/info "create image id" image-id)
(tag-image creds image-id tags)
(when (:public config)
(log/info "Marking AMI as public: " image-id)
(wait-for-ami-state creds "available" image-id)
(modify-image-attribute creds {:image-id image-id :launch-permission {:add [{:group "all"}]}}))
image-id))

(defn copy-to [from-region image-id config]
(defn copy-to [creds from-region image-id config]
(let [to-regions (:copy-to config)]
(apply hash-map
(flatten
Expand All @@ -241,6 +254,10 @@
["release" (:release config)]])]
(log/info "copied to" to-region "with id" dst-image-id)
(tag-image ep dst-image-id tags)
(when (:public config)
(log/info "Marking AMI as public: " dst-image-id)
(wait-for-ami-state creds "available" dst-image-id)
(modify-image-attribute (assoc creds :endpoint ep) {:image-id dst-image-id :launch-permission {:add [{:group "all"}]}}))
[to-region dst-image-id]))))))

(defn parse-tags [arg]
Expand Down Expand Up @@ -325,7 +342,7 @@
(wait-for-state creds "stopped" instance-id)
(if (:build-ami config)
(let [image-id (make-ebs-image creds instance-details config)
image-ids (copy-to (:build-region config) image-id config)]
image-ids (copy-to creds (:build-region config) image-id config)]
(doseq [[] (seq image-ids)])))
(catch Exception ex
(log/error ex "Got exception during build")
Expand Down