Merge branch '2016.11' into 'develop'

Conflicts:
  - salt/states/kapacitor.py
This commit is contained in:
rallytime 2017-01-03 10:17:18 -05:00
commit 9ad362fbde
79 changed files with 377 additions and 276 deletions

View file

@ -94,10 +94,10 @@ virtualenv using the ``--system-site-packages`` option so that these modules
are available in the virtualenv. are available in the virtualenv.
Installing dependencies on OS X Installing dependencies on macOS
``````````````````````````````` ````````````````````````````````
One simple way to get all needed dependencies on OS X is to use homebrew, One simple way to get all needed dependencies on macOS is to use homebrew,
and install the following packages:: and install the following packages::
brew install zmq brew install zmq
@ -187,7 +187,7 @@ Edit the master config file:
``/path/to/your/virtualenv/salt-master.pid``. ``/path/to/your/virtualenv/salt-master.pid``.
4. If you are also running a non-development version of Salt you will have to 4. If you are also running a non-development version of Salt you will have to
change the ``publish_port`` and ``ret_port`` values as well. change the ``publish_port`` and ``ret_port`` values as well.
5. On OS X also set max_open_files to 2048. 5. On xxxOS X also set max_open_files to 2048.
Edit the minion config file: Edit the minion config file:

View file

@ -48,7 +48,7 @@ minion pillar, grains, or local config file.
.. note:: .. note::
The `inotify` beacon only works on OSes that have `inotify` kernel support. The `inotify` beacon only works on OSes that have `inotify` kernel support.
Currently this excludes FreeBSD, Mac OS X, and Windows. Currently this excludes FreeBSD, macOS, and Windows.
Beacon Monitoring Interval Beacon Monitoring Interval
-------------------------- --------------------------

View file

@ -12,7 +12,7 @@ On Ubuntu, install Salt Cloud by using following command:
sudo apt-get update sudo apt-get update
sudo apt-get install salt-cloud sudo apt-get install salt-cloud
If using Salt Cloud on OS X, ``curl-ca-bundle`` must be installed. Presently, If using Salt Cloud on macOS, ``curl-ca-bundle`` must be installed. Presently,
this package is not available via ``brew``, but it is available using MacPorts: this package is not available via ``brew``, but it is available using MacPorts:
.. code-block:: bash .. code-block:: bash

View file

@ -83,10 +83,10 @@ Install Salt (and dependencies) into the virtualenv:
.. _`Fedora Linux`: http://fedoraproject.org/ .. _`Fedora Linux`: http://fedoraproject.org/
.. _`Amazon Linux`: https://aws.amazon.com/amazon-linux-ami/ .. _`Amazon Linux`: https://aws.amazon.com/amazon-linux-ami/
.. note:: Installing dependencies on OS X. .. note:: Installing dependencies on macOS.
You can install needed dependencies on OS X using homebrew or macports. You can install needed dependencies on macOS using homebrew or macports.
See :ref:`OS X Installation <macos-installation>` See :ref:`macOS Installation <macos-installation>`
.. warning:: Installing on RedHat-based Distros .. warning:: Installing on RedHat-based Distros
@ -195,7 +195,7 @@ If you would like to log to the console instead of to the log file, remove the
# use 'limit descriptors 2047' for c-shell # use 'limit descriptors 2047' for c-shell
ulimit -n 2047 ulimit -n 2047
To set file descriptors on OSX, refer to the :ref:`OS X Installation To set file descriptors on macOS, refer to the :ref:`macOS Installation
<macos-installation>` instructions. <macos-installation>` instructions.

View file

@ -82,9 +82,9 @@ test suite illustrating the broad usefulness of each function.
The ``setUp`` function is used to set up any repetitive or useful tasks that the The ``setUp`` function is used to set up any repetitive or useful tasks that the
tests in a test class need before running. For example, any of the ``mac_*`` tests in a test class need before running. For example, any of the ``mac_*``
integration tests should only run on OSX machines. The ``setUp`` function can be integration tests should only run on macOS machines. The ``setUp`` function can
used to test for the presence of the ``Darwin`` kernel. If the ``Darwin`` kernel be used to test for the presence of the ``Darwin`` kernel. If the ``Darwin``
is not present, then the test should be skipped. kernel is not present, then the test should be skipped.
.. code-block:: python .. code-block:: python

View file

@ -1,8 +1,8 @@
.. _macos-installation: .. _macos-installation:
==== =====
OS X macOS
==== =====
Installation from the Official SaltStack Repository Installation from the Official SaltStack Repository
=================================================== ===================================================
@ -39,7 +39,7 @@ Installation from MacPorts
Installation from Pip Installation from Pip
===================== =====================
When only using the OS X system's pip, install this way: When only using the macOS system's pip, install this way:
.. code-block:: bash .. code-block:: bash
@ -48,15 +48,15 @@ When only using the OS X system's pip, install this way:
Salt-Master Customizations Salt-Master Customizations
========================== ==========================
.. note:: .. note::
Salt master on OS X is not tested or supported by SaltStack. See `SaltStack Platform Support <https://saltstack.com/product-support-lifecycle/>`_ for more information. Salt master on macOS is not tested or supported by SaltStack. See `SaltStack Platform Support <https://saltstack.com/product-support-lifecycle/>`_ for more information.
To run salt-master on OS X, sudo add this configuration option to the /etc/salt/master file: To run salt-master on macOS, sudo add this configuration option to the /etc/salt/master file:
.. code-block:: bash .. code-block:: bash
max_open_files: 8192 max_open_files: 8192
On versions previous to OS X 10.10 (Yosemite), increase the root user maxfiles limit: On versions previous to macOS 10.10 (Yosemite), increase the root user maxfiles limit:
.. code-block:: bash .. code-block:: bash
@ -64,7 +64,7 @@ On versions previous to OS X 10.10 (Yosemite), increase the root user maxfiles l
.. note:: .. note::
On OS X 10.10 (Yosemite) and higher, maxfiles should not be adjusted. The On macOS 10.10 (Yosemite) and higher, maxfiles should not be adjusted. The
default limits are sufficient in all but the most extreme scenarios. default limits are sufficient in all but the most extreme scenarios.
Overriding these values with the setting below will cause system Overriding these values with the setting below will cause system
instability! instability!

View file

@ -160,10 +160,10 @@ Extensive additions have been added to Salt for LXC support. This included
the backend libs for managing LXC containers. Addition into the salt-virt the backend libs for managing LXC containers. Addition into the salt-virt
system is still in the works. system is still in the works.
Mac OS X User/Group Support macOS User/Group Support
--------------------------- ------------------------
Salt is now able to manage users and groups on Minions running Mac OS X. Salt is now able to manage users and groups on Minions running macOS.
However, at this time user passwords cannot be managed. However, at this time user passwords cannot be managed.
Django ORM External Pillar Django ORM External Pillar

View file

@ -66,7 +66,7 @@ Version 0.17.2 is another bugfix release for :ref:`0.17.0
- Fix compound matcher for grains (:issue:`7944`) - Fix compound matcher for grains (:issue:`7944`)
- Improve error reporting in ebuild module (related to :issue:`5393`) - Improve error reporting in ebuild module (related to :issue:`5393`)
- Add ``dir_mode`` to ``file.managed`` (:issue:`7860`) - Add ``dir_mode`` to ``file.managed`` (:issue:`7860`)
- Improve traceroute support for FreeBSD and OS X (:issue:`4927`) - Improve traceroute support for FreeBSD and macOS (:issue:`4927`)
- Fix for matching minions under syndics (:issue:`7671`) - Fix for matching minions under syndics (:issue:`7671`)
- Improve exception handling for missing ID (:issue:`8259`) - Improve exception handling for missing ID (:issue:`8259`)
- Fix grain mismatch for ScientificLinux (:issue:`8338`) - Fix grain mismatch for ScientificLinux (:issue:`8338`)

View file

@ -107,7 +107,7 @@ Cloud Changes
Platform Changes Platform Changes
================ ================
- Renamed modules related to OS X. The following module filenames were changed. - Renamed modules related to macOS. The following module filenames were changed.
The virtual name remained unchanged. The virtual name remained unchanged.
- **PR** `#30558`_: renamed osxdesktop.py to mac_desktop.py - **PR** `#30558`_: renamed osxdesktop.py to mac_desktop.py

View file

@ -244,7 +244,7 @@ Then pass the signal to the master or minion when it seems to be unresponsive:
killall -SIGUSR1 salt-master killall -SIGUSR1 salt-master
killall -SIGUSR1 salt-minion killall -SIGUSR1 salt-minion
Also under BSD and Mac OS X in addition to SIGUSR1 signal, debug subroutine set Also under BSD and macOS in addition to SIGUSR1 signal, debug subroutine set
up for SIGINFO which has an advantage of being sent by Ctrl+T shortcut. up for SIGINFO which has an advantage of being sent by Ctrl+T shortcut.
When filing an issue or sending questions to the mailing list for a problem When filing an issue or sending questions to the mailing list for a problem

View file

@ -30,6 +30,6 @@ Tutorials Index
* :ref:`How to Convert Jinja Logic to an Execution Module <tutorial-jinja_to_execution-module>` * :ref:`How to Convert Jinja Logic to an Execution Module <tutorial-jinja_to_execution-module>`
* :ref:`Using Salt with Stormpath <tutorial-stormpath>` * :ref:`Using Salt with Stormpath <tutorial-stormpath>`
* :ref:`Syslog-ng usage <syslog-ng-sate-usage>` * :ref:`Syslog-ng usage <syslog-ng-sate-usage>`
* :ref:`The MacOS X (Maverick) Developer Step By Step Guide To Salt Installation <tutorial-macos-walk-through>` * :ref:`The macOS (Maverick) Developer Step By Step Guide To Salt Installation <tutorial-macos-walk-through>`
* :ref:`SaltStack Walk-through <tutorial-salt-walk-through>` * :ref:`SaltStack Walk-through <tutorial-salt-walk-through>`
* :ref:`Writing Salt Tests <tutorial-salt-testing>` * :ref:`Writing Salt Tests <tutorial-salt-testing>`

View file

