2011-08-27 17:38:12 +00:00
|
|
|
|
.TH "SALT" "7" "August 27, 2011" "0.9.0" "Salt"
|
2011-04-02 04:48:23 +00:00
|
|
|
|
.SH NAME
|
2011-05-30 22:24:23 +00:00
|
|
|
|
salt \- Salt Documentation
|
|
|
|
|
.
|
|
|
|
|
.nr rst2man-indent-level 0
|
|
|
|
|
.
|
|
|
|
|
.de1 rstReportMargin
|
|
|
|
|
\\$1 \\n[an-margin]
|
|
|
|
|
level \\n[rst2man-indent-level]
|
|
|
|
|
level margin: \\n[rst2man-indent\\n[rst2man-indent-level]]
|
|
|
|
|
-
|
|
|
|
|
\\n[rst2man-indent0]
|
|
|
|
|
\\n[rst2man-indent1]
|
|
|
|
|
\\n[rst2man-indent2]
|
|
|
|
|
..
|
|
|
|
|
.de1 INDENT
|
|
|
|
|
.\" .rstReportMargin pre:
|
|
|
|
|
. RS \\$1
|
|
|
|
|
. nr rst2man-indent\\n[rst2man-indent-level] \\n[an-margin]
|
|
|
|
|
. nr rst2man-indent-level +1
|
|
|
|
|
.\" .rstReportMargin post:
|
|
|
|
|
..
|
|
|
|
|
.de UNINDENT
|
|
|
|
|
. RE
|
|
|
|
|
.\" indent \\n[an-margin]
|
|
|
|
|
.\" old: \\n[rst2man-indent\\n[rst2man-indent-level]]
|
|
|
|
|
.nr rst2man-indent-level -1
|
|
|
|
|
.\" new: \\n[rst2man-indent\\n[rst2man-indent-level]]
|
|
|
|
|
.in \\n[rst2man-indent\\n[rst2man-indent-level]]u
|
|
|
|
|
..
|
|
|
|
|
.\" Man page generated from reStructeredText.
|
|
|
|
|
.
|
|
|
|
|
Salt is a powerful remote execution manager that can be used to administer
|
|
|
|
|
servers in a fast and efficient way.
|
2011-07-09 23:13:08 +00:00
|
|
|
|
.sp
|
|
|
|
|
Salt allows commands to be executed across large groups of servers. This means
|
|
|
|
|
systems can be easily managed, but data can also be easily gathered. Quick
|
|
|
|
|
introspection into running systems becomes a reality.
|
|
|
|
|
.sp
|
|
|
|
|
Remote execution is usually used to set up a certain state on a remote system.
|
|
|
|
|
Salt addresses this problem as well, the salt state system uses salt state
|
|
|
|
|
files to define the state a server needs to be in.
|
|
|
|
|
.sp
|
|
|
|
|
Between the remote execution system, and state management Salt addresses the
|
|
|
|
|
backbone of cloud and data center management.
|
|
|
|
|
.sp
|
2011-08-27 17:38:12 +00:00
|
|
|
|
0.8.9 released!
|
2011-07-09 23:13:08 +00:00
|
|
|
|
.sp
|
2011-08-27 17:38:12 +00:00
|
|
|
|
Release announcement:
|
|
|
|
|
.SH SALT 0.8.9 RELEASE NOTES
|
|
|
|
|
.sp
|
|
|
|
|
Salt 0.8.9 has finally arrived! Unfortunately this is much later than I had
|
|
|
|
|
hoped to release 0.8.9, life has been very crazy over the last month. But
|
|
|
|
|
despite challenges, Salt has moved forward!
|
|
|
|
|
.sp
|
|
|
|
|
This release, as expected, adds few new features and many refinements. One
|
|
|
|
|
of the most exciting aspect of this release is that the development community
|
|
|
|
|
for salt has grown a great deal and much of the code is from contributors.
|
|
|
|
|
.sp
|
|
|
|
|
Also, I have filled out the documentation a great deal. So information on
|
|
|
|
|
States is properly documented, and much of the documentation that was out of
|
|
|
|
|
date has been filled in.
|
|
|
|
|
.SS Download!
|
|
|
|
|
.sp
|
|
|
|
|
The Salt source can be downloaded from the salt github site:
|
|
|
|
|
.sp
|
|
|
|
|
\fI\%https://github.com/downloads/thatch45/salt/salt-0.8.9.tar.gz\fP
|
|
|
|
|
.sp
|
|
|
|
|
Or from PiPy:
|
|
|
|
|
.sp
|
|
|
|
|
\fI\%http://pypi.python.org/packages/source/s/salt/salt-0.8.9.tar.gz\fP
|
|
|
|
|
.sp
|
|
|
|
|
Here s the md5sum:
|
|
|
|
|
.sp
|
|
|
|
|
7d5aca4633bc22f59045f59e82f43b56
|
|
|
|
|
.sp
|
|
|
|
|
For instructions on how to set up Salt please see the tutorial
|
2011-05-30 22:24:23 +00:00
|
|
|
|
.SS Tutorial
|
|
|
|
|
.sp
|
|
|
|
|
The Salt system setup is amazingly simple, as this is one of the central design
|
2011-07-09 23:13:08 +00:00
|
|
|
|
goals of Salt. Setting up Salt only requires that the Salt \fImaster\fP be
|
|
|
|
|
running and the Salt \fIminions\fP point to the master.
|
|
|
|
|
.INDENT 0.0
|
|
|
|
|
.TP
|
|
|
|
|
.B master
|
|
|
|
|
The Salt master is the central server that all minions connect to. You
|
|
|
|
|
run commands on the minions through the master and minions send data
|
|
|
|
|
back to the master (unless otherwise redirected with a \fBreturner\fP). It is started with the
|
|
|
|
|
\fBsalt\-master\fP program.
|
|
|
|
|
.TP
|
|
|
|
|
.B minion
|
|
|
|
|
Salt minions are the potentially hundreds or thousands of servers that
|
|
|
|
|
you query and control from the master.
|
|
|
|
|
.UNINDENT
|
2011-05-30 22:24:23 +00:00
|
|
|
|
.SS Installing Salt
|
|
|
|
|
.sp
|
|
|
|
|
As of this writing packages for Salt only exist for Arch Linux, but rpms and
|
|
|
|
|
debs will be available in the future (contributions welcome).
|
2011-07-09 23:13:08 +00:00
|
|
|
|
.SS Instructions by operating system
|
|
|
|
|
.INDENT 0.0
|
|
|
|
|
.IP \(bu 2
|
|
|
|
|
\fI\%Installing on Arch Linux\fP
|
|
|
|
|
.IP \(bu 2
|
|
|
|
|
\fI\%Installing on Debian or Ubuntu\fP
|
|
|
|
|
.IP \(bu 2
|
|
|
|
|
\fI\%Installing from the source tarball\fP
|
|
|
|
|
.UNINDENT
|
|
|
|
|
.SS Installing on Arch Linux
|
|
|
|
|
.sp
|
|
|
|
|
The Arch Linux Salt package is available in the Arch Linux AUR (if you like
|
|
|
|
|
Salt vote for it on the Arch Linux AUR):
|
2011-05-30 22:24:23 +00:00
|
|
|
|
.sp
|
2011-07-09 23:13:08 +00:00
|
|
|
|
\fI\%https://aur.archlinux.org/packages.php?ID=47512\fP
|
2011-05-30 22:24:23 +00:00
|
|
|
|
.sp
|
2011-07-09 23:13:08 +00:00
|
|
|
|
For help using packages in the Arch Linux AUR:
|
|
|
|
|
.sp
|
|
|
|
|
\fI\%https://wiki.archlinux.org/index.php/AUR\fP
|
|
|
|
|
.SS Installing on Debian or Ubuntu
|
|
|
|
|
.sp
|
|
|
|
|
Providing a .deb installer is on our short\-list of things to do; until then
|
|
|
|
|
this is the best way to install Salt on Debian and Ubuntu systems:
|
|
|
|
|
.INDENT 0.0
|
|
|
|
|
.IP 1. 3
|
|
|
|
|
Install the prerequisite packages:
|
|
|
|
|
.sp
|
|
|
|
|
.nf
|
|
|
|
|
.ft C
|
|
|
|
|
aptitude install python\-setuptools python\-yaml python\-crypto python\-m2crypto cython libzmq\-dev
|
|
|
|
|
.ft P
|
|
|
|
|
.fi
|
|
|
|
|
.IP Note
|
|
|
|
|
Installing on Ubuntu Lucid (10.04 LTS)
|
|
|
|
|
.sp
|
|
|
|
|
The ZeroMQ package is available starting with Maverick but it is not
|
|
|
|
|
yet available in Lucid backports. Fortunately, Chris Lea has made a
|
|
|
|
|
\fI\%ZeroMQ PPA\fP available. Install it before installing Salt:
|
|
|
|
|
.sp
|
|
|
|
|
.nf
|
|
|
|
|
.ft C
|
|
|
|
|
aptitude install python\-software\-properties
|
|
|
|
|
add\-apt\-repository ppa:chris\-lea/zeromq
|
|
|
|
|
aptitude update
|
|
|
|
|
aptitude install libzmq\-dev
|
|
|
|
|
.ft P
|
|
|
|
|
.fi
|
|
|
|
|
.RE
|
|
|
|
|
.IP 2. 3
|
|
|
|
|
Grab the latest Python ZeroMQ bindings:
|
|
|
|
|
.sp
|
|
|
|
|
.nf
|
|
|
|
|
.ft C
|
|
|
|
|
easy_install pyzmq
|
|
|
|
|
.ft P
|
|
|
|
|
.fi
|
|
|
|
|
.IP 3. 3
|
|
|
|
|
Install Salt:
|
|
|
|
|
.sp
|
|
|
|
|
.nf
|
|
|
|
|
.ft C
|
2011-08-27 17:38:12 +00:00
|
|
|
|
easy_install \-\-install\-layout=deb https://github.com/downloads/thatch45/salt/salt\-0.9.0\&.tar.gz
|
2011-07-09 23:13:08 +00:00
|
|
|
|
.ft P
|
|
|
|
|
.fi
|
2011-05-30 22:24:23 +00:00
|
|
|
|
.sp
|
2011-07-09 23:13:08 +00:00
|
|
|
|
Please take note of the \fB\-\-install\-layout=deb\fP flag. This is important
|
|
|
|
|
for a functioning installation of Salt.
|
|
|
|
|
.UNINDENT
|
|
|
|
|
.SS Installing from the source tarball
|
|
|
|
|
.INDENT 0.0
|
|
|
|
|
.IP 1. 3
|
|
|
|
|
Download the latest source tarball from the GitHub downloads directory for
|
|
|
|
|
the Salt project: \fI\%https://github.com/thatch45/salt/downloads\fP
|
|
|
|
|
.IP 2. 3
|
|
|
|
|
Untar the tarball and run the \fBsetup.py\fP as root:
|
|
|
|
|
.UNINDENT
|
2011-05-30 22:24:23 +00:00
|
|
|
|
.sp
|
|
|
|
|
.nf
|
|
|
|
|
.ft C
|
2011-08-27 17:38:12 +00:00
|
|
|
|
tar xvf salt\-0.9.0\&.tar.gz
|
|
|
|
|
cd salt\-0.9.0
|
2011-05-30 22:24:23 +00:00
|
|
|
|
python2 setup.py install
|
|
|
|
|
.ft P
|
|
|
|
|
.fi
|
|
|
|
|
.SS Salt dependencies
|
|
|
|
|
.sp
|
|
|
|
|
This is a basic Python setup, nothing fancy. Salt does require a number of
|
|
|
|
|
dependencies though, all of which should be available in your distribution\(aqs
|
|
|
|
|
packages.
|
|
|
|
|
.INDENT 0.0
|
|
|
|
|
.IP \(bu 2
|
|
|
|
|
\fI\%Python 2.6\fP
|
|
|
|
|
.IP \(bu 2
|
|
|
|
|
\fI\%pyzmq\fP \- ZeroMQ Python bindings
|
|
|
|
|
.IP \(bu 2
|
|
|
|
|
\fI\%M2Crypto\fP \- Python OpenSSL wrapper
|
|
|
|
|
.IP \(bu 2
|
|
|
|
|
\fI\%YAML\fP \- Python YAML bindings
|
|
|
|
|
.IP \(bu 2
|
|
|
|
|
\fI\%PyCrypto\fP \- The Python cryptography toolkit
|
|
|
|
|
.UNINDENT
|
|
|
|
|
.sp
|
|
|
|
|
Optional Dependencies:
|
|
|
|
|
.INDENT 0.0
|
|
|
|
|
.IP \(bu 2
|
|
|
|
|
gcc \- dynamic \fI\%Cython\fP module compiling
|
|
|
|
|
.UNINDENT
|
2011-07-09 23:13:08 +00:00
|
|
|
|
.SS Configuring Salt
|
2011-05-30 22:24:23 +00:00
|
|
|
|
.sp
|
2011-07-09 23:13:08 +00:00
|
|
|
|
Salt configuration is very simple. The default configuration for the
|
|
|
|
|
\fImaster\fP will work for most installations and the only requirement for
|
|
|
|
|
setting up a \fIminion\fP is to set the location of the master in the minion
|
|
|
|
|
configuration file. The configuration files will be installed to
|
|
|
|
|
\fB/etc/salt\fP and are named after the respective components,
|
|
|
|
|
\fB/etc/salt/master\fP and \fB/etc/salt/minion\fP.
|
2011-05-30 22:24:23 +00:00
|
|
|
|
.sp
|
2011-07-09 23:13:08 +00:00
|
|
|
|
To make a minion check into the correct master simply edit the
|
|
|
|
|
\fBmaster\fP variable in the minion configuration file to reference
|
|
|
|
|
the master DNS name or IPv4 address.
|
|
|
|
|
.IP "See also"
|
2011-05-30 22:24:23 +00:00
|
|
|
|
.sp
|
2011-07-09 23:13:08 +00:00
|
|
|
|
For further information consult the \fBconfiguration guide\fP.
|
|
|
|
|
.RE
|
|
|
|
|
.SS Running Salt
|
2011-05-30 22:24:23 +00:00
|
|
|
|
.INDENT 0.0
|
2011-07-09 23:13:08 +00:00
|
|
|
|
.IP 1. 3
|
|
|
|
|
Start the \fImaster\fP in the foreground (to daemonize the process, pass
|
|
|
|
|
the \fI\-d flag\fP):
|
|
|
|
|
.sp
|
|
|
|
|
.nf
|
|
|
|
|
.ft C
|
|
|
|
|
salt\-master
|
|
|
|
|
.ft P
|
|
|
|
|
.fi
|
|
|
|
|
.IP 2. 3
|
|
|
|
|
Start the \fIminion\fP in the foreground (to daemonize the process, pass
|
|
|
|
|
the \fI\-d flag\fP):
|
|
|
|
|
.sp
|
|
|
|
|
.nf
|
|
|
|
|
.ft C
|
|
|
|
|
salt\-minion
|
|
|
|
|
.ft P
|
|
|
|
|
.fi
|
2011-05-30 22:24:23 +00:00
|
|
|
|
.UNINDENT
|
2011-07-09 23:13:08 +00:00
|
|
|
|
.IP "See also"
|
|
|
|
|
.sp
|
|
|
|
|
\fBsalt\-master manpage\fP and
|
|
|
|
|
\fBsalt\-minion manpage\fP
|
|
|
|
|
.RE
|
|
|
|
|
.SS Arch Linux init scripts
|
|
|
|
|
.sp
|
|
|
|
|
.nf
|
|
|
|
|
.ft C
|
|
|
|
|
/etc/rc.d/salt\-master start
|
|
|
|
|
/etc/rc.d/salt\-minion start
|
|
|
|
|
.ft P
|
|
|
|
|
.fi
|
|
|
|
|
.SS Manage Salt public keys
|
2011-05-30 22:24:23 +00:00
|
|
|
|
.sp
|
2011-07-09 23:13:08 +00:00
|
|
|
|
Salt manages authentication with RSA public keys. The keys are managed on the
|
|
|
|
|
\fImaster\fP via the \fBsalt\-key\fP command. Once a \fIminion\fP
|
|
|
|
|
checks into the master the master will save a copy of the minion key. Before
|
|
|
|
|
the master can send commands to the minion the key needs to be "accepted".
|
2011-05-30 22:24:23 +00:00
|
|
|
|
.INDENT 0.0
|
2011-07-09 23:13:08 +00:00
|
|
|
|
.IP 1. 3
|
|
|
|
|
List the accepted and unaccepted salt keys:
|
|
|
|
|
.sp
|
|
|
|
|
.nf
|
|
|
|
|
.ft C
|
|
|
|
|
salt\-key \-L
|
|
|
|
|
.ft P
|
|
|
|
|
.fi
|
|
|
|
|
.IP 2. 3
|
|
|
|
|
Accept a minion key:
|
|
|
|
|
.sp
|
|
|
|
|
.nf
|
|
|
|
|
.ft C
|
|
|
|
|
salt\-key \-a <minion id>
|
|
|
|
|
.ft P
|
|
|
|
|
.fi
|
2011-05-30 22:24:23 +00:00
|
|
|
|
.sp
|
2011-07-09 23:13:08 +00:00
|
|
|
|
or accept all unaccepted minion keys:
|
|
|
|
|
.sp
|
|
|
|
|
.nf
|
|
|
|
|
.ft C
|
|
|
|
|
salt\-key \-A
|
|
|
|
|
.ft P
|
|
|
|
|
.fi
|
|
|
|
|
.UNINDENT
|
2011-05-30 22:24:23 +00:00
|
|
|
|
.IP "See also"
|
|
|
|
|
.sp
|
2011-07-09 23:13:08 +00:00
|
|
|
|
\fBsalt\-key manpage\fP
|
2011-05-30 22:24:23 +00:00
|
|
|
|
.RE
|
2011-07-09 23:13:08 +00:00
|
|
|
|
.SS Order your minions around
|
2011-05-30 22:24:23 +00:00
|
|
|
|
.sp
|
2011-07-09 23:13:08 +00:00
|
|
|
|
Now that you have a \fImaster\fP and at least one \fIminion\fP
|
|
|
|
|
communicating with each other you can perform commands on the minion via the
|
|
|
|
|
\fBsalt\fP command. Salt calls are comprised of three main components:
|
2011-05-30 22:24:23 +00:00
|
|
|
|
.sp
|
|
|
|
|
.nf
|
|
|
|
|
.ft C
|
2011-07-09 23:13:08 +00:00
|
|
|
|
salt \(aq<target>\(aq <function> [arguments]
|
2011-05-30 22:24:23 +00:00
|
|
|
|
.ft P
|
|
|
|
|
.fi
|
2011-07-09 23:13:08 +00:00
|
|
|
|
.IP "See also"
|
|
|
|
|
.sp
|
|
|
|
|
\fBsalt manpage\fP
|
|
|
|
|
.RE
|
|
|
|
|
.SS target
|
2011-05-30 22:24:23 +00:00
|
|
|
|
.sp
|
2011-07-09 23:13:08 +00:00
|
|
|
|
The target component allows you to filter which minions should run the
|
|
|
|
|
following function. The default filter is a glob on the minion id. E.g.:
|
2011-05-30 22:24:23 +00:00
|
|
|
|
.sp
|
|
|
|
|
.nf
|
|
|
|
|
.ft C
|
2011-07-09 23:13:08 +00:00
|
|
|
|
salt \(aq*\(aq test.ping
|
|
|
|
|
salt \(aq*.example.org\(aq test.ping
|
2011-05-30 22:24:23 +00:00
|
|
|
|
.ft P
|
|
|
|
|
.fi
|
|
|
|
|
.sp
|
2011-07-09 23:13:08 +00:00
|
|
|
|
Targets can be based on minion system information using the grains system:
|
2011-05-30 22:24:23 +00:00
|
|
|
|
.sp
|
|
|
|
|
.nf
|
|
|
|
|
.ft C
|
2011-07-09 23:13:08 +00:00
|
|
|
|
salt \-G \(aqos:Ubuntu\(aq test.ping
|
2011-05-30 22:24:23 +00:00
|
|
|
|
.ft P
|
|
|
|
|
.fi
|
2011-07-09 23:13:08 +00:00
|
|
|
|
.IP "See also"
|
|
|
|
|
.sp
|
|
|
|
|
\fBGrains system\fP
|
|
|
|
|
.RE
|
2011-05-30 22:24:23 +00:00
|
|
|
|
.sp
|
2011-07-09 23:13:08 +00:00
|
|
|
|
Targets can be filtered by regular expression:
|
2011-05-30 22:24:23 +00:00
|
|
|
|
.sp
|
|
|
|
|
.nf
|
|
|
|
|
.ft C
|
2011-07-09 23:13:08 +00:00
|
|
|
|
salt \-E \(aqvirtmach[0\-9]\(aq test.ping
|
2011-05-30 22:24:23 +00:00
|
|
|
|
.ft P
|
|
|
|
|
.fi
|
|
|
|
|
.sp
|
2011-07-09 23:13:08 +00:00
|
|
|
|
Finally, targets can be explicitly specified in a list:
|
2011-05-30 22:24:23 +00:00
|
|
|
|
.sp
|
|
|
|
|
.nf
|
|
|
|
|
.ft C
|
2011-07-09 23:13:08 +00:00
|
|
|
|
salt \-L foo,bar,baz,quo test.ping
|
2011-05-30 22:24:23 +00:00
|
|
|
|
.ft P
|
|
|
|
|
.fi
|
2011-07-09 23:13:08 +00:00
|
|
|
|
.SS function
|
2011-05-30 22:24:23 +00:00
|
|
|
|
.sp
|
2011-07-09 23:13:08 +00:00
|
|
|
|
A function is some functionality provided by a module. Salt ships with a large
|
|
|
|
|
collection of available functions. List all available functions on your
|
|
|
|
|
minions:
|
2011-05-30 22:24:23 +00:00
|
|
|
|
.sp
|
|
|
|
|
.nf
|
|
|
|
|
.ft C
|
2011-07-09 23:13:08 +00:00
|
|
|
|
salt \(aq*\(aq sys.doc
|
2011-05-30 22:24:23 +00:00
|
|
|
|
.ft P
|
|
|
|
|
.fi
|
|
|
|
|
.sp
|
2011-07-09 23:13:08 +00:00
|
|
|
|
Here are some examples:
|
|
|
|
|
.sp
|
|
|
|
|
Show all currently available minions:
|
2011-05-30 22:24:23 +00:00
|
|
|
|
.sp
|
|
|
|
|
.nf
|
|
|
|
|
.ft C
|
2011-07-09 23:13:08 +00:00
|
|
|
|
salt \(aq*\(aq test.ping
|
2011-05-30 22:24:23 +00:00
|
|
|
|
.ft P
|
|
|
|
|
.fi
|
|
|
|
|
.sp
|
2011-07-09 23:13:08 +00:00
|
|
|
|
Run an arbitrary shell command:
|
2011-05-30 22:24:23 +00:00
|
|
|
|
.sp
|
|
|
|
|
.nf
|
|
|
|
|
.ft C
|
2011-07-09 23:13:08 +00:00
|
|
|
|
salt \(aq*\(aq cmd.run \(aquname \-a\(aq
|
2011-05-30 22:24:23 +00:00
|
|
|
|
.ft P
|
|
|
|
|
.fi
|
2011-07-09 23:13:08 +00:00
|
|
|
|
.IP "See also"
|
2011-05-30 22:24:23 +00:00
|
|
|
|
.sp
|
2011-07-09 23:13:08 +00:00
|
|
|
|
\fBthe full list of modules\fP
|
|
|
|
|
.RE
|
|
|
|
|
.SS arguments
|
|
|
|
|
.sp
|
|
|
|
|
Space\-delimited arguments to the function:
|
2011-05-30 22:24:23 +00:00
|
|
|
|
.sp
|
|
|
|
|
.nf
|
|
|
|
|
.ft C
|
2011-07-09 23:13:08 +00:00
|
|
|
|
salt \(aq*\(aq cmd.exec_code python \(aqimport sys; print sys.version\(aq
|
2011-05-30 22:24:23 +00:00
|
|
|
|
.ft P
|
|
|
|
|
.fi
|
2011-08-27 17:38:12 +00:00
|
|
|
|
.SS New Features
|
|
|
|
|
.SS Salt Run
|
2011-07-09 23:13:08 +00:00
|
|
|
|
.sp
|
2011-08-27 17:38:12 +00:00
|
|
|
|
A big feature is the addition of Salt run, the \fBsalt\-run\fP command allows for
|
|
|
|
|
master side execution modules to be made that gather specific information or
|
|
|
|
|
execute custom routines from the master.
|
2011-07-09 23:13:08 +00:00
|
|
|
|
.sp
|
2011-08-27 17:38:12 +00:00
|
|
|
|
Documentation for salt\-run can be found here:
|
2011-07-09 23:13:08 +00:00
|
|
|
|
.sp
|
2011-08-27 17:38:12 +00:00
|
|
|
|
\fI\%http://saltstack.org/ref/runners.html\fP
|
|
|
|
|
.SS Refined Outputters
|
2011-07-09 23:13:08 +00:00
|
|
|
|
.sp
|
2011-08-27 17:38:12 +00:00
|
|
|
|
One problem often complained about in salt was the fact that the output was
|
|
|
|
|
so messy. Thanks to help from Jeff Schroeder a cleaner interface for the
|
|
|
|
|
command output for the Salt cli has been made. This new interface makes
|
|
|
|
|
adding new printout formats easy and additions to the capabilities of minion
|
|
|
|
|
modules makes it possible to set the printout mode or \fBoutputter\fP for
|
|
|
|
|
functions in minion modules.
|
|
|
|
|
.SS Cross Calling Salt Modules
|
2011-07-09 23:13:08 +00:00
|
|
|
|
.sp
|
2011-08-27 17:38:12 +00:00
|
|
|
|
Salt modules can now call each other, the \fB__salt__\fP dict has been added to
|
|
|
|
|
the predefined references in minion modules. This new feature is documented in
|
|
|
|
|
the modules documentation:
|
2011-05-30 22:24:23 +00:00
|
|
|
|
.sp
|
2011-08-27 17:38:12 +00:00
|
|
|
|
\fI\%http://saltstack.org/ref/modules/index.html\fP
|
|
|
|
|
.SS Watch Option Added to Salt State System
|
2011-07-09 23:13:08 +00:00
|
|
|
|
.sp
|
2011-08-27 17:38:12 +00:00
|
|
|
|
Now in Salt states you can set the watch option, this will allow watch enabled
|
|
|
|
|
states to change based on a change in the other defined states. This is similar
|
|
|
|
|
to subscribe and notify statements in puppet.
|
|
|
|
|
.SS Root Dir Option
|
2011-05-30 22:24:23 +00:00
|
|
|
|
.sp
|
2011-08-27 17:38:12 +00:00
|
|
|
|
Travis Cline has added the ability to define the option \fBroot_dir\fP which
|
|
|
|
|
allows the salt minion to operate in a subdir. This is a strong move in
|
|
|
|
|
supporting the minion running as an unprivileged user
|
|
|
|
|
.SS Config Files Defined in Variables
|
|
|
|
|
.sp
|
|
|
|
|
Thanks again to Travis Cline, the master and minion configuration file locations
|
|
|
|
|
can be defined in environment variables now.
|
|
|
|
|
.SS New Modules
|
|
|
|
|
.sp
|
|
|
|
|
Quite a few new modules, states, returners and runners have been made.
|
|
|
|
|
.SS New Minion Modules
|
|
|
|
|
.SS apt
|
|
|
|
|
.sp
|
|
|
|
|
Support for apt\-get has been added, this adds greatly improved Debian and
|
|
|
|
|
Ubuntu support to Salt!
|
|
|
|
|
.SS useradd and groupadd
|
|
|
|
|
.sp
|
|
|
|
|
Support for manipulating users and groups on Unix\-like systems.
|
|
|
|
|
.SS moosefs
|
|
|
|
|
.sp
|
|
|
|
|
Initial support for reporting on aspects of the distributed file system,
|
|
|
|
|
MooseFS. For more information on MooseFS please see: \fI\%http://moosefs.org\fP
|
|
|
|
|
.sp
|
|
|
|
|
Thanks to Joseph Hall for his work on MooseFS support.
|
|
|
|
|
.SS mount
|
|
|
|
|
.sp
|
|
|
|
|
Manage mounts and the fstab.
|
|
|
|
|
.SS puppet
|
|
|
|
|
.sp
|
|
|
|
|
Execute puppet on remote systems.
|
|
|
|
|
.SS shadow
|
|
|
|
|
.sp
|
|
|
|
|
Manipulate and manage the user password file.
|
|
|
|
|
.SS ssh
|
|
|
|
|
.sp
|
|
|
|
|
Interact with ssh keys.
|
|
|
|
|
.SS New States
|
|
|
|
|
.SS user and group
|
|
|
|
|
.sp
|
|
|
|
|
Support for managing users and groups in Salt States.
|
|
|
|
|
.SS mount
|
|
|
|
|
.sp
|
|
|
|
|
Enforce mounts and the fstab.
|
|
|
|
|
.SS New Returners
|
|
|
|
|
.SS mongo_return
|
|
|
|
|
.sp
|
|
|
|
|
Send the return information to a mongodb server.
|
|
|
|
|
.SS New Runners
|
|
|
|
|
.SS manage
|
|
|
|
|
.sp
|
|
|
|
|
Display minions that are up or down.
|
|
|
|
|
.sp
|
|
|
|
|
The latest Salt is 0.8.9:
|
|
|
|
|
.sp
|
|
|
|
|
\fI\%https://github.com/downloads/thatch45/salt/salt-0.8.9.tar.gz\fP
|
|
|
|
|
.sp
|
|
|
|
|
Additional packages can be downloaded from the download page:
|
|
|
|
|
.SH DOWNLOAD SALT
|
|
|
|
|
.sp
|
|
|
|
|
Packages and dependencies for Salt can be downloaded here for specific
|
|
|
|
|
operating systems. Please follow and specific instructions for your system.
|
|
|
|
|
.SS Salt From Source
|
|
|
|
|
.sp
|
|
|
|
|
The Salt source can be downloaded and installed directly from git:
|
|
|
|
|
.sp
|
|
|
|
|
.nf
|
|
|
|
|
.ft C
|
|
|
|
|
# git clone git://github.com/thatch45/salt.git
|
|
|
|
|
.ft P
|
|
|
|
|
.fi
|
|
|
|
|
.sp
|
|
|
|
|
The latest source tarball can be downloaded as well:
|
|
|
|
|
.sp
|
|
|
|
|
\fI\%https://github.com/downloads/thatch45/salt/salt-0.8.9.tar.gz\fP
|
|
|
|
|
.sp
|
|
|
|
|
Salt should run on any Unix like platform so long as the dependencies are met.
|
|
|
|
|
.SS Salt for Red Hat
|
|
|
|
|
.sp
|
|
|
|
|
Salt rpms have been prepared for Red Hat Enterprise Linux 6 and Fedora 15.
|
|
|
|
|
While Fedora 15 only requires the Salt rpm Red Hat Enterprise Linux 6 requires
|
|
|
|
|
that a newer version of ZeroMQ be installed than what is available in the EPEL
|
|
|
|
|
repositories.
|
|
|
|
|
.SS Fedora rpms
|
|
|
|
|
.sp
|
|
|
|
|
Salt noarch rpm for Fedora 15:
|
|
|
|
|
.sp
|
|
|
|
|
\fI\%https://github.com/downloads/thatch45/salt/salt-0.8.9-1.fc15.noarch.rpm\fP
|
|
|
|
|
.SS Red Hat Enterprise Linux 6 rpms
|
|
|
|
|
.sp
|
|
|
|
|
The EPEL repository is required for Salt as well as updated ZeroMQ packages.
|
|
|
|
|
.sp
|
|
|
|
|
The Salt rpm can be downloaded here:
|
|
|
|
|
.sp
|
|
|
|
|
\fI\%https://github.com/downloads/thatch45/salt/salt-0.8.9-1.el6.noarch.rpm\fP
|
|
|
|
|
.sp
|
|
|
|
|
ZeroMQ backport:
|
|
|
|
|
.sp
|
|
|
|
|
\fI\%https://github.com/downloads/thatch45/salt/zeromq-2.1.7-1.el6.x86_64.rpm\fP
|
|
|
|
|
.sp
|
|
|
|
|
PyZMQ bindings backport:
|
|
|
|
|
.sp
|
|
|
|
|
\fI\%https://github.com/downloads/thatch45/salt/python-zmq-2.1.7-1.el6.src.rpm\fP
|
|
|
|
|
.sp
|
|
|
|
|
Package to set up EPEL repository (provided by the EPEL project):
|
|
|
|
|
.sp
|
|
|
|
|
\fI\%http://download.fedoraproject.org/pub/epel/6/i386/epel-release-6-5.noarch.rpm\fP
|
|
|
|
|
.SS Red Hat Enterprise Linux 5 rpms
|
|
|
|
|
.sp
|
|
|
|
|
Red Hat Enterprise Linux 5 requires more backports and the use of the
|
|
|
|
|
python 2.6 stack provided in the EPEL repository. All of the listed packages
|
|
|
|
|
need to be installed and the EPEL repository enabled to bring in the needed
|
|
|
|
|
dependencies:
|
|
|
|
|
.sp
|
|
|
|
|
Salt rpm:
|
|
|
|
|
.sp
|
|
|
|
|
\fI\%https://github.com/downloads/thatch45/salt/salt-0.8.9-1.el5.noarch.rpm\fP
|
|
|
|
|
.sp
|
|
|
|
|
YAML bindings for python 2.6:
|
|
|
|
|
.sp
|
|
|
|
|
\fI\%https://github.com/downloads/thatch45/salt/python26-PyYAML-3.08-4.el5.x86_64.rpm\fP
|
|
|
|
|
.sp
|
|
|
|
|
ZeroMQ backport:
|
|
|
|
|
.sp
|
|
|
|
|
\fI\%https://github.com/downloads/thatch45/salt/zeromq-2.1.7-1.el5.x86_64.rpm\fP
|
|
|
|
|
.sp
|
|
|
|
|
PyZMQ bindings backport:
|
|
|
|
|
.sp
|
|
|
|
|
\fI\%https://github.com/downloads/thatch45/salt/python26-zmq-2.1.7-1.el5.x86_64.rpm\fP
|
|
|
|
|
.SS Salt for Arch Linux
|
|
|
|
|
.sp
|
|
|
|
|
Salt can be easily installed on Arch Linux, install the package from the Arch
|
|
|
|
|
Linux AUR:
|
|
|
|
|
.sp
|
|
|
|
|
\fI\%https://aur.archlinux.org/packages.php?ID=47512\fP
|
|
|
|
|
.sp
|
|
|
|
|
Or install directly from git on Arch Linux:
|
|
|
|
|
.sp
|
|
|
|
|
\fI\%https://aur.archlinux.org/packages.php?ID=47513\fP
|
|
|
|
|
.SH GETTING STARTED
|
|
|
|
|
.sp
|
|
|
|
|
A number of resources are available to get going with Salt.
|
|
|
|
|
.sp
|
|
|
|
|
If you want to get set up quickly and try out Salt, follow the tutorial.
|
|
|
|
|
.SH TUTORIAL
|
|
|
|
|
.sp
|
|
|
|
|
The Salt system setup is amazingly simple, as this is one of the central design
|
|
|
|
|
goals of Salt. Setting up Salt only requires that the Salt \fImaster\fP be
|
|
|
|
|
running and the Salt \fIminions\fP point to the master.
|
|
|
|
|
.INDENT 0.0
|
|
|
|
|
.TP
|
|
|
|
|
.B master
|
|
|
|
|
The Salt master is the central server that all minions connect to. You
|
|
|
|
|
run commands on the minions through the master and minions send data
|
|
|
|
|
back to the master (unless otherwise redirected with a \fBreturner\fP). It is started with the
|
|
|
|
|
\fBsalt\-master\fP program.
|
|
|
|
|
.TP
|
|
|
|
|
.B minion
|
|
|
|
|
Salt minions are the potentially hundreds or thousands of servers that
|
|
|
|
|
you query and control from the master.
|
|
|
|
|
.UNINDENT
|
|
|
|
|
.SS Installing Salt
|
|
|
|
|
.sp
|
|
|
|
|
As of this writing packages for Salt only exist for Arch Linux, but rpms and
|
|
|
|
|
debs will be available in the future (contributions welcome).
|
|
|
|
|
.SS Instructions by operating system
|
2011-05-30 22:24:23 +00:00
|
|
|
|
.INDENT 0.0
|
|
|
|
|
.IP \(bu 2
|
2011-08-27 17:38:12 +00:00
|
|
|
|
\fI\%Installing on Arch Linux\fP
|
2011-05-30 22:24:23 +00:00
|
|
|
|
.IP \(bu 2
|
2011-08-27 17:38:12 +00:00
|
|
|
|
\fI\%Installing on Debian or Ubuntu\fP
|
|
|
|
|
.IP \(bu 2
|
|
|
|
|
\fI\%Installing from the source tarball\fP
|
2011-05-30 22:24:23 +00:00
|
|
|
|
.UNINDENT
|
2011-08-27 17:38:12 +00:00
|
|
|
|
.SS Installing on Arch Linux
|
|
|
|
|
.sp
|
|
|
|
|
The Arch Linux Salt package is available in the Arch Linux AUR (if you like
|
|
|
|
|
Salt vote for it on the Arch Linux AUR):
|
|
|
|
|
.sp
|
|
|
|
|
\fI\%https://aur.archlinux.org/packages.php?ID=47512\fP
|
|
|
|
|
.sp
|
|
|
|
|
For help using packages in the Arch Linux AUR:
|
|
|
|
|
.sp
|
|
|
|
|
\fI\%https://wiki.archlinux.org/index.php/AUR\fP
|
|
|
|
|
.SS Installing on Debian or Ubuntu
|
|
|
|
|
.sp
|
|
|
|
|
Providing a .deb installer is on our short\-list of things to do; until then
|
|
|
|
|
this is the best way to install Salt on Debian and Ubuntu systems:
|
|
|
|
|
.INDENT 0.0
|
|
|
|
|
.IP 1. 3
|
|
|
|
|
Install the prerequisite packages:
|
2011-05-30 22:24:23 +00:00
|
|
|
|
.sp
|
|
|
|
|
.nf
|
|
|
|
|
.ft C
|
2011-08-27 17:38:12 +00:00
|
|
|
|
aptitude install python\-setuptools python\-yaml python\-crypto python\-m2crypto cython libzmq\-dev
|
|
|
|
|
.ft P
|
|
|
|
|
.fi
|
|
|
|
|
.IP Note
|
|
|
|
|
Installing on Ubuntu Lucid (10.04 LTS)
|
|
|
|
|
.sp
|
|
|
|
|
The ZeroMQ package is available starting with Maverick but it is not
|
|
|
|
|
yet available in Lucid backports. Fortunately, Chris Lea has made a
|
|
|
|
|
\fI\%ZeroMQ PPA\fP available. Install it before installing Salt:
|
|
|
|
|
.sp
|
|
|
|
|
.nf
|
|
|
|
|
.ft C
|
|
|
|
|
aptitude install python\-software\-properties
|
|
|
|
|
add\-apt\-repository ppa:chris\-lea/zeromq
|
|
|
|
|
aptitude update
|
|
|
|
|
aptitude install libzmq\-dev
|
|
|
|
|
.ft P
|
|
|
|
|
.fi
|
|
|
|
|
.RE
|
|
|
|
|
.IP 2. 3
|
|
|
|
|
Grab the latest Python ZeroMQ bindings:
|
|
|
|
|
.sp
|
|
|
|
|
.nf
|
|
|
|
|
.ft C
|
|
|
|
|
easy_install pyzmq
|
|
|
|
|
.ft P
|
|
|
|
|
.fi
|
|
|
|
|
.IP 3. 3
|
|
|
|
|
Install Salt:
|
|
|
|
|
.sp
|
|
|
|
|
.nf
|
|
|
|
|
.ft C
|
|
|
|
|
easy_install \-\-install\-layout=deb https://github.com/downloads/thatch45/salt/salt\-0.9.0\&.tar.gz
|
|
|
|
|
.ft P
|
|
|
|
|
.fi
|
|
|
|
|
.sp
|
|
|
|
|
Please take note of the \fB\-\-install\-layout=deb\fP flag. This is important
|
|
|
|
|
for a functioning installation of Salt.
|
|
|
|
|
.UNINDENT
|
|
|
|
|
.SS Installing from the source tarball
|
|
|
|
|
.INDENT 0.0
|
|
|
|
|
.IP 1. 3
|
|
|
|
|
Download the latest source tarball from the GitHub downloads directory for
|
|
|
|
|
the Salt project: \fI\%https://github.com/thatch45/salt/downloads\fP
|
|
|
|
|
.IP 2. 3
|
|
|
|
|
Untar the tarball and run the \fBsetup.py\fP as root:
|
|
|
|
|
.UNINDENT
|
|
|
|
|
.sp
|
|
|
|
|
.nf
|
|
|
|
|
.ft C
|
|
|
|
|
tar xvf salt\-0.9.0\&.tar.gz
|
|
|
|
|
cd salt\-0.9.0
|
|
|
|
|
python2 setup.py install
|
|
|
|
|
.ft P
|
|
|
|
|
.fi
|
|
|
|
|
.SS Salt dependencies
|
|
|
|
|
.sp
|
|
|
|
|
This is a basic Python setup, nothing fancy. Salt does require a number of
|
|
|
|
|
dependencies though, all of which should be available in your distribution\(aqs
|
|
|
|
|
packages.
|
|
|
|
|
.INDENT 0.0
|
|
|
|
|
.IP \(bu 2
|
|
|
|
|
\fI\%Python 2.6\fP
|
|
|
|
|
.IP \(bu 2
|
|
|
|
|
\fI\%pyzmq\fP \- ZeroMQ Python bindings
|
|
|
|
|
.IP \(bu 2
|
|
|
|
|
\fI\%M2Crypto\fP \- Python OpenSSL wrapper
|
|
|
|
|
.IP \(bu 2
|
|
|
|
|
\fI\%YAML\fP \- Python YAML bindings
|
|
|
|
|
.IP \(bu 2
|
|
|
|
|
\fI\%PyCrypto\fP \- The Python cryptography toolkit
|
|
|
|
|
.UNINDENT
|
|
|
|
|
.sp
|
|
|
|
|
Optional Dependencies:
|
|
|
|
|
.INDENT 0.0
|
|
|
|
|
.IP \(bu 2
|
|
|
|
|
gcc \- dynamic \fI\%Cython\fP module compiling
|
|
|
|
|
.UNINDENT
|
|
|
|
|
.SS Configuring Salt
|
|
|
|
|
.sp
|
|
|
|
|
Salt configuration is very simple. The default configuration for the
|
|
|
|
|
\fImaster\fP will work for most installations and the only requirement for
|
|
|
|
|
setting up a \fIminion\fP is to set the location of the master in the minion
|
|
|
|
|
configuration file. The configuration files will be installed to
|
|
|
|
|
\fB/etc/salt\fP and are named after the respective components,
|
|
|
|
|
\fB/etc/salt/master\fP and \fB/etc/salt/minion\fP.
|
|
|
|
|
.sp
|
|
|
|
|
To make a minion check into the correct master simply edit the
|
|
|
|
|
\fBmaster\fP variable in the minion configuration file to reference
|
|
|
|
|
the master DNS name or IPv4 address.
|
|
|
|
|
.IP "See also"
|
|
|
|
|
.sp
|
|
|
|
|
For further information consult the \fBconfiguration guide\fP.
|
|
|
|
|
.RE
|
|
|
|
|
.SS Running Salt
|
|
|
|
|
.INDENT 0.0
|
|
|
|
|
.IP 1. 3
|
|
|
|
|
Start the \fImaster\fP in the foreground (to daemonize the process, pass
|
|
|
|
|
the \fI\-d flag\fP):
|
|
|
|
|
.sp
|
|
|
|
|
.nf
|
|
|
|
|
.ft C
|
|
|
|
|
salt\-master
|
|
|
|
|
.ft P
|
|
|
|
|
.fi
|
|
|
|
|
.IP 2. 3
|
|
|
|
|
Start the \fIminion\fP in the foreground (to daemonize the process, pass
|
|
|
|
|
the \fI\-d flag\fP):
|
|
|
|
|
.sp
|
|
|
|
|
.nf
|
|
|
|
|
.ft C
|
|
|
|
|
salt\-minion
|
|
|
|
|
.ft P
|
|
|
|
|
.fi
|
|
|
|
|
.UNINDENT
|
|
|
|
|
.IP "See also"
|
|
|
|
|
.sp
|
|
|
|
|
\fBsalt\-master manpage\fP and
|
|
|
|
|
\fBsalt\-minion manpage\fP
|
|
|
|
|
.RE
|
|
|
|
|
.SS Arch Linux init scripts
|
|
|
|
|
.sp
|
|
|
|
|
.nf
|
|
|
|
|
.ft C
|
|
|
|
|
/etc/rc.d/salt\-master start
|
|
|
|
|
/etc/rc.d/salt\-minion start
|
|
|
|
|
.ft P
|
|
|
|
|
.fi
|
|
|
|
|
.SS Manage Salt public keys
|
|
|
|
|
.sp
|
|
|
|
|
Salt manages authentication with RSA public keys. The keys are managed on the
|
|
|
|
|
\fImaster\fP via the \fBsalt\-key\fP command. Once a \fIminion\fP
|
|
|
|
|
checks into the master the master will save a copy of the minion key. Before
|
|
|
|
|
the master can send commands to the minion the key needs to be "accepted".
|
|
|
|
|
.INDENT 0.0
|
|
|
|
|
.IP 1. 3
|
|
|
|
|
List the accepted and unaccepted salt keys:
|
|
|
|
|
.sp
|
|
|
|
|
.nf
|
|
|
|
|
.ft C
|
|
|
|
|
salt\-key \-L
|
|
|
|
|
.ft P
|
|
|
|
|
.fi
|
|
|
|
|
.IP 2. 3
|
|
|
|
|
Accept a minion key:
|
|
|
|
|
.sp
|
|
|
|
|
.nf
|
|
|
|
|
.ft C
|
|
|
|
|
salt\-key \-a <minion id>
|
|
|
|
|
.ft P
|
|
|
|
|
.fi
|
|
|
|
|
.sp
|
|
|
|
|
or accept all unaccepted minion keys:
|
|
|
|
|
.sp
|
|
|
|
|
.nf
|
|
|
|
|
.ft C
|
|
|
|
|
salt\-key \-A
|
|
|
|
|
.ft P
|
|
|
|
|
.fi
|
|
|
|
|
.UNINDENT
|
|
|
|
|
.IP "See also"
|
|
|
|
|
.sp
|
|
|
|
|
\fBsalt\-key manpage\fP
|
|
|
|
|
.RE
|
|
|
|
|
.SS Order your minions around
|
|
|
|
|
.sp
|
|
|
|
|
Now that you have a \fImaster\fP and at least one \fIminion\fP
|
|
|
|
|
communicating with each other you can perform commands on the minion via the
|
|
|
|
|
\fBsalt\fP command. Salt calls are comprised of three main components:
|
|
|
|
|
.sp
|
|
|
|
|
.nf
|
|
|
|
|
.ft C
|
|
|
|
|
salt \(aq<target>\(aq <function> [arguments]
|
|
|
|
|
.ft P
|
|
|
|
|
.fi
|
|
|
|
|
.IP "See also"
|
|
|
|
|
.sp
|
|
|
|
|
\fBsalt manpage\fP
|
|
|
|
|
.RE
|
|
|
|
|
.SS target
|
|
|
|
|
.sp
|
|
|
|
|
The target component allows you to filter which minions should run the
|
|
|
|
|
following function. The default filter is a glob on the minion id. E.g.:
|
|
|
|
|
.sp
|
|
|
|
|
.nf
|
|
|
|
|
.ft C
|
|
|
|
|
salt \(aq*\(aq test.ping
|
|
|
|
|
salt \(aq*.example.org\(aq test.ping
|
|
|
|
|
.ft P
|
|
|
|
|
.fi
|
|
|
|
|
.sp
|
|
|
|
|
Targets can be based on minion system information using the grains system:
|
|
|
|
|
.sp
|
|
|
|
|
.nf
|
|
|
|
|
.ft C
|
|
|
|
|
salt \-G \(aqos:Ubuntu\(aq test.ping
|
|
|
|
|
.ft P
|
|
|
|
|
.fi
|
|
|
|
|
.IP "See also"
|
|
|
|
|
.sp
|
|
|
|
|
\fBGrains system\fP
|
|
|
|
|
.RE
|
|
|
|
|
.sp
|
|
|
|
|
Targets can be filtered by regular expression:
|
|
|
|
|
.sp
|
|
|
|
|
.nf
|
|
|
|
|
.ft C
|
|
|
|
|
salt \-E \(aqvirtmach[0\-9]\(aq test.ping
|
|
|
|
|
.ft P
|
|
|
|
|
.fi
|
|
|
|
|
.sp
|
|
|
|
|
Finally, targets can be explicitly specified in a list:
|
|
|
|
|
.sp
|
|
|
|
|
.nf
|
|
|
|
|
.ft C
|
|
|
|
|
salt \-L foo,bar,baz,quo test.ping
|
|
|
|
|
.ft P
|
|
|
|
|
.fi
|
|
|
|
|
.SS function
|
|
|
|
|
.sp
|
|
|
|
|
A function is some functionality provided by a module. Salt ships with a large
|
|
|
|
|
collection of available functions. List all available functions on your
|
|
|
|
|
minions:
|
|
|
|
|
.sp
|
|
|
|
|
.nf
|
|
|
|
|
.ft C
|
|
|
|
|
salt \(aq*\(aq sys.doc
|
|
|
|
|
.ft P
|
|
|
|
|
.fi
|
|
|
|
|
.sp
|
|
|
|
|
Here are some examples:
|
|
|
|
|
.sp
|
|
|
|
|
Show all currently available minions:
|
|
|
|
|
.sp
|
|
|
|
|
.nf
|
|
|
|
|
.ft C
|
|
|
|
|
salt \(aq*\(aq test.ping
|
|
|
|
|
.ft P
|
|
|
|
|
.fi
|
|
|
|
|
.sp
|
|
|
|
|
Run an arbitrary shell command:
|
|
|
|
|
.sp
|
|
|
|
|
.nf
|
|
|
|
|
.ft C
|
|
|
|
|
salt \(aq*\(aq cmd.run \(aquname \-a\(aq
|
|
|
|
|
.ft P
|
|
|
|
|
.fi
|
|
|
|
|
.IP "See also"
|
|
|
|
|
.sp
|
|
|
|
|
\fBthe full list of modules\fP
|
|
|
|
|
.RE
|
|
|
|
|
.SS arguments
|
|
|
|
|
.sp
|
|
|
|
|
Space\-delimited arguments to the function:
|
|
|
|
|
.sp
|
|
|
|
|
.nf
|
|
|
|
|
.ft C
|
|
|
|
|
salt \(aq*\(aq cmd.exec_code python \(aqimport sys; print sys.version\(aq
|
|
|
|
|
.ft P
|
|
|
|
|
.fi
|
|
|
|
|
.SH SALT IN DEPTH
|
|
|
|
|
.sp
|
|
|
|
|
While using and setting up Salt is a simple task, the capabilities of Salt
|
|
|
|
|
run much deeper.
|
|
|
|
|
.sp
|
|
|
|
|
Gaining a better understanding of how Salt works will allow you to get much
|
|
|
|
|
more out of Salt.
|
|
|
|
|
.sp
|
|
|
|
|
Presentation at SLLUG in May 2011
|
|
|
|
|
\fI\%video\fP | \fI\%slides\fP (PDF)
|
|
|
|
|
.SH CONFIGURATION GUIDE
|
|
|
|
|
.sp
|
|
|
|
|
The Salt system is amazingly simple and easy to configure, the two components
|
|
|
|
|
of the Salt system each have a respective configuration file. The
|
|
|
|
|
\fBsalt\-master\fP is configured via the master configuration file, and the
|
|
|
|
|
\fBsalt\-minion\fP is configured via the minion configuration file.
|
|
|
|
|
.SS Configuration file examples
|
|
|
|
|
.INDENT 0.0
|
|
|
|
|
.IP \(bu 2
|
|
|
|
|
\fI\%Example master configuration file\fP
|
|
|
|
|
.IP \(bu 2
|
|
|
|
|
\fI\%Example minion configuration file\fP
|
|
|
|
|
.UNINDENT
|
|
|
|
|
.SS Example master configuration file
|
|
|
|
|
.sp
|
|
|
|
|
.nf
|
|
|
|
|
.ft C
|
|
|
|
|
##### Primary configuration settings #####
|
|
|
|
|
##########################################
|
|
|
|
|
# The address of the interface to bind to
|
|
|
|
|
#interface: 0.0.0.0
|
|
|
|
|
|
|
|
|
|
# The port used by the publisher
|
|
|
|
|
#publish_port: 4505
|
|
|
|
|
|
|
|
|
|
# The number of worker threads to start, these threads are used to manage
|
|
|
|
|
# return calls made from minions to the master, if the master seems to be
|
|
|
|
|
# running slowly, increase the number of threads
|
|
|
|
|
#worker_threads: 5
|
|
|
|
|
|
|
|
|
|
# The port used by the communication interface
|
|
|
|
|
#ret_port: 4506
|
|
|
|
|
|
|
|
|
|
# The root directory prepended to these options: pki_dir, cachedir, log_file.
|
|
|
|
|
#root_dir: /
|
|
|
|
|
|
|
|
|
|
# Directory used to store public key data
|
|
|
|
|
#pki_dir: /etc/salt/pki
|
|
|
|
|
|
|
|
|
|
# Directory to store job and cache data
|
|
|
|
|
#cachedir: /var/cache/salt
|
|
|
|
|
|
|
|
|
|
# Set the number of hours to keep old job information
|
|
|
|
|
#keep_jobs: 24
|
|
|
|
|
|
|
|
|
|
# Set the directory used to hold unix sockets
|
|
|
|
|
#sock_dir: /tmp/salt\-unix
|
|
|
|
|
|
|
|
|
|
##### Security settings #####
|
|
|
|
|
##########################################
|
|
|
|
|
# Enable "open mode", this mode still maintains encryption, but turns off
|
|
|
|
|
# authentication, this is only intended for highly secure environments or for
|
|
|
|
|
# the situation where your keys end up in a bad state. If you run in open more
|
2011-05-30 22:24:23 +00:00
|
|
|
|
# you do so at your own risk!
|
|
|
|
|
#open_mode: False
|
|
|
|
|
|
|
|
|
|
# Enable auto_accept, this setting will automatically accept all incoming
|
|
|
|
|
# public keys from the minions
|
|
|
|
|
#auto_accept: False
|
|
|
|
|
|
|
|
|
|
##### State System settings #####
|
|
|
|
|
##########################################
|
|
|
|
|
# The state system uses a "top" file to tell the minions what environment to
|
|
|
|
|
# use and what modules to use. The state_top file is defined relative to the
|
|
|
|
|
# root of the base environment
|
|
|
|
|
#state_top: top.yml
|
|
|
|
|
#
|
|
|
|
|
# The renderer to use on the minions to render the state data
|
|
|
|
|
#renderer: yaml_jinja
|
|
|
|
|
|
|
|
|
|
##### File Server settings #####
|
|
|
|
|
##########################################
|
|
|
|
|
# Salt runs a lightweight file server written in zeromq to deliver files to
|
|
|
|
|
# minions. This file server is built into the master daemon and does not
|
|
|
|
|
# require a dedicated port.
|
2011-04-02 04:48:23 +00:00
|
|
|
|
|
2011-05-30 22:24:23 +00:00
|
|
|
|
# The file server works on environments passed to the master, each environment
|
|
|
|
|
# can have multiple root directories, the subdirectories in the multiple file
|
|
|
|
|
# roots cannot match, otherwise the downloaded files will not be able to be
|
|
|
|
|
# reliably ensured. A base environment is required to house the top file
|
|
|
|
|
# Example:
|
|
|
|
|
# file_roots:
|
|
|
|
|
# base:
|
|
|
|
|
# \- /srv/salt/
|
|
|
|
|
# dev:
|
|
|
|
|
# \- /srv/salt/dev/services
|
|
|
|
|
# \- /srv/salt/dev/states
|
|
|
|
|
# prod:
|
|
|
|
|
# \- /srv/salt/prod/services
|
|
|
|
|
# \- /srv/salt/prod/states
|
|
|
|
|
#
|
|
|
|
|
# Default:
|
|
|
|
|
#file_roots:
|
|
|
|
|
# base:
|
|
|
|
|
# \- /srv/salt
|
2011-04-02 04:48:23 +00:00
|
|
|
|
|
2011-05-30 22:24:23 +00:00
|
|
|
|
# The hash_type is the hash to use when discovering the hash of a file on
|
|
|
|
|
# the master server, the default is md5, but sha1, sha224, sha256, sha384
|
|
|
|
|
# and sha512 are also supported.
|
|
|
|
|
#hash_type: md5
|
2011-04-02 04:48:23 +00:00
|
|
|
|
|
2011-05-30 22:24:23 +00:00
|
|
|
|
# The buffer size in the file server can be adjusted here:
|
|
|
|
|
#file_buffer_size: 1048576
|
2011-04-02 04:48:23 +00:00
|
|
|
|
|
2011-08-27 17:38:12 +00:00
|
|
|
|
##### Syndic settings #####
|
|
|
|
|
##########################################
|
|
|
|
|
# The Salt syndic is used to pass commands through a master from a higher
|
|
|
|
|
# master. Using the syndic is simple, if this is a master that will have
|
|
|
|
|
# syndic servers(s) below it set the "order_masters" setting to True, if this
|
|
|
|
|
# is a master that will be running a syndic daemon for passthrough the
|
|
|
|
|
# "syndic_master" setting needs to be set to the location of the master server
|
|
|
|
|
# to recieve commands from
|
|
|
|
|
#
|
|
|
|
|
# Set the order_masters setting to True if this master will command lower
|
|
|
|
|
# masters\(aq syndic interfaces
|
|
|
|
|
#order_masters: False
|
|
|
|
|
#
|
|
|
|
|
# If this master will be running a salt syndic daemon, then the syndic needs
|
|
|
|
|
# to know where the master it is recieving commands from is, set it with the
|
|
|
|
|
# syndic_master value
|
|
|
|
|
#syndic_master: masterofmaster
|
|
|
|
|
|
|
|
|
|
##### Peer Publish settings #####
|
|
|
|
|
##########################################
|
|
|
|
|
# Salt minions can send commands to other minions, but only if the minion is
|
|
|
|
|
# allowed to. By default "Peer Publication" is disabled, and when enabled it
|
|
|
|
|
# is enabled for specific minions and specific commands. This allows secure
|
|
|
|
|
# compartmentalization of commands based on individual minions.
|
|
|
|
|
#
|
|
|
|
|
# The configuration uses regular expressions to match minions and then a list
|
|
|
|
|
# of regular expressions to match functions, the following will allow the
|
|
|
|
|
# minion authenticated as foo.example.com to execute functions from the test
|
|
|
|
|
# and pkg modules
|
|
|
|
|
# peer:
|
|
|
|
|
# foo.example.com:
|
|
|
|
|
# \- test.*
|
|
|
|
|
# \- pkg.*
|
|
|
|
|
#
|
|
|
|
|
# This will allow all minions to execute all commands:
|
|
|
|
|
# peer:
|
|
|
|
|
# .*:
|
|
|
|
|
# \- .*
|
|
|
|
|
# This is not recomanded, since it would allow anyone who gets root on any
|
|
|
|
|
# single minion to instantly have root on all of the minions!
|
|
|
|
|
#
|
|
|
|
|
|
2011-05-30 22:24:23 +00:00
|
|
|
|
##### Cluster settings #####
|
|
|
|
|
##########################################
|
|
|
|
|
# Salt supports automatic clustering, salt creates a single ip address which
|
|
|
|
|
# is shared among the individual salt components using ucarp. The private key
|
|
|
|
|
# and all of the minion keys are maintained across the defined cluster masters
|
|
|
|
|
# The failover service is automatically managed via these settings
|
2011-04-02 04:48:23 +00:00
|
|
|
|
|
2011-05-30 22:24:23 +00:00
|
|
|
|
# List the identifiers for the other cluster masters in this manner:
|
|
|
|
|
# [saltmaster\-01.foo.com,saltmaster\-02.foo.com,saltmaster\-03.foo.com]
|
|
|
|
|
# The members of this master array must be running as salt minions to
|
|
|
|
|
# facilitate the distribution of cluster information
|
|
|
|
|
#cluster_masters: []
|
2011-04-02 04:48:23 +00:00
|
|
|
|
|
2011-05-30 22:24:23 +00:00
|
|
|
|
# The cluster modes are "paranoid" and "full"
|
|
|
|
|
# paranoid will only distribute the accepted minion public keys.
|
|
|
|
|
# full will also distribute the master private key.
|
|
|
|
|
#cluster_mode: paranoid
|
2011-04-02 04:48:23 +00:00
|
|
|
|
|
2011-05-30 22:24:23 +00:00
|
|
|
|
|
|
|
|
|
##### Logging settings #####
|
|
|
|
|
##########################################
|
|
|
|
|
# The location of the master log file
|
|
|
|
|
#log_file: /var/log/salt/master
|
|
|
|
|
# The level of messages to send to the log file.
|
|
|
|
|
# One of \(aqinfo\(aq, \(aqquiet\(aq, \(aqcritical\(aq, \(aqerror\(aq, \(aqdebug\(aq, \(aqwarning\(aq.
|
|
|
|
|
# Default: \(aqwarning\(aq
|
|
|
|
|
#log_level: warning
|
|
|
|
|
#
|
|
|
|
|
# Logger levels can be used to tweak specific loggers logging levels.
|
|
|
|
|
# Imagine you want to have the salt library at the \(aqwarning\(aq level, but, you
|
|
|
|
|
# still wish to have \(aqsalt.modules\(aq at the \(aqdebug\(aq level:
|
|
|
|
|
# log_granular_levels: {
|
|
|
|
|
# \(aqsalt\(aq: \(aqwarning\(aq,
|
|
|
|
|
# \(aqsalt.modules\(aq: \(aqdebug\(aq
|
|
|
|
|
# }
|
|
|
|
|
#
|
|
|
|
|
#log_granular_levels: {}
|
|
|
|
|
|
|
|
|
|
.ft P
|
|
|
|
|
.fi
|
|
|
|
|
.SS Example minion configuration file
|
|
|
|
|
.sp
|
|
|
|
|
.nf
|
|
|
|
|
.ft C
|
|
|
|
|
##### Primary configuration settings #####
|
|
|
|
|
##########################################
|
|
|
|
|
# Set the location of the salt master server, if the master server cannot be
|
|
|
|
|
# resolved, then the minion will fail to start
|
|
|
|
|
#master: salt
|
|
|
|
|
|
|
|
|
|
# Set the post used by the master reply and authentication server
|
|
|
|
|
#master_port: 4506
|
|
|
|
|
|
2011-07-09 23:13:08 +00:00
|
|
|
|
# The root directory prepended to these options: pki_dir, cachedir, log_file.
|
|
|
|
|
#root_dir: /
|
|
|
|
|
|
2011-05-30 22:24:23 +00:00
|
|
|
|
# The directory to store the pki information in
|
|
|
|
|
#pki_dir: /etc/salt/pki
|
|
|
|
|
|
|
|
|
|
# Explicitly declare the id for this minion to use, if left commented the id
|
|
|
|
|
# will be the hostname as returned by the python call: socket.getfqdn()
|
|
|
|
|
# Since salt uses detached ids it is possible to run multiple minions on the
|
|
|
|
|
# same machine but with different ids, this can be useful for salt compute
|
|
|
|
|
# clusters.
|
|
|
|
|
#id:
|
|
|
|
|
|
|
|
|
|
# Where cache data goes
|
|
|
|
|
#cachedir: /var/cache/salt
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
##### Minion module management #####
|
|
|
|
|
##########################################
|
|
|
|
|
# Disable specific modules, this will allow the admin to limit the level os
|
|
|
|
|
# access the master has to the minion
|
|
|
|
|
#disable_modules: [cmd,test]
|
|
|
|
|
#disable_returners: []
|
|
|
|
|
# Modules can be loaded from arbitrary paths, this enables the easy deployment
|
|
|
|
|
# of third party modules, modules for returners and minions can be loaded.
|
|
|
|
|
# Specify a list of extra directories to search for minion modules and
|
|
|
|
|
# returners. These paths must be fully qualified!
|
|
|
|
|
#module_dirs: []
|
|
|
|
|
#returner_dirs: []
|
|
|
|
|
#states_dirs: []
|
|
|
|
|
#render_dirs: []
|
|
|
|
|
# Enable Cython modules searching and loading. (Default: True)
|
|
|
|
|
#cython_enable: true
|
|
|
|
|
|
|
|
|
|
##### State Management Settings #####
|
|
|
|
|
###########################################
|
|
|
|
|
# The state management system executes all of the state templates on the minion
|
|
|
|
|
# to enable more granular control of system state management. The type of
|
|
|
|
|
# template and serialization used for state management needs to be configured
|
|
|
|
|
# on the minion, the default renderer is yaml_jinja. This is a yaml file
|
|
|
|
|
# rendered from a jinja template, the available options are:
|
|
|
|
|
# yaml_jinja
|
|
|
|
|
# yaml_mako
|
|
|
|
|
# json_jinja
|
|
|
|
|
# json_mako
|
|
|
|
|
#
|
|
|
|
|
#renderer: yaml_jinja
|
|
|
|
|
#
|
|
|
|
|
# Test allows for the state runs to only be test runs
|
|
|
|
|
#test: False
|
|
|
|
|
|
|
|
|
|
###### Security settings #####
|
|
|
|
|
###########################################
|
|
|
|
|
# Enable "open mode", this mode still maintains encryption, but turns off
|
|
|
|
|
# authentication, this is only intended for highly secure environments or for
|
|
|
|
|
# the situation where your keys end up in a bad state. If you run in open mode
|
|
|
|
|
# you do so at your own risk!
|
|
|
|
|
#open_mode: False
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
###### Thread settings #####
|
|
|
|
|
###########################################
|
2011-08-27 17:38:12 +00:00
|
|
|
|
# Disable multiprocessing support, by default when a minion receives a
|
|
|
|
|
# publication a new process is spawned and the command is executed therein.
|
|
|
|
|
#multiprocessing: True
|
2011-05-30 22:24:23 +00:00
|
|
|
|
|
|
|
|
|
###### Logging settings #####
|
|
|
|
|
###########################################
|
|
|
|
|
# The location of the minion log file
|
|
|
|
|
#log_file: /var/log/salt/minion
|
|
|
|
|
# The level of messages to send to the log file.
|
|
|
|
|
# One of \(aqinfo\(aq, \(aqquiet\(aq, \(aqcritical\(aq, \(aqerror\(aq, \(aqdebug\(aq, \(aqwarning\(aq.
|
|
|
|
|
# Default: \(aqwarning\(aq
|
|
|
|
|
#log_level: warning
|
|
|
|
|
#
|
|
|
|
|
# Logger levels can be used to tweak specific loggers logging levels.
|
|
|
|
|
# Imagine you want to have the salt library at the \(aqwarning\(aq level, but, you
|
|
|
|
|
# still wish to have \(aqsalt.modules\(aq at the \(aqdebug\(aq level:
|
|
|
|
|
# log_granular_levels: {
|
|
|
|
|
# \(aqsalt\(aq: \(aqwarning\(aq,
|
|
|
|
|
# \(aqsalt.modules\(aq: \(aqdebug\(aq
|
|
|
|
|
# }
|
|
|
|
|
#
|
|
|
|
|
#log_granular_levels: {}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
###### Module configuration #####
|
|
|
|
|
###########################################
|
|
|
|
|
# Salt allows for modules to be passed arbitrary configuration data, any data
|
|
|
|
|
# passed here in valid yaml format will be passed on to the salt minion modules
|
|
|
|
|
# for use. It is STRONGLY recommended that a naming convention be used in which
|
|
|
|
|
# the module name is followed by a . and then the value. Also, all top level
|
|
|
|
|
# data must be allied via the yaml dict construct, some examples:
|
|
|
|
|
#
|
|
|
|
|
# A simple value for the test module:
|
|
|
|
|
#test.foo: foo
|
|
|
|
|
#
|
|
|
|
|
# A list for the test module:
|
|
|
|
|
#test.bar: [baz,quo]
|
|
|
|
|
#
|
|
|
|
|
# A dict for the test module:
|
|
|
|
|
#test.baz: {spam: sausage, cheese: bread}
|
|
|
|
|
|
|
|
|
|
.ft P
|
|
|
|
|
.fi
|
|
|
|
|
.IP "See also"
|
|
|
|
|
.sp
|
|
|
|
|
\fIexample master configuration file\fP
|
|
|
|
|
|
|
|
|
|
|
\fIexample minion configuration file\fP
|
|
|
|
|
.RE
|
|
|
|
|
.SS Configuring the Salt Master
|
|
|
|
|
.sp
|
|
|
|
|
The configuration file for the salt\-master is located at
|
|
|
|
|
\fB/etc/salt/master\fP. The available options are as follows:
|
2011-07-09 23:13:08 +00:00
|
|
|
|
.SS Primary Master Configuration
|
2011-05-30 22:24:23 +00:00
|
|
|
|
.SS \fBinterface\fP
|
|
|
|
|
.sp
|
|
|
|
|
Default: \fB0.0.0.0\fP (all interfaces)
|
|
|
|
|
.sp
|
|
|
|
|
The local interface to bind to.
|
|
|
|
|
.sp
|
|
|
|
|
.nf
|
|
|
|
|
.ft C
|
|
|
|
|
interface: 192.168.0.1
|
|
|
|
|
.ft P
|
|
|
|
|
.fi
|
|
|
|
|
.SS \fBpublish_port\fP
|
|
|
|
|
.sp
|
|
|
|
|
Default: \fB4505\fP
|
|
|
|
|
.sp
|
|
|
|
|
The network port to set up the publication interface
|
|
|
|
|
.sp
|
|
|
|
|
.nf
|
|
|
|
|
.ft C
|
|
|
|
|
publish_port: 4505
|
|
|
|
|
.ft P
|
|
|
|
|
.fi
|
2011-07-09 23:13:08 +00:00
|
|
|
|
.SS \fBpublish_pull_port\fP
|
|
|
|
|
.sp
|
|
|
|
|
Default: \fB45055\fP
|
|
|
|
|
.sp
|
|
|
|
|
The port used to communicate to the local publisher
|
|
|
|
|
.sp
|
|
|
|
|
.nf
|
|
|
|
|
.ft C
|
|
|
|
|
publish_pull_port: 45055
|
|
|
|
|
.ft P
|
|
|
|
|
.fi
|
2011-05-30 22:24:23 +00:00
|
|
|
|
.SS \fBworker_threads\fP
|
|
|
|
|
.sp
|
|
|
|
|
Default: \fB5\fP
|
|
|
|
|
.sp
|
|
|
|
|
The number of threads to start for receiving commands and replies from minions.
|
|
|
|
|
If minions are stalling on replies because you have many minions, raise the
|
|
|
|
|
worker_threads value.
|
|
|
|
|
.sp
|
|
|
|
|
.nf
|
|
|
|
|
.ft C
|
|
|
|
|
worker_threads: 5
|
|
|
|
|
.ft P
|
|
|
|
|
.fi
|
2011-07-09 23:13:08 +00:00
|
|
|
|
.SS \fBworker_start_port\fP
|
|
|
|
|
.sp
|
|
|
|
|
Default: \fB5\fP
|
|
|
|
|
.sp
|
|
|
|
|
The port to begin binding workers on, the workers will be created on
|
|
|
|
|
increasingly higher ports
|
|
|
|
|
.sp
|
|
|
|
|
.nf
|
|
|
|
|
.ft C
|
|
|
|
|
worker_start_port: 45056
|
|
|
|
|
.ft P
|
|
|
|
|
.fi
|
2011-05-30 22:24:23 +00:00
|
|
|
|
.SS \fBret_port\fP
|
|
|
|
|
.sp
|
|
|
|
|
Default: \fB4506\fP
|
|
|
|
|
.sp
|
|
|
|
|
The port used by the return server, this is the server used by Salt to receive
|
|
|
|
|
execution returns and command executions.
|
|
|
|
|
.sp
|
|
|
|
|
.nf
|
|
|
|
|
.ft C
|
|
|
|
|
ret_port: 4506
|
|
|
|
|
.ft P
|
|
|
|
|
.fi
|
|
|
|
|
.SS \fBpki_dir\fP
|
|
|
|
|
.sp
|
|
|
|
|
Default: \fB/etc/salt/pki\fP
|
|
|
|
|
.sp
|
|
|
|
|
The directory to store the pki authentication keys.
|
|
|
|
|
.sp
|
|
|
|
|
.nf
|
|
|
|
|
.ft C
|
|
|
|
|
pki_dir: /etc/salt/pki
|
|
|
|
|
.ft P
|
|
|
|
|
.fi
|
|
|
|
|
.SS \fBcachedir\fP
|
|
|
|
|
.sp
|
|
|
|
|
Default: \fB/var/cache/salt\fP
|
|
|
|
|
.sp
|
|
|
|
|
The location used to store cache information, particularly the job information
|
|
|
|
|
for executed salt commands.
|
|
|
|
|
.sp
|
|
|
|
|
.nf
|
|
|
|
|
.ft C
|
|
|
|
|
cachedir: /var/cache/salt
|
|
|
|
|
.ft P
|
|
|
|
|
.fi
|
2011-07-09 23:13:08 +00:00
|
|
|
|
.SS \fBkeep_jobs\fP
|
|
|
|
|
.sp
|
|
|
|
|
Default: \fB24\fP
|
|
|
|
|
.sp
|
|
|
|
|
Set the number of hours to keep old job information
|
|
|
|
|
.SS Master Security Settings
|
2011-05-30 22:24:23 +00:00
|
|
|
|
.SS \fBopen_mode\fP
|
|
|
|
|
.sp
|
|
|
|
|
Default: \fBFalse\fP
|
|
|
|
|
.sp
|
|
|
|
|
Open mode is a dangerous security feature. One problem encountered with pki
|
|
|
|
|
authentication systems is that keys can become "mixed up" and authentication
|
|
|
|
|
begins to fail. Open mode turns off authentication and tells the master to
|
2011-07-27 23:46:53 +00:00
|
|
|
|
accept all authentication. This will clean up the pki keys received from the
|
2011-05-30 22:24:23 +00:00
|
|
|
|
minions. Open mode should not be turned on for general use, open mode should
|
|
|
|
|
only be used for a short period of time to clean up pki keys. To turn on open
|
|
|
|
|
mode the value passed must be \fBTrue\fP.
|
|
|
|
|
.sp
|
|
|
|
|
.nf
|
|
|
|
|
.ft C
|
|
|
|
|
open_mode: False
|
|
|
|
|
.ft P
|
|
|
|
|
.fi
|
2011-07-09 23:13:08 +00:00
|
|
|
|
.SS \fBauto_accept\fP
|
|
|
|
|
.sp
|
|
|
|
|
Default: \fBFalse\fP
|
|
|
|
|
.sp
|
|
|
|
|
Enable auto_accept, this setting will automatically accept all incoming
|
|
|
|
|
public keys from the minions
|
|
|
|
|
.sp
|
|
|
|
|
.nf
|
|
|
|
|
.ft C
|
|
|
|
|
auto_accept: False
|
|
|
|
|
.ft P
|
|
|
|
|
.fi
|
|
|
|
|
.SS Master State System Settings
|
|
|
|
|
.SS \fBstate_top\fP
|
|
|
|
|
.sp
|
|
|
|
|
Default: \fBtop.yml\fP
|
|
|
|
|
.sp
|
|
|
|
|
The state system uses a "top" file to tell the minions what environment to
|
|
|
|
|
use and what modules to use. The state_top file is defined relative to the
|
|
|
|
|
root of the base environment
|
|
|
|
|
.sp
|
|
|
|
|
.nf
|
|
|
|
|
.ft C
|
|
|
|
|
state_top: top.yml
|
|
|
|
|
.ft P
|
|
|
|
|
.fi
|
|
|
|
|
.SS \fBrenderer\fP
|
|
|
|
|
.sp
|
|
|
|
|
Default: \fByaml_jinja\fP
|
|
|
|
|
.sp
|
|
|
|
|
The renderer to use on the minions to render the state data
|
|
|
|
|
.sp
|
|
|
|
|
.nf
|
|
|
|
|
.ft C
|
|
|
|
|
renderer: yaml_jinja
|
|
|
|
|
.ft P
|
|
|
|
|
.fi
|
|
|
|
|
.SS Master File Server Settings
|
|
|
|
|
.SS \fBfile_roots\fP
|
|
|
|
|
.sp
|
|
|
|
|
Default: \fBbase: [/srv/salt]\fP
|
|
|
|
|
.sp
|
|
|
|
|
Salt runs a lightweight file server written in zeromq to deliver files to
|
|
|
|
|
minions. This file server is built into the master daemon and does not
|
|
|
|
|
require a dedicated port.
|
|
|
|
|
The file server works on environments passed to the master, each environment
|
|
|
|
|
can have multiple root directories, the subdirectories in the multiple file
|
|
|
|
|
roots cannot match, otherwise the downloaded files will not be able to be
|
|
|
|
|
reliably ensured. A base environment is required to house the top file
|
|
|
|
|
Example:
|
|
|
|
|
.sp
|
|
|
|
|
.nf
|
|
|
|
|
.ft C
|
|
|
|
|
file_roots:
|
|
|
|
|
base:
|
|
|
|
|
\- /srv/salt/
|
|
|
|
|
dev:
|
|
|
|
|
\- /srv/salt/dev/services
|
|
|
|
|
\- /srv/salt/dev/states
|
|
|
|
|
prod:
|
|
|
|
|
\- /srv/salt/prod/services
|
|
|
|
|
\- /srv/salt/prod/states
|
|
|
|
|
.ft P
|
|
|
|
|
.fi
|
|
|
|
|
.sp
|
|
|
|
|
.nf
|
|
|
|
|
.ft C
|
|
|
|
|
base:
|
|
|
|
|
\- /srv/salt
|
|
|
|
|
.ft P
|
|
|
|
|
.fi
|
|
|
|
|
.SS \fBhash_type\fP
|
|
|
|
|
.sp
|
|
|
|
|
Default: \fBmd5\fP
|
|
|
|
|
.sp
|
|
|
|
|
The hash_type is the hash to use when discovering the hash of a file on
|
|
|
|
|
the master server, the default is md5, but sha1, sha224, sha256, sha384
|
|
|
|
|
and sha512 are also supported.
|
|
|
|
|
.sp
|
|
|
|
|
.nf
|
|
|
|
|
.ft C
|
|
|
|
|
hash_type: md5
|
|
|
|
|
.ft P
|
|
|
|
|
.fi
|
|
|
|
|
.SS \fBfile_buffer_size\fP
|
|
|
|
|
.sp
|
|
|
|
|
Default: \fB1048576\fP
|
|
|
|
|
.sp
|
|
|
|
|
The buffer size in the file server in bytes
|
|
|
|
|
.sp
|
|
|
|
|
.nf
|
|
|
|
|
.ft C
|
|
|
|
|
file_buffer_size: 1048576
|
|
|
|
|
.ft P
|
|
|
|
|
.fi
|
|
|
|
|
.SS Master Logging Settings
|
|
|
|
|
.SS \fBlog_file\fP
|
|
|
|
|
.sp
|
|
|
|
|
Default: \fB/etc/salt/pki\fP
|
|
|
|
|
.sp
|
|
|
|
|
The location of the master log file
|
|
|
|
|
.sp
|
|
|
|
|
.nf
|
|
|
|
|
.ft C
|
|
|
|
|
log_file: /var/log/salt/master
|
|
|
|
|
.ft P
|
|
|
|
|
.fi
|
|
|
|
|
.SS \fBlog_level\fP
|
|
|
|
|
.sp
|
|
|
|
|
Default: \fBwarning\fP
|
|
|
|
|
.sp
|
|
|
|
|
The level of messages to send to the log file.
|
|
|
|
|
One of \(aqinfo\(aq, \(aqquiet\(aq, \(aqcritical\(aq, \(aqerror\(aq, \(aqdebug\(aq, \(aqwarning\(aq.
|
|
|
|
|
.sp
|
|
|
|
|
.nf
|
|
|
|
|
.ft C
|
|
|
|
|
log_level: warning
|
|
|
|
|
.ft P
|
|
|
|
|
.fi
|
|
|
|
|
.SS \fBlog_granular_levels\fP
|
|
|
|
|
.sp
|
|
|
|
|
Default: \fB{}\fP
|
|
|
|
|
.sp
|
|
|
|
|
Logger levels can be used to tweak specific loggers logging levels.
|
|
|
|
|
Imagine you want to have the salt library at the \(aqwarning\(aq level, but, you
|
|
|
|
|
still wish to have \(aqsalt.modules\(aq at the \(aqdebug\(aq level:
|
|
|
|
|
.sp
|
|
|
|
|
.nf
|
|
|
|
|
.ft C
|
|
|
|
|
log_granular_levels: {
|
|
|
|
|
\(aqsalt\(aq: \(aqwarning\(aq,
|
|
|
|
|
\(aqsalt.modules\(aq: \(aqdebug\(aq
|
|
|
|
|
}
|
|
|
|
|
.ft P
|
|
|
|
|
.fi
|
2011-05-30 22:24:23 +00:00
|
|
|
|
.SS Configuring the Salt Minion
|
|
|
|
|
.sp
|
|
|
|
|
The Salt Minion configuration is very simple, typically the only value that
|
|
|
|
|
needs to be set is the master value so the minion can find its master.
|
2011-07-09 23:13:08 +00:00
|
|
|
|
.SS Minion Primary Configuration
|
2011-05-30 22:24:23 +00:00
|
|
|
|
.SS \fBmaster\fP
|
|
|
|
|
.sp
|
2011-07-09 23:13:08 +00:00
|
|
|
|
Default: \fBsalt\fP
|
2011-05-30 22:24:23 +00:00
|
|
|
|
.sp
|
|
|
|
|
The hostname or ipv4 of the master.
|
|
|
|
|
.sp
|
|
|
|
|
.nf
|
|
|
|
|
.ft C
|
2011-07-09 23:13:08 +00:00
|
|
|
|
master: salt
|
2011-05-30 22:24:23 +00:00
|
|
|
|
.ft P
|
|
|
|
|
.fi
|
|
|
|
|
.SS \fBmaster_port\fP
|
|
|
|
|
.sp
|
|
|
|
|
Default: \fB4506\fP
|
|
|
|
|
.sp
|
|
|
|
|
The port of the master ret server, this needs to coincide with the ret_port
|
|
|
|
|
option on the salt master.
|
|
|
|
|
.sp
|
|
|
|
|
.nf
|
|
|
|
|
.ft C
|
|
|
|
|
master_port: 4506
|
|
|
|
|
.ft P
|
|
|
|
|
.fi
|
|
|
|
|
.SS \fBpki_dir\fP
|
|
|
|
|
.sp
|
|
|
|
|
Default: \fB/etc/salt/pki\fP
|
|
|
|
|
.sp
|
|
|
|
|
The directory used to store the minion\(aqs public and private keys.
|
|
|
|
|
.sp
|
|
|
|
|
.nf
|
|
|
|
|
.ft C
|
|
|
|
|
pki_dir: /etc/salt/pki
|
|
|
|
|
.ft P
|
|
|
|
|
.fi
|
2011-07-09 23:13:08 +00:00
|
|
|
|
.SS \fBid\fP
|
2011-05-30 22:24:23 +00:00
|
|
|
|
.sp
|
|
|
|
|
Default: hostname (as returned by the Python call: \fBsocket.getfqdn()\fP)
|
|
|
|
|
.sp
|
2011-07-09 23:13:08 +00:00
|
|
|
|
Explicitly declare the id for this minion to use, if left commented the id
|
|
|
|
|
will be the hostname as returned by the python call: socket.getfqdn()
|
|
|
|
|
Since salt uses detached ids it is possible to run multiple minions on the
|
|
|
|
|
same machine but with different ids, this can be useful for salt compute
|
|
|
|
|
clusters.
|
2011-05-30 22:24:23 +00:00
|
|
|
|
.sp
|
|
|
|
|
.nf
|
|
|
|
|
.ft C
|
2011-07-09 23:13:08 +00:00
|
|
|
|
id: foo.bar.com
|
2011-05-30 22:24:23 +00:00
|
|
|
|
.ft P
|
|
|
|
|
.fi
|
|
|
|
|
.SS \fBcachedir\fP
|
|
|
|
|
.sp
|
|
|
|
|
Default: \fB/var/cache/salt\fP
|
|
|
|
|
.sp
|
|
|
|
|
The location for minion cache data.
|
|
|
|
|
.sp
|
|
|
|
|
.nf
|
|
|
|
|
.ft C
|
|
|
|
|
cachedir: /var/cache/salt
|
|
|
|
|
.ft P
|
|
|
|
|
.fi
|
2011-07-09 23:13:08 +00:00
|
|
|
|
.SS Minion Module Management
|
2011-05-30 22:24:23 +00:00
|
|
|
|
.SS \fBdisable_modules\fP
|
|
|
|
|
.sp
|
|
|
|
|
Default: \fB[]\fP (all modules are enabled by default)
|
|
|
|
|
.sp
|
|
|
|
|
The event may occur in which the administrator desires that a minion should not
|
|
|
|
|
be able to execute a certain module. The sys module is built into the minion
|
|
|
|
|
and cannot be disabled.
|
|
|
|
|
.sp
|
|
|
|
|
.nf
|
|
|
|
|
.ft C
|
|
|
|
|
disable_modules: [cmd,virt,test]
|
|
|
|
|
.ft P
|
|
|
|
|
.fi
|
|
|
|
|
.SS \fBopen_mode\fP
|
|
|
|
|
.sp
|
|
|
|
|
Default: \fBFalse\fP
|
|
|
|
|
.sp
|
2011-07-27 23:46:53 +00:00
|
|
|
|
Open mode can be used to clean out the pki key received from the salt master,
|
2011-05-30 22:24:23 +00:00
|
|
|
|
turn on open mode, restart the minion, then turn off open mode and restart the
|
|
|
|
|
minion to clean the keys.
|
|
|
|
|
.sp
|
|
|
|
|
.nf
|
|
|
|
|
.ft C
|
|
|
|
|
open_mode: False
|
|
|
|
|
.ft P
|
|
|
|
|
.fi
|
2011-08-27 17:38:12 +00:00
|
|
|
|
.SH COMMAND LINE REFERENCE
|
2011-05-30 22:24:23 +00:00
|
|
|
|
.SS \fBsalt\fP
|
|
|
|
|
.SS Synopsis
|
|
|
|
|
.INDENT 0.0
|
|
|
|
|
.INDENT 3.5
|
|
|
|
|
salt \(aq*\(aq [ options ] sys.doc
|
|
|
|
|
.sp
|
|
|
|
|
salt \-E \(aq.*\(aq [ options ] sys.doc cmd
|
|
|
|
|
.sp
|
|
|
|
|
salt \-F \(aqoperatingsystem:Arch.*\(aq [ options ] test.ping
|
|
|
|
|
.sp
|
|
|
|
|
salt \-Q test.ping
|
|
|
|
|
.UNINDENT
|
|
|
|
|
.UNINDENT
|
|
|
|
|
.SS Description
|
|
|
|
|
.sp
|
|
|
|
|
Salt allows for commands to be executed across a swath of remote systems in
|
|
|
|
|
parallel. This means that remote systems can be both controlled and queried
|
|
|
|
|
with ease.
|
|
|
|
|
.SS Options
|
|
|
|
|
.INDENT 0.0
|
2011-05-26 11:17:02 +00:00
|
|
|
|
.TP
|
2011-05-30 22:24:23 +00:00
|
|
|
|
.B \-h, \-\-help
|
|
|
|
|
Print a usage message briefly summarizing these command\-line options
|
|
|
|
|
.UNINDENT
|
|
|
|
|
.INDENT 0.0
|
2011-05-26 11:17:02 +00:00
|
|
|
|
.TP
|
2011-05-30 22:24:23 +00:00
|
|
|
|
.B \-t TIMEOUT, \-\-timeout=TIMEOUT
|
|
|
|
|
The timeout in seconds to wait for replies from the salt minions.
|
|
|
|
|
.UNINDENT
|
|
|
|
|
.INDENT 0.0
|
2011-05-26 11:17:02 +00:00
|
|
|
|
.TP
|
2011-05-30 22:24:23 +00:00
|
|
|
|
.B \-E, \-\-pcre
|
|
|
|
|
The target expression will be interpreted as a pcre regular expression
|
|
|
|
|
rather than a shell glob.
|
|
|
|
|
.UNINDENT
|
|
|
|
|
.INDENT 0.0
|
2011-04-02 04:48:23 +00:00
|
|
|
|
.TP
|
2011-05-30 22:24:23 +00:00
|
|
|
|
.B \-L, \-\-list
|
|
|
|
|
The target expression will be interpreted as a comma delimited list,
|
|
|
|
|
example: server1.foo.bar,server2.foo.bar,example7.quo.qux
|
|
|
|
|
.UNINDENT
|
|
|
|
|
.INDENT 0.0
|
2011-04-02 04:48:23 +00:00
|
|
|
|
.TP
|
2011-05-30 22:24:23 +00:00
|
|
|
|
.B \-G, \-\-grain
|
|
|
|
|
The target expression matches values returned by the salt grains system on
|
|
|
|
|
the minions. The target expression is in the format of \(aq<grain value>:<pcre
|
|
|
|
|
regular expression>\(aq; example: \(aqos:Arch.*\(aq
|
|
|
|
|
.UNINDENT
|
|
|
|
|
.INDENT 0.0
|
|
|
|
|
.TP
|
|
|
|
|
.B \-Q, \-\-query
|
|
|
|
|
Execute a salt command query, this can be used to find the results os a
|
|
|
|
|
previous function call: \-Q test.echo\(aq)
|
|
|
|
|
.UNINDENT
|
|
|
|
|
.INDENT 0.0
|
|
|
|
|
.TP
|
|
|
|
|
.B \-c CONFIG, \-\-config=CONFIG
|
|
|
|
|
The location of the salt master configuration file, the salt master
|
|
|
|
|
settings are required to know where the connections are;
|
|
|
|
|
default=/etc/salt/master
|
|
|
|
|
.UNINDENT
|
|
|
|
|
.SS See also
|
|
|
|
|
.sp
|
|
|
|
|
\fIsalt(7)\fP
|
|
|
|
|
\fIsalt\-master(1)\fP
|
|
|
|
|
\fIsalt\-minion(1)\fP
|
|
|
|
|
.SS \fBsalt\-master\fP
|
|
|
|
|
.sp
|
|
|
|
|
The salt master daemon, used to control the salt minions
|
|
|
|
|
.SS Synopsis
|
|
|
|
|
.sp
|
|
|
|
|
salt\-master [ options ]
|
|
|
|
|
.SS Description
|
|
|
|
|
.sp
|
|
|
|
|
The master daemon controls the salt minions
|
|
|
|
|
.SS Options
|
|
|
|
|
.INDENT 0.0
|
|
|
|
|
.TP
|
|
|
|
|
.B \-h, \-\-help
|
|
|
|
|
Print a usage message briefly summarizing these command\-line options.
|
|
|
|
|
.UNINDENT
|
|
|
|
|
.INDENT 0.0
|
|
|
|
|
.TP
|
|
|
|
|
.B \-d, \-\-daemon
|
|
|
|
|
Run the salt master as a daemon
|
|
|
|
|
.UNINDENT
|
|
|
|
|
.INDENT 0.0
|
|
|
|
|
.TP
|
|
|
|
|
.B \-c CONFIG, \-\-config=CONFIG
|
|
|
|
|
The master configuration file to use, the default is /etc/salt/master
|
|
|
|
|
.UNINDENT
|
|
|
|
|
.SS \fBsalt\-minion\fP
|
|
|
|
|
.sp
|
2011-07-27 23:46:53 +00:00
|
|
|
|
The salt minion daemon, receives commands from a remote salt master.
|
2011-05-30 22:24:23 +00:00
|
|
|
|
.SS Synopsis
|
|
|
|
|
.sp
|
|
|
|
|
salt\-minion [ options ]
|
|
|
|
|
.SS Description
|
|
|
|
|
.sp
|
2011-07-27 23:46:53 +00:00
|
|
|
|
The salt minion receives commands from the central salt master and replies with
|
2011-05-30 22:24:23 +00:00
|
|
|
|
the results of said commands.
|
|
|
|
|
.SS Options
|
|
|
|
|
.INDENT 0.0
|
|
|
|
|
.TP
|
|
|
|
|
.B \-h, \-\-help
|
|
|
|
|
Print a usage message briefly summarizing these command\-line options.
|
|
|
|
|
.UNINDENT
|
|
|
|
|
.INDENT 0.0
|
|
|
|
|
.TP
|
|
|
|
|
.B \-d, \-\-daemon
|
|
|
|
|
Run the salt minion as a daemon
|
|
|
|
|
.UNINDENT
|
|
|
|
|
.INDENT 0.0
|
|
|
|
|
.TP
|
|
|
|
|
.B \-c CONFIG, \-\-config=CONFIG
|
|
|
|
|
The minion configuration file to use, the default is /etc/salt/minion
|
|
|
|
|
.UNINDENT
|
|
|
|
|
.SS \fBsalt\-key\fP
|
|
|
|
|
.SS Synopsis
|
|
|
|
|
.sp
|
|
|
|
|
salt\-key [ options ]
|
|
|
|
|
.SS Description
|
|
|
|
|
.sp
|
|
|
|
|
Salt\-key executes simple management of salt server public keys used for
|
|
|
|
|
authentication.
|
|
|
|
|
.SS Options
|
|
|
|
|
.INDENT 0.0
|
|
|
|
|
.TP
|
|
|
|
|
.B \-h, \-\-help
|
|
|
|
|
Print a usage message briefly summarizing these command\-line options.
|
|
|
|
|
.UNINDENT
|
|
|
|
|
.INDENT 0.0
|
|
|
|
|
.TP
|
|
|
|
|
.B \-l, \-\-list
|
|
|
|
|
List the unaccepted minion public keys.
|
|
|
|
|
.UNINDENT
|
|
|
|
|
.INDENT 0.0
|
|
|
|
|
.TP
|
|
|
|
|
.B \-L, \-\-list\-all
|
|
|
|
|
List all public keys on this salt master, both accepted and pending
|
|
|
|
|
acceptance.
|
|
|
|
|
.UNINDENT
|
|
|
|
|
.INDENT 0.0
|
|
|
|
|
.TP
|
|
|
|
|
.B \-a ACCEPT, \-\-accept=ACCEPT
|
|
|
|
|
Accept the named minion public key for command execution.
|
|
|
|
|
.UNINDENT
|
|
|
|
|
.INDENT 0.0
|
|
|
|
|
.TP
|
|
|
|
|
.B \-A, \-\-accept\-all
|
|
|
|
|
Accepts all pending public keys.
|
|
|
|
|
.UNINDENT
|
|
|
|
|
.INDENT 0.0
|
|
|
|
|
.TP
|
|
|
|
|
.B \-c CONFIG, \-\-config=CONFIG
|
|
|
|
|
The master configuration file needs to be read to determine where the salt
|
|
|
|
|
keys are stored via the pki_dir configuration value;
|
|
|
|
|
default=/etc/salt/master
|
|
|
|
|
.UNINDENT
|
|
|
|
|
.SS \fBsalt\-cp\fP
|
|
|
|
|
.sp
|
|
|
|
|
Copy a file to a set of systems
|
|
|
|
|
.SS Synopsis
|
|
|
|
|
.sp
|
|
|
|
|
.nf
|
|
|
|
|
.ft C
|
|
|
|
|
salt\-cp \(aq*\(aq [ options ] SOURCE DEST
|
2011-04-02 04:48:23 +00:00
|
|
|
|
|
2011-05-30 22:24:23 +00:00
|
|
|
|
salt\-cp \-E \(aq.*\(aq [ options ] SOURCE DEST
|
2011-04-02 04:48:23 +00:00
|
|
|
|
|
2011-05-30 22:24:23 +00:00
|
|
|
|
salt\-cp \-G \(aqos:Arch.*\(aq [ options ] SOURCE DEST
|
|
|
|
|
.ft P
|
|
|
|
|
.fi
|
|
|
|
|
.SS Description
|
|
|
|
|
.sp
|
|
|
|
|
Salt copy copies a local file out to all of the salt minions matched by the
|
|
|
|
|
given target.
|
|
|
|
|
.SS Options
|
|
|
|
|
.INDENT 0.0
|
|
|
|
|
.TP
|
|
|
|
|
.B \-h, \-\-help
|
|
|
|
|
Print a usage message briefly summarizing these command\-line options
|
|
|
|
|
.UNINDENT
|
|
|
|
|
.INDENT 0.0
|
|
|
|
|
.TP
|
|
|
|
|
.B \-t TIMEOUT, \-\-timeout=TIMEOUT
|
|
|
|
|
The timeout in seconds to wait for replies from the salt minions.
|
|
|
|
|
.UNINDENT
|
|
|
|
|
.INDENT 0.0
|
|
|
|
|
.TP
|
|
|
|
|
.B \-E, \-\-pcre
|
|
|
|
|
The target expresion will be interpereted as a pcre regular expression
|
|
|
|
|
rather than a shell glob.
|
|
|
|
|
.UNINDENT
|
|
|
|
|
.INDENT 0.0
|
|
|
|
|
.TP
|
|
|
|
|
.B \-L, \-\-list
|
|
|
|
|
The target expression will be interpereted as a comma delimited list,
|
|
|
|
|
example: server1.foo.bar,server2.foo.bar,example7.quo.qux
|
|
|
|
|
.UNINDENT
|
|
|
|
|
.INDENT 0.0
|
|
|
|
|
.TP
|
|
|
|
|
.B \-G, \-\-grain
|
|
|
|
|
The target expression matches values returned by the salt grains system on
|
|
|
|
|
the minions. The target expresion is in the format of \(aq<grain value>:<pcre
|
|
|
|
|
regular expresion>\(aq; example: \(aqos:Arch.*\(aq
|
|
|
|
|
.UNINDENT
|
|
|
|
|
.INDENT 0.0
|
|
|
|
|
.TP
|
|
|
|
|
.B \-Q, \-\-query
|
|
|
|
|
Execute a salt command query, this can be used to find the results os a
|
|
|
|
|
previous function call: \-Q test.echo\(aq)
|
|
|
|
|
.UNINDENT
|
|
|
|
|
.INDENT 0.0
|
|
|
|
|
.TP
|
|
|
|
|
.B \-c CONFIG, \-\-config=CONFIG
|
|
|
|
|
The location of the salt master configuration file, the salt master
|
|
|
|
|
settings are required to know where the connections are;
|
|
|
|
|
default=/etc/salt/master
|
|
|
|
|
.UNINDENT
|
|
|
|
|
.SS \fBsalt\-call\fP
|
|
|
|
|
.SS Synopsis
|
|
|
|
|
.sp
|
|
|
|
|
.nf
|
|
|
|
|
.ft C
|
|
|
|
|
salt\-call [options]
|
|
|
|
|
.ft P
|
|
|
|
|
.fi
|
|
|
|
|
.SS Options
|
|
|
|
|
.INDENT 0.0
|
|
|
|
|
.TP
|
|
|
|
|
.B \-h, \-\-help
|
|
|
|
|
Print a usage message briefly summarizing these command\-line options
|
|
|
|
|
.UNINDENT
|
|
|
|
|
.INDENT 0.0
|
|
|
|
|
.TP
|
|
|
|
|
.B \-g, \-\-grains
|
|
|
|
|
Return the information generated by the salt grains
|
|
|
|
|
.UNINDENT
|
|
|
|
|
.INDENT 0.0
|
|
|
|
|
.TP
|
|
|
|
|
.B \-m MODULE_DIRS, \-\-module\-dirs=MODULE_DIRS
|
|
|
|
|
Specify an additional directories to pull modules from, multiple
|
|
|
|
|
directories can be delimited by commas
|
|
|
|
|
.UNINDENT
|
|
|
|
|
.INDENT 0.0
|
|
|
|
|
.TP
|
|
|
|
|
.B \-d, \-\-doc
|
|
|
|
|
Return the documentation for the specified module of for all modules if
|
|
|
|
|
none are specified
|
|
|
|
|
.UNINDENT
|
|
|
|
|
.sp
|
2011-07-09 23:13:08 +00:00
|
|
|
|
Salt can be controlled by a command line client by the root user on the Salt
|
|
|
|
|
master. The Salt command line client uses the Salt client API to communicate
|
|
|
|
|
with the Salt master server. The Salt client is straightforward and simple
|
|
|
|
|
to use.
|
2011-05-30 22:24:23 +00:00
|
|
|
|
.sp
|
|
|
|
|
Using the Salt client commands can be easily sent to the minions.
|
2011-07-09 23:13:08 +00:00
|
|
|
|
.sp
|
|
|
|
|
Each of these commands accepts an explicit \fI\-\-config\fP option to point to either
|
|
|
|
|
the master or minion configuration file. If this option is not provided and
|
|
|
|
|
the default configuration file does not exist then Salt falls back to use the
|
|
|
|
|
environment variables \fBSALT_MASTER_CONFIG\fP and \fBSALT_MINION_CONFIG\fP.
|
|
|
|
|
.IP "See also"
|
|
|
|
|
.sp
|
|
|
|
|
\fB../configuration/index\fP
|
|
|
|
|
.RE
|
2011-05-30 22:24:23 +00:00
|
|
|
|
.SS Using the Salt Command
|
|
|
|
|
.sp
|
2011-07-09 23:13:08 +00:00
|
|
|
|
The Salt command needs a few components to send information to the salt
|
2011-05-30 22:24:23 +00:00
|
|
|
|
minions. The target minions need to be defined, the function to call and any
|
|
|
|
|
arguments the function requires.
|
|
|
|
|
.SS Defining the Target Minions
|
|
|
|
|
.sp
|
|
|
|
|
The first argument passed to salt, defines the target minions, the target
|
|
|
|
|
minions are accessed via their hostname. The default target type is a bash
|
|
|
|
|
glob:
|
|
|
|
|
.sp
|
|
|
|
|
.nf
|
|
|
|
|
.ft C
|
|
|
|
|
salt \(aq*foo.com\(aq sys.doc
|
|
|
|
|
.ft P
|
|
|
|
|
.fi
|
|
|
|
|
.sp
|
|
|
|
|
Salt can also define the target minions with regular expressions:
|
|
|
|
|
.sp
|
|
|
|
|
.nf
|
|
|
|
|
.ft C
|
|
|
|
|
salt \-E \(aq.*\(aq cmd.run \(aqls \-l | grep foo\(aq
|
|
|
|
|
.ft P
|
|
|
|
|
.fi
|
|
|
|
|
.sp
|
|
|
|
|
Or to explicitly list hosts, salt can take a list:
|
|
|
|
|
.sp
|
|
|
|
|
.nf
|
|
|
|
|
.ft C
|
|
|
|
|
salt \-L foo.bar.baz,quo.qux cmd.run \(aqps aux | grep foo\(aq
|
|
|
|
|
.ft P
|
|
|
|
|
.fi
|
2011-07-09 23:13:08 +00:00
|
|
|
|
.SS More Powerful Targets
|
2011-05-30 22:24:23 +00:00
|
|
|
|
.sp
|
2011-07-09 23:13:08 +00:00
|
|
|
|
The simple target specifications, glob, regex and list will cover many use
|
|
|
|
|
cases, and for some will cover all use cases, but more powerful options exist.
|
|
|
|
|
.SS Targeting with Grains
|
2011-05-30 22:24:23 +00:00
|
|
|
|
.sp
|
2011-07-09 23:13:08 +00:00
|
|
|
|
The Grains interface was built into Salt to allow minions to be targeted by
|
|
|
|
|
system properties. So minions running on a particular operating system can
|
|
|
|
|
be called to execute a function, or a specific kernel.
|
|
|
|
|
.sp
|
|
|
|
|
Calling via a grain is done by passing the \-G option to salt, specifying
|
|
|
|
|
a grain and a regular expression to match the value of the grain.
|
2011-05-30 22:24:23 +00:00
|
|
|
|
.sp
|
|
|
|
|
.nf
|
|
|
|
|
.ft C
|
2011-07-09 23:13:08 +00:00
|
|
|
|
salt \-G \(aqos:Fedora\(aq test.ping
|
2011-05-30 22:24:23 +00:00
|
|
|
|
.ft P
|
|
|
|
|
.fi
|
|
|
|
|
.sp
|
2011-07-09 23:13:08 +00:00
|
|
|
|
Will return True from all of the minions running Fedora.
|
2011-05-30 22:24:23 +00:00
|
|
|
|
.sp
|
2011-07-09 23:13:08 +00:00
|
|
|
|
To discover what grains are available and what the values are, execute the
|
|
|
|
|
grains.item salt function:
|
2011-05-30 22:24:23 +00:00
|
|
|
|
.sp
|
2011-07-09 23:13:08 +00:00
|
|
|
|
.nf
|
|
|
|
|
.ft C
|
|
|
|
|
salt \(aq*\(aq grains.items
|
|
|
|
|
.ft P
|
|
|
|
|
.fi
|
|
|
|
|
.SS Targeting with Executions
|
|
|
|
|
.sp
|
|
|
|
|
As of 0.8.8 targeting with executions is still under heavy development and this
|
|
|
|
|
documentation is written to refernce the behavior of execution matching in the
|
|
|
|
|
future.
|
|
|
|
|
.sp
|
|
|
|
|
Execution matching allows for a primary function to be executed, and then based
|
|
|
|
|
on the return of the primary function the main function is executed.
|
|
|
|
|
.sp
|
|
|
|
|
Execution matching allows for matching minions based on any arbitrairy running
|
|
|
|
|
data on tne minions.
|
|
|
|
|
.SS Calling the Function
|
|
|
|
|
.sp
|
|
|
|
|
The function to call on the specified target is placed after the target
|
|
|
|
|
specification.
|
|
|
|
|
.SS Finding available minion functions
|
|
|
|
|
.sp
|
|
|
|
|
The Salt functions are self documenting, all of the function documentation can
|
|
|
|
|
be retried from the minions via the \fBsys.doc()\fP function:
|
2011-05-30 22:24:23 +00:00
|
|
|
|
.sp
|
|
|
|
|
.nf
|
|
|
|
|
.ft C
|
2011-07-09 23:13:08 +00:00
|
|
|
|
salt \(aq*\(aq sys.doc
|
2011-05-30 22:24:23 +00:00
|
|
|
|
.ft P
|
|
|
|
|
.fi
|
2011-07-09 23:13:08 +00:00
|
|
|
|
.SS Compound Command Execution
|
2011-05-30 22:24:23 +00:00
|
|
|
|
.sp
|
2011-07-09 23:13:08 +00:00
|
|
|
|
If a series of commands need to be sent to a single target specification then
|
|
|
|
|
the multiple commands can be send in a single publish. This can make gathering
|
|
|
|
|
groups of information faster, and lowers the stress on the network for repeated
|
|
|
|
|
commands.
|
2011-05-30 22:24:23 +00:00
|
|
|
|
.sp
|
2011-07-09 23:13:08 +00:00
|
|
|
|
Compound command execution works by sending a list of functions and arguments
|
|
|
|
|
instead of sending a single function and argument. The functions are executed
|
|
|
|
|
on the minion in the order they are defined on the command line, and then the
|
|
|
|
|
data from all of the commands are returned in a dictionary. This means that
|
|
|
|
|
the set of commands are called in a predictable way, and the returned data can
|
|
|
|
|
be easily interpreted.
|
|
|
|
|
.sp
|
|
|
|
|
Executing compound commands if done by passing a comma delimited list of
|
|
|
|
|
functions, followed by a comma delimited list of arguments:
|
|
|
|
|
.sp
|
|
|
|
|
.nf
|
|
|
|
|
.ft C
|
|
|
|
|
salt \(aq*\(aq cmd.run,test.ping,test.echo \(aqcat /proc/cpuinfo\(aq,,foo
|
|
|
|
|
.ft P
|
|
|
|
|
.fi
|
|
|
|
|
.sp
|
|
|
|
|
The trick to look out for here, is that if a function is being passed no
|
|
|
|
|
arguments, then there needs to be a placeholder for the absent arguments. This
|
|
|
|
|
is why in the above example, there are two commas right next to each other.
|
|
|
|
|
\fBtest.ping\fP takes no arguments, so we need to add another comma, otherwise
|
|
|
|
|
Salt would attempt to pass "foo" to \fBtest.ping\fP.
|
2011-08-27 17:38:12 +00:00
|
|
|
|
.SH EXTENDING SALT
|
2011-07-09 23:13:08 +00:00
|
|
|
|
.sp
|
|
|
|
|
Writing your own customizations on top of Salt
|
2011-08-27 17:38:12 +00:00
|
|
|
|
.SS Introduction to Extending Salt
|
2011-07-09 23:13:08 +00:00
|
|
|
|
.sp
|
|
|
|
|
Salt is made to be used, and made to be extended. The primary goal of Salt is
|
|
|
|
|
to provide a foundation which can be used to solve problems. And the goal of
|
|
|
|
|
Salt is to not assume what those problems might be.
|
|
|
|
|
.sp
|
|
|
|
|
One of the greatest benefit of developing Salt has been the vast array of ways
|
|
|
|
|
in which people have wanted to use it, while the original intention was as a
|
|
|
|
|
communication layer for a cloud controller Salt has been extended to facilitate
|
|
|
|
|
so much more.
|
|
|
|
|
.SS Client API
|
|
|
|
|
.sp
|
|
|
|
|
The primary interface used to extend salt, is to simply use it. Salt executions
|
|
|
|
|
can be called via the Salt client api, making programming master side solutions
|
|
|
|
|
with Salt is easy.
|
|
|
|
|
.SS Adding Loadable Plugins
|
|
|
|
|
.sp
|
|
|
|
|
Salt is comprised of a core platform that loads many types of easy to write
|
|
|
|
|
plugins. The idea is to enable all of the breaking points in the salt processes
|
|
|
|
|
to have a point of pluggable interaction. This means that all of the main
|
|
|
|
|
features of Salt can be extended, modified or used.
|
|
|
|
|
.sp
|
|
|
|
|
The breaking points and helping interfaces span from convenience master side
|
|
|
|
|
executions to manipulating the flow of how data is handled by Salt.
|
|
|
|
|
.SS Minion Execution Modules
|
|
|
|
|
.sp
|
|
|
|
|
The minion execution modules or just \fBmodules\fP are the core to what salt is
|
|
|
|
|
and does. These modules are found in:
|
|
|
|
|
.sp
|
|
|
|
|
\fI\%https://github.com/thatch45/salt/tree/master/salt/modules\fP
|
|
|
|
|
.sp
|
|
|
|
|
These modules are what is called by the salt command line and the salt client
|
|
|
|
|
api. Adding modules is done by simply adding additional python modules to the
|
|
|
|
|
modules directory and restarting the minion.
|
|
|
|
|
.SS Grains
|
|
|
|
|
.sp
|
|
|
|
|
Salt grains, or "grains of truth" are bits of static information that are
|
|
|
|
|
generated when the minion starts. This information is useful when determining
|
|
|
|
|
what package manager to default to, or where certain configuration files are
|
|
|
|
|
stored on the minion.
|
|
|
|
|
.sp
|
|
|
|
|
The Salt grains are the interface used for auto detection and dynamic assignment
|
|
|
|
|
of execution modules and types to specific salt minions.
|
|
|
|
|
.sp
|
|
|
|
|
The code used to generate the Salt grains can be found here:
|
|
|
|
|
.sp
|
|
|
|
|
\fI\%https://github.com/thatch45/salt/tree/master/salt/grains\fP
|
|
|
|
|
.SS States
|
|
|
|
|
.sp
|
|
|
|
|
Salt supports state enforcement, this makes Salt a high speed and very efficient
|
|
|
|
|
solution for system configuration management.
|
|
|
|
|
.sp
|
|
|
|
|
States can be easily added to Salt by dropping a new state module in:
|
|
|
|
|
.sp
|
|
|
|
|
\fI\%https://github.com/thatch45/salt/tree/master/salt/states\fP
|
|
|
|
|
.SS Renderers
|
|
|
|
|
.sp
|
|
|
|
|
Salt states are controlled by simple data structures, these structures can be
|
|
|
|
|
abstracted in a number of ways. While the default is to be in a yaml file
|
|
|
|
|
wrapped in a jinja template, any abstraction can be used. This means that any
|
|
|
|
|
format that can be dreamed is possible, so long as a renderer is written for
|
|
|
|
|
it.
|
|
|
|
|
.sp
|
|
|
|
|
The existing renderers can be found here:
|
|
|
|
|
.sp
|
|
|
|
|
\fI\%https://github.com/thatch45/salt/tree/master/salt/renderers\fP
|
|
|
|
|
.SS Returners
|
|
|
|
|
.sp
|
|
|
|
|
The salt commands all produce a return value, that return value is sent to the
|
|
|
|
|
salt master by default, but it can be sent anywhere. The returner interface
|
|
|
|
|
makes it programmatically possible for the information to be sent to anything
|
|
|
|
|
from an SQL or NOSQL database, to a custom application made to use Salt.
|
|
|
|
|
.sp
|
|
|
|
|
The existing returners can be found here:
|
|
|
|
|
.sp
|
|
|
|
|
\fI\%https://github.com/thatch45/salt/tree/master/salt/returners\fP
|
|
|
|
|
.SS Runners
|
|
|
|
|
.sp
|
|
|
|
|
Sometimes a certain application can be made to execute and run from the
|
|
|
|
|
existing salt command line. This is where the salt runners come into play.
|
|
|
|
|
The Salt Runners what is called by the salt\-run command and are meant to
|
|
|
|
|
act as a generic interface for encapsulating master side executions.
|
|
|
|
|
.sp
|
|
|
|
|
Existing Salt runners are located here:
|
|
|
|
|
.sp
|
|
|
|
|
\fI\%https://github.com/thatch45/salt/tree/master/salt/runners\fP
|
2011-08-27 17:38:12 +00:00
|
|
|
|
.SS Modules
|
2011-07-09 23:13:08 +00:00
|
|
|
|
.sp
|
|
|
|
|
Salt modules are the functions called by the \fBsalt\fP command.
|
|
|
|
|
.SS Full list of builtin modules
|
|
|
|
|
.SS Contents
|
2011-05-30 22:24:23 +00:00
|
|
|
|
.INDENT 0.0
|
2011-07-09 23:13:08 +00:00
|
|
|
|
.IP \(bu 2
|
|
|
|
|
\fI\%salt.modules.butterkvm\fP
|
|
|
|
|
.IP \(bu 2
|
|
|
|
|
\fI\%salt.modules.cluster\fP
|
|
|
|
|
.IP \(bu 2
|
|
|
|
|
\fI\%salt.modules.cmd\fP
|
|
|
|
|
.IP \(bu 2
|
|
|
|
|
\fI\%salt.modules.cp\fP
|
|
|
|
|
.IP \(bu 2
|
|
|
|
|
\fI\%salt.modules.disk\fP
|
2011-05-30 22:24:23 +00:00
|
|
|
|
.IP \(bu 2
|
2011-07-09 23:13:08 +00:00
|
|
|
|
\fI\%salt.modules.grains\fP
|
2011-05-30 22:24:23 +00:00
|
|
|
|
.IP \(bu 2
|
2011-07-09 23:13:08 +00:00
|
|
|
|
\fI\%salt.modules.network\fP
|
2011-05-30 22:24:23 +00:00
|
|
|
|
.IP \(bu 2
|
2011-07-09 23:13:08 +00:00
|
|
|
|
\fI\%salt.modules.pacman\fP
|
|
|
|
|
.IP \(bu 2
|
|
|
|
|
\fI\%salt.modules.service\fP
|
|
|
|
|
.IP \(bu 2
|
|
|
|
|
\fI\%salt.modules.state\fP
|
|
|
|
|
.IP \(bu 2
|
|
|
|
|
\fI\%salt.modules.status\fP
|
|
|
|
|
.IP \(bu 2
|
|
|
|
|
\fI\%salt.modules.sysctl\fP
|
|
|
|
|
.IP \(bu 2
|
|
|
|
|
\fI\%salt.modules.test\fP
|
|
|
|
|
.IP \(bu 2
|
|
|
|
|
\fI\%salt.modules.virt\fP
|
|
|
|
|
.IP \(bu 2
|
|
|
|
|
\fI\%salt.modules.yum\fP
|
2011-05-30 22:24:23 +00:00
|
|
|
|
.UNINDENT
|
|
|
|
|
.SS \fBsalt.modules.butterkvm\fP
|
|
|
|
|
.sp
|
2011-07-09 23:13:08 +00:00
|
|
|
|
Specialized routines used by the butter cloud component
|
2011-05-30 22:24:23 +00:00
|
|
|
|
.INDENT 0.0
|
|
|
|
|
.TP
|
|
|
|
|
.B salt.modules.butterkvm.create(instance, vda, image, pin)
|
|
|
|
|
Create a virtual machine, this is part of the butter vm system and assumes
|
|
|
|
|
that the files prepared by butter are available via shared storage.
|
|
|
|
|
AKA \- don\(aqt call this from the command line!
|
|
|
|
|
.sp
|
|
|
|
|
Arguments:
|
|
|
|
|
instance \- string, The path to the instance directory for the given vm on
|
|
|
|
|
shared storage
|
|
|
|
|
vda \- The location where the virtual machine image needs to be placed
|
|
|
|
|
image \- The image to move into place
|
|
|
|
|
pin \- a "pin" data structure defining the myriad of possible vdb\-vbz disk
|
|
|
|
|
images to generate.
|
2011-07-09 23:13:08 +00:00
|
|
|
|
.sp
|
|
|
|
|
CLI Example:
|
|
|
|
|
salt \(aq*\(aq butterkvm.create <instance dir> <root image location> <Destination> <pin data>
|
2011-05-30 22:24:23 +00:00
|
|
|
|
.UNINDENT
|
|
|
|
|
.INDENT 0.0
|
|
|
|
|
.TP
|
|
|
|
|
.B salt.modules.butterkvm.full_butter_data(local_path)
|
|
|
|
|
Return the full virt info, but add butter data!
|
|
|
|
|
.sp
|
|
|
|
|
CLI Example:
|
|
|
|
|
salt \(aq*\(aq buttervm.full_butter_data <image_path>
|
|
|
|
|
.UNINDENT
|
|
|
|
|
.INDENT 0.0
|
|
|
|
|
.TP
|
|
|
|
|
.B salt.modules.butterkvm.libvirt_creds()
|
|
|
|
|
Returns the user and group that the disk images should be owned by
|
2011-07-09 23:13:08 +00:00
|
|
|
|
.sp
|
|
|
|
|
CLI Example:
|
|
|
|
|
salt \(aq*\(aq butterkvm.libvirt_creds
|
2011-05-30 22:24:23 +00:00
|
|
|
|
.UNINDENT
|
|
|
|
|
.INDENT 0.0
|
|
|
|
|
.TP
|
|
|
|
|
.B salt.modules.butterkvm.local_images(local_path)
|
|
|
|
|
return the virtual machine names for all of the images located in the
|
|
|
|
|
butter cloud\(aqs local_path in a list:
|
|
|
|
|
.sp
|
|
|
|
|
[\(aqvm1.boo.com\(aq, \(aqvm2.foo.com\(aq]
|
|
|
|
|
.sp
|
|
|
|
|
CLI Example:
|
|
|
|
|
salt \(aq*\(aq buttervm.local_images <image_path>
|
|
|
|
|
.UNINDENT
|
|
|
|
|
.SS \fBsalt.modules.cluster\fP
|
|
|
|
|
.sp
|
|
|
|
|
The cluster module is used to distribute and activate salt HA cluster
|
|
|
|
|
components
|
|
|
|
|
.INDENT 0.0
|
|
|
|
|
.TP
|
|
|
|
|
.B salt.modules.cluster.distrib(minions, master_conf, master_pem, conf_file)
|
|
|
|
|
Set up this minion as a failover master \- only intended for use by the
|
|
|
|
|
cluster interface
|
|
|
|
|
.UNINDENT
|
|
|
|
|
.SS \fBsalt.modules.cmd\fP
|
|
|
|
|
.sp
|
|
|
|
|
A module for shelling out
|
|
|
|
|
.sp
|
|
|
|
|
Keep in mind that this module is insecure, in that it can give whomever has
|
|
|
|
|
access to the master root execution access to all salt minions
|
|
|
|
|
.INDENT 0.0
|
|
|
|
|
.TP
|
|
|
|
|
.B salt.modules.cmd.exec_code(lang, code)
|
|
|
|
|
Pass in two strings, the first naming the executable language, aka \-
|
|
|
|
|
python2, python3, ruby, perl, lua, etc. the second string containing
|
|
|
|
|
the code you wish to execute. The stdout and stderr will be returned
|
2011-07-09 23:13:08 +00:00
|
|
|
|
.sp
|
|
|
|
|
CLI Example:
|
|
|
|
|
salt \(aq*\(aq cmd.exec_code ruby \(aqputs "cheese"\(aq
|
|
|
|
|
.UNINDENT
|
|
|
|
|
.INDENT 0.0
|
|
|
|
|
.TP
|
2011-08-27 17:38:12 +00:00
|
|
|
|
.B salt.modules.cmd.has_exec(cmd)
|
|
|
|
|
Returns true if the executable is available on the minion, false otherwise
|
2011-07-09 23:13:08 +00:00
|
|
|
|
.sp
|
2011-08-27 17:38:12 +00:00
|
|
|
|
CLI Example:
|
|
|
|
|
salt \(aq*\(aq cat
|
|
|
|
|
.UNINDENT
|
|
|
|
|
.INDENT 0.0
|
|
|
|
|
.TP
|
|
|
|
|
.B salt.modules.cmd.retcode(cmd, cwd=\(aq/home/thatch\(aq)
|
2011-07-09 23:13:08 +00:00
|
|
|
|
Execute a shell command and return the command\(aqs return code.
|
|
|
|
|
.sp
|
|
|
|
|
CLI Example:
|
|
|
|
|
salt \(aq*\(aq cmd.retcode "file /bin/bash"
|
2011-05-30 22:24:23 +00:00
|
|
|
|
.UNINDENT
|
|
|
|
|
.INDENT 0.0
|
|
|
|
|
.TP
|
2011-08-27 17:38:12 +00:00
|
|
|
|
.B salt.modules.cmd.run(cmd, cwd=\(aq/home/thatch\(aq)
|
2011-05-30 22:24:23 +00:00
|
|
|
|
Execute the passed command and return the output as a string
|
|
|
|
|
.sp
|
|
|
|
|
CLI Example:
|
|
|
|
|
salt \(aq*\(aq cmd.run "ls \-l | grep foo | awk \(aq{print $2}\(aq"
|
|
|
|
|
.UNINDENT
|
|
|
|
|
.INDENT 0.0
|
|
|
|
|
.TP
|
2011-08-27 17:38:12 +00:00
|
|
|
|
.B salt.modules.cmd.run_all(cmd, cwd=\(aq/home/thatch\(aq)
|
2011-07-09 23:13:08 +00:00
|
|
|
|
Execute the passed command and return a dict of return data
|
|
|
|
|
.sp
|
|
|
|
|
CLI Example:
|
|
|
|
|
salt \(aq*\(aq cmd.run_all "ls \-l | grep foo | awk \(aq{print $2}\(aq"
|
|
|
|
|
.UNINDENT
|
|
|
|
|
.INDENT 0.0
|
|
|
|
|
.TP
|
2011-08-27 17:38:12 +00:00
|
|
|
|
.B salt.modules.cmd.run_stderr(cmd, cwd=\(aq/home/thatch\(aq)
|
2011-05-30 22:24:23 +00:00
|
|
|
|
Execute a command and only return the standard error
|
|
|
|
|
.sp
|
|
|
|
|
CLI Example:
|
|
|
|
|
salt \(aq*\(aq cmd.run "ls \-l | grep foo | awk \(aq{print $2}\(aq"
|
|
|
|
|
.UNINDENT
|
|
|
|
|
.INDENT 0.0
|
|
|
|
|
.TP
|
2011-08-27 17:38:12 +00:00
|
|
|
|
.B salt.modules.cmd.run_stdout(cmd, cwd=\(aq/home/thatch\(aq)
|
2011-05-30 22:24:23 +00:00
|
|
|
|
Execute a command, and only return the standard out
|
|
|
|
|
.sp
|
|
|
|
|
CLI Example:
|
|
|
|
|
salt \(aq*\(aq cmd.run "ls \-l | grep foo | awk \(aq{print $2}\(aq"
|
|
|
|
|
.UNINDENT
|
|
|
|
|
.SS \fBsalt.modules.cp\fP
|
2011-07-09 23:13:08 +00:00
|
|
|
|
.sp
|
|
|
|
|
Minion side functions for salt\-cp
|
|
|
|
|
.INDENT 0.0
|
|
|
|
|
.TP
|
|
|
|
|
.B salt.modules.cp.cache_file(path, env=\(aqbase\(aq)
|
|
|
|
|
Used to cache a single file in the local salt\-master file cache.
|
|
|
|
|
.UNINDENT
|
|
|
|
|
.INDENT 0.0
|
|
|
|
|
.TP
|
|
|
|
|
.B salt.modules.cp.cache_files(paths, env=\(aqbase\(aq)
|
|
|
|
|
Used to gather many files from the master, the gathered files will be
|
|
|
|
|
saved in the minion cachedir reflective to the paths retrieved from the
|
|
|
|
|
master.
|
|
|
|
|
.UNINDENT
|
|
|
|
|
.INDENT 0.0
|
|
|
|
|
.TP
|
|
|
|
|
.B salt.modules.cp.get_file(path, dest, env=\(aqbase\(aq)
|
|
|
|
|
Used to get a single file from the salt master
|
|
|
|
|
.UNINDENT
|
|
|
|
|
.INDENT 0.0
|
|
|
|
|
.TP
|
|
|
|
|
.B salt.modules.cp.hash_file(path, env=\(aqbase\(aq)
|
|
|
|
|
Return the hash of a file, to get the hash of a file on the
|
|
|
|
|
salt master file server prepend the path with salt://<file on server>
|
|
|
|
|
otherwise, prepend the file with / for a local file.
|
|
|
|
|
.sp
|
|
|
|
|
CLI Example:
|
|
|
|
|
.UNINDENT
|
|
|
|
|
.INDENT 0.0
|
|
|
|
|
.TP
|
|
|
|
|
.B salt.modules.cp.recv(files, dest)
|
|
|
|
|
Used with salt\-cp, pass the files dict, and the destination.
|
|
|
|
|
.sp
|
|
|
|
|
This function receives small fast copy files from the master via salt\-cp
|
|
|
|
|
.UNINDENT
|
2011-05-30 22:24:23 +00:00
|
|
|
|
.SS \fBsalt.modules.disk\fP
|
|
|
|
|
.sp
|
|
|
|
|
Module for gathering disk information
|
|
|
|
|
.INDENT 0.0
|
|
|
|
|
.TP
|
|
|
|
|
.B salt.modules.disk.usage()
|
|
|
|
|
Return usage information for volumes mounted on this minion
|
|
|
|
|
.sp
|
|
|
|
|
CLI Example:
|
|
|
|
|
salt \(aq*\(aq disk.usage
|
|
|
|
|
.UNINDENT
|
|
|
|
|
.SS \fBsalt.modules.grains\fP
|
2011-07-09 23:13:08 +00:00
|
|
|
|
.sp
|
|
|
|
|
Control aspects of the grains data
|
|
|
|
|
.INDENT 0.0
|
|
|
|
|
.TP
|
|
|
|
|
.B salt.modules.grains.item(key)
|
|
|
|
|
Return a singe component of the grains data
|
|
|
|
|
.sp
|
|
|
|
|
CLI Example:
|
|
|
|
|
salt \(aq*\(aq grains.item os
|
|
|
|
|
.UNINDENT
|
|
|
|
|
.INDENT 0.0
|
|
|
|
|
.TP
|
|
|
|
|
.B salt.modules.grains.items()
|
|
|
|
|
Return the grains data
|
|
|
|
|
.sp
|
|
|
|
|
CLI Example:
|
|
|
|
|
salt \(aq*\(aq grains.items
|
|
|
|
|
.UNINDENT
|
2011-05-30 22:24:23 +00:00
|
|
|
|
.SS \fBsalt.modules.network\fP
|
|
|
|
|
.sp
|
|
|
|
|
Module for gathering and managing network information
|
|
|
|
|
.INDENT 0.0
|
|
|
|
|
.TP
|
|
|
|
|
.B salt.modules.network.dig(host)
|
|
|
|
|
Performs a DNS lookup with dig
|
|
|
|
|
.sp
|
|
|
|
|
CLI Example:
|
|
|
|
|
salt \(aq*\(aq network.dig archlinux.org
|
|
|
|
|
.UNINDENT
|
|
|
|
|
.INDENT 0.0
|
|
|
|
|
.TP
|
|
|
|
|
.B salt.modules.network.isportopen(host, port)
|
|
|
|
|
Return status of a port
|
|
|
|
|
.sp
|
|
|
|
|
CLI Example:
|
|
|
|
|
salt \(aq*\(aq network.isportopen 127.0.0.1 22
|
|
|
|
|
.UNINDENT
|
|
|
|
|
.INDENT 0.0
|
|
|
|
|
.TP
|
|
|
|
|
.B salt.modules.network.netstat()
|
|
|
|
|
Return information on open ports and states
|
|
|
|
|
.sp
|
|
|
|
|
CLI Example:
|
|
|
|
|
salt \(aq*\(aq network.netstat
|
|
|
|
|
.UNINDENT
|
|
|
|
|
.INDENT 0.0
|
|
|
|
|
.TP
|
|
|
|
|
.B salt.modules.network.ping(host)
|
|
|
|
|
Performs a ping to a host
|
|
|
|
|
.sp
|
|
|
|
|
CLI Example:
|
|
|
|
|
salt \(aq*\(aq network.ping archlinux.org \-c 4
|
|
|
|
|
.UNINDENT
|
|
|
|
|
.INDENT 0.0
|
|
|
|
|
.TP
|
|
|
|
|
.B salt.modules.network.traceroute(host)
|
|
|
|
|
Performs a traceroute to a 3rd party host
|
|
|
|
|
.sp
|
|
|
|
|
CLI Example:
|
|
|
|
|
salt \(aq*\(aq network.traceroute archlinux.org
|
|
|
|
|
.UNINDENT
|
|
|
|
|
.SS \fBsalt.modules.pacman\fP
|
|
|
|
|
.sp
|
2011-07-09 23:13:08 +00:00
|
|
|
|
A module to wrap pacman calls, since Arch is the best
|
|
|
|
|
(\fI\%https://wiki.archlinux.org/index.php/Arch_is_the_best\fP)
|
|
|
|
|
.INDENT 0.0
|
|
|
|
|
.TP
|
|
|
|
|
.B salt.modules.pacman.available_version(name)
|
|
|
|
|
The available version of the package in the repository
|
|
|
|
|
.sp
|
|
|
|
|
CLI Example:
|
|
|
|
|
salt \(aq*\(aq pkg.available_version <package name>
|
|
|
|
|
.UNINDENT
|
2011-05-30 22:24:23 +00:00
|
|
|
|
.INDENT 0.0
|
|
|
|
|
.TP
|
2011-07-09 23:13:08 +00:00
|
|
|
|
.B salt.modules.pacman.install(name, refresh=False)
|
2011-05-30 22:24:23 +00:00
|
|
|
|
Install the passed package, add refresh=True to install with an \-Sy
|
|
|
|
|
.sp
|
|
|
|
|
Return a dict containing the new package names and versions:
|
|
|
|
|
{\(aq<package>\(aq: {\(aqold\(aq: \(aq<old\-version>\(aq,
|
|
|
|
|
.INDENT 7.0
|
|
|
|
|
.INDENT 3.5
|
|
|
|
|
\(aqnew\(aq: \(aq<new\-version>\(aq]}
|
|
|
|
|
.UNINDENT
|
|
|
|
|
.UNINDENT
|
|
|
|
|
.sp
|
|
|
|
|
CLI Example:
|
2011-07-09 23:13:08 +00:00
|
|
|
|
salt \(aq*\(aq pkg.install <package name>
|
2011-05-30 22:24:23 +00:00
|
|
|
|
.UNINDENT
|
|
|
|
|
.INDENT 0.0
|
|
|
|
|
.TP
|
|
|
|
|
.B salt.modules.pacman.list_pkgs()
|
|
|
|
|
List the packages currently installed in a dict:
|
|
|
|
|
{\(aq<package_name>\(aq: \(aq<version>\(aq}
|
|
|
|
|
.sp
|
|
|
|
|
CLI Example:
|
2011-07-09 23:13:08 +00:00
|
|
|
|
salt \(aq*\(aq pkg.list_pkgs
|
2011-05-30 22:24:23 +00:00
|
|
|
|
.UNINDENT
|
|
|
|
|
.INDENT 0.0
|
|
|
|
|
.TP
|
2011-07-09 23:13:08 +00:00
|
|
|
|
.B salt.modules.pacman.purge(name)
|
2011-05-30 22:24:23 +00:00
|
|
|
|
Recursively remove a package and all dependencies which were installed
|
|
|
|
|
with it, this will call a pacman \-Rsc
|
|
|
|
|
.sp
|
|
|
|
|
Return a list containing the removed packages:
|
|
|
|
|
.sp
|
|
|
|
|
CLI Example:
|
2011-07-09 23:13:08 +00:00
|
|
|
|
salt \(aq*\(aq pkg.purge <package name>
|
2011-05-30 22:24:23 +00:00
|
|
|
|
.UNINDENT
|
|
|
|
|
.INDENT 0.0
|
|
|
|
|
.TP
|
|
|
|
|
.B salt.modules.pacman.refresh_db()
|
|
|
|
|
Just run a pacman \-Sy, return a dict:
|
|
|
|
|
{\(aq<database name>\(aq: Bool}
|
|
|
|
|
.sp
|
|
|
|
|
CLI Example:
|
2011-07-09 23:13:08 +00:00
|
|
|
|
salt \(aq*\(aq pkg.refresh_db
|
2011-05-30 22:24:23 +00:00
|
|
|
|
.UNINDENT
|
|
|
|
|
.INDENT 0.0
|
|
|
|
|
.TP
|
2011-07-09 23:13:08 +00:00
|
|
|
|
.B salt.modules.pacman.remove(name)
|
2011-05-30 22:24:23 +00:00
|
|
|
|
Remove a single package with pacman \-R
|
|
|
|
|
.sp
|
|
|
|
|
Return a list containing the removed packages:
|
|
|
|
|
.sp
|
|
|
|
|
CLI Example:
|
2011-07-09 23:13:08 +00:00
|
|
|
|
salt \(aq*\(aq pkg.remove <package name>
|
2011-05-30 22:24:23 +00:00
|
|
|
|
.UNINDENT
|
|
|
|
|
.INDENT 0.0
|
|
|
|
|
.TP
|
|
|
|
|
.B salt.modules.pacman.upgrade()
|
|
|
|
|
Run a full system upgrade, a pacman \-Syu
|
|
|
|
|
.sp
|
|
|
|
|
Return a dict containing the new package names and versions:
|
|
|
|
|
{\(aq<package>\(aq: {\(aqold\(aq: \(aq<old\-version>\(aq,
|
|
|
|
|
.INDENT 7.0
|
|
|
|
|
.INDENT 3.5
|
|
|
|
|
\(aqnew\(aq: \(aq<new\-version>\(aq]}
|
|
|
|
|
.UNINDENT
|
|
|
|
|
.UNINDENT
|
|
|
|
|
.sp
|
|
|
|
|
CLI Example:
|
2011-07-09 23:13:08 +00:00
|
|
|
|
salt \(aq*\(aq pkg.upgrade
|
|
|
|
|
.UNINDENT
|
|
|
|
|
.INDENT 0.0
|
|
|
|
|
.TP
|
|
|
|
|
.B salt.modules.pacman.version(name)
|
2011-08-27 17:38:12 +00:00
|
|
|
|
Returns a version if the package is installed, else returns an empty string
|
2011-07-09 23:13:08 +00:00
|
|
|
|
.sp
|
|
|
|
|
CLI Example:
|
|
|
|
|
salt \(aq*\(aq pkg.version <package name>
|
2011-05-30 22:24:23 +00:00
|
|
|
|
.UNINDENT
|
|
|
|
|
.SS \fBsalt.modules.service\fP
|
|
|
|
|
.sp
|
2011-07-09 23:13:08 +00:00
|
|
|
|
Top level package command wrapper, used to translate the os detected by the
|
|
|
|
|
grains to the correct service manager
|
|
|
|
|
.INDENT 0.0
|
|
|
|
|
.TP
|
|
|
|
|
.B salt.modules.service.restart(name)
|
|
|
|
|
Restart the named service
|
|
|
|
|
.sp
|
|
|
|
|
CLI Example:
|
|
|
|
|
salt \(aq*\(aq service.restart <service name>
|
|
|
|
|
.UNINDENT
|
2011-05-30 22:24:23 +00:00
|
|
|
|
.INDENT 0.0
|
|
|
|
|
.TP
|
2011-07-09 23:13:08 +00:00
|
|
|
|
.B salt.modules.service.start(name)
|
2011-05-30 22:24:23 +00:00
|
|
|
|
Start the specified service
|
2011-07-09 23:13:08 +00:00
|
|
|
|
.sp
|
|
|
|
|
CLI Example:
|
|
|
|
|
salt \(aq*\(aq service.start <service name>
|
|
|
|
|
.UNINDENT
|
|
|
|
|
.INDENT 0.0
|
|
|
|
|
.TP
|
|
|
|
|
.B salt.modules.service.status(name, sig=None)
|
|
|
|
|
Return the status for a service, returns the PID or an empty string if the
|
|
|
|
|
service is running or not, pass a signature to use to find the service via
|
|
|
|
|
ps
|
|
|
|
|
.sp
|
|
|
|
|
CLI Example:
|
|
|
|
|
salt \(aq*\(aq service.status <service name> [service signature]
|
2011-05-30 22:24:23 +00:00
|
|
|
|
.UNINDENT
|
|
|
|
|
.INDENT 0.0
|
|
|
|
|
.TP
|
2011-07-09 23:13:08 +00:00
|
|
|
|
.B salt.modules.service.stop(name)
|
2011-05-30 22:24:23 +00:00
|
|
|
|
Stop the specified service
|
2011-07-09 23:13:08 +00:00
|
|
|
|
.sp
|
|
|
|
|
CLI Example:
|
|
|
|
|
salt \(aq*\(aq service.stop <service name>
|
2011-05-30 22:24:23 +00:00
|
|
|
|
.UNINDENT
|
|
|
|
|
.SS \fBsalt.modules.state\fP
|
2011-07-09 23:13:08 +00:00
|
|
|
|
.sp
|
|
|
|
|
Control the state system on the minion
|
|
|
|
|
.INDENT 0.0
|
|
|
|
|
.TP
|
|
|
|
|
.B salt.modules.state.high(data)
|
|
|
|
|
Execute the compound calls stored in a single set of high data
|
|
|
|
|
This function is mostly intended for testing the state system
|
|
|
|
|
.sp
|
|
|
|
|
CLI Example:
|
|
|
|
|
salt \(aq*\(aq state.high \(aq{"vim": {"pkg": ["installed"]}}\(aq
|
|
|
|
|
.UNINDENT
|
|
|
|
|
.INDENT 0.0
|
|
|
|
|
.TP
|
|
|
|
|
.B salt.modules.state.highstate()
|
|
|
|
|
Retrive the state data from the salt master for this minion and execute it
|
|
|
|
|
.sp
|
|
|
|
|
CLI Example:
|
|
|
|
|
salt \(aq*\(aq state.highstate
|
|
|
|
|
.UNINDENT
|
|
|
|
|
.INDENT 0.0
|
|
|
|
|
.TP
|
|
|
|
|
.B salt.modules.state.low(data)
|
|
|
|
|
Execute a single low data call
|
|
|
|
|
This function is mostly intended for testing the state system
|
|
|
|
|
.sp
|
|
|
|
|
CLI Example:
|
|
|
|
|
salt \(aq*\(aq state.low \(aq{"state": "pkg", "fun": "installed", "name": "vim"}\(aq
|
|
|
|
|
.UNINDENT
|
|
|
|
|
.INDENT 0.0
|
|
|
|
|
.TP
|
|
|
|
|
.B salt.modules.state.template(tem)
|
|
|
|
|
Execute the information stored in a template file on the minion
|
|
|
|
|
.sp
|
|
|
|
|
CLI Example:
|
|
|
|
|
salt \(aq*\(aq state.template \(aq<Path to template on the minion>\(aq
|
|
|
|
|
.UNINDENT
|
|
|
|
|
.INDENT 0.0
|
|
|
|
|
.TP
|
|
|
|
|
.B salt.modules.state.template_str(tem)
|
|
|
|
|
Execute the information stored in a template file on the minion
|
|
|
|
|
.sp
|
|
|
|
|
CLI Example:
|
|
|
|
|
salt \(aq*\(aq state.template_str \(aq<Template String>\(aq
|
|
|
|
|
.UNINDENT
|
2011-05-30 22:24:23 +00:00
|
|
|
|
.SS \fBsalt.modules.status\fP
|
|
|
|
|
.sp
|
2011-07-09 23:13:08 +00:00
|
|
|
|
Module for returning various status data about a minion.
|
|
|
|
|
These data can be useful for compiling into stats later.
|
2011-05-30 22:24:23 +00:00
|
|
|
|
.INDENT 0.0
|
|
|
|
|
.TP
|
2011-07-09 23:13:08 +00:00
|
|
|
|
.B salt.modules.status.all_status()
|
|
|
|
|
Return a composite of all status data and info for this minoon.
|
|
|
|
|
Warning: There is a LOT here!
|
2011-05-30 22:24:23 +00:00
|
|
|
|
.sp
|
|
|
|
|
CLI Example:
|
2011-07-09 23:13:08 +00:00
|
|
|
|
salt \(aq*\(aq status.all_status
|
2011-05-30 22:24:23 +00:00
|
|
|
|
.UNINDENT
|
|
|
|
|
.INDENT 0.0
|
|
|
|
|
.TP
|
|
|
|
|
.B salt.modules.status.cpuinfo()
|
2011-07-09 23:13:08 +00:00
|
|
|
|
Return the CPU info for this minion
|
2011-05-30 22:24:23 +00:00
|
|
|
|
.sp
|
|
|
|
|
CLI Example:
|
|
|
|
|
salt \(aq*\(aq status.cpuinfo
|
|
|
|
|
.UNINDENT
|
|
|
|
|
.INDENT 0.0
|
|
|
|
|
.TP
|
|
|
|
|
.B salt.modules.status.cpustats()
|
|
|
|
|
Return the CPU stats for this minon
|
|
|
|
|
.sp
|
|
|
|
|
CLI Example:
|
|
|
|
|
salt \(aq*\(aq status.cpustats
|
|
|
|
|
.UNINDENT
|
|
|
|
|
.INDENT 0.0
|
|
|
|
|
.TP
|
2011-07-09 23:13:08 +00:00
|
|
|
|
.B salt.modules.status.custom()
|
|
|
|
|
Return a custom composite of status data and info for this minon,
|
|
|
|
|
based on the minion config file. An example config like might be:
|
|
|
|
|
.sp
|
|
|
|
|
status.cpustats.custom: [ \(aqcpu\(aq, \(aqctxt\(aq, \(aqbtime\(aq, \(aqprocesses\(aq ]
|
|
|
|
|
.sp
|
|
|
|
|
...where status refers to status.py, cpustats is the function
|
|
|
|
|
where we get our data, and custom is this function It is followed
|
|
|
|
|
by a list of keys that we want returned.
|
|
|
|
|
.sp
|
|
|
|
|
This function is meant to replace all_status(), which returns
|
|
|
|
|
anything and everything, which we probably don\(aqt want.
|
|
|
|
|
.sp
|
|
|
|
|
By default, nothing is returned. Warning: Depending on what you
|
|
|
|
|
include, there can be a LOT here!
|
|
|
|
|
.sp
|
|
|
|
|
CLI Example:
|
|
|
|
|
salt \(aq*\(aq status.custom
|
|
|
|
|
.UNINDENT
|
|
|
|
|
.INDENT 0.0
|
|
|
|
|
.TP
|
2011-05-30 22:24:23 +00:00
|
|
|
|
.B salt.modules.status.diskstats()
|
2011-07-09 23:13:08 +00:00
|
|
|
|
Return the disk stats for this minion
|
2011-05-30 22:24:23 +00:00
|
|
|
|
.sp
|
|
|
|
|
CLI Example:
|
|
|
|
|
salt \(aq*\(aq status.diskstats
|
|
|
|
|
.UNINDENT
|
|
|
|
|
.INDENT 0.0
|
|
|
|
|
.TP
|
2011-08-27 17:38:12 +00:00
|
|
|
|
.B salt.modules.status.diskusage(*args)
|
|
|
|
|
Return the disk usage for this minion
|
|
|
|
|
.sp
|
|
|
|
|
Usage:
|
|
|
|
|
salt \(aq*\(aq status.diskusage [paths and/or filesystem types]
|
2011-05-30 22:24:23 +00:00
|
|
|
|
.sp
|
2011-08-27 17:38:12 +00:00
|
|
|
|
CLI Example:
|
|
|
|
|
salt \(aq*\(aq status.diskusage # usage for all filesystems
|
|
|
|
|
salt \(aq*\(aq status.diskusage / /tmp # usage for / and /tmp
|
|
|
|
|
salt \(aq*\(aq status.diskusage ext? # usage for ext2, ext3, & ext4 filesystems
|
|
|
|
|
salt \(aq*\(aq status.diskusage / ext? # usage for / and all ext filesystems
|
|
|
|
|
.UNINDENT
|
|
|
|
|
.INDENT 0.0
|
|
|
|
|
.TP
|
|
|
|
|
.B salt.modules.status.loadavg()
|
2011-05-30 22:24:23 +00:00
|
|
|
|
Return the load averages for this minion
|
|
|
|
|
.sp
|
|
|
|
|
CLI Example:
|
|
|
|
|
salt \(aq*\(aq status.loadavg
|
|
|
|
|
.UNINDENT
|
|
|
|
|
.INDENT 0.0
|
|
|
|
|
.TP
|
|
|
|
|
.B salt.modules.status.meminfo()
|
2011-07-09 23:13:08 +00:00
|
|
|
|
Return the CPU stats for this minion
|
2011-05-30 22:24:23 +00:00
|
|
|
|
.sp
|
|
|
|
|
CLI Example:
|
|
|
|
|
salt \(aq*\(aq status.meminfo
|
|
|
|
|
.UNINDENT
|
|
|
|
|
.INDENT 0.0
|
|
|
|
|
.TP
|
2011-07-09 23:13:08 +00:00
|
|
|
|
.B salt.modules.status.netdev()
|
|
|
|
|
Return the network device stats for this minion
|
|
|
|
|
.sp
|
|
|
|
|
CLI Example:
|
|
|
|
|
salt \(aq*\(aq status.netdev
|
|
|
|
|
.UNINDENT
|
|
|
|
|
.INDENT 0.0
|
|
|
|
|
.TP
|
2011-05-30 22:24:23 +00:00
|
|
|
|
.B salt.modules.status.netstats()
|
2011-07-09 23:13:08 +00:00
|
|
|
|
Return the network stats for this minion
|
2011-05-30 22:24:23 +00:00
|
|
|
|
.sp
|
|
|
|
|
CLI Example:
|
|
|
|
|
salt \(aq*\(aq status.netstats
|
|
|
|
|
.UNINDENT
|
|
|
|
|
.INDENT 0.0
|
|
|
|
|
.TP
|
|
|
|
|
.B salt.modules.status.uptime()
|
|
|
|
|
Return the uptime for this minion
|
|
|
|
|
.sp
|
|
|
|
|
CLI Example:
|
|
|
|
|
salt \(aq*\(aq status.uptime
|
|
|
|
|
.UNINDENT
|
|
|
|
|
.INDENT 0.0
|
|
|
|
|
.TP
|
|
|
|
|
.B salt.modules.status.vmstats()
|
2011-07-09 23:13:08 +00:00
|
|
|
|
Return the virtual memory stats for this minion
|
2011-05-30 22:24:23 +00:00
|
|
|
|
.sp
|
|
|
|
|
CLI Example:
|
|
|
|
|
salt \(aq*\(aq status.vmstats
|
|
|
|
|
.UNINDENT
|
|
|
|
|
.INDENT 0.0
|
|
|
|
|
.TP
|
|
|
|
|
.B salt.modules.status.w()
|
2011-07-09 23:13:08 +00:00
|
|
|
|
Return a list of logged in users for this minion, using the w command
|
2011-05-30 22:24:23 +00:00
|
|
|
|
.sp
|
|
|
|
|
CLI Example:
|
|
|
|
|
salt \(aq*\(aq status.w
|
|
|
|
|
.UNINDENT
|
|
|
|
|
.SS \fBsalt.modules.sysctl\fP
|
|
|
|
|
.sp
|
2011-07-09 23:13:08 +00:00
|
|
|
|
Module for viewing and modifying sysctl parameters
|
2011-05-30 22:24:23 +00:00
|
|
|
|
.INDENT 0.0
|
|
|
|
|
.TP
|
|
|
|
|
.B salt.modules.sysctl.assign(name, value)
|
|
|
|
|
Assign a single sysctl parameter for this minion
|
|
|
|
|
.sp
|
|
|
|
|
CLI Example:
|
|
|
|
|
salt \(aq*\(aq sysctl.assign net.ipv4.ip_forward 1
|
|
|
|
|
.UNINDENT
|
|
|
|
|
.INDENT 0.0
|
|
|
|
|
.TP
|
|
|
|
|
.B salt.modules.sysctl.get(name)
|
|
|
|
|
Return a single sysctl parameter for this minion
|
|
|
|
|
.sp
|
|
|
|
|
CLI Example:
|
|
|
|
|
salt \(aq*\(aq sysctl.get net.ipv4.ip_forward
|
|
|
|
|
.UNINDENT
|
|
|
|
|
.INDENT 0.0
|
|
|
|
|
.TP
|
|
|
|
|
.B salt.modules.sysctl.show()
|
|
|
|
|
Return a list of sysctl parameters for this minion
|
|
|
|
|
.sp
|
|
|
|
|
CLI Example:
|
|
|
|
|
salt \(aq*\(aq sysctl.show
|
|
|
|
|
.UNINDENT
|
|
|
|
|
.SS \fBsalt.modules.test\fP
|
|
|
|
|
.sp
|
2011-07-09 23:13:08 +00:00
|
|
|
|
Module for running arbitrary tests
|
2011-05-30 22:24:23 +00:00
|
|
|
|
.INDENT 0.0
|
|
|
|
|
.TP
|
|
|
|
|
.B salt.modules.test.collatz(start)
|
|
|
|
|
Execute the collatz conjecture from the passed starting number, returns
|
|
|
|
|
the sequence and the time it took to compute. Used for performance tests.
|
|
|
|
|
.sp
|
|
|
|
|
CLI Example:
|
|
|
|
|
salt \(aq*\(aq test.collatz 3
|
|
|
|
|
.UNINDENT
|
|
|
|
|
.INDENT 0.0
|
|
|
|
|
.TP
|
2011-07-09 23:13:08 +00:00
|
|
|
|
.B salt.modules.test.conf_test()
|
|
|
|
|
Return the value for test.foo in the minion configuration file, or return
|
|
|
|
|
the default value
|
|
|
|
|
.sp
|
|
|
|
|
CLI Example:
|
|
|
|
|
salt \(aq*\(aq test.conf_test
|
|
|
|
|
.UNINDENT
|
|
|
|
|
.INDENT 0.0
|
|
|
|
|
.TP
|
|
|
|
|
.B salt.modules.test.cross_test(func, args=[])
|
|
|
|
|
Execute a minion function via the __salt__ object in the test module, used
|
|
|
|
|
to verify that the minion functions can be called via the __salt__module
|
|
|
|
|
.sp
|
|
|
|
|
CLI Example:
|
|
|
|
|
salt \(aq*\(aq test.cross_test file.gid_to_group 0
|
|
|
|
|
.UNINDENT
|
|
|
|
|
.INDENT 0.0
|
|
|
|
|
.TP
|
|
|
|
|
.B salt.modules.test.echo(text)
|
2011-05-30 22:24:23 +00:00
|
|
|
|
Return a string \- used for testing the connection
|
|
|
|
|
.sp
|
|
|
|
|
CLI Example:
|
|
|
|
|
salt \(aq*\(aq test.echo \(aqfoo bar baz quo qux\(aq
|
|
|
|
|
.UNINDENT
|
|
|
|
|
.INDENT 0.0
|
|
|
|
|
.TP
|
|
|
|
|
.B salt.modules.test.fib(num)
|
2011-07-09 23:13:08 +00:00
|
|
|
|
Return a Fibonacci sequence up to the passed number, and the time it took
|
2011-05-30 22:24:23 +00:00
|
|
|
|
to compute in seconds. Used for performance tests
|
|
|
|
|
.sp
|
|
|
|
|
CLI Example:
|
|
|
|
|
salt \(aq*\(aq test.fib 3
|
|
|
|
|
.UNINDENT
|
|
|
|
|
.INDENT 0.0
|
|
|
|
|
.TP
|
2011-07-09 23:13:08 +00:00
|
|
|
|
.B salt.modules.test.get_opts()
|
|
|
|
|
Return the configuration options passed to this minion
|
|
|
|
|
.sp
|
|
|
|
|
CLI Example:
|
|
|
|
|
salt \(aq*\(aq test.get_opts
|
|
|
|
|
.UNINDENT
|
|
|
|
|
.INDENT 0.0
|
|
|
|
|
.TP
|
2011-08-27 17:38:12 +00:00
|
|
|
|
.B salt.modules.test.outputter(data)
|
|
|
|
|
Test the outputter, pass in data to return
|
2011-05-30 22:24:23 +00:00
|
|
|
|
.sp
|
2011-08-27 17:38:12 +00:00
|
|
|
|
CLI Example:
|
|
|
|
|
salt \(aq*\(aq test.outputter foobar
|
|
|
|
|
.UNINDENT
|
|
|
|
|
.INDENT 0.0
|
|
|
|
|
.TP
|
|
|
|
|
.B salt.modules.test.ping()
|
2011-05-30 22:24:23 +00:00
|
|
|
|
Just used to make sure the minion is up and responding
|
|
|
|
|
Return True
|
|
|
|
|
.sp
|
|
|
|
|
CLI Example:
|
|
|
|
|
salt \(aq*\(aq test.ping
|
|
|
|
|
.UNINDENT
|
|
|
|
|
.SS \fBsalt.modules.virt\fP
|
|
|
|
|
.sp
|
2011-07-09 23:13:08 +00:00
|
|
|
|
Work with virtual machines managed by libvirt
|
2011-05-30 22:24:23 +00:00
|
|
|
|
.INDENT 0.0
|
|
|
|
|
.TP
|
|
|
|
|
.B salt.modules.virt.create(vm_)
|
|
|
|
|
Start a defined domain
|
|
|
|
|
.sp
|
|
|
|
|
CLI Example:
|
|
|
|
|
salt \(aq*\(aq virt.create <vm name>
|
|
|
|
|
.UNINDENT
|
|
|
|
|
.INDENT 0.0
|
|
|
|
|
.TP
|
|
|
|
|
.B salt.modules.virt.create_xml_path(path)
|
|
|
|
|
Start a defined domain
|
|
|
|
|
.sp
|
|
|
|
|
CLI Example:
|
|
|
|
|
salt \(aq*\(aq virt.create_xml_path <path to xml file on the node>
|
|
|
|
|
.UNINDENT
|
|
|
|
|
.INDENT 0.0
|
|
|
|
|
.TP
|
|
|
|
|
.B salt.modules.virt.create_xml_str(xml)
|
|
|
|
|
Start a domain based on the xml passed to the function
|
|
|
|
|
.sp
|
|
|
|
|
CLI Example:
|
|
|
|
|
salt \(aq*\(aq virt.create_xml_str <xml in string format>
|
|
|
|
|
.UNINDENT
|
|
|
|
|
.INDENT 0.0
|
|
|
|
|
.TP
|
|
|
|
|
.B salt.modules.virt.destroy(vm_)
|
2011-07-09 23:13:08 +00:00
|
|
|
|
Hard power down the virtual machine, this is equivalent to pulling the
|
2011-05-30 22:24:23 +00:00
|
|
|
|
power
|
|
|
|
|
.sp
|
|
|
|
|
CLI Example:
|
|
|
|
|
salt \(aq*\(aq virt.destroy <vm name>
|
|
|
|
|
.UNINDENT
|
|
|
|
|
.INDENT 0.0
|
|
|
|
|
.TP
|
|
|
|
|
.B salt.modules.virt.freecpu()
|
|
|
|
|
Return an int representing the number of unallocated cpus on this
|
|
|
|
|
hypervisor
|
|
|
|
|
.sp
|
|
|
|
|
CLI Example:
|
|
|
|
|
salt \(aq*\(aq virt.freemem
|
|
|
|
|
.UNINDENT
|
|
|
|
|
.INDENT 0.0
|
|
|
|
|
.TP
|
|
|
|
|
.B salt.modules.virt.freemem()
|
|
|
|
|
Return an int representing the amount of memory that has not been given
|
|
|
|
|
to virtual machines on this node
|
|
|
|
|
.sp
|
|
|
|
|
CLI Example:
|
|
|
|
|
salt \(aq*\(aq virt.freemem
|
|
|
|
|
.UNINDENT
|
|
|
|
|
.INDENT 0.0
|
|
|
|
|
.TP
|
|
|
|
|
.B salt.modules.virt.full_info()
|
|
|
|
|
Return the node_info, vm_info and freemem
|
|
|
|
|
.sp
|
|
|
|
|
CLI Example:
|
|
|
|
|
salt \(aq*\(aq virt.full_info
|
|
|
|
|
.UNINDENT
|
|
|
|
|
.INDENT 0.0
|
|
|
|
|
.TP
|
|
|
|
|
.B salt.modules.virt.get_disks(vm_)
|
|
|
|
|
Return the disks of a named vm
|
2011-07-09 23:13:08 +00:00
|
|
|
|
.sp
|
|
|
|
|
CLI Example:
|
|
|
|
|
salt \(aq*\(aq virt.get_disks <vm name>
|
2011-05-30 22:24:23 +00:00
|
|
|
|
.UNINDENT
|
|
|
|
|
.INDENT 0.0
|
|
|
|
|
.TP
|
|
|
|
|
.B salt.modules.virt.get_graphics(vm_)
|
|
|
|
|
Returns the information on vnc for a given vm
|
2011-07-09 23:13:08 +00:00
|
|
|
|
.sp
|
|
|
|
|
CLI Example:
|
|
|
|
|
salt \(aq*\(aq virt.get_graphics <vm name>
|
2011-05-30 22:24:23 +00:00
|
|
|
|
.UNINDENT
|
|
|
|
|
.INDENT 0.0
|
|
|
|
|
.TP
|
|
|
|
|
.B salt.modules.virt.get_xml(vm_)
|
|
|
|
|
Returns the xml for a given vm
|
2011-07-09 23:13:08 +00:00
|
|
|
|
.sp
|
|
|
|
|
CLI Example:
|
|
|
|
|
salt \(aq*\(aq virt.get_xml <vm name>
|
2011-05-30 22:24:23 +00:00
|
|
|
|
.UNINDENT
|
|
|
|
|
.INDENT 0.0
|
|
|
|
|
.TP
|
|
|
|
|
.B salt.modules.virt.is_kvm_hyper()
|
|
|
|
|
Returns a bool whether or not this node is a hypervisor
|
2011-07-09 23:13:08 +00:00
|
|
|
|
.sp
|
|
|
|
|
CLI Example:
|
|
|
|
|
salt \(aq*\(aq virt.is_kvm_hyper
|
2011-05-30 22:24:23 +00:00
|
|
|
|
.UNINDENT
|
|
|
|
|
.INDENT 0.0
|
|
|
|
|
.TP
|
|
|
|
|
.B salt.modules.virt.list_vms()
|
|
|
|
|
Return a list of virtual machine names on the minion
|
|
|
|
|
.sp
|
|
|
|
|
CLI Example:
|
|
|
|
|
salt \(aq*\(aq virt.list_vms
|
|
|
|
|
.UNINDENT
|
|
|
|
|
.INDENT 0.0
|
|
|
|
|
.TP
|
2011-07-09 23:13:08 +00:00
|
|
|
|
.B salt.modules.virt.migrate(vm_, target)
|
|
|
|
|
Shared storage migration
|
|
|
|
|
.sp
|
|
|
|
|
CLI Example:
|
|
|
|
|
salt \(aq*\(aq virt.migrate <vm name> <target hypervisor>
|
|
|
|
|
.UNINDENT
|
|
|
|
|
.INDENT 0.0
|
|
|
|
|
.TP
|
|
|
|
|
.B salt.modules.virt.migrate_non_shared(vm_, target)
|
|
|
|
|
Attempt to execute non\-shared storage "all" migration
|
|
|
|
|
.sp
|
|
|
|
|
CLI Example:
|
|
|
|
|
salt \(aq*\(aq virt.migrate_non_shared <vm name> <target hypervisor>
|
|
|
|
|
.UNINDENT
|
|
|
|
|
.INDENT 0.0
|
|
|
|
|
.TP
|
|
|
|
|
.B salt.modules.virt.migrate_non_shared_inc(vm_, target)
|
|
|
|
|
Attempt to execute non\-shared storage "all" migration
|
|
|
|
|
.sp
|
|
|
|
|
CLI Example:
|
|
|
|
|
salt \(aq*\(aq virt.migrate_non_shared_inc <vm name> <target hypervisor>
|
|
|
|
|
.UNINDENT
|
|
|
|
|
.INDENT 0.0
|
|
|
|
|
.TP
|
2011-05-30 22:24:23 +00:00
|
|
|
|
.B salt.modules.virt.node_info()
|
|
|
|
|
Return a dict with information about this node
|
|
|
|
|
.sp
|
|
|
|
|
CLI Example:
|
|
|
|
|
salt \(aq*\(aq virt.node_info
|
|
|
|
|
.UNINDENT
|
|
|
|
|
.INDENT 0.0
|
|
|
|
|
.TP
|
|
|
|
|
.B salt.modules.virt.pause(vm_)
|
|
|
|
|
Pause the named vm
|
|
|
|
|
.sp
|
|
|
|
|
CLI Example:
|
|
|
|
|
salt \(aq*\(aq virt.pause <vm name>
|
|
|
|
|
.UNINDENT
|
|
|
|
|
.INDENT 0.0
|
|
|
|
|
.TP
|
|
|
|
|
.B salt.modules.virt.purge(vm_, dirs=False)
|
2011-07-09 23:13:08 +00:00
|
|
|
|
Recursively destroy and delete a virtual machine, pass True for dir\(aqs to
|
2011-05-30 22:24:23 +00:00
|
|
|
|
also delete the directories containing the virtual machine disk images \-
|
|
|
|
|
USE WITH EXTREAME CAUTION!
|
2011-07-09 23:13:08 +00:00
|
|
|
|
.sp
|
|
|
|
|
CLI Example:
|
|
|
|
|
salt \(aq*\(aq virt.purge <vm name>
|
2011-05-30 22:24:23 +00:00
|
|
|
|
.UNINDENT
|
|
|
|
|
.INDENT 0.0
|
|
|
|
|
.TP
|
|
|
|
|
.B salt.modules.virt.resume(vm_)
|
|
|
|
|
Resume the named vm
|
|
|
|
|
.sp
|
|
|
|
|
CLI Example:
|
|
|
|
|
salt \(aq*\(aq virt.resume <vm name>
|
|
|
|
|
.UNINDENT
|
|
|
|
|
.INDENT 0.0
|
|
|
|
|
.TP
|
2011-07-09 23:13:08 +00:00
|
|
|
|
.B salt.modules.virt.seed_non_shared_migrate(disks, force=False)
|
|
|
|
|
Non shared migration requires that the disks be present on the migration
|
|
|
|
|
destination, pass the disks information via this function, to the
|
|
|
|
|
migration destination before executing the migration.
|
|
|
|
|
.sp
|
|
|
|
|
CLI Example:
|
|
|
|
|
salt \(aq*\(aq virt.seed_non_shared_migrate <disks>
|
|
|
|
|
.UNINDENT
|
|
|
|
|
.INDENT 0.0
|
|
|
|
|
.TP
|
2011-05-30 22:24:23 +00:00
|
|
|
|
.B salt.modules.virt.shutdown(vm_)
|
|
|
|
|
Send a soft shutdown signal to the named vm
|
|
|
|
|
.sp
|
|
|
|
|
CLI Example:
|
|
|
|
|
salt \(aq*\(aq virt.shutdown <vm name>
|
|
|
|
|
.UNINDENT
|
|
|
|
|
.INDENT 0.0
|
|
|
|
|
.TP
|
|
|
|
|
.B salt.modules.virt.undefine(vm_)
|
|
|
|
|
Remove a defined vm, this does not purge the virtual machine image, and
|
|
|
|
|
this only works if the vm is powered down
|
|
|
|
|
.sp
|
|
|
|
|
CLI Example:
|
|
|
|
|
salt \(aq*\(aq virt.undefine <vm name>
|
|
|
|
|
.UNINDENT
|
|
|
|
|
.INDENT 0.0
|
|
|
|
|
.TP
|
|
|
|
|
.B salt.modules.virt.virt_type()
|
|
|
|
|
Returns the virtual machine type as a string
|
|
|
|
|
.sp
|
|
|
|
|
CLI Example:
|
|
|
|
|
salt \(aq*\(aq virt.virt_type
|
|
|
|
|
.UNINDENT
|
|
|
|
|
.INDENT 0.0
|
|
|
|
|
.TP
|
|
|
|
|
.B salt.modules.virt.vm_info()
|
|
|
|
|
Return detailed information about the vms on this hyper in a dict:
|
|
|
|
|
.INDENT 7.0
|
|
|
|
|
.TP
|
|
|
|
|
.B {\(aqcpu\(aq: <int>,
|
|
|
|
|
\(aqmaxMem\(aq: <int>,
|
|
|
|
|
\(aqmem\(aq: <int>,
|
|
|
|
|
\(aqstate\(aq: \(aq<state>\(aq,
|
|
|
|
|
\(aqcputime\(aq <int>}
|
|
|
|
|
.UNINDENT
|
|
|
|
|
.sp
|
|
|
|
|
CLI Example:
|
|
|
|
|
salt \(aq*\(aq virt.vm_info
|
|
|
|
|
.UNINDENT
|
|
|
|
|
.SS \fBsalt.modules.yum\fP
|
|
|
|
|
.sp
|
|
|
|
|
Support for YUM
|
|
|
|
|
.INDENT 0.0
|
|
|
|
|
.TP
|
2011-08-27 17:38:12 +00:00
|
|
|
|
.B salt.modules.yum.available_version(name)
|
|
|
|
|
The available version of the package in the repository
|
2011-05-30 22:24:23 +00:00
|
|
|
|
.sp
|
2011-08-27 17:38:12 +00:00
|
|
|
|
CLI Example:
|
|
|
|
|
salt \(aq*\(aq pkg.available_version <package name>
|
|
|
|
|
.UNINDENT
|
|
|
|
|
.INDENT 0.0
|
|
|
|
|
.TP
|
|
|
|
|
.B salt.modules.yum.install(pkg, refresh=False)
|
2011-05-30 22:24:23 +00:00
|
|
|
|
Install the passed package, add refresh=True to clean out the yum database
|
|
|
|
|
before executing
|
|
|
|
|
.sp
|
|
|
|
|
Return a dict containing the new package names and versions:
|
|
|
|
|
{\(aq<package>\(aq: {\(aqold\(aq: \(aq<old\-version>\(aq,
|
|
|
|
|
.INDENT 7.0
|
|
|
|
|
.INDENT 3.5
|
|
|
|
|
\(aqnew\(aq: \(aq<new\-version>\(aq]}
|
|
|
|
|
.UNINDENT
|
|
|
|
|
.UNINDENT
|
|
|
|
|
.sp
|
|
|
|
|
CLI Example:
|
2011-07-09 23:13:08 +00:00
|
|
|
|
salt \(aq*\(aq pkg.install <package name>
|
2011-05-30 22:24:23 +00:00
|
|
|
|
.UNINDENT
|
|
|
|
|
.INDENT 0.0
|
|
|
|
|
.TP
|
|
|
|
|
.B salt.modules.yum.list_pkgs()
|
|
|
|
|
List the packages currently installed in a dict:
|
|
|
|
|
{\(aq<package_name>\(aq: \(aq<version>\(aq}
|
|
|
|
|
.sp
|
|
|
|
|
CLI Example:
|
2011-07-09 23:13:08 +00:00
|
|
|
|
salt \(aq*\(aq pkg.list_pkgs
|
2011-05-30 22:24:23 +00:00
|
|
|
|
.UNINDENT
|
|
|
|
|
.INDENT 0.0
|
|
|
|
|
.TP
|
|
|
|
|
.B salt.modules.yum.purge(pkg)
|
|
|
|
|
Yum does not have a purge, this function calls remove
|
|
|
|
|
.sp
|
|
|
|
|
Return a list containing the removed packages:
|
|
|
|
|
.sp
|
|
|
|
|
CLI Example:
|
2011-07-09 23:13:08 +00:00
|
|
|
|
salt \(aq*\(aq pkg.purge <package name>
|
2011-05-30 22:24:23 +00:00
|
|
|
|
.UNINDENT
|
|
|
|
|
.INDENT 0.0
|
|
|
|
|
.TP
|
|
|
|
|
.B salt.modules.yum.refresh_db()
|
|
|
|
|
Since yum refreshes the database automatically, this runs a yum clean,
|
|
|
|
|
so that the next yum operation will have a clean database
|
|
|
|
|
.sp
|
|
|
|
|
CLI Example:
|
2011-07-09 23:13:08 +00:00
|
|
|
|
salt \(aq*\(aq pkg.refresh_db
|
2011-05-30 22:24:23 +00:00
|
|
|
|
.UNINDENT
|
|
|
|
|
.INDENT 0.0
|
|
|
|
|
.TP
|
|
|
|
|
.B salt.modules.yum.remove(pkg)
|
|
|
|
|
Remove a single package with yum remove
|
|
|
|
|
.sp
|
|
|
|
|
Return a list containing the removed packages:
|
|
|
|
|
.sp
|
|
|
|
|
CLI Example:
|
2011-07-09 23:13:08 +00:00
|
|
|
|
salt \(aq*\(aq pkg.remove <package name>
|
2011-05-30 22:24:23 +00:00
|
|
|
|
.UNINDENT
|
|
|
|
|
.INDENT 0.0
|
|
|
|
|
.TP
|
|
|
|
|
.B salt.modules.yum.upgrade()
|
|
|
|
|
Run a full system upgrade, a yum upgrade
|
|
|
|
|
.sp
|
|
|
|
|
Return a dict containing the new package names and versions:
|
|
|
|
|
{\(aq<package>\(aq: {\(aqold\(aq: \(aq<old\-version>\(aq,
|
|
|
|
|
.INDENT 7.0
|
|
|
|
|
.INDENT 3.5
|
|
|
|
|
\(aqnew\(aq: \(aq<new\-version>\(aq]}
|
|
|
|
|
.UNINDENT
|
|
|
|
|
.UNINDENT
|
|
|
|
|
.sp
|
|
|
|
|
CLI Example:
|
2011-07-09 23:13:08 +00:00
|
|
|
|
salt \(aq*\(aq pkg.upgrade
|
2011-05-30 22:24:23 +00:00
|
|
|
|
.UNINDENT
|
2011-08-27 17:38:12 +00:00
|
|
|
|
.INDENT 0.0
|
|
|
|
|
.TP
|
|
|
|
|
.B salt.modules.yum.version(name)
|
|
|
|
|
Returns a version if the package is installed, else returns an empty string
|
|
|
|
|
.sp
|
|
|
|
|
CLI Example:
|
|
|
|
|
salt \(aq*\(aq pkg.version <package name>
|
|
|
|
|
.UNINDENT
|
2011-07-09 23:13:08 +00:00
|
|
|
|
.IP "See also"
|
|
|
|
|
.sp
|
|
|
|
|
\fBFull list of builtin modules\fP
|
|
|
|
|
.sp
|
|
|
|
|
Salt ships with many modules that cover a wide variety of tasks.
|
|
|
|
|
.RE
|
2011-05-30 22:24:23 +00:00
|
|
|
|
.SS Easy Modules to write
|
|
|
|
|
.sp
|
|
|
|
|
Salt modules are amazingly simple to write, just write a regular Python module
|
|
|
|
|
or a regular Cython module and place it in the \fBsalt/modules\fP directory.
|
|
|
|
|
.sp
|
|
|
|
|
Since Salt modules are just Python/Cython modules there are no restraints as to
|
|
|
|
|
what you can put inside of a salt module, and if a Salt module has errors and
|
|
|
|
|
cannot import the Salt minion will continue to load without issue, the module
|
|
|
|
|
with errors will simply be omitted.
|
|
|
|
|
.sp
|
|
|
|
|
If adding a Cython module the file must be named \fB<modulename>.pyx\fP so that
|
|
|
|
|
the loader knows that the module needs to be imported as a Cython module. The
|
|
|
|
|
compilation of the Cython module is automatic and happens when the minion
|
|
|
|
|
starts, so only the \fB*.pyx\fP file is required.
|
2011-07-09 23:13:08 +00:00
|
|
|
|
.SS Cross Calling Modules
|
|
|
|
|
.sp
|
|
|
|
|
All of the salt modules are available to each other, and can be "cross called".
|
|
|
|
|
This means that when creating a module functions in modules which already exist
|
|
|
|
|
can be called.
|
|
|
|
|
.sp
|
|
|
|
|
The variable \fB__salt__\fP is packed into the modules after they are loaded into
|
|
|
|
|
the salt minion. This variable is a python dictionary of all of the salt
|
|
|
|
|
functions, laid out in the same way that they are made available to the salt
|
|
|
|
|
command.
|
|
|
|
|
.sp
|
|
|
|
|
Salt modules can be cross called by accessing the value in the \fB__salt__\fP
|
|
|
|
|
dict:
|
|
|
|
|
.sp
|
|
|
|
|
.nf
|
|
|
|
|
.ft C
|
|
|
|
|
def foo(bar):
|
|
|
|
|
return __salt__[\(aqcmd.run\(aq](bar)
|
|
|
|
|
.ft P
|
|
|
|
|
.fi
|
|
|
|
|
.sp
|
|
|
|
|
This code will call the Salt cmd module\(aqs run function and pass the argument
|
|
|
|
|
\fBbar\fP.
|
2011-05-30 22:24:23 +00:00
|
|
|
|
.SS Preloaded Modules Data
|
|
|
|
|
.sp
|
|
|
|
|
When interacting with modules often it is nice to be able to read information
|
|
|
|
|
dynamically about the minion, or load in configuration parameters for a module.
|
|
|
|
|
Salt allows for different types of data to be loaded into the modules by the
|
|
|
|
|
minion, as of this writing Salt loads information gathered from the Salt Grains
|
|
|
|
|
system and from the minion configuration file.
|
|
|
|
|
.SS Grains Data
|
|
|
|
|
.sp
|
|
|
|
|
The Salt minion detects information about the system when started. This allows
|
|
|
|
|
for modules to be written dynamically with respect to the underlying hardware
|
|
|
|
|
and OS. This information is referred to as Salt Grains, or "grains of salt".
|
|
|
|
|
The Grains system was introduced to replace Facter, since relying on a Ruby
|
|
|
|
|
application from a Python application was both slow and inefficient. Grains
|
|
|
|
|
support replaces Facter in all releases after 0.8
|
|
|
|
|
.sp
|
|
|
|
|
The values detected by the Salt Grains on the minion are available in a dict by
|
|
|
|
|
the name of \fB__grains__\fP and can be accessed from within callable objects in
|
|
|
|
|
the Python modules.
|
|
|
|
|
.sp
|
|
|
|
|
To see the contents of the grains dict for a given system in your deployment
|
|
|
|
|
run the \fBgrains.items()\fP function:
|
|
|
|
|
.sp
|
|
|
|
|
.nf
|
|
|
|
|
.ft C
|
|
|
|
|
salt \(aqhostname\(aq grains.items
|
|
|
|
|
.ft P
|
|
|
|
|
.fi
|
|
|
|
|
.sp
|
|
|
|
|
To use the \fB__grains__\fP dict simply call it as a Python dict from within your
|
|
|
|
|
code, an excellent example is available in the Grains module:
|
|
|
|
|
\fBsalt.modules.grains\fP.
|
|
|
|
|
.SS Module Configuration
|
|
|
|
|
.sp
|
|
|
|
|
Since parameters for configuring a module may be desired, Salt allows for
|
|
|
|
|
configuration information stored in the main minion config file to be passed to
|
|
|
|
|
the modules.
|
|
|
|
|
.sp
|
|
|
|
|
Since the minion configuration file is a yaml document, arbitrary configuration
|
|
|
|
|
data can be passed in the minion config that is read by the modules. It is
|
|
|
|
|
\fBstrongly\fP recommended that the values passed in the configuration file match
|
|
|
|
|
the module. This means that a value intended for the \fBtest\fP module should be
|
|
|
|
|
named \fBtest.<value>\fP.
|
|
|
|
|
.sp
|
|
|
|
|
Configuration also requires that default configuration parameters need to be
|
|
|
|
|
loaded as well. This can be done simply by adding the \fB__opts__\fP dict to the
|
|
|
|
|
top level of the module.
|
|
|
|
|
.sp
|
|
|
|
|
The test module contains usage of the module configuration, and the default
|
|
|
|
|
configuration file for the minion contains the information and format used to
|
|
|
|
|
pass data to the modules. \fBsalt.modules.test\fP, \fBconf/minion\fP.
|
2011-07-09 23:13:08 +00:00
|
|
|
|
.SS Printout Configuration
|
|
|
|
|
.sp
|
|
|
|
|
Since module functions can return different data, and the way the data is
|
|
|
|
|
printed can greatly change the presentation, Salt has a printout
|
|
|
|
|
configuration.
|
|
|
|
|
.sp
|
|
|
|
|
When writing a module the \fB__outputter__\fP dict can be declared in the module.
|
|
|
|
|
The \fB__outputter__\fP dict contains a mapping of function name to Salt
|
|
|
|
|
Outputter.
|
|
|
|
|
.sp
|
|
|
|
|
.nf
|
|
|
|
|
.ft C
|
2011-08-27 17:38:12 +00:00
|
|
|
|
__outputter__ = {
|
2011-07-09 23:13:08 +00:00
|
|
|
|
\(aqrun\(aq: \(aqtxt\(aq
|
|
|
|
|
}
|
|
|
|
|
.ft P
|
|
|
|
|
.fi
|
|
|
|
|
.sp
|
|
|
|
|
This will ensure that the text outputter is used.
|
|
|
|
|
.SS Virtual Modules
|
|
|
|
|
.sp
|
|
|
|
|
Sometimes a module should be presented in a generic way. A good example of this
|
|
|
|
|
can be found in the package manager modules. The package manager changes from
|
|
|
|
|
one operating system to another, but the salt module that interfaces with the
|
|
|
|
|
package manager can be presented in a generic way.
|
|
|
|
|
.sp
|
|
|
|
|
The salt modules for package managers all contain a \fB__virtual__\fP function
|
|
|
|
|
which is called to define what systems the module should be loaded on.
|
|
|
|
|
.sp
|
|
|
|
|
The \fB__virtual__\fP function is used to return either a string or False. If
|
|
|
|
|
False is returned then the module is not loaded, if a string is returned then
|
|
|
|
|
the module is loaded with the name of the string.
|
|
|
|
|
.sp
|
|
|
|
|
This means that the package manager modules can be presented as the pkg module
|
|
|
|
|
regardless of what the actual module is named.
|
|
|
|
|
.sp
|
|
|
|
|
The package manager modules are the best example of using the \fB__virtual__\fP
|
|
|
|
|
function:
|
|
|
|
|
\fI\%https://github.com/thatch45/salt/blob/master/salt/modules/pacman.py\fP
|
|
|
|
|
\fI\%https://github.com/thatch45/salt/blob/master/salt/modules/yum.py\fP
|
|
|
|
|
\fI\%https://github.com/thatch45/salt/blob/master/salt/modules/apt.py\fP
|
2011-05-30 22:24:23 +00:00
|
|
|
|
.SS Documentation
|
|
|
|
|
.sp
|
|
|
|
|
Salt modules are self documenting, the \fBsys.doc()\fP function will return the
|
|
|
|
|
documentation for all available Facter modules:
|
|
|
|
|
.sp
|
|
|
|
|
.nf
|
|
|
|
|
.ft C
|
|
|
|
|
salt \(aq*\(aq sys.doc
|
|
|
|
|
.ft P
|
|
|
|
|
.fi
|
|
|
|
|
.sp
|
|
|
|
|
This function simple prints out the docstrings found in the modules, when
|
|
|
|
|
writing salt modules, please follow the formating conventions for docstrings as
|
|
|
|
|
they appear in the other modules.
|
2011-07-09 23:13:08 +00:00
|
|
|
|
.SS Adding Documentation to Salt Modules
|
|
|
|
|
.sp
|
|
|
|
|
Since life is much better with documentation, it is strongly suggested that
|
|
|
|
|
all Salt modules have documentation added. Any Salt modules submitted for
|
|
|
|
|
inclusion in the main distribution of Salt will be required to have
|
|
|
|
|
documentation.
|
|
|
|
|
.sp
|
|
|
|
|
Documenting Salt modules is easy! Just add a python docstring to the function.
|
|
|
|
|
.sp
|
|
|
|
|
.nf
|
|
|
|
|
.ft C
|
|
|
|
|
def spam(eggs):
|
|
|
|
|
\(aq\(aq\(aq
|
|
|
|
|
A function to make some spam with eggs!
|
|
|
|
|
|
|
|
|
|
CLI Example:
|
|
|
|
|
salt \(aq*\(aq test.spam eggs
|
|
|
|
|
\(aq\(aq\(aq
|
|
|
|
|
return eggs
|
|
|
|
|
.ft P
|
|
|
|
|
.fi
|
|
|
|
|
.sp
|
|
|
|
|
Now when the sys.doc call is executed the docstring will be cleanly returned
|
|
|
|
|
to the calling terminal.
|
2011-05-30 22:24:23 +00:00
|
|
|
|
.SS How Functions are Read
|
|
|
|
|
.sp
|
|
|
|
|
In Salt Python callable objects contained within a module are made available to
|
|
|
|
|
the Salt minion for use. The only exception to this rule is a callable object
|
|
|
|
|
with a name starting with an underscore \fB_\fP.
|
|
|
|
|
.SS Objects Loaded Into the Salt Minion
|
|
|
|
|
.sp
|
|
|
|
|
.nf
|
|
|
|
|
.ft C
|
|
|
|
|
def foo(bar):
|
|
|
|
|
return bar
|
2011-04-02 04:48:23 +00:00
|
|
|
|
|
2011-05-30 22:24:23 +00:00
|
|
|
|
class baz:
|
|
|
|
|
def __init__(self, quo):
|
|
|
|
|
return quo
|
|
|
|
|
.ft P
|
|
|
|
|
.fi
|
|
|
|
|
.SS Objects NOT Loaded into the Salt Minion
|
|
|
|
|
.sp
|
|
|
|
|
.nf
|
|
|
|
|
.ft C
|
|
|
|
|
def _foobar(baz): # Preceded with an _
|
|
|
|
|
return baz
|
2011-04-02 04:48:23 +00:00
|
|
|
|
|
2011-05-30 22:24:23 +00:00
|
|
|
|
cheese = {} # Not a callable python object
|
|
|
|
|
.ft P
|
|
|
|
|
.fi
|
2011-07-09 23:13:08 +00:00
|
|
|
|
.SS Examples of Salt Modules
|
|
|
|
|
.sp
|
|
|
|
|
The existing Salt modules should be fairly easy to read and understand, the
|
|
|
|
|
goal of the main distribution\(aqs Salt modules is not only to build a set of
|
|
|
|
|
functions for salt, but to stand as examples for building out more Salt
|
|
|
|
|
modules.
|
|
|
|
|
.sp
|
|
|
|
|
The existing modules can be found here:
|
|
|
|
|
\fI\%https://github.com/thatch45/salt/tree/master/salt/modules\fP
|
2011-05-30 22:24:23 +00:00
|
|
|
|
.sp
|
2011-07-09 23:13:08 +00:00
|
|
|
|
The most simple module is the test module, it contains the simplest salt
|
|
|
|
|
function, test.ping:
|
|
|
|
|
.sp
|
|
|
|
|
.nf
|
|
|
|
|
.ft C
|
|
|
|
|
def ping():
|
|
|
|
|
\(aq\(aq\(aq
|
|
|
|
|
Just used to make sure the minion is up and responding
|
|
|
|
|
Return True
|
|
|
|
|
|
|
|
|
|
CLI Example:
|
|
|
|
|
salt \(aq*\(aq test.ping
|
|
|
|
|
\(aq\(aq\(aq
|
|
|
|
|
return True
|
|
|
|
|
.ft P
|
|
|
|
|
.fi
|
2011-08-27 17:38:12 +00:00
|
|
|
|
.SS Grains
|
2011-07-09 23:13:08 +00:00
|
|
|
|
.sp
|
|
|
|
|
Salt comes with an interface to derive information about the underlying system.
|
|
|
|
|
This is called the grains interface, because it presents salt with grains of
|
|
|
|
|
information.
|
|
|
|
|
.sp
|
|
|
|
|
The grains interface is made available to Salt modules and components so that
|
|
|
|
|
the right salt minion commands are automatically available on the right
|
|
|
|
|
systems.
|
|
|
|
|
.sp
|
|
|
|
|
It is important to remember that grains are bits of information loaded when
|
|
|
|
|
the salt minion starts, so this information is static. This means that the
|
|
|
|
|
information in grains is unchanging, therefore the nature of the data is
|
|
|
|
|
static. So grains information are things like the running kernel, or the
|
|
|
|
|
operating system.
|
|
|
|
|
.SS Writing Grains
|
|
|
|
|
.sp
|
|
|
|
|
Grains are easy to write, the grains interface is derived my executing all of
|
|
|
|
|
the "public" functions found in the modules located in the grains package.
|
|
|
|
|
The functions in the modules of the grains must return a python dict, the keys
|
|
|
|
|
in the dict are the names of the grains, the values are the values.
|
|
|
|
|
.sp
|
|
|
|
|
This means that the actual grains interface is simply a python dict.
|
|
|
|
|
.sp
|
|
|
|
|
Before adding a grain to salt, consider what the grain is and remember that
|
|
|
|
|
grains need to be static data.
|
|
|
|
|
.SS Examples of Grains
|
|
|
|
|
.sp
|
|
|
|
|
The core module in the grains package is where the main grains are loaded by
|
|
|
|
|
the salt minion and the principal example of how to write grains:
|
|
|
|
|
.sp
|
|
|
|
|
\fI\%https://github.com/thatch45/salt/blob/master/salt/grains/core.py\fP
|
2011-08-27 17:38:12 +00:00
|
|
|
|
.SS Returners
|
2011-05-30 22:24:23 +00:00
|
|
|
|
.SS Full list of builtin returners
|
2011-07-09 23:13:08 +00:00
|
|
|
|
.SS Contents
|
|
|
|
|
.INDENT 0.0
|
|
|
|
|
.IP \(bu 2
|
|
|
|
|
\fI\%salt.returners.local\fP
|
|
|
|
|
.IP \(bu 2
|
|
|
|
|
\fI\%salt.returners.redis\fP
|
|
|
|
|
.UNINDENT
|
2011-05-30 22:24:23 +00:00
|
|
|
|
.SS \fBsalt.returners.local\fP
|
2011-07-09 23:13:08 +00:00
|
|
|
|
.sp
|
|
|
|
|
The local returner is used to test the returner interface, it just prints the
|
|
|
|
|
return data to the console to verify that it is being passed properly
|
|
|
|
|
.INDENT 0.0
|
|
|
|
|
.TP
|
|
|
|
|
.B salt.returners.local.returner(ret)
|
|
|
|
|
Print the return data to the terminal to verify functionality
|
|
|
|
|
.UNINDENT
|
2011-05-30 22:24:23 +00:00
|
|
|
|
.SS \fBsalt.returners.redis\fP
|
|
|
|
|
.sp
|
2011-07-09 23:13:08 +00:00
|
|
|
|
By default the return values of the commands sent to the salt minions are
|
|
|
|
|
returned to the salt\-master. But since the commands executed on the salt
|
|
|
|
|
minions are detatched from the call on the salt master, there is no need for
|
|
|
|
|
the minion to return the data to the salt master.
|
|
|
|
|
.sp
|
|
|
|
|
This is where the returner interface comes in. Returners are modules called
|
|
|
|
|
in place of returning the data to the salt master.
|
|
|
|
|
.sp
|
|
|
|
|
The returner interface allows the return data to be sent to any system that
|
2011-07-27 23:46:53 +00:00
|
|
|
|
can receive data. This means that return data can be sent to a Redis server,
|
2011-07-09 23:13:08 +00:00
|
|
|
|
a MongoDB server, a MySQL server, or any system!
|
|
|
|
|
.IP "See also"
|
2011-05-30 22:24:23 +00:00
|
|
|
|
.sp
|
2011-07-09 23:13:08 +00:00
|
|
|
|
\fBFull list of builtin returners\fP
|
|
|
|
|
.RE
|
|
|
|
|
.SS Writing a Returner
|
|
|
|
|
.sp
|
|
|
|
|
A returner is a module which contains a returner function, the returner
|
|
|
|
|
function must accept a single argument. this argument is the return data from
|
|
|
|
|
the called minion function. So if the minion function \fBtest.ping\fP is called
|
|
|
|
|
the value of the argument will be \fBTrue\fP.
|
|
|
|
|
.sp
|
|
|
|
|
A simple returner is implimented here:
|
|
|
|
|
.sp
|
|
|
|
|
.nf
|
|
|
|
|
.ft C
|
|
|
|
|
import redis
|
|
|
|
|
import json
|
|
|
|
|
|
|
|
|
|
def returner(ret):
|
|
|
|
|
\(aq\(aq\(aq
|
|
|
|
|
Return information to a redis server
|
|
|
|
|
\(aq\(aq\(aq
|
|
|
|
|
# Get a redis commection
|
|
|
|
|
serv = redis.Redis(
|
|
|
|
|
host=\(aqredis\-serv.example.com\(aq,
|
|
|
|
|
port=6379,
|
|
|
|
|
db=\(aq0\(aq)
|
|
|
|
|
serv.sadd("%(id)s:jobs" % ret, ret[\(aqjid\(aq])
|
|
|
|
|
serv.set("%(jid)s:%(id)s" % ret, json.dumps(ret[\(aqreturn\(aq]))
|
|
|
|
|
serv.sadd(\(aqjobs\(aq, ret[\(aqjid\(aq])
|
|
|
|
|
serv.sadd(ret[\(aqjid\(aq], ret[\(aqid\(aq])
|
|
|
|
|
.ft P
|
|
|
|
|
.fi
|
|
|
|
|
.sp
|
|
|
|
|
This simple example of a returner set to send the data to a redis server
|
|
|
|
|
serializes the data as json and sets it in redis.
|
|
|
|
|
.SS Examples
|
|
|
|
|
.sp
|
|
|
|
|
The collection of builtin salt returners can be found here:
|
|
|
|
|
\fI\%https://github.com/thatch45/salt/tree/master/salt/returners\fP
|
2011-08-27 17:38:12 +00:00
|
|
|
|
.SS State Enforcement
|
2011-07-09 23:13:08 +00:00
|
|
|
|
.sp
|
|
|
|
|
Salt offers an optional interface to manage the configuration or "state" of the
|
|
|
|
|
salt minions. This interface is a fully capable mechanism used to enforce the
|
|
|
|
|
state of systems from a central manager.
|
|
|
|
|
.sp
|
|
|
|
|
The Salt state system is made to be accurate, simple, and fast. And like the
|
|
|
|
|
rest of the Salt system, Salt states are highly modular.
|
|
|
|
|
.SS Understanding the Salt State System Components
|
|
|
|
|
.sp
|
|
|
|
|
The Salt state system is comprised of a number of components, as a user, an
|
|
|
|
|
understanding of the sls and renderer systems are needed. But as a developer,
|
|
|
|
|
an understanding of salt states, as well as understanding salt states and how
|
|
|
|
|
to write the states used by salt.
|
|
|
|
|
.SS Salt SLS System
|
|
|
|
|
.sp
|
|
|
|
|
The primary system used by the Salt state system is the SLS system. SLS stands
|
|
|
|
|
for SaLt State.
|
|
|
|
|
.sp
|
|
|
|
|
The Salt States are files which contain the information about how to configure
|
|
|
|
|
salt minions. The states are laid out in a directory tree and can be written in
|
|
|
|
|
many different formats.
|
|
|
|
|
.sp
|
|
|
|
|
The contents of the files and they way they are laid out is intended to be as
|
|
|
|
|
simple as possible while allowing for maximum flexibility. The files are laid
|
|
|
|
|
out in states and contains information about how the minion needs to be
|
|
|
|
|
configured.
|
|
|
|
|
.SS SLS File Layout
|
|
|
|
|
.sp
|
|
|
|
|
SLS files are laid out in the Salt file server. A simple layout can look like
|
|
|
|
|
this:
|
|
|
|
|
.sp
|
|
|
|
|
.nf
|
|
|
|
|
.ft C
|
|
|
|
|
top.sls
|
|
|
|
|
ssh.sls
|
|
|
|
|
sshd_config
|
|
|
|
|
users/init.sls
|
|
|
|
|
users/admin.sls
|
|
|
|
|
salt/init.sls
|
|
|
|
|
salt/master.sls
|
|
|
|
|
.ft P
|
|
|
|
|
.fi
|
|
|
|
|
.sp
|
|
|
|
|
This example shows the core concepts of file layout. The top file is a key
|
|
|
|
|
component and is used with salt matchers to match SLS states with minions.
|
|
|
|
|
The \fB.sls\fP files are states. The rest of the files are seen by the salt
|
|
|
|
|
master as just files that can be downloaded.
|
|
|
|
|
.sp
|
|
|
|
|
The states are translated into dot notation, so the \fBssh.sls\fP file is
|
|
|
|
|
seen as the ssh state, the \fBusers/admin.sls\fP file is seen as the
|
|
|
|
|
users.admin states.
|
|
|
|
|
.sp
|
|
|
|
|
The init.sls files are translated to be the state name of the parent
|
|
|
|
|
directory, so the \fBsalt/init.sls\fP file translates to the salt state.
|
|
|
|
|
.sp
|
|
|
|
|
The plain files are visible to the minions, as well as the state files, in
|
|
|
|
|
salt, everything is a file, there is not "magic translation" of files and file
|
|
|
|
|
types. This means that a state file can be distributed to minions just like a
|
|
|
|
|
plain text or binary file.
|
|
|
|
|
.SS SLS Files
|
|
|
|
|
.sp
|
|
|
|
|
The Salt state files are simple sets of data. Since the SLS files are just data
|
|
|
|
|
they can be represented in a number of different ways. The default format is
|
|
|
|
|
yaml generated from a jinja template. This allows for the states files to have
|
|
|
|
|
all the language constructs of Python, and the simplicity of yaml. State files
|
|
|
|
|
can then be complicated jinja templates the translate down to yaml, or just
|
|
|
|
|
plain and simple yaml files!
|
|
|
|
|
.sp
|
|
|
|
|
The State files are constructed data structures in a simple format. The format
|
|
|
|
|
allows for many real activates to be expressed in very little text, while
|
|
|
|
|
maintaining the utmost in readability and usability.
|
|
|
|
|
.sp
|
|
|
|
|
Here is an example of a Salt State:
|
|
|
|
|
.sp
|
|
|
|
|
.nf
|
|
|
|
|
.ft C
|
|
|
|
|
vim:
|
|
|
|
|
pkg:
|
|
|
|
|
\- installed
|
|
|
|
|
|
|
|
|
|
salt:
|
|
|
|
|
pkg:
|
|
|
|
|
\- latest
|
|
|
|
|
service:
|
|
|
|
|
\- running
|
|
|
|
|
\- require:
|
|
|
|
|
\- file: /etc/salt/minion
|
|
|
|
|
\- pkg: salt
|
|
|
|
|
\- names:
|
|
|
|
|
\- salt\-master
|
|
|
|
|
\- salt\-minion
|
|
|
|
|
\- watch:
|
|
|
|
|
\- file: /etc/salt/minion
|
|
|
|
|
|
|
|
|
|
/etc/salt/minion:
|
|
|
|
|
file:
|
|
|
|
|
\- managed
|
|
|
|
|
\- source: salt://salt/minion
|
|
|
|
|
\- user: root
|
|
|
|
|
\- group: root
|
|
|
|
|
\- mode: 644
|
|
|
|
|
\- require:
|
|
|
|
|
\- pkg: salt
|
|
|
|
|
.ft P
|
|
|
|
|
.fi
|
|
|
|
|
.sp
|
|
|
|
|
This short stanza will ensure that vim is installed, salt is installed and up
|
|
|
|
|
to date, the salt\-master and salt\-minion daemons are running and the Salt
|
|
|
|
|
minion configuration file is in place. It will also ensure everything is
|
|
|
|
|
deployed in the right order and that the Salt services are restarted when the
|
|
|
|
|
watched file updated.
|
|
|
|
|
.SS The Top File
|
|
|
|
|
.sp
|
|
|
|
|
The top file is the mapping for the state system. The top file specifies which
|
|
|
|
|
minions should have which modules applied and which environments they should
|
|
|
|
|
draw the states from.
|
|
|
|
|
.sp
|
|
|
|
|
The top file works by specifying the environment, containing matchers with
|
|
|
|
|
lists of Salt states sent to the matching minions:
|
|
|
|
|
.sp
|
|
|
|
|
.nf
|
|
|
|
|
.ft C
|
|
|
|
|
base:
|
|
|
|
|
\(aq*\(aq:
|
|
|
|
|
\- salt
|
|
|
|
|
\- users
|
|
|
|
|
\- users.admin
|
|
|
|
|
\(aqsaltmaster.*\(aq:
|
|
|
|
|
\- match: pcre
|
|
|
|
|
\- salt.master
|
|
|
|
|
.ft P
|
|
|
|
|
.fi
|
|
|
|
|
.sp
|
|
|
|
|
This simple example uses the base environment, which is built into the default
|
|
|
|
|
salt setup, and then all minions will have the modules salt, users and
|
|
|
|
|
users.admin since \(aq*\(aq will match all minions. Then the regular expression
|
|
|
|
|
matcher will match all minions\(aq with an id matching saltmaster.* and add the
|
|
|
|
|
salt.master state.
|
|
|
|
|
.SS Renderer System
|
|
|
|
|
.sp
|
|
|
|
|
The Renderer system is a key component to the state system. SLS files are
|
|
|
|
|
representations of Salt "high data" structures. All Salt cares about when
|
|
|
|
|
reading an sls file is the data structure that is produced from file.
|
|
|
|
|
.sp
|
|
|
|
|
This allows Salt states to be represented by multiple types of files. The
|
|
|
|
|
Renderer system can be used to allow different formats to be used for sls
|
|
|
|
|
files.
|
|
|
|
|
.sp
|
|
|
|
|
The available renderers can be found in the renderers directory in the Salt
|
|
|
|
|
source code:
|
|
|
|
|
.sp
|
|
|
|
|
\fI\%https://github.com/thatch45/salt/tree/master/salt/renderers\fP
|
|
|
|
|
.sp
|
|
|
|
|
By default sls files are rendered using jinja as a templating engine, and yaml
|
|
|
|
|
as the serialization format. Since the rendering system can be extended simply
|
|
|
|
|
by adding a new renderer to the renderers directory, it is possible that any
|
|
|
|
|
structured file could be used to represent the SLS files.
|
|
|
|
|
.sp
|
|
|
|
|
In the future xml and raw python will be added, as well as many other formats.
|
2011-08-27 17:38:12 +00:00
|
|
|
|
.SS Salt Runners
|
2011-07-09 23:13:08 +00:00
|
|
|
|
.sp
|
|
|
|
|
Salt runners are convenience applications executed with the salt\-run command.
|
|
|
|
|
.sp
|
|
|
|
|
A Salt runner can be a simple client call, or a complex application.
|
|
|
|
|
.sp
|
|
|
|
|
The use for a salt running is to build a frontend hook for running sets of
|
|
|
|
|
commands via salt of creating special formatted output.
|
|
|
|
|
.SS Writing Salt Runners
|
|
|
|
|
.sp
|
|
|
|
|
Salt runners can be easily written, the work in a similar way to Salt modules
|
|
|
|
|
except they run on the server side.
|
|
|
|
|
.sp
|
|
|
|
|
A runner is a python module that contains functions, each public function is
|
|
|
|
|
a runner that can be executed via the salt\-run command.
|
|
|
|
|
.sp
|
|
|
|
|
If a python module named test.py is created in the runners directory and
|
|
|
|
|
contains a function called \fBfoo\fP then the function could be called with:
|
|
|
|
|
.sp
|
|
|
|
|
.nf
|
|
|
|
|
.ft C
|
|
|
|
|
# salt \(aq*\(aq test.foo
|
|
|
|
|
.ft P
|
|
|
|
|
.fi
|
|
|
|
|
.SS Examples
|
|
|
|
|
.sp
|
|
|
|
|
The best examples of runners can be found in the Salt source:
|
|
|
|
|
.sp
|
|
|
|
|
\fI\%https://github.com/thatch45/salt/blob/master/salt/runners\fP
|
|
|
|
|
.sp
|
|
|
|
|
A simple runner that returns a well formated list of the minons that are
|
|
|
|
|
responding to salt calls would look like this:
|
|
|
|
|
.sp
|
|
|
|
|
.nf
|
|
|
|
|
.ft C
|
|
|
|
|
# Import salt modules
|
|
|
|
|
import salt.client
|
|
|
|
|
|
|
|
|
|
def up():
|
|
|
|
|
\(aq\(aq\(aq
|
|
|
|
|
Print a list of all of the minions that are up
|
|
|
|
|
\(aq\(aq\(aq
|
|
|
|
|
client = salt.client.LocalClient(__opts__[\(aqconfig\(aq])
|
|
|
|
|
minions = client.cmd(\(aq*\(aq, \(aqtest.ping\(aq, timeout=1)
|
|
|
|
|
for minion in sorted(minions):
|
|
|
|
|
print minion
|
|
|
|
|
.ft P
|
|
|
|
|
.fi
|
2011-08-27 17:38:12 +00:00
|
|
|
|
.SS Renderers
|
2011-07-09 23:13:08 +00:00
|
|
|
|
.sp
|
|
|
|
|
The Salt state system operates by gathering information from simple data
|
|
|
|
|
structures. The state system was designed in this way to make interacting with
|
|
|
|
|
it generic and simple. This also means that state files (sls files) can be one
|
|
|
|
|
of many formats.
|
|
|
|
|
.sp
|
|
|
|
|
By default sls files are rendered as jinja templates and then parsed as yaml
|
|
|
|
|
documents. But since the only thing the state system cares about is raw data,
|
|
|
|
|
the sls files can be any structured format that can be dreamed up.
|
|
|
|
|
.sp
|
|
|
|
|
Currently there is support for \fBjinja + yaml\fP, \fBmako + yaml\fP,
|
|
|
|
|
\fBjinja + json\fP and \fBmako + json\fP. But renderers can be written to support
|
|
|
|
|
anything. This means that the Salt states could be managed by xml files, html
|
|
|
|
|
files, puppet files, or any format that can be translated into the data
|
|
|
|
|
structure used by the state system.
|
|
|
|
|
.SS Writing Renderers
|
|
|
|
|
.sp
|
|
|
|
|
Writing a renderer is easy, all that is required is that a python module
|
|
|
|
|
is placed in the rendered directory and that the module implements the
|
|
|
|
|
render function. The render function will be passed the path of the sls file.
|
|
|
|
|
In the render function, parse the passed file and return the data structure
|
|
|
|
|
derived from the file.
|
|
|
|
|
.SS Examples
|
2011-05-30 22:24:23 +00:00
|
|
|
|
.sp
|
2011-07-09 23:13:08 +00:00
|
|
|
|
The best place to find examples of renderers is in the Salt source code. The
|
|
|
|
|
renderers included with Salt can be found here:
|
|
|
|
|
.sp
|
|
|
|
|
\fI\%https://github.com/thatch45/salt/blob/master/salt/renderers\fP
|
|
|
|
|
.sp
|
|
|
|
|
Here is a simple jinja + yaml example:
|
|
|
|
|
.sp
|
|
|
|
|
.nf
|
|
|
|
|
.ft C
|
|
|
|
|
# Import python libs
|
|
|
|
|
import os
|
|
|
|
|
|
|
|
|
|
# Import Third Party libs
|
|
|
|
|
import yaml
|
|
|
|
|
from jinja2 import Template
|
|
|
|
|
|
|
|
|
|
def render(template):
|
|
|
|
|
\(aq\(aq\(aq
|
|
|
|
|
Render the data passing the functions and grains into the rendering system
|
|
|
|
|
\(aq\(aq\(aq
|
|
|
|
|
if not os.path.isfile(template):
|
|
|
|
|
return {}
|
|
|
|
|
passthrough = {}
|
|
|
|
|
passthrough.update(__salt__)
|
|
|
|
|
passthrough.update(__grains__)
|
|
|
|
|
template = Template(open(template, \(aqr\(aq).read())
|
|
|
|
|
yaml_data = template.render(**passthrough)
|
|
|
|
|
return yaml.load(yaml_data)
|
|
|
|
|
.ft P
|
|
|
|
|
.fi
|
2011-08-27 17:38:12 +00:00
|
|
|
|
.SS Python client API
|
2011-07-09 23:13:08 +00:00
|
|
|
|
.sp
|
|
|
|
|
Salt is written to be completely API centric, Salt minions and master can be
|
|
|
|
|
built directly into third party applications as a communication layer. The Salt
|
|
|
|
|
client API is very straightforward.
|
|
|
|
|
.SS Using the LocalClient API
|
|
|
|
|
.sp
|
|
|
|
|
Sending information through the client is simple:
|
|
|
|
|
.sp
|
|
|
|
|
.nf
|
|
|
|
|
.ft C
|
|
|
|
|
# Import the salt client library
|
|
|
|
|
import salt.client
|
|
|
|
|
# create a local client object
|
|
|
|
|
client = salt.client.LocalClient()
|
|
|
|
|
# make calls with the cmd method
|
|
|
|
|
ret = client.cmd(\(aq*\(aq, \(aqcmd.run\(aq, [\(aqls \-l\(aq])
|
|
|
|
|
.ft P
|
|
|
|
|
.fi
|
|
|
|
|
.sp
|
|
|
|
|
The cmd call is the only one needed for the local client, the arguments are as
|
|
|
|
|
follows:
|
|
|
|
|
.INDENT 0.0
|
|
|
|
|
.TP
|
|
|
|
|
.B LocalClient.cmd(tgt, fun, arg=[], timeout=5, expr_form=\(aqglob\(aq)
|
|
|
|
|
.UNINDENT
|
|
|
|
|
.sp
|
|
|
|
|
The LocalClient object only works running as root on the salt\-master, it is the
|
|
|
|
|
same interface used by the salt command line tool. The arguments are as
|
|
|
|
|
follows.
|
|
|
|
|
.INDENT 0.0
|
|
|
|
|
.TP
|
|
|
|
|
.B tgt
|
|
|
|
|
The tgt option is the target specification, by default a target is passed
|
|
|
|
|
in as a bash shell glob. The expr_form option allows the tgt to be passed
|
|
|
|
|
as either a pcre regular expression or as a python list.
|
|
|
|
|
.UNINDENT
|
|
|
|
|
.INDENT 0.0
|
|
|
|
|
.TP
|
|
|
|
|
.B fun
|
|
|
|
|
The name of the function to call on the specified minions. The
|
|
|
|
|
documentation for these functions can be seen by running on the
|
|
|
|
|
salt\-master: salt \(aq*\(aq sys.doc
|
|
|
|
|
.UNINDENT
|
|
|
|
|
.INDENT 0.0
|
|
|
|
|
.TP
|
|
|
|
|
.B arg
|
|
|
|
|
The optional arg parameter is used to pass a list of options on to the
|
|
|
|
|
remote function
|
|
|
|
|
.UNINDENT
|
|
|
|
|
.INDENT 0.0
|
|
|
|
|
.TP
|
|
|
|
|
.B timeout
|
|
|
|
|
The number of seconds to wait after the last minion returns but before all
|
|
|
|
|
minions return.
|
|
|
|
|
.UNINDENT
|
|
|
|
|
.INDENT 0.0
|
|
|
|
|
.TP
|
|
|
|
|
.B expr_form
|
|
|
|
|
The type of tgt that is passed in, the allowed values are:
|
|
|
|
|
.INDENT 7.0
|
|
|
|
|
.IP \(bu 2
|
|
|
|
|
\(aqglob\(aq \- Bash glob completion \- Default
|
|
|
|
|
.IP \(bu 2
|
|
|
|
|
\(aqpcre\(aq \- Perl style regular expression
|
|
|
|
|
.IP \(bu 2
|
|
|
|
|
\(aqlist\(aq \- Python list of hosts
|
|
|
|
|
.UNINDENT
|
|
|
|
|
.UNINDENT
|
|
|
|
|
.SS Compound Command Execution With the Salt API
|
|
|
|
|
.sp
|
|
|
|
|
The Salt client API can also send what is called a compound command. Often
|
|
|
|
|
a collection of commands need to be executed on the targeted minions, rather
|
|
|
|
|
than send the commands one after another, they can be send in a single publish
|
|
|
|
|
containing a series of commands. This can dramatically lower overhead and
|
|
|
|
|
speed up the application communicating with Salt.
|
|
|
|
|
.sp
|
|
|
|
|
When commands are executed with compound execution the minion functions called
|
|
|
|
|
are executed in serial on the minion and the return value is sent back in a
|
|
|
|
|
different fashion. The return value is a dict, with the function names as keys
|
|
|
|
|
to the function returns as values.
|
|
|
|
|
.sp
|
|
|
|
|
Using the compound command execution system via the API requires that the fun
|
|
|
|
|
value and the arg value are lists matching by index. This ensures that the
|
|
|
|
|
order of the executions can be controlled. Any function that has no arguments
|
|
|
|
|
MUST have an empty array in the corresponding arg index.
|
|
|
|
|
.sp
|
|
|
|
|
.nf
|
|
|
|
|
.ft C
|
|
|
|
|
# Import the salt client library
|
|
|
|
|
import salt.client
|
|
|
|
|
# create a local client object
|
|
|
|
|
client = salt.client.LocalClient()
|
|
|
|
|
# make compound execution calls with the cmd method
|
|
|
|
|
ret = client.cmd(\(aq*\(aq, [\(aqcmd.run\(aq, \(aqtest.ping\(aq, \(aqtest.echo\(aq], [[\(aqls \-l\(aq], [], [\(aqfoo\(aq]])
|
|
|
|
|
.ft P
|
|
|
|
|
.fi
|
|
|
|
|
.sp
|
|
|
|
|
This will execute \fBcmd.run ls \-l\fP then \fBtest.ping\fP and finally
|
|
|
|
|
\fBtest.echo foo\fP.
|
|
|
|
|
The return data from the minion will look like this:
|
|
|
|
|
.sp
|
|
|
|
|
.nf
|
|
|
|
|
.ft C
|
|
|
|
|
{\(aqcmd.run\(aq: \(aq<output from ls \-l>\(aq,
|
|
|
|
|
\(aqtest.ping\(aq: True,
|
|
|
|
|
\(aqtest.echo\(aq: \(aqfoo\(aq}
|
|
|
|
|
.ft P
|
|
|
|
|
.fi
|
2011-08-27 17:38:12 +00:00
|
|
|
|
.SS Salt File Server
|
2011-07-09 23:13:08 +00:00
|
|
|
|
.sp
|
|
|
|
|
Salt comes with a simple file server suitable for distributing files to the
|
|
|
|
|
salt minions. The file server is a stateless ZeroMQ server that is built into
|
|
|
|
|
the salt master.
|
|
|
|
|
.sp
|
|
|
|
|
The main intent of the Salt File server is the present files for use in the
|
|
|
|
|
Salt state system. With this said, the Salt file server can be used for any
|
|
|
|
|
general file transfer from the master to the minions.
|
|
|
|
|
.SS The cp Module
|
|
|
|
|
.sp
|
|
|
|
|
The cp module is the home of minion side file server operations. The cp module
|
|
|
|
|
is used by the Salt state system, salt\-cp and can be used to distribute files
|
|
|
|
|
presented by the Salt file server.
|
|
|
|
|
.SS Environments
|
|
|
|
|
.sp
|
|
|
|
|
Since the file server is made to work with the Salt state system, it supports
|
|
|
|
|
environments. The environments are defined in the master config file and
|
|
|
|
|
when referencing an environment the file specified will be based on the root
|
|
|
|
|
directory of the environment.
|
|
|
|
|
.SS get_file
|
|
|
|
|
.sp
|
|
|
|
|
The cp.get_file function can be used on the minion to download a file from
|
|
|
|
|
the master, the syntax looks like this:
|
|
|
|
|
.sp
|
|
|
|
|
.nf
|
|
|
|
|
.ft C
|
|
|
|
|
# salt \(aq*\(aq cp.get_file salt://vimrc /etc/vimrc
|
|
|
|
|
.ft P
|
|
|
|
|
.fi
|
|
|
|
|
.sp
|
|
|
|
|
This will instruct all salt minions to download the vimrc file and copy it
|
|
|
|
|
to /etc/vimrc
|
|
|
|
|
.SS File Server Client API
|
|
|
|
|
.sp
|
|
|
|
|
A client API is available which allows for modules and applications to be
|
|
|
|
|
written which make use of the Salt file server.
|
|
|
|
|
.sp
|
|
|
|
|
The file server uses the same authentication and encryption used by the rest
|
|
|
|
|
of the Salt system for network communication.
|
|
|
|
|
.SS FileClient Class
|
|
|
|
|
.sp
|
|
|
|
|
The FileClient class is used to set up the communication from the minion to
|
|
|
|
|
the master. When creating a FileClient object the minion configuration needs
|
|
|
|
|
to be passed in. When using the FileClient from within a minion module the
|
|
|
|
|
built in \fB__opts__\fP data can be passed:
|
|
|
|
|
.sp
|
|
|
|
|
.nf
|
|
|
|
|
.ft C
|
|
|
|
|
import salt.minion
|
|
|
|
|
|
|
|
|
|
def get_file(path, dest, env=\(aqbase\(aq):
|
|
|
|
|
\(aq\(aq\(aq
|
|
|
|
|
Used to get a single file from the salt master
|
|
|
|
|
|
|
|
|
|
CLI Example:
|
|
|
|
|
salt \(aq*\(aq cp.get_file salt://vimrc /etc/vimrc
|
|
|
|
|
\(aq\(aq\(aq
|
|
|
|
|
# Create the FileClient object
|
|
|
|
|
client = salt.minion.FileClient(__opts__)
|
|
|
|
|
# Call get_file
|
|
|
|
|
return client.get_file(path, dest, False, env)
|
|
|
|
|
.ft P
|
|
|
|
|
.fi
|
|
|
|
|
.sp
|
|
|
|
|
Using the FileClient class outside of a minion module where the \fB__opts__\fP
|
|
|
|
|
data is not available, it needs to be generated:
|
|
|
|
|
.sp
|
|
|
|
|
.nf
|
|
|
|
|
.ft C
|
|
|
|
|
import salt.minion
|
|
|
|
|
import salt.config
|
|
|
|
|
|
|
|
|
|
def get_file(path, dest, env=\(aqbase\(aq):
|
|
|
|
|
\(aq\(aq\(aq
|
|
|
|
|
Used to get a single file from the salt master
|
|
|
|
|
\(aq\(aq\(aq
|
|
|
|
|
# Get the configuration data
|
|
|
|
|
opts = salt.config.minion_config(\(aq/etc/salt/minion\(aq)
|
|
|
|
|
# Create the FileClient object
|
|
|
|
|
client = salt.minion.FileClient(opts)
|
|
|
|
|
# Call get_file
|
|
|
|
|
return client.get_file(path, dest, False, env)
|
|
|
|
|
.ft P
|
|
|
|
|
.fi
|
|
|
|
|
.INDENT 0.0
|
|
|
|
|
.IP \(bu 2
|
|
|
|
|
\fBModules:\fP
|
|
|
|
|
\fBWriting modules\fP
|
|
|
|
|
| \fBfull list of modules\fP
|
|
|
|
|
.IP \(bu 2
|
|
|
|
|
\fBGrains:\fP
|
|
|
|
|
\fBGrains\fP
|
|
|
|
|
.IP \(bu 2
|
|
|
|
|
\fBReturners:\fP
|
|
|
|
|
\fBWriting returners\fP
|
|
|
|
|
| \fBfull list of returners\fP
|
|
|
|
|
.IP \(bu 2
|
|
|
|
|
\fBState enforcement:\fP
|
|
|
|
|
\fBStates\fP
|
|
|
|
|
| \fBRenderers\fP
|
|
|
|
|
.IP \(bu 2
|
|
|
|
|
\fBPython API:\fP
|
|
|
|
|
\fBPython API\fP
|
|
|
|
|
.IP \(bu 2
|
|
|
|
|
\fBFile Server:\fP
|
|
|
|
|
\fBFile Server\fP
|
|
|
|
|
.UNINDENT
|
2011-08-27 17:38:12 +00:00
|
|
|
|
.SH SALT NETWORK TOPOLOGY
|
|
|
|
|
.sp
|
|
|
|
|
Salt can be extended beyond a simple master commanding minions, for more
|
|
|
|
|
information read up on the peer and syndic interfaces.
|
|
|
|
|
.SS Salt Syndic
|
|
|
|
|
.sp
|
|
|
|
|
The Salt Syndic interface is a powerful tool which allows for the construction
|
|
|
|
|
of Salt command topologies. A basic Salt setup has a Salt Master commanding a
|
|
|
|
|
group of Salt Minions. The Syndic interface is a special passthrough
|
|
|
|
|
minion, it is run on a master and connects to another master, then the master
|
|
|
|
|
that the Syndic minion is listening to can control the minions attatched to
|
|
|
|
|
the master running the syndic.
|
|
|
|
|
.sp
|
|
|
|
|
The intent for supporting many layouts is not presented with the intent of
|
|
|
|
|
supposing the use of any single topology, but to allow a more flexible method
|
|
|
|
|
of controlling many systems.
|
|
|
|
|
.SS Configuring the Syndic
|
|
|
|
|
.sp
|
|
|
|
|
Since the Syndic only needs to be attatched to a higher level master the
|
|
|
|
|
configuration is very simple. On a master that is running a syndic to connect
|
|
|
|
|
to a higher level master the syndic_master option needs to be set in the
|
|
|
|
|
master config file. The syndic_master option contains the hostname or ip
|
|
|
|
|
address of the master server that can control the master that the syndic is
|
|
|
|
|
running on.
|
|
|
|
|
.sp
|
|
|
|
|
The master that the syndic connects to sees the syndic as an ordinary minion,
|
|
|
|
|
and treats it as such. the higher level master will need to accept the syndic\(aqs
|
|
|
|
|
minion key like any other minion. This master will also need to set the
|
|
|
|
|
order_masters value in the configuration to True. The order_masters option in
|
|
|
|
|
the config on the higher level master is very important, to control a syndic
|
|
|
|
|
extra information needs to be sent with the publications, the order_masters
|
|
|
|
|
option makes sure that the extra data is sent out.
|
|
|
|
|
.SS Running the Syndic
|
|
|
|
|
.sp
|
|
|
|
|
The Syndic is a seperate daemon that needs to be started on the master that is
|
|
|
|
|
controlled by a higher master. Starting the Syndic daemon is the same as
|
|
|
|
|
starting the other Salt daemons.
|
|
|
|
|
.sp
|
|
|
|
|
.nf
|
|
|
|
|
.ft C
|
|
|
|
|
# salt\-syndic
|
|
|
|
|
.ft P
|
|
|
|
|
.fi
|
|
|
|
|
.SS Peer Communication
|
|
|
|
|
.sp
|
|
|
|
|
Salt 0.9.0 introduced the capability for salt minions to publish commands. The
|
|
|
|
|
intent of this feature is not for salt minions to act as independent brokers
|
|
|
|
|
one with another, but to allow salt minions to pass commands to each other.
|
|
|
|
|
.sp
|
|
|
|
|
The peer interface allows a minion to call out publications on the salt master
|
|
|
|
|
and receive the return data.
|
|
|
|
|
.sp
|
|
|
|
|
Since this presents a viable security risk by allowing minions access to the
|
|
|
|
|
master publisher the capability is turned off by default. The minions can be
|
|
|
|
|
allowed access to the master publisher on a per minion basis based on regular
|
|
|
|
|
expressions. Minions with specific ids can be allowed access to certain salt
|
|
|
|
|
modules and functions.
|
|
|
|
|
.SS Configuration
|
|
|
|
|
.sp
|
|
|
|
|
The configuration is done under the peer setting in the salt master
|
|
|
|
|
configuration file, here are a number of configuration possibilities.
|
|
|
|
|
.sp
|
|
|
|
|
The simplest approach is to enable all communication for all minions, this is
|
|
|
|
|
only recommended for very secure environments.
|
|
|
|
|
.sp
|
|
|
|
|
.nf
|
|
|
|
|
.ft C
|
|
|
|
|
peer:
|
|
|
|
|
.*:
|
|
|
|
|
\- .*
|
|
|
|
|
.ft P
|
|
|
|
|
.fi
|
|
|
|
|
.sp
|
|
|
|
|
This configuration will allow minions with ids ending in example.com access
|
|
|
|
|
to the test, ps, and pkg module functions.
|
|
|
|
|
.sp
|
|
|
|
|
.nf
|
|
|
|
|
.ft C
|
|
|
|
|
peer:
|
|
|
|
|
.*example.com:
|
|
|
|
|
\- test.*
|
|
|
|
|
\- ps.*
|
|
|
|
|
\- pkg.*
|
|
|
|
|
.ft P
|
|
|
|
|
.fi
|
|
|
|
|
.sp
|
|
|
|
|
The configuration logic is simple, a regular expression is passed for matching
|
|
|
|
|
minion ids, and then a list of expressions matching minion functions is
|
|
|
|
|
associated with the named minion. For instance, this configuration will also
|
|
|
|
|
allow minions ending with foo.org access to the publisher.
|
|
|
|
|
.sp
|
|
|
|
|
.nf
|
|
|
|
|
.ft C
|
|
|
|
|
peer:
|
|
|
|
|
.*example.com:
|
|
|
|
|
\- test.*
|
|
|
|
|
\- ps.*
|
|
|
|
|
\- pkg.*
|
|
|
|
|
.*foo.org:
|
|
|
|
|
\- test.*
|
|
|
|
|
\- ps.*
|
|
|
|
|
\- pkg.*
|
|
|
|
|
.ft P
|
|
|
|
|
.fi
|
|
|
|
|
.SH GETTING INVOLVED
|
2011-07-09 23:13:08 +00:00
|
|
|
|
.sp
|
|
|
|
|
There are many ways to interact with the Salt community.
|
2011-08-27 17:38:12 +00:00
|
|
|
|
.SS Community
|
2011-07-09 23:13:08 +00:00
|
|
|
|
.sp
|
|
|
|
|
Join the Salt!
|
|
|
|
|
.sp
|
|
|
|
|
There are many ways to participate in and communicate with the Salt community.
|
|
|
|
|
.sp
|
|
|
|
|
Salt has an active IRC channel and a mailing list.
|
|
|
|
|
.SS Mailing List
|
|
|
|
|
.sp
|
|
|
|
|
Join the \fI\%salt-users mailing list\fP. It is the best place to ask questions
|
|
|
|
|
about Salt and see whats going on with Salt development! The Salt mailing list
|
|
|
|
|
is hosted by Google Groups. It is open to new members.
|
|
|
|
|
.sp
|
|
|
|
|
\fI\%http://groups.google.com/group/salt-users\fP
|
|
|
|
|
.SS IRC
|
|
|
|
|
.sp
|
|
|
|
|
The Salt IRC channel is hosted on the \fI\%OFTC\fP network. Connect to the OFTC
|
|
|
|
|
server:
|
|
|
|
|
.sp
|
|
|
|
|
\fI\%irc://irc.oftc.net:6667\fP
|
|
|
|
|
.sp
|
|
|
|
|
and join us in \fB#salt\fP.
|
|
|
|
|
.SS Follow on Github
|
|
|
|
|
.sp
|
|
|
|
|
The Salt code is developed via Github. Follow Salt for constant updates on what
|
|
|
|
|
is happening in Salt development:
|
|
|
|
|
.sp
|
|
|
|
|
\fI\%https://github.com/thatch45/salt\fP
|
|
|
|
|
.SS The Red45 Blog
|
|
|
|
|
.sp
|
|
|
|
|
News and thoughts on Salt and related projects is often posted on Thomas\(aq blog
|
|
|
|
|
\fI\%The Red45\fP:
|
|
|
|
|
.sp
|
|
|
|
|
\fI\%http://red45.wordpress.com/\fP
|
|
|
|
|
.SS Follow on ohloh
|
|
|
|
|
.sp
|
|
|
|
|
\fI\%https://www.ohloh.net/p/salt\fP
|
|
|
|
|
.SS Developing Salt
|
2011-05-30 22:24:23 +00:00
|
|
|
|
.sp
|
|
|
|
|
If you want to help develop Salt there is a great need and your patches are
|
|
|
|
|
welcome!
|
|
|
|
|
.sp
|
|
|
|
|
To assist in Salt development, you can help in a number of ways.
|
|
|
|
|
.SS Posting patches to the mailing list
|
|
|
|
|
.sp
|
|
|
|
|
If you have a patch for Salt, please format it via \fBgit format\-patch\fP and
|
|
|
|
|
send it to the Salt users mailing list. This allows the patch to give you the
|
|
|
|
|
contributor the credit for your patch, and gives the Salt community an archive
|
|
|
|
|
of the patch and a place for discussion.
|
|
|
|
|
.SS Setting a Github pull request
|
|
|
|
|
.sp
|
|
|
|
|
This is probably the preferred method for contributions, simply create a Github
|
|
|
|
|
fork, commit your changes to the fork, and then open up a pull request.
|
2011-07-09 23:13:08 +00:00
|
|
|
|
.SS Contributions Welcome!
|
2011-05-30 22:24:23 +00:00
|
|
|
|
.sp
|
|
|
|
|
The goal here it to make contributions clear, make sure there is a trail for
|
|
|
|
|
where the code has come from, but most importantly, to give credit where credit
|
|
|
|
|
is due!
|
2011-08-27 17:38:12 +00:00
|
|
|
|
.SS Release notes and upgrade instructions
|
2011-07-09 23:13:08 +00:00
|
|
|
|
.SS Salt 0.6.0 release notes
|
|
|
|
|
.sp
|
|
|
|
|
The Salt remote execution manager has reached initial functionality! Salt is a
|
|
|
|
|
management application which can be used to execute commands on remote sets of
|
|
|
|
|
servers.
|
|
|
|
|
.sp
|
|
|
|
|
The whole idea behind Salt is to create a system where a group of servers can
|
|
|
|
|
be remotely controlled from a single master, not only can commands be executed
|
|
|
|
|
on remote systems, but salt can also be used to gather information about your
|
|
|
|
|
server environment.
|
|
|
|
|
.sp
|
|
|
|
|
Unlike similar systems, like Func and MCollective, Salt is extremely simple to
|
|
|
|
|
setup and use, the entire application is contained in a single package, and the
|
|
|
|
|
master and minion daemons require no running dependencies in the way that Func
|
|
|
|
|
requires Certmaster and MCollective requires activeMQ.
|
|
|
|
|
.sp
|
|
|
|
|
Salt also manages authentication and encryption. Rather than using ssl for
|
|
|
|
|
encryption, salt manages encryption on a payload level, so the data sent across
|
|
|
|
|
the network is encrypted with fast aes encryption, and authentication uses RSA
|
|
|
|
|
keys. This means that Salt is fast, secure, and very efficient.
|
|
|
|
|
.sp
|
|
|
|
|
Messaging in Salt is executed with zeromq, so the message passing interface is
|
|
|
|
|
built into salt and does not require an external MQ server. This also adds
|
|
|
|
|
speed to Salt since there is no additional bloat on the networking layer, and
|
|
|
|
|
zeromq has already proven itself as a very fast networking system.
|
|
|
|
|
.sp
|
|
|
|
|
The remote execution in Salt is "Lazy Execution", in that once the command is
|
|
|
|
|
sent the requesting network connection is closed. This makes it easier to
|
|
|
|
|
detach the execution from the calling process on the master, it also means that
|
|
|
|
|
replies are cached, so that information gathered from historic commands can be
|
|
|
|
|
queried in the future.
|
|
|
|
|
.sp
|
|
|
|
|
Salt also allows users to make execution modules in python. Writers of these
|
|
|
|
|
modules should also be pleased to know that they have access to the impressive
|
|
|
|
|
information gathered from PuppetLabs\(aq Facter application, making Salt module
|
|
|
|
|
more flexible. In the future I hope to also allow Salt to group servers based
|
|
|
|
|
on facter information as well.
|
|
|
|
|
.sp
|
|
|
|
|
All in all Salt is fast, efficient and clean, can be used from a simple command
|
|
|
|
|
line client or through an api, uses message queue technology to make network
|
|
|
|
|
execution extremely fast, and encryption is handled in a very fast and
|
|
|
|
|
efficient manner. Salt is also VERY easy to use and VERY easy to extend.
|
|
|
|
|
.sp
|
2011-08-27 17:38:12 +00:00
|
|
|
|
You can find the source code for Salt on my github page, I have also set up a
|
|
|
|
|
few wiki pages explaining how to use and set up Salt. If you are using Arch
|
|
|
|
|
Linux there is a package available in the Arch Linux AUR.
|
|
|
|
|
.sp
|
|
|
|
|
Salt 0.6.0 Source: \fI\%https://github.com/downloads/thatch45/salt/salt-0.6.0.tar.gz\fP
|
|
|
|
|
.sp
|
|
|
|
|
Github page: \fI\%https://github.com/thatch45/salt\fP
|
|
|
|
|
.sp
|
|
|
|
|
Wiki: \fI\%https://github.com/thatch45/salt/wiki\fP
|
|
|
|
|
.sp
|
|
|
|
|
Arch Linux Package: \fI\%https://aur.archlinux.org/packages.php?ID=47512\fP
|
|
|
|
|
.sp
|
|
|
|
|
I am very open to contributions, for instance I need packages for more Linux
|
|
|
|
|
distributions as well as BSD packages and testers.
|
|
|
|
|
.sp
|
|
|
|
|
Give Salt a try, this is the initial release and is not a 1.0 quality release,
|
|
|
|
|
but it has been working well for me! I am eager to get your feedback!
|
|
|
|
|
.SS Salt 0.7.0 release notes
|
|
|
|
|
.sp
|
|
|
|
|
I am pleased to announce the release of Salt 0.7.0!
|
|
|
|
|
.sp
|
|
|
|
|
This release marks what is the first stable release of salt, 0.7.0 should be
|
|
|
|
|
suitable for general use.
|
|
|
|
|
.sp
|
|
|
|
|
0.7.0 Brings the following new features to Salt:
|
|
|
|
|
.INDENT 0.0
|
|
|
|
|
.IP \(bu 2
|
|
|
|
|
Integration with facter data from puppet labs
|
|
|
|
|
.IP \(bu 2
|
|
|
|
|
Allow for matching minions from the salt client via facter information
|
|
|
|
|
.IP \(bu 2
|
|
|
|
|
Minion job threading, many jobs can be executed from the master at once
|
|
|
|
|
.IP \(bu 2
|
|
|
|
|
Preview of master clustering support \- Still experimental
|
|
|
|
|
.IP \(bu 2
|
|
|
|
|
Introduce new minion modules for stats, virtualization, service management and more
|
|
|
|
|
.IP \(bu 2
|
|
|
|
|
Add extensive logging to the master and minion daemons
|
|
|
|
|
.IP \(bu 2
|
|
|
|
|
Add sys.reload_functions for dynamic function reloading
|
|
|
|
|
.IP \(bu 2
|
|
|
|
|
Greatly improve authentication
|
|
|
|
|
.IP \(bu 2
|
|
|
|
|
Introduce the saltkey command for managing public keys
|
|
|
|
|
.IP \(bu 2
|
|
|
|
|
Begin backend development preparatory to introducing butter
|
|
|
|
|
.IP \(bu 2
|
|
|
|
|
Addition of man pages for the core commands
|
|
|
|
|
.IP \(bu 2
|
|
|
|
|
Extended and cleaned configuration
|
|
|
|
|
.UNINDENT
|
|
|
|
|
.sp
|
|
|
|
|
0.7.0 Fixes the following major bugs:
|
|
|
|
|
.INDENT 0.0
|
|
|
|
|
.IP \(bu 2
|
|
|
|
|
Fix crash in minions when matching failed
|
|
|
|
|
.IP \(bu 2
|
|
|
|
|
Fix configuration file lookups for the local client
|
|
|
|
|
.IP \(bu 2
|
|
|
|
|
Repair communication bugs in encryption
|
|
|
|
|
.IP \(bu 2
|
|
|
|
|
Numerous fixes in the minion modules
|
|
|
|
|
.UNINDENT
|
|
|
|
|
.sp
|
|
|
|
|
The next release of Salt should see the following features:
|
|
|
|
|
.INDENT 0.0
|
|
|
|
|
.IP \(bu 2
|
|
|
|
|
Stabilize the cluster support
|
|
|
|
|
.IP \(bu 2
|
|
|
|
|
Introduce a remote client for salt command tiers
|
|
|
|
|
.IP \(bu 2
|
|
|
|
|
salt\-ftp system for distributed file copies
|
|
|
|
|
.IP \(bu 2
|
|
|
|
|
Initial support for "butter"
|
|
|
|
|
.UNINDENT
|
|
|
|
|
.sp
|
|
|
|
|
Coming up next is a higher level management framework for salt called
|
|
|
|
|
Butter. I want salt to stay as a simple and effective communication
|
|
|
|
|
framework, and allow for more complicated executions to be managed via
|
|
|
|
|
Butter.
|
|
|
|
|
.sp
|
|
|
|
|
Right now Butter is being developed to act as a cloud controller using salt
|
|
|
|
|
as the communication layer, but features like system monitoring and advanced
|
|
|
|
|
configuration control (a puppet manager) are also in the pipe.
|
|
|
|
|
.sp
|
|
|
|
|
Special thanks to Joseph Hall for the status and network modules, and thanks
|
|
|
|
|
to Matthias Teege for tracking down some configuration bugs!
|
|
|
|
|
.sp
|
|
|
|
|
Salt can be downloaded from the following locations;
|
|
|
|
|
.sp
|
|
|
|
|
Source Tarball:
|
|
|
|
|
.sp
|
|
|
|
|
\fI\%https://github.com/downloads/thatch45/salt/salt-0.7.0.tar.gz\fP
|
|
|
|
|
.sp
|
|
|
|
|
Arch Linux Package:
|
|
|
|
|
.sp
|
|
|
|
|
\fI\%https://aur.archlinux.org/packages.php?ID=47512\fP
|
|
|
|
|
.sp
|
|
|
|
|
Please enjoy the latest Salt release!
|
|
|
|
|
.SS Salt 0.8.0 release notes
|
|
|
|
|
.sp
|
|
|
|
|
Salt 0.8.0 is ready for general consumption!
|
|
|
|
|
The source tarball is available on github for download:
|
|
|
|
|
.sp
|
|
|
|
|
\fI\%https://github.com/downloads/thatch45/salt/salt-0.8.0.tar.gz\fP
|
|
|
|
|
A lot of work has gone into salt since the last release just 2 weeks ago, and
|
|
|
|
|
salt has improved a great deal. A swath of new features are here along with
|
|
|
|
|
performance and threading improvements!
|
|
|
|
|
.sp
|
|
|
|
|
The main new features of salt 0.8.0 are:
|
|
|
|
|
.sp
|
|
|
|
|
Salt\-cp
|
|
|
|
|
.sp
|
|
|
|
|
Cython minion modules
|
|
|
|
|
.sp
|
|
|
|
|
Dynamic returners
|
|
|
|
|
.sp
|
|
|
|
|
Faster return handling
|
|
|
|
|
.sp
|
|
|
|
|
Lowered required python version to 2.6
|
|
|
|
|
.sp
|
|
|
|
|
Advanced minion threading
|
|
|
|
|
.sp
|
|
|
|
|
Configurable minion modules
|
|
|
|
|
.SS Salt\-cp \-
|
|
|
|
|
.sp
|
|
|
|
|
The salt\-cp command introduces the ability to copy simple files via salt to
|
|
|
|
|
targeted servers. Using salt\-cp is very simple, just call salt\-cp with a target
|
|
|
|
|
specification, the source file(s) and where to copy the files on the minions.
|
|
|
|
|
For instance:
|
|
|
|
|
.sp
|
|
|
|
|
# salt\-cp ‘*’ /etc/hosts /etc/hosts
|
|
|
|
|
.sp
|
|
|
|
|
Will copy the local /etc/hosts file to all of the minions.
|
|
|
|
|
.sp
|
|
|
|
|
Salt\-cp is very young, in the future more advanced features will be added, and
|
|
|
|
|
the functionality will much more closely resemble the cp command.
|
|
|
|
|
.SS Cython minion modules \-
|
|
|
|
|
.sp
|
|
|
|
|
Cython is an amazing tool used to compile python modules down to c. This is
|
|
|
|
|
arguably the fastest way to run python code, and since pyzmq requires cython,
|
|
|
|
|
adding support to salt for cython adds no new dependencies.
|
|
|
|
|
.sp
|
|
|
|
|
Cython minion modules allow minion modules to be written in cython and
|
|
|
|
|
therefore executed in compiled c. Simply write the salt module in cython and
|
|
|
|
|
use the file extension “.pyx” and the minion module will be compiled when
|
|
|
|
|
the minion is started. An example cython module is included in the main
|
|
|
|
|
distribution called cytest.pyx:
|
|
|
|
|
\fI\%https://github.com/thatch45/salt/blob/master/salt/modules/cytest.pyx\fP
|
|
|
|
|
.SS Dynamic Returners \-
|
|
|
|
|
.sp
|
|
|
|
|
By default salt returns command data back to the salt master, but now salt can
|
|
|
|
|
return command data to any system. This is enabled via the new returners
|
|
|
|
|
modules feature for salt. The returners modules take the return data and sends
|
|
|
|
|
it to a specific module. The returner modules work like minion modules, so any
|
|
|
|
|
returner can be added to the minions.
|
|
|
|
|
.sp
|
|
|
|
|
This means that a custom data returner can be added to communicate the return
|
|
|
|
|
data so anything from MySQL, redis, mongodb and more!
|
|
|
|
|
.sp
|
|
|
|
|
There are 2 simple stock returners in the returners directory:
|
|
|
|
|
\fI\%https://github.com/thatch45/salt/tree/master/salt/returners\fP
|
|
|
|
|
.sp
|
|
|
|
|
The documentation on writing returners will be added to the wiki shortly, and
|
|
|
|
|
returners can be written in pure python, or in cython.
|
|
|
|
|
.SS Configurable Minion Modules \-
|
|
|
|
|
.sp
|
|
|
|
|
Minion modules may need to be configured, now the options passed to the minion
|
|
|
|
|
configuration file can be accessed inside of the minion modules via the __opt__
|
|
|
|
|
dict.
|
|
|
|
|
.sp
|
|
|
|
|
Information on how to use this simple addition has been added to the wiki:
|
|
|
|
|
\fI\%https://github.com/thatch45/salt/wiki/Writing-Salt-Modules\fP
|
|
|
|
|
.sp
|
|
|
|
|
The test module has an example of using the __opts__ dict, and how to set
|
|
|
|
|
default options:
|
|
|
|
|
\fI\%https://github.com/thatch45/salt/blob/master/salt/modules/test.py\fP
|
|
|
|
|
.SS Advanced Minion Threading:
|
|
|
|
|
.sp
|
|
|
|
|
In 0.7.0 the minion would block after receiving a command from the master, now
|
|
|
|
|
the minion will spawn a thread or multiprocess. By default python threads are
|
|
|
|
|
used because for general use they have proved to be faster, but the minion can
|
|
|
|
|
now be configured to use the python multiprocessing module instead. Using
|
|
|
|
|
multiprocessing will cause executions that are cpu bound or would otherwise
|
|
|
|
|
exploit the negative aspects of the Python GIL to run faster and more reliably,
|
|
|
|
|
but simple calls will still be faster with python threading.
|
|
|
|
|
The configuration option can be found in the minion configuration file:
|
|
|
|
|
\fI\%https://github.com/thatch45/salt/blob/master/conf/minion\fP
|
2011-07-09 23:13:08 +00:00
|
|
|
|
.sp
|
2011-08-27 17:38:12 +00:00
|
|
|
|
Lowered Supported Python to 2.6 \-
|
2011-07-09 23:13:08 +00:00
|
|
|
|
.sp
|
2011-08-27 17:38:12 +00:00
|
|
|
|
The requirement for python 2.7 has been removed to support python 2.6. I have
|
|
|
|
|
received requests to take the minimum python version back to 2.4, but
|
|
|
|
|
unfortunately this will not be possible, since the zeromq python bindings do
|
|
|
|
|
not support python 2.4.
|
2011-07-09 23:13:08 +00:00
|
|
|
|
.sp
|
2011-08-27 17:38:12 +00:00
|
|
|
|
Salt 0.8.0 is a very major update, it also changes the network protocol slightly
|
|
|
|
|
which makes communication with older salt daemons impossible, your master and
|
|
|
|
|
minions need to be upgraded together!
|
|
|
|
|
I could use some help bringing salt to the people! Right now I only have
|
|
|
|
|
packages for Arch Linux, Fedora 14 and Gentoo. We need packages for Debian and
|
|
|
|
|
people willing to help test on more platforms. We also need help writing more
|
|
|
|
|
minion modules and returner modules. If you want to contribute to salt please
|
|
|
|
|
hop on the mailing list and send in patches, make a fork on github and send in
|
|
|
|
|
pull requests! If you want to help but are not sure where you can, please email
|
|
|
|
|
me directly or post tot he mailing list!
|
2011-07-09 23:13:08 +00:00
|
|
|
|
.sp
|
2011-08-27 17:38:12 +00:00
|
|
|
|
I hope you enjoy salt, while it is not yet 1.0 salt is completely viable and
|
|
|
|
|
usable!
|
2011-07-09 23:13:08 +00:00
|
|
|
|
.sp
|
2011-08-27 17:38:12 +00:00
|
|
|
|
\-Thomas S. Hatch
|
|
|
|
|
.SS Salt 0.8.7 release notes
|
2011-07-09 23:13:08 +00:00
|
|
|
|
.sp
|
2011-08-27 17:38:12 +00:00
|
|
|
|
It has been a month since salt 0.8.0, and it has been a long month! But Salt is
|
|
|
|
|
still coming along strong. 0.8.7 has a lot of changes and a lot of updates.
|
|
|
|
|
This update makes Salt’s ZeroMQ back end better, strips facter from the
|
|
|
|
|
dependencies, and introduces interfaces to handle more capabilities.
|
2011-07-09 23:13:08 +00:00
|
|
|
|
.sp
|
2011-08-27 17:38:12 +00:00
|
|
|
|
Many of the major updates are in the background, but the changes should shine
|
|
|
|
|
through to the surface. A number of the new features are still a little thin,
|
|
|
|
|
but the back end to support expansion is in place.
|
2011-07-09 23:13:08 +00:00
|
|
|
|
.sp
|
2011-08-27 17:38:12 +00:00
|
|
|
|
I also recently gave a presentation to the Utah Python users group in Salt Lake
|
|
|
|
|
City, the slides from this presentation are available here:
|
|
|
|
|
\fI\%https://github.com/downloads/thatch45/salt/Salt.pdf\fP
|
2011-07-09 23:13:08 +00:00
|
|
|
|
.sp
|
2011-08-27 17:38:12 +00:00
|
|
|
|
The video from this presentation will be available shortly.
|
|
|
|
|
.sp
|
|
|
|
|
The major new features and changes in Salt 0.8.7 are:
|
2011-07-09 23:13:08 +00:00
|
|
|
|
.INDENT 0.0
|
|
|
|
|
.IP \(bu 2
|
2011-08-27 17:38:12 +00:00
|
|
|
|
Revamp ZeroMQ topology on the master for better scalability
|
2011-07-09 23:13:08 +00:00
|
|
|
|
.IP \(bu 2
|
2011-08-27 17:38:12 +00:00
|
|
|
|
State enforcement
|
2011-07-09 23:13:08 +00:00
|
|
|
|
.IP \(bu 2
|
2011-08-27 17:38:12 +00:00
|
|
|
|
Dynamic state enforcement managers
|
2011-07-09 23:13:08 +00:00
|
|
|
|
.IP \(bu 2
|
2011-08-27 17:38:12 +00:00
|
|
|
|
Extract the module loader into salt.loader
|
2011-07-09 23:13:08 +00:00
|
|
|
|
.IP \(bu 2
|
2011-08-27 17:38:12 +00:00
|
|
|
|
Make Job ids more granular
|
2011-07-09 23:13:08 +00:00
|
|
|
|
.IP \(bu 2
|
2011-08-27 17:38:12 +00:00
|
|
|
|
Replace facter functionality with the new salt grains interface
|
2011-07-09 23:13:08 +00:00
|
|
|
|
.IP \(bu 2
|
2011-08-27 17:38:12 +00:00
|
|
|
|
Support for “virtual” salt modules
|
2011-07-09 23:13:08 +00:00
|
|
|
|
.IP \(bu 2
|
2011-08-27 17:38:12 +00:00
|
|
|
|
Introduce the salt\-call command
|
2011-07-09 23:13:08 +00:00
|
|
|
|
.IP \(bu 2
|
2011-08-27 17:38:12 +00:00
|
|
|
|
Better debugging for minion modules
|
2011-07-09 23:13:08 +00:00
|
|
|
|
.UNINDENT
|
|
|
|
|
.sp
|
2011-08-27 17:38:12 +00:00
|
|
|
|
The new ZeroMQ topology allows for better scalability, this will be required by
|
|
|
|
|
the need to execute massive file transfers to multiple machines in parallel and
|
|
|
|
|
state management. The new ZeroMQ topology is available in the aforementioned
|
|
|
|
|
presentation.
|
2011-07-09 23:13:08 +00:00
|
|
|
|
.sp
|
2011-08-27 17:38:12 +00:00
|
|
|
|
0.8.7 introduces the capability to declare states, this is similar to the
|
|
|
|
|
capabilities of Puppet. States in salt are declared via state data structures.
|
|
|
|
|
This system is very young, but the core feature set is available. Salt states
|
|
|
|
|
work around rendering files which represent Salt high data. More on the Salt
|
|
|
|
|
state system will be documented in the near future.
|
2011-07-09 23:13:08 +00:00
|
|
|
|
.sp
|
2011-08-27 17:38:12 +00:00
|
|
|
|
The system for loading salt modules has been pulled out of the minion class to
|
|
|
|
|
be a standalone module, this has enabled more dynamic loading of Salt modules
|
|
|
|
|
and enables many of the updates in 0.8.7 –
|
|
|
|
|
\fI\%https://github.com/thatch45/salt/blob/master/salt/loader.py\fP
|
2011-07-09 23:13:08 +00:00
|
|
|
|
.sp
|
2011-08-27 17:38:12 +00:00
|
|
|
|
Salt Job ids are now microsecond precise, this was needed to repair a race
|
|
|
|
|
condition unveiled by the speed improvements in the new ZeroMQ topology.
|
2011-07-09 23:13:08 +00:00
|
|
|
|
.sp
|
2011-08-27 17:38:12 +00:00
|
|
|
|
The new grains interface replaces the functionality of Facter, the idea behind
|
|
|
|
|
grains differs from Facter in that the grains are only used for static system
|
|
|
|
|
data, dynamic data needs to be derived from a call to a salt module. This makes
|
|
|
|
|
grains much faster to use, since the grains data is generated when the minion
|
|
|
|
|
starts.
|
2011-07-09 23:13:08 +00:00
|
|
|
|
.sp
|
2011-08-27 17:38:12 +00:00
|
|
|
|
Virtual salt modules allows for a salt module to be presented as something
|
|
|
|
|
other than its module name. The idea here is that based on information from the
|
|
|
|
|
minion decisions about which module should be presented can be made. The best
|
|
|
|
|
example is the pacman module. The pacman module will only load on Arch Linux
|
|
|
|
|
minions, and will be called pkg. Similarly the yum module will be presented as
|
|
|
|
|
pkg when the minion starts on a Fedora/RedHat system.
|
2011-07-09 23:13:08 +00:00
|
|
|
|
.sp
|
2011-08-27 17:38:12 +00:00
|
|
|
|
The new salt\-call command allows for minion modules to be executed from the
|
|
|
|
|
minion. This means that on the minion a salt module can be executed, this is a
|
|
|
|
|
great tool for testing Salt modules. The salt\-call command can also be used to
|
|
|
|
|
view the grains data.
|
2011-07-09 23:13:08 +00:00
|
|
|
|
.sp
|
2011-08-27 17:38:12 +00:00
|
|
|
|
In previous releases when a minion module threw an exception very little data
|
|
|
|
|
was returned to the master. Now the stack trace from the failure is returned
|
|
|
|
|
making debugging of minion modules MUCH easier.
|
2011-07-09 23:13:08 +00:00
|
|
|
|
.sp
|
2011-08-27 17:38:12 +00:00
|
|
|
|
Salt is nearing the goal of 1.0, where the core feature set and capability is
|
|
|
|
|
complete!
|
|
|
|
|
.sp
|
|
|
|
|
Salt 0.8.7 can be downloaded from github here:
|
|
|
|
|
\fI\%https://github.com/downloads/thatch45/salt/salt-0.8.7.tar.gz\fP
|
|
|
|
|
.sp
|
|
|
|
|
\-Thomas S Hatch
|
|
|
|
|
.SS Salt 0.8.8 release notes
|
|
|
|
|
.sp
|
|
|
|
|
Salt 0.8.8 is here! This release adds a great deal of code and some serious new
|
|
|
|
|
features. The latest release can be downloaded here:
|
|
|
|
|
\fI\%https://github.com/downloads/thatch45/salt/salt-0.8.8.tar.gz\fP
|
|
|
|
|
.sp
|
|
|
|
|
Improved Documentation has been set up for salt using sphinx thanks to the
|
|
|
|
|
efforts of Seth House. This new documentation system will act as the back end
|
|
|
|
|
to the salt website which is still under heavy development. The new sphinx
|
|
|
|
|
documentation system has also been used to greatly clean up the salt manpages.
|
|
|
|
|
The salt 7 manpage in particular now contains extensive information which was
|
|
|
|
|
previously only in the wiki. The new documentation can be found at:
|
|
|
|
|
\fI\%http://thatch45.github.com/salt-www/\fP
|
|
|
|
|
We still have a lot to add, and when the domain is set up I will post another
|
|
|
|
|
announcement.
|
|
|
|
|
.sp
|
|
|
|
|
More additions have been made to the ZeroMQ setup, particularly in the realm
|
|
|
|
|
of file transfers. Salt 0.8.8 introduces a built in, stateless, encrypted file
|
|
|
|
|
server which allows salt minions to download files from the salt master using
|
|
|
|
|
the same encryption system used for all other salt communications. The main
|
|
|
|
|
motivation for the salt file server has been to facilitate the new salt state
|
|
|
|
|
system.
|
|
|
|
|
.sp
|
|
|
|
|
Much of the salt code has been cleaned up and a new cleaner logging system has
|
|
|
|
|
been introduced thanks to the efforts of Pedro Algarvio. These additions will
|
|
|
|
|
allow for much more flexible logging to be executed by salt, and fixed a great
|
|
|
|
|
deal of my poor spelling in the salt docstrings! Pedro Algarvio has also
|
|
|
|
|
cleaned up the api, making it easier to embed salt into another application.
|
|
|
|
|
.sp
|
|
|
|
|
The biggest addition to salt found in 0.8.8 is the new state system. The salt
|
|
|
|
|
module system has received a new front end which allows salt to be used as a
|
|
|
|
|
configuration management system. The configuration management system allows for
|
|
|
|
|
system configuration to be defined in data structures. The configuration
|
|
|
|
|
management system, or as it is called in salt, the “salt state system” supports
|
|
|
|
|
many of the features found in other configuration managers, but allows for
|
|
|
|
|
system states to be written in a far simpler format, executes at blazing speeds,
|
|
|
|
|
and operates via the salt minion matching system. The state system also operates
|
|
|
|
|
within the normal scope of salt, and requires no additional configuration to
|
|
|
|
|
use.
|
|
|
|
|
.sp
|
|
|
|
|
The salt state system can enforce the following states with many more to come:
|
|
|
|
|
Packages
|
|
|
|
|
Files
|
|
|
|
|
Services
|
|
|
|
|
Executing commands
|
|
|
|
|
Hosts
|
|
|
|
|
.sp
|
|
|
|
|
The system used to define the salt states is based on a data structure, the
|
|
|
|
|
data structure used to define the salt states has been made to be as easy to
|
|
|
|
|
use as possible. The data structure is defined by default using a yaml file
|
|
|
|
|
rendered via a jinja template. This means that the state definition language
|
|
|
|
|
supports all of the data structures that yaml supports, and all of the
|
|
|
|
|
programming constructs and logic that jinja supports. If the user does not
|
|
|
|
|
like yaml or jinja the states can be defined in yaml\-mako, json\-jinja, or
|
|
|
|
|
json\-mako. The system used to render the states is completely dynamic, and any
|
|
|
|
|
rendering system can be added to the capabilities of Salt, this means that a
|
|
|
|
|
rendering system that renders xml data in a cheetah template, or whatever you
|
|
|
|
|
can imagine, can be easily added to the capabilities of salt.
|
|
|
|
|
.sp
|
|
|
|
|
The salt state system also supports isolated environments, as well as matching
|
|
|
|
|
code from several environments to a single salt minion.
|
|
|
|
|
.sp
|
|
|
|
|
The feature base for Salt has grown quite a bit since my last serious
|
|
|
|
|
documentation push. As we approach 0.9.0 the goals are becoming very clear, and
|
|
|
|
|
the documentation needs a lot of work. The main goals for 0.9.0 are to further
|
|
|
|
|
refine the state system, fix any bugs we find, get Salt running on as many
|
|
|
|
|
platforms as we can, and get the documentation filled out. There is a lot more
|
|
|
|
|
to come as Salt moves forward to encapsulate a much larger scope, while
|
|
|
|
|
maintaining supreme usability and simplicity.
|
|
|
|
|
.sp
|
|
|
|
|
If you would like a more complete overview of Salt please watch the Salt
|
|
|
|
|
presentation:
|
|
|
|
|
Flash Video:
|
|
|
|
|
\fI\%http://blip.tv/thomas-s-hatch/salt-0-8-7-presentation-5180182\fP
|
|
|
|
|
OGV Video Download:
|
|
|
|
|
\fI\%http://blip.tv/file/get/Thatch45-Salt087Presentation416.ogv\fP
|
|
|
|
|
Slides:
|
|
|
|
|
\fI\%https://github.com/downloads/thatch45/salt/Salt.pdf\fP
|
|
|
|
|
.sp
|
|
|
|
|
\-Thomas S Hatch
|
|
|
|
|
.SS Salt 0.8.9 Release Notes
|
2011-07-09 23:13:08 +00:00
|
|
|
|
.sp
|
2011-08-27 17:38:12 +00:00
|
|
|
|
Salt 0.8.9 has finally arrived! Unfortunately this is much later than I had
|
|
|
|
|
hoped to release 0.8.9, life has been very crazy over the last month. But
|
|
|
|
|
despite challenges, Salt has moved forward!
|
2011-07-09 23:13:08 +00:00
|
|
|
|
.sp
|
2011-08-27 17:38:12 +00:00
|
|
|
|
This release, as expected, adds few new features and many refinements. One
|
|
|
|
|
of the most exciting aspect of this release is that the development community
|
|
|
|
|
for salt has grown a great deal and much of the code is from contributors.
|
2011-07-09 23:13:08 +00:00
|
|
|
|
.sp
|
2011-08-27 17:38:12 +00:00
|
|
|
|
Also, I have filled out the documentation a great deal. So information on
|
|
|
|
|
States is properly documented, and much of the documentation that was out of
|
|
|
|
|
date has been filled in.
|
|
|
|
|
.SS Download!
|
2011-07-09 23:13:08 +00:00
|
|
|
|
.sp
|
2011-08-27 17:38:12 +00:00
|
|
|
|
The Salt source can be downloaded from the salt github site:
|
2011-07-09 23:13:08 +00:00
|
|
|
|
.sp
|
2011-08-27 17:38:12 +00:00
|
|
|
|
\fI\%https://github.com/downloads/thatch45/salt/salt-0.8.9.tar.gz\fP
|
2011-07-09 23:13:08 +00:00
|
|
|
|
.sp
|
2011-08-27 17:38:12 +00:00
|
|
|
|
Or from PiPy:
|
2011-07-09 23:13:08 +00:00
|
|
|
|
.sp
|
2011-08-27 17:38:12 +00:00
|
|
|
|
\fI\%http://pypi.python.org/packages/source/s/salt/salt-0.8.9.tar.gz\fP
|
2011-07-09 23:13:08 +00:00
|
|
|
|
.sp
|
2011-08-27 17:38:12 +00:00
|
|
|
|
Here s the md5sum:
|
2011-07-09 23:13:08 +00:00
|
|
|
|
.sp
|
2011-08-27 17:38:12 +00:00
|
|
|
|
7d5aca4633bc22f59045f59e82f43b56
|
2011-07-09 23:13:08 +00:00
|
|
|
|
.sp
|
2011-08-27 17:38:12 +00:00
|
|
|
|
For instructions on how to set up Salt please see the tutorial
|
|
|
|
|
.SS Tutorial
|
2011-07-09 23:13:08 +00:00
|
|
|
|
.sp
|
2011-08-27 17:38:12 +00:00
|
|
|
|
The Salt system setup is amazingly simple, as this is one of the central design
|
|
|
|
|
goals of Salt. Setting up Salt only requires that the Salt \fImaster\fP be
|
|
|
|
|
running and the Salt \fIminions\fP point to the master.
|
|
|
|
|
.INDENT 0.0
|
|
|
|
|
.TP
|
|
|
|
|
.B master
|
|
|
|
|
The Salt master is the central server that all minions connect to. You
|
|
|
|
|
run commands on the minions through the master and minions send data
|
|
|
|
|
back to the master (unless otherwise redirected with a \fBreturner\fP). It is started with the
|
|
|
|
|
\fBsalt\-master\fP program.
|
|
|
|
|
.TP
|
|
|
|
|
.B minion
|
|
|
|
|
Salt minions are the potentially hundreds or thousands of servers that
|
|
|
|
|
you query and control from the master.
|
|
|
|
|
.UNINDENT
|
|
|
|
|
.SS Installing Salt
|
2011-07-09 23:13:08 +00:00
|
|
|
|
.sp
|
2011-08-27 17:38:12 +00:00
|
|
|
|
As of this writing packages for Salt only exist for Arch Linux, but rpms and
|
|
|
|
|
debs will be available in the future (contributions welcome).
|
|
|
|
|
.SS Instructions by operating system
|
|
|
|
|
.INDENT 0.0
|
|
|
|
|
.IP \(bu 2
|
|
|
|
|
\fI\%Installing on Arch Linux\fP
|
|
|
|
|
.IP \(bu 2
|
|
|
|
|
\fI\%Installing on Debian or Ubuntu\fP
|
|
|
|
|
.IP \(bu 2
|
|
|
|
|
\fI\%Installing from the source tarball\fP
|
|
|
|
|
.UNINDENT
|
|
|
|
|
.SS Installing on Arch Linux
|
2011-07-09 23:13:08 +00:00
|
|
|
|
.sp
|
2011-08-27 17:38:12 +00:00
|
|
|
|
The Arch Linux Salt package is available in the Arch Linux AUR (if you like
|
|
|
|
|
Salt vote for it on the Arch Linux AUR):
|
2011-07-09 23:13:08 +00:00
|
|
|
|
.sp
|
2011-08-27 17:38:12 +00:00
|
|
|
|
\fI\%https://aur.archlinux.org/packages.php?ID=47512\fP
|
2011-07-09 23:13:08 +00:00
|
|
|
|
.sp
|
2011-08-27 17:38:12 +00:00
|
|
|
|
For help using packages in the Arch Linux AUR:
|
2011-07-09 23:13:08 +00:00
|
|
|
|
.sp
|
2011-08-27 17:38:12 +00:00
|
|
|
|
\fI\%https://wiki.archlinux.org/index.php/AUR\fP
|
|
|
|
|
.SS Installing on Debian or Ubuntu
|
2011-07-09 23:13:08 +00:00
|
|
|
|
.sp
|
2011-08-27 17:38:12 +00:00
|
|
|
|
Providing a .deb installer is on our short\-list of things to do; until then
|
|
|
|
|
this is the best way to install Salt on Debian and Ubuntu systems:
|
|
|
|
|
.INDENT 0.0
|
|
|
|
|
.IP 1. 3
|
|
|
|
|
Install the prerequisite packages:
|
2011-07-09 23:13:08 +00:00
|
|
|
|
.sp
|
2011-08-27 17:38:12 +00:00
|
|
|
|
.nf
|
|
|
|
|
.ft C
|
|
|
|
|
aptitude install python\-setuptools python\-yaml python\-crypto python\-m2crypto cython libzmq\-dev
|
|
|
|
|
.ft P
|
|
|
|
|
.fi
|
|
|
|
|
.IP Note
|
|
|
|
|
Installing on Ubuntu Lucid (10.04 LTS)
|
2011-07-09 23:13:08 +00:00
|
|
|
|
.sp
|
2011-08-27 17:38:12 +00:00
|
|
|
|
The ZeroMQ package is available starting with Maverick but it is not
|
|
|
|
|
yet available in Lucid backports. Fortunately, Chris Lea has made a
|
|
|
|
|
\fI\%ZeroMQ PPA\fP available. Install it before installing Salt:
|
2011-07-09 23:13:08 +00:00
|
|
|
|
.sp
|
2011-08-27 17:38:12 +00:00
|
|
|
|
.nf
|
|
|
|
|
.ft C
|
|
|
|
|
aptitude install python\-software\-properties
|
|
|
|
|
add\-apt\-repository ppa:chris\-lea/zeromq
|
|
|
|
|
aptitude update
|
|
|
|
|
aptitude install libzmq\-dev
|
|
|
|
|
.ft P
|
|
|
|
|
.fi
|
|
|
|
|
.RE
|
|
|
|
|
.IP 2. 3
|
|
|
|
|
Grab the latest Python ZeroMQ bindings:
|
2011-07-09 23:13:08 +00:00
|
|
|
|
.sp
|
2011-08-27 17:38:12 +00:00
|
|
|
|
.nf
|
|
|
|
|
.ft C
|
|
|
|
|
easy_install pyzmq
|
|
|
|
|
.ft P
|
|
|
|
|
.fi
|
|
|
|
|
.IP 3. 3
|
|
|
|
|
Install Salt:
|
2011-07-09 23:13:08 +00:00
|
|
|
|
.sp
|
2011-08-27 17:38:12 +00:00
|
|
|
|
.nf
|
|
|
|
|
.ft C
|
|
|
|
|
easy_install \-\-install\-layout=deb https://github.com/downloads/thatch45/salt/salt\-0.9.0\&.tar.gz
|
|
|
|
|
.ft P
|
|
|
|
|
.fi
|
2011-07-09 23:13:08 +00:00
|
|
|
|
.sp
|
2011-08-27 17:38:12 +00:00
|
|
|
|
Please take note of the \fB\-\-install\-layout=deb\fP flag. This is important
|
|
|
|
|
for a functioning installation of Salt.
|
|
|
|
|
.UNINDENT
|
|
|
|
|
.SS Installing from the source tarball
|
|
|
|
|
.INDENT 0.0
|
|
|
|
|
.IP 1. 3
|
|
|
|
|
Download the latest source tarball from the GitHub downloads directory for
|
|
|
|
|
the Salt project: \fI\%https://github.com/thatch45/salt/downloads\fP
|
|
|
|
|
.IP 2. 3
|
|
|
|
|
Untar the tarball and run the \fBsetup.py\fP as root:
|
|
|
|
|
.UNINDENT
|
2011-07-09 23:13:08 +00:00
|
|
|
|
.sp
|
2011-08-27 17:38:12 +00:00
|
|
|
|
.nf
|
|
|
|
|
.ft C
|
|
|
|
|
tar xvf salt\-0.9.0\&.tar.gz
|
|
|
|
|
cd salt\-0.9.0
|
|
|
|
|
python2 setup.py install
|
|
|
|
|
.ft P
|
|
|
|
|
.fi
|
|
|
|
|
.SS Salt dependencies
|
2011-07-09 23:13:08 +00:00
|
|
|
|
.sp
|
2011-08-27 17:38:12 +00:00
|
|
|
|
This is a basic Python setup, nothing fancy. Salt does require a number of
|
|
|
|
|
dependencies though, all of which should be available in your distribution\(aqs
|
|
|
|
|
packages.
|
|
|
|
|
.INDENT 0.0
|
|
|
|
|
.IP \(bu 2
|
|
|
|
|
\fI\%Python 2.6\fP
|
|
|
|
|
.IP \(bu 2
|
|
|
|
|
\fI\%pyzmq\fP \- ZeroMQ Python bindings
|
|
|
|
|
.IP \(bu 2
|
|
|
|
|
\fI\%M2Crypto\fP \- Python OpenSSL wrapper
|
|
|
|
|
.IP \(bu 2
|
|
|
|
|
\fI\%YAML\fP \- Python YAML bindings
|
|
|
|
|
.IP \(bu 2
|
|
|
|
|
\fI\%PyCrypto\fP \- The Python cryptography toolkit
|
|
|
|
|
.UNINDENT
|
2011-07-09 23:13:08 +00:00
|
|
|
|
.sp
|
2011-08-27 17:38:12 +00:00
|
|
|
|
Optional Dependencies:
|
|
|
|
|
.INDENT 0.0
|
|
|
|
|
.IP \(bu 2
|
|
|
|
|
gcc \- dynamic \fI\%Cython\fP module compiling
|
|
|
|
|
.UNINDENT
|
|
|
|
|
.SS Configuring Salt
|
2011-07-09 23:13:08 +00:00
|
|
|
|
.sp
|
2011-08-27 17:38:12 +00:00
|
|
|
|
Salt configuration is very simple. The default configuration for the
|
|
|
|
|
\fImaster\fP will work for most installations and the only requirement for
|
|
|
|
|
setting up a \fIminion\fP is to set the location of the master in the minion
|
|
|
|
|
configuration file. The configuration files will be installed to
|
|
|
|
|
\fB/etc/salt\fP and are named after the respective components,
|
|
|
|
|
\fB/etc/salt/master\fP and \fB/etc/salt/minion\fP.
|
2011-07-09 23:13:08 +00:00
|
|
|
|
.sp
|
2011-08-27 17:38:12 +00:00
|
|
|
|
To make a minion check into the correct master simply edit the
|
|
|
|
|
\fBmaster\fP variable in the minion configuration file to reference
|
|
|
|
|
the master DNS name or IPv4 address.
|
|
|
|
|
.IP "See also"
|
2011-07-09 23:13:08 +00:00
|
|
|
|
.sp
|
2011-08-27 17:38:12 +00:00
|
|
|
|
For further information consult the \fBconfiguration guide\fP.
|
|
|
|
|
.RE
|
|
|
|
|
.SS Running Salt
|
|
|
|
|
.INDENT 0.0
|
|
|
|
|
.IP 1. 3
|
|
|
|
|
Start the \fImaster\fP in the foreground (to daemonize the process, pass
|
|
|
|
|
the \fI\-d flag\fP):
|
2011-07-09 23:13:08 +00:00
|
|
|
|
.sp
|
2011-08-27 17:38:12 +00:00
|
|
|
|
.nf
|
|
|
|
|
.ft C
|
|
|
|
|
salt\-master
|
|
|
|
|
.ft P
|
|
|
|
|
.fi
|
|
|
|
|
.IP 2. 3
|
|
|
|
|
Start the \fIminion\fP in the foreground (to daemonize the process, pass
|
|
|
|
|
the \fI\-d flag\fP):
|
2011-07-09 23:13:08 +00:00
|
|
|
|
.sp
|
2011-08-27 17:38:12 +00:00
|
|
|
|
.nf
|
|
|
|
|
.ft C
|
|
|
|
|
salt\-minion
|
|
|
|
|
.ft P
|
|
|
|
|
.fi
|
|
|
|
|
.UNINDENT
|
|
|
|
|
.IP "See also"
|
2011-05-30 22:24:23 +00:00
|
|
|
|
.sp
|
2011-08-27 17:38:12 +00:00
|
|
|
|
\fBsalt\-master manpage\fP and
|
|
|
|
|
\fBsalt\-minion manpage\fP
|
|
|
|
|
.RE
|
|
|
|
|
.SS Arch Linux init scripts
|
2011-05-30 22:24:23 +00:00
|
|
|
|
.sp
|
2011-08-27 17:38:12 +00:00
|
|
|
|
.nf
|
|
|
|
|
.ft C
|
|
|
|
|
/etc/rc.d/salt\-master start
|
|
|
|
|
/etc/rc.d/salt\-minion start
|
|
|
|
|
.ft P
|
|
|
|
|
.fi
|
|
|
|
|
.SS Manage Salt public keys
|
2011-05-30 22:24:23 +00:00
|
|
|
|
.sp
|
2011-08-27 17:38:12 +00:00
|
|
|
|
Salt manages authentication with RSA public keys. The keys are managed on the
|
|
|
|
|
\fImaster\fP via the \fBsalt\-key\fP command. Once a \fIminion\fP
|
|
|
|
|
checks into the master the master will save a copy of the minion key. Before
|
|
|
|
|
the master can send commands to the minion the key needs to be "accepted".
|
|
|
|
|
.INDENT 0.0
|
|
|
|
|
.IP 1. 3
|
|
|
|
|
List the accepted and unaccepted salt keys:
|
2011-05-30 22:24:23 +00:00
|
|
|
|
.sp
|
2011-08-27 17:38:12 +00:00
|
|
|
|
.nf
|
|
|
|
|
.ft C
|
|
|
|
|
salt\-key \-L
|
|
|
|
|
.ft P
|
|
|
|
|
.fi
|
|
|
|
|
.IP 2. 3
|
|
|
|
|
Accept a minion key:
|
2011-05-30 22:24:23 +00:00
|
|
|
|
.sp
|
2011-08-27 17:38:12 +00:00
|
|
|
|
.nf
|
|
|
|
|
.ft C
|
|
|
|
|
salt\-key \-a <minion id>
|
|
|
|
|
.ft P
|
|
|
|
|
.fi
|
2011-05-30 22:24:23 +00:00
|
|
|
|
.sp
|
2011-08-27 17:38:12 +00:00
|
|
|
|
or accept all unaccepted minion keys:
|
2011-05-30 22:24:23 +00:00
|
|
|
|
.sp
|
2011-08-27 17:38:12 +00:00
|
|
|
|
.nf
|
|
|
|
|
.ft C
|
|
|
|
|
salt\-key \-A
|
|
|
|
|
.ft P
|
|
|
|
|
.fi
|
|
|
|
|
.UNINDENT
|
|
|
|
|
.IP "See also"
|
2011-05-30 22:24:23 +00:00
|
|
|
|
.sp
|
2011-08-27 17:38:12 +00:00
|
|
|
|
\fBsalt\-key manpage\fP
|
|
|
|
|
.RE
|
|
|
|
|
.SS Order your minions around
|
2011-05-30 22:24:23 +00:00
|
|
|
|
.sp
|
2011-08-27 17:38:12 +00:00
|
|
|
|
Now that you have a \fImaster\fP and at least one \fIminion\fP
|
|
|
|
|
communicating with each other you can perform commands on the minion via the
|
|
|
|
|
\fBsalt\fP command. Salt calls are comprised of three main components:
|
2011-05-30 22:24:23 +00:00
|
|
|
|
.sp
|
2011-08-27 17:38:12 +00:00
|
|
|
|
.nf
|
|
|
|
|
.ft C
|
|
|
|
|
salt \(aq<target>\(aq <function> [arguments]
|
|
|
|
|
.ft P
|
|
|
|
|
.fi
|
|
|
|
|
.IP "See also"
|
2011-05-30 22:24:23 +00:00
|
|
|
|
.sp
|
2011-08-27 17:38:12 +00:00
|
|
|
|
\fBsalt manpage\fP
|
|
|
|
|
.RE
|
|
|
|
|
.SS target
|
2011-05-30 22:24:23 +00:00
|
|
|
|
.sp
|
2011-08-27 17:38:12 +00:00
|
|
|
|
The target component allows you to filter which minions should run the
|
|
|
|
|
following function. The default filter is a glob on the minion id. E.g.:
|
2011-05-30 22:24:23 +00:00
|
|
|
|
.sp
|
2011-08-27 17:38:12 +00:00
|
|
|
|
.nf
|
|
|
|
|
.ft C
|
|
|
|
|
salt \(aq*\(aq test.ping
|
|
|
|
|
salt \(aq*.example.org\(aq test.ping
|
|
|
|
|
.ft P
|
|
|
|
|
.fi
|
2011-05-30 22:24:23 +00:00
|
|
|
|
.sp
|
2011-08-27 17:38:12 +00:00
|
|
|
|
Targets can be based on minion system information using the grains system:
|
2011-05-30 22:24:23 +00:00
|
|
|
|
.sp
|
2011-08-27 17:38:12 +00:00
|
|
|
|
.nf
|
|
|
|
|
.ft C
|
|
|
|
|
salt \-G \(aqos:Ubuntu\(aq test.ping
|
|
|
|
|
.ft P
|
|
|
|
|
.fi
|
|
|
|
|
.IP "See also"
|
2011-05-30 22:24:23 +00:00
|
|
|
|
.sp
|
2011-08-27 17:38:12 +00:00
|
|
|
|
\fBGrains system\fP
|
|
|
|
|
.RE
|
2011-07-09 23:13:08 +00:00
|
|
|
|
.sp
|
2011-08-27 17:38:12 +00:00
|
|
|
|
Targets can be filtered by regular expression:
|
2011-07-09 23:13:08 +00:00
|
|
|
|
.sp
|
2011-08-27 17:38:12 +00:00
|
|
|
|
.nf
|
|
|
|
|
.ft C
|
|
|
|
|
salt \-E \(aqvirtmach[0\-9]\(aq test.ping
|
|
|
|
|
.ft P
|
|
|
|
|
.fi
|
2011-07-09 23:13:08 +00:00
|
|
|
|
.sp
|
2011-08-27 17:38:12 +00:00
|
|
|
|
Finally, targets can be explicitly specified in a list:
|
2011-07-09 23:13:08 +00:00
|
|
|
|
.sp
|
2011-08-27 17:38:12 +00:00
|
|
|
|
.nf
|
|
|
|
|
.ft C
|
|
|
|
|
salt \-L foo,bar,baz,quo test.ping
|
|
|
|
|
.ft P
|
|
|
|
|
.fi
|
|
|
|
|
.SS function
|
2011-07-09 23:13:08 +00:00
|
|
|
|
.sp
|
2011-08-27 17:38:12 +00:00
|
|
|
|
A function is some functionality provided by a module. Salt ships with a large
|
|
|
|
|
collection of available functions. List all available functions on your
|
|
|
|
|
minions:
|
2011-07-09 23:13:08 +00:00
|
|
|
|
.sp
|
2011-08-27 17:38:12 +00:00
|
|
|
|
.nf
|
|
|
|
|
.ft C
|
|
|
|
|
salt \(aq*\(aq sys.doc
|
|
|
|
|
.ft P
|
|
|
|
|
.fi
|
2011-07-09 23:13:08 +00:00
|
|
|
|
.sp
|
2011-08-27 17:38:12 +00:00
|
|
|
|
Here are some examples:
|
2011-07-09 23:13:08 +00:00
|
|
|
|
.sp
|
2011-08-27 17:38:12 +00:00
|
|
|
|
Show all currently available minions:
|
2011-07-09 23:13:08 +00:00
|
|
|
|
.sp
|
2011-08-27 17:38:12 +00:00
|
|
|
|
.nf
|
|
|
|
|
.ft C
|
|
|
|
|
salt \(aq*\(aq test.ping
|
|
|
|
|
.ft P
|
|
|
|
|
.fi
|
2011-07-09 23:13:08 +00:00
|
|
|
|
.sp
|
2011-08-27 17:38:12 +00:00
|
|
|
|
Run an arbitrary shell command:
|
2011-07-09 23:13:08 +00:00
|
|
|
|
.sp
|
2011-08-27 17:38:12 +00:00
|
|
|
|
.nf
|
|
|
|
|
.ft C
|
|
|
|
|
salt \(aq*\(aq cmd.run \(aquname \-a\(aq
|
|
|
|
|
.ft P
|
|
|
|
|
.fi
|
|
|
|
|
.IP "See also"
|
2011-07-09 23:13:08 +00:00
|
|
|
|
.sp
|
2011-08-27 17:38:12 +00:00
|
|
|
|
\fBthe full list of modules\fP
|
|
|
|
|
.RE
|
|
|
|
|
.SS arguments
|
2011-07-09 23:13:08 +00:00
|
|
|
|
.sp
|
2011-08-27 17:38:12 +00:00
|
|
|
|
Space\-delimited arguments to the function:
|
2011-07-09 23:13:08 +00:00
|
|
|
|
.sp
|
2011-08-27 17:38:12 +00:00
|
|
|
|
.nf
|
|
|
|
|
.ft C
|
|
|
|
|
salt \(aq*\(aq cmd.exec_code python \(aqimport sys; print sys.version\(aq
|
|
|
|
|
.ft P
|
|
|
|
|
.fi
|
2011-07-09 23:13:08 +00:00
|
|
|
|
.SS New Features
|
|
|
|
|
.SS Salt Run
|
|
|
|
|
.sp
|
|
|
|
|
A big feature is the addition of Salt run, the \fBsalt\-run\fP command allows for
|
|
|
|
|
master side execution modules to be made that gather specific information or
|
|
|
|
|
execute custom routines from the master.
|
|
|
|
|
.sp
|
|
|
|
|
Documentation for salt\-run can be found here:
|
|
|
|
|
.sp
|
|
|
|
|
\fI\%http://saltstack.org/ref/runners.html\fP
|
|
|
|
|
.SS Refined Outputters
|
|
|
|
|
.sp
|
|
|
|
|
One problem often complained about in salt was the fact that the output was
|
|
|
|
|
so messy. Thanks to help from Jeff Schroeder a cleaner interface for the
|
|
|
|
|
command output for the Salt cli has been made. This new interface makes
|
|
|
|
|
adding new printout formats easy and additions to the capabilities of minion
|
|
|
|
|
modules makes it possible to set the printout mode or \fBoutputter\fP for
|
|
|
|
|
functions in minion modules.
|
|
|
|
|
.SS Cross Calling Salt Modules
|
|
|
|
|
.sp
|
|
|
|
|
Salt modules can now call each other, the \fB__salt__\fP dict has been added to
|
|
|
|
|
the predefined references in minion modules. This new feature is documented in
|
|
|
|
|
the modules documentation:
|
|
|
|
|
.sp
|
|
|
|
|
\fI\%http://saltstack.org/ref/modules/index.html\fP
|
|
|
|
|
.SS Watch Option Added to Salt State System
|
|
|
|
|
.sp
|
|
|
|
|
Now in Salt states you can set the watch option, this will allow watch enabled
|
|
|
|
|
states to change based on a change in the other defined states. This is similar
|
|
|
|
|
to subscribe and notify statements in puppet.
|
|
|
|
|
.SS Root Dir Option
|
|
|
|
|
.sp
|
|
|
|
|
Travis Cline has added the ability to define the option \fBroot_dir\fP which
|
|
|
|
|
allows the salt minion to operate in a subdir. This is a strong move in
|
|
|
|
|
supporting the minion running as an unprivileged user
|
|
|
|
|
.SS Config Files Defined in Variables
|
|
|
|
|
.sp
|
|
|
|
|
Thanks again to Travis Cline, the master and minion configuration file locations
|
|
|
|
|
can be defined in environment variables now.
|
|
|
|
|
.SS New Modules
|
|
|
|
|
.sp
|
|
|
|
|
Quite a few new modules, states, returners and runners have been made.
|
|
|
|
|
.SS New Minion Modules
|
|
|
|
|
.SS apt
|
|
|
|
|
.sp
|
|
|
|
|
Support for apt\-get has been added, this adds greatly improved Debian and
|
|
|
|
|
Ubuntu support to Salt!
|
|
|
|
|
.SS useradd and groupadd
|
|
|
|
|
.sp
|
|
|
|
|
Support for manipulating users and groups on Unix\-like systems.
|
|
|
|
|
.SS moosefs
|
|
|
|
|
.sp
|
|
|
|
|
Initial support for reporting on aspects of the distributed file system,
|
|
|
|
|
MooseFS. For more information on MooseFS please see: \fI\%http://moosefs.org\fP
|
|
|
|
|
.sp
|
|
|
|
|
Thanks to Joseph Hall for his work on MooseFS support.
|
|
|
|
|
.SS mount
|
|
|
|
|
.sp
|
|
|
|
|
Manage mounts and the fstab.
|
|
|
|
|
.SS puppet
|
|
|
|
|
.sp
|
|
|
|
|
Execute puppet on remote systems.
|
|
|
|
|
.SS shadow
|
|
|
|
|
.sp
|
|
|
|
|
Manipulate and manage the user password file.
|
|
|
|
|
.SS ssh
|
|
|
|
|
.sp
|
|
|
|
|
Interact with ssh keys.
|
|
|
|
|
.SS New States
|
|
|
|
|
.SS user and group
|
|
|
|
|
.sp
|
|
|
|
|
Support for managing users and groups in Salt States.
|
|
|
|
|
.SS mount
|
|
|
|
|
.sp
|
|
|
|
|
Enforce mounts and the fstab.
|
|
|
|
|
.SS New Returners
|
|
|
|
|
.SS mongo_return
|
|
|
|
|
.sp
|
|
|
|
|
Send the return information to a mongodb server.
|
|
|
|
|
.SS New Runners
|
|
|
|
|
.SS manage
|
|
|
|
|
.sp
|
|
|
|
|
Display minions that are up or down.
|
2011-08-27 17:38:12 +00:00
|
|
|
|
.SH INDICES, GLOSSARY AND TABLES
|
2011-05-30 22:24:23 +00:00
|
|
|
|
.INDENT 0.0
|
|
|
|
|
.IP \(bu 2
|
|
|
|
|
\fIgenindex\fP
|
|
|
|
|
.IP \(bu 2
|
|
|
|
|
\fImodindex\fP
|
|
|
|
|
.IP \(bu 2
|
|
|
|
|
\fIsearch\fP
|
|
|
|
|
.UNINDENT
|
|
|
|
|
.SH AUTHOR
|
|
|
|
|
Thomas S. Hatch <thatch@gmail.com> and many others, please see the Authors file
|
|
|
|
|
.SH COPYRIGHT
|
2011-07-09 23:13:08 +00:00
|
|
|
|
2011, Thomas S. Hatch
|
2011-05-30 22:24:23 +00:00
|
|
|
|
.\" Generated by docutils manpage writer.
|
|
|
|
|
.\"
|
|
|
|
|
.
|