Skip to main content

Config Reference

The sake.yaml config is based on the following concepts:

  • servers are servers, local or remote, that have a host
  • tasks are shell commands that you write and then run for selected servers
  • specs are configs that alter task execution and output
  • targets are configs that provide shorthand filtering of servers when executing tasks
  • themes are used to modify the output of sake commands
  • env are environment variables that can be defined globally, per server and per task

Specs, targets and themes come with a default setting that the user can override.

Check the files and environment section to see how the config file is loaded.

Below is a config file detailing all of the available options and their defaults.

# Import servers/tasks/env/specs/themes/targets from other configs [optional]
import:
- ./some-dir/sake.yaml

# Verify SSH host connections. Set this to true if you wish to circumvent verify host [optional]
disable_verify_host: false

# Set known_hosts_file path. Default is users ssh home directory [optional]
# known_hosts_file: $HOME/.ssh/known_hosts

# Set timeout for ssh connections in seconds
# default_timeout: 20

# Shell used for commands [optional]
# If you use any other program than bash, zsh, sh, node, or python
# then you have to provide the command flag if you want the command-line string evaluted
# For instance: bash -c
shell: bash

# List of Servers
servers:
# Server name [required]
media:
# Server description [optional]
desc: media server

# Host [required]
host: media.lan
# one-line for setting user and port
# host: samir@media.lan:22

# Specify multiple hosts:
# hosts:
# - samir@192.168.0.1:22
# - samir@l92.168.1.1:22

# or use a host range generator
# hosts: samir@192.168.[0:1].1:22

# generate hosts by local command
# inventory: echo samir@192.168.0.1:22 samir@192.168.1.1:22

# Bastion [optional]
bastion: samir@192.168.1.1:2222

# Bastions [optional]
# bastions: [samir@192.168.1.1:2222, samir@192.168.1.2:3333]

# User to connect as. It defaults to the current user [optional]
user: samir

# Port for ssh [optional]
port: 22

# Shell used for commands [optional]
shell: bash

# Run on localhost [optional]
local: false

# Set default working directory for task execution [optional]
work_dir: ""

# Set identity file. By default it will attempt to establish a connection using a SSH auth agent [optional]
# sake respects users ssh config, so you can set auth credentials in the users ssh config
identity_file: ./id_rsa

# Set password. Accepts either a string or a shell command [optional]
password: $(echo $MY_SECRET_PASSWORD)

# List of tags [optional]
tags: [remote]

# List of server specific environment variables [optional]
env:
# Simple string value
key: value

# Shell command substitution (evaluated on localhost)
date: $(date -u +"%Y-%m-%dT%H:%M:%S%Z")

# List of environment variables that are available to all tasks
env:
# Simple string value
AUTHOR: "alajmo"

# Shell command substitution (evaluated on localhost)
DATE: $(date -u +"%Y-%m-%dT%H:%M:%S%Z")

# List of themes
themes:
# Theme name
default:
# Text options [optional]
text:
# Set host prefix for each line [optional]
# Available variables: `.Name`, `.Index`, `.Host`, `.Port`, `.User`
prefix: '{{ .Host }}'

# Colors to alternate between for each server prefix [optional]
# Available options: green, blue, red, yellow, magenta, cyan
prefix_colors: ["green", "blue", "red", "yellow", "magenta", "cyan"]

# Customize the task header that is printed before each task when output is set to text (to opt out, set it to empty string) [optional]
# Available variables: `.Name`, `.Desc`, `.Index`, `.NumTasks`
# Available methods: `.Style`, which takes in 1 or more parameters, first is the string to be styled, and the rest are styling options
# Available styling options:
# Colors (prefix with `fg_` for foreground, and `bg_` for background): black, red, green, yellow, blue, magenta, cyan, white, hi_black, hi_red, hi_green, hi_yellow, hi_blue, hi_magenta, hi_cyan, hi_white
# Attributes: normal, bold, faint, italic, underline crossed_out
header: '{{ .Style "TASK" "bold" }}{{ if ne .NumTasks 1 }} ({{ .Index }}/{{ .NumTasks }}){{end}}{{ if and .Name .Desc }} [{{.Style .Name "bold"}}: {{ .Desc }}] {{ else if .Name }} [{{ .Name }}] {{ else if .Desc }} [{{ .Desc }}] {{end}}'

# Fill remaining spaces with a character after the header, if set to empty string, no filler characters will be displayed [optional]
header_filler: "*"

# Table options [optional]
table:
# Table style [optional]
# Available options: ascii, connected-light
style: ascii

# Set host prefix [optional]
# Available variables: `.Name`, `.Index`, `.Host`, `.Port`, `.User`
prefix: '{{ .Host }}'

# Border options for table output [optional]
options:
draw_border: false
separate_columns: true
separate_header: true
separate_rows: false
separate_footer: false

