Skip to content

Commit

Permalink
RUN-INSTANCES now returns a list if multiple instances were started
Browse files Browse the repository at this point in the history
  Also accept :MINCOUNT and :MAXCOUNT as integers, in addition to string.
  • Loading branch information
sb-studio committed Mar 31, 2011
1 parent ba8d210 commit 2d17fde
Show file tree
Hide file tree
Showing 3 changed files with 34 additions and 14 deletions.
20 changes: 15 additions & 5 deletions api.lisp
Original file line number Diff line number Diff line change
Expand Up @@ -160,18 +160,28 @@
(issue-request params)
inst-ids))

(defun run-instances (image-id key-name &key (virtual-name nil) (instance-type "m1.large") (mincount "1")
(maxcount "1") (user-data nil) (zone (aws:default-zone)) (monitor-instance nil)
(defun run-instances (image-id key-name &key (virtual-name nil) (instance-type "m1.large") (mincount 1)
(maxcount 1) (user-data nil) (zone (aws:default-zone)) (monitor-instance nil)
(security-group nil))
(let ((params `(("Action" . "RunInstances") ("ImageId" . ,image-id) ("KeyName" . ,key-name)
("InstanceType" . ,instance-type) ("MinCount" . ,mincount)
("MaxCount" . ,maxcount) ("Placement.AvailabilityZone" . ,zone)
("InstanceType" . ,instance-type)
("MinCount" . ,(make-integer mincount))
("MaxCount" . ,(make-integer maxcount))
("Placement.AvailabilityZone" . ,zone)
("Monitoring.Enabled" . ,(if monitor-instance "true" "false"))
,@(when user-data
`(("UserData" . ,(encode-user-data user-data))))
,@(when security-group
`(("SecurityGroup" . ,security-group))))))
(make-initiated-instance (issue-request params) :virtual-name virtual-name)))
(let ((instances (make-initiated-instances (issue-request params)
:virtual-name virtual-name)))
(if (cdr instances)
instances
;; KLUDGE: Previously we only returned a single instance
;; instead of the list even if we ran many--in the
;; interest of backwards compatibility return only a single
;; instance if we ran only on.e
(car instances)))))

;;;; Volumes

Expand Down
8 changes: 8 additions & 0 deletions ec2.lisp
Original file line number Diff line number Diff line change
Expand Up @@ -64,6 +64,14 @@
(:method ((value t))
(error 'volume-size-error :requested-size value)))

(defun make-integer (int)
(etypecase int
(integer
(write-to-string int :radix nil :base 10))
(string
(parse-integer int)
int)))

(defmethod encode-user-data (udata)
(flet ((format-udata ()
(let ((pairs (loop for key being the hash-key of udata using (hash-value value)
Expand Down
20 changes: 11 additions & 9 deletions initiated-instance.lisp
Original file line number Diff line number Diff line change
Expand Up @@ -44,12 +44,14 @@
(with-element-children (item (find-element '|instancesSet| body))
(return (values (getattr '|instanceId| item) (getattr '|launchTime| item)))))

(defun make-initiated-instance (body &key (virtual-name nil))
(multiple-value-bind (inst-id launch-time)
(get-initiated-instance-data body)
(make-instance 'initiated-instance
:request-id (getattr '|requestId| body)
:reservation-id (getattr '|reservationId| body)
:virtual-name virtual-name
:instance-id inst-id
:launch-time launch-time)))
(defun make-initiated-instances (body &key (virtual-name nil))
(collecting-element-children (item (find-element '|instancesSet| body))
(let ((inst-id (getattr '|instanceId| item))
(launch-time (getattr '|launchTime| item)))
(make-instance 'initiated-instance
:request-id (getattr '|requestId| body)
:reservation-id (getattr '|reservationId| body)
:virtual-name virtual-name
:instance-id inst-id
:launch-time launch-time))))

0 comments on commit 2d17fde

Please sign in to comment.