My father is a greate chef :)
Dad is a small configuration management tool for Clojure. This project is heavily inspired by mitamae.
-
Easy to start — Download single binary and run it.
-
Minimum to remember — May not write code for Dad often
Download binary from releases.
curl -sfLo dad https://github.com/liquidz/dad/releases/download/0.2.3/dad.linux-amd64
chmod +x dad
./dad your_task.cljHere is a example to install Clojure command line tools.
#!/usr/bin/env dad --no-color --dry-run
(package ["curl" "rlwrap"])
;; You can define function as you like
(defn curl [m]
(let [{:keys [path url]} m]
;; `file-exists?` is a built-in function in dad.
(when (and (not (file-exists? path))
(string? url))
(execute (str "curl -sfLo " path " " url)))))
(curl {:path "/tmp/install.sh"
:url "https://download.clojure.org/install/linux-install-1.10.1.489.sh"})
(file {:path "/tmp/install.sh" :mode "755"})
(execute {:cwd "/tmp" :command "./install.sh"})
(file {:path "/tmp/install.sh" :action :delete})-
✓ Ubuntu (
apt) -
✓ macOS (Homebrew)
|
Note
|
You can refer all documents in codes. (evaluate (dad/doc) or (help))
|
| Name | Var/Func | Description |
|---|---|---|
Func |
Print dad documents. |
|
Var |
Map of environmental variables. |
|
dad/file-exists? |
Func |
Return true if the specified path exists. |
dad/os-type |
Func |
OS name string such as |
Func |
Render a template string with a data. |
|
Func |
Alias for |
|
Func |
Load another recipe file. |
See sci/impl/namespaces.cljc for other core functions.
Resources are called like follows.
<main-arg> will be associated to the main key for the resource.
(resource-name {:key :value ...})
(resource-name <main-arg> {:key :value ...})
;; E.g. following codes are equivalent because `directory` resource's main key is `path`.
(directory "foo/bar" {:owner "alice"})
(directory {:path "foo/bar" :owner "alice"})| Resource name | Description |
|---|---|
Create directories. |
|
Download a file from remote host. |
|
Execute a shell command. |
|
Create a file. |
|
Execute |
|
Create a symbolic link. |
|
Install packages. |
|
Create a text file from the specified template files. |
Dad also provides REPL mode that does not affect your environment. (same as --dry-run option)
$ dad --repl
user=> (println "hello from dad")
hello from dad
nil
user=> (+ 1 2 3)
6
user=> (package "sl")
apt-update [sl] ... will change
package-install [sl] ... will change
user=> (package "sl" {:action :uninstall})
package-uninstall [sl] ... WILL NOT changeCopyright © 2019-2020 Masashi Iizuka
This program and the accompanying materials are made available under the terms of the Eclipse Public License 2.0 which is available at http://www.eclipse.org/legal/epl-2.0.
This Source Code may also be made available under the following Secondary Licenses when the conditions for such availability set forth in the Eclipse Public License, v. 2.0 are satisfied: GNU General Public License as published by the Free Software Foundation, either version 2 of the License, or (at your option) any later version, with the GNU Classpath Exception which is available at https://www.gnu.org/software/classpath/license.html.