[develop] Merge forward from 2016.3 to develop (#32494)
* fix sorting by latest version when called with an attribute
* remove reference to master_alive_check
* Fixes saltstack/salt#28262
* Resolve memory leak in authentication
* outputter virt_list does not exist anymore
* Update proxmox documentation
* Fix documentation on boto_asg and boto_elb modules and states
* modules.win_timezone: don't list all zones in debug log
* Correcty index glusterfs bricks
Fixes issue #32311
* Cleaner deprecation process with decorators
* Add deprecation decorator scaffold
* Capture type error and unhandled exceptions while function calls
* Aware of the current and future version of deprecation
* Implement initially is_deprecated decorator
* Add an alias for the capitalization
* Fix capitalization easier way
* Remove an extra line
* Add successor name to the deprecation decorator.
* Granulate logging and error messages.
* Implement function swapper
* Raise later the caught exception
* Clarify exception message
* Save function original name
* Remove an extra line
* Hide an alternative hidden function name in the error message, preserving the error itself
* Rename variable as private
* Add a method to detect if a function is using its previous version
* Message to the log and/or raise an exception accordingly to the status of used function
* Log an error along with the exception
* Add internal method documentation
* Add documentation and usage process for decorator "is_deprecated"
* Add documentation and process usage for the decorator "with_deprecated"
* Hide private method name
* Fix PEP8, re-word the error message
* Deprecate basic uptime function
* Add initial decorator unit test
* Rename old/new functions, mock versions
* Move frequent data to the test setup
* Add logging on EOL exception
* Rename and document high to low version test on is_deprecated
* Implement a test on low to high version of is_deprecated decorator
* Add a correction to the test description
* Remove a dead code
* Implement a test for high to low version on is_deprecated, using with_successor param
* Correct typso adn mistaeks
* Implement high to low version with successor param on is_deprecated
* Setup a virtual name for the module
* Implement test for with_deprecated should raise an exception if same deprecated function not found
* Implement test for with_deprecated an old function is picked up if configured
* Correct test description purpose
* Implement test with_deprecated when no deprecation is requested
* Add logging test to the configured deprecation request
* Add logging testing when deprecated version wasn't requested
* Implement test EOL for with_deprecated decorator
* Correct test explanation
* Rename the test
* Implement with_deprecated no EOL, deprecated other function name
* Implement with_deprecated, deprecated other function name, EOL reached
* Add test description for the with_deprecated + with_name + EOL
* Fix confusing test names
* Add logging test to the is_deprecated decorator when function as not found.
* Add more test point to each test, remove empty lines
* Bugfix: at certain conditions a wrong alias name is reported to the log
* Fix a typo in a comment
* Add test for the logging
* Disable a pylint: None will _never_ be raised
* Fix test for the deprecated "status.uptime" version
* Bugfix: Do not yank raised exceptions
* Remove unnecessary decorator
* Add test for the new uptime
* Add test for the new uptime fails when /proc/uptime does not exists
* Rename old test case
* Skip test for the UTC time, unless freeze time is used.
* Fix pylint
* Fix documentation
* Bugfix: proxy-pass the docstring of the decorated function
* Lint fix
* Fixes saltstack/salt#28262 for 2015.5 branch
* Update master config docs
* Improve git_pillar documentation/logging
* Add note about different behavior of top file in git_pillar
* Make log entry for a missing pillar SLS file more accurate for git_pillar
* FreeBSD supports packages in format java/openjdk7 so the prior commit broke that functionality. Check freebsd/pkg#1409 for more info.
* FreeBSD supports packages in format java/openjdk7 so the prior commit broke that functionality. Check freebsd/pkg#1409 for more info.
* Update glusterfs_test to be inline with #32312
* Fix salt-cloud paralell provisioning
Closes #31632
* Ignore Raspbian in service.py __virtual__ (#32421)
* Ignore Raspbian in service.py __virtual__
This prevents more than one execution module from trying to load as the
service virtual module.
Refs: #32413
* pack __salt__ before loading provider overrides
We can (and should) pack here since we're just packing a reference to the
object. __salt__ needs to be available when we're loading our provider
overrides
* Fix broken __salt__ dict in provider override
Using ret.items() here sets ``__salt__`` to its items (tuple containing
function name and reference), breaking usage of ``__salt__`` inside
overridden functions.
* Merge #32293 with test fixes (#32418)
* Fix issue #11497
* Remove check for working directory presence in tests
* Fix Domainname introspection
Default value needs to be extracted from the container itself,
because dockerd set Domainname value when network_mode=host.
* Add pgjsonb_queue to queue doc index
* Pylint fixes
* Pass parser options into batch mode
Resolves #31738
* Changed the target file in file.symlink test (#32443)
* Argument name in docs should match actual arg name (#32445)
Fixes #31851
* tests.integration: bypass MacOS TMPDIR, gettempdir (#32447)
Updates 0edd532, 8f558a5.
When logging in as root over `ssh root@host`, `$TMPDIR` and
`tempfile.gettempdir()` are both set to a variation of:
```
/private/var/folders/zz/zyxvpxvq6csfxvn_n0000000000000/T/
```
When logging in as root over `sudo -i`, `$TMPDIR` is unset and
`tempfile.gettempdir()` is set to `/tmp`.
My guess is that the second case is an unintended or uncorrected omision
by Apple as they have introduced the longer, randomized temp path in a
recent version of MacOS.
* Issue #28706: Fix state user.present behavior. (#32448)
- As mentionned in issue #28706, state user.present no longer remove
user from groups if the keyword 'groups' with empty value '[]' is not
explicitly set, salt will assume current groups are still wanted.
* tests.integration: fix 4230c8a
* Move the tables of virtual modules to individual documentation pages
* Add new doc pages to toctree
* Add external ref to windows package manager docs
* Improve docstrings
* Add documentation on virtual module provider overrides to the module docs
* Clarify the scope of the provider param in states.
* Add link to provider override docs to all package providers
* Add link to provider override docs to all service providers
* Add link to provider override docs to all user providers
* dd link to provider override docs to all shadow providers
* Add link to provider override docs to all group providers
* Backport 31164 and 31364 (#32474)
* Don't send REQ while another one is waiting for response.
The message has to be removed from the queue the only *after* it's
already processed to don't confuse send() functionality that expects
empty queue means: there's no active sendings.
* Fixed zeromq ReqMessageClient destroy
* Add link to provider override docs to opkg.py
This is a companion to https://github.com/saltstack/salt/pull/32458, but
this module was not added until the 2016.3 branch, so the documentation
is being updated there for this module.
* Add documentation for some master/minion configs (#32454)
Refs #32400
Adds docs for:
- cli_summary
- event_return_queue
- event_return_whitelist
- event_return_blacklist
- file_recv_max_size
- fileserver_followsymlinks
- fileserver_ignoresymlinks
- fileserver_limit_traversal
* Automatically detect correct MySQL password column for 5.7 and fix setting passwords (#32440)
* Automatically detect MySQL password column
* Fix changing password in MySQL 5.7
* Fix lint test
* Fix unit tests (?)
They will still fail if "authentication_string" is legitimately the right column name, but I don't know what to do about that.
* Additional unit test fix
* Only unsub if we have a jid
Closes #32479
2016-04-11 23:07:15 +00:00
|
|
|
.. _states-tutorial:
|
|
|
|
|
2014-03-14 02:02:33 +00:00
|
|
|
=====================================
|
|
|
|
States tutorial, part 1 - Basic Usage
|
|
|
|
=====================================
|
2011-10-30 16:21:11 +00:00
|
|
|
|
|
|
|
The purpose of this tutorial is to demonstrate how quickly you can configure a
|
|
|
|
system to be managed by Salt States. For detailed information about the state
|
2016-12-15 22:36:44 +00:00
|
|
|
system please refer to the full :ref:`states reference <state-system-reference>`.
|
2011-10-30 16:21:11 +00:00
|
|
|
|
2011-11-16 16:20:59 +00:00
|
|
|
This tutorial will walk you through using Salt to configure a minion to run the
|
|
|
|
Apache HTTP server and to ensure the server is running.
|
2011-10-30 16:21:11 +00:00
|
|
|
|
2013-01-24 06:46:12 +00:00
|
|
|
.. include:: /_incl/requisite_incl.rst
|
2011-10-30 20:33:24 +00:00
|
|
|
|
2011-11-16 16:20:59 +00:00
|
|
|
Setting up the Salt State Tree
|
|
|
|
==============================
|
|
|
|
|
2013-03-18 19:59:27 +00:00
|
|
|
States are stored in text files on the master and transferred to the minions on
|
2011-11-16 16:20:59 +00:00
|
|
|
demand via the master's File Server. The collection of state files make up the
|
2014-02-28 01:27:07 +00:00
|
|
|
``State Tree``.
|
2011-11-16 16:20:59 +00:00
|
|
|
|
2014-12-11 15:50:14 +00:00
|
|
|
To start using a central state system in Salt, the Salt File Server must first
|
2013-04-06 00:56:42 +00:00
|
|
|
be set up. Edit the master config file (:conf_master:`file_roots`) and
|
2011-11-16 16:20:59 +00:00
|
|
|
uncomment the following lines:
|
|
|
|
|
|
|
|
.. code-block:: yaml
|
|
|
|
|
|
|
|
file_roots:
|
|
|
|
base:
|
|
|
|
- /srv/salt
|
|
|
|
|
2012-02-29 20:45:46 +00:00
|
|
|
.. note::
|
|
|
|
|
|
|
|
If you are deploying on FreeBSD via ports, the ``file_roots`` path defaults
|
|
|
|
to ``/usr/local/etc/salt/states``.
|
|
|
|
|
2011-11-16 16:20:59 +00:00
|
|
|
Restart the Salt master in order to pick up this change:
|
|
|
|
|
|
|
|
.. code-block:: bash
|
|
|
|
|
2013-08-12 03:17:47 +00:00
|
|
|
pkill salt-master
|
|
|
|
salt-master -d
|
2011-11-16 16:20:59 +00:00
|
|
|
|
|
|
|
Preparing the Top File
|
2011-10-30 16:21:11 +00:00
|
|
|
======================
|
|
|
|
|
2013-04-06 00:56:42 +00:00
|
|
|
On the master, in the directory uncommented in the previous step,
|
2012-06-05 20:54:21 +00:00
|
|
|
(``/srv/salt`` by default), create a new file called
|
|
|
|
:conf_master:`top.sls <state_top>` and add the following:
|
2011-11-16 16:20:59 +00:00
|
|
|
|
|
|
|
.. code-block:: yaml
|
|
|
|
|
|
|
|
base:
|
|
|
|
'*':
|
|
|
|
- webserver
|
|
|
|
|
2014-02-28 01:27:07 +00:00
|
|
|
The :ref:`top file <states-top>` is separated into environments (discussed
|
|
|
|
later). The default environment is ``base``. Under the ``base`` environment a
|
|
|
|
collection of minion matches is defined; for now simply specify all hosts
|
|
|
|
(``*``).
|
2011-11-16 16:20:59 +00:00
|
|
|
|
2013-06-21 00:51:19 +00:00
|
|
|
.. _targeting-minions:
|
2011-11-16 16:20:59 +00:00
|
|
|
.. admonition:: Targeting minions
|
|
|
|
|
|
|
|
The expressions can use any of the targeting mechanisms used by Salt —
|
2016-12-15 22:36:44 +00:00
|
|
|
minions can be matched by glob, PCRE regular expression, or by :ref:`grains
|
|
|
|
<targeting-grains>`. For example:
|
2013-08-12 03:17:47 +00:00
|
|
|
|
|
|
|
.. code-block:: yaml
|
2011-11-16 16:20:59 +00:00
|
|
|
|
|
|
|
base:
|
2016-05-27 10:58:05 +00:00
|
|
|
'os:Fedora':
|
2011-11-16 16:20:59 +00:00
|
|
|
- match: grain
|
|
|
|
- webserver
|
|
|
|
|
2014-03-14 02:02:33 +00:00
|
|
|
Create an ``sls`` file
|
|
|
|
======================
|
2011-11-16 16:20:59 +00:00
|
|
|
|
2014-03-07 19:27:05 +00:00
|
|
|
In the same directory as the :ref:`top file <states-top>`, create a file
|
2014-02-28 01:27:07 +00:00
|
|
|
named ``webserver.sls``, containing the following:
|
2011-10-30 16:21:11 +00:00
|
|
|
|
|
|
|
.. code-block:: yaml
|
|
|
|
|
2011-11-16 16:20:59 +00:00
|
|
|
apache: # ID declaration
|
2011-10-30 16:21:11 +00:00
|
|
|
pkg: # state declaration
|
2011-11-16 16:20:59 +00:00
|
|
|
- installed # function declaration
|
2011-10-30 16:21:11 +00:00
|
|
|
|
2014-02-28 01:27:07 +00:00
|
|
|
The first line, called the :ref:`id-declaration`, is an arbitrary identifier.
|
2014-12-11 15:50:14 +00:00
|
|
|
In this case it defines the name of the package to be installed.
|
2013-11-16 05:15:34 +00:00
|
|
|
|
|
|
|
.. note::
|
|
|
|
|
|
|
|
The package name for the Apache httpd web server may differ depending on
|
|
|
|
OS or distro — for example, on Fedora it is ``httpd`` but on
|
|
|
|
Debian/Ubuntu it is ``apache2``.
|
2011-10-30 16:21:11 +00:00
|
|
|
|
2014-02-28 01:27:07 +00:00
|
|
|
The second line, called the :ref:`state-declaration`, defines which of the Salt
|
|
|
|
States we are using. In this example, we are using the :mod:`pkg state
|
2011-10-30 16:21:11 +00:00
|
|
|
<salt.states.pkg>` to ensure that a given package is installed.
|
|
|
|
|
2014-02-28 01:27:07 +00:00
|
|
|
The third line, called the :ref:`function-declaration`, defines which function
|
2011-11-16 16:20:59 +00:00
|
|
|
in the :mod:`pkg state <salt.states.pkg>` module to call.
|
2011-10-30 16:21:11 +00:00
|
|
|
|
|
|
|
.. admonition:: Renderers
|
|
|
|
|
2014-02-28 01:27:07 +00:00
|
|
|
States ``sls`` files can be written in many formats. Salt requires only
|
2011-10-30 16:21:11 +00:00
|
|
|
a simple data structure and is not concerned with how that data structure
|
2011-11-16 16:20:59 +00:00
|
|
|
is built. Templating languages and `DSLs`_ are a dime-a-dozen and everyone
|
|
|
|
has a favorite.
|
|
|
|
|
2016-12-15 22:36:44 +00:00
|
|
|
Building the expected data structure is the job of Salt :ref:`renderers`
|
|
|
|
and they are dead-simple to write.
|
2011-10-30 16:21:11 +00:00
|
|
|
|
2012-03-09 04:05:52 +00:00
|
|
|
In this tutorial we will be using YAML in Jinja2 templates, which is the
|
2013-04-06 00:56:42 +00:00
|
|
|
default format. The default can be changed by editing
|
2011-10-31 01:23:12 +00:00
|
|
|
:conf_master:`renderer` in the master configuration file.
|
2011-10-30 16:21:11 +00:00
|
|
|
|
2011-11-16 16:20:59 +00:00
|
|
|
.. _`DSLs`: http://en.wikipedia.org/wiki/Domain-specific_language
|
|
|
|
|
2014-06-07 19:27:26 +00:00
|
|
|
.. _running-highstate:
|
|
|
|
|
2011-10-30 16:21:11 +00:00
|
|
|
Install the package
|
|
|
|
===================
|
|
|
|
|
2011-11-16 16:20:59 +00:00
|
|
|
Next, let's run the state we created. Open a terminal on the master and run:
|
2011-10-30 16:21:11 +00:00
|
|
|
|
|
|
|
.. code-block:: bash
|
|
|
|
|
2016-03-22 03:56:17 +00:00
|
|
|
salt '*' state.apply
|
2011-10-30 16:21:11 +00:00
|
|
|
|
2016-03-22 03:56:17 +00:00
|
|
|
Our master is instructing all targeted minions to run :func:`state.apply
|
2016-06-16 19:04:04 +00:00
|
|
|
<salt.modules.state.apply>`. When this function is executed without any SLS
|
2016-03-22 03:56:17 +00:00
|
|
|
targets, a minion will download the :ref:`top file <states-top>` and attempt to
|
|
|
|
match the expressions within it. When the minion does match an expression the
|
|
|
|
modules listed for it will be downloaded, compiled, and executed.
|
|
|
|
|
|
|
|
.. note::
|
2016-03-22 15:58:45 +00:00
|
|
|
This action is referred to as a "highstate", and can be run using the
|
|
|
|
:py:func:`state.highstate <salt.modules.state.highstate>` function.
|
|
|
|
However, to make the usage easier to understand ("highstate" is not
|
|
|
|
necessarily an intuitive name), a :py:func:`state.apply
|
|
|
|
<salt.modules.state.apply_>` function was added in version 2015.5.0, which
|
|
|
|
when invoked without any SLS names will trigger a highstate.
|
|
|
|
:py:func:`state.highstate <salt.modules.state.highstate>` still exists and
|
|
|
|
can be used, but the documentation (as can be seen above) has been updated
|
|
|
|
to reference :py:func:`state.apply <salt.modules.state.apply_>`, so keep
|
|
|
|
the following in mind as you read the documentation:
|
|
|
|
|
|
|
|
- :py:func:`state.apply <salt.modules.state.apply_>` invoked without any
|
|
|
|
SLS names will run :py:func:`state.highstate
|
|
|
|
<salt.modules.state.highstate>`
|
|
|
|
- :py:func:`state.apply <salt.modules.state.apply_>` invoked with SLS names
|
|
|
|
will run :py:func:`state.sls <salt.modules.state.sls>`
|
2011-10-30 16:21:11 +00:00
|
|
|
|
2011-11-16 16:20:59 +00:00
|
|
|
Once completed, the minion will report back with a summary of all actions taken
|
|
|
|
and all changes made.
|
2011-10-30 16:21:11 +00:00
|
|
|
|
2014-06-07 19:27:26 +00:00
|
|
|
.. warning::
|
|
|
|
|
|
|
|
If you have created :ref:`custom grain modules <writing-grains>`, they will
|
|
|
|
not be available in the top file until after the first :ref:`highstate
|
|
|
|
<running-highstate>`. To make custom grains available on a minion's first
|
2016-03-22 03:56:17 +00:00
|
|
|
:ref:`highstate <running-highstate>`, it is recommended to use :ref:`this
|
|
|
|
example <minion-start-reactor>` to ensure that the custom grains are synced
|
|
|
|
when the minion starts.
|
2014-06-07 19:27:26 +00:00
|
|
|
|
2013-06-21 00:51:19 +00:00
|
|
|
.. _sls-file-namespace:
|
|
|
|
.. admonition:: SLS File Namespace
|
|
|
|
|
|
|
|
Note that in the :ref:`example <targeting-minions>` above, the SLS file
|
|
|
|
``webserver.sls`` was referred to simply as ``webserver``. The namespace
|
2016-03-01 15:36:23 +00:00
|
|
|
for SLS files when referenced in :conf_master:`top.sls <state_top>` or an :ref:`include-declaration`
|
2015-01-20 04:46:03 +00:00
|
|
|
follows a few simple rules:
|
2013-06-21 00:51:19 +00:00
|
|
|
|
|
|
|
1. The ``.sls`` is discarded (i.e. ``webserver.sls`` becomes
|
|
|
|
``webserver``).
|
|
|
|
2. Subdirectories can be used for better organization.
|
2016-07-12 11:58:27 +00:00
|
|
|
a. Each subdirectory is represented with a dot (following the Python
|
|
|
|
import model) in Salt states and on the command line . ``webserver/dev.sls``
|
|
|
|
on the filesystem is referred to as ``webserver.dev`` in Salt
|
|
|
|
b. Because slashes are represented as dots, SLS files can not contain
|
|
|
|
dots in the name (other than the dot for the SLS suffix). The SLS
|
|
|
|
file ``webserver_1.0.sls`` can not be matched, and ``webserver_1.0``
|
|
|
|
would match the directory/file ``webserver_1/0.sls``
|
2016-03-01 15:36:23 +00:00
|
|
|
|
2013-06-21 00:51:19 +00:00
|
|
|
3. A file called ``init.sls`` in a subdirectory is referred to by the path
|
|
|
|
of the directory. So, ``webserver/init.sls`` is referred to as
|
|
|
|
``webserver``.
|
|
|
|
4. If both ``webserver.sls`` and ``webserver/init.sls`` happen to exist,
|
|
|
|
``webserver/init.sls`` will be ignored and ``webserver.sls`` will be the
|
|
|
|
file referred to as ``webserver``.
|
|
|
|
|
2011-11-16 16:20:59 +00:00
|
|
|
.. admonition:: Troubleshooting Salt
|
2011-10-30 16:21:11 +00:00
|
|
|
|
2013-04-06 00:56:42 +00:00
|
|
|
If the expected output isn't seen, the following tips can help to
|
2011-11-16 16:20:59 +00:00
|
|
|
narrow down the problem.
|
2011-10-30 16:21:11 +00:00
|
|
|
|
2011-11-16 16:20:59 +00:00
|
|
|
Turn up logging
|
|
|
|
Salt can be quite chatty when you change the logging setting to
|
2013-08-12 03:17:47 +00:00
|
|
|
``debug``:
|
|
|
|
|
|
|
|
.. code-block:: bash
|
2011-11-16 16:20:59 +00:00
|
|
|
|
|
|
|
salt-minion -l debug
|
|
|
|
|
|
|
|
Run the minion in the foreground
|
2015-06-05 23:32:35 +00:00
|
|
|
By not starting the minion in daemon mode (:option:`-d <salt-minion -d>`)
|
|
|
|
one can view any output from the minion as it works:
|
2013-08-12 03:17:47 +00:00
|
|
|
|
|
|
|
.. code-block:: bash
|
2011-11-16 16:20:59 +00:00
|
|
|
|
2016-03-22 03:56:17 +00:00
|
|
|
salt-minion
|
2011-11-16 16:20:59 +00:00
|
|
|
|
|
|
|
Increase the default timeout value when running :command:`salt`. For
|
2013-08-12 03:17:47 +00:00
|
|
|
example, to change the default timeout to 60 seconds:
|
|
|
|
|
|
|
|
.. code-block:: bash
|
2011-11-16 16:20:59 +00:00
|
|
|
|
|
|
|
salt -t 60
|
2011-10-30 16:21:11 +00:00
|
|
|
|
2013-08-12 03:17:47 +00:00
|
|
|
For best results, combine all three:
|
|
|
|
|
|
|
|
.. code-block:: bash
|
2011-10-30 16:21:11 +00:00
|
|
|
|
2016-03-22 03:56:17 +00:00
|
|
|
salt-minion -l debug # On the minion
|
|
|
|
salt '*' state.apply -t 60 # On the master
|
2011-10-30 16:21:11 +00:00
|
|
|
|
|
|
|
Next steps
|
|
|
|
==========
|
|
|
|
|
2011-11-16 16:20:59 +00:00
|
|
|
This tutorial focused on getting a simple Salt States configuration working.
|
2016-12-15 22:36:44 +00:00
|
|
|
:ref:`Part 2 <tutorial-states-part-2>` will build on this example to cover more advanced
|
2015-01-20 04:46:03 +00:00
|
|
|
``sls`` syntax and will explore more of the states that ship with Salt.
|