Skip site navigation (1)Skip section navigation (2)

FreeBSD Manual Pages

  
 
  

home | help
SAKE(1) 			   Sake Manual				 SAKE(1)

NAME
     sake - sake is a task runner for local and remote hosts

SYNOPSIS
     sake [command] [flags]

DESCRIPTION
     sake is a task runner for local and remote hosts.

     You  define  servers  and tasks in a sake.yaml config file and then run the
     tasks on the servers.

OPTIONS
     -c, --config=""
	    specify config

     -u, --user-config=""
	    specify user config

     --ssh-config=""
	    specify ssh config

     --no-color[=false]
	    disable color

     -h, --help[=false]
	    help for sake

COMMANDS
     check  Validate config.

     run <task> [flags]
	    Run tasks specified in a sake.yaml file.

	    Available Options:

		   --dry-run[=false]
			  print the task to see what will be executed

		   --describe[=false]
			  print task information

		   --list-hosts[=false]
			  print hosts that will be targetted

		   -V, --verbose[=false]
			  enable all diagnostics

		   -S, --strategy=""
			  set execution strategy [linear|host_pinned|free]

		   -f, --forks=10000
			  max number of concurrent processes

		   -b, --batch=0
			  set number of hosts to run in parallel

		   -B, --batch-p=0
			  set percentage of hosts to run in parallel [0-100]

		   -a, --all[=false]
			  target all hosts

		   -v, --invert[=false]
			  invert matching on hosts

		   -r, --regex=""
			  target hosts on host regex

		   -s, --servers=[]
			  target servers by names

		   -t, --tags=[]
			  target hosts by tags

		   -T, --target=""
			  target hosts by target name

		   --order=""
			  order hosts

		   -l, --limit=0
			  set limit of servers to target

		   -L, --limit-p=0
			  set percentage of servers to target [0-100]

		   --ignore-unreachable[=false]
			  ignore unreachable hosts

		   -M, --max-fail-percentage=0
			  stop task execution  on  all	servers  when  threshold
			  reached

		   --any-errors-fatal[=false]
			  stop task execution on all servers on error

		   --ignore-errors[=false]
			  continue task execution on errors

		   -J, --spec=""
			  set spec

		   -o, --output=""
			  set	 task	output	 [text|table|table-2|table-3|ta-
			  ble-4|html|markdown|json|csv|none]

		   -p, --print=""
			  set print [all|stdout|stderr]

		   --omit-empty-rows[=false]
			  omit empty row for table output

		   --omit-empty-columns[=false]
			  omit empty column for table output

		   -q, --silent[=false]
			  omit showing loader when running tasks

		   --confirm[=false]
			  confirm root task before running

		   --step[=false]
			  confirm each task before running

		   --tty[=false]
			  replace the current process

		   --attach[=false]
			  ssh to server after command

		   --local[=false]
			  run task on localhost

		   --theme="default"
			  set theme

		   -e, --edit[=false]
			  edit task

		   -R, --report=[recap]
			  reports to show

		   -i, --identity-file=""
			  set identity file

		   -U, --user=""
			  set ssh user

		   --password=""
			  set ssh password

		   --known-hosts-file=""
			  set known hosts file

     exec <command> [flags]
	    Execute arbitrary commands.

	    Single quote your command if you don't want the  file  globbing  and
	    environments  variables  expansion	to take place before the command
	    gets executed in each directory.

	    Available Options:

		   --dry-run[=false]
			  prints the command to see what will be executed

		   --describe[=false]
			  print task information

		   --list-hosts[=false]
			  print hosts that will be targetted

		   -V, --verbose[=false]
			  enable all diagnostics

		   -S, --strategy=""
			  set execution strategy [linear|host_pinned|free]

		   -f, --forks=10000
			  max number of concurrent processes

		   -b, --batch=0
			  set number of hosts to run in parallel

		   -B, --batch-p=0
			  set percentage of servers to run in parallel [0-100]

		   -a, --all[=false]
			  target all servers

		   -v, --invert[=false]
			  invert matching on servers

		   -r, --regex=""
			  filter servers on host regex

		   -s, --servers=[]
			  target servers by names

		   -t, --tags=[]
			  target servers by tags

		   -T, --target=""
			  target servers by target name

		   --order=""
			  order hosts

		   -l, --limit=0
			  set limit of servers to target

		   -L, --limit-p=0
			  set percentage of servers to target

		   --ignore-unreachable[=false]
			  ignore unreachable hosts

		   -M, --max-fail-percentage=0
			  stop task execution  on  all	servers  when  threshold
			  reached

		   --any-errors-fatal[=false]
			  stop task execution on all servers on error

		   --ignore-errors[=false]
			  continue task execution on errors

		   -J, --spec=""
			  set spec

		   -o, --output=""
			  set	 task	output	 [text|table|table-2|table-3|ta-
			  ble-4|html|markdown|json|csv|none]

		   -p, --print=""
			  set print [all|stdout|stderr]

		   --omit-empty-rows[=false]
			  omit empty row for table output

		   --omit-empty-columns[=false]
			  omit empty column for table output

		   -q, --silent[=false]
			  omit showing loader when running tasks

		   --confirm[=false]
			  confirm root task before running

		   --step[=false]
			  confirm each task before running

		   --tty[=false]
			  replace the current process

		   --attach[=false]
			  ssh to server after command

		   --local[=false]
			  run command on localhost

		   --theme="default"
			  set theme

		   -R, --report=[recap]
			  reports to show

		   -i, --identity-file=""
			  set identity file for all servers

		   -U, --user=""
			  set ssh user

		   --password=""
			  set ssh password for all servers

		   --known-hosts-file=""
			  set known hosts file

     init [flags]
	    Initialize sake in the current directory.

     edit [flags]
	    Open up sake config file in $EDITOR.

     edit server [server]
	    Open up sake config file in $EDITOR and go to servers section.

     edit task [task]
	    Open up sake config file in $EDITOR and go to tasks section.

     edit target [target]
	    Open up sake config file in $EDITOR and go to targets section.

     edit spec [spec]
	    Open up sake config file in $EDITOR and go to specs section.

     list servers [servers] [flags]
	    List servers.

	    Available Options:

		   -v, --invert[=false]
			  invert matching on servers

		   -r, --regex=""
			  filter servers on host regex

		   -t, --tags=[]
			  filter servers by tags

		   -H, --all-headers[=false]
			  select all server headers

		   --headers=[server,host,tags,desc]
			  set headers

		   -o, --output="table"
			  set	 table	   output     [table|table-2|table-3|ta-
			  ble-4|html|markdown|json|csv]

		   --theme="default"
			  set theme

     list tasks [tasks] [flags]
	    List tasks.

	    Available Options:

		   -H, --all-headers[=false]
			  select all task headers

		   --headers=[task,desc]
			  set headers

		   -o, --output="table"
			  set	  table     output    [table|table-2|table-3|ta-
			  ble-4|html|markdown|json|csv]

		   --theme="default"
			  set theme

     list tags [tags] [flags]
	    List tags.

	    Available Options:

		   --headers=[tag,server]
			  set headers

		   -o, --output="table"
			  set	 table	   output     [table|table-2|table-3|ta-
			  ble-4|html|markdown|json|csv]

		   --theme="default"
			  set theme

     list targets [targets] [flags]
	    List targets.

	    Available Options:

		   --headers=[target,desc,all,servers,tags,regex,in-
		   vert,limit,limit_p]
			  set headers. Available headers: name, regex

		   -o, --output="table"
			  set	  table     output    [table|table-2|table-3|ta-
			  ble-4|html|markdown|json|csv]

		   --theme="default"
			  set theme

     list specs [specs] [flags]
	    List specs.

	    Available Options:

		   --headers=[spec,desc,describe,list_hosts,order,silent,hid-
		   den,strategy,batch,batch_p,forks,output,print,any_errors_fa-
		   tal,max_fail_percentage,ignore_errors,ignore_unreach-
		   able,omit_empty,report,verbose,confirm,step]
			  set headers

		   -o, --output="table"
			  set	 table	   output     [table|table-2|table-3|ta-
			  ble-4|html|markdown|json|csv]

		   --theme="default"
			  set theme

     describe servers [servers] [flags]
	    Describe servers.

	    Available Options:

		   -t, --tags=[]
			  filter servers by their tag

		   -r, --regex=""
			  filter servers on host regex

		   -v, --invert[=false]
			  invert matching on servers

		   -e, --edit[=false]
			  edit server

     describe tasks [tasks] [flags]
	    Describe tasks.

	    Available Options:

		   -e, --edit[=false]
			  edit task

     describe targets [targets] [flags]
	    Describe targets.

	    Available Options:

		   -e, --edit[=false]
			  edit target

     describe specs [specs] [flags]
	    Describe specs.

	    Available Options:

		   -e, --edit[=false]
			  edit spec

     ssh <server> [flags]
	    ssh to server.

	    Available Options:

		   -i, --identity-file=""
			  set identity file for all servers

		   --password=""
			  set ssh password for all servers

     gen [flags]
	    Generate man page

	    Available Options:

		   -d, --dir="./"
			  directory to save manpage to

