|
200 | 200 | (fn [signal] |
201 | 201 | (validate! signal :pre? true))}) |
202 | 202 |
|
203 | | -(defn- response-error [message response] |
| 203 | +(defn- response-error [message response & [extra-ex-data]] |
204 | 204 | (ex-info (str message |
205 | 205 | (some->> response u/aws-error-message (str ": "))) |
206 | | - {:response response})) |
| 206 | + (assoc extra-ex-data :response response))) |
207 | 207 |
|
208 | 208 | (defn- aws-parameters [parameters] |
209 | 209 | (mapv |
|
649 | 649 | :Tags (u/tags tags) |
650 | 650 | (if json :TemplateBody :TemplateURL) (or json url)} |
651 | 651 | _ (logr/info "Creating change-set" name "for stack" stack-name) |
652 | | - r (aws/invoke client {:op :CreateChangeSet :request request})] |
653 | | - (if (and (u/anomaly? r) |
654 | | - (= "ValidationError" (u/aws-error-code r)) |
655 | | - (str/includes? (u/aws-error-message r) "does not exist")) |
| 652 | + op-map {:op :CreateChangeSet :request request} |
| 653 | + r (aws/invoke client op-map)] |
| 654 | + (cond |
| 655 | + (not (u/anomaly? r)) |
| 656 | + r |
| 657 | + |
| 658 | + (and |
| 659 | + (= "ValidationError" (u/aws-error-code r)) |
| 660 | + (str/includes? (u/aws-error-message r) "does not exist")) |
656 | 661 | (aws/invoke client |
657 | 662 | {:op :CreateChangeSet |
658 | 663 | :request (assoc request :ChangeSetType "CREATE")}) |
659 | | - r))) |
| 664 | + |
| 665 | + :else |
| 666 | + (throw (response-error "Error creating change set" r |
| 667 | + op-map))))) |
660 | 668 |
|
661 | 669 | (defn- start-change-set! [{::ds/keys [config instance] |
662 | 670 | :as signal}] |
|
667 | 675 | (let [_ (validate! signal) |
668 | 676 | client (or (:client config) |
669 | 677 | (aws/client {:api :cloudformation :region region})) |
670 | | - {:as r :keys [Id StackId]} |
| 678 | + {:keys [Id StackId]} |
671 | 679 | #__ (create-change-set! client signal (template-data config :template template :validate? false))] |
672 | | - (if (u/anomaly? r) |
673 | | - (throw (response-error "Error creating change set" r)) |
674 | | - (let [{:keys [Changes]} |
675 | | - #__ (wait-until-complete-change-set! Id StackId client |
676 | | - :fail-on-no-changes? fail-on-no-changes?)] |
677 | | - {:changes Changes |
678 | | - :client client |
679 | | - :id Id |
680 | | - :name name |
681 | | - :stack-id StackId |
682 | | - :stack-name stack-name})))))) |
| 680 | + (let [{:keys [Changes]} |
| 681 | + #__ (wait-until-complete-change-set! Id StackId client |
| 682 | + :fail-on-no-changes? fail-on-no-changes?)] |
| 683 | + {:changes Changes |
| 684 | + :client client |
| 685 | + :id Id |
| 686 | + :name name |
| 687 | + :stack-id StackId |
| 688 | + :stack-name stack-name}))))) |
683 | 689 |
|
684 | 690 | (defn- delete-change-set! |
685 | 691 | [{:keys [::ds/instance] |
|
0 commit comments