25 KiB
- orphan
Salt Release Notes - Codename Oxygen
Comparison Operators in Package Installation
Salt now supports using comparison operators (e.g.
>=1.2.3
) when installing packages on minions which use
yum/dnf <salt.modules.yumpkg>
or apt
<salt.modules.aptpkg>
. This is supported both in the pkg.installed
<salt.states.pkg.installed>
state and in the
pkg.install
remote execution function.
Master Tops <master-tops-system>
Changes
When both Master Tops <master-tops-system>
and a Top File
<states-top>
produce SLS matches for a given minion, the
matches were being merged in an unpredictable manner which did not
preserve ordering. This has been changed. The top file matches now
execute in the expected order, followed by any master tops matches that
are not matched via a top file.
To make master tops matches execute first, followed by top file
matches, set the new master_tops_first
minion config option to
True
.
LDAP via External Authentication Changes
In this release of Salt, if LDAP Bind Credentials are supplied, then these credentials will be used for all LDAP access except the first authentication when a job is submitted. The first authentication will use the user's credentials as passed on the CLI. This behavior is to accommodate certain two-factor authentication schemes where the authentication token can only be used once.
In previous releases the bind credentials would only be used to determine the LDAP user's existence and group membership. The user's LDAP credentials were used from then on.
Stormpath External Authentication Removed
Per Stormpath's announcement, their API will be shutting down on 8/17/2017 at noon PST so the Stormpath external authentication module has been removed.
https://stormpath.com/oktaplusstormpath
New NaCl Renderer
A new renderer has been added for encrypted data.
New support for Cisco UCS Chassis
The salt proxy minion now allows for control of Cisco USC chassis. See the cimc modules for details.
New salt-ssh roster
A new roster has been added that allows users to pull in a list of hosts for salt-ssh targeting from a ~/.ssh configuration. For full details, please see the sshconfig roster.
New GitFS Features
Two new features which affect how GitFS maps branches/tags to
fileserver environments (i.e. saltenvs
) have been
added:
It is now possible to completely turn off Salt's default mapping logic (aside from the mapping of the
base
saltenv). This can be triggered using the newgitfs_disable_saltenv_mapping
config option.Note
When this is disabled, only the
base
saltenv and any configured usingper-saltenv configuration parameters <gitfs-per-saltenv-config>
will be available.The types of refs which Salt will use as saltenvs can now be controlled. In previous releases, branches and tags were both mapped as environments, and individual commit SHAs could be specified as saltenvs in states (and when caching files using
cp.cache_file <salt.modules.cp.cache_file>
). Using the newgitfs_ref_types
config option, the types of refs which are used as saltenvs can be restricted. This makes it possible to ignore all tags and use branches only, and also to keep SHAs from being made available as saltenvs.
Additional output modes ------------------
The state_output
parameter now supports
full_id
, changes_id
and terse_id
.
Just like mixed_id
, these use the state ID as name in the
highstate output. For more information on these output modes, see the
docs for the Highstate Outputter <salt.output.highstate>
.
Salt Cloud Features
Pre-Flight Commands
Support has been added for specified "preflight commands" to run on a VM before the deploy script is run. These must be defined as a list in a cloud configuration file. For example:
my-cloud-profile:
provider: linode-config
image: Ubuntu 16.04 LTS
size: Linode 2048
preflight_cmds:
- whoami
- echo 'hello world!'
These commands will run in sequence before the bootstrap script is executed.
New pillar/master_tops module called saltclass
This module clones the behaviour of reclass (http://reclass.pantsfullofunix.net/),
without the need of an external app, and add several features to improve
flexibility. Saltclass lets you define your nodes from simple
yaml
files (.yml
) through hierarchical class
inheritance with the possibility to override pillars down the tree.
Features
- Define your nodes through hierarchical class inheritance
- Reuse your reclass datas with minimal modifications
-
- applications => states
- parameters => pillars
- Use Jinja templating in your yaml definitions
- Access to the following Salt objects in Jinja
-
__opts__
__salt__
__grains__
__pillars__
minion_id
- Chose how to merge or override your lists using ^ character (see examples)
- Expand variables ${} with possibility to escape them if needed ${} (see examples)
- Ignores missing node/class and will simply return empty without breaking the pillar module completely - will be logged
An example subset of datas is available here: http://git.mauras.ch/salt/saltclass/src/master/examples
Terms usable in yaml files | Description |
---|---|
classes | A list of classes that will be processed in order |
states | A list of states that will be returned by master_tops function |
pillars | A yaml dictionnary that will be returned by the ext_pillar function |
environment | Node saltenv that will be used by master_tops |
A class consists of:
- zero or more parent classes
- zero or more states
- any number of pillars
A child class can override pillars from a parent class. A node
definition is a class in itself with an added environment
parameter for saltenv
definition.
class names
Class names mimic salt way of defining states and pillar files. This
means that default.users
class name will correspond to one
of these:
<saltclass_path>/classes/default/users.yml
<saltclass_path>/classes/default/users/init.yml
Saltclass tree
A saltclass tree would look like this:
<saltclass_path>
├── classes
│ ├── app
│ │ ├── borgbackup.yml
│ │ └── ssh
│ │ └── server.yml
│ ├── default
│ │ ├── init.yml
│ │ ├── motd.yml
│ │ └── users.yml
│ ├── roles
│ │ ├── app.yml
│ │ └── nginx
│ │ ├── init.yml
│ │ └── server.yml
│ └── subsidiaries
│ ├── gnv.yml
│ ├── qls.yml
│ └── zrh.yml
└── nodes
├── geneva
│ └── gnv.node1.yml
├── lausanne
│ ├── qls.node1.yml
│ └── qls.node2.yml
├── node127.yml
└── zurich
├── zrh.node1.yml
├── zrh.node2.yml
└── zrh.node3.yml
Examples
<saltclass_path>/nodes/lausanne/qls.node1.yml
environment: base
classes:
{% for class in ['default'] %}
- {{ class }}
{% endfor %}
- subsidiaries.{{ __grains__['id'].split('.')[0] }}
<saltclass_path>/classes/default/init.yml
classes:
- default.users
- default.motd
states:
- openssh
pillars:
default:
network:
dns:
srv1: 192.168.0.1
srv2: 192.168.0.2
domain: example.com
ntp:
srv1: 192.168.10.10
srv2: 192.168.10.20
<saltclass_path>/classes/subsidiaries/gnv.yml
pillars:
default:
network:
sub: Geneva
dns:
srv1: 10.20.0.1
srv2: 10.20.0.2
srv3: 192.168.1.1
domain: gnv.example.com
users:
adm1:
uid: 1210
gid: 1210
gecos: 'Super user admin1'
homedir: /srv/app/adm1
adm3:
uid: 1203
gid: 1203
gecos: 'Super user adm
Variable expansions:
Escaped variables are rendered as is - ${test}
Missing variables are rendered as is -
${net:dns:srv2}
pillars:
app:
config:
dns:
srv1: ${default:network:dns:srv1}
srv2: ${net:dns:srv2}
uri: https://application.domain/call?\${test}
prod_parameters:
- p1
- p2
- p3
pkg:
- app-core
- app-backend
List override:
Not using ^
as the first entry will simply merge the
lists
pillars:
app:
pkg:
- ^
- app-frontend
Known limitation
Currently you can't have both a variable and an escaped variable in the same string as the escaped one will not be correctly rendered - '${xx}' will stay as is instead of being rendered as '${xx}'
Newer PyWinRM Versions
Versions of pywinrm>=0.2.1
are finally able to
disable validation of self signed certificates. Here<new-pywinrm>
for
more information.
DigitalOcean
The DigitalOcean driver has been renamed to conform to the companies
name. The new driver name is digitalocean
. The old name
digital_ocean
and a short one do
will still be
supported through virtual aliases, this is mostly cosmetic.
Solaris Logical Domains In Virtual Grain
Support has been added to the virtual
grain for
detecting Solaris LDOMs running on T-Series SPARC hardware. The
virtual_subtype
grain is populated as a list of domain
roles.
Lists of comments in state returns
State functions can now return a list of strings for the
comment
field, as opposed to only a single string. This is
meant to ease writing states with multiple or multi-part comments.
Beacon configuration changes
In order to remain consistent and to align with other Salt components such as states, support for configuring beacons using dictionary based configuration has been deprecated in favor of list based configuration. All beacons have a validation function which will check the configuration for the correct format and only load if the validation passes.
avahi_announce
beaconOld behavior:
` beacons: avahi_announce: run_once: True servicetype: _demo._tcp port: 1234 txt: ProdName: grains.productname SerialNo: grains.serialnumber Comments: 'this is a test'
`New behavior:
` beacons: avahi_announce: - run_once: True - servicetype: _demo._tcp - port: 1234 - txt: ProdName: grains.productname SerialNo: grains.serialnumber Comments: 'this is a test'
`
bonjour_announce
beaconOld behavior:
` beacons: bonjour_announce: run_once: True servicetype: _demo._tcp port: 1234 txt: ProdName: grains.productname SerialNo: grains.serialnumber Comments: 'this is a test'
`New behavior:
` beacons: bonjour_announce: - run_once: True - servicetype: _demo._tcp - port: 1234 - txt: ProdName: grains.productname SerialNo: grains.serialnumber Comments: 'this is a test'
`
btmp
beaconOld behavior:
` beacons: btmp: {}
`New behavior:
` beacons: btmp: []
`glxinfo
beaconOld behavior:
` beacons: glxinfo: user: frank screen_event: True
`New behavior:
` beacons: glxinfo: - user: frank - screen_event: True
`haproxy
beaconOld behavior:
` beacons: haproxy: - www-backend: threshold: 45 servers: - web1 - web2 - interval: 120
`New behavior:
` beacons: haproxy: - backends: www-backend: threshold: 45 servers: - web1 - web2 - interval: 120
`
- inotify
beacon
Old behavior:
` beacons: inotify: /path/to/file/or/dir: mask: - open - create - close_write recurse: True auto_add: True exclude: - /path/to/file/or/dir/exclude1 - /path/to/file/or/dir/exclude2 - /path/to/file/or/dir/regex[a-m]*$: regex: True coalesce: True
`New behavior: ``` beacons: inotify: - files: /path/to/file/or/dir: mask: - open - create - close_write recurse: True auto_add: True exclude: - /path/to/file/or/dir/exclude1 - /path/to/file/or/dir/exclude2 - /path/to/file/or/dir/regex[a-m]*$: regex: True - coalesce: True
` -
journaldbeacon Old behavior:
beacons: journald: sshd: SYSLOG_IDENTIFIER: sshd PRIORITY: 6New behavior:
beacons: journald: - services: sshd: SYSLOG_IDENTIFIER: sshd PRIORITY: 6-
loadbeacon Old behavior:
beacons: load: 1m: - 0.0 - 2.0 5m: - 0.0 - 1.5 15m: - 0.1 - 1.0 emitatstartup: True onchangeonly: FalseNew behavior:
beacons: load: - averages: 1m: - 0.0 - 2.0 5m: - 0.0 - 1.5 15m: - 0.1 - 1.0 - emitatstartup: True - onchangeonly: False-
logbeacon Old behavior:
beacons: log: file: <path> <tag>: regex: <pattern>New behavior:
beacons: log: - file: <path> - tags: <tag>: regex: <pattern>-
network_infobeacon Old behavior:
beacons: network_info: - eth0: type: equal bytes_sent: 100000 bytes_recv: 100000 packets_sent: 100000 packets_recv: 100000 errin: 100 errout: 100 dropin: 100 dropout: 100New behavior:
beacons: network_info: - interfaces: eth0: type: equal bytes_sent: 100000 bytes_recv: 100000 packets_sent: 100000 packets_recv: 100000 errin: 100 errout: 100 dropin: 100 dropout: 100-
network_settingsbeacon Old behavior:
beacons: network_settings: eth0: ipaddr: promiscuity: onvalue: 1 eth1: linkmode:New behavior:
beacons: network_settings: - interfaces: - eth0: ipaddr: promiscuity: onvalue: 1 - eth1: linkmode:-
proxy_examplebeacon Old behavior:
beacons: proxy_example: endpoint: beaconNew behavior:
beacons: proxy_example: - endpoint: beacon-
psbeacon Old behavior:
beacons: ps: - salt-master: running - mysql: stoppedNew behavior:
beacons: ps: - processes: salt-master: running mysql: stopped-
salt_proxybeacon Old behavior:
beacons: salt_proxy: - p8000: {} - p8001: {}New behavior:
beacons: salt_proxy: - proxies: p8000: {} p8001: {}-
sensehatbeacon Old behavior:
beacons: sensehat: humidity: 70% temperature: [20, 40] temperature_from_pressure: 40 pressure: 1500New behavior:
beacons: sensehat: - sensors: humidity: 70% temperature: [20, 40] temperature_from_pressure: 40 pressure: 1500-
servicebeacon Old behavior:
`-
- beacons:
-
- service:
-
salt-master: mysql:
` New behavior:
beacons: service: - services: nginx: onchangeonly: True delay: 30 uncleanshutdown: /run/nginx.pid ``
sh
beacon- Old behavior:
-
` beacons: sh: {}
` - New behavior:
-
` beacons: sh: []
`
status
beacon- Old behavior:
-
` beacons: status: {}
` - New behavior:
-
` beacons: status: []
`
telegram_bot_msg
beacon- Old behavior:
-
` beacons: telegram_bot_msg: token: "<bot access token>" accept_from: - "<valid username>" interval: 10
` - New behavior:
-
` beacons: telegram_bot_msg: - token: "<bot access token>" - accept_from: - "<valid username>" - interval: 10
`
twilio_txt_msg
beacon- Old behavior:
-
` beacons: twilio_txt_msg: account_sid: "<account sid>" auth_token: "<auth token>" twilio_number: "+15555555555" interval: 10
` - New behavior:
-
` beacons: twilio_txt_msg: - account_sid: "<account sid>" - auth_token: "<auth token>" - twilio_number: "+15555555555" - interval: 10
`
wtmp
beacon- Old behavior:
-
` beacons: wtmp: {}
` - New behavior:
-
` beacons: wtmp: []
`
Deprecations
Configuration Option Deprecations
- The
requests_lib
configuration option has been removed. Please usebackend
instead.
Profitbricks Cloud Updated Dependency
The minimum version of the profitbrick
python package
for the profitbricks
cloud driver has changed from 3.0.0 to
3.1.0.
Azure Cloud Updated Dependency
The azure sdk used for the azurearm
cloud driver now
depends on azure-cli>=2.0.12
Module Deprecations
The blockdev
execution module has been removed. Its
functions were merged with the disk
module. Please use the
disk
execution module instead.
The lxc
execution module had the following changes:
- The
dnsservers
option to thecloud_init_interface
function no longer defaults to4.4.4.4
and8.8.8.8
. - The
dns_via_dhcp
option to thecloud_init_interface
function defaults toTrue
now instead ofFalse
.
The win_psget
module had the following changes:
- The
psversion
function was removed. Please usecmd.shell_info
instead.
The win_service
module had the following changes:
- The
config
function was removed. Please use themodify
function instead. - The
binpath
option was removed from thecreate
function. Please usebin_path
instead. - The
depend
option was removed from thecreate
function. Please usedependencies
instead. - The
DisplayName
option was removed from thecreate
function. Please usedisplay_name
instead. - The
error
option was removed from thecreate
function. Please useerror_control
instead. - The
group
option was removed from thecreate
function. Please useload_order_group
instead. - The
obj
option was removed from thecreate
function. Please useaccount_name
instead. - The
password
option was removed from thecreate
function. Please useaccount_password
instead. - The
start
option was removed from thecreate
function. Please usestart_type
instead. - The
type
option was removed from thecreate
function. Please useservice_type
instead.
Runner Deprecations
The manage
runner had the following changes:
- The
root_user
kwarg was removed from thebootstrap
function. Please usesalt-ssh
roster entries for the host instead.
State Deprecations
The archive
state had the following changes:
- The
tar_options
and thezip_options
options were removed from theextracted
function. Please useoptions
instead.
The cmd
state had the following changes:
- The
user
andgroup
options were removed from therun
function. Please userunas
instead. - The
user
andgroup
options were removed from thescript
function. Please userunas
instead. - The
user
andgroup
options were removed from thewait
function. Please userunas
instead. - The
user
andgroup
options were removed from thewait_script
function. Please userunas
instead.
The file
state had the following changes:
- The
show_diff
option was removed. Please useshow_changes
instead.
Grain Deprecations
For smartos
some grains have been deprecated. These
grains will be removed in Neon.
- The
hypervisor_uuid
has been replaced withmdata:sdc:server_uuid
grain. - The
datacenter
has been replaced withmdata:sdc:datacenter_name
grain.
Minion Blackout
During a blackout, minions will not execute any remote execution
commands, except for saltutil.refresh_pillar <salt.modules.saltutil.refresh_pillar>
.
Previously, support was added so that blackouts are enabled using a
special pillar key, minion_blackout
set to
True
and an optional pillar key
minion_blackout_whitelist
to specify additional functions
that are permitted during blackout. This release adds support for using
this feature in the grains as well, by using special grains keys
minion_blackout
and
minion_blackout_whitelist
.
Pillar Deprecations
The legacy configuration for git_pillar
has been
removed. Please use the new configuration for git_pillar
,
which is documented in the external pillar module for git_pillar <salt.pillar.git_pillar>
.
Utils Deprecations
The salt.utils.cloud.py
file had the following
change:
- The
fire_event
function now requires asock_dir
argument. It was previously optional.
Other Miscellaneous Deprecations
The version.py
file had the following changes:
- The
rc_info
function was removed. Please usepre_info
instead.
Warnings for moving away from the env
option were
removed. saltenv
should be used instead. The removal of
these warnings does not have a behavior change. Only the warning text
was removed.