CONFIG
     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

     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 de-
     faults.

	  #  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 circum-
	 vent verify host [optional]
	  disable_verify_host: false

	  # Set known_hosts_file path. Default is users ssh home directory  [op-
	 tional]
	  # 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  [op-
	 tional]
	      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)  [op-
	 tional]
		# Available variables: `.Name`, `.Desc`, `.Index`, `.NumTasks`
		#  Available methods: `.Style`, which takes in 1 or more parame-
	 ters, first is the string to be styled, and the rest  are  styling  op-
	 tions
		# 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,  ma-
	 genta, 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, un-
	 derline, 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|re-
	 verse_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|mark-
	 down|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

EXAMPLES
     Initialize sake
	    ~ $ sake init

	    Initialized sake in /tmp
	    - Created sake.yaml

	    Following servers were added to sake.yaml

	     Server    | Host
	    -----------+---------
	     localhost | 0.0.0.0

     List all servers
	    ~ $ sake list servers

	     Server    | Host
	    -----------+---------
	     localhost | 0.0.0.0

     List all tasks
	    ~ $ sake list tasks

	     Task | Description
	    ------+-------------
	     ping | Pong

     Describe a task
	    ~ $ sake describe task ping

	    name: ping
	    desc: ping server
	    local: false
	    work_dir:
	    theme: default
	    target:
		all: true
	    spec:
		output: text
		ignore_unreachable: true
		omit_empty_rows: true
		omit_empty_columns: true
	    cmd:
		echo pong

     Run a task for all servers with tag 'local'
	    ~ $ sake run many --tags local

	    TASK [ping: Pong] ********************

	    0.0.0.0 | pong

     Run ad-hoc command for all servers
	    ~ $ sake exec --all --output table 'echo 123'

	     Server    | Output
	    -----------+--------
	     localhost | 123

FILES
     When running a command, sake will check the current directory and all  par-
     ent  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/con-
	 fig.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

BUGS
     See GitHub Issues: https://github.com/alajmo/sake/issues.

AUTHOR
     sake was written by Samir Alajmovic alajmovic.samir@gmail.com.  For updates
     and more information go to sakecli.com.

v0.15.1 		     2023-09-25T11:47:19CEST			 SAKE(1)

Want to link to this manual page? Use this URL:
<https://man.freebsd.org/cgi/man.cgi?query=sake&sektion=1&manpath=FreeBSD+Ports+15.1.quarterly>

home | help