# Color, attr, align, and format options [optional]
# Available options for fg/bg: green, blue, red, yellow, magenta, cyan, hi_green, hi_blue, hi_red, hi_yellow, hi_magenta, hi_cyan
# Available options for align: left, center, justify, right
# Available options for attr: normal, bold, faint, italic, underline, crossed_out
# Available options for format: default, lower, title, upper
title:
fg:
bg:
align:
attr:
format:

header:
fg:
bg:
align:
attr:
format:

row:
fg:
bg:
align:
attr:
format:

footer:
fg:
bg:
align:
attr:
format:

border:
header:
fg:
bg:
attr:

row:
fg:
bg:
attr:

row_alt:
fg:
bg:
attr:

footer:
fg:
bg:
attr:

# List of Specs [optional]
specs:
default:
# Spec description
desc: default spec

# Print task description
describe: false

# Print list of hosts that will be targetted
list_hosts: false

# Order hosts [inventory|reverse_inventory|sorted|reverse_sorted|random]
order: inventory

# Omit showing loader when running tasks
silent: false

# Execution strategy [linear|host_pinned|free]
strategy: linear

# Number of hosts to run in parallel
batch: 1

# Number of hosts in percentage to run in parallel [0-100]
# batch_p: 100

# Max number of forks
forks: 10000

# Set task output [text|table|table-2|table-3|table-4|html|markdown|json|csv|none]
output: text

# Limit output [stdout|stderr|all]
print: all

# Hide task from auto-completion
hidden: false

# Continue task execution on errors
ignore_errors: true

# Stop task execution on any error
any_errors_fatal: false

# Max number of tasks to fail before aborting
max_fail_percentage: 100

# Ignore unreachable hosts
ignore_unreachable: false

# Omit empty rows for table output
omit_empty_rows: false

# Omit empty columns for table output
omit_empty_columns: false

# Show task reports [recap|rc|task|time|all]
report: [recap]

# Verbose turns on describe, list_hosts and report set to all
verbose: false

# Confirm invoked task before running
confirm: false

# Confirm each task before running
step: false

# List of targets [optional]
targets:
default:
# Target description
desc: ""

# Target all hosts
all: false

# Specify hosts via server name
servers: []

# Specify hosts via server tags
tags: []

# Limit number of hosts to target
limit: 0

# Limit number of hosts to target in percentage
limit_p: 100

# Invert matching on hosts
invert: false

# Specify host regex
regex: ""

# List of tasks
tasks:
# Command ID [required]
simple-1:
# The name that will be displayed when executing or listing tasks. Defaults to task ID [optional]
name: Simple

# Script to run
cmd: |
echo "hello world"
desc: simple command 1

# Short-form for a command
simple-2: echo "hello world"

# Command ID [required]
advanced-command:
# The name that will be displayed when executing or listing tasks. Defaults to task ID [optional]
name: Advanced Command

# Task description [optional]
desc: Advanced task

# Specify theme [optional]
theme: default

# Spec reference [optional]
# spec: default

# Or specify specs inline
spec:
output: table
ignore_errors: true
ignore_unreachable: true
any_errors_fatal: false
omit_empty_rows: true
omit_empty_columns: true

# Target reference [optional]
# target: default

# Or specify targets inline
target:
all: true
servers: [media]
tags: [remote]
limit: 1

# List of environment variables [optional]
env:
# Simple string value
release: v1.0.0

# Shell command substitution
num_lines: $(ls -1 | wc -l)

# The following variables are available by default:
# S_NAME
# S_HOST
# S_USER
# S_PORT
# S_BASTION
# S_TAGS
# S_IDENTITY
# SAKE_DIR
# SAKE_PATH

# Run on localhost [optional]
local: false

# Set default working directory for task [optional]
work_dir: ""

# Shell used for commands [optional]
shell: bash

# Each task can only define:
# - a single cmd
# - or a single task reference
# - or a list of task references and commands

# Single command
cmd: |
echo complex
echo command

# Task reference. work_dir and env variables are passed down
task: simple-1

# List of task references or commands
tasks:
# Command
- name: inline-command
cmd: echo "Hello World"
ignore_errors: true
work_dir: /tmp
shell: bash
env:
foo: bar

# Task reference. work_dir and env variables are passed down.
# Nested task referencing is supported and will result in a
# flat list of commands
- task: simple-1
ignore_errors: true
work_dir: /tmp
register: results
env:
foo: bar

- name: output
cmd: echo $results_stdout

Files

When running a command, sake will check the current directory and all parent directories for the following files: sake.yaml, sake.yml, .sake.yaml, .sake.yml .

Additionally, it will import (if found) a config file from:

  • Linux: $XDG_CONFIG_HOME/sake/config.yaml or $HOME/.config/sake/config.yaml if $XDG_CONFIG_HOME is not set.
  • Darwin: $HOME/Library/Application/sake

Both the config and user config can be specified via flags or environments variables.

Environment

SAKE_CONFIG
Override config file path

SAKE_USER_CONFIG
Override user config file path

SAKE_SSH_CONFIG
Override ssh config file path

SAKE_KNOWN_HOSTS_FILE
Override known_hosts file path

NO_COLOR
If this env variable is set (regardless of value) then all colors will be disabled