                    includes (:includes cluster)
                    debug (:debug cluster)
                    log (:log cluster)]
+               (check-valid-options cluster :user :clients :addresses :parallel :includes :debug :log)
                (when-exit (nil? task)
                           (str "No task named " (name task-name)))
                (when-exit (and (empty? addresses)


  "
  [key value & kvs]
  (swap! *global-options* #(apply assoc (list* % key value kvs))))

(defn clear-options!
  "Clear global options"
  []

(def ^:private bash-greenbold "\033[1;32m")
;;Global options for ssh,scp and rsync
(def ^{:dynamic true :private true} *global-options* (atom {}))

(defn ^:private check-valid-options
  "Throws an exception if the given option map contains keys not listed
  as valid, else returns nil."
  [options & valid-keys]
  (when (seq (apply disj (apply hash-set (keys options)) valid-keys))
    (throw
     (IllegalArgumentException.
      (apply str "Only these options are valid: "
             (first valid-keys)
             (map #(str ", " %) (rest valid-keys)))))))

(defmacro ^:private cli-bash-bold [& content]
  `(if *enable-color*
