0d44e5e6 |
(defpackage :mfa-tool.aws-dispatcher
(:use :cl)
|
4450c21d |
(:export #:aws-dispatcher #:update-stacks #:select-stack #:stacks #:stack
|
81fd0fa2 |
#:put-stack
#:refresh-stack))
|
0d44e5e6 |
(in-package :mfa-tool.aws-dispatcher)
(defclass aws-dispatcher ()
((%region :reader region :accessor %region
:initarg :region)
(%credentials :reader credentials
:initarg :credentials))
(:default-initargs
|
4dde8453 |
:region :|us-east-1|
|
0d44e5e6 |
:credentials (error "AWS-DISPATCHER requires a :CREDENTIALS initarg")))
|
4450c21d |
(defmacro defprint-slots (class slots)
`(defmethod print-object ((o ,class) s)
(with-slots ,slots o
(print-unreadable-object (o s :type t :identity t)
(format s "~@{~s~^, ~}"
,@slots)))))
(defprint-slots daydreamer.aws-result:stack
(daydreamer.aws-result::%stack-name))
|
81fd0fa2 |
(defclass refresh-stack ()
((%stack :reader stack :initarg :stack)))
(defprint-slots refresh-stack (%stack))
(defun refresh-stack (stack)
(fw.lu:new 'refresh-stack stack))
|
4450c21d |
(defclass put-stack ()
((%stack :reader stack :initarg :stack)))
(defun put-stack (stack)
(fw.lu:new 'put-stack stack))
|
0d44e5e6 |
(defclass update-stacks ()
((%stacks :initarg :stacks :reader stacks)))
(defun update-stacks (stacks)
(fw.lu:new 'update-stacks stacks))
(defclass select-stack ()
((%stacks :initarg :stack :reader stack)))
|
4450c21d |
(defprint-slots select-stack (%stacks))
|
0d44e5e6 |
(defun select-stack (stack)
(fw.lu:new 'select-stack stack))
(defclass update-region ()
((%new-region :initarg :region :reader region)))
(defun update-region (region)
(fw.lu:new 'update-region region))
(defmethod mfa-tool.store:dispatch :around ((store aws-dispatcher) action)
(let ((aws-sdk:*session* (aws-sdk:make-session :credentials (credentials store)
:region (region store))))
(call-next-method)))
(defmethod mfa-tool.store:execute ((store aws-dispatcher) (action update-region))
(setf (%region store) (region action)))
(defmethod mfa-tool.store:dispatch :after ((store aws-dispatcher) (action update-region))
(mfa-tool.store:dispatch store :|Get Stacks|))
|
81fd0fa2 |
(defmethod mfa-tool.store:dispatch :after ((store aws-dispatcher) (action refresh-stack))
(let ((new-value (daydreamer.aws-result:extract-stack
(car
(daydreamer.aws-result:extract-list
(cdar
(aws/cloudformation:describe-stacks
:stack-name (daydreamer.aws-result:stack-name
(stack action)))))))))
(mfa-tool.store:dispatch store (put-stack new-value))))
|
0d44e5e6 |
(defmethod mfa-tool.store:dispatch :after ((store aws-dispatcher) (action (eql :|Get Stacks|)))
(bt:make-thread
(lambda ()
(let ((aws-sdk:*session* (aws-sdk:make-session :credentials (credentials store)
:region (region store))))
(mfa-tool.store:dispatch store
(update-stacks (mapcar 'daydreamer.aws-result:extract-stack
(daydreamer.aws-result:extract-list
(cdar
(aws/cloudformation:describe-stacks))))))))
|
f51198cd |
:name "Stack Fetcher"))
|