mirror of
https://github.com/valitydev/salt.git
synced 2024-11-07 08:58:59 +00:00
991 lines
37 KiB
ReStructuredText
991 lines
37 KiB
ReStructuredText
.. _release-2017-7-0:
|
|
|
|
===============================================
|
|
Salt 2017.7.0 Release Notes - Codename Nitrogen
|
|
===============================================
|
|
|
|
|
|
========
|
|
Python 3
|
|
========
|
|
|
|
The 2017.7 Salt Release adds initial Python 3 support.
|
|
|
|
The default Python version of Salt will remain Python 2, although Python 3 packages will be supplied for users who want to help test this new feature.
|
|
|
|
======================
|
|
Python 2.6 Deprecation
|
|
======================
|
|
|
|
Salt will no longer support Python 2.6. We will provide python2.7 packages on our repo_ for RedHat and CentOS 6 to ensure users can still run Salt on these platforms.
|
|
|
|
.. _repo: https://repo.saltstack.com/
|
|
|
|
As this will impact the installation of additional dependencies for salt modules please use pip packages if there is not a package available in a repository. You will need to install the python27-pip package to get access to the correct pip27 executable: ``yum install python27-pip``
|
|
|
|
|
|
============
|
|
Known Issues
|
|
============
|
|
The following salt-cloud drivers have known issues running with Python 3. These drivers will not work with Python 3, and Python 2.7 should be used instead:
|
|
|
|
- Joyent
|
|
|
|
- When running under Python 3, users who require Unicode support should ensure that a locale is set on their machines.
|
|
Users using the `C` locale are advised to switch to a UTF-aware locale to ensure proper functionality with Salt with Python 3.
|
|
|
|
|
|
Remember to update the Salt Master first
|
|
========================================
|
|
Salt's policy has always been that when upgrading, the minion should never be
|
|
on a newer version than the master. Specifically with this update, because of
|
|
changes in the fileclient, the 2017.7 minion requires a 2017.7 master.
|
|
|
|
Backwards compatiblity is still maintained, so older minions can still be used.
|
|
|
|
More information can be found in the :ref:`Salt FAQ<which-version>`
|
|
|
|
|
|
States Added for Management of systemd Unit Masking
|
|
===================================================
|
|
|
|
The :py:func:`service.masked <salt.states.service.masked>` and
|
|
:py:func:`service.umasked <salt.states.service.unmasked>` states have been
|
|
added to allow Salt to manage masking of systemd units.
|
|
|
|
Additionally, the following functions in the :mod:`systemd
|
|
<salt.modules.systemd>` execution module have changed to accomodate the fact
|
|
that indefinite and runtime masks can co-exist for the same unit:
|
|
|
|
- :py:func:`service.masked <salt.modules.systemd.masked>` - The return from
|
|
this function has changed from previous releases. Before, ``False`` would be
|
|
returned if the unit was not masked, and the output of ``systemctl is-enabled
|
|
<unit name>`` would be returned if the unit was masked. However, since
|
|
indefinite and runtime masks can exist for the same unit at the same time,
|
|
this function has been altered to accept a ``runtime`` argument. If ``True``,
|
|
the minion will be checked for a runtime mask assigned to the named unit. If
|
|
``False``, then the minion will be checked for an indefinite mask. If one is
|
|
found, ``True`` will be returned. If not, then ``False`` will be returned.
|
|
- :py:func:`service.masked <salt.modules.systemd.masked>` - This function used
|
|
to just run ``systemctl is-enabled <unit name>`` and based on the return
|
|
from this function the corresponding mask type would be removed. However, if
|
|
both runtime and indefinite masks are set for the same unit, then ``systemctl
|
|
is-enabled <unit name>`` would show just the indefinite mask. The indefinite
|
|
mask would be removed, but the runtime mask would remain. The function has
|
|
been modified to accept a ``runtime`` argument, and will attempt to remove a
|
|
runtime mask if that argument is set to ``True``. If set to ``False``, it
|
|
will attempt to remove an indefinite mask.
|
|
|
|
These new ``runtime`` arguments default to ``False``.
|
|
|
|
Pillar Encryption
|
|
=================
|
|
|
|
Beginning in 2016.3.0 the CLI pillar data passed to several functions could
|
|
conditionally be passed through a renderer to be decrypted. This functionality
|
|
has now been extended to pillar SLS files as well. See :ref:`here
|
|
<pillar-encryption>` for detailed documentation on this feature.
|
|
|
|
Grains Changes
|
|
==============
|
|
|
|
- The ``osmajorrelease`` grain has been changed from a string to an integer.
|
|
State files, especially those using a templating language like Jinja, may
|
|
need to be adjusted to account for this change.
|
|
- Add ability to specify disk backing mode in the VMWare salt cloud profile.
|
|
|
|
State Module Changes
|
|
====================
|
|
|
|
- The :py:func:`service.running <salt.states.service.running>` and
|
|
:py:func:`service.dead <salt.states.service.dead>` states now support a
|
|
``no_block`` argument which, when set to ``True`` on systemd minions, will
|
|
start/stop the service using the ``--no-block`` flag in the ``systemctl``
|
|
command. On non-systemd minions, a warning will be issued.
|
|
- The :py:func:`module.run <salt.states.module.run>` state has dropped its
|
|
previous syntax with ``m_`` prefix for reserved keywords. Additionally, it
|
|
allows running several functions in a batch.
|
|
|
|
.. note::
|
|
It is necessary to explicitly turn on the new behavior (see below)
|
|
|
|
.. code-block:: yaml
|
|
|
|
# Before
|
|
run_something:
|
|
module.run:
|
|
- name: mymodule.something
|
|
- m_name: 'some name'
|
|
- kwargs: {
|
|
first_arg: 'one',
|
|
second_arg: 'two',
|
|
do_stuff: 'True'
|
|
}
|
|
|
|
# After
|
|
run_something:
|
|
module.run:
|
|
- mymodule.something:
|
|
- name: some name
|
|
- first_arg: one
|
|
- second_arg: two
|
|
- do_stuff: True
|
|
|
|
Since a lot of users are already using :py:func:`module.run
|
|
<salt.states.module.run>` states, this new behavior must currently be
|
|
explicitly turned on, to allow users to take their time updating their SLS
|
|
files. However, please keep in mind that the new syntax will take effect in
|
|
the next feature release of Salt (Oxygen) and the old usage will no longer be
|
|
supported at that time.
|
|
|
|
Another feature of the new :py:func:`module.run <salt.states.module.run>` is that
|
|
it allows calling many functions in a single batch, such as:
|
|
|
|
.. code-block:: yaml
|
|
|
|
run_something:
|
|
module.run:
|
|
- mymodule.function_without_parameters:
|
|
- mymodule.another_function:
|
|
- myparam
|
|
- my_other_param
|
|
|
|
In a rare case that you have a function that needs to be called several times but
|
|
with the different parameters, an additional feature of "tagging" is to the
|
|
rescue. In order to tag a function, use a colon delimeter. For example:
|
|
|
|
.. code-block:: yaml
|
|
|
|
run_something:
|
|
module.run:
|
|
- mymodule.same_function:1:
|
|
- mymodule.same_function:2:
|
|
- myparam
|
|
- my_other_param
|
|
- mymodule.same_function:3:
|
|
- foo: bar
|
|
|
|
The example above will run `mymodule.same_function` three times with the
|
|
different parameters.
|
|
|
|
To enable the new behavior for :py:func:`module.run <salt.states.module.run>`,
|
|
add the following to the minion config file:
|
|
|
|
.. code-block:: yaml
|
|
|
|
use_superseded:
|
|
- module.run
|
|
|
|
- The default for the ``fingerprint_hash_type`` option used in the ``present``
|
|
function in the :mod:`ssh <salt.states.ssh_know_hosts>` state changed from
|
|
``md5`` to ``sha256``.
|
|
|
|
|
|
Execution Module Changes
|
|
========================
|
|
|
|
- Several functions in the :mod:`systemd <salt.modules.systemd>` execution
|
|
module have gained a ``no_block`` argument, which when set to ``True`` will
|
|
use ``--no-block`` in the ``systemctl`` command.
|
|
- In the :mod:`solarisips <salt.modules.solarisips>` ``pkg`` module, the
|
|
default value for the ``refresh`` argument to the ``list_upgrades`` function
|
|
has been changed from ``False`` to ``True``. This makes the function more
|
|
consistent with all of the other ``pkg`` modules (The other
|
|
``pkg.list_upgrades`` functions all defaulted to ``True``).
|
|
- The functions which handle masking in the :mod:`systemd
|
|
<salt.modules.systemd>` module have changed. These changes are described
|
|
above alongside the information on the new states which have been added to
|
|
manage masking of systemd units.
|
|
- The :py:func:`pkg.list_repo_pkgs <salt.modules.yumpkg.list_repo_pkgs>`
|
|
function for yum/dnf-based distros has had its default output format changed.
|
|
In prior releases, results would be organized by repository. Now, the default
|
|
for each package will be a simple list of versions. To get the old behavior,
|
|
pass ``byrepo=True`` to the function.
|
|
- A ``pkg.list_repo_pkgs`` function has been added for both
|
|
:py:func:`Debian/Ubuntu <salt.modules.aptpkg.list_repo_pkgs>` and
|
|
:py:func:`Arch Linux <salt.modules.pacman.list_repo_pkgs>`-based distros.
|
|
- The :mod:`system <salt.modules.system>` module changed its return format
|
|
from "HH:MM AM/PM" to "HH:MM:SS AM/PM" for `get_system_time`.
|
|
- The default for the ``fingerprint_hash_type`` option used in the
|
|
:mod:`ssh <salt.modules.ssh>` execution module changed from ``md5`` to
|
|
``sha256``.
|
|
|
|
|
|
Proxy Module Changes
|
|
====================
|
|
|
|
The :conf_proxy:`proxy_merge_grains_in_module` configuration variable
|
|
introduced in 2016.3, has been changed, defaulting to ``True``.
|
|
|
|
The connection with the remote device is kept alive by default, when the
|
|
module implements the ``alive`` function and :conf_proxy:`proxy_keep_alive`
|
|
is set to ``True``. The polling interval is set using the
|
|
:conf_proxy:`proxy_keep_alive_interval` option which defaults to 1 minute.
|
|
|
|
The developers are also able to use the :conf_proxy:`proxy_always_alive`,
|
|
when designing a proxy module flexible enough to open the
|
|
connection with the remote device only when required.
|
|
|
|
|
|
Wildcard Versions in :py:func:`pkg.installed <salt.states.pkg.installed>` States
|
|
================================================================================
|
|
|
|
- The :py:func:`pkg.installed <salt.states.pkg.installed>` state now supports
|
|
wildcards in package versions, for the following platforms:
|
|
|
|
- SUSE/openSUSE Leap/Thumbleweed
|
|
- Debian/Ubuntu
|
|
- RHEL/CentOS
|
|
- Arch Linux
|
|
|
|
This support also extends to any derivatives of these distros, which use the
|
|
:mod:`aptpkg <salt.modules.aptpkg>`, :mod:`yumpkg <salt.modules.yumpkg>`, or
|
|
:mod:`pacman <salt.modules.pacman>` providers for the ``pkg`` virtual module.
|
|
|
|
Using wildcards can be useful for packages where the release name is built into
|
|
the version in some way, such as for RHEL/CentOS which typically has version
|
|
numbers like ``1.2.34-5.el7``. An example of the usage for this would be:
|
|
|
|
.. code-block:: yaml
|
|
|
|
mypkg:
|
|
pkg.installed:
|
|
- version: '1.2.34*'
|
|
|
|
Master Configuration Additions
|
|
==============================
|
|
|
|
- :conf_master:`syndic_forward_all_events` - Option on multi-syndic or single
|
|
when connected to multiple masters to be able to send events to all connected
|
|
masters.
|
|
|
|
- :conf_master:`eauth_acl_module` - In case external auth is enabled master can
|
|
get authenticate and get the authorization list from different auth modules.
|
|
|
|
- :conf_master:`keep_acl_in_token` - Option that allows master to build ACL once
|
|
for each user being authenticated and keep it in the token.
|
|
|
|
Minion Configuration Additions
|
|
==============================
|
|
|
|
- :conf_minion:`pillarenv_from_saltenv` - When set to ``True`` (default is
|
|
``False``), the :conf_minion:`pillarenv` option will take the same value as
|
|
the effective saltenv when running states. This would allow a user to run
|
|
``salt '*' state.apply mysls saltenv=dev``, and the SLS for both the state
|
|
and pillar data would be sourced from the ``dev`` environment, essentially
|
|
the equivalent of running ``salt '*' state.apply mysls saltenv=dev
|
|
pillarenv=dev``. Note that if :conf_minion:`pillarenv` is set in the minion
|
|
config file, or if ``pillarenv`` is provided on the CLI, it will override
|
|
this option.
|
|
|
|
salt-api Changes
|
|
================
|
|
|
|
The ``rest_cherrypy`` netapi module has recieved a few minor improvements:
|
|
|
|
* A CORS bugfix.
|
|
* A new ``/token`` convenience endpoint to generate Salt eauth tokens.
|
|
* A proof-of-concept JavaScript single-page application intended to demonstrate
|
|
how to use the Server-Sent Events stream in an application. It is available
|
|
in a default install by visiting the ``/app`` URL in a browser.
|
|
|
|
Python API Changes
|
|
==================
|
|
|
|
``expr_form`` Deprecation
|
|
-------------------------
|
|
|
|
The :ref:`LocalClient <local-client>`'s ``expr_form`` argument has been
|
|
deprecated and renamed to ``tgt_type``. This change was made due to numerous
|
|
reports of confusion among community members, since the targeting method is
|
|
published to minions as ``tgt_type``, and appears as ``tgt_type`` in the job
|
|
cache as well.
|
|
|
|
While ``expr_form`` will continue to be supported until the **Fluorine**
|
|
release cycle (two major releases after this one), those who are using the
|
|
:ref:`LocalClient <local-client>` (either directly, or implictly via a
|
|
:ref:`netapi module <all-netapi-modules>`) are encouraged to update their code
|
|
to use ``tgt_type``.
|
|
|
|
``full_return`` Argument in ``LocalClient`` and ``RunnerClient``
|
|
----------------------------------------------------------------
|
|
|
|
An ``full_return`` argument has been added to the ``cmd`` and ``cmd_sync``
|
|
methods in ``LocalClient`` and ``RunnerClient`` which causes the return data
|
|
structure to include job meta data such as ``retcode``.
|
|
|
|
This is useful at the Python API:
|
|
|
|
.. code-block:: python
|
|
|
|
>>> import salt.client
|
|
>>> client = salt.client.LocalClient()
|
|
>>> client.cmd('*', 'cmd.run', ['return 1'], full_return=True)
|
|
{'jerry': {'jid': '20170520151213898053', 'ret': '', 'retcode': 1}}
|
|
|
|
As well as from salt-api:
|
|
|
|
.. code-block:: bash
|
|
|
|
% curl -b /tmp/cookies.txt -sS http://localhost:8000 \
|
|
-H 'Content-type: application/json' \
|
|
-d '[{
|
|
"client": "local",
|
|
"tgt": "*",
|
|
"fun": "cmd.run",
|
|
"arg": ["return 1"],
|
|
"full_return": true
|
|
}]'
|
|
|
|
{"return": [{"jerry": {"jid": "20170520151531477653", "retcode": 1, "ret": ""}}]}
|
|
|
|
Jinja
|
|
=====
|
|
|
|
Filters
|
|
-------
|
|
|
|
New filters in 2017.7.0:
|
|
|
|
- :jinja_ref:`to_bool`
|
|
- :jinja_ref:`exactly_n_true`
|
|
- :jinja_ref:`exactly_one_true`
|
|
- :jinja_ref:`quote`
|
|
- :jinja_ref:`regex_search`
|
|
- :jinja_ref:`regex_match`
|
|
- :jinja_ref:`uuid`
|
|
- :jinja_ref:`is_list`
|
|
- :jinja_ref:`is_iter`
|
|
- :jinja_ref:`min`
|
|
- :jinja_ref:`max`
|
|
- :jinja_ref:`avg`
|
|
- :jinja_ref:`union`
|
|
- :jinja_ref:`intersect`
|
|
- :jinja_ref:`difference`
|
|
- :jinja_ref:`symmetric_difference`
|
|
- :jinja_ref:`is_sorted`
|
|
- :jinja_ref:`compare_lists`
|
|
- :jinja_ref:`compare_dicts`
|
|
- :jinja_ref:`is_hex`
|
|
- :jinja_ref:`contains_whitespace`
|
|
- :jinja_ref:`substring_in_list`
|
|
- :jinja_ref:`check_whitelist_blacklist`
|
|
- :jinja_ref:`date_format`
|
|
- :jinja_ref:`str_to_num`
|
|
- :jinja_ref:`to_bytes`
|
|
- :jinja_ref:`json_decode_list`
|
|
- :jinja_ref:`json_decode_dict`
|
|
- :jinja_ref:`rand_str`
|
|
- :jinja_ref:`md5`
|
|
- :jinja_ref:`sha256`
|
|
- :jinja_ref:`sha512`
|
|
- :jinja_ref:`base64_encode`
|
|
- :jinja_ref:`base64_decode`
|
|
- :jinja_ref:`hmac`
|
|
- :jinja_ref:`http_query`
|
|
- :jinja_ref:`is_ip`
|
|
- :jinja_ref:`is_ipv4`
|
|
- :jinja_ref:`is_ipv6`
|
|
- :jinja_ref:`ipaddr`
|
|
- :jinja_ref:`ipv4`
|
|
- :jinja_ref:`ipv6`
|
|
- :jinja_ref:`network_hosts`
|
|
- :jinja_ref:`network_size`
|
|
- :jinja_ref:`gen_mac`
|
|
- :jinja_ref:`mac_str_to_bytes`
|
|
- :jinja_ref:`dns_check`
|
|
- :jinja_ref:`is_text_file`
|
|
- :jinja_ref:`is_binary_file`
|
|
- :jinja_ref:`is_empty_file`
|
|
- :jinja_ref:`file_hashsum`
|
|
- :jinja_ref:`list_files`
|
|
- :jinja_ref:`path_join`
|
|
- :jinja_ref:`which`
|
|
|
|
Logs
|
|
----
|
|
|
|
Another new feature - although not limited to Jinja only -
|
|
is being able to log debug messages directly from the template:
|
|
|
|
.. code-block:: jinja
|
|
|
|
{%- do salt.log.error('logging from jinja') -%}
|
|
|
|
See the :jinja_ref:`logs` paragraph.
|
|
|
|
|
|
Network Automation
|
|
==================
|
|
|
|
NAPALM
|
|
------
|
|
|
|
Introduced in 2016.11, the modules for cross-vendor network automation
|
|
have been improved, enhanced and widenened in scope:
|
|
|
|
- Manage network devices like servers: the NAPALM modules have been transformed
|
|
so they can run in both proxy and regular minions. That means, if the
|
|
operating system allows, the salt-minion package can be installed directly
|
|
on the network gear. Examples of such devices (also covered by NAPALM)
|
|
include: Arista, Cumulus, Cisco IOS-XR or Cisco Nexus.
|
|
- Not always alive: in certain less dynamic environments,
|
|
maintaining the remote connection permanently open with the network device
|
|
is not always beneficial. In those particular cases, the user can select
|
|
to initialize the connection only when needed, by specifying the field
|
|
``always_alive: false`` in the :mod:`proxy configuration <salt.proxy.napalm>`
|
|
or using the :conf_proxy:`proxy_always_alive` option.
|
|
- Proxy keepalive: due to external factors, the connection with the remote
|
|
device can be dropped, e.g.: packet loss, idle time (no commands issued
|
|
within a couple of minutes or seconds), or simply the device decides to kill
|
|
the process. In 2017.7.0 we have introduced the functionality to re-establish
|
|
the connection. One can disable this feature through the
|
|
:conf_proxy:`proxy_keep_alive` option and adjust the polling frequency
|
|
speciying a custom value for :conf_proxy:`proxy_keep_alive_interval`,
|
|
in minutes.
|
|
|
|
New modules:
|
|
|
|
- :mod:`Netconfig state module <salt.states.netconfig>` - Manage the configuration
|
|
of network devices using arbitrary templates and the Salt-specific
|
|
advanced templating methodologies.
|
|
- :mod:`Network ACL execution module <salt.modules.napalm_acl>` - Generate and
|
|
load ACL (firewall) configuration on network devices.
|
|
- :mod:`Network ACL state <salt.states.netacl>` - Manage the firewall
|
|
configuration. It only requires writing the pillar structure correctly!
|
|
- :mod:`NAPALM YANG execution module <salt.modules.napalm_yang_mod>` - Parse,
|
|
generate and load native device configuration in a standard way,
|
|
using the OpenConfig/IETF models. This module contains also helpers for
|
|
the states.
|
|
- :mod:`NAPALM YANG state module <salt.states.netyang>` - Manage the
|
|
network device configuration according to the YANG models (OpenConfig or IETF).
|
|
- :mod:`NET finder <salt.runners.net>` - Runner to find details easily and
|
|
fast. It's smart enough to know what you are looking for. It will search
|
|
in the details of the network interfaces, IP addresses, MAC address tables,
|
|
ARP tables and LLDP neighbors.
|
|
- :mod:`BGP finder <salt.runners.bgp>` - Runner to search BGP neighbors details.
|
|
- :mod:`NAPALM syslog <salt.engines.napalm_syslog>` - Engine to import events
|
|
from the napalm-logs library into the Salt event bus. The events are based
|
|
on the syslog messages from the network devices and structured following
|
|
the OpenConfig/IETF YANG models.
|
|
- :mod:`NAPALM Helpers <salt.modules.napalm>` - Generic helpers for
|
|
NAPALM-related operations. For example, the
|
|
:mod:`Compliance report <salt.modules.napalm.compliance_report>` function
|
|
can be used inside the state modules to compare the expected and the
|
|
existing configuration.
|
|
|
|
New functions:
|
|
|
|
- :mod:`Configuration getter <salt.modules.napalm_network.config>` - Return
|
|
the whole configuration of the network device.
|
|
- :mod:`Optics getter <salt.modules.napalm_network.optics>` - Fetches
|
|
the power usage on the various transceivers installed on the network device
|
|
(in dBm).
|
|
|
|
New grains: :mod:`Host <salt.grains.napalm.host>`,
|
|
:mod:`Host DNS<salt.grains.napalm.host_dns>`,
|
|
:mod:`Username <salt.grains.napalm.username>` and
|
|
:mod:`Optional args <salt.grains.napalm.optional_args>`.
|
|
|
|
|
|
Custom Refspecs in GitFS / git_pillar / winrepo
|
|
===============================================
|
|
|
|
It is now possible to specify the refspecs to use when fetching from remote
|
|
repositories for GitFS, git_pillar, and winrepo. More information on how this
|
|
feature works can be found :ref:`here <gitfs-custom-refspecs>` in the GitFS
|
|
Walkthrough. The git_pillar and winrepo versions of this feature work the same
|
|
as their GitFS counterpart.
|
|
|
|
git_pillar "mountpoints" Feature Added
|
|
======================================
|
|
|
|
See :ref:`here <git-pillar-mountpoints>` for detailed documentation.
|
|
|
|
Big Improvements to Docker Support
|
|
==================================
|
|
|
|
The old ``docker`` state and execution modules have been moved to
|
|
salt-contrib_. The ``dockerng`` execution module has been renamed to
|
|
:mod:`docker <salt.modules.docker>` and now serves as Salt's official Docker
|
|
execution module.
|
|
|
|
The old ``dockerng`` state module has been split into 4 state modules:
|
|
|
|
- :mod:`docker_container <salt.states.docker_container>` - States to manage
|
|
Docker containers
|
|
- :mod:`docker_image <salt.states.docker_image>` - States to manage Docker
|
|
images
|
|
- :mod:`docker_volume <salt.states.docker_volume>` - States to manage
|
|
Docker volumes
|
|
- :mod:`docker_network <salt.states.docker_network>` - States to manage
|
|
Docker networks
|
|
|
|
The reason for this change was to make states and requisites more clear. For
|
|
example, imagine this SLS:
|
|
|
|
.. code-block:: yaml
|
|
|
|
myuser/appimage:
|
|
docker.image_present:
|
|
- sls: docker.images.appimage
|
|
|
|
myapp:
|
|
docker.running:
|
|
- image: myuser/appimage
|
|
- require:
|
|
- docker: myuser/appimage
|
|
|
|
The new syntax would be:
|
|
|
|
.. code-block:: yaml
|
|
|
|
myuser/appimage:
|
|
docker_image.present:
|
|
- sls: docker.images.appimage
|
|
|
|
myapp:
|
|
docker_container.running:
|
|
- image: myuser/appimage
|
|
- require:
|
|
- docker_image: myuser/appimage
|
|
|
|
This is similar to how Salt handles MySQL, MongoDB, Zabbix, and other cases
|
|
where the same execution module is used to manage several different kinds
|
|
of objects (users, databases, roles, etc.).
|
|
|
|
.. note::
|
|
With the `Moby announcement`_ coming at this year's DockerCon_, Salt's
|
|
:mod:`docker <salt.modules.dockermod>` execution module (as well as the
|
|
state modules) work interchangably when **docker** is replaced with
|
|
**moby** (e.g. :py:func:`moby_container.running
|
|
<salt.states.docker_container.running>`, :py:func:`moby_image.present
|
|
<salt.states.docker_image.present>`, :py:func:`moby.inspect_container
|
|
<salt.modules.dockermod.inspect_container>`, etc.)
|
|
|
|
.. _`Moby announcement`: https://blog.docker.com/2017/04/introducing-the-moby-project/
|
|
.. _DockerCon: http://2017.dockercon.com/
|
|
|
|
The old syntax will continue to work until the **Fluorine** release of Salt.
|
|
The old ``dockerng`` naming will also continue to work until that release, so
|
|
no immediate changes need to be made to your SLS files (unless you were still
|
|
using the old docker states that have been moved to salt-contrib_).
|
|
|
|
The :py:func:`docker_container.running <salt.states.docker_container.running>`
|
|
state has undergone a significant change in how it determines whether or not a
|
|
container needs to be replaced. Rather than comparing individual arguments to
|
|
their corresponding values in the named container, a temporary container is
|
|
created (but not started) using the passed arguments. The two containers are
|
|
then compared to each other to determine whether or not there are changes, and
|
|
if so, the old container is stopped and destroyed, and the temporary container
|
|
is renamed and started.
|
|
|
|
Salt still needs to translate arguments into the format which docker-py
|
|
expects, but if it does not properly do so, the :ref:`skip_translate
|
|
<docker-container-running-skip-translate>` argument can be used to skip input
|
|
translation on an argument-by-argument basis, and you can then format your SLS
|
|
file to pass the data in the format that the docker-py expects. This allows you
|
|
to work around any changes in Docker's API or issues with the input
|
|
translation, and continue to manage your Docker containers using Salt. Read the
|
|
documentation for :ref:`skip_translate
|
|
<docker-container-running-skip-translate>` for more information.
|
|
|
|
.. note::
|
|
When running the :py:func:`docker_container.running
|
|
<salt.states.docker_container.running>` state for the first time after
|
|
upgrading to 2017.7.0, your container(s) may be replaced. The changes may
|
|
show diffs for certain parameters which say that the old value was an empty
|
|
string, and the new value is ``None``. This is due to the fact that in
|
|
prior releases Salt was passing empty strings for these values when
|
|
creating the container if they were undefined in the SLS file, where now
|
|
Salt simply does not pass any arguments not explicitly defined in the SLS
|
|
file. Subsequent runs of the state should not replace the container if the
|
|
configuration remains unchanged.
|
|
|
|
.. _salt-contrib: https://github.com/saltstack/salt-contrib
|
|
|
|
New SSH Cache Roster
|
|
====================
|
|
|
|
The :mod:`SSH cache Roster <salt.roster.cache>` has been rewritten from scratch to increase its usefulness.
|
|
The new roster supports all minion matchers,
|
|
so it is now possible to target minions identically through `salt` and `salt-ssh`.
|
|
|
|
Using the new ``roster_order`` configuration syntax it's now possible to compose a roster out of any combination
|
|
of grains, pillar and mine data and even Salt SDB URLs.
|
|
The new release is also fully IPv4 and IPv6 enabled and even has support for CIDR ranges.
|
|
|
|
Salt-SSH Default Options
|
|
========================
|
|
|
|
Defaults for rosters can now be set, so that they don't have to be set on every
|
|
entry in a roster or specified from the commandline.
|
|
|
|
The new option is :ref:`roster_defaults<roster-defaults>` and is specified in
|
|
the master config file.
|
|
|
|
.. code-block:: yaml
|
|
|
|
roster_defaults:
|
|
user: daniel
|
|
sudo: True
|
|
priv: /root/.ssh/id_rsa
|
|
tty: True
|
|
|
|
Blacklist or Whitelist Extmod Sync
|
|
==================================
|
|
|
|
The modules that are synced to minions can now be limited.
|
|
|
|
The following configuration options have been added for the master:
|
|
|
|
- :conf_master:`extmod_whitelist`
|
|
- :conf_master:`extmod_blacklist`
|
|
|
|
and for the minion:
|
|
|
|
- :conf_minion:`extmod_whitelist`
|
|
- :conf_minion:`extmod_blacklist`
|
|
|
|
Additional Features
|
|
===================
|
|
|
|
- The :mod:`mine.update <salt.modules.mine.update>` function
|
|
has a new optional argument ``mine_functions`` that can be used
|
|
to refresh mine functions at a more specific interval
|
|
than scheduled using the ``mine_interval`` option.
|
|
However, this argument can be used by explicit schedule.
|
|
For example, if we need the mines for ``net.lldp`` to be refreshed
|
|
every 12 hours:
|
|
|
|
.. code-block:: yaml
|
|
|
|
schedule:
|
|
lldp_mine_update:
|
|
function: mine.update
|
|
kwargs:
|
|
mine_functions:
|
|
net.lldp: []
|
|
hours: 12
|
|
|
|
- The ``salt`` runner has a new function: :mod:`salt.execute <salt.runners.salt.execute>`.
|
|
It is mainly a shortcut to facilitate the execution of various functions
|
|
from other runners, e.g.:
|
|
|
|
.. code-block:: python
|
|
|
|
ret1 = __salt__['salt.execute']('*', 'mod.fun')
|
|
|
|
New Modules
|
|
===========
|
|
|
|
Beacons
|
|
-------
|
|
|
|
- :mod:`salt.beacons.log <salt.beacons.log>`
|
|
|
|
Cache
|
|
-----
|
|
|
|
- :mod:`salt.cache.redis_cache <salt.cache.redis_cache>`
|
|
|
|
Engines
|
|
-------
|
|
|
|
- :mod:`salt.engines.stalekey <salt.engines.stalekey>`
|
|
- :mod:`salt.engines.junos_syslog <salt.engines.junos_syslog>`
|
|
- :mod:`salt.engines.napalm_syslog <salt.engines.napalm_syslog>`
|
|
|
|
Execution modules
|
|
-----------------
|
|
|
|
- :mod:`salt.modules.apk <salt.modules.apk>`
|
|
- :mod:`salt.modules.at_solaris <salt.modules.at_solaris>`
|
|
- :mod:`salt.modules.boto_kinesis <salt.modules.boto_kinesis>`
|
|
- :mod:`salt.modules.boto3_elasticache <salt.modules.boto3_elasticache>`
|
|
- :mod:`salt.modules.boto3_route53 <salt.modules.boto3_route53>`
|
|
- :mod:`salt.modules.capirca_acl <salt.modules.capirca_acl>`
|
|
- :mod:`salt.modules.freebsd_update <salt.modules.freebsd_update>`
|
|
- :mod:`salt.modules.grafana4 <salt.modules.grafana4>`
|
|
- :mod:`salt.modules.heat <salt.modules.heat>`
|
|
- :mod:`salt.modules.icinga2 <salt.modules.icinga2>`
|
|
- :mod:`salt.modules.kubernetes <salt.modules.kubernetes>`
|
|
- :mod:`salt.modules.logmod <salt.modules.logmod>`
|
|
- :mod:`salt.modules.mattermost <salt.modules.mattermost>`
|
|
- :mod:`salt.modules.namecheap_dns <salt.modules.namecheap_dns>`
|
|
- :mod:`salt.modules.namecheap_domains <salt.modules.namecheap_domains>`
|
|
- :mod:`salt.modules.namecheap_ns <salt.modules.namecheap_ns>`
|
|
- :mod:`salt.modules.namecheap_users <salt.modules.namecheap_users>`
|
|
- :mod:`salt.modules.namecheap_ssl <salt.modules.namecheap_ssl>`
|
|
- :mod:`salt.modules.napalm <salt.modules.napalm>`
|
|
- :mod:`salt.modules.napalm_acl <salt.modules.napalm_acl>`
|
|
- :mod:`salt.modules.napalm_yang_mod <salt.modules.napalm_yang_mod>`
|
|
- :mod:`salt.modules.pdbedit <salt.modules.pdbedit>`
|
|
- :mod:`salt.modules.solrcloud <salt.modules.solrcloud>`
|
|
- :mod:`salt.modules.statuspage <salt.modules.statuspage>`
|
|
- :mod:`salt.modules.zonecfg <salt.modules.zonecfg>`
|
|
- :mod:`salt.modules.zoneadm <salt.modules.zoneadm>`
|
|
|
|
Grains
|
|
------
|
|
|
|
- :mod:`salt.grains.metadata <salt.grains.metadata>`
|
|
- :mod:`salt.grains.mdata <salt.grains.mdata>`
|
|
|
|
Outputters
|
|
----------
|
|
|
|
- :mod:`salt.output.table_out <salt.output.table_out>`
|
|
|
|
Pillar
|
|
------
|
|
|
|
- :mod:`salt.pillar.postgres <salt.pillar.postgres>`
|
|
- :mod:`salt.pillar.vmware_pillar <salt.pillar.vmware_pillar>`
|
|
|
|
Returners
|
|
---------
|
|
|
|
- :mod:`salt.returners.mattermost_returner <salt.returners.mattermost_returner>`
|
|
- :mod:`salt.returners.highstate_return <salt.returners.highstate_return>`
|
|
|
|
Roster
|
|
------
|
|
|
|
- :mod:`salt.roster.cache <salt.roster.cache>`
|
|
|
|
Runners
|
|
-------
|
|
|
|
- :mod:`salt.runners.bgp <salt.runners.bgp>`
|
|
- :mod:`salt.runners.mattermost <salt.runners.mattermost>`
|
|
- :mod:`salt.runners.net <salt.runners.net>`
|
|
|
|
SDB
|
|
---
|
|
|
|
- :mod:`salt.sdb.yaml <salt.sdb.yaml>`
|
|
- :mod:`salt.sdb.tism <salt.sdb.tism>`
|
|
- :mod:`salt.sdb.cache <salt.sdb.cache>`
|
|
|
|
States
|
|
------
|
|
|
|
- :mod:`salt.states.boto_kinesis <salt.states.boto_kinesis>`
|
|
- :mod:`salt.states.boto_efs <salt.states.boto_efs>`
|
|
- :mod:`salt.states.boto3_elasticache <salt.states.boto3_elasticache>`
|
|
- :mod:`salt.states.boto3_route53 <salt.states.boto3_route53>`
|
|
- :mod:`salt.states.docker_container <salt.states.docker_container>`
|
|
- :mod:`salt.states.docker_image <salt.states.docker_image>`
|
|
- :mod:`salt.states.docker_network <salt.states.docker_network>`
|
|
- :mod:`salt.states.docker_volume <salt.states.docker_volume>`
|
|
- :mod:`salt.states.elasticsearch <salt.states.elasticsearch>`
|
|
- :mod:`salt.states.grafana4_dashboard <salt.states.grafana4_dashboard>`
|
|
- :mod:`salt.states.grafana4_datasource <salt.states.grafana4_datasource>`
|
|
- :mod:`salt.states.grafana4_org <salt.states.grafana4_org>`
|
|
- :mod:`salt.states.grafana4_user <salt.states.grafana4_user>`
|
|
- :mod:`salt.states.heat <salt.states.heat>`
|
|
- :mod:`salt.states.icinga2 <salt.states.icinga2>`
|
|
- :mod:`salt.states.influxdb_continuous_query <salt.states.influxdb_continuous_query>`
|
|
- :mod:`salt.states.influxdb_retention_policy <salt.states.influxdb_retention_policy>`
|
|
- :mod:`salt.states.kubernetes <salt.states.kubernetes>`
|
|
- :mod:`salt.states.logadm <salt.states.logadm>`
|
|
- :mod:`salt.states.logrotate <salt.states.logrotate>`
|
|
- :mod:`salt.states.msteams <salt.states.msteams>`
|
|
- :mod:`salt.states.netacl <salt.states.netacl>`
|
|
- :mod:`salt.states.netconfig <salt.states.netconfig>`
|
|
- :mod:`salt.states.netyang <salt.states.netyang>`
|
|
- :mod:`salt.states.nix <salt.states.nix>`
|
|
- :mod:`salt.states.pdbedit <salt.states.pdbedit>`
|
|
- :mod:`salt.states.solrcloud <salt.states.solrcloud>`
|
|
- :mod:`salt.states.statuspage <salt.states.statuspage>`
|
|
- :mod:`salt.states.vault <salt.states.vault>`
|
|
- :mod:`salt.states.win_wua <salt.states.win_wua>`
|
|
- :mod:`salt.states.zone <salt.states.zone>`
|
|
|
|
Deprecations
|
|
============
|
|
|
|
General Deprecations
|
|
--------------------
|
|
|
|
- Removed support for aliasing ``cmd.run`` to ``cmd.shell``.
|
|
- Removed support for Dulwich from :ref:`GitFS <tutorial-gitfs>`.
|
|
- Beacon configurations should be lists instead of dictionaries.
|
|
- The ``PidfileMixin`` has been removed. Please use ``DaemonMixIn`` instead.
|
|
- The ``use_pending`` argument was removed from the ``salt.utils.event.get_event``
|
|
function.
|
|
- The ``pending_tags`` argument was removed from the ``salt.utils.event.get_event``
|
|
function.
|
|
|
|
Configuration Option Deprecations
|
|
---------------------------------
|
|
|
|
- The ``client_acl`` configuration option has been removed. Please use
|
|
``publisher_acl`` instead.
|
|
- The ``client_acl_blacklist`` configuration option has been removed.
|
|
Please use ``publisher_acl_blacklist`` instead.
|
|
- The ``win_gitrepos`` configuration option has been removed. Please use
|
|
the ``winrepo_remotes`` option instead.
|
|
- The ``win_repo`` configuration option has been removed. Please use
|
|
``winrepo_dir`` instead.
|
|
- The ``win_repo_mastercachefile`` configuration option has been removed.
|
|
Please use the ``winrepo_cachefile`` option instead.
|
|
|
|
Module Deprecations
|
|
-------------------
|
|
|
|
The ``git`` execution module had the following changes:
|
|
|
|
- The ``fmt`` argument was removed from the ``archive`` function. Please
|
|
use ``format`` instead.
|
|
- The ``repository`` argument was removed from the ``clone`` function.
|
|
Please use ``url`` instead.
|
|
- The ``is_global`` argument was removed from the ``config_set`` function.
|
|
Please use ``global`` instead.
|
|
- The ``branch`` argument was removed from the ``merge`` function. Please
|
|
use ``rev`` instead.
|
|
- The ``branch`` argument was removed from the ``push`` function. Please
|
|
use ``rev`` instead.
|
|
|
|
The ``glusterfs`` execution module had the following functions removed:
|
|
|
|
- ``create``: Please use ``create_volume`` instead.
|
|
- ``delete``: Please use ``delete_volume`` instead.
|
|
- ``list_peers``: Please use ``peer_status`` instead.
|
|
|
|
The ``htpasswd`` execution module had the following function removed:
|
|
|
|
- ``useradd_all``: Please use ``useradd`` instead.
|
|
|
|
The ``img`` execution module has been removed. All of its associated functions
|
|
were marked for removal in the 2017.7.0 release. The functions removed in this
|
|
module are mapped as follows:
|
|
|
|
- ``mount_image``/``mnt_image``: Please use ``mount.mount`` instead.
|
|
- ``umount_image``: Please use ``mount.umount`` instead.
|
|
- ``bootstrap``: Please use ``genesis.bootstrap`` instead.
|
|
|
|
The ``smartos_virt`` execution module had the following functions removed:
|
|
|
|
- ``create``: Please use ``start`` instead.
|
|
- ``destroy`` Please use ``stop`` instead.
|
|
- ``list_vms``: Please use ``list_domains`` instead.
|
|
|
|
The ``virt`` execution module had the following functions removed:
|
|
|
|
- ``create``: Please use ``start`` instead.
|
|
- ``destroy`` Please use ``stop`` instead.
|
|
- ``list_vms``: Please use ``list_domains`` instead.
|
|
|
|
The ``virtualenv_mod`` execution module had the following changes:
|
|
|
|
- The ``package_or_requirement`` argument was removed from both the
|
|
``get_resource_path`` and the ``get_resource_content`` functions.
|
|
Please use ``package`` instead.
|
|
- The ``resource_name`` argument was removed from both the
|
|
``get_resource_path`` and ``get_resource_content`` functions.
|
|
Please use ``resource`` instead.
|
|
|
|
The ``win_repo`` execution module had the following changes:
|
|
|
|
- The ``win_repo_source_dir`` option was removed from the ``win_repo``
|
|
module. Please use ``winrepo_source_dir`` instead.
|
|
|
|
The ``xapi`` execution module had the following functions removed:
|
|
|
|
- ``create``: Please use ``start`` instead.
|
|
- ``destroy``: Please use ``stop`` instead.
|
|
- ``list_vms``: Please use ``list_domains`` instead.
|
|
|
|
The ``zypper`` execution module had the following function removed:
|
|
|
|
- ``info``: Please use ``info_available`` instead.
|
|
|
|
Pillar Deprecations
|
|
-------------------
|
|
|
|
- Support for the ``raw_data`` argument for the file_tree ext_pillar has been
|
|
removed. Please use ``keep_newline`` instead.
|
|
- SQLite3 database connection configuration previously had keys under
|
|
pillar. This legacy compatibility has been removed.
|
|
|
|
Proxy Minion Deprecations
|
|
-------------------------
|
|
|
|
- The ``proxy_merge_grains_in_module`` default has been switched from
|
|
``False`` to ``True``.
|
|
|
|
Salt-API Deprecations
|
|
---------------------
|
|
|
|
- The ``SaltAPI.run()`` function has been removed. Please use the
|
|
``SaltAPI.start()`` function instead.
|
|
|
|
Salt-Cloud Deprecations
|
|
-----------------------
|
|
|
|
- Support for using the keyword ``provider`` in salt-cloud provider config
|
|
files has been removed. Please use ``driver`` instead. The ``provider``
|
|
keyword should now only be used in cloud profile config files.
|
|
|
|
Salt-SSH Deprecations
|
|
---------------------
|
|
|
|
- The ``wipe_ssh`` option for ``salt-ssh`` has been removed. Please use the
|
|
``ssh_wipe`` option instead.
|
|
|
|
State Deprecations
|
|
------------------
|
|
|
|
The ``apache_conf`` state had the following functions removed:
|
|
|
|
- ``disable``: Please use ``disabled`` instead.
|
|
- ``enable``: Please use ``enabled`` instead.
|
|
|
|
The ``apache_module`` state had the following functions removed:
|
|
|
|
- ``disable``: Please use ``disabled`` instead.
|
|
- ``enable``: Please use ``enabled`` instead.
|
|
|
|
The ``apache_site`` state had the following functions removed:
|
|
|
|
- ``disable``: Please use ``disabled`` instead.
|
|
- ``enable``: Please use ``enabled`` instead.
|
|
|
|
The ``chocolatey`` state had the following functions removed:
|
|
|
|
- ``install``: Please use ``installed`` instead.
|
|
- ``uninstall``: Please use ``uninstalled`` instead.
|
|
|
|
The ``git`` state had the following changes:
|
|
|
|
- The ``config`` function was removed. Please use ``config_set`` instead.
|
|
- The ``is_global`` option was removed from the ``config_set`` function.
|
|
Please use ``global`` instead.
|
|
- The ``always_fetch`` option was removed from the ``latest`` function, as
|
|
it no longer has any effect. Please see the :ref:`2015.8.0<release-2015-8-0>`
|
|
release notes for more information.
|
|
- The ``force`` option was removed from the ``latest`` function. Please
|
|
use ``force_clone`` instead.
|
|
- The ``remote_name`` option was removed from the ``latest`` function.
|
|
Please use ``remote`` instead.
|
|
|
|
The ``glusterfs`` state had the following function removed:
|
|
|
|
- ``created``: Please use ``volume_present`` instead.
|
|
|
|
The ``openvswitch_port`` state had the following change:
|
|
|
|
- The ``type`` option was removed from the ``present`` function. Please use ``tunnel_type`` instead.
|
|
|
|
Build Notes
|
|
===========
|
|
|
|
Windows Installer Packages
|
|
--------------------------
|
|
|
|
Windows Installer packages have been patched with the following PR: 42347_
|
|
|
|
.. _42347: https://github.com/saltstack/salt/pull/42347
|