Tacoscript is a command line tool for the automation of tasks, the management of the operating system and applications.
It can be installed as a single dependency-free binary. It doesn't require any scripting languages. Any Unix/Linux and
Microsoft Windows are supported equally.
Tacoscript can manage host systems from simple yaml files written in a Salt Project inspired configuration language.
Why do we need another provisioning tool? All competitors like Puppet, Ansible, or Salt have limited support for Windows. And they require the installation of additional dependencies, which is not always convenient. Tacoscript is the first tool – written in Go – that is shipped as a static binary. A big variety of host OS and platforms, in a convenient way.
Tacoscript is declarative. You define how the system, a file or a software should look like after tacoscript has run. Before each run, Tacoscript compares the desired outcome with the current state. Only the missing steps are preformed.
Prepare a script in the yaml format , e.g. tascoscript.yaml
, then execute it.
tacoscript tascoscript.yaml
You can also output the execution details with -v
flag:
tacoscript -v tascoscript.yaml
You can use any file extension. Using .taco
for example is fine too.
The script file uses the yaml format. The file consists of a list of tasks that define the states of the host system. The desired state can be an installed program or files with pre-defined content.
Here is the minimal possible tacoscript.yaml
for Unix:
# unique id of the task, can be any string
create-file:
#task type (function) to be executed
cmd.run:
#Paramter, command to run
- name: touch /tmp/somefile.txt
On Windows, the file can be:
create-file:
cmd.run:
- name: New-Item -ItemType file C:\Users\Public\Documents\somefile.txt
- shell: powershell
We can read the script as:
Inside a script, we have a task with the id
create-file
. It consists of the functioncmd.run
which executestouch /tmp/somefile.txt
or its PowerShell equivalent. The desired result of this script execution would be an empty file at/tmp/somefile.txt
.
The tacoscript.yaml file contains a collection of tasks. Each task defines a desired state of the host system. You can add as many tasks as you want. The tacoscript binary will execute tasks from the file sequentially.
Each script contains a collection of tasks. Each task has a unique id, and a function that identifies the kind of
operation the task can do. Tasks get a list of parameters under it as input data. In the example above, the function
cmd.run
receives the parameter -name
with value /tmp/somefile.txt
and interprets it as a command which should be
executed.
cmd.run
Run shell commands and scripts Read morefile.managed
copy, manipulate, download and manage files Read Morefile.replace
remove packages via package manager Read Morepkg.installed
install packages via package manager Read Morepkg.uptodate
update packages via package manager Read Morepkg.removed
remove packages via package manager Read Morewin_reg.present
remove packages via package manager Read Morewin_reg.absent
remove packages via package manager Read Morewin_reg.absent_key
remove packages via package manager Read Morerealvnc_server.config_update
remove packages via package manager Read More
[Read full documentation]
- to use shell pipes, redirects or glob expands, please specify a
shell
parameter user
parameter will require sudo rights for tacoscript, in Windows this parameter is ignored- if you use cmd.run tasks in Windows, you'd better specify the shell parameter as
cmd.exe
, otherwise you will get errors like:exec: "xxx": executable file not found in %PATH%
- the order of the scripts is not guaranteed. If you don't use the require values, the scripts will be executed in any order.
You can run unit-tests as:
make test
Execute static code analytic tools
-
Install golangci-lint using instructions from this site
-
Run the tool using
make sca
- Compile tacoscript binary for Unix with
make build
. - Compile tacoscript binary for Windows with
make build-win