2018.3.0.rst 63 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075107610771078107910801081108210831084108510861087108810891090109110921093109410951096109710981099110011011102110311041105110611071108110911101111111211131114111511161117111811191120112111221123112411251126112711281129113011311132113311341135113611371138113911401141114211431144114511461147114811491150115111521153115411551156115711581159116011611162116311641165116611671168116911701171117211731174117511761177117811791180118111821183118411851186118711881189119011911192119311941195119611971198119912001201120212031204120512061207120812091210121112121213121412151216121712181219122012211222122312241225122612271228122912301231123212331234123512361237123812391240124112421243124412451246124712481249125012511252125312541255125612571258125912601261126212631264126512661267126812691270127112721273127412751276127712781279128012811282128312841285128612871288128912901291129212931294129512961297129812991300130113021303130413051306130713081309131013111312131313141315131613171318131913201321132213231324132513261327132813291330133113321333133413351336133713381339134013411342134313441345134613471348134913501351135213531354135513561357135813591360136113621363136413651366136713681369137013711372137313741375137613771378137913801381138213831384138513861387138813891390139113921393139413951396139713981399140014011402140314041405140614071408140914101411141214131414141514161417141814191420142114221423142414251426142714281429143014311432143314341435143614371438143914401441144214431444144514461447144814491450145114521453145414551456145714581459146014611462146314641465146614671468146914701471147214731474147514761477147814791480148114821483148414851486148714881489149014911492149314941495149614971498149915001501150215031504150515061507150815091510151115121513151415151516151715181519152015211522152315241525152615271528152915301531153215331534153515361537153815391540154115421543154415451546154715481549155015511552155315541555155615571558155915601561156215631564156515661567156815691570157115721573157415751576157715781579158015811582158315841585158615871588158915901591159215931594159515961597159815991600160116021603160416051606160716081609161016111612161316141615161616171618161916201621162216231624162516261627162816291630163116321633163416351636163716381639164016411642164316441645164616471648164916501651165216531654165516561657165816591660166116621663166416651666166716681669167016711672167316741675167616771678167916801681168216831684168516861687168816891690169116921693169416951696169716981699170017011702170317041705170617071708170917101711171217131714171517161717171817191720172117221723172417251726172717281729173017311732173317341735173617371738173917401741174217431744174517461747174817491750175117521753175417551756175717581759176017611762176317641765176617671768176917701771177217731774177517761777177817791780178117821783178417851786178717881789179017911792179317941795179617971798179918001801180218031804180518061807180818091810181118121813181418151816181718181819182018211822182318241825182618271828182918301831183218331834183518361837183818391840184118421843184418451846184718481849185018511852185318541855185618571858185918601861186218631864186518661867186818691870187118721873187418751876187718781879188018811882188318841885188618871888188918901891189218931894189518961897189818991900190119021903190419051906190719081909191019111912191319141915191619171918191919201921192219231924192519261927192819291930193119321933193419351936193719381939194019411942194319441945194619471948194919501951195219531954195519561957195819591960196119621963196419651966196719681969197019711972197319741975197619771978
  1. .. _release-2018-3-0:
  2. =============================================
  3. Salt 2018.3.0 Release Notes - Codename Oxygen
  4. =============================================
  5. .. warning::
  6. If you are using Jinja to dump lists or dictionaries in your SLS files,
  7. this will now cause errors in Python 2 since Jinja does not produce
  8. YAML-compatible output when strings in the data structures contain unicode
  9. types. The dictionary must be passed through a Jinja filter to produce
  10. YAML-compatible strings.
  11. The below is an example of invalid SLS:
  12. .. code-block:: yaml
  13. /etc/foo.conf:
  14. file.mangaged:
  15. - source: salt://foo.conf
  16. - template: jinja
  17. - defaults: {{ mydict }}
  18. To make it valid, use either one of Salt's own ``json`` or ``yaml``
  19. filters:
  20. .. code-block:: yaml
  21. /etc/foo.conf:
  22. file.mangaged:
  23. - source: salt://foo.conf
  24. - template: jinja
  25. - defaults: {{ mydict | json }}
  26. Unicode/Python 3 Compatibility Improvements
  27. ===========================================
  28. This release fixes a number of nagging issues with Unicode strings in Salt
  29. under Python 2 (ex. ``'ascii' codec can't decode byte 0xd0``). For best
  30. results, use a UTF-8 locale (such as by setting the ``LANG`` environment
  31. variable to one which supports UTF-8. For example ``en_US.UTF-8``,
  32. ``de_DE.UTF-8``, ``ru_RU.UTF-8``, ``C.UTF-8``).
  33. Additionally, a number of Python 3 compatibility fixes have been made, many of
  34. them having to do with file I/O and str/bytes mismatches.
  35. We continue to work toward improving both Unicode and Python 3 compatibility
  36. and welcome any feedback.
  37. Lots of Docker Improvements
  38. ---------------------------
  39. Much Improved Support for Docker Networking
  40. *******************************************
  41. The :py:func:`docker_network.present <salt.states.docker_network.present>`
  42. state has undergone a full rewrite, which includes the following improvements:
  43. Full API Support for Network Management
  44. ***************************************
  45. The improvements made to input handling in the
  46. :py:func:`docker_container.running <salt.states.docker_container.running>`
  47. state for 2017.7.0 have now been expanded to :py:func:`docker_network.present
  48. <salt.states.docker_network.present>`. This brings with it full support for all
  49. tunable configuration arguments.
  50. Custom Subnets
  51. **************
  52. Custom subnets can now be configured. Both IPv4 and mixed IPv4/IPv6 networks
  53. are supported. See :ref:`here <salt-states-docker-network-present-ipam>` for
  54. more information.
  55. Network Configuration in :py:func:`docker_container.running <salt.states.docker_container.running>` States
  56. **********************************************************************************************************
  57. A long-requested feature has finally been added! It is now possible to
  58. configure static IPv4/IPv6 addresses, as well as links and labels. See
  59. :ref:`here <salt-states-docker-container-network-management>` for more
  60. information.
  61. .. note::
  62. While the ``containers`` argument to :py:func:`docker_network.present
  63. <salt.states.docker_network.present>` will continue to be supported, it
  64. will no longer be the recommended way of ensuring that a container is
  65. attached to a network.
  66. Improved Handling of Images from Custom Registries
  67. **************************************************
  68. Rather than attempting to parse the tag from the passed image name, Salt will
  69. now resolve that tag down to an image ID and use that ID instead.
  70. .. important::
  71. Due to this change, there are some backward-incompatible changes to image
  72. management. See below for a full list of these changes.
  73. Backward-incompatible Changes to Docker Image Management
  74. ++++++++++++++++++++++++++++++++++++++++++++++++++++++++
  75. Passing image names to the following functions must now be done using separate
  76. ``repository`` and ``tag`` arguments:
  77. - :py:func:`docker.build <salt.modules.dockermod.build>`
  78. - :py:func:`docker.commit <salt.modules.dockermod.commit>`
  79. - :py:func:`docker.import <salt.modules.dockermod.import_>`
  80. - :py:func:`docker.load <salt.modules.dockermod.load>`
  81. - :py:func:`docker.tag <salt.modules.dockermod.tag_>`
  82. - :py:func:`docker.sls_build <salt.modules.dockermod.sls_build>`
  83. Additionally, the ``tag`` argument must now be explicitly passed to the
  84. :py:func:`docker_image.present <salt.states.docker_image.present>` state,
  85. unless the image is being pulled from a docker registry.
  86. State and Execution Module Support for ``docker run`` Functionality
  87. *******************************************************************
  88. The :py:func:`docker_container.running <salt.states.docker_container.running>`
  89. state is good for containers which run services, but it is not as useful for
  90. cases in which the container only needs to run once. The ``start`` argument to
  91. :py:func:`docker_container.running <salt.states.docker_container.running>` can
  92. be set to ``False`` to prevent the container from being started again on a
  93. subsequent run, but for many use cases this is not sufficient. Therefore, the
  94. :py:func:`docker.run_container <salt.modules.dockermod.run_container>`
  95. remote-execution function was added. When used on the Salt CLI, it will return
  96. information about the container, such as its name, ID, exit code, and any
  97. output it produces.
  98. State support has also been added via the :py:func:`docker_container.run
  99. <salt.states.docker_container.run>` state. This state is modeled after the
  100. :py:func:`cmd.run <salt.states.cmd.run>` state, and includes arguments like
  101. ``onlyif``, ``unless``, and ``creates`` to control whether or not the container
  102. is run.
  103. Full API Support for :py:func:`docker.logs <salt.modules.dockermod.logs>`
  104. *************************************************************************
  105. This function now supports all of the functions that its Docker API counterpart
  106. does, allowing you to do things like include timestamps, and also suppress
  107. stdout/stderr, etc. in the return.
  108. `start` Argument Added to :py:func:`docker.create <salt.modules.dockermod.create>` Function
  109. *******************************************************************************************
  110. This removes the need to run :py:func:`docker.start
  111. <salt.modules.dockermod.start_>` separately when creating containers on the
  112. Salt CLI.
  113. .. code-block:: bash
  114. salt myminion docker.create image=foo/bar:baz command=/path/to/command start=True
  115. Use SaltSSH Minions like regular Master-Minions
  116. ===============================================
  117. The Master process can now also call SSH minions as if they were connected to
  118. the master using ZeroMQ. By setting ``enable_ssh_minions: True`` in the master
  119. config file, the master will create a Salt SSH client process which connects to
  120. the minion and returns the output for the ``salt`` CLI to use like a regular
  121. minion. This can be used anywhere the LocalClient is used.
  122. Exceptions Raised for Authentication/Authorization Errors
  123. =========================================================
  124. When sending ``publish`` commands via ``master.py`` and ``masterapi.py`` and an
  125. authorization or authentication problem is encountered, Salt will now raise the
  126. appropriate exceptions instead of returning an empty string: ``''``.
  127. The reasoning behind this change is to make it easier to debug various scenarios
  128. surrounding authentication and authorization issues more effectively.
  129. Comparison Operators in Package Installation
  130. ============================================
  131. Salt now supports using comparison operators (e.g. ``>=1.2.3``) when installing
  132. packages on minions which use :mod:`yum/dnf <salt.modules.yumpkg>` or
  133. :mod:`apt <salt.modules.aptpkg>`. This is supported both in the
  134. :py:func:`pkg.installed <salt.states.pkg.installed>` state and in the ``pkg.install``
  135. remote execution function.
  136. :ref:`Master Tops <master-tops-system>` Changes
  137. ===============================================
  138. When both :ref:`Master Tops <master-tops-system>` and a
  139. :ref:`Top File <states-top>` produce SLS matches for a given minion, the matches
  140. were being merged in an unpredictable manner which did not preserve ordering. This has
  141. been changed. The top file matches now execute in the expected order, followed
  142. by any master tops matches that are not matched via a top file.
  143. To make master tops matches execute first, followed by top file matches, set
  144. the new :conf_minion:`master_tops_first` minion config option to ``True``.
  145. Several Jinja Filters Renamed
  146. =============================
  147. The following Jinja filters (originally added in 2017.7.0) have been renamed
  148. due to the fact that they were inaccurately named when initially added. The
  149. original names will be supported until the 3000 release of Salt.
  150. - :jinja_ref:`rand_str` renamed to :jinja_ref:`random_hash`
  151. - :jinja_ref:`jinja_decode_dict` renamed to :jinja_ref:`jinja_encode_dict`
  152. - :jinja_ref:`jinja_decode_list` renamed to :jinja_ref:`jinja_encode_list`
  153. Return Codes for Runner/Wheel Functions
  154. =======================================
  155. When using :ref:`orchestration <orchestrate-runner>`, runner and wheel
  156. functions used to report a ``True`` result if the function ran to completion
  157. without raising an exception. It is now possible to set a return code in the
  158. ``__context__`` dictionary, allowing runner and wheel functions to report that
  159. they failed. Here's some example pseudocode:
  160. .. code-block:: python
  161. def myrunner():
  162. ...
  163. # do stuff
  164. ...
  165. if some_error_condition:
  166. __context__["retcode"] = 1
  167. return result
  168. Variable Update Intervals for Fileserver Backends
  169. =================================================
  170. Prior to this release, fileservers would be updated as part of a dedicated
  171. "maintenance" process, in which various routine maintenance tasks were
  172. performed. This tied the update interval to the :conf_master:`loop_interval`
  173. config option, and also forced all fileservers to update at the same interval.
  174. 2018.3.0 adds the following configuration options for the various fileserver
  175. backends:
  176. - :conf_master:`roots_update_interval`
  177. - :conf_master:`azurefs_update_interval`
  178. - :conf_master:`gitfs_update_interval`
  179. - :conf_master:`hgfs_update_interval`
  180. - :conf_master:`minionfs_update_interval`
  181. - :conf_master:`s3fs_update_interval`
  182. - :conf_master:`svnfs_update_interval`
  183. These allow for update intervals to be set for each individual backend. The
  184. default value for each of these is 60 seconds.
  185. In addition, for :ref:`GitFS <tutorial-gitfs>` it is also possible to apply
  186. intervals to individual remotes. See :ref:`here <gitfs-update-intervals>` for
  187. examples.
  188. .. note::
  189. git_pillar does not yet support variable update intervals, this is targeted
  190. for the next feature release (2019.2.0).
  191. LDAP via External Authentication Changes
  192. ========================================
  193. In this release of Salt, if LDAP Bind Credentials are supplied, then
  194. these credentials will be used for all LDAP access except the first
  195. authentication when a job is submitted. The first authentication will
  196. use the user's credentials as passed on the CLI. This behavior is to
  197. accommodate certain two-factor authentication schemes where the authentication
  198. token can only be used once.
  199. In previous releases the bind credentials would only be used to determine
  200. the LDAP user's existence and group membership. The user's LDAP credentials
  201. were used from then on.
  202. Stormpath External Authentication Removed
  203. =========================================
  204. Per Stormpath's announcement, their API will be shutting down on 8/17/2017 at
  205. noon PST so the Stormpath external authentication module has been removed.
  206. https://stormpath.com/oktaplusstormpath
  207. New (Proxy) Minion Configuration Options
  208. ========================================
  209. To be able to connect the Minion to the Master using a certain source IP address
  210. or port, the following options have been added:
  211. - :conf_minion:`source_interface_name`
  212. - :conf_minion:`source_address`
  213. - :conf_minion:`source_ret_port`
  214. - :conf_minion:`source_publish_port`
  215. :conf_minion:`environment` config option renamed to :conf_minion:`saltenv`
  216. ==========================================================================
  217. The :conf_minion:`environment` config option predates referring to a salt
  218. fileserver environment as a **saltenv**. To pin a minion to a single
  219. environment for running states, one would use :conf_minion:`environment`, but
  220. overriding that environment would be done with the ``saltenv`` argument. For
  221. consistency, :conf_minion:`environment` is now simply referred to as
  222. :conf_minion:`saltenv`. There are no plans to deprecate or remove
  223. :conf_minion:`environment`, if used it will log a warning and its value will be
  224. used as :conf_minion:`saltenv`.
  225. :conf_minion:`lock_saltenv` config option added
  226. ===============================================
  227. If set to ``True``, this option will prevent a minion from allowing the
  228. ``saltenv`` argument to override the value set in :conf_minion:`saltenv` when
  229. running states.
  230. Failed Minions for State/Function Orchestration Jobs Added to Changes Dictionary
  231. ================================================================================
  232. For orchestration jobs which run states (or run remote execution functions and
  233. also use a :ref:`fail function <orchestrate-runner-fail-functions>` to indicate
  234. success or failure), minions which have ``False`` results were previously
  235. included as a formatted string in the comment field of the return for that
  236. orchestration job. This made the failed returns difficult to :ref:`parse
  237. programatically <orchestrate-runner-parsing-results-programatically>`. The
  238. failed returns in these cases are now included in the changes dictionary,
  239. making for much easier parsing.
  240. Grains
  241. ======
  242. - ``fc_wwn`` - Show all fibre channel world wide port names for a host, must be
  243. enabled with `fibre_channel_grains`
  244. - ``iscsi_iqn`` - Show the iSCSI IQN name for a host
  245. - ``swap_total`` - Show the configured swap_total for Linux, \*BSD, OS X and
  246. Solaris/SunOS
  247. - ``virtual``:
  248. - identifies reports KVM and VMM hypervisors when running an OpenBSD guest
  249. - for detecting Solaris Logical Domains (LDOMs) running on T-Series SPARC
  250. hardware. The ``virtual_subtype`` grain is populated as a list of domain
  251. roles.
  252. Salt Minion Auto-discovery
  253. ==========================
  254. Using auto-discovery, the Salt Minion now no longer needs to be configured
  255. against a specific DNS name or IP address of a Master.
  256. For this feature Salt Master now requires port 4520 for UDP broadcast packets to be opened
  257. and the Salt Minion be able to send UDP packets to the same port.
  258. Configuration
  259. =============
  260. By default, automatic discovery is disabled.
  261. .. warning::
  262. Due to the current limitations that will be changing in a future release,
  263. before you turn on auto-discovery, make sure your network is secured and
  264. trusted.
  265. Auto-discovery is configured on Master and Minion. Both of them are configured via the ``discovery`` option
  266. as follows:
  267. **Master configuration**
  268. To use the default configuration, which accepts any minion, simply set ``discovery`` to True:
  269. .. code-block:: yaml
  270. discovery: true
  271. A sub-option called `mapping` allows auto-discovery to help find the proper
  272. Master. The mapping contains an arbitrary set of key/value pairs, which the
  273. Minion configuration can target. By default, no mappings are set.
  274. Example:
  275. .. code-block:: yaml
  276. discovery:
  277. mapping:
  278. description: SES 5.0
  279. node: 1
  280. It is also possible to change the port used from the default of ``4520``, by
  281. setting a ``port`` option under the Master's ``discovery`` configuration:
  282. .. code-block:: yaml
  283. discovery:
  284. port: 4567
  285. .. note::
  286. When using a port number other than the default, the Minion's ``discovery``
  287. configuration must *also* have a port specified, otherwise the Minion will
  288. still attempt to contact the Master on port ``4520``.
  289. **Minion configuration**
  290. In addition to the ``mapping`` and ``port`` options, the following additional options are available to Minions:
  291. - ``attempts`` - This option specifies how many broadcast requests should be
  292. sent to the network, waiting for any Master response. Each attempt takes a
  293. couple of seconds, so raising this value may result in a slower Minion
  294. startup. Note that, on a properly-configured network, autodiscovery should
  295. succeed on the first attempt. By default, this value is set to ``3``.
  296. - ``match`` - This option can be set to either ``all`` or ``any``, and it
  297. determines how the values configured in ``mapping`` are matched. If set to
  298. ``all``, then all of the key/value pairs in the Minion's ``mapping`` must
  299. match a given Master. If set to ``any`` (the default), then any match to a
  300. key/value mapping will constitute a match.
  301. - ``pause`` - The interval in seconds between attempts (default: 5).
  302. - ``fibre_channel_grains`` - Enables the ``fc_wwn`` grain. (Default: False)
  303. - ``iscsi_grains`` - Enables the ``iscsi_iqn`` grain. (Default: False)
  304. Connection to a type instead of DNS
  305. ===================================
  306. By now each Minion was connecting to a Master by DNS or IP address. From now on
  307. it is possible also to connect to a _type_ of a Master. For example, in a
  308. network there are three different Masters, each corresponds for a particular
  309. niche or environment or specific role etc. The Minion is supposed to connect
  310. only to one of those Masters that is described appropriately.
  311. To achieve such an effect, each ``/etc/salt/master`` configuration should have
  312. a ``discovery`` option, which should have a ``mapping`` element with arbitrary
  313. key/value pairs. The same configuration should be on the Minion, so then when
  314. mapping matches, Minion recognises Master as its connection target.
  315. Example for Master configuration (``/etc/salt/master``):
  316. .. code-block:: yaml
  317. discovery:
  318. mapping:
  319. description: SES 5.0
  320. node: 1
  321. The example above describes a system that is running a particular product,
  322. where ``description`` is an arbitrary key and ``SES 5.0`` is just a string. In
  323. order to match exactly this Master, the following configuration at Minion
  324. should be present:
  325. .. code-block:: yaml
  326. discovery:
  327. match: all # Can be "all" or "any"
  328. mapping:
  329. description: SES 5.0
  330. node: 1
  331. Notice ``match`` criteria is set to ``all``. This would mean that from all
  332. found Masters select only that, which ``description`` is set to ``SES 5.0``
  333. _and_ ``node`` is set to ``1``. All other Masters will be ignored.
  334. Limitations
  335. ===========
  336. This feature has a couple of _temporary_ limitations that are subject to change
  337. in the future:
  338. - Only one Master on the network is supported. Currently the Minion cannot
  339. select which Master out of few the same to choose. This will change to
  340. choosing the Master that is least loaded.
  341. - Minions will accept _any_ master that matches connection criteria without any
  342. particular security applied (priv/pub key check, signature, fingerprint etc).
  343. That implies that administrator is expected to know his network and make sure
  344. it is clean.
  345. New Modules
  346. ===========
  347. - :mod:`salt.modules.purefa <salt.modules.purefa>`
  348. New NaCl Renderer
  349. =================
  350. A new renderer has been added for encrypted data.
  351. New support for Cisco UCS Chassis
  352. =================================
  353. The salt proxy minion now allows for control of Cisco USC chassis. See
  354. the ``cimc`` modules for details.
  355. New support for Cassandra v3
  356. ============================
  357. The ``cassandra_cql`` module now supports Cassandra v3 which has changed
  358. its internal schema to define keyspaces and columns.
  359. New salt-ssh roster
  360. ===================
  361. A new roster has been added that allows users to pull in a list of hosts
  362. for salt-ssh targeting from a ``~/.ssh`` configuration. For full details,
  363. please see the ``sshconfig`` roster.
  364. New GitFS Features
  365. ==================
  366. Two new features which affect how GitFS maps branches/tags to fileserver
  367. environments (i.e. ``saltenvs``) have been added:
  368. 1. It is now possible to completely turn off Salt's default mapping logic
  369. (aside from the mapping of the ``base`` saltenv). This can be triggered
  370. using the new :conf_master:`gitfs_disable_saltenv_mapping` config option.
  371. .. note::
  372. When this is disabled, only the ``base`` saltenv and any configured
  373. using :ref:`per-saltenv configuration parameters
  374. <gitfs-per-saltenv-config>` will be available.
  375. 2. The types of refs which Salt will use as saltenvs can now be controlled. In
  376. previous releases, branches and tags were both mapped as environments, and
  377. individual commit SHAs could be specified as saltenvs in states (and when
  378. caching files using :py:func:`cp.cache_file <salt.modules.cp.cache_file>`).
  379. Using the new :conf_master:`gitfs_ref_types` config option, the types of
  380. refs which are used as saltenvs can be restricted. This makes it possible to
  381. ignore all tags and use branches only, and also to keep SHAs from being made
  382. available as saltenvs.
  383. Additional output modes
  384. =======================
  385. The ``state_output`` parameter now supports ``full_id``, ``changes_id`` and
  386. ``terse_id``. Just like ``mixed_id``, these use the state ID as name in the
  387. highstate output. For more information on these output modes, see the docs for
  388. the :mod:`Highstate Outputter <salt.output.highstate>`.
  389. Windows
  390. =======
  391. Python Version
  392. --------------
  393. Python 2 Windows API was design when Windows did not support Unicode. Windows
  394. now supports Unicode however to keep backwards compatibility Python 2 Windows
  395. API has not been changed. Python 3 Windows API supports Unicode. Salt Python 3
  396. installer is the recommend choice for users who need characters other than
  397. Non-ASCII (7bit) characters.
  398. :py:mod:`pkg <salt.modules.win_pkg>` Execution module changes
  399. -------------------------------------------------------------
  400. Significant changes have been made to the :mod:`win_pkg <salt.modules.win_pkg>`
  401. execution module. Users should test this release against their existing package
  402. sls definition files. These changes are also in 2016.11.9 & 2017.7.3.
  403. - ``pkg.list_available`` no longer defaults to refreshing the winrepo meta
  404. database.
  405. - ``pkg.install`` without a ``version`` parameter no longer upgrades software
  406. if the software is already installed. Use ``pkg.install version=latest`` or
  407. in a state use ``pkg.latest`` to get the old behavior.
  408. - ``pkg.list_pkgs`` now returns multiple versions if software installed more
  409. than once.
  410. - ``pkg.list_pkgs`` now returns 'Not Found' when the version is not found
  411. instead of '(value not set)' which matches the contents of the sls
  412. definitions.
  413. - ``pkg.remove()`` will wait up to 3 seconds (normally about a second) to detect
  414. changes in the registry after removing software, improving reporting of
  415. version changes.
  416. - ``pkg.remove()`` can remove ``latest`` software, if ``latest`` is defined in
  417. sls definition.
  418. - Documentation was update for the execution module to match the style in new
  419. versions, some corrections as well.
  420. - All install/remove commands are prefix with cmd.exe shell and cmdmod is
  421. called with a command line string instead of a list. Some sls files in
  422. saltstack/salt-winrepo-ng expected the commands to be prefixed with cmd.exe
  423. (i.e. the use of ``&``).
  424. - Some execution module functions results, now behavour more like their
  425. Unix/Linux versions.
  426. Installer
  427. ---------
  428. Changes to config handling
  429. **************************
  430. Behavior with existing configuration has changed. With previous windows
  431. installers the existing config was used and the master and minion id could be
  432. modified via the installer. It was problematic in that it didn't account for
  433. configuration that may be defined in the ``minion.d`` directory. This change
  434. gives you the option via a drop-down list to use one of the following:
  435. - Default Config: Use the config that comes with the installer
  436. - Existing Config: Use the current config without changes
  437. - Custom Config: Select a custom config using the file picker
  438. The existing config option will only be available if the installer detects an
  439. existing config. If there is an existing config, and you choose ``Default`` or
  440. ``Custom``, the existing config will be deleted, including the ``minion.d``
  441. directory, and replaced by your selection.
  442. The ``Default Config`` and ``Custom Config`` options will allow you to modify
  443. the Master and the Minion ID. ``Existing Config`` will leave the existing
  444. configuration unchanged.
  445. These settings can be defined on the command line using the following switches:
  446. - ``/default-config``
  447. - ``/custom-config=C:\Path\To\Custom\Config\minion``
  448. If neither option is passed and there is an existing config, the default is to
  449. use the existing config. If there is no existing config (new install) the
  450. default config will be used.
  451. Multi-master configuration
  452. **************************
  453. The installer now has the ability to apply a multi-master configuration either
  454. from the GUI or the command line. The ``master`` field in the GUI can accept
  455. either a single master or a comma-separated list of masters. The command-line
  456. switch (``/master=``) can accept the same.
  457. Command-line help
  458. *****************
  459. The Windows installer will now display command-line help when a help switch
  460. (``/?``) is passed.
  461. New utils module ``salt.utils.pkg.win``
  462. ---------------------------------------
  463. A new utils module has been added, which gathers information about windows
  464. installed software. This is currently not used by any salt execution module or
  465. state at this time. Users are encouraged to run this and report any issues.
  466. Running the command with the ``detail`` option will be useful for anyone
  467. developing windows package definitions. With salt installed in the default
  468. location the following command will print the help message.
  469. .. code-block:: text
  470. chcp 65001
  471. c:\salt\bin\python.exe c:\salt\bin\lib\site-packages\salt\utils\pkg\win.py
  472. c:\salt\bin\python.exe c:\salt\bin\lib\site-packages\salt\utils\pkg\win.py detail system
  473. Salt Cloud Features
  474. ===================
  475. OpenStack Revamp
  476. ----------------
  477. The OpenStack Driver has been rewritten mostly from scratch. Salt is now using
  478. the `shade driver <https://docs.openstack.org/shade/latest/>`.
  479. With this, the ``nova`` driver is being deprecated.
  480. :mod:`openstack driver <salt.cloud.clouds.openstack>`
  481. There have also been several new modules and states added for managing OpenStack
  482. setups using shade as well.
  483. :mod:`keystone <salt.modules.keystoneng>`
  484. :mod:`keystone role grant <salt.states.keystone_role_grant>`
  485. :mod:`keystone group <salt.states.keystone_group>`
  486. :mod:`keystone role <salt.states.keystone_role>`
  487. :mod:`keystone service <salt.states.keystone_service>`
  488. :mod:`keystone user <salt.states.keystone_user>`
  489. :mod:`keystone domain <salt.states.keystone_domain>`
  490. :mod:`keystone project <salt.states.keystone_project>`
  491. :mod:`keystone endpoint <salt.states.keystone_endpoint>`
  492. :mod:`glance <salt.modules.glanceng>`
  493. :mod:`glance_image <salt.states.glance_image>`
  494. :mod:`neutron <salt.modules.neutronng>`
  495. :mod:`neutron subnet <salt.states.neutron_subnet>`
  496. :mod:`neutron secgroup <salt.states.neutron_secgroup>`
  497. :mod:`neutron secgroup rule <salt.states.neutron_secgroup_rule>`
  498. :mod:`neutron network <salt.states.neutron_network>`
  499. Pre-Flight Commands
  500. -------------------
  501. Support has been added for specified "preflight commands" to run on a VM before
  502. the deploy script is run. These must be defined as a list in a cloud configuration
  503. file. For example:
  504. .. code-block:: yaml
  505. my-cloud-profile:
  506. provider: linode-config
  507. image: Ubuntu 16.04 LTS
  508. size: Linode 2048
  509. preflight_cmds:
  510. - whoami
  511. - echo 'hello world!'
  512. These commands will run in sequence **before** the bootstrap script is executed.
  513. New salt-cloud Grains
  514. ---------------------
  515. When salt-cloud creates a new minion, it will now add grain information
  516. to the minion configuration file, identifying the resources originally used
  517. to create it.
  518. The generated grain information will appear similar to:
  519. .. code-block:: yaml
  520. grains:
  521. salt-cloud:
  522. driver: ec2
  523. provider: my_ec2:ec2
  524. profile: ec2-web
  525. The generation of salt-cloud grains can be suppressed by the
  526. option ``enable_cloud_grains: 'False'`` in the cloud configuration file.
  527. Upgraded Saltify Driver
  528. -----------------------
  529. The salt-cloud Saltify driver is used to provision machines which
  530. are not controlled by a dedicated cloud supervisor (such as typical hardware
  531. machines) by pushing a salt-bootstrap command to them and accepting them on
  532. the salt master. Creation of a node has been its only function and no other
  533. salt-cloud commands were implemented.
  534. With this upgrade, it can use the salt-api to provide advanced control,
  535. such as rebooting a machine, querying it along with conventional cloud minions,
  536. and, ultimately, disconnecting it from its master.
  537. After disconnection from ("destroying" on) one master, a machine can be
  538. re-purposed by connecting to ("creating" on) a subsequent master.
  539. New Vagrant Driver
  540. ------------------
  541. The salt-cloud Vagrant driver brings virtual machines running in a limited
  542. environment, such as a programmer's workstation, under salt-cloud control.
  543. This can be useful for experimentation, instruction, or testing salt configurations.
  544. Using salt-api on the master, and a salt-minion running on the host computer,
  545. the Vagrant driver can create (``vagrant up``), restart (``vagrant reload``),
  546. and destroy (``vagrant destroy``) VMs, as controlled by salt-cloud profiles
  547. which designate a ``Vagrantfile`` on the host machine.
  548. The master can be a very limited machine, such as a Raspberry Pi, or a small
  549. VagrantBox VM.
  550. Python PyWinRM Module
  551. ---------------------
  552. Versions of ``pywinrm>=0.2.1`` are finally able to disable validation of self
  553. signed certificates. :ref:`Here <new-pywinrm>` for more information.
  554. DigitalOcean
  555. ------------
  556. The DigitalOcean driver has been renamed to conform to the company name. The
  557. new driver name is ``digitalocean``. The old name ``digital_ocean`` and a
  558. short one ``do`` will still be supported through virtual aliases, this is
  559. mostly cosmetic.
  560. Azure Cloud
  561. -----------
  562. The azure sdk used for the ``azurearm`` cloud driver now depends on
  563. ``azure-cli>=2.0.12``
  564. New ``saltclass`` pillar/master_tops modules
  565. ============================================
  566. 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.
  567. Saltclass lets you define your nodes from simple ``yaml`` files (``.yml``) through hierarchical class inheritance with the possibility to override pillars down the tree.
  568. **Features**
  569. - Define your nodes through hierarchical class inheritance
  570. - Reuse your reclass data with minimal modifications
  571. - applications => states
  572. - parameters => pillars
  573. - Use Jinja templating in your yaml definitions
  574. - Access to the following Salt objects in Jinja
  575. - ``__opts__``
  576. - ``__salt__``
  577. - ``__grains__``
  578. - ``__pillars__``
  579. - ``minion_id``
  580. - Chose how to merge or override your lists using ^ character (see examples)
  581. - Expand variables ${} with possibility to escape them if needed \${} (see
  582. examples)
  583. - Ignores missing node/class and will simply return empty without breaking the
  584. pillar module completely - will be logged
  585. An example subset of data is available here:
  586. https://git.mauras.ch/salt/saltclass/src/branch/master/examples
  587. ========================== ===========
  588. Terms usable in yaml files Description
  589. ========================== ===========
  590. classes A list of classes that will be processed in order
  591. states A list of states that will be returned by master_tops function
  592. pillars A yaml dictionary that will be returned by the ext_pillar function
  593. environment Node saltenv that will be used by master_tops
  594. ========================== ===========
  595. A class consists of:
  596. - zero or more parent classes
  597. - zero or more states
  598. - any number of pillars
  599. A child class can override pillars from a parent class. A node definition is a
  600. class in itself with an added ``environment`` parameter for ``saltenv``
  601. definition.
  602. **Class Names**
  603. Class names mimic salt way of defining states and pillar files.
  604. This means that ``default.users`` class name will correspond to one of these:
  605. - ``<saltclass_path>/classes/default/users.yml``
  606. - ``<saltclass_path>/classes/default/users/init.yml``
  607. **Saltclass Tree**
  608. A saltclass tree would look like this:
  609. .. code-block:: text
  610. <saltclass_path>
  611. ├── classes
  612. │ ├── app
  613. │ │ ├── borgbackup.yml
  614. │ │ └── ssh
  615. │ │ └── server.yml
  616. │ ├── default
  617. │ │ ├── init.yml
  618. │ │ ├── motd.yml
  619. │ │ └── users.yml
  620. │ ├── roles
  621. │ │ ├── app.yml
  622. │ │ └── nginx
  623. │ │ ├── init.yml
  624. │ │ └── server.yml
  625. │ └── subsidiaries
  626. │ ├── gnv.yml
  627. │ ├── qls.yml
  628. │ └── zrh.yml
  629. └── nodes
  630. ├── geneva
  631. │ └── gnv.node1.yml
  632. ├── lausanne
  633. │ ├── qls.node1.yml
  634. │ └── qls.node2.yml
  635. ├── node127.yml
  636. └── zurich
  637. ├── zrh.node1.yml
  638. ├── zrh.node2.yml
  639. └── zrh.node3.yml
  640. **Examples**
  641. ``<saltclass_path>/nodes/lausanne/qls.node1.yml``
  642. .. code-block:: jinja
  643. environment: base
  644. classes:
  645. {% for class in ['default'] %}
  646. - {{ class }}
  647. {% endfor %}
  648. - subsidiaries.{{ __grains__['id'].split('.')[0] }}
  649. ``<saltclass_path>/classes/default/init.yml``
  650. .. code-block:: yaml
  651. classes:
  652. - default.users
  653. - default.motd
  654. states:
  655. - openssh
  656. pillars:
  657. default:
  658. network:
  659. dns:
  660. srv1: 192.168.0.1
  661. srv2: 192.168.0.2
  662. domain: example.com
  663. ntp:
  664. srv1: 192.168.10.10
  665. srv2: 192.168.10.20
  666. ``<saltclass_path>/classes/subsidiaries/gnv.yml``
  667. .. code-block:: yaml
  668. pillars:
  669. default:
  670. network:
  671. sub: Geneva
  672. dns:
  673. srv1: 10.20.0.1
  674. srv2: 10.20.0.2
  675. srv3: 192.168.1.1
  676. domain: gnv.example.com
  677. users:
  678. adm1:
  679. uid: 1210
  680. gid: 1210
  681. gecos: 'Super user admin1'
  682. homedir: /srv/app/adm1
  683. adm3:
  684. uid: 1203
  685. gid: 1203
  686. gecos: 'Super user adm
  687. Variable expansions:
  688. Escaped variables are rendered as is - ``${test}``
  689. Missing variables are rendered as is - ``${net:dns:srv2}``
  690. .. code-block:: yaml
  691. pillars:
  692. app:
  693. config:
  694. dns:
  695. srv1: ${default:network:dns:srv1}
  696. srv2: ${net:dns:srv2}
  697. uri: https://application.domain/call?\${test}
  698. prod_parameters:
  699. - p1
  700. - p2
  701. - p3
  702. pkg:
  703. - app-core
  704. - app-backend
  705. List override:
  706. Not using ``^`` as the first entry will simply merge the lists
  707. .. code-block:: yaml
  708. pillars:
  709. app:
  710. pkg:
  711. - ^
  712. - app-frontend
  713. **Known limitation**
  714. Currently you can't have both a variable and an escaped variable in the same
  715. string as the escaped one will not be correctly rendered - '\${xx}' will stay
  716. as is instead of being rendered as '${xx}'
  717. Lists of comments in state returns
  718. ==================================
  719. State functions can now return a list of strings for the ``comment`` field, as
  720. opposed to only a single string. This is meant to ease writing states with
  721. multiple or multi-part comments.
  722. Beacon configuration changes
  723. ============================
  724. In order to remain consistent and to align with other Salt components such as
  725. states, support for configuring beacons using dictionary based configuration
  726. has been deprecated in favor of list based configuration. All beacons have a
  727. validation function which will check the configuration for the correct format
  728. and only load if the validation passes.
  729. avahi_announce
  730. --------------
  731. Old behavior:
  732. .. code-block:: yaml
  733. beacons:
  734. avahi_announce:
  735. run_once: True
  736. servicetype: _demo._tcp
  737. port: 1234
  738. txt:
  739. ProdName: grains.productname
  740. SerialNo: grains.serialnumber
  741. Comments: 'this is a test'
  742. New behavior:
  743. .. code-block:: yaml
  744. beacons:
  745. avahi_announce:
  746. - run_once: True
  747. - servicetype: _demo._tcp
  748. - port: 1234
  749. - txt:
  750. ProdName: grains.productname
  751. SerialNo: grains.serialnumber
  752. Comments: 'this is a test'
  753. bonjour_announce
  754. ----------------
  755. Old behavior:
  756. .. code-block:: yaml
  757. beacons:
  758. bonjour_announce:
  759. run_once: True
  760. servicetype: _demo._tcp
  761. port: 1234
  762. txt:
  763. ProdName: grains.productname
  764. SerialNo: grains.serialnumber
  765. Comments: 'this is a test'
  766. New behavior:
  767. .. code-block:: yaml
  768. beacons:
  769. bonjour_announce:
  770. - run_once: True
  771. - servicetype: _demo._tcp
  772. - port: 1234
  773. - txt:
  774. ProdName: grains.productname
  775. SerialNo: grains.serialnumber
  776. Comments: 'this is a test'
  777. btmp
  778. ----
  779. Old behavior:
  780. .. code-block:: yaml
  781. beacons:
  782. btmp: {}
  783. New behavior:
  784. .. code-block:: yaml
  785. beacons:
  786. btmp: []
  787. glxinfo
  788. -------
  789. Old behavior:
  790. .. code-block:: yaml
  791. beacons:
  792. glxinfo:
  793. user: frank
  794. screen_event: True
  795. New behavior:
  796. .. code-block:: yaml
  797. beacons:
  798. glxinfo:
  799. - user: frank
  800. - screen_event: True
  801. haproxy
  802. -------
  803. Old behavior:
  804. .. code-block:: yaml
  805. beacons:
  806. haproxy:
  807. - www-backend:
  808. threshold: 45
  809. servers:
  810. - web1
  811. - web2
  812. - interval: 120
  813. New behavior:
  814. .. code-block:: yaml
  815. beacons:
  816. haproxy:
  817. - backends:
  818. www-backend:
  819. threshold: 45
  820. servers:
  821. - web1
  822. - web2
  823. - interval: 120
  824. inotify
  825. -------
  826. Old behavior:
  827. .. code-block:: yaml
  828. beacons:
  829. inotify:
  830. /path/to/file/or/dir:
  831. mask:
  832. - open
  833. - create
  834. - close_write
  835. recurse: True
  836. auto_add: True
  837. exclude:
  838. - /path/to/file/or/dir/exclude1
  839. - /path/to/file/or/dir/exclude2
  840. - /path/to/file/or/dir/regex[a-m]*$:
  841. regex: True
  842. coalesce: True
  843. New behavior:
  844. .. code-block:: yaml
  845. beacons:
  846. inotify:
  847. - files:
  848. /path/to/file/or/dir:
  849. mask:
  850. - open
  851. - create
  852. - close_write
  853. recurse: True
  854. auto_add: True
  855. exclude:
  856. - /path/to/file/or/dir/exclude1
  857. - /path/to/file/or/dir/exclude2
  858. - /path/to/file/or/dir/regex[a-m]*$:
  859. regex: True
  860. - coalesce: True
  861. journald
  862. --------
  863. Old behavior:
  864. .. code-block:: yaml
  865. beacons:
  866. journald:
  867. sshd:
  868. SYSLOG_IDENTIFIER: sshd
  869. PRIORITY: 6
  870. New behavior:
  871. .. code-block:: yaml
  872. beacons:
  873. journald:
  874. - services:
  875. sshd:
  876. SYSLOG_IDENTIFIER: sshd
  877. PRIORITY: 6
  878. load
  879. ----
  880. Old behavior:
  881. .. code-block:: yaml
  882. beacons:
  883. load:
  884. 1m:
  885. - 0.0
  886. - 2.0
  887. 5m:
  888. - 0.0
  889. - 1.5
  890. 15m:
  891. - 0.1
  892. - 1.0
  893. emitatstartup: True
  894. onchangeonly: False
  895. New behavior:
  896. .. code-block:: yaml
  897. beacons:
  898. load:
  899. - averages:
  900. 1m:
  901. - 0.0
  902. - 2.0
  903. 5m:
  904. - 0.0
  905. - 1.5
  906. 15m:
  907. - 0.1
  908. - 1.0
  909. - emitatstartup: True
  910. - onchangeonly: False
  911. log
  912. ---
  913. Old behavior:
  914. .. code-block:: yaml
  915. beacons:
  916. log:
  917. file: <path>
  918. <tag>:
  919. regex: <pattern>
  920. New behavior:
  921. .. code-block:: yaml
  922. beacons:
  923. log:
  924. - file: <path>
  925. - tags:
  926. <tag>:
  927. regex: <pattern>
  928. network_info
  929. ------------
  930. Old behavior:
  931. .. code-block:: yaml
  932. beacons:
  933. network_info:
  934. - eth0:
  935. type: equal
  936. bytes_sent: 100000
  937. bytes_recv: 100000
  938. packets_sent: 100000
  939. packets_recv: 100000
  940. errin: 100
  941. errout: 100
  942. dropin: 100
  943. dropout: 100
  944. New behavior:
  945. .. code-block:: yaml
  946. beacons:
  947. network_info:
  948. - interfaces:
  949. eth0:
  950. type: equal
  951. bytes_sent: 100000
  952. bytes_recv: 100000
  953. packets_sent: 100000
  954. packets_recv: 100000
  955. errin: 100
  956. errout: 100
  957. dropin: 100
  958. dropout: 100
  959. network_settings
  960. ----------------
  961. Old behavior:
  962. .. code-block:: yaml
  963. beacons:
  964. network_settings:
  965. eth0:
  966. ipaddr:
  967. promiscuity:
  968. onvalue: 1
  969. eth1:
  970. linkmode:
  971. New behavior:
  972. .. code-block:: yaml
  973. beacons:
  974. network_settings:
  975. - interfaces:
  976. - eth0:
  977. ipaddr:
  978. promiscuity:
  979. onvalue: 1
  980. - eth1:
  981. linkmode:
  982. proxy_example
  983. -------------
  984. Old behavior:
  985. .. code-block:: yaml
  986. beacons:
  987. proxy_example:
  988. endpoint: beacon
  989. New behavior:
  990. .. code-block:: yaml
  991. beacons:
  992. proxy_example:
  993. - endpoint: beacon
  994. ps
  995. --
  996. Old behavior:
  997. .. code-block:: yaml
  998. beacons:
  999. ps:
  1000. - salt-master: running
  1001. - mysql: stopped
  1002. New behavior:
  1003. .. code-block:: yaml
  1004. beacons:
  1005. ps:
  1006. - processes:
  1007. salt-master: running
  1008. mysql: stopped
  1009. salt_proxy
  1010. ----------
  1011. Old behavior:
  1012. .. code-block:: yaml
  1013. beacons:
  1014. salt_proxy:
  1015. - p8000: {}
  1016. - p8001: {}
  1017. New behavior:
  1018. .. code-block:: yaml
  1019. beacons:
  1020. salt_proxy:
  1021. - proxies:
  1022. p8000: {}
  1023. p8001: {}
  1024. sensehat
  1025. --------
  1026. Old behavior:
  1027. .. code-block:: yaml
  1028. beacons:
  1029. sensehat:
  1030. humidity: 70%
  1031. temperature: [20, 40]
  1032. temperature_from_pressure: 40
  1033. pressure: 1500
  1034. New behavior:
  1035. .. code-block:: yaml
  1036. beacons:
  1037. sensehat:
  1038. - sensors:
  1039. humidity: 70%
  1040. temperature: [20, 40]
  1041. temperature_from_pressure: 40
  1042. pressure: 1500
  1043. service
  1044. -------
  1045. Old behavior:
  1046. .. code-block:: yaml
  1047. beacons:
  1048. service:
  1049. salt-master:
  1050. mysql:
  1051. New behavior:
  1052. .. code-block:: yaml
  1053. beacons:
  1054. service:
  1055. - services:
  1056. nginx:
  1057. onchangeonly: True
  1058. delay: 30
  1059. uncleanshutdown: /run/nginx.pid
  1060. sh
  1061. --
  1062. Old behavior:
  1063. .. code-block:: yaml
  1064. beacons:
  1065. sh: {}
  1066. New behavior:
  1067. .. code-block:: yaml
  1068. beacons:
  1069. sh: []
  1070. status
  1071. ------
  1072. Old behavior:
  1073. .. code-block:: yaml
  1074. beacons:
  1075. status: {}
  1076. New behavior:
  1077. .. code-block:: yaml
  1078. beacons:
  1079. status: []
  1080. telegram_bot_msg
  1081. ----------------
  1082. Old behavior:
  1083. .. code-block:: yaml
  1084. beacons:
  1085. telegram_bot_msg:
  1086. token: "<bot access token>"
  1087. accept_from:
  1088. - "<valid username>"
  1089. interval: 10
  1090. New behavior:
  1091. .. code-block:: yaml
  1092. beacons:
  1093. telegram_bot_msg:
  1094. - token: "<bot access token>"
  1095. - accept_from:
  1096. - "<valid username>"
  1097. - interval: 10
  1098. twilio_txt_msg
  1099. --------------
  1100. Old behavior:
  1101. .. code-block:: yaml
  1102. beacons:
  1103. twilio_txt_msg:
  1104. account_sid: "<account sid>"
  1105. auth_token: "<auth token>"
  1106. twilio_number: "+15555555555"
  1107. interval: 10
  1108. New behavior:
  1109. .. code-block:: yaml
  1110. beacons:
  1111. twilio_txt_msg:
  1112. - account_sid: "<account sid>"
  1113. - auth_token: "<auth token>"
  1114. - twilio_number: "+15555555555"
  1115. - interval: 10
  1116. wtmp
  1117. ----
  1118. Old behavior:
  1119. .. code-block:: yaml
  1120. beacons:
  1121. wtmp: {}
  1122. New behavior:
  1123. .. code-block:: yaml
  1124. beacons:
  1125. wtmp: []
  1126. New requisites available in state compiler
  1127. ==========================================
  1128. require_any
  1129. -----------
  1130. The use of ``require_any`` demands that one of the required states executes
  1131. before the dependent state. The state containing the ``require_any`` requisite
  1132. is defined as the dependent state. The states specified in the ``require_any``
  1133. statement are defined as the required states. If at least one of the required
  1134. state's execution succeeds, the dependent state will then execute. If all of
  1135. the executions by the required states fail, the dependent state will not
  1136. execute.
  1137. watch_any
  1138. ---------
  1139. The state containing the ``watch_any`` requisite is defined as the watching
  1140. state. The states specified in the ``watch_any`` statement are defined as the
  1141. watched states. When the watched states execute, they will return a dictionary
  1142. containing a key named "changes".
  1143. If the "result" of any of the watched states is ``True``, the watching state
  1144. *will execute normally*, and if all of them are ``False``, the watching state
  1145. will never run. This part of ``watch`` mirrors the functionality of the
  1146. ``require`` requisite.
  1147. If the "result" of any of the watched states is ``True`` *and* the "changes"
  1148. key contains a populated dictionary (changes occurred in the watched state),
  1149. then the ``watch`` requisite can add additional behavior. This additional
  1150. behavior is defined by the ``mod_watch`` function within the watching state
  1151. module. If the ``mod_watch`` function exists in the watching state module, it
  1152. will be called *in addition to* the normal watching state. The return data from
  1153. the ``mod_watch`` function is what will be returned to the master in this case;
  1154. the return data from the main watching function is discarded.
  1155. If the "changes" key contains an empty dictionary, the ``watch`` requisite acts
  1156. exactly like the ``require`` requisite (the watching state will execute if
  1157. "result" is ``True``, and fail if "result" is ``False`` in the watched state).
  1158. onchanges_any
  1159. -------------
  1160. The ``onchanges_any`` requisite makes a state only apply one of the required
  1161. states generates changes, and if one of the watched state's "result" is
  1162. ``True``. This can be a useful way to execute a post hook after changing
  1163. aspects of a system.
  1164. onfail_any
  1165. ----------
  1166. The ``onfail_any`` requisite allows for reactions to happen strictly as a
  1167. response to the failure of at least one other state. This can be used in a
  1168. number of ways, such as executing a second attempt to set up a service or begin
  1169. to execute a separate thread of states because of a failure.
  1170. The ``onfail_any`` requisite is applied in the same way as ``require_any`` and
  1171. ``watch_any``.
  1172. Basic Slots support in state compiler
  1173. =====================================
  1174. Slots extend the state syntax and allows you to do things right before the
  1175. state function is executed. So you can make a decision in the last moment right
  1176. before a state is executed.
  1177. Slot syntax looks close to the simple python function call. Here is a simple example:
  1178. .. code-block:: yaml
  1179. copy-some-file:
  1180. file.copy:
  1181. - name: __slot__:salt:test.echo(text=/tmp/some_file)
  1182. - source: __slot__:salt:test.echo(/etc/hosts)
  1183. Read more :ref:`here <slots-subsystem>`.
  1184. Cryptographic layer changes
  1185. ===========================
  1186. M2Crypto is coming back. We are making the crypto backend modular but in this
  1187. release M2Crypto is enabled if it's importable by Python. If not Cryptodome or
  1188. PyCrypto is used as it was in the previous releases. M2Crypto is used in the
  1189. same way as PyCrypto so there would be no compatibility issues, different nodes
  1190. could use different backends.
  1191. NaCL Module and Runner changes
  1192. ==============================
  1193. In addition to argument changes in both the NaCL module and runner for future
  1194. removal in the 3000 release, the default "box_type" has changed from
  1195. ``secretbox`` to ``sealedbox``. SecretBox is data encrypted using private key
  1196. ``sk`` and Sealedbox is encrypted using public key ``pk``.
  1197. ``utils`` functions reorganized into separate modules
  1198. =====================================================
  1199. The Salt utility functions from ``salt.utils`` (typically used by those
  1200. developing extension modules for Salt) have been moved into different modules,
  1201. grouped logically based on their functionality. The old function names will
  1202. continue to work until the ``3000`` release of Salt (due around Q1 2019).
  1203. The renamed functions are:
  1204. - ``salt.utils.appendproctitle``: use ``salt.utils.process.appendproctitle``
  1205. instead.
  1206. - ``salt.utils.daemonize``: use ``salt.utils.process.daemonize`` instead.
  1207. - ``salt.utils.daemonize_if``: use ``salt.utils.process.daemonize_if`` instead.
  1208. - ``salt.utils.reinit_crypto``: use ``salt.utils.crypt.reinit_crypto`` instead.
  1209. - ``salt.utils.pem_finger``: use ``salt.utils.crypt.pem_finger`` instead.
  1210. - ``salt.utils.to_bytes``: use ``salt.utils.stringutils.to_bytes`` instead.
  1211. - ``salt.utils.to_str``: use ``salt.utils.stringutils.to_str`` instead.
  1212. - ``salt.utils.to_unicode``: use ``salt.utils.stringutils.to_unicode`` instead.
  1213. - ``salt.utils.str_to_num``: use ``salt.utils.stringutils.to_num`` instead.
  1214. - ``salt.utils.is_quoted``: use ``salt.utils.stringutils.is_quoted`` instead.
  1215. - ``salt.utils.dequote``: use ``salt.utils.stringutils.dequote`` instead.
  1216. - ``salt.utils.is_hex``: use ``salt.utils.stringutils.is_hex`` instead.
  1217. - ``salt.utils.is_bin_str``: use ``salt.utils.stringutils.is_bin_str`` instead.
  1218. - ``salt.utils.rand_string``: use ``salt.utils.stringutils.random`` instead.
  1219. - ``salt.utils.contains_whitespace``: use
  1220. ``salt.utils.stringutils.contains_whitespace`` instead.
  1221. - ``salt.utils.build_whitespace_split_regex``: use
  1222. ``salt.utils.stringutils.build_whitespace_split_regex`` instead.
  1223. - ``salt.utils.expr_match``: use ``salt.utils.stringutils.expr_match`` instead.
  1224. - ``salt.utils.check_whitelist_blacklist``: use
  1225. ``salt.utils.stringutils.check_whitelist_blacklist`` instead.
  1226. - ``salt.utils.check_include_exclude``: use
  1227. ``salt.utils.stringutils.check_include_exclude`` instead.
  1228. - ``salt.utils.print_cli``: use ``salt.utils.stringutils.print_cli`` instead.
  1229. - ``salt.utils.clean_kwargs``: use ``salt.utils.args.clean_kwargs`` instead.
  1230. - ``salt.utils.invalid_kwargs``: use ``salt.utils.args.invalid_kwargs``
  1231. instead.
  1232. - ``salt.utils.shlex_split``: use ``salt.utils.args.shlex_split`` instead.
  1233. - ``salt.utils.arg_lookup``: use ``salt.utils.args.arg_lookup`` instead.
  1234. - ``salt.utils.argspec_report``: use ``salt.utils.args.argspec_report``
  1235. instead.
  1236. - ``salt.utils.split_input``: use ``salt.utils.args.split_input`` instead.
  1237. - ``salt.utils.test_mode``: use ``salt.utils.args.test_mode`` instead.
  1238. - ``salt.utils.format_call``: use ``salt.utils.args.format_call`` instead.
  1239. - ``salt.utils.which``: use ``salt.utils.path.which`` instead.
  1240. - ``salt.utils.which_bin``: use ``salt.utils.path.which_bin`` instead.
  1241. - ``salt.utils.path_join``: use ``salt.utils.path.join`` instead.
  1242. - ``salt.utils.check_or_die``: use ``salt.utils.path.check_or_die`` instead.
  1243. - ``salt.utils.sanitize_win_path_string``: use
  1244. ``salt.utils.path.sanitize_win_path`` instead.
  1245. - ``salt.utils.rand_str``: use ``salt.utils.hashutils.random_hash`` instead.
  1246. - ``salt.utils.get_hash``: use ``salt.utils.hashutils.get_hash`` instead.
  1247. - ``salt.utils.is_windows``: use ``salt.utils.platform.is_windows`` instead.
  1248. - ``salt.utils.is_proxy``: use ``salt.utils.platform.is_proxy`` instead.
  1249. - ``salt.utils.is_linux``: use ``salt.utils.platform.is_linux`` instead.
  1250. - ``salt.utils.is_darwin``: use ``salt.utils.platform.is_darwin`` instead.
  1251. - ``salt.utils.is_sunos``: use ``salt.utils.platform.is_sunos`` instead.
  1252. - ``salt.utils.is_smartos``: use ``salt.utils.platform.is_smartos`` instead.
  1253. - ``salt.utils.is_smartos_globalzone``: use
  1254. ``salt.utils.platform.is_smartos_globalzone`` instead.
  1255. - ``salt.utils.is_smartos_zone``: use ``salt.utils.platform.is_smartos_zone``
  1256. instead.
  1257. - ``salt.utils.is_freebsd``: use ``salt.utils.platform.is_freebsd`` instead.
  1258. - ``salt.utils.is_netbsd``: use ``salt.utils.platform.is_netbsd`` instead.
  1259. - ``salt.utils.is_openbsd``: use ``salt.utils.platform.is_openbsd`` instead.
  1260. - ``salt.utils.is_aix``: use ``salt.utils.platform.is_aix`` instead.
  1261. - ``salt.utils.safe_rm``: use ``salt.utils.files.safe_rm`` instead.
  1262. - ``salt.utils.is_empty``: use ``salt.utils.files.is_empty`` instead.
  1263. - ``salt.utils.fopen``: use ``salt.utils.files.fopen`` instead.
  1264. - ``salt.utils.flopen``: use ``salt.utils.files.flopen`` instead.
  1265. - ``salt.utils.fpopen``: use ``salt.utils.files.fpopen`` instead.
  1266. - ``salt.utils.rm_rf``: use ``salt.utils.files.rm_rf`` instead.
  1267. - ``salt.utils.mkstemp``: use ``salt.utils.files.mkstemp`` instead.
  1268. - ``salt.utils.istextfile``: use ``salt.utils.files.is_text_file`` instead.
  1269. - ``salt.utils.is_bin_file``: use ``salt.utils.files.is_binary`` instead.
  1270. - ``salt.utils.list_files``: use ``salt.utils.files.list_files`` instead.
  1271. - ``salt.utils.safe_walk``: use ``salt.utils.files.safe_walk`` instead.
  1272. - ``salt.utils.st_mode_to_octal``: use ``salt.utils.files.st_mode_to_octal``
  1273. instead.
  1274. - ``salt.utils.normalize_mode``: use ``salt.utils.files.normalize_mode``
  1275. instead.
  1276. - ``salt.utils.human_size_to_bytes``: use
  1277. ``salt.utils.files.human_size_to_bytes`` instead.
  1278. - ``salt.utils.backup_minion``: use ``salt.utils.files.backup_minion`` instead.
  1279. - ``salt.utils.str_version_to_evr``: use ``salt.utils.pkg.rpm.version_to_evr``
  1280. instead.
  1281. - ``salt.utils.parse_docstring``: use ``salt.utils.doc.parse_docstring``
  1282. instead.
  1283. - ``salt.utils.compare_versions``: use ``salt.utils.versions.compare`` instead.
  1284. - ``salt.utils.version_cmp``: use ``salt.utils.versions.version_cmp`` instead.
  1285. - ``salt.utils.warn_until``: use ``salt.utils.versions.warn_until`` instead.
  1286. - ``salt.utils.kwargs_warn_until``: use
  1287. ``salt.utils.versions.kwargs_warn_until`` instead.
  1288. - ``salt.utils.get_color_theme``: use ``salt.utils.color.get_color_theme``
  1289. instead.
  1290. - ``salt.utils.get_colors``: use ``salt.utils.color.get_colors`` instead.
  1291. - ``salt.utils.gen_state_tag``: use ``salt.utils.state.gen_tag`` instead.
  1292. - ``salt.utils.search_onfail_requisites``: use
  1293. ``salt.utils.state.search_onfail_requisites`` instead.
  1294. - ``salt.utils.check_state_result``: use ``salt.utils.state.check_result``
  1295. instead.
  1296. - ``salt.utils.get_user``: use ``salt.utils.user.get_user`` instead.
  1297. - ``salt.utils.get_uid``: use ``salt.utils.user.get_uid`` instead.
  1298. - ``salt.utils.get_specific_user``: use ``salt.utils.user.get_specific_user``
  1299. instead.
  1300. - ``salt.utils.chugid``: use ``salt.utils.user.chugid`` instead.
  1301. - ``salt.utils.chugid_and_umask``: use ``salt.utils.user.chugid_and_umask``
  1302. instead.
  1303. - ``salt.utils.get_default_group``: use ``salt.utils.user.get_default_group``
  1304. instead.
  1305. - ``salt.utils.get_group_list``: use ``salt.utils.user.get_group_list``
  1306. instead.
  1307. - ``salt.utils.get_group_dict``: use ``salt.utils.user.get_group_dict``
  1308. instead.
  1309. - ``salt.utils.get_gid_list``: use ``salt.utils.user.get_gid_list`` instead.
  1310. - ``salt.utils.get_gid``: use ``salt.utils.user.get_gid`` instead.
  1311. - ``salt.utils.enable_ctrl_logoff_handler``: use
  1312. ``salt.utils.win_functions.enable_ctrl_logoff_handler`` instead.
  1313. - ``salt.utils.traverse_dict``: use ``salt.utils.data.traverse_dict`` instead.
  1314. - ``salt.utils.traverse_dict_and_list``: use
  1315. ``salt.utils.data.traverse_dict_and_list`` instead.
  1316. - ``salt.utils.filter_by``: use ``salt.utils.data.filter_by`` instead.
  1317. - ``salt.utils.subdict_match``: use ``salt.utils.data.subdict_match`` instead.
  1318. - ``salt.utils.substr_in_list``: use ``salt.utils.data.substr_in_list`` instead.
  1319. - ``salt.utils.is_dictlist``: use ``salt.utils.data.is_dictlist``.
  1320. - ``salt.utils.repack_dictlist``: use ``salt.utils.data.repack_dictlist``
  1321. instead.
  1322. - ``salt.utils.compare_dicts``: use ``salt.utils.data.compare_dicts`` instead.
  1323. - ``salt.utils.compare_lists``: use ``salt.utils.data.compare_lists`` instead.
  1324. - ``salt.utils.decode_dict``: use ``salt.utils.data.encode_dict`` instead.
  1325. - ``salt.utils.decode_list``: use ``salt.utils.data.encode_list`` instead.
  1326. - ``salt.utils.exactly_n``: use ``salt.utils.data.exactly_n`` instead.
  1327. - ``salt.utils.exactly_one``: use ``salt.utils.data.exactly_one`` instead.
  1328. - ``salt.utils.is_list``: use ``salt.utils.data.is_list`` instead.
  1329. - ``salt.utils.is_iter``: use ``salt.utils.data.is_iter`` instead.
  1330. - ``salt.utils.isorted``: use ``salt.utils.data.sorted_ignorecase`` instead.
  1331. - ``salt.utils.is_true``: use ``salt.utils.data.is_true`` instead.
  1332. - ``salt.utils.mysql_to_dict``: use ``salt.utils.data.mysql_to_dict`` instead.
  1333. - ``salt.utils.simple_types_filter``: use
  1334. ``salt.utils.data.simple_types_filter`` instead.
  1335. - ``salt.utils.ip_bracket``: use ``salt.utils.zeromq.ip_bracket`` instead.
  1336. - ``salt.utils.gen_mac``: use ``salt.utils.network.gen_mac`` instead.
  1337. - ``salt.utils.mac_str_to_bytes``: use ``salt.utils.network.mac_str_to_bytes``
  1338. instead.
  1339. - ``salt.utils.refresh_dns``: use ``salt.utils.network.refresh_dns`` instead.
  1340. - ``salt.utils.dns_check``: use ``salt.utils.network.dns_check`` instead.
  1341. - ``salt.utils.get_context``: use ``salt.utils.stringutils.get_context`` instead.
  1342. - ``salt.utils.get_master_key``: use ``salt.utils.master.get_master_key``
  1343. instead.
  1344. - ``salt.utils.get_values_of_matching_keys``: use
  1345. ``salt.utils.master.get_values_of_matching_keys`` instead.
  1346. - ``salt.utils.date_cast``: use ``salt.utils.dateutils.date_cast`` instead.
  1347. - ``salt.utils.date_format``: use ``salt.utils.dateutils.strftime`` instead.
  1348. - ``salt.utils.total_seconds``: use ``salt.utils.dateutils.total_seconds``
  1349. instead.
  1350. - ``salt.utils.find_json``: use ``salt.utils.json.find_json`` instead.
  1351. - ``salt.utils.import_json``: use ``salt.utils.json.import_json`` instead.
  1352. - ``salt.utils.namespaced_function``: use
  1353. ``salt.utils.functools.namespaced_function`` instead.
  1354. - ``salt.utils.alias_function``: use ``salt.utils.functools.alias_function``
  1355. instead.
  1356. - ``salt.utils.profile_func``: use ``salt.utils.profile.profile_func`` instead.
  1357. - ``salt.utils.activate_profile``: use ``salt.utils.profile.activate_profile``
  1358. instead.
  1359. - ``salt.utils.output_profile``: use ``salt.utils.profile.output_profile``
  1360. instead.
  1361. Deprecations
  1362. ============
  1363. Configuration Option Deprecations
  1364. ---------------------------------
  1365. - The ``requests_lib`` configuration option has been removed. Please use
  1366. ``backend`` instead.
  1367. Profitbricks Cloud Updated Dependency
  1368. -------------------------------------
  1369. The minimum version of the ``profitbrick`` python package for the ``profitbricks``
  1370. cloud driver has changed from 3.0.0 to 3.1.0.
  1371. Execution Module Deprecations
  1372. -----------------------------
  1373. - The ``blockdev`` execution module has been removed. Its functions were merged
  1374. with the :py:mod:`disk <salt.modules.disk>` module.
  1375. - The :py:mod:`lxc <salt.modules.lxc>` execution module has been changed as
  1376. follows:
  1377. - The ``dnsservers`` option to :py:func:`lxc.cloud_init_interface
  1378. <salt.modules.lxc.cloud_init_interface>` no longer defaults to
  1379. ``4.4.4.4`` and ``8.8.8.8``.
  1380. - The ``dns_via_dhcp`` option to :py:func:`lxc.cloud_init_interface
  1381. <salt.modules.lxc.cloud_init_interface>` now defaults to ``True`` instead
  1382. of ``False``.
  1383. - The :py:mod:`win_psget <salt.modules.win_psget>` module has been changed as
  1384. follows:
  1385. - The ``psget.psversion`` function was removed. Please use
  1386. :py:func:`cmd.shell_info <salt.modules.cmdmod.shell_info>` instead.
  1387. - The :py:mod:`win_service <salt.modules.win_service>` module (which provides
  1388. the ``service`` module on Windows platforms) has been changed as follows:
  1389. - The ``config`` function was removed. Please use :py:func:`service.modify
  1390. <salt.modules.win_service.modify>` instead.
  1391. - The following arguments to the :py:func:`service.create
  1392. <salt.modules.win_service.create>` function have been renamed:
  1393. - ``binpath`` has been renamed to ``bin_path``
  1394. - ``depend`` has been renamed to ``dependencies``
  1395. - ``DisplayName`` has been renamed to ``display_name``
  1396. - ``error`` has been renamed to ``error_control``
  1397. - ``group`` has been renamed to ``load_order_group``
  1398. - ``obj`` has been renamed to ``account_name``
  1399. - ``password`` has been renamed to ``account_password``
  1400. - ``start`` has been renamed to ``start_type``
  1401. - ``type`` has been renamed to ``service_type``
  1402. - The :py:mod:`nacl <salt.modules.nacl>` module has been changed as follows:
  1403. - The following arguments have been renamed in the :py:mod:`nacl.keygen
  1404. <salt.modules.nacl.keygen>`, :py:mod:`nacl.enc <salt.modules.nacl.enc>`, and
  1405. :py:mod:`nacl.dec <salt.modules.nacl.dec>`:
  1406. - ``key_file`` has been renamed to ``sk_file``
  1407. - ``key`` has been renamed to ``sk``
  1408. Runner Deprecations
  1409. -------------------
  1410. - The :py:mod:`manage <salt.runners.manage>` runner has been changed as follows:
  1411. - ``root_user`` argument was removed from the :py:func:`manage.bootstrap
  1412. <salt.runners.manage.bootstrap>` function. Please use ``salt-ssh`` roster
  1413. entries for the host instead.
  1414. - The :py:mod:`nacl <salt.modules.nacl>` runner has been changed as follows:
  1415. - The following arguments have been renamed in the :py:mod:`nacl.keygen
  1416. <salt.runners.nacl.keygen>`, :py:mod:`nacl.enc <salt.runners.nacl.enc>`, and
  1417. :py:mod:`nacl.dec <salt.runners.nacl.dec>`:
  1418. - ``key_file`` has been renamed to ``sk_file``
  1419. - ``key`` has been renamed to ``sk``
  1420. State Deprecations
  1421. ------------------
  1422. - In the :py:func:`archive <salt.modules.archive.extracted>` state, the
  1423. ``tar_options`` and ``zip_options`` options were removed. Please use
  1424. ``options`` instead.
  1425. - The :py:func:`cmd <salt.states.cmdmod>` state had the following changes:
  1426. - The ``user`` and ``group`` options were removed from the following functions
  1427. (please use ``runas`` instead):
  1428. - :py:func:`cmd.run <salt.modules.cmdmod.run>`
  1429. - :py:func:`cmd.script <salt.modules.cmdmod.script>`
  1430. - :py:func:`cmd.wait <salt.modules.cmdmod.wait>`
  1431. - :py:func:`cmd.wait_script <salt.modules.cmdmod.wait_script>`
  1432. - In the :py:mod:`file <salt.states.file>` states, the ``show_diff`` option was
  1433. removed in all states where it was previously supported. Please use
  1434. ``show_changes`` instead.
  1435. Grain Deprecations
  1436. ------------------
  1437. - For ``smartos``, some grains have been deprecated. These grains will be
  1438. removed in 3000:
  1439. - The ``hypervisor_uuid`` grain has been replaced with
  1440. ``mdata:sdc:server_uuid``
  1441. - The ``datacenter`` grain has been replaced with
  1442. ``mdata:sdc:datacenter_name``
  1443. Pillar Deprecations
  1444. -------------------
  1445. The legacy configuration for ``git_pillar`` has been removed. Please use the
  1446. new configuration for ``git_pillar`` which was added in 2015.8.0, which is
  1447. documented :py:mod:`here <salt.pillar.git_pillar>`.
  1448. Utils Deprecations
  1449. ------------------
  1450. - In ``salt.utils.cloud``, the ``fire_event`` function now requires a
  1451. ``sock_dir`` argument. It was previously optional.
  1452. Other Miscellaneous Deprecations
  1453. --------------------------------
  1454. - In ``version.py``, the ``rc_info`` function was removed. Please use
  1455. ``pre_info`` instead.
  1456. - Warnings for moving away from the ``env`` option were removed. ``saltenv``
  1457. should be used instead. The removal of these warnings does not have a
  1458. behavior change. Only the warning text was removed.
  1459. Minion Blackout
  1460. ===============
  1461. During a blackout, minions will not execute any remote execution commands,
  1462. except for :mod:`saltutil.refresh_pillar
  1463. <salt.modules.saltutil.refresh_pillar>`. Previously, support was added so that
  1464. blackouts are enabled using a special pillar key, ``minion_blackout`` set to
  1465. ``True`` and an optional pillar key ``minion_blackout_whitelist`` to specify
  1466. additional functions that are permitted during blackout. This release adds
  1467. support for using this feature in the grains as well, by using special grains
  1468. keys ``minion_blackout`` and ``minion_blackout_whitelist``.
  1469. Sentry Log Handler
  1470. ==================
  1471. Configuring sentry raven python client via ``project``, ``servers``,
  1472. ``public_key and ``secret_key`` is deprecated and won't work with sentry
  1473. clients > 3.0. Instead, the ``dsn`` config param must be used.
  1474. RAET transport
  1475. ==============
  1476. We haven't been doing development on RAET for quite some time and decided that
  1477. 2018.3.0 is the time to announce the deprecation. RAET support will be removed
  1478. in 3000. Please consider to move to ``zeromq`` or ``tcp`` transport instead of
  1479. ``raet``.