@ -1,11 +1,11 @@
.. _tutorial-macos-walk-through: .. _tutorial-macos-walk-through:
======================================================================== ======================================================================
The MacOS X (Maverick) Developer Step By Step Guide To Salt Installation The macOS (Maverick) Developer Step By Step Guide To Salt Installation
======================================================================== ======================================================================
This document provides a step-by-step guide to installing a Salt cluster This document provides a step-by-step guide to installing a Salt cluster
consisting of one master, and one minion running on a local VM hosted on Mac OS X. consisting of one master, and one minion running on a local VM hosted on macOS.
.. note:: .. note::
@ -85,12 +85,12 @@ Step 1 - Configuring The Salt Master On Your Mac
`official documentation `official documentation
<http://docs.saltstack.com/topics/installation/osx.html>`_ <http://docs.saltstack.com/topics/installation/osx.html>`_
Because Salt has a lot of dependencies that are not built in Mac OS X, we will Because Salt has a lot of dependencies that are not built in macOS, we will use
use Homebrew to install Salt. Homebrew is a package manager for Mac, it's Homebrew to install Salt. Homebrew is a package manager for Mac, it's great, use
great, use it (for this tutorial at least!). Some people spend a lot of time it (for this tutorial at least!). Some people spend a lot of time installing
installing libs by hand to better understand dependencies, and then realize how libs by hand to better understand dependencies, and then realize how useful a
useful a package manager is once they're configuring a brand new machine and package manager is once they're configuring a brand new machine and have to do
have to do it all over again. It also lets you *uninstall* things easily. it all over again. It also lets you *uninstall* things easily.
.. note:: .. note::
@ -109,7 +109,7 @@ have to do it all over again. It also lets you *uninstall* things easily.
.. tip:: .. tip::
Use the keyboard shortcut ``cmd + shift + period`` in the "open" Mac OS X Use the keyboard shortcut ``cmd + shift + period`` in the "open" macOS
dialog box to display hidden files and folders, such as .profile. dialog box to display hidden files and folders, such as .profile.
@ -169,7 +169,7 @@ http://docs.saltstack.com/ref/configuration/examples.html#configuration-examples
``/etc/salt/master`` is a file, not a folder. ``/etc/salt/master`` is a file, not a folder.
Salt Master configuration changes. The Salt master needs a few customization Salt Master configuration changes. The Salt master needs a few customization
to be able to run on Mac OS X: to be able to run on macOS:
.. code-block:: bash .. code-block:: bash
@ -216,7 +216,7 @@ Install VirtualBox
------------------ ------------------
Go get it here: https://www.virtualBox.org/wiki/Downloads (click on VirtualBox Go get it here: https://www.virtualBox.org/wiki/Downloads (click on VirtualBox
for OS X hosts => x86/amd64) for macOS hosts => x86/amd64)
Install Vagrant Install Vagrant
--------------- ---------------
@ -317,7 +317,7 @@ following:
.. note:: .. note::
That ip is the ip of your VM host (the Mac OS X OS). The number is a That ip is the ip of your VM host (the macOS host). The number is a
VirtualBox default and is displayed in the log after the Vagrant ssh VirtualBox default and is displayed in the log after the Vagrant ssh
command. We'll use that IP to tell the minion where the Salt master is. command. We'll use that IP to tell the minion where the Salt master is.
Once you're done, end the ssh session by typing ``exit``. Once you're done, end the ssh session by typing ``exit``.
@ -436,7 +436,7 @@ and then applied by running the :py:func:`state.apply
<salt.modules.state.apply_>` function to have the Salt master order its minions <salt.modules.state.apply_>` function to have the Salt master order its minions
to update their instructions and run the associated commands. to update their instructions and run the associated commands.
First Create an empty file on your Salt master (Mac OS X machine): First Create an empty file on your Salt master (macOS machine):
.. code-block:: bash .. code-block:: bash

View file

@ -1,36 +1,34 @@
=============================== =================================
Building Native Packages on OSX Building Native Packages on macOS
=============================== =================================
Salt runs well on the Mac, but does have some limitations. Salt runs well on the macOS, but does have some limitations.
In this directory you will find scripts and collateral to build an OSX In this directory you will find scripts and collateral to build a macOS
.pkg-style package that uses a custom-built Python. This process has .pkg-style package that uses a custom-built Python. This process has been
been tested on Mac OSX Lion (10.7) and following. tested on macOS Lion (10.7) and later.
In addition, because of changes in launchd from version In addition, because of changes in launchd from version to version of the OS, a
to version of the OS, a simpler approach is taken for simpler approach is taken for the launchd plist files.
the launchd plist files.
This approach enables Salt users to potentially This approach enables Salt users to potentially add items to their Salt install
add items to their Salt install via 'pip install' without via 'pip install' without interfering with the rest of their system's Python
interfering with the rest of their system's Python packages. packages.
To build a native package you will need the following installed: To build a native package you will need the following installed:
- Xcode, or the Xcode Command Line Tools - Xcode, or the Xcode Command Line Tools
- git - git
The native package will install package files into /opt/salt. The native package will install package files into /opt/salt. Configuration
Configuration files will be installed to /etc, but will have files will be installed to /etc, but will have '.dist' appended to them.
'.dist' appended to them.
Launchd plists will be placed in /Library/LaunchDaemons. By default Launchd plists will be placed in /Library/LaunchDaemons. By default salt-minion
salt-minion will NOT be enabled or started. will NOT be enabled or started.
The process has been automated via the ``build.sh`` script The process has been automated via the ``build.sh`` script in the directory with
in the directory with this README file. Checkout the Salt repo from this README file. Checkout the Salt repo from GitHub, chdir into the base repo
GitHub, chdir into the base repo directory, and run directory, and run
./build.sh ./build.sh
@ -39,5 +37,3 @@ References:
http://crushbeercrushcode.org/2014/01/using-pkgbuild-and-productbuild-on-os-x-10-7/ http://crushbeercrushcode.org/2014/01/using-pkgbuild-and-productbuild-on-os-x-10-7/
http://stackoverflow.com/questions/11487596/making-os-x-installer-packages-like-a-pro-xcode-developer-id-ready-pkg http://stackoverflow.com/questions/11487596/making-os-x-installer-packages-like-a-pro-xcode-developer-id-ready-pkg

View file

@ -1,12 +1,12 @@
#!/bin/bash #!/bin/bash
############################################################################ ############################################################################
# #
# Title: Build Salt Script for OSX # Title: Build Salt Script for macOS
# Authors: CR Oldham, Shane Lee # Authors: CR Oldham, Shane Lee
# Date: December 2015 # Date: December 2015
# #
# Description: This script downloads and installs all dependencies and build # Description: This script downloads and installs all dependencies and build
# tools required to create a .pkg file for installation on OSX. # tools required to create a .pkg file for installation on macOS.
# Salt and all dependencies will be installed to /opt/salt. A # Salt and all dependencies will be installed to /opt/salt. A
# .pkg file will then be created based on the contents of # .pkg file will then be created based on the contents of
# /opt/salt # /opt/salt
@ -57,7 +57,7 @@ PKGRESOURCES=$SRCDIR/pkg/osx
############################################################################ ############################################################################
if [[ ! -e "$SRCDIR/.git" ]] && [[ ! -e "$SRCDIR/scripts/salt" ]]; then if [[ ! -e "$SRCDIR/.git" ]] && [[ ! -e "$SRCDIR/scripts/salt" ]]; then
echo "This directory doesn't appear to be a git repository." echo "This directory doesn't appear to be a git repository."
echo "The OS X build process needs some files from a Git checkout of Salt." echo "The macOS build process needs some files from a Git checkout of Salt."
echo "Run this script from the root of the Git checkout." echo "Run this script from the root of the Git checkout."
exit -1 exit -1
fi fi

View file

@ -2,11 +2,11 @@
############################################################################ ############################################################################
# #
# Title: Build Environment Script for OSX # Title: Build Environment Script for macOS
# Authors: CR Oldham, Shane Lee # Authors: CR Oldham, Shane Lee
# Date: December 2015 # Date: December 2015
# #
# Description: This script sets up a build environment for salt on OSX. # Description: This script sets up a build environment for salt on macOS.
# #
# Requirements: # Requirements:
# - XCode Command Line Tools (xcode-select --install) # - XCode Command Line Tools (xcode-select --install)
@ -15,7 +15,7 @@
# This script is not passed any parameters # This script is not passed any parameters
# #
# Example: # Example:
# The following will set up a build environment for salt on OSX # The following will set up a build environment for salt on macOS
# #
# ./dev_env.sh # ./dev_env.sh
# #

View file

@ -1,11 +1,11 @@
#!/bin/bash #!/bin/bash
############################################################################ ############################################################################
# #
# Title: Build Package Script for OSX # Title: Build Package Script for macOS
# Authors: CR Oldham, Shane Lee # Authors: CR Oldham, Shane Lee
# Date: December 2015 # Date: December 2015
# #
# Description: This creates an OSX package for Salt from the contents of # Description: This creates an macOS package for Salt from the contents of
# /opt/salt # /opt/salt
# #
# Requirements: # Requirements:
@ -67,7 +67,7 @@ PKGRESOURCES=$SRCDIR/pkg/osx
############################################################################ ############################################################################
if [[ ! -e "$SRCDIR/.git" ]] && [[ ! -e "$SRCDIR/scripts/salt" ]]; then if [[ ! -e "$SRCDIR/.git" ]] && [[ ! -e "$SRCDIR/scripts/salt" ]]; then
echo "This directory doesn't appear to be a git repository." echo "This directory doesn't appear to be a git repository."
echo "The OS X build process needs some files from a Git checkout of Salt." echo "The macOS build process needs some files from a Git checkout of Salt."
echo "Run this script from the 'pkg/osx' directory of the Git checkout." echo "Run this script from the 'pkg/osx' directory of the Git checkout."
exit -1 exit -1
fi fi

View file

@ -1,11 +1,11 @@
#!/bin/bash #!/bin/bash
############################################################################ ############################################################################
# #
# Title: Sign Package Script for OSX # Title: Sign Package Script for macOS
# Authors: Shane Lee # Authors: Shane Lee
# Date: December 2015 # Date: December 2015
# #
# Description: This signs an OSX Installer Package (.pkg) # Description: This signs an macOS Installer Package (.pkg)
# /opt/salt # /opt/salt
# #
# Requirements: # Requirements:

View file

@ -12,7 +12,7 @@
# - None # - None
# #
# Usage: # Usage:
# This script is run as a part of the OSX Salt Installation # This script is run as a part of the macOS Salt Installation
# #
############################################################################### ###############################################################################
echo "Post install started on:" > /tmp/postinstall.txt echo "Post install started on:" > /tmp/postinstall.txt

View file

@ -6,13 +6,13 @@
# Date: December 2015 # Date: December 2015
# #
# Description: This script stops the salt minion service before attempting to # Description: This script stops the salt minion service before attempting to
# install Salt on Mac OSX # install Salt on macOS
# #
# Requirements: # Requirements:
# - None # - None
# #
# Usage: # Usage:
# This script is run as a part of the OSX Salt Installation # This script is run as a part of the macOS Salt Installation
# #
############################################################################### ###############################################################################
echo "Preinstall started on:" > /tmp/preinstall.txt echo "Preinstall started on:" > /tmp/preinstall.txt

View file

@ -11,7 +11,7 @@ Watch files and translate the changes into salt events
the beacon configuration. the beacon configuration.
:note: The `inotify` beacon only works on OSes that have `inotify` kernel support. :note: The `inotify` beacon only works on OSes that have `inotify` kernel support.
Currently this excludes FreeBSD, Mac OS X, and Windows. Currently this excludes FreeBSD, macOS, and Windows.
''' '''
# Import Python libs # Import Python libs

View file

@ -2,6 +2,7 @@
from __future__ import print_function from __future__ import print_function
from __future__ import absolute_import from __future__ import absolute_import
from salt.utils import parsers from salt.utils import parsers
from salt.utils.verify import check_user, verify_log from salt.utils.verify import check_user, verify_log

View file

@ -2,8 +2,9 @@
# Import python libs # Import python libs
from __future__ import absolute_import, print_function from __future__ import absolute_import, print_function
import os
import sys import sys
sys.modules['pkg_resources'] = None
import os
# Import Salt libs # Import Salt libs
from salt.ext.six import string_types from salt.ext.six import string_types

View file

@ -321,10 +321,11 @@ def list_passwords(kwargs=None, call=None):
ret = {} ret = {}
for item in response['list']: for item in response['list']:
server = item['server']['name'] if 'server' in item:
if server not in ret: server = item['server']['name']
ret[server] = [] if server not in ret:
ret[server].append(item) ret[server] = []
ret[server].append(item)
return ret return ret

View file

@ -1045,7 +1045,7 @@ def _windows_platform_data():
def _osx_platform_data(): def _osx_platform_data():
''' '''
Additional data for Mac OS X systems Additional data for macOS systems
Returns: A dictionary containing values for the following: Returns: A dictionary containing values for the following:
- model_name - model_name
- boot_rom_version - boot_rom_version

View file

@ -400,7 +400,7 @@ class Master(SMaster):
# Let's check to see how our max open files(ulimit -n) setting is # Let's check to see how our max open files(ulimit -n) setting is
mof_s, mof_h = resource.getrlimit(resource.RLIMIT_NOFILE) mof_s, mof_h = resource.getrlimit(resource.RLIMIT_NOFILE)
if mof_h == resource.RLIM_INFINITY: if mof_h == resource.RLIM_INFINITY:
# Unclear what to do with infinity... OSX reports RLIM_INFINITY as # Unclear what to do with infinity... macOS reports RLIM_INFINITY as
# hard limit,but raising to anything above soft limit fails... # hard limit,but raising to anything above soft limit fails...
mof_h = mof_s mof_h = mof_s
log.info( log.info(
@ -433,7 +433,7 @@ class Master(SMaster):
) )
except ValueError: except ValueError:
# https://github.com/saltstack/salt/issues/1991#issuecomment-13025595 # https://github.com/saltstack/salt/issues/1991#issuecomment-13025595
# A user under OSX reported that our 100000 default value is # A user under macOS reported that our 100000 default value is
# still too high. # still too high.
log.critical( log.critical(
'Failed to raise max open files setting to {0}. If this ' 'Failed to raise max open files setting to {0}. If this '

View file

@ -64,7 +64,7 @@ try:
# pylint: enable=unused-import # pylint: enable=unused-import
logging.getLogger('boto').setLevel(logging.CRITICAL) logging.getLogger('boto').setLevel(logging.CRITICAL)
HAS_BOTO = True HAS_BOTO = True
except ImportError: except (ImportError, AttributeError):
HAS_BOTO = False HAS_BOTO = False

View file

@ -39,7 +39,7 @@ def __virtual__():
''' '''
if not salt.utils.is_darwin(): if not salt.utils.is_darwin():
return (False, 'Failed to load the mac_service module:\n' return (False, 'Failed to load the mac_service module:\n'
'Only available on Mac OS X systems.') 'Only available on macOS systems.')
if not os.path.exists('/bin/launchctl'): if not os.path.exists('/bin/launchctl'):
return (False, 'Failed to load the mac_service module:\n' return (False, 'Failed to load the mac_service module:\n'

View file

@ -1,6 +1,6 @@
# -*- coding: utf-8 -*- # -*- coding: utf-8 -*-
''' '''
This module allows you to manage assistive access on OS X minions with 10.9+ This module allows you to manage assistive access on macOS minions with 10.9+
.. versionadded:: 2016.3.0 .. versionadded:: 2016.3.0
@ -30,7 +30,8 @@ def __virtual__():
''' '''
if salt.utils.is_darwin() and LooseVersion(__grains__['osrelease']) >= '10.9': if salt.utils.is_darwin() and LooseVersion(__grains__['osrelease']) >= '10.9':
return True return True
return False, 'The assistive module cannot be loaded: must be run on OSX 10.9 or newer.' return False, 'The assistive module cannot be loaded: must be run on ' \
'macOS 10.9 or newer.'
def install(app_id, enable=True): def install(app_id, enable=True):

View file

@ -1,6 +1,6 @@
# -*- coding: utf-8 -*- # -*- coding: utf-8 -*-
''' '''
Homebrew for Mac OS X Homebrew for macOS
.. important:: .. important::
If you feel that Salt should be using this module to manage packages on a If you feel that Salt should be using this module to manage packages on a

View file

@ -1,6 +1,6 @@
# -*- coding: utf-8 -*- # -*- coding: utf-8 -*-
''' '''
Mac OS X implementations of various commands in the "desktop" interface macOS implementations of various commands in the "desktop" interface
''' '''
from __future__ import absolute_import from __future__ import absolute_import
@ -18,7 +18,7 @@ def __virtual__():
''' '''
if salt.utils.is_darwin(): if salt.utils.is_darwin():
return __virtualname__ return __virtualname__
return False, 'Cannot load OSX desktop module: This is not an OSX host.' return False, 'Cannot load macOS desktop module: This is not a macOS host.'
def get_output_volume(): def get_output_volume():

View file

@ -1,6 +1,6 @@
# -*- coding: utf-8 -*- # -*- coding: utf-8 -*-
''' '''
Install pkg, dmg and .app applications on Mac OS X minions. Install pkg, dmg and .app applications on macOS minions.
''' '''

View file

@ -1,8 +1,8 @@
# -*- coding: utf-8 -*- # -*- coding: utf-8 -*-
''' '''
Installer support for OS X. Installer support for macOS.
Installer is the native .pkg/.mpkg package manager for OS X. Installer is the native .pkg/.mpkg package manager for macOS.
''' '''
# Import Python libs # Import Python libs

View file

@ -1,6 +1,6 @@
# -*- coding: utf-8 -*- # -*- coding: utf-8 -*-
''' '''
Support for MacPorts under Mac OSX. Support for MacPorts under macOS.
This module has some caveats. This module has some caveats.

View file

@ -1,6 +1,6 @@
# -*- coding: utf-8 -*- # -*- coding: utf-8 -*-
''' '''
Module for editing power settings on Mac OS X Module for editing power settings on macOS
.. versionadded:: 2016.3.0 .. versionadded:: 2016.3.0
''' '''
@ -18,11 +18,11 @@ __virtualname__ = 'power'
def __virtual__(): def __virtual__():
''' '''
Only for Mac OS X Only for macOS
''' '''
if not salt.utils.is_darwin(): if not salt.utils.is_darwin():
return (False, 'The mac_power module could not be loaded: ' return (False, 'The mac_power module could not be loaded: '
'module only works on Mac OS X systems.') 'module only works on macOS systems.')
return __virtualname__ return __virtualname__
@ -423,7 +423,7 @@ def set_restart_freeze(enabled):
''' '''
Specifies whether the server restarts automatically after a system freeze. Specifies whether the server restarts automatically after a system freeze.
This setting doesn't seem to be editable. The command completes successfully This setting doesn't seem to be editable. The command completes successfully
but the setting isn't actually updated. This is probably an OS X bug. The but the setting isn't actually updated. This is probably a macOS. The
functions remains in case they ever fix the bug. functions remains in case they ever fix the bug.
:param bool enabled: True to enable, False to disable. "On" and "Off" are :param bool enabled: True to enable, False to disable. "On" and "Off" are

View file

@ -1,6 +1,6 @@
# -*- coding: utf-8 -*- # -*- coding: utf-8 -*-
''' '''
The service module for Mac OS X The service module for macOS
.. versionadded:: 2016.3.0 .. versionadded:: 2016.3.0
''' '''
from __future__ import absolute_import from __future__ import absolute_import
@ -29,11 +29,11 @@ __func_alias__ = {
def __virtual__(): def __virtual__():
''' '''
Only for Mac OS X with launchctl Only for macOS with launchctl
''' '''
if not salt.utils.is_darwin(): if not salt.utils.is_darwin():
return (False, 'Failed to load the mac_service module:\n' return (False, 'Failed to load the mac_service module:\n'
'Only available on Mac OS X systems.') 'Only available on macOS systems.')
if not salt.utils.which('launchctl'): if not salt.utils.which('launchctl'):
return (False, 'Failed to load the mac_service module:\n' return (False, 'Failed to load the mac_service module:\n'
@ -45,7 +45,7 @@ def __virtual__():
if LooseVersion(__grains__['osrelease']) < LooseVersion('10.11'): if LooseVersion(__grains__['osrelease']) < LooseVersion('10.11'):
return (False, 'Failed to load the mac_service module:\n' return (False, 'Failed to load the mac_service module:\n'
'Requires OS X 10.11 or newer') 'Requires macOS 10.11 or newer')
return __virtualname__ return __virtualname__
@ -308,7 +308,7 @@ def start(name, runas=None):
Start a launchd service. Raises an error if the service fails to start Start a launchd service. Raises an error if the service fails to start
.. note:: .. note::
To start a service in Mac OS X the service must be enabled first. Use To start a service in macOS the service must be enabled first. Use
``service.enable`` to enable the service. ``service.enable`` to enable the service.
:param str name: Service label, file name, or full path :param str name: Service label, file name, or full path
@ -337,7 +337,7 @@ def stop(name, runas=None):
Stop a launchd service. Raises an error if the service fails to stop Stop a launchd service. Raises an error if the service fails to stop
.. note:: .. note::
Though ``service.stop`` will unload a service in Mac OS X, the service Though ``service.stop`` will unload a service in macOS, the service
will start on next boot unless it is disabled. Use ``service.disable`` will start on next boot unless it is disabled. Use ``service.disable``
to disable the service to disable the service

View file

@ -2,7 +2,7 @@
''' '''
.. versionadded:: 2016.3.0 .. versionadded:: 2016.3.0
Manage Mac OSX local directory passwords and policies. Manage macOS local directory passwords and policies.
Note that it is usually better to apply password policies through the creation Note that it is usually better to apply password policies through the creation
of a configuration profile. of a configuration profile.
@ -32,9 +32,9 @@ __virtualname__ = 'shadow'
def __virtual__(): def __virtual__():
# Is this os x? # Is this macOS?
if not salt.utils.is_darwin(): if not salt.utils.is_darwin():
return False, 'Not Darwin' return False, 'Not macOS'
if HAS_PWD: if HAS_PWD:
return __virtualname__ return __virtualname__
@ -339,13 +339,13 @@ def get_maxdays(name):
def set_mindays(name, days): def set_mindays(name, days):
''' '''
Set the minimum password age in days. Not available in OS X. Set the minimum password age in days. Not available in macOS.
:param str name: The user name :param str name: The user name
:param int days: The number of days :param int days: The number of days
:return: Will always return False until OSX supports this feature. :return: Will always return False until macOS supports this feature.
:rtype: bool :rtype: bool
CLI Example: CLI Example:
@ -360,13 +360,13 @@ def set_mindays(name, days):
def set_inactdays(name, days): def set_inactdays(name, days):
''' '''
Set the number if inactive days before the account is locked. Not available Set the number if inactive days before the account is locked. Not available
in OS X in macOS
:param str name: The user name :param str name: The user name
:param int days: The number of days :param int days: The number of days
:return: Will always return False until OSX supports this feature. :return: Will always return False until macOS supports this feature.
:rtype: bool :rtype: bool
CLI Example: CLI Example:
@ -381,13 +381,13 @@ def set_inactdays(name, days):
def set_warndays(name, days): def set_warndays(name, days):
''' '''
Set the number of days before the password expires that the user will start Set the number of days before the password expires that the user will start
to see a warning. Not available in OS X to see a warning. Not available in macOS
:param str name: The user name :param str name: The user name
:param int days: The number of days :param int days: The number of days
:return: Will always return False until OSX supports this feature. :return: Will always return False until macOS supports this feature.
:rtype: bool :rtype: bool
CLI Example: CLI Example:

View file

@ -17,12 +17,12 @@ __virtualname__ = 'sysctl'
def __virtual__(): def __virtual__():
''' '''
Only run on Darwin (OS X) systems Only run on Darwin (macOS) systems
''' '''
if __grains__['os'] == 'MacOS': if __grains__['os'] == 'MacOS':
return __virtualname__ return __virtualname__
return (False, 'The darwin_sysctl execution module cannot be loaded: ' return (False, 'The darwin_sysctl execution module cannot be loaded: '
'only available on MacOS systems.') 'Only available on macOS systems.')
def show(config_file=False): def show(config_file=False):

View file

@ -603,7 +603,7 @@ def set_boot_arch(arch='default'):
The setting is not updated. This is either an apple bug, not available The setting is not updated. This is either an apple bug, not available
on the test system, or a result of system files now being locked down in on the test system, or a result of system files now being locked down in
OS X (SIP Protection). macOS (SIP Protection).
:param str arch: A string representing the desired architecture. If no :param str arch: A string representing the desired architecture. If no
value is passed, default is assumed. Valid values include: value is passed, default is assumed. Valid values include:

View file

@ -1,6 +1,6 @@
# -*- coding: utf-8 -*- # -*- coding: utf-8 -*-
''' '''
Module for editing date/time settings on Mac OS X Module for editing date/time settings on macOS
.. versionadded:: 2016.3.0 .. versionadded:: 2016.3.0
''' '''
@ -19,11 +19,11 @@ __virtualname__ = 'timezone'
def __virtual__(): def __virtual__():
''' '''
Only for Mac OS X Only for macOS
''' '''
if not salt.utils.is_darwin(): if not salt.utils.is_darwin():
return (False, 'The mac_timezone module could not be loaded: ' return (False, 'The mac_timezone module could not be loaded: '
'module only works on Mac OS X systems.') 'module only works on macOS systems.')
return __virtualname__ return __virtualname__
@ -333,7 +333,7 @@ def set_time_server(time_server='time.apple.com'):
network time server. network time server.
:param time_server: IP or DNS name of the network time server. If nothing is :param time_server: IP or DNS name of the network time server. If nothing is
passed the time server will be set to the OS X default of 'time.apple.com' passed the time server will be set to the macOS default of 'time.apple.com'
:type: str :type: str
:return: True if successful, False if not :return: True if successful, False if not

View file

@ -378,7 +378,7 @@ def _netstat_route_linux():
def _netstat_route_freebsd(): def _netstat_route_freebsd():
''' '''
Return netstat routing information for FreeBSD and OS X Return netstat routing information for FreeBSD and macOS
''' '''
ret = [] ret = []
cmd = 'netstat -f inet -rn | tail -n+5' cmd = 'netstat -f inet -rn | tail -n+5'

View file

@ -185,7 +185,7 @@ def _extract_json(npm_output):
lines = lines[1:] lines = lines[1:]
while lines and not lines[-1].startswith('}') and not lines[-1].startswith(']'): while lines and not lines[-1].startswith('}') and not lines[-1].startswith(']'):
lines = lines[:-1] lines = lines[:-1]
# Mac OSX with fsevents includes the following line in the return # macOS with fsevents includes the following line in the return
# when a new module is installed which is invalid JSON: # when a new module is installed which is invalid JSON:
# [fsevents] Success: "..." # [fsevents] Success: "..."
while lines and lines[0].startswith('[fsevents]'): while lines and lines[0].startswith('[fsevents]'):

View file

@ -29,7 +29,7 @@ def __virtual__():
if salt.utils.which('osqueryi'): if salt.utils.which('osqueryi'):
return __virtualname__ return __virtualname__
return (False, 'The osquery execution module cannot be loaded: ' return (False, 'The osquery execution module cannot be loaded: '
'osqueryi binary is not in the path.') 'osqueryi binary is not in the path.')
def _table_attrs(table): def _table_attrs(table):
@ -659,7 +659,7 @@ def alf(attrs=None, where=None):
''' '''
if salt.utils.is_darwin(): if salt.utils.is_darwin():
return _osquery_cmd(table='alf', attrs=attrs, where=where) return _osquery_cmd(table='alf', attrs=attrs, where=where)
return {'result': False, 'comment': 'Only available on OS X systems.'} return {'result': False, 'comment': 'Only available on macOS systems.'}
def alf_exceptions(attrs=None, where=None): def alf_exceptions(attrs=None, where=None):
@ -674,7 +674,7 @@ def alf_exceptions(attrs=None, where=None):
''' '''
if salt.utils.is_darwin(): if salt.utils.is_darwin():
return _osquery_cmd(table='alf_exceptions', attrs=attrs, where=where) return _osquery_cmd(table='alf_exceptions', attrs=attrs, where=where)
return {'result': False, 'comment': 'Only available on OS X systems.'} return {'result': False, 'comment': 'Only available on macOS systems.'}
def alf_explicit_auths(attrs=None, where=None): def alf_explicit_auths(attrs=None, where=None):
@ -689,7 +689,7 @@ def alf_explicit_auths(attrs=None, where=None):
''' '''
if salt.utils.is_darwin(): if salt.utils.is_darwin():
return _osquery_cmd(table='alf_explicit_auths', attrs=attrs, where=where) return _osquery_cmd(table='alf_explicit_auths', attrs=attrs, where=where)
return {'result': False, 'comment': 'Only available on OS X systems.'} return {'result': False, 'comment': 'Only available on macOS systems.'}
def alf_services(attrs=None, where=None): def alf_services(attrs=None, where=None):
@ -704,7 +704,7 @@ def alf_services(attrs=None, where=None):
''' '''
if salt.utils.is_darwin(): if salt.utils.is_darwin():
return _osquery_cmd(table='alf_services', attrs=attrs, where=where) return _osquery_cmd(table='alf_services', attrs=attrs, where=where)
return {'result': False, 'comment': 'Only available on OS X systems.'} return {'result': False, 'comment': 'Only available on macOS systems.'}
def apps(attrs=None, where=None): def apps(attrs=None, where=None):
@ -719,7 +719,7 @@ def apps(attrs=None, where=None):
''' '''
if salt.utils.is_darwin(): if salt.utils.is_darwin():
return _osquery_cmd(table='apps', attrs=attrs, where=where) return _osquery_cmd(table='apps', attrs=attrs, where=where)
return {'result': False, 'comment': 'Only available on OS X systems.'} return {'result': False, 'comment': 'Only available on macOS systems.'}
def certificates(attrs=None, where=None): def certificates(attrs=None, where=None):
@ -734,7 +734,7 @@ def certificates(attrs=None, where=None):
''' '''
if salt.utils.is_darwin(): if salt.utils.is_darwin():
return _osquery_cmd(table='certificates', attrs=attrs, where=where) return _osquery_cmd(table='certificates', attrs=attrs, where=where)
return {'result': False, 'comment': 'Only available on OS X systems.'} return {'result': False, 'comment': 'Only available on macOS systems.'}
def chrome_extensions(attrs=None, where=None): def chrome_extensions(attrs=None, where=None):
@ -749,7 +749,7 @@ def chrome_extensions(attrs=None, where=None):
''' '''
if salt.utils.is_darwin(): if salt.utils.is_darwin():
return _osquery_cmd(table='chrome_extensions', attrs=attrs, where=where) return _osquery_cmd(table='chrome_extensions', attrs=attrs, where=where)
return {'result': False, 'comment': 'Only available on OS X systems.'} return {'result': False, 'comment': 'Only available on macOS systems.'}
def firefox_addons(attrs=None, where=None): def firefox_addons(attrs=None, where=None):
@ -764,7 +764,7 @@ def firefox_addons(attrs=None, where=None):
''' '''
if salt.utils.is_darwin(): if salt.utils.is_darwin():
return _osquery_cmd(table='firefox_addons', attrs=attrs, where=where) return _osquery_cmd(table='firefox_addons', attrs=attrs, where=where)
return {'result': False, 'comment': 'Only available on OS X systems.'} return {'result': False, 'comment': 'Only available on macOS systems.'}
def homebrew_packages(attrs=None, where=None): def homebrew_packages(attrs=None, where=None):
@ -779,7 +779,7 @@ def homebrew_packages(attrs=None, where=None):
''' '''
if salt.utils.is_darwin(): if salt.utils.is_darwin():
return _osquery_cmd(table='homebrew_packages', attrs=attrs, where=where) return _osquery_cmd(table='homebrew_packages', attrs=attrs, where=where)
return {'result': False, 'comment': 'Only available on OS X systems.'} return {'result': False, 'comment': 'Only available on macOS systems.'}
def iokit_devicetree(attrs=None, where=None): def iokit_devicetree(attrs=None, where=None):
@ -794,7 +794,7 @@ def iokit_devicetree(attrs=None, where=None):
''' '''
if salt.utils.is_darwin(): if salt.utils.is_darwin():
return _osquery_cmd(table='iokit_devicetree', attrs=attrs, where=where) return _osquery_cmd(table='iokit_devicetree', attrs=attrs, where=where)
return {'result': False, 'comment': 'Only available on OS X systems.'} return {'result': False, 'comment': 'Only available on macOS systems.'}
def iokit_registry(attrs=None, where=None): def iokit_registry(attrs=None, where=None):
@ -809,7 +809,7 @@ def iokit_registry(attrs=None, where=None):
''' '''
if salt.utils.is_darwin(): if salt.utils.is_darwin():
return _osquery_cmd(table='iokit_registry', attrs=attrs, where=where) return _osquery_cmd(table='iokit_registry', attrs=attrs, where=where)
return {'result': False, 'comment': 'Only available on OS X systems.'} return {'result': False, 'comment': 'Only available on macOS systems.'}
def kernel_extensions(attrs=None, where=None): def kernel_extensions(attrs=None, where=None):
@ -824,7 +824,7 @@ def kernel_extensions(attrs=None, where=None):
''' '''
if salt.utils.is_darwin(): if salt.utils.is_darwin():
return _osquery_cmd(table='kernel_extensions', attrs=attrs, where=where) return _osquery_cmd(table='kernel_extensions', attrs=attrs, where=where)
return {'result': False, 'comment': 'Only available on OS X systems.'} return {'result': False, 'comment': 'Only available on macOS systems.'}
def keychain_items(attrs=None, where=None): def keychain_items(attrs=None, where=None):
@ -839,7 +839,7 @@ def keychain_items(attrs=None, where=None):
''' '''
if salt.utils.is_darwin(): if salt.utils.is_darwin():
return _osquery_cmd(table='keychain_items', attrs=attrs, where=where) return _osquery_cmd(table='keychain_items', attrs=attrs, where=where)
return {'result': False, 'comment': 'Only available on OS X systems.'} return {'result': False, 'comment': 'Only available on macOS systems.'}
def launchd(attrs=None, where=None): def launchd(attrs=None, where=None):
@ -854,7 +854,7 @@ def launchd(attrs=None, where=None):
''' '''
if salt.utils.is_darwin(): if salt.utils.is_darwin():
return _osquery_cmd(table='launchd', attrs=attrs, where=where) return _osquery_cmd(table='launchd', attrs=attrs, where=where)
return {'result': False, 'comment': 'Only available on OS X systems.'} return {'result': False, 'comment': 'Only available on macOS systems.'}
def nfs_shares(attrs=None, where=None): def nfs_shares(attrs=None, where=None):
@ -869,7 +869,7 @@ def nfs_shares(attrs=None, where=None):
''' '''
if salt.utils.is_darwin(): if salt.utils.is_darwin():
return _osquery_cmd(table='nfs_shares', attrs=attrs, where=where) return _osquery_cmd(table='nfs_shares', attrs=attrs, where=where)
return {'result': False, 'comment': 'Only available on OS X systems.'} return {'result': False, 'comment': 'Only available on macOS systems.'}
def nvram(attrs=None, where=None): def nvram(attrs=None, where=None):
@ -884,7 +884,7 @@ def nvram(attrs=None, where=None):
''' '''
if salt.utils.is_darwin(): if salt.utils.is_darwin():
return _osquery_cmd(table='nvram', attrs=attrs, where=where) return _osquery_cmd(table='nvram', attrs=attrs, where=where)
return {'result': False, 'comment': 'Only available on OS X systems.'} return {'result': False, 'comment': 'Only available on macOS systems.'}
def preferences(attrs=None, where=None): def preferences(attrs=None, where=None):
@ -899,7 +899,7 @@ def preferences(attrs=None, where=None):
''' '''
if salt.utils.is_darwin(): if salt.utils.is_darwin():
return _osquery_cmd(table='preferences', attrs=attrs, where=where) return _osquery_cmd(table='preferences', attrs=attrs, where=where)
return {'result': False, 'comment': 'Only available on OS X systems.'} return {'result': False, 'comment': 'Only available on macOS systems.'}
def quarantine(attrs=None, where=None): def quarantine(attrs=None, where=None):
@ -914,7 +914,7 @@ def quarantine(attrs=None, where=None):
''' '''
if salt.utils.is_darwin(): if salt.utils.is_darwin():
return _osquery_cmd(table='quarantine', attrs=attrs, where=where) return _osquery_cmd(table='quarantine', attrs=attrs, where=where)
return {'result': False, 'comment': 'Only available on OS X systems.'} return {'result': False, 'comment': 'Only available on macOS systems.'}
def safari_extensions(attrs=None, where=None): def safari_extensions(attrs=None, where=None):
@ -929,7 +929,7 @@ def safari_extensions(attrs=None, where=None):
''' '''
if salt.utils.is_darwin(): if salt.utils.is_darwin():
return _osquery_cmd(table='safari_extensions', attrs=attrs, where=where) return _osquery_cmd(table='safari_extensions', attrs=attrs, where=where)
return {'result': False, 'comment': 'Only available on OS X systems.'} return {'result': False, 'comment': 'Only available on macOS systems.'}
def startup_items(attrs=None, where=None): def startup_items(attrs=None, where=None):
@ -944,7 +944,7 @@ def startup_items(attrs=None, where=None):
''' '''
if salt.utils.is_darwin(): if salt.utils.is_darwin():
return _osquery_cmd(table='startup_items', attrs=attrs, where=where) return _osquery_cmd(table='startup_items', attrs=attrs, where=where)
return {'result': False, 'comment': 'Only available on OS X systems.'} return {'result': False, 'comment': 'Only available on macOS systems.'}
def xattr_where_from(attrs=None, where=None): def xattr_where_from(attrs=None, where=None):
@ -959,7 +959,7 @@ def xattr_where_from(attrs=None, where=None):
''' '''
if salt.utils.is_darwin(): if salt.utils.is_darwin():
return _osquery_cmd(table='xattr_where_from', attrs=attrs, where=where) return _osquery_cmd(table='xattr_where_from', attrs=attrs, where=where)
return {'result': False, 'comment': 'Only available on OS X systems.'} return {'result': False, 'comment': 'Only available on macOS systems.'}
def xprotect_entries(attrs=None, where=None): def xprotect_entries(attrs=None, where=None):
@ -974,7 +974,7 @@ def xprotect_entries(attrs=None, where=None):
''' '''
if salt.utils.is_darwin(): if salt.utils.is_darwin():
return _osquery_cmd(table='xprotect_entries', attrs=attrs, where=where) return _osquery_cmd(table='xprotect_entries', attrs=attrs, where=where)
return {'result': False, 'comment': 'Only available on OS X systems.'} return {'result': False, 'comment': 'Only available on macOS systems.'}
def xprotect_reports(attrs=None, where=None): def xprotect_reports(attrs=None, where=None):
@ -989,7 +989,7 @@ def xprotect_reports(attrs=None, where=None):
''' '''
if salt.utils.is_darwin(): if salt.utils.is_darwin():
return _osquery_cmd(table='xprotect_reports', attrs=attrs, where=where) return _osquery_cmd(table='xprotect_reports', attrs=attrs, where=where)
return {'result': False, 'comment': 'Only available on OS X systems.'} return {'result': False, 'comment': 'Only available on macOS systems.'}
def file_(attrs=None, where=None): def file_(attrs=None, where=None):

View file

@ -128,7 +128,8 @@ def get_http_proxy(network_service="Ethernet"):
Returns the current http proxy settings Returns the current http proxy settings
network_service network_service
The network service to apply the changes to, this only necessary on OSX The network service to apply the changes to, this only necessary on
macOS
CLI Example: CLI Example:
@ -160,7 +161,8 @@ def set_http_proxy(server, port, user=None, password=None, network_service="Ethe
The password to use if required by the server The password to use if required by the server
network_service network_service
The network service to apply the changes to, this only necessary on OSX The network service to apply the changes to, this only necessary on
macOS
bypass_hosts bypass_hosts
The hosts that are allowed to by pass the proxy. Only used on Windows for other OS's use The hosts that are allowed to by pass the proxy. Only used on Windows for other OS's use
@ -183,7 +185,8 @@ def get_https_proxy(network_service="Ethernet"):
Returns the current https proxy settings Returns the current https proxy settings
network_service network_service
The network service to apply the changes to, this only necessary on OSX The network service to apply the changes to, this only necessary on
macOS
CLI Example: CLI Example:
@ -215,7 +218,8 @@ def set_https_proxy(server, port, user=None, password=None, network_service="Eth
The password to use if required by the server The password to use if required by the server
network_service network_service
The network service to apply the changes to, this only necessary on OSX The network service to apply the changes to, this only necessary on
macOS
bypass_hosts bypass_hosts
The hosts that are allowed to by pass the proxy. Only used on Windows for other OS's use The hosts that are allowed to by pass the proxy. Only used on Windows for other OS's use
@ -238,7 +242,8 @@ def get_ftp_proxy(network_service="Ethernet"):
Returns the current ftp proxy settings Returns the current ftp proxy settings
network_service network_service
The network service to apply the changes to, this only necessary on OSX The network service to apply the changes to, this only necessary on
macOS
CLI Example: CLI Example:
@ -269,7 +274,8 @@ def set_ftp_proxy(server, port, user=None, password=None, network_service="Ether
The password to use if required by the server The password to use if required by the server
network_service network_service
The network service to apply the changes to, this only necessary on OSX The network service to apply the changes to, this only necessary on
macOS
bypass_hosts bypass_hosts
The hosts that are allowed to by pass the proxy. Only used on Windows for other OS's use The hosts that are allowed to by pass the proxy. Only used on Windows for other OS's use
@ -292,7 +298,8 @@ def get_proxy_bypass(network_service="Ethernet"):
Returns the current domains that can bypass the proxy Returns the current domains that can bypass the proxy
network_service network_service
The network service to get the bypass domains from, this is only necessary on OSX The network service to get the bypass domains from, this is only
necessary on macOS
CLI Example: CLI Example:
@ -322,7 +329,8 @@ def set_proxy_bypass(domains, network_service="Ethernet"):
An array of domains allowed to bypass the proxy An array of domains allowed to bypass the proxy
network_service network_service
The network service to apply the changes to, this only necessary on OSX The network service to apply the changes to, this only necessary on
macOS
CLI Example: CLI Example:

View file

@ -1,6 +1,6 @@
# -*- coding: utf-8 -*- # -*- coding: utf-8 -*-
''' '''
Manage ruby installations with rbenv. rbenv is supported on Linux and Mac OS X. Manage ruby installations with rbenv. rbenv is supported on Linux and macOS.
rbenv doesn't work on Windows (and isn't really necessary on Windows as there is rbenv doesn't work on Windows (and isn't really necessary on Windows as there is
no system Ruby on Windows). On Windows, the RubyInstaller and/or Pik are both no system Ruby on Windows). On Windows, the RubyInstaller and/or Pik are both
good alternatives to work with multiple versions of Ruby on the same box. good alternatives to work with multiple versions of Ruby on the same box.

View file

@ -2,7 +2,7 @@
''' '''
System Profiler Module System Profiler Module
Interface with Mac OSX's command-line System Profiler utility to get Interface with macOS's command-line System Profiler utility to get
information about package receipts and installed applications. information about package receipts and installed applications.
.. versionadded:: 2015.5.0 .. versionadded:: 2015.5.0

View file

@ -33,7 +33,7 @@ def __virtual__():
if salt.utils.is_darwin(): if salt.utils.is_darwin():
return (False, 'The timezone execution module failed to load: ' return (False, 'The timezone execution module failed to load: '
'mac_timezone.py should replace this module on OS X.' 'mac_timezone.py should replace this module on macOS.'
'There was a problem loading mac_timezone.py.') 'There was a problem loading mac_timezone.py.')
return __virtualname__ return __virtualname__

View file

@ -27,6 +27,7 @@ import hashlib # do not remove, used in imported file.py functions
import errno # do not remove, used in imported file.py functions import errno # do not remove, used in imported file.py functions
import shutil # do not remove, used in imported file.py functions import shutil # do not remove, used in imported file.py functions
import re # do not remove, used in imported file.py functions import re # do not remove, used in imported file.py functions
import string # do not remove, used in imported file.py functions
import sys # do not remove, used in imported file.py functions import sys # do not remove, used in imported file.py functions
import fileinput # do not remove, used in imported file.py functions import fileinput # do not remove, used in imported file.py functions
import fnmatch # do not remove, used in imported file.py functions import fnmatch # do not remove, used in imported file.py functions

View file

@ -92,9 +92,11 @@ def __virtual__():
Only works on Windows systems with PyWin32 installed Only works on Windows systems with PyWin32 installed
''' '''
if not salt.utils.is_windows(): if not salt.utils.is_windows():
return (False, 'Module win_service: module only works on Windows.') return False, 'Module win_service: module only works on Windows.'
if not HAS_WIN32_MODS: if not HAS_WIN32_MODS:
return (False, 'Module win_service: failed to load win32 modules') return False, 'Module win_service: failed to load win32 modules'
return __virtualname__ return __virtualname__
@ -654,13 +656,15 @@ def modify(name,
''' '''
# https://msdn.microsoft.com/en-us/library/windows/desktop/ms681987(v=vs.85).aspx # https://msdn.microsoft.com/en-us/library/windows/desktop/ms681987(v=vs.85).aspx
# https://msdn.microsoft.com/en-us/library/windows/desktop/ms681988(v-vs.85).aspx # https://msdn.microsoft.com/en-us/library/windows/desktop/ms681988(v-vs.85).aspx
handle_scm = win32service.OpenSCManager( handle_scm = win32service.OpenSCManager(
None, None, win32service.SC_MANAGER_CONNECT) None, None, win32service.SC_MANAGER_CONNECT)
try: try:
handle_svc = win32service.OpenService( handle_svc = win32service.OpenService(
handle_scm, name, win32service.SERVICE_ALL_ACCESS) handle_scm,
name,
win32service.SERVICE_CHANGE_CONFIG |
win32service.SERVICE_QUERY_CONFIG)
except pywintypes.error as exc: except pywintypes.error as exc:
raise CommandExecutionError( raise CommandExecutionError(
'Failed To Open {0}: {1}'.format(name, exc[2])) 'Failed To Open {0}: {1}'.format(name, exc[2]))

View file

@ -105,7 +105,9 @@ are jinja2 templates which must render as a simple ordered list of ``yaml``
files that will then be merged to build pillar data. files that will then be merged to build pillar data.
The path of these ``yaml`` files must be relative to the directory of the The path of these ``yaml`` files must be relative to the directory of the
PillarStack config file. PillarStack config file. These paths support unix style pathname pattern
expansion through the
`Python glob module <https://docs.python.org/2/library/glob.html>`.
The following variables are available in jinja2 templating of PillarStack The following variables are available in jinja2 templating of PillarStack
configuration files: configuration files:
@ -128,6 +130,7 @@ For example, you could have a PillarStack config file which looks like:
$ cat /path/to/stack/config.cfg $ cat /path/to/stack/config.cfg
core.yml core.yml
common/*.yml
osarchs/{{ __grains__['osarch'] }}.yml osarchs/{{ __grains__['osarch'] }}.yml
oscodenames/{{ __grains__['oscodename'] }}.yml oscodenames/{{ __grains__['oscodename'] }}.yml
{%- for role in pillar.get('roles', []) %} {%- for role in pillar.get('roles', []) %}
@ -143,6 +146,9 @@ And the whole directory structure could look like:
/path/to/stack/ /path/to/stack/
config.cfg config.cfg
core.yml core.yml
common/
   xxx.yml
   yyy.yml
osarchs/ osarchs/
   amd64.yml    amd64.yml
   armhf.yml    armhf.yml
@ -164,6 +170,8 @@ amd64 platform running Debian Jessie, and which pillar ``roles`` is ``["db"]``,
the following ``yaml`` files would be merged in order: the following ``yaml`` files would be merged in order:
- ``core.yml`` - ``core.yml``
- ``common/xxx.yml``
- ``common/yyy.yml``
- ``osarchs/amd64.yml`` - ``osarchs/amd64.yml``
- ``oscodenames/jessie.yml`` - ``oscodenames/jessie.yml``
- ``roles/db.yml`` - ``roles/db.yml``
@ -371,11 +379,14 @@ from __future__ import absolute_import
import os import os
import logging import logging
from functools import partial from functools import partial
from glob import glob
import yaml import yaml
from jinja2 import FileSystemLoader, Environment, TemplateNotFound from jinja2 import FileSystemLoader, Environment
# Import Salt libs # Import Salt libs
import salt.ext.six as six import salt.ext.six as six
import salt.utils
log = logging.getLogger(__name__) log = logging.getLogger(__name__)
@ -383,7 +394,6 @@ strategies = ('overwrite', 'merge-first', 'merge-last', 'remove')
def ext_pillar(minion_id, pillar, *args, **kwargs): def ext_pillar(minion_id, pillar, *args, **kwargs):
import salt.utils
stack = {} stack = {}
stack_config_files = list(args) stack_config_files = list(args)
traverse = { traverse = {
@ -417,28 +427,30 @@ def _process_stack_cfg(cfg, stack, minion_id, pillar):
"__opts__": __opts__, "__opts__": __opts__,
"__salt__": __salt__, "__salt__": __salt__,
"__grains__": __grains__, "__grains__": __grains__,
"__stack__": {
'traverse': salt.utils.traverse_dict_and_list
},
"minion_id": minion_id, "minion_id": minion_id,
"pillar": pillar, "pillar": pillar,
}) })
for path in _parse_stack_cfg(jenv.get_template(filename).render(stack=stack)): for item in _parse_stack_cfg(
try: jenv.get_template(filename).render(stack=stack)):
if not item.strip():
continue # silently ignore whitespace or empty lines
paths = glob(os.path.join(basedir, item))
if not paths:
log.warning('Ignoring pillar stack template "{0}": can\'t find from '
'root dir "{1}"'.format(item, basedir))
continue
for path in sorted(paths):
log.debug('YAML: basedir={0}, path={1}'.format(basedir, path)) log.debug('YAML: basedir={0}, path={1}'.format(basedir, path))
obj = yaml.safe_load(jenv.get_template(path).render(stack=stack)) obj = yaml.safe_load(jenv.get_template(
os.path.relpath(path, basedir)).render(stack=stack))
if not isinstance(obj, dict): if not isinstance(obj, dict):
log.info('Ignoring pillar stack template "{0}": Can\'t parse ' log.info('Ignoring pillar stack template "{0}": Can\'t parse '
'as a valid yaml dictionary'.format(path)) 'as a valid yaml dictionary'.format(path))
continue continue
stack = _merge_dict(stack, obj) stack = _merge_dict(stack, obj)
except TemplateNotFound as e:
if hasattr(e, 'name') and e.name != path:
log.info('Jinja include file "{0}" not found '
'from root dir "{1}", which was included '
'by stack template "{2}"'.format(
e.name, basedir, path))
else:
log.info('Ignoring pillar stack template "{0}": can\'t find from '
'root dir "{1}"'.format(path, basedir))
continue
return stack return stack

View file

@ -81,6 +81,8 @@ try:
except ImportError: except ImportError:
HAS_NAPALM = False HAS_NAPALM = False
from salt.ext import six as six
# ---------------------------------------------------------------------------------------------------------------------- # ----------------------------------------------------------------------------------------------------------------------
# proxy properties # proxy properties
# ---------------------------------------------------------------------------------------------------------------------- # ----------------------------------------------------------------------------------------------------------------------
@ -281,6 +283,14 @@ def call(method, **params):
if not NETWORK_DEVICE.get('UP', False): if not NETWORK_DEVICE.get('UP', False):
raise Exception('not connected') raise Exception('not connected')
# if connected will try to execute desired command # if connected will try to execute desired command
# but lets clean the kwargs first
params_copy = {}
params_copy.update(params)
for karg, warg in six.iteritems(params_copy):
# will remove None values
# thus the NAPALM methods will be called with their defaults
if warg is None:
params.pop(karg)
out = getattr(NETWORK_DEVICE.get('DRIVER'), method)(**params) # calls the method with the specified parameters out = getattr(NETWORK_DEVICE.get('DRIVER'), method)(**params) # calls the method with the specified parameters
result = True result = True
except Exception as error: except Exception as error:

View file

@ -203,7 +203,7 @@ def event(tagmatch='*',
# Watch the event bus forever in a shell while-loop. # Watch the event bus forever in a shell while-loop.
salt-run state.event | while read -r tag data; do salt-run state.event | while read -r tag data; do
echo $tag echo $tag
echo $data | jq -colour-output . echo $data | jq --color-output .
done done
.. seealso:: .. seealso::

View file

@ -72,16 +72,26 @@ def task_present(name,
with salt.utils.fopen(script_path, 'r') as file: with salt.utils.fopen(script_path, 'r') as file:
new_script = file.read().replace('\t', ' ') new_script = file.read().replace('\t', ' ')
if old_script == new_script: is_up_to_date = task and (
old_script == new_script and
task_type == task['type'] and
task['dbrps'] == [{'db': database, 'rp': retention_policy}]
)
if is_up_to_date:
comments.append('Task script is already up-to-date') comments.append('Task script is already up-to-date')
else: else:
if __opts__['test']: if __opts__['test']:
ret['result'] = None ret['result'] = None
comments.append('Task would have been updated') comments.append('Task would have been updated')
else: else:
result = __salt__['kapacitor.define_task'](name, script_path, result = __salt__['kapacitor.define_task'](
task_type=task_type, database=database, name,
retention_policy=retention_policy) script_path,
task_type=task_type,
database=database,
retention_policy=retention_policy
)
ret['result'] = result['success'] ret['result'] = result['success']
if not ret['result']: if not ret['result']:
comments.append('Could not define task') comments.append('Could not define task')
@ -89,12 +99,25 @@ def task_present(name,
comments.append(result['stderr']) comments.append(result['stderr'])
ret['comment'] = '\n'.join(comments) ret['comment'] = '\n'.join(comments)
return ret return ret
ret['changes']['TICKscript diff'] = '\n'.join(difflib.unified_diff(
old_script.splitlines(), if old_script != new_script:
new_script.splitlines(), ret['changes']['TICKscript diff'] = '\n'.join(difflib.unified_diff(
lineterm='' old_script.splitlines(),
)) new_script.splitlines(),
comments.append('Task script updated') ))
comments.append('Task script updated')
if not task or task['type'] != task_type:
ret['changes']['type'] = task_type
comments.append('Task type updated')
if not task or task['dbrps'][0]['db'] != database:
ret['changes']['db'] = database
comments.append('Task database updated')
if not task or task['dbrps'][0]['rp'] != retention_policy:
ret['changes']['rp'] = retention_policy
comments.append('Task retention policy updated')
if enable: if enable:
if task and task['enabled']: if task and task['enabled']:

View file

@ -1,9 +1,9 @@
# -*- coding: utf-8 -*- # -*- coding: utf-8 -*-
''' '''
Allows you to manage assistive access on OS X minions with 10.9+ Allows you to manage assistive access on macOS minions with 10.9+
================================================================ =================================================================
Install, enable and disable assitive access on OS X minions Install, enable and disable assistive access on macOS minions
.. code-block:: yaml .. code-block:: yaml

View file

@ -1,6 +1,6 @@
# -*- coding: utf-8 -*- # -*- coding: utf-8 -*-
''' '''
Writing/reading defaults from an OS X minion Writing/reading defaults from a macOS minion
============================================ ============================================
''' '''

View file

@ -3,7 +3,7 @@
Installing of certificates to the keychain Installing of certificates to the keychain
========================================== ==========================================
Install certificats to the OS X keychain Install certificats to the macOS keychain
.. code-block:: yaml .. code-block:: yaml
@ -35,7 +35,7 @@ def __virtual__():
def installed(name, password, keychain="/Library/Keychains/System.keychain", **kwargs): def installed(name, password, keychain="/Library/Keychains/System.keychain", **kwargs):
''' '''
Install a p12 certificate file into the OS X keychain Install a p12 certificate file into the macOS keychain
name name
The certificate to install The certificate to install
@ -100,7 +100,7 @@ def installed(name, password, keychain="/Library/Keychains/System.keychain", **k
def uninstalled(name, password, keychain="/Library/Keychains/System.keychain", keychain_password=None): def uninstalled(name, password, keychain="/Library/Keychains/System.keychain", keychain_password=None):
''' '''
Uninstall a p12 certificate file from the OS X keychain Uninstall a p12 certificate file from the macOS keychain
name name
The certificate to uninstall, this can be a path for a .p12 or the friendly The certificate to uninstall, this can be a path for a .p12 or the friendly

View file

@ -1,9 +1,9 @@
# -*- coding: utf-8 -*- # -*- coding: utf-8 -*-
''' '''
Installing of mac pkg files Installing of mac pkg files
======================= ===========================
Install any kind of pkg, dmg or app file on Mac OS X: Install any kind of pkg, dmg or app file on macOS:
.. code-block:: yaml .. code-block:: yaml

View file

@ -3,7 +3,7 @@
Allows you to manage extended attributes on files or directories Allows you to manage extended attributes on files or directories
================================================================ ================================================================
Install, enable and disable assitive access on OS X minions Install, enable and disable assistive access on macOS minions
.. code-block:: yaml .. code-block:: yaml

View file

@ -59,7 +59,8 @@ def managed(name, port, services=None, user=None, password=None, bypass_domains=
An array of the domains that should bypass the proxy An array of the domains that should bypass the proxy
network_service network_service
The network service to apply the changes to, this only necessary on OSX The network service to apply the changes to, this only necessary on
macOS
''' '''
ret = {'name': name, ret = {'name': name,
'result': True, 'result': True,

View file

@ -1662,7 +1662,7 @@ def is_linux():
@real_memoize @real_memoize
def is_darwin(): def is_darwin():
''' '''
Simple function to return if a host is Darwin (OS X) or not Simple function to return if a host is Darwin (macOS) or not
''' '''
return sys.platform.startswith('darwin') return sys.platform.startswith('darwin')

View file

@ -6,9 +6,6 @@ missing functions in other modules
from __future__ import absolute_import from __future__ import absolute_import
from salt.exceptions import CommandExecutionError from salt.exceptions import CommandExecutionError
# Import Salt Libs
import salt.utils
# Import 3rd Party Libs # Import 3rd Party Libs
try: try:
import psutil import psutil
@ -21,12 +18,12 @@ except ImportError:
HAS_WIN32 = False HAS_WIN32 = False
# Although utils are often directly imported, it is also possible to use the
# loader.
def __virtual__(): def __virtual__():
''' '''
Load only on Windows with necessary modules Only load if Win32 Libraries are installed
''' '''
if not salt.utils.is_windows():
return False, 'This utility only works on Windows'
if not HAS_WIN32: if not HAS_WIN32:
return False, 'This utility requires pywin32' return False, 'This utility requires pywin32'

View file

@ -1,14 +1,32 @@
# -*- coding: utf-8 -*- # -*- coding: utf-8 -*-
''' '''
Get Versioning information from Windows Get Version information from Windows
''' '''
# http://stackoverflow.com/questions/32300004/python-ctypes-getting-0-with-getversionex-function # http://stackoverflow.com/questions/32300004/python-ctypes-getting-0-with-getversionex-function
from __future__ import absolute_import from __future__ import absolute_import
# Import Third Party Libs
import ctypes import ctypes
from ctypes.wintypes import BYTE, WORD, DWORD, WCHAR try:
from ctypes.wintypes import BYTE, WORD, DWORD, WCHAR
HAS_WIN32 = True
except (ImportError, ValueError):
HAS_WIN32 = False
kernel32 = ctypes.WinDLL('kernel32', use_last_error=True) if HAS_WIN32:
kernel32 = ctypes.WinDLL('kernel32', use_last_error=True)
# Although utils are often directly imported, it is also possible to use the
# loader.
def __virtual__():
'''
Only load if Win32 Libraries are installed
'''
if not HAS_WIN32:
return False, 'This utility requires pywin32'
return 'win_osinfo'
class OSVERSIONINFO(ctypes.Structure): class OSVERSIONINFO(ctypes.Structure):
@ -38,8 +56,9 @@ def errcheck_bool(result, func, args):
raise ctypes.WinError(ctypes.get_last_error()) raise ctypes.WinError(ctypes.get_last_error())
return args return args
kernel32.GetVersionExW.errcheck = errcheck_bool if HAS_WIN32:
kernel32.GetVersionExW.argtypes = (ctypes.POINTER(OSVERSIONINFO),) kernel32.GetVersionExW.errcheck = errcheck_bool
kernel32.GetVersionExW.argtypes = (ctypes.POINTER(OSVERSIONINFO),)
def get_os_version_info(): def get_os_version_info():

View file

@ -27,20 +27,20 @@ try:
except ImportError: except ImportError:
HAS_WIN32 = False HAS_WIN32 = False
# Import Salt Libs
import salt.utils
# Set up logging # Set up logging
log = logging.getLogger(__name__) log = logging.getLogger(__name__)
# Although utils are often directly imported, it is also possible to use the
# loader.
def __virtual__(): def __virtual__():
''' '''
Load only on Windows Only load if Win32 Libraries are installed
''' '''
if salt.utils.is_windows() and HAS_WIN32: if not HAS_WIN32:
return 'win_runas' return False, 'This utility requires pywin32'
return False
return 'win_runas'
if HAS_WIN32: if HAS_WIN32:

View file

@ -8,10 +8,26 @@ from os.path import splitext, abspath
from sys import modules from sys import modules
# Import third party libs # Import third party libs
import win32serviceutil try:
import win32service import win32serviceutil
import win32event import win32service
import win32api import win32event
import win32api
HAS_WIN32 = True
except ImportError:
HAS_WIN32 = False
# Although utils are often directly imported, it is also possible to use the
# loader.
def __virtual__():
'''
Only load if Win32 Libraries are installed
'''
if not HAS_WIN32:
return False, 'This utility requires pywin32'
return 'winservice'
class Service(win32serviceutil.ServiceFramework): class Service(win32serviceutil.ServiceFramework):

View file

@ -121,7 +121,7 @@ except ImportError:
try: try:
cmdline = process.cmdline() cmdline = process.cmdline()
except psutil.AccessDenied: except psutil.AccessDenied:
# OSX denies us access to the above information # macOS denies us access to the above information
cmdline = None cmdline = None
if not cmdline: if not cmdline:
try: try:
@ -597,7 +597,7 @@ class SaltDaemonScriptBase(SaltScriptBase, ShellTestCase):
if exc.errno != errno.ENOTCONN: if exc.errno != errno.ENOTCONN:
raise raise
except AttributeError: except AttributeError:
# This is not OSX !? # This is not macOS !?
pass pass
del sock del sock
elif isinstance(port, str): elif isinstance(port, str):

View file

@ -84,7 +84,7 @@ class PyTestEngine(object):
if exc.errno != errno.ENOTCONN: if exc.errno != errno.ENOTCONN:
raise raise
except AttributeError: except AttributeError:
# This is not OSX !? # This is not macOS !?
pass pass
@gen.coroutine @gen.coroutine

View file

@ -30,7 +30,7 @@ DEL_PKG = 'acme'
@destructiveTest @destructiveTest
@skipIf(not salt.utils.is_darwin(), 'Test only applies to OS X') @skipIf(not salt.utils.is_darwin(), 'Test only applies to macOS')
@skipIf(os.geteuid() != 0, 'You must be logged in as root to run this test') @skipIf(os.geteuid() != 0, 'You must be logged in as root to run this test')
@skipIf(not salt.utils.which('brew'), 'This test requires the brew binary') @skipIf(not salt.utils.which('brew'), 'This test requires the brew binary')
class BrewModuleTest(integration.ModuleCase): class BrewModuleTest(integration.ModuleCase):

View file

@ -30,7 +30,7 @@ class MacPkgutilModuleTest(integration.ModuleCase):
Get current settings Get current settings
''' '''
if not salt.utils.is_darwin(): if not salt.utils.is_darwin():
self.skipTest('Test only available on Mac OS X') self.skipTest('Test only available on macOS')
if not salt.utils.which('pkgutil'): if not salt.utils.which('pkgutil'):
self.skipTest('Test requires pkgutil binary') self.skipTest('Test requires pkgutil binary')

View file

@ -26,7 +26,7 @@ class MacPortsModuleTest(integration.ModuleCase):
Get current settings Get current settings
''' '''
if not salt.utils.is_darwin(): if not salt.utils.is_darwin():
self.skipTest('Test only available on Mac OS X') self.skipTest('Test only available on macOS')
if not salt.utils.which('port'): if not salt.utils.which('port'):
self.skipTest('Test requires port binary') self.skipTest('Test requires port binary')

View file

@ -16,7 +16,7 @@ import integration
import salt.utils import salt.utils
@skipIf(not salt.utils.is_darwin(), 'Test only available on Mac OS X') @skipIf(not salt.utils.is_darwin(), 'Test only available on macOS')
@skipIf(not salt.utils.which('launchctl'), 'Test requires launchctl binary') @skipIf(not salt.utils.which('launchctl'), 'Test requires launchctl binary')
@skipIf(not salt.utils.which('plutil'), 'Test requires plutil binary') @skipIf(not salt.utils.which('plutil'), 'Test requires plutil binary')
@skipIf(salt.utils.get_uid(salt.utils.get_user()) != 0, @skipIf(salt.utils.get_uid(salt.utils.get_user()) != 0,

View file

@ -43,7 +43,7 @@ class MacShadowModuleTest(integration.ModuleCase):
Get current settings Get current settings
''' '''
if not salt.utils.is_darwin(): if not salt.utils.is_darwin():
self.skipTest('Test only available on Mac OS X') self.skipTest('Test only available on macOS')
if not salt.utils.which('dscl'): if not salt.utils.which('dscl'):
self.skipTest('Test requires dscl binary') self.skipTest('Test requires dscl binary')

View file

@ -28,7 +28,7 @@ class MacSoftwareUpdateModuleTest(integration.ModuleCase):
Get current settings Get current settings
''' '''
if not salt.utils.is_darwin(): if not salt.utils.is_darwin():
self.skipTest('Test only available on Mac OS X') self.skipTest('Test only available on macOS')
if not salt.utils.which('softwareupdate'): if not salt.utils.which('softwareupdate'):
self.skipTest('Test requires softwareupdate binary') self.skipTest('Test requires softwareupdate binary')

View file

@ -39,7 +39,7 @@ class MacTimezoneModuleTest(integration.ModuleCase):
Get current settings Get current settings
''' '''
if not salt.utils.is_darwin(): if not salt.utils.is_darwin():
self.skipTest('Test only available on Mac OS X') self.skipTest('Test only available on macOS')
if not salt.utils.which('systemsetup'): if not salt.utils.which('systemsetup'):
self.skipTest('Test requires systemsetup binary') self.skipTest('Test requires systemsetup binary')

View file

@ -29,7 +29,7 @@ class MacXattrModuleTest(integration.ModuleCase):
Create test file for testing extended attributes Create test file for testing extended attributes
''' '''
if not salt.utils.is_darwin(): if not salt.utils.is_darwin():
self.skipTest('Test only available on Mac OS X') self.skipTest('Test only available on macOS')
if not salt.utils.which('xattr'): if not salt.utils.which('xattr'):
self.skipTest('Test requires xattr binary') self.skipTest('Test requires xattr binary')

View file

@ -46,7 +46,7 @@ class SysctlModuleTest(integration.ModuleCase):
ret.get('kern.ostype'), 'OpenBSD', 'Incorrect kern.ostype' ret.get('kern.ostype'), 'OpenBSD', 'Incorrect kern.ostype'
) )
@skipIf(not sys.platform.startswith('darwin'), 'Darwin (OS X) specific') @skipIf(not sys.platform.startswith('darwin'), 'Darwin (macOS) specific')
def test_show_darwin(self): def test_show_darwin(self):
ret = self.run_function('sysctl.show') ret = self.run_function('sysctl.show')
self.assertIn('kern.ostype', ret, 'kern.ostype absent') self.assertIn('kern.ostype', ret, 'kern.ostype absent')

View file

@ -23,7 +23,7 @@ class KeychainTestCase(TestCase):
def test_install_cert(self): def test_install_cert(self):
''' '''
Test installing a certificate into the OSX keychain Test installing a certificate into the macOS keychain
''' '''
mock = MagicMock() mock = MagicMock()
with patch.dict(keychain.__salt__, {'cmd.run': mock}): with patch.dict(keychain.__salt__, {'cmd.run': mock}):
@ -34,7 +34,7 @@ class KeychainTestCase(TestCase):
@patch('salt.modules.mac_keychain.unlock_keychain') @patch('salt.modules.mac_keychain.unlock_keychain')
def test_install_cert_extras(self, unlock_mock): def test_install_cert_extras(self, unlock_mock):
''' '''
Test installing a certificate into the OSX keychain with extras Test installing a certificate into the macOS keychain with extras
''' '''
mock = MagicMock() mock = MagicMock()
with patch.dict(keychain.__salt__, {'cmd.run': mock}): with patch.dict(keychain.__salt__, {'cmd.run': mock}):
@ -45,7 +45,7 @@ class KeychainTestCase(TestCase):
def test_uninstall_cert(self): def test_uninstall_cert(self):
''' '''
Test uninstalling a certificate from the OSX keychain Test uninstalling a certificate from the macOS keychain
''' '''
mock = MagicMock() mock = MagicMock()
with patch.dict(keychain.__salt__, {'cmd.run': mock}): with patch.dict(keychain.__salt__, {'cmd.run': mock}):

View file

@ -29,10 +29,10 @@ class ProxyTestCase(TestCase):
Test cases for salt.modules.proxy Test cases for salt.modules.proxy
''' '''
def test_get_http_proxy_osx(self): def test_get_http_proxy_macos(self):
''' '''
Test to make sure that we correctly get the current proxy info Test to make sure that we correctly get the current proxy info
on OSX on macOS
''' '''
proxy.__grains__['os'] = 'Darwin' proxy.__grains__['os'] = 'Darwin'
mock = MagicMock(return_value='Enabled: Yes\nServer: 192.168.0.1\nPort: 3128\nAuthenticated Proxy Enabled: 0') mock = MagicMock(return_value='Enabled: Yes\nServer: 192.168.0.1\nPort: 3128\nAuthenticated Proxy Enabled: 0')
@ -47,10 +47,10 @@ class ProxyTestCase(TestCase):
mock.assert_called_once_with('networksetup -getwebproxy Ethernet') mock.assert_called_once_with('networksetup -getwebproxy Ethernet')
self.assertEqual(expected, out) self.assertEqual(expected, out)
def test_get_https_proxy_osx(self): def test_get_https_proxy_macos(self):
''' '''
Test to make sure that we correctly get the current proxy info Test to make sure that we correctly get the current proxy info
on OSX on macOS
''' '''
proxy.__grains__['os'] = 'Darwin' proxy.__grains__['os'] = 'Darwin'
mock = MagicMock(return_value='Enabled: Yes\nServer: 192.168.0.1\nPort: 3128\nAuthenticated Proxy Enabled: 0') mock = MagicMock(return_value='Enabled: Yes\nServer: 192.168.0.1\nPort: 3128\nAuthenticated Proxy Enabled: 0')
@ -65,10 +65,10 @@ class ProxyTestCase(TestCase):
mock.assert_called_once_with('networksetup -getsecurewebproxy Ethernet') mock.assert_called_once_with('networksetup -getsecurewebproxy Ethernet')
self.assertEqual(expected, out) self.assertEqual(expected, out)
def test_get_ftp_proxy_osx(self): def test_get_ftp_proxy_macos(self):
''' '''
Test to make sure that we correctly get the current proxy info Test to make sure that we correctly get the current proxy info
on OSX on macOS
''' '''
proxy.__grains__['os'] = 'Darwin' proxy.__grains__['os'] = 'Darwin'
mock = MagicMock(return_value='Enabled: Yes\nServer: 192.168.0.1\nPort: 3128\nAuthenticated Proxy Enabled: 0') mock = MagicMock(return_value='Enabled: Yes\nServer: 192.168.0.1\nPort: 3128\nAuthenticated Proxy Enabled: 0')
@ -83,7 +83,7 @@ class ProxyTestCase(TestCase):
mock.assert_called_once_with('networksetup -getftpproxy Ethernet') mock.assert_called_once_with('networksetup -getftpproxy Ethernet')
self.assertEqual(expected, out) self.assertEqual(expected, out)
def test_get_http_proxy_osx_none(self): def test_get_http_proxy_macos_none(self):
''' '''
Test to make sure that we correctly return when theres no proxy set Test to make sure that we correctly return when theres no proxy set
''' '''
@ -95,10 +95,10 @@ class ProxyTestCase(TestCase):
mock.assert_called_once_with('networksetup -getwebproxy Ethernet') mock.assert_called_once_with('networksetup -getwebproxy Ethernet')
self.assertEqual({}, out) self.assertEqual({}, out)
def test_set_http_proxy_osx(self): def test_set_http_proxy_macos(self):
''' '''
Test to make sure that we correctly set the proxy info Test to make sure that we correctly set the proxy info
on OSX on macOS
''' '''
proxy.__grains__['os'] = 'Darwin' proxy.__grains__['os'] = 'Darwin'
mock = MagicMock() mock = MagicMock()
@ -108,10 +108,10 @@ class ProxyTestCase(TestCase):
mock.assert_called_once_with('networksetup -setwebproxy Ethernet 192.168.0.1 3128 On frank badpassw0rd') mock.assert_called_once_with('networksetup -setwebproxy Ethernet 192.168.0.1 3128 On frank badpassw0rd')
self.assertTrue(out) self.assertTrue(out)
def test_set_https_proxy_osx(self): def test_set_https_proxy_macos(self):
''' '''
Test to make sure that we correctly set the proxy info Test to make sure that we correctly set the proxy info
on OSX on macOS
''' '''
proxy.__grains__['os'] = 'Darwin' proxy.__grains__['os'] = 'Darwin'
mock = MagicMock() mock = MagicMock()
@ -121,10 +121,10 @@ class ProxyTestCase(TestCase):
mock.assert_called_once_with('networksetup -setsecurewebproxy Ethernet 192.168.0.1 3128 On frank passw0rd') mock.assert_called_once_with('networksetup -setsecurewebproxy Ethernet 192.168.0.1 3128 On frank passw0rd')
self.assertTrue(out) self.assertTrue(out)
def test_set_ftp_proxy_osx(self): def test_set_ftp_proxy_macos(self):
''' '''
Test to make sure that we correctly set the proxy info Test to make sure that we correctly set the proxy info
on OSX on macOS
''' '''
proxy.__grains__['os'] = 'Darwin' proxy.__grains__['os'] = 'Darwin'
mock = MagicMock() mock = MagicMock()
@ -197,7 +197,7 @@ class ProxyTestCase(TestCase):
'ProxyServer') 'ProxyServer')
self.assertEqual(expected, out) self.assertEqual(expected, out)
def test_get_all_proxies_osx_fails(self): def test_get_all_proxies_macos_fails(self):
proxy.__grains__['os'] = 'Darwin' proxy.__grains__['os'] = 'Darwin'
mock = MagicMock() mock = MagicMock()
with patch.dict(proxy.__salt__, {'reg.read_value': mock}): with patch.dict(proxy.__salt__, {'reg.read_value': mock}):

View file

@ -25,7 +25,7 @@ def _present(name='testname',
define_result=True, define_result=True,
enable_result=True, enable_result=True,
disable_result=True, disable_result=True,
script='test'): script='testscript'):
''' '''
Run a "kapacitor.present" state after setting up mocks, and return the Run a "kapacitor.present" state after setting up mocks, and return the
state return value as well as the mocks to make assertions. state return value as well as the mocks to make assertions.
@ -57,6 +57,15 @@ def _present(name='testname',
return retval, get_mock, define_mock, enable_mock, disable_mock return retval, get_mock, define_mock, enable_mock, disable_mock
def _task(script='testscript', enabled=True, task_type='stream', db='testdb', rp='default'):
return {
'script': script,
'enabled': enabled,
'type': task_type,
'dbrps': [{'db': db, 'rp': rp}],
}
class KapacitorTestCase(TestCase): class KapacitorTestCase(TestCase):
def test_task_present_new_task(self): def test_task_present_new_task(self):
ret, get_mock, define_mock, enable_mock, _ = _present() ret, get_mock, define_mock, enable_mock, _ = _present()
@ -68,9 +77,8 @@ class KapacitorTestCase(TestCase):
self.assertIn('enabled', ret['changes']) self.assertIn('enabled', ret['changes'])
self.assertEqual(True, ret['changes']['enabled']['new']) self.assertEqual(True, ret['changes']['enabled']['new'])
def test_task_present_existing_task(self): def test_task_present_existing_task_updated_script(self):
old_task = {'script': 'old_task', 'enabled': True} ret, get_mock, define_mock, enable_mock, _ = _present(task=_task(script='oldscript'))
ret, get_mock, define_mock, enable_mock, _ = _present(task=old_task)
get_mock.assert_called_once_with('testname') get_mock.assert_called_once_with('testname')
define_mock.assert_called_once_with('testname', '/tmp/script.tick', define_mock.assert_called_once_with('testname', '/tmp/script.tick',
database='testdb', retention_policy='default', task_type='stream') database='testdb', retention_policy='default', task_type='stream')
@ -79,8 +87,7 @@ class KapacitorTestCase(TestCase):
self.assertNotIn('enabled', ret['changes']) self.assertNotIn('enabled', ret['changes'])
def test_task_present_existing_task_not_enabled(self): def test_task_present_existing_task_not_enabled(self):
old_task = {'script': 'test', 'enabled': False} ret, get_mock, define_mock, enable_mock, _ = _present(task=_task(enabled=False))
ret, get_mock, define_mock, enable_mock, _ = _present(task=old_task)
get_mock.assert_called_once_with('testname') get_mock.assert_called_once_with('testname')
self.assertEqual(False, define_mock.called) self.assertEqual(False, define_mock.called)
enable_mock.assert_called_once_with('testname') enable_mock.assert_called_once_with('testname')
@ -89,8 +96,7 @@ class KapacitorTestCase(TestCase):
self.assertEqual(True, ret['changes']['enabled']['new']) self.assertEqual(True, ret['changes']['enabled']['new'])
def test_task_present_disable_existing_task(self): def test_task_present_disable_existing_task(self):
old_task = {'script': 'test', 'enabled': True} ret, get_mock, define_mock, _, disable_mock = _present(task=_task(), enable=False)
ret, get_mock, define_mock, _, disable_mock = _present(task=old_task, enable=False)
get_mock.assert_called_once_with('testname') get_mock.assert_called_once_with('testname')
self.assertEqual(False, define_mock.called) self.assertEqual(False, define_mock.called)
disable_mock.assert_called_once_with('testname') disable_mock.assert_called_once_with('testname')

View file

@ -24,7 +24,7 @@ class KeychainTestCase(TestCase):
def test_install_cert(self): def test_install_cert(self):
''' '''
Test installing a certificate into the OSX keychain Test installing a certificate into the macOS keychain
''' '''
expected = { expected = {
'changes': {'installed': 'Friendly Name'}, 'changes': {'installed': 'Friendly Name'},
@ -47,7 +47,8 @@ class KeychainTestCase(TestCase):
def test_installed_cert(self): def test_installed_cert(self):
''' '''
Test installing a certificate into the OSX keychain when it's already installed Test installing a certificate into the macOS keychain when it's
already installed
''' '''
expected = { expected = {
'changes': {}, 'changes': {},
@ -72,7 +73,8 @@ class KeychainTestCase(TestCase):
def test_uninstall_cert(self): def test_uninstall_cert(self):
''' '''
Test uninstalling a certificate into the OSX keychain when it's already installed Test uninstalling a certificate into the macOS keychain when it's
already installed
''' '''
expected = { expected = {
'changes': {'uninstalled': 'Friendly Name'}, 'changes': {'uninstalled': 'Friendly Name'},
@ -95,7 +97,8 @@ class KeychainTestCase(TestCase):
def test_uninstalled_cert(self): def test_uninstalled_cert(self):
''' '''
Test uninstalling a certificate into the OSX keychain when it's not installed Test uninstalling a certificate into the macOS keychain when it's
not installed
''' '''
expected = { expected = {
'changes': {}, 'changes': {},
@ -178,7 +181,8 @@ class KeychainTestCase(TestCase):
def test_install_cert_salt_fileserver(self): def test_install_cert_salt_fileserver(self):
''' '''
Test installing a certificate into the OSX keychain from the salt fileserver Test installing a certificate into the macOS keychain from the salt
fileserver
''' '''
expected = { expected = {
'changes': {'installed': 'Friendly Name'}, 'changes': {'installed': 'Friendly Name'},
@ -203,8 +207,8 @@ class KeychainTestCase(TestCase):
def test_installed_cert_hash_different(self): def test_installed_cert_hash_different(self):
''' '''
Test installing a certificate into the OSX keychain when it's already installed but Test installing a certificate into the macOS keychain when it's
the certificate has changed already installed but the certificate has changed
''' '''
expected = { expected = {
'changes': {'installed': 'Friendly Name', 'uninstalled': 'Friendly Name'}, 'changes': {'installed': 'Friendly Name', 'uninstalled': 'Friendly Name'},

View file

@ -28,9 +28,9 @@ class ProxyTestCase(TestCase):
''' '''
Validate the proxy state Validate the proxy state
''' '''
def test_set_proxy_osx(self): def test_set_proxy_macos(self):
''' '''
Test to make sure we can set the proxy settings on OSX Test to make sure we can set the proxy settings on macOS
''' '''
proxy.__grains__['os'] = 'Darwin' proxy.__grains__['os'] = 'Darwin'
expected = {'changes': { expected = {'changes': {
@ -80,9 +80,9 @@ class ProxyTestCase(TestCase):
set_proxy_mock.assert_has_calls(calls) set_proxy_mock.assert_has_calls(calls)
self.assertEqual(out, expected) self.assertEqual(out, expected)
def test_set_proxy_osx_same(self): def test_set_proxy_macos_same(self):
''' '''
Test to make sure we can set the proxy settings on OSX Test to make sure we can set the proxy settings on macOS
''' '''
proxy.__grains__['os'] = 'Darwin' proxy.__grains__['os'] = 'Darwin'
expected = {'changes': { expected = {'changes': {