Merge branch '2017.7' into 'oxygen'

Conflicts:
  - doc/man/salt.7
  - salt/modules/git.py
  - salt/modules/pacman.py
  - salt/states/git.py
  - tests/integration/modules/test_mac_user.py
  - tests/support/parser/__init__.py
This commit is contained in:
rallytime 2018-01-26 17:27:03 -05:00
commit 0ad101d560
No known key found for this signature in database
GPG Key ID: E8F1A4B90D0DEA19
40 changed files with 117294 additions and 24601 deletions

View File

@ -158,6 +158,7 @@ MOCK_MODULES = [
'jnpr.junos.utils.sw', 'jnpr.junos.utils.sw',
'dns', 'dns',
'dns.resolver', 'dns.resolver',
'keyring',
'netaddr', 'netaddr',
'netaddr.IPAddress', 'netaddr.IPAddress',
'netaddr.core', 'netaddr.core',
@ -199,6 +200,8 @@ def mock_decorator_with_params(*oargs, **okwargs):
# Define a fake version attribute for the following libs. # Define a fake version attribute for the following libs.
sys.modules['libcloud'].__version__ = '0.0.0' sys.modules['libcloud'].__version__ = '0.0.0'
sys.modules['msgpack'].version = (1, 0, 0)
sys.modules['psutil'].version_info = (3, 0, 0)
sys.modules['pymongo'].version = '0.0.0' sys.modules['pymongo'].version = '0.0.0'
sys.modules['ntsecuritycon'].STANDARD_RIGHTS_REQUIRED = 0 sys.modules['ntsecuritycon'].STANDARD_RIGHTS_REQUIRED = 0
sys.modules['ntsecuritycon'].SYNCHRONIZE = 0 sys.modules['ntsecuritycon'].SYNCHRONIZE = 0

View File

@ -1,6 +1,6 @@
.\" Man page generated from reStructuredText. .\" Man page generated from reStructuredText.
. .
.TH "SALT-API" "1" "October 31, 2016" "2016.11.0" "Salt" .TH "SALT-API" "1" "Jan 24, 2018" "2017.7.3" "Salt"
.SH NAME .SH NAME
salt-api \- salt-api Command salt-api \- salt-api Command
. .
@ -103,12 +103,10 @@ Logfile logging log level. One of \fBall\fP, \fBgarbage\fP, \fBtrace\fP,
.UNINDENT .UNINDENT
.SH SEE ALSO .SH SEE ALSO
.sp .sp
\fIsalt\-api(7)\fP \fBsalt\-api(7)\fP
\fIsalt(7)\fP \fBsalt(7)\fP
\fIsalt\-master(1)\fP \fBsalt\-master(1)\fP
.SH AUTHOR .SH AUTHOR
Thomas S. Hatch <thatch45@gmail.com> and many others, please see the Authors file Thomas S. Hatch <thatch45@gmail.com> and many others, please see the Authors file
.SH COPYRIGHT
2016 SaltStack, Inc.
.\" Generated by docutils manpage writer. .\" Generated by docutils manpage writer.
. .

View File

@ -1,6 +1,6 @@
.\" Man page generated from reStructuredText. .\" Man page generated from reStructuredText.
. .
.TH "SALT-CALL" "1" "October 31, 2016" "2016.11.0" "Salt" .TH "SALT-CALL" "1" "Jan 24, 2018" "2017.7.3" "Salt"
.SH NAME .SH NAME
salt-call \- salt-call Documentation salt-call \- salt-call Documentation
. .
@ -227,6 +227,11 @@ Write the output to the specified file.
.UNINDENT .UNINDENT
.INDENT 0.0 .INDENT 0.0
.TP .TP
.B \-\-out\-file\-append, \-\-output\-file\-append
Append the output to the specified file.
.UNINDENT
.INDENT 0.0
.TP
.B \-\-no\-color .B \-\-no\-color
Disable all colored output Disable all colored output
.UNINDENT .UNINDENT
@ -245,14 +250,25 @@ changes and success and \fByellow\fP denotes a expected future change in configu
.UNINDENT .UNINDENT
.UNINDENT .UNINDENT
.UNINDENT .UNINDENT
.INDENT 0.0
.TP
.B \-\-state\-output=STATE_OUTPUT, \-\-state_output=STATE_OUTPUT
Override the configured state_output value for minion
output. One of \(aqfull\(aq, \(aqterse\(aq, \(aqmixed\(aq, \(aqchanges\(aq or
\(aqfilter\(aq. Default: \(aqnone\(aq.
.UNINDENT
.INDENT 0.0
.TP
.B \-\-state\-verbose=STATE_VERBOSE, \-\-state_verbose=STATE_VERBOSE
Override the configured state_verbose value for minion
output. Set to True or False. Default: none.
.UNINDENT
.SH SEE ALSO .SH SEE ALSO
.sp .sp
\fIsalt(1)\fP \fBsalt(1)\fP
\fIsalt\-master(1)\fP \fBsalt\-master(1)\fP
\fIsalt\-minion(1)\fP \fBsalt\-minion(1)\fP
.SH AUTHOR .SH AUTHOR
Thomas S. Hatch <thatch45@gmail.com> and many others, please see the Authors file Thomas S. Hatch <thatch45@gmail.com> and many others, please see the Authors file
.SH COPYRIGHT
2016 SaltStack, Inc.
.\" Generated by docutils manpage writer. .\" Generated by docutils manpage writer.
. .

View File

@ -1,6 +1,6 @@
.\" Man page generated from reStructuredText. .\" Man page generated from reStructuredText.
. .
.TH "SALT-CLOUD" "1" "October 31, 2016" "2016.11.0" "Salt" .TH "SALT-CLOUD" "1" "Jan 24, 2018" "2017.7.3" "Salt"
.SH NAME .SH NAME
salt-cloud \- Salt Cloud Command salt-cloud \- Salt Cloud Command
. .
@ -276,6 +276,11 @@ Write the output to the specified file.
.UNINDENT .UNINDENT
.INDENT 0.0 .INDENT 0.0
.TP .TP
.B \-\-out\-file\-append, \-\-output\-file\-append
Append the output to the specified file.
.UNINDENT
.INDENT 0.0
.TP
.B \-\-no\-color .B \-\-no\-color
Disable all colored output Disable all colored output
.UNINDENT .UNINDENT
@ -294,6 +299,19 @@ changes and success and \fByellow\fP denotes a expected future change in configu
.UNINDENT .UNINDENT
.UNINDENT .UNINDENT
.UNINDENT .UNINDENT
.INDENT 0.0
.TP
.B \-\-state\-output=STATE_OUTPUT, \-\-state_output=STATE_OUTPUT
Override the configured state_output value for minion
output. One of \(aqfull\(aq, \(aqterse\(aq, \(aqmixed\(aq, \(aqchanges\(aq or
\(aqfilter\(aq. Default: \(aqnone\(aq.
.UNINDENT
.INDENT 0.0
.TP
.B \-\-state\-verbose=STATE_VERBOSE, \-\-state_verbose=STATE_VERBOSE
Override the configured state_verbose value for minion
output. Set to True or False. Default: none.
.UNINDENT
.SH EXAMPLES .SH EXAMPLES
.sp .sp
To create 4 VMs named web1, web2, db1, and db2 from specified profiles: To create 4 VMs named web1, web2, db1, and db2 from specified profiles:
@ -369,13 +387,11 @@ salt\-cloud \-m /path/to/cloud.map \-Q
.UNINDENT .UNINDENT
.SH SEE ALSO .SH SEE ALSO
.sp .sp
\fIsalt\-cloud(7)\fP \fBsalt\-cloud(7)\fP
\fIsalt(7)\fP \fBsalt(7)\fP
\fIsalt\-master(1)\fP \fBsalt\-master(1)\fP
\fIsalt\-minion(1)\fP \fBsalt\-minion(1)\fP
.SH AUTHOR .SH AUTHOR
Thomas S. Hatch <thatch45@gmail.com> and many others, please see the Authors file Thomas S. Hatch <thatch45@gmail.com> and many others, please see the Authors file
.SH COPYRIGHT
2016 SaltStack, Inc.
.\" Generated by docutils manpage writer. .\" Generated by docutils manpage writer.
. .

View File

@ -1,6 +1,6 @@
.\" Man page generated from reStructuredText. .\" Man page generated from reStructuredText.
. .
.TH "SALT-CP" "1" "October 31, 2016" "2016.11.0" "Salt" .TH "SALT-CP" "1" "Jan 24, 2018" "2017.7.3" "Salt"
.SH NAME .SH NAME
salt-cp \- salt-cp Documentation salt-cp \- salt-cp Documentation
. .
@ -31,34 +31,55 @@ level margin: \\n[rst2man-indent\\n[rst2man-indent-level]]
.in \\n[rst2man-indent\\n[rst2man-indent-level]]u .in \\n[rst2man-indent\\n[rst2man-indent-level]]u
.. ..
.sp .sp
Copy a file to a set of systems Copy a file or files to one or more minions
.SH SYNOPSIS .SH SYNOPSIS
.INDENT 0.0 .INDENT 0.0
.INDENT 3.5 .INDENT 3.5
.sp .sp
.nf .nf
.ft C .ft C
salt\-cp \(aq*\(aq [ options ] SOURCE DEST salt\-cp \(aq*\(aq [ options ] SOURCE [SOURCE2 SOURCE3 ...] DEST
salt\-cp \-E \(aq.*\(aq [ options ] SOURCE DEST salt\-cp \-E \(aq.*\(aq [ options ] SOURCE [SOURCE2 SOURCE3 ...] DEST
salt\-cp \-G \(aqos:Arch.*\(aq [ options ] SOURCE DEST salt\-cp \-G \(aqos:Arch.*\(aq [ options ] SOURCE [SOURCE2 SOURCE3 ...] DEST
.ft P .ft P
.fi .fi
.UNINDENT .UNINDENT
.UNINDENT .UNINDENT
.SH DESCRIPTION .SH DESCRIPTION
.sp .sp
Salt copy copies a local file out to all of the Salt minions matched by the salt\-cp copies files from the master to all of the Salt minions matched by the
given target. specified target expression.
.sp .sp
Salt copy is only intended for use with small files (< 100KB). If you need \fBNOTE:\fP
to copy large files out to minions please use the cp.get_file function. .INDENT 0.0
.sp .INDENT 3.5
Note: salt\-cp uses salt\(aqs publishing mechanism. This means the privacy of the salt\-cp uses Salt\(aqs publishing mechanism. This means the privacy of the
contents of the file on the wire is completely dependent upon the transport contents of the file on the wire is completely dependent upon the transport
in use. In addition, if the salt\-master is running with debug logging it is in use. In addition, if the master or minion is running with debug logging,
possible that the contents of the file will be logged to disk. the contents of the file will be logged to disk.
.sp
In addition, this tool is less efficient than the Salt fileserver when
copying larger files. It is recommended to instead use
\fBcp.get_file\fP to copy larger files to
minions. However, this requires the file to be located within one of the
fileserver directories.
.UNINDENT
.UNINDENT
.sp
Changed in version 2016.3.7,2016.11.6,2017.7.0: Compression support added, disable with \fB\-n\fP\&. Also, if the destination
path ends in a path separator (i.e. \fB/\fP, or \fB\e\fP on Windows, the
desitination will be assumed to be a directory. Finally, recursion is now
supported, allowing for entire directories to be copied.
.sp
Changed in version 2016.11.7,2017.7.2: Reverted back to the old copy mode to preserve backward compatibility. The
new functionality added in 2016.6.6 and 2017.7.0 is now available using the
\fB\-C\fP or \fB\-\-chunked\fP CLI arguments. Note that compression, recursive
copying, and support for copying large files is only available in chunked
mode.
.SH OPTIONS .SH OPTIONS
.INDENT 0.0 .INDENT 0.0
.TP .TP
@ -160,15 +181,30 @@ to identify targets. Range expressions look like %cluster.
Using the Range option requires that a range server is set up and the Using the Range option requires that a range server is set up and the
location of the range server is referenced in the master configuration location of the range server is referenced in the master configuration
file. file.
.UNINDENT
.INDENT 0.0
.TP
.B \-C, \-\-chunked
Use new chunked mode to copy files. This mode supports large files, recursive
directories copying and compression.
.sp
New in version 2016.11.7,2017.7.2.
.UNINDENT
.INDENT 0.0
.TP
.B \-n, \-\-no\-compression
Disable gzip compression in chunked mode.
.sp
New in version 2016.3.7,2016.11.6,2017.7.0.
.UNINDENT .UNINDENT
.SH SEE ALSO .SH SEE ALSO
.sp .sp
\fIsalt(1)\fP \fBsalt(1)\fP
\fIsalt\-master(1)\fP \fBsalt\-master(1)\fP
\fIsalt\-minion(1)\fP \fBsalt\-minion(1)\fP
.SH AUTHOR .SH AUTHOR
Thomas S. Hatch <thatch45@gmail.com> and many others, please see the Authors file Thomas S. Hatch <thatch45@gmail.com> and many others, please see the Authors file
.SH COPYRIGHT
2016 SaltStack, Inc.
.\" Generated by docutils manpage writer. .\" Generated by docutils manpage writer.
. .

View File

@ -1,6 +1,6 @@
.\" Man page generated from reStructuredText. .\" Man page generated from reStructuredText.
. .
.TH "SALT-KEY" "1" "October 31, 2016" "2016.11.0" "Salt" .TH "SALT-KEY" "1" "Jan 24, 2018" "2017.7.3" "Salt"
.SH NAME .SH NAME
salt-key \- salt-key Documentation salt-key \- salt-key Documentation
. .
@ -182,6 +182,11 @@ Write the output to the specified file.
.UNINDENT .UNINDENT
.INDENT 0.0 .INDENT 0.0
.TP .TP
.B \-\-out\-file\-append, \-\-output\-file\-append
Append the output to the specified file.
.UNINDENT
.INDENT 0.0
.TP
.B \-\-no\-color .B \-\-no\-color
Disable all colored output Disable all colored output
.UNINDENT .UNINDENT
@ -200,6 +205,19 @@ changes and success and \fByellow\fP denotes a expected future change in configu
.UNINDENT .UNINDENT
.UNINDENT .UNINDENT
.UNINDENT .UNINDENT
.INDENT 0.0
.TP
.B \-\-state\-output=STATE_OUTPUT, \-\-state_output=STATE_OUTPUT
Override the configured state_output value for minion
output. One of \(aqfull\(aq, \(aqterse\(aq, \(aqmixed\(aq, \(aqchanges\(aq or
\(aqfilter\(aq. Default: \(aqnone\(aq.
.UNINDENT
.INDENT 0.0
.TP
.B \-\-state\-verbose=STATE_VERBOSE, \-\-state_verbose=STATE_VERBOSE
Override the configured state_verbose value for minion
output. Set to True or False. Default: none.
.UNINDENT
.SS Actions .SS Actions
.INDENT 0.0 .INDENT 0.0
.TP .TP
@ -322,12 +340,10 @@ Auto\-create a signing key\-pair if it does not yet exist
.UNINDENT .UNINDENT
.SH SEE ALSO .SH SEE ALSO
.sp .sp
\fIsalt(7)\fP \fBsalt(7)\fP
\fIsalt\-master(1)\fP \fBsalt\-master(1)\fP
\fIsalt\-minion(1)\fP \fBsalt\-minion(1)\fP
.SH AUTHOR .SH AUTHOR
Thomas S. Hatch <thatch45@gmail.com> and many others, please see the Authors file Thomas S. Hatch <thatch45@gmail.com> and many others, please see the Authors file
.SH COPYRIGHT
2016 SaltStack, Inc.
.\" Generated by docutils manpage writer. .\" Generated by docutils manpage writer.
. .

View File

@ -1,6 +1,6 @@
.\" Man page generated from reStructuredText. .\" Man page generated from reStructuredText.
. .
.TH "SALT-MASTER" "1" "October 31, 2016" "2016.11.0" "Salt" .TH "SALT-MASTER" "1" "Jan 24, 2018" "2017.7.3" "Salt"
.SH NAME .SH NAME
salt-master \- salt-master Documentation salt-master \- salt-master Documentation
. .
@ -108,12 +108,10 @@ Logfile logging log level. One of \fBall\fP, \fBgarbage\fP, \fBtrace\fP,
.UNINDENT .UNINDENT
.SH SEE ALSO .SH SEE ALSO
.sp .sp
\fIsalt(1)\fP \fBsalt(1)\fP
\fIsalt(7)\fP \fBsalt(7)\fP
\fIsalt\-minion(1)\fP \fBsalt\-minion(1)\fP
.SH AUTHOR .SH AUTHOR
Thomas S. Hatch <thatch45@gmail.com> and many others, please see the Authors file Thomas S. Hatch <thatch45@gmail.com> and many others, please see the Authors file
.SH COPYRIGHT
2016 SaltStack, Inc.
.\" Generated by docutils manpage writer. .\" Generated by docutils manpage writer.
. .

View File

@ -1,6 +1,6 @@
.\" Man page generated from reStructuredText. .\" Man page generated from reStructuredText.
. .
.TH "SALT-MINION" "1" "October 31, 2016" "2016.11.0" "Salt" .TH "SALT-MINION" "1" "Jan 24, 2018" "2017.7.3" "Salt"
.SH NAME .SH NAME
salt-minion \- salt-minion Documentation salt-minion \- salt-minion Documentation
. .
@ -109,12 +109,10 @@ Logfile logging log level. One of \fBall\fP, \fBgarbage\fP, \fBtrace\fP,
.UNINDENT .UNINDENT
.SH SEE ALSO .SH SEE ALSO
.sp .sp
\fIsalt(1)\fP \fBsalt(1)\fP
\fIsalt(7)\fP \fBsalt(7)\fP
\fIsalt\-master(1)\fP \fBsalt\-master(1)\fP
.SH AUTHOR .SH AUTHOR
Thomas S. Hatch <thatch45@gmail.com> and many others, please see the Authors file Thomas S. Hatch <thatch45@gmail.com> and many others, please see the Authors file
.SH COPYRIGHT
2016 SaltStack, Inc.
.\" Generated by docutils manpage writer. .\" Generated by docutils manpage writer.
. .

View File

@ -1,6 +1,6 @@
.\" Man page generated from reStructuredText. .\" Man page generated from reStructuredText.
. .
.TH "SALT-PROXY" "1" "October 31, 2016" "2016.11.0" "Salt" .TH "SALT-PROXY" "1" "Jan 24, 2018" "2017.7.3" "Salt"
.SH NAME .SH NAME
salt-proxy \- salt-proxy Documentation salt-proxy \- salt-proxy Documentation
. .
@ -116,13 +116,11 @@ Logfile logging log level. One of \fBall\fP, \fBgarbage\fP, \fBtrace\fP,
.UNINDENT .UNINDENT
.SH SEE ALSO .SH SEE ALSO
.sp .sp
\fIsalt(1)\fP \fBsalt(1)\fP
\fIsalt(7)\fP \fBsalt(7)\fP
\fIsalt\-master(1)\fP \fBsalt\-master(1)\fP
\fIsalt\-minion(1)\fP \fBsalt\-minion(1)\fP
.SH AUTHOR .SH AUTHOR
Thomas S. Hatch <thatch45@gmail.com> and many others, please see the Authors file Thomas S. Hatch <thatch45@gmail.com> and many others, please see the Authors file
.SH COPYRIGHT
2016 SaltStack, Inc.
.\" Generated by docutils manpage writer. .\" Generated by docutils manpage writer.
. .

View File

@ -1,6 +1,6 @@
.\" Man page generated from reStructuredText. .\" Man page generated from reStructuredText.
. .
.TH "SALT-RUN" "1" "October 31, 2016" "2016.11.0" "Salt" .TH "SALT-RUN" "1" "Jan 24, 2018" "2017.7.3" "Salt"
.SH NAME .SH NAME
salt-run \- salt-run Documentation salt-run \- salt-run Documentation
. .
@ -114,12 +114,10 @@ Logfile logging log level. One of \fBall\fP, \fBgarbage\fP, \fBtrace\fP,
.UNINDENT .UNINDENT
.SH SEE ALSO .SH SEE ALSO
.sp .sp
\fIsalt(1)\fP \fBsalt(1)\fP
\fIsalt\-master(1)\fP \fBsalt\-master(1)\fP
\fIsalt\-minion(1)\fP \fBsalt\-minion(1)\fP
.SH AUTHOR .SH AUTHOR
Thomas S. Hatch <thatch45@gmail.com> and many others, please see the Authors file Thomas S. Hatch <thatch45@gmail.com> and many others, please see the Authors file
.SH COPYRIGHT
2016 SaltStack, Inc.
.\" Generated by docutils manpage writer. .\" Generated by docutils manpage writer.
. .

View File

@ -1,6 +1,6 @@
.\" Man page generated from reStructuredText. .\" Man page generated from reStructuredText.
. .
.TH "SALT-SSH" "1" "October 31, 2016" "2016.11.0" "Salt" .TH "SALT-SSH" "1" "Jan 24, 2018" "2017.7.3" "Salt"
.SH NAME .SH NAME
salt-ssh \- salt-ssh Documentation salt-ssh \- salt-ssh Documentation
. .
@ -49,13 +49,35 @@ Salt SSH allows for salt routines to be executed using only SSH for transport
.SH OPTIONS .SH OPTIONS
.INDENT 0.0 .INDENT 0.0
.TP .TP
.B \-r, \-\-raw, \-\-raw\-shell .B \-\-version
Execute a raw shell command. Print the version of Salt that is running.
.UNINDENT .UNINDENT
.INDENT 0.0 .INDENT 0.0
.TP .TP
.B \-\-priv .B \-\-versions\-report
Specify the SSH private key file to be used for authentication. Show program\(aqs dependencies and version number, and then exit
.UNINDENT
.INDENT 0.0
.TP
.B \-h, \-\-help
Show the help message and exit
.UNINDENT
.INDENT 0.0
.TP
.B \-c CONFIG_DIR, \-\-config\-dir=CONFIG_dir
The location of the Salt configuration directory. This directory contains
the configuration files for Salt master and minions. The default location
on most systems is \fB/etc/salt\fP\&.
.UNINDENT
.INDENT 0.0
.TP
.B \-\-hard\-crash
Raise any original exception rather than exiting gracefully. Default: False.
.UNINDENT
.INDENT 0.0
.TP
.B \-r, \-\-raw, \-\-raw\-shell
Execute a raw shell command.
.UNINDENT .UNINDENT
.INDENT 0.0 .INDENT 0.0
.TP .TP
@ -90,9 +112,74 @@ is 25.
.UNINDENT .UNINDENT
.INDENT 0.0 .INDENT 0.0
.TP .TP
.B \-\-extra\-filerefs=EXTRA_FILEREFS
Pass in extra files to include in the state tarball.
.UNINDENT
.INDENT 0.0
.TP
.B \-\-min\-extra\-modules=MIN_EXTRA_MODS
One or comma\-separated list of extra Python modulesto be included
into Minimal Salt.
.UNINDENT
.INDENT 0.0
.TP
.B \-\-thin\-extra\-modules=THIN_EXTRA_MODS
One or comma\-separated list of extra Python modulesto be included
into Thin Salt.
.UNINDENT
.INDENT 0.0
.TP
.B \-v, \-\-verbose
Turn on command verbosity, display jid.
.UNINDENT
.INDENT 0.0
.TP
.B \-s, \-\-static
Return the data from minions as a group after they all return.
.UNINDENT
.INDENT 0.0
.TP
.B \-w, \-\-wipe
Remove the deployment of the salt files when done executing.
.UNINDENT
.INDENT 0.0
.TP
.B \-W, \-\-rand\-thin\-dir
Select a random temp dir to deploy on the remote system. The dir
will be cleaned after the execution.
.UNINDENT
.INDENT 0.0
.TP
.B \-t, \-\-regen\-thin, \-\-thin
Trigger a thin tarball regeneration. This is needed if custom
grains/modules/states have been added or updated.
.UNINDENT
.INDENT 0.0
.TP
.B \-\-python2\-bin=PYTHON2_BIN
Path to a python2 binary which has salt installed.
.UNINDENT
.INDENT 0.0
.TP
.B \-\-python3\-bin=PYTHON3_BIN
Path to a python3 binary which has salt installed.
.UNINDENT
.INDENT 0.0
.TP
.B \-\-jid=JID
Pass a JID to be used instead of generating one.
.UNINDENT
.SS Authentication Options
.INDENT 0.0
.TP
.B \-\-priv=SSH_PRIV
Specify the SSH private key file to be used for authentication.
.UNINDENT
.INDENT 0.0
.TP
.B \-i, \-\-ignore\-host\-keys .B \-i, \-\-ignore\-host\-keys
Disables StrictHostKeyChecking to relax acceptance of new and unknown By default ssh host keys are honored and connections will ask for
host keys. approval. Use this option to disable StrictHostKeyChecking.
.UNINDENT .UNINDENT
.INDENT 0.0 .INDENT 0.0
.TP .TP
@ -103,11 +190,22 @@ changed and would still error with \-\-ignore\-host\-keys.
.UNINDENT .UNINDENT
.INDENT 0.0 .INDENT 0.0
.TP .TP
.B \-\-user=SSH_USER
Set the default user to attempt to use when authenticating.
.UNINDENT
.INDENT 0.0
.TP
.B \-\-passwd .B \-\-passwd
Set the default password to attempt to use when authenticating. Set the default password to attempt to use when authenticating.
.UNINDENT .UNINDENT
.INDENT 0.0 .INDENT 0.0
.TP .TP
.B \-\-askpass
Interactively ask for the SSH password with no echo \- avoids password
in process args and stored in history.
.UNINDENT
.INDENT 0.0
.TP
.B \-\-key\-deploy .B \-\-key\-deploy
Set this flag to attempt to deploy the authorized ssh key with all Set this flag to attempt to deploy the authorized ssh key with all
minions. This combined with \-\-passwd can make initial deployment of keys minions. This combined with \-\-passwd can make initial deployment of keys
@ -115,35 +213,25 @@ very fast and easy.
.UNINDENT .UNINDENT
.INDENT 0.0 .INDENT 0.0
.TP .TP
.B \-\-version .B \-\-identities\-only
Print the version of Salt that is running. Use the only authentication identity files configured in the ssh_config
files. See IdentitiesOnly flag in man ssh_config.
.UNINDENT .UNINDENT
.INDENT 0.0 .INDENT 0.0
.TP .TP
.B \-\-versions\-report .B \-\-sudo
Show program\(aqs dependencies and version number, and then exit Run command via sudo.
.UNINDENT
.SS Scan Roster Options
.INDENT 0.0
.TP
.B \-\-scan\-ports=SSH_SCAN_PORTS
Comma\-separated list of ports to scan in the scan roster.
.UNINDENT .UNINDENT
.INDENT 0.0 .INDENT 0.0
.TP .TP
.B \-h, \-\-help .B \-\-scan\-timeout=SSH_SCAN_TIMEOUT
Show the help message and exit Scanning socket timeout for the scan roster.
.UNINDENT
.INDENT 0.0
.TP
.B \-c CONFIG_DIR, \-\-config\-dir=CONFIG_dir
The location of the Salt configuration directory. This directory contains
the configuration files for Salt master and minions. The default location
on most systems is \fB/etc/salt\fP\&.
.UNINDENT
.SS Target Selection
.sp
The default matching that Salt utilizes is shell\-style globbing around the
minion id. See \fI\%https://docs.python.org/2/library/fnmatch.html#module\-fnmatch\fP\&.
.INDENT 0.0
.TP
.B \-E, \-\-pcre
The target expression will be interpreted as a PCRE regular expression
rather than a shell glob.
.UNINDENT .UNINDENT
.SS Logging Options .SS Logging Options
.sp .sp
@ -167,6 +255,16 @@ Logfile logging log level. One of \fBall\fP, \fBgarbage\fP, \fBtrace\fP,
\fBdebug\fP, \fBinfo\fP, \fBwarning\fP, \fBerror\fP, \fBquiet\fP\&. Default: \fBdebug\fP, \fBinfo\fP, \fBwarning\fP, \fBerror\fP, \fBquiet\fP\&. Default:
\fBwarning\fP\&. \fBwarning\fP\&.
.UNINDENT .UNINDENT
.SS Target Selection
.sp
The default matching that Salt utilizes is shell\-style globbing around the
minion id. See \fI\%https://docs.python.org/2/library/fnmatch.html#module\-fnmatch\fP\&.
.INDENT 0.0
.TP
.B \-E, \-\-pcre
The target expression will be interpreted as a PCRE regular expression
rather than a shell glob.
.UNINDENT
.SS Output Options .SS Output Options
.INDENT 0.0 .INDENT 0.0
.TP .TP
@ -212,6 +310,11 @@ Write the output to the specified file.
.UNINDENT .UNINDENT
.INDENT 0.0 .INDENT 0.0
.TP .TP
.B \-\-out\-file\-append, \-\-output\-file\-append
Append the output to the specified file.
.UNINDENT
.INDENT 0.0
.TP
.B \-\-no\-color .B \-\-no\-color
Disable all colored output Disable all colored output
.UNINDENT .UNINDENT
@ -230,14 +333,25 @@ changes and success and \fByellow\fP denotes a expected future change in configu
.UNINDENT .UNINDENT
.UNINDENT .UNINDENT
.UNINDENT .UNINDENT
.INDENT 0.0
.TP
.B \-\-state\-output=STATE_OUTPUT, \-\-state_output=STATE_OUTPUT
Override the configured state_output value for minion
output. One of \(aqfull\(aq, \(aqterse\(aq, \(aqmixed\(aq, \(aqchanges\(aq or
\(aqfilter\(aq. Default: \(aqnone\(aq.
.UNINDENT
.INDENT 0.0
.TP
.B \-\-state\-verbose=STATE_VERBOSE, \-\-state_verbose=STATE_VERBOSE
Override the configured state_verbose value for minion
output. Set to True or False. Default: none.
.UNINDENT
.SH SEE ALSO .SH SEE ALSO
.sp .sp
\fIsalt(7)\fP \fBsalt(7)\fP
\fIsalt\-master(1)\fP \fBsalt\-master(1)\fP
\fIsalt\-minion(1)\fP \fBsalt\-minion(1)\fP
.SH AUTHOR .SH AUTHOR
Thomas S. Hatch <thatch45@gmail.com> and many others, please see the Authors file Thomas S. Hatch <thatch45@gmail.com> and many others, please see the Authors file
.SH COPYRIGHT
2016 SaltStack, Inc.
.\" Generated by docutils manpage writer. .\" Generated by docutils manpage writer.
. .

View File

@ -1,6 +1,6 @@
.\" Man page generated from reStructuredText. .\" Man page generated from reStructuredText.
. .
.TH "SALT-SYNDIC" "1" "October 31, 2016" "2016.11.0" "Salt" .TH "SALT-SYNDIC" "1" "Jan 24, 2018" "2017.7.3" "Salt"
.SH NAME .SH NAME
salt-syndic \- salt-syndic Documentation salt-syndic \- salt-syndic Documentation
. .
@ -110,12 +110,10 @@ Logfile logging log level. One of \fBall\fP, \fBgarbage\fP, \fBtrace\fP,
.UNINDENT .UNINDENT
.SH SEE ALSO .SH SEE ALSO
.sp .sp
\fIsalt(1)\fP \fBsalt(1)\fP
\fIsalt\-master(1)\fP \fBsalt\-master(1)\fP
\fIsalt\-minion(1)\fP \fBsalt\-minion(1)\fP
.SH AUTHOR .SH AUTHOR
Thomas S. Hatch <thatch45@gmail.com> and many others, please see the Authors file Thomas S. Hatch <thatch45@gmail.com> and many others, please see the Authors file
.SH COPYRIGHT
2016 SaltStack, Inc.
.\" Generated by docutils manpage writer. .\" Generated by docutils manpage writer.
. .

View File

@ -1,6 +1,6 @@
.\" Man page generated from reStructuredText. .\" Man page generated from reStructuredText.
. .
.TH "SALT-UNITY" "1" "October 31, 2016" "2016.11.0" "Salt" .TH "SALT-UNITY" "1" "Jan 24, 2018" "2017.7.3" "Salt"
.SH NAME .SH NAME
salt-unity \- salt-unity Command salt-unity \- salt-unity Command
. .
@ -50,20 +50,18 @@ invokes that script.
.SH OPTIONS .SH OPTIONS
.SH SEE ALSO .SH SEE ALSO
.sp .sp
\fIsalt\-api(1)\fP \fBsalt\-api(1)\fP
\fIsalt\-call(1)\fP \fBsalt\-call(1)\fP
\fIsalt\-cloud(1)\fP \fBsalt\-cloud(1)\fP
\fIsalt\-cp(1)\fP \fBsalt\-cp(1)\fP
\fIsalt\-key(1)\fP \fBsalt\-key(1)\fP
\fIsalt\-main(1)\fP \fBsalt\-main(1)\fP
\fIsalt\-master(1)\fP \fBsalt\-master(1)\fP
\fIsalt\-minion(1)\fP \fBsalt\-minion(1)\fP
\fIsalt\-run(1)\fP \fBsalt\-run(1)\fP
\fIsalt\-ssh(1)\fP \fBsalt\-ssh(1)\fP
\fIsalt\-syndic(1)\fP \fBsalt\-syndic(1)\fP
.SH AUTHOR .SH AUTHOR
Thomas S. Hatch <thatch45@gmail.com> and many others, please see the Authors file Thomas S. Hatch <thatch45@gmail.com> and many others, please see the Authors file
.SH COPYRIGHT
2016 SaltStack, Inc.
.\" Generated by docutils manpage writer. .\" Generated by docutils manpage writer.
. .

View File

@ -1,6 +1,6 @@
.\" Man page generated from reStructuredText. .\" Man page generated from reStructuredText.
. .
.TH "SALT" "1" "October 31, 2016" "2016.11.0" "Salt" .TH "SALT" "1" "Jan 24, 2018" "2017.7.3" "Salt"
.SH NAME .SH NAME
salt \- salt salt \- salt
. .
@ -306,6 +306,11 @@ Write the output to the specified file.
.UNINDENT .UNINDENT
.INDENT 0.0 .INDENT 0.0
.TP .TP
.B \-\-out\-file\-append, \-\-output\-file\-append
Append the output to the specified file.
.UNINDENT
.INDENT 0.0
.TP
.B \-\-no\-color .B \-\-no\-color
Disable all colored output Disable all colored output
.UNINDENT .UNINDENT
@ -324,14 +329,25 @@ changes and success and \fByellow\fP denotes a expected future change in configu
.UNINDENT .UNINDENT
.UNINDENT .UNINDENT
.UNINDENT .UNINDENT
.INDENT 0.0
.TP
.B \-\-state\-output=STATE_OUTPUT, \-\-state_output=STATE_OUTPUT
Override the configured state_output value for minion
output. One of \(aqfull\(aq, \(aqterse\(aq, \(aqmixed\(aq, \(aqchanges\(aq or
\(aqfilter\(aq. Default: \(aqnone\(aq.
.UNINDENT
.INDENT 0.0
.TP
.B \-\-state\-verbose=STATE_VERBOSE, \-\-state_verbose=STATE_VERBOSE
Override the configured state_verbose value for minion
output. Set to True or False. Default: none.
.UNINDENT
.SH SEE ALSO .SH SEE ALSO
.sp .sp
\fIsalt(7)\fP \fBsalt(7)\fP
\fIsalt\-master(1)\fP \fBsalt\-master(1)\fP
\fIsalt\-minion(1)\fP \fBsalt\-minion(1)\fP
.SH AUTHOR .SH AUTHOR
Thomas S. Hatch <thatch45@gmail.com> and many others, please see the Authors file Thomas S. Hatch <thatch45@gmail.com> and many others, please see the Authors file
.SH COPYRIGHT
2016 SaltStack, Inc.
.\" Generated by docutils manpage writer. .\" Generated by docutils manpage writer.
. .

File diff suppressed because it is too large Load Diff

View File

@ -1,6 +1,6 @@
.\" Man page generated from reStructuredText. .\" Man page generated from reStructuredText.
. .
.TH "SPM" "1" "October 31, 2016" "2016.11.0" "Salt" .TH "SPM" "1" "Jan 24, 2018" "2017.7.3" "Salt"
.SH NAME .SH NAME
spm \- Salt Package Manager Command spm \- Salt Package Manager Command
. .
@ -132,12 +132,10 @@ in that directory which describes them.
.UNINDENT .UNINDENT
.SH SEE ALSO .SH SEE ALSO
.sp .sp
\fIsalt(1)\fP \fBsalt(1)\fP
\fIsalt\-master(1)\fP \fBsalt\-master(1)\fP
\fIsalt\-minion(1)\fP \fBsalt\-minion(1)\fP
.SH AUTHOR .SH AUTHOR
Thomas S. Hatch <thatch45@gmail.com> and many others, please see the Authors file Thomas S. Hatch <thatch45@gmail.com> and many others, please see the Authors file
.SH COPYRIGHT
2016 SaltStack, Inc.
.\" Generated by docutils manpage writer. .\" Generated by docutils manpage writer.
. .

View File

@ -3044,6 +3044,27 @@ the metadata will be refreshed.
.. _winrepo-minion-config-opts: .. _winrepo-minion-config-opts:
Minion Windows Software Repo Settings
=====================================
.. important::
To use these config options, the minion can be running in master-minion or
masterless mode.
.. conf_minion:: winrepo_source_dir
``winrepo_source_dir``
----------------------
Default: ``salt://win/repo-ng/``
The source location for the winrepo sls files.
.. code-block:: yaml
winrepo_source_dir: salt://win/repo-ng/
Standalone Minion Windows Software Repo Settings Standalone Minion Windows Software Repo Settings
================================================ ================================================
@ -3087,19 +3108,6 @@ out for 2015.8.0 and later minions.
winrepo_dir_ng: /srv/salt/win/repo-ng winrepo_dir_ng: /srv/salt/win/repo-ng
.. conf_minion:: winrepo_source_dir
``winrepo_source_dir``
----------------------
Default: ``salt://win/repo-ng/``
The source location for the winrepo sls files.
.. code-block:: yaml
winrepo_source_dir: salt://win/repo-ng/
.. conf_minion:: winrepo_cachefile .. conf_minion:: winrepo_cachefile
.. conf_minion:: win_repo_cachefile .. conf_minion:: win_repo_cachefile

View File

@ -1005,10 +1005,10 @@ The :py:func:`file.serialize <salt.states.file.serialize>` state can provide a
shorthand for creating some files from data structures. There are also many shorthand for creating some files from data structures. There are also many
examples within Salt Formulas of creating one-off "serializers" (often as Jinja examples within Salt Formulas of creating one-off "serializers" (often as Jinja
macros) that reformat a data structure to a specific config file format. For macros) that reformat a data structure to a specific config file format. For
example, `Nginx vhosts`__ or the `php.ini`__ example, look at the`Nginx vhosts`_ states or the `php.ini`_ file template.
__: https://github.com/saltstack-formulas/nginx-formula/blob/5cad4512/nginx/ng/vhosts_config.sls .. _`Nginx vhosts`: https://github.com/saltstack-formulas/nginx-formula/blob/5cad4512/nginx/ng/vhosts_config.sls
__: https://github.com/saltstack-formulas/php-formula/blob/82e2cd3a/php/ng/files/php.ini .. _`php.ini`: https://github.com/saltstack-formulas/php-formula/blob/82e2cd3a/php/ng/files/php.ini
Environment specific information Environment specific information
................................ ................................

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@ -13,6 +13,12 @@ to ``tcp`` on each Salt minion and Salt master.
transport: tcp transport: tcp
.. warning::
We currently recommend that when using Syndics that all Masters and Minions
use the same transport. We're investigating a report of an error when using
mixed transport types at very heavy loads.
Wire Protocol Wire Protocol
============= =============
This implementation over TCP focuses on flexibility over absolute efficiency. This implementation over TCP focuses on flexibility over absolute efficiency.

View File

@ -386,8 +386,8 @@ If Exist "%BinDir%\Lib\site-packages\salt\modules\solaris*"^
del /Q "%BinDir%\Lib\site-packages\salt\modules\solaris*" 1>nul del /Q "%BinDir%\Lib\site-packages\salt\modules\solaris*" 1>nul
If Exist "%BinDir%\Lib\site-packages\salt\modules\solr.py"^ If Exist "%BinDir%\Lib\site-packages\salt\modules\solr.py"^
del /Q "%BinDir%\Lib\site-packages\salt\modules\solr.*" 1>nul del /Q "%BinDir%\Lib\site-packages\salt\modules\solr.*" 1>nul
If Exist "%BinDir%\Lib\site-packages\salt\modules\ssh*"^ If Exist "%BinDir%\Lib\site-packages\salt\modules\ssh_*"^
del /Q "%BinDir%\Lib\site-packages\salt\modules\ssh*" 1>nul del /Q "%BinDir%\Lib\site-packages\salt\modules\ssh_*" 1>nul
If Exist "%BinDir%\Lib\site-packages\salt\modules\supervisord.py"^ If Exist "%BinDir%\Lib\site-packages\salt\modules\supervisord.py"^
del /Q "%BinDir%\Lib\site-packages\salt\modules\supervisord.*" 1>nul del /Q "%BinDir%\Lib\site-packages\salt\modules\supervisord.*" 1>nul
If Exist "%BinDir%\Lib\site-packages\salt\modules\sysbench.py"^ If Exist "%BinDir%\Lib\site-packages\salt\modules\sysbench.py"^
@ -522,8 +522,8 @@ If Exist "%BinDir%\Lib\site-packages\salt\states\smartos.py"^
del /Q "%BinDir%\Lib\site-packages\salt\states\smartos.*" 1>nul del /Q "%BinDir%\Lib\site-packages\salt\states\smartos.*" 1>nul
If Exist "%BinDir%\Lib\site-packages\salt\states\snapper.py"^ If Exist "%BinDir%\Lib\site-packages\salt\states\snapper.py"^
del /Q "%BinDir%\Lib\site-packages\salt\states\snapper.*" 1>nul del /Q "%BinDir%\Lib\site-packages\salt\states\snapper.*" 1>nul
If Exist "%BinDir%\Lib\site-packages\salt\states\ssh*"^ If Exist "%BinDir%\Lib\site-packages\salt\states\ssh_*"^
del /Q "%BinDir%\Lib\site-packages\salt\states\ssh*" 1>nul del /Q "%BinDir%\Lib\site-packages\salt\states\ssh_*" 1>nul
If Exist "%BinDir%\Lib\site-packages\salt\states\supervisord.py"^ If Exist "%BinDir%\Lib\site-packages\salt\states\supervisord.py"^
del /Q "%BinDir%\Lib\site-packages\salt\states\supervisord.*" 1>nul del /Q "%BinDir%\Lib\site-packages\salt\states\supervisord.*" 1>nul
If Exist "%BinDir%\Lib\site-packages\salt\states\sysrc.py"^ If Exist "%BinDir%\Lib\site-packages\salt\states\sysrc.py"^

View File

@ -212,7 +212,7 @@ def prep_trans_tar(opts, file_client, chunks, file_refs, pillar=None, id_=None,
os.makedirs(env_root) os.makedirs(env_root)
for ref in file_refs[saltenv]: for ref in file_refs[saltenv]:
for name in ref: for name in ref:
short = salt.utils.url.parse(name)[0] short = salt.utils.url.parse(name)[0].lstrip('/')
cache_dest = os.path.join(cache_dest_root, short) cache_dest = os.path.join(cache_dest_root, short)
try: try:
path = file_client.cache_file(name, saltenv, cachedir=cachedir) path = file_client.cache_file(name, saltenv, cachedir=cachedir)

View File

@ -70,7 +70,10 @@ def start(address=None, port=5000, ssl_crt=None, ssl_key=None):
def post(self, tag): # pylint: disable=arguments-differ def post(self, tag): # pylint: disable=arguments-differ
body = self.request.body body = self.request.body
headers = self.request.headers headers = self.request.headers
payload = {'headers': headers, 'body': body} payload = {
'headers': headers if isinstance(headers, dict) else dict(headers),
'body': body,
}
fire('salt/engines/hook/' + tag, payload) fire('salt/engines/hook/' + tag, payload)
application = tornado.web.Application([(r"/(.*)", WebHook), ]) application = tornado.web.Application([(r"/(.*)", WebHook), ])

View File

@ -2931,9 +2931,8 @@ def shell_info(shell, list_modules=False):
'HKEY_LOCAL_MACHINE', 'HKEY_LOCAL_MACHINE',
'Software\\Microsoft\\PowerShell\\{0}'.format(reg_ver), 'Software\\Microsoft\\PowerShell\\{0}'.format(reg_ver),
'Install') 'Install')
if 'vtype' in install_data and \ if install_data.get('vtype') == 'REG_DWORD' and \
install_data['vtype'] == 'REG_DWORD' and \ install_data.get('vdata') == 1:
install_data['vdata'] == 1:
details = __salt__['reg.list_values']( details = __salt__['reg.list_values'](
'HKEY_LOCAL_MACHINE', 'HKEY_LOCAL_MACHINE',
'Software\\Microsoft\\PowerShell\\{0}\\' 'Software\\Microsoft\\PowerShell\\{0}\\'

View File

@ -6,6 +6,7 @@ from __future__ import absolute_import, print_function, unicode_literals
# Import python libs # Import python libs
import copy import copy
import glob
import logging import logging
import os import os
import re import re
@ -245,13 +246,17 @@ def _git_run(command, cwd=None, user=None, password=None, identity=None,
) )
tmp_ssh_wrapper = None tmp_ssh_wrapper = None
if salt.utils.platform.is_windows(): if salt.utils.platform.is_windows():
for suffix in ('', ' (x86)'): # Known locations for Git's ssh.exe in Windows
ssh_exe = ( globmasks = [os.path.join(os.getenv('SystemDrive'), os.sep,
'C:\\Program Files{0}\\Git\\bin\\ssh.exe' 'Program Files*', 'Git', 'usr', 'bin',
.format(suffix) 'ssh.exe'),
) os.path.join(os.getenv('SystemDrive'), os.sep,
if os.path.isfile(ssh_exe): 'Program Files*', 'Git', 'bin',
env['GIT_SSH_EXE'] = ssh_exe 'ssh.exe')]
for globmask in globmasks:
ssh_exe = glob.glob(globmask)
if ssh_exe and os.path.isfile(ssh_exe[0]):
env['GIT_SSH_EXE'] = ssh_exe[0]
break break
else: else:
raise CommandExecutionError( raise CommandExecutionError(

View File

@ -1348,5 +1348,5 @@ def owner(*paths, **kwargs): # pylint: disable=unused-argument
else: else:
ret[path] = '' ret[path] = ''
if len(ret) == 1: if len(ret) == 1:
return six.itervalues(ret) return next(six.itervalues(ret))
return ret return ret

View File

@ -442,7 +442,7 @@ def refresh_db(root=None):
def install(name=None, def install(name=None,
refresh=False, refresh=False,
sysupgrade=False, sysupgrade=None,
pkgs=None, pkgs=None,
sources=None, sources=None,
**kwargs): **kwargs):
@ -482,7 +482,8 @@ def install(name=None,
sysupgrade sysupgrade
Whether or not to upgrade the system packages before installing. Whether or not to upgrade the system packages before installing.
If refresh is set to ``True`` but sysupgrade is not specified, ``-u`` will be
applied
Multiple Package Installation Options: Multiple Package Installation Options:
@ -520,9 +521,6 @@ def install(name=None,
{'<package>': {'old': '<old-version>', {'<package>': {'old': '<old-version>',
'new': '<new-version>'}} 'new': '<new-version>'}}
''' '''
refresh = salt.utils.data.is_true(refresh)
sysupgrade = salt.utils.data.is_true(sysupgrade)
try: try:
pkg_params, pkg_type = __salt__['pkg_resource.parse_targets']( pkg_params, pkg_type = __salt__['pkg_resource.parse_targets'](
name, pkgs, sources, **kwargs name, pkgs, sources, **kwargs
@ -550,9 +548,9 @@ def install(name=None,
cmd.extend(pkg_params) cmd.extend(pkg_params)
elif pkg_type == 'repository': elif pkg_type == 'repository':
cmd.append('-S') cmd.append('-S')
if refresh: if refresh is True:
cmd.append('-y') cmd.append('-y')
if sysupgrade: if sysupgrade is True or (sysupgrade is None and refresh is True):
cmd.append('-u') cmd.append('-u')
cmd.extend(['--noprogressbar', '--noconfirm', '--needed']) cmd.extend(['--noprogressbar', '--noconfirm', '--needed'])
wildcards = [] wildcards = []

View File

@ -92,9 +92,13 @@ class Registry(object): # pylint: disable=R0903
''' '''
def __init__(self): def __init__(self):
self.hkeys = { self.hkeys = {
'HKEY_CURRENT_CONFIG': win32con.HKEY_CURRENT_CONFIG,
'HKEY_CLASSES_ROOT': win32con.HKEY_CLASSES_ROOT,
'HKEY_CURRENT_USER': win32con.HKEY_CURRENT_USER, 'HKEY_CURRENT_USER': win32con.HKEY_CURRENT_USER,
'HKEY_LOCAL_MACHINE': win32con.HKEY_LOCAL_MACHINE, 'HKEY_LOCAL_MACHINE': win32con.HKEY_LOCAL_MACHINE,
'HKEY_USERS': win32con.HKEY_USERS, 'HKEY_USERS': win32con.HKEY_USERS,
'HKCC': win32con.HKEY_CURRENT_CONFIG,
'HKCR': win32con.HKEY_CLASSES_ROOT,
'HKCU': win32con.HKEY_CURRENT_USER, 'HKCU': win32con.HKEY_CURRENT_USER,
'HKLM': win32con.HKEY_LOCAL_MACHINE, 'HKLM': win32con.HKEY_LOCAL_MACHINE,
'HKU': win32con.HKEY_USERS, 'HKU': win32con.HKEY_USERS,
@ -127,9 +131,11 @@ class Registry(object): # pylint: disable=R0903
# delete_key_recursive uses this to check the subkey contains enough \ # delete_key_recursive uses this to check the subkey contains enough \
# as we do not want to remove all or most of the registry # as we do not want to remove all or most of the registry
self.subkey_slash_check = { self.subkey_slash_check = {
win32con.HKEY_CURRENT_USER: 0, win32con.HKEY_CURRENT_USER: 0,
win32con.HKEY_LOCAL_MACHINE: 1, win32con.HKEY_LOCAL_MACHINE: 1,
win32con.HKEY_USERS: 1 win32con.HKEY_USERS: 1,
win32con.HKEY_CURRENT_CONFIG: 1,
win32con.HKEY_CLASSES_ROOT: 1
} }
self.registry_32 = { self.registry_32 = {
@ -200,6 +206,8 @@ def list_keys(hive, key=None, use_32bit_registry=False):
- HKEY_LOCAL_MACHINE or HKLM - HKEY_LOCAL_MACHINE or HKLM
- HKEY_CURRENT_USER or HKCU - HKEY_CURRENT_USER or HKCU
- HKEY_USER or HKU - HKEY_USER or HKU
- HKEY_CLASSES_ROOT or HKCR
- HKEY_CURRENT_CONFIG or HKCC
:param str key: The key (looks like a path) to the value name. If a key is :param str key: The key (looks like a path) to the value name. If a key is
not passed, the keys under the hive will be returned. not passed, the keys under the hive will be returned.
@ -253,6 +261,8 @@ def list_values(hive, key=None, use_32bit_registry=False, include_default=True):
- HKEY_LOCAL_MACHINE or HKLM - HKEY_LOCAL_MACHINE or HKLM
- HKEY_CURRENT_USER or HKCU - HKEY_CURRENT_USER or HKCU
- HKEY_USER or HKU - HKEY_USER or HKU
- HKEY_CLASSES_ROOT or HKCR
- HKEY_CURRENT_CONFIG or HKCC
:param str key: The key (looks like a path) to the value name. If a key is :param str key: The key (looks like a path) to the value name. If a key is
not passed, the values under the hive will be returned. not passed, the values under the hive will be returned.
@ -292,9 +302,15 @@ def list_values(hive, key=None, use_32bit_registry=False, include_default=True):
value = {'hive': local_hive, value = {'hive': local_hive,
'key': local_key, 'key': local_key,
'vname': _to_mbcs(vname), 'vname': _to_mbcs(vname),
'vdata': _to_mbcs(vdata),
'vtype': registry.vtype_reverse[vtype], 'vtype': registry.vtype_reverse[vtype],
'success': True} 'success': True}
# Only convert text types to unicode
if vtype == win32con.REG_MULTI_SZ:
value['vdata'] = [_to_mbcs(i) for i in vdata]
elif vtype in [win32con.REG_SZ, win32con.REG_EXPAND_SZ]:
value['vdata'] = _to_mbcs(vdata)
else:
value['vdata'] = vdata
values.append(value) values.append(value)
except pywintypes.error as exc: # pylint: disable=E0602 except pywintypes.error as exc: # pylint: disable=E0602
log.debug(r'Cannot find key: %s\%s', hive, key, exc_info=True) log.debug(r'Cannot find key: %s\%s', hive, key, exc_info=True)
@ -314,6 +330,8 @@ def read_value(hive, key, vname=None, use_32bit_registry=False):
- HKEY_LOCAL_MACHINE or HKLM - HKEY_LOCAL_MACHINE or HKLM
- HKEY_CURRENT_USER or HKCU - HKEY_CURRENT_USER or HKCU
- HKEY_USER or HKU - HKEY_USER or HKU
- HKEY_CLASSES_ROOT or HKCR
- HKEY_CURRENT_CONFIG or HKCC
:param str key: The key (looks like a path) to the value name. :param str key: The key (looks like a path) to the value name.
@ -367,11 +385,14 @@ def read_value(hive, key, vname=None, use_32bit_registry=False):
# RegQueryValueEx returns and accepts unicode data # RegQueryValueEx returns and accepts unicode data
vdata, vtype = win32api.RegQueryValueEx(handle, local_vname) vdata, vtype = win32api.RegQueryValueEx(handle, local_vname)
if vdata or vdata in [0, '']: if vdata or vdata in [0, '']:
# Only convert text types to unicode
ret['vtype'] = registry.vtype_reverse[vtype] ret['vtype'] = registry.vtype_reverse[vtype]
if vtype == 7: if vtype == win32con.REG_MULTI_SZ:
ret['vdata'] = [_to_mbcs(i) for i in vdata] ret['vdata'] = [_to_mbcs(i) for i in vdata]
else: elif vtype in [win32con.REG_SZ, win32con.REG_EXPAND_SZ]:
ret['vdata'] = _to_mbcs(vdata) ret['vdata'] = _to_mbcs(vdata)
else:
ret['vdata'] = vdata
else: else:
ret['comment'] = 'Empty Value' ret['comment'] = 'Empty Value'
except WindowsError: # pylint: disable=E0602 except WindowsError: # pylint: disable=E0602
@ -408,6 +429,8 @@ def set_value(hive,
- HKEY_LOCAL_MACHINE or HKLM - HKEY_LOCAL_MACHINE or HKLM
- HKEY_CURRENT_USER or HKCU - HKEY_CURRENT_USER or HKCU
- HKEY_USER or HKU - HKEY_USER or HKU
- HKEY_CLASSES_ROOT or HKCR
- HKEY_CURRENT_CONFIG or HKCC
:param str key: The key (looks like a path) to the value name. :param str key: The key (looks like a path) to the value name.
@ -548,6 +571,8 @@ def delete_key_recursive(hive, key, use_32bit_registry=False):
- HKEY_LOCAL_MACHINE or HKLM - HKEY_LOCAL_MACHINE or HKLM
- HKEY_CURRENT_USER or HKCU - HKEY_CURRENT_USER or HKCU
- HKEY_USER or HKU - HKEY_USER or HKU
- HKEY_CLASSES_ROOT or HKCR
- HKEY_CURRENT_CONFIG or HKCC
:param key: The key to remove (looks like a path) :param key: The key to remove (looks like a path)
@ -645,6 +670,8 @@ def delete_value(hive, key, vname=None, use_32bit_registry=False):
- HKEY_LOCAL_MACHINE or HKLM - HKEY_LOCAL_MACHINE or HKLM
- HKEY_CURRENT_USER or HKCU - HKEY_CURRENT_USER or HKCU
- HKEY_USER or HKU - HKEY_USER or HKU
- HKEY_CLASSES_ROOT or HKCR
- HKEY_CURRENT_CONFIG or HKCC
:param str key: The key (looks like a path) to the value name. :param str key: The key (looks like a path) to the value name.

View File

@ -304,7 +304,7 @@ def list_update(name, download=False, install=False):
''' '''
salt.utils.versions.warn_until( salt.utils.versions.warn_until(
'Fluorine', 'Fluorine',
'This function is replaced by \'get\' as of Salt 2017.7.0. This' 'This function is replaced by \'get\' as of Salt 2017.7.0. This '
'warning will be removed in Salt Fluorine.') 'warning will be removed in Salt Fluorine.')
return get(name, download, install) return get(name, download, install)
@ -531,7 +531,7 @@ def list_updates(software=True,
''' '''
salt.utils.versions.warn_until( salt.utils.versions.warn_until(
'Fluorine', 'Fluorine',
'This function is replaced by \'list\' as of Salt 2017.7.0. This' 'This function is replaced by \'list\' as of Salt 2017.7.0. This '
'warning will be removed in Salt Fluorine.') 'warning will be removed in Salt Fluorine.')
return list(software, drivers, summary, skip_installed, categories, return list(software, drivers, summary, skip_installed, categories,
severities, download, install) severities, download, install)
@ -719,7 +719,7 @@ def download_update(name):
''' '''
salt.utils.versions.warn_until( salt.utils.versions.warn_until(
'Fluorine', 'Fluorine',
'This function is replaced by \'download\' as of Salt 2017.7.0. This' 'This function is replaced by \'download\' as of Salt 2017.7.0. This '
'warning will be removed in Salt Fluorine.') 'warning will be removed in Salt Fluorine.')
return download(name) return download(name)
@ -751,7 +751,7 @@ def download_updates(names):
''' '''
salt.utils.versions.warn_until( salt.utils.versions.warn_until(
'Fluorine', 'Fluorine',
'This function is replaced by \'download\' as of Salt 2017.7.0. This' 'This function is replaced by \'download\' as of Salt 2017.7.0. This '
'warning will be removed in Salt Fluorine.') 'warning will be removed in Salt Fluorine.')
return download(names) return download(names)
@ -839,7 +839,7 @@ def install_update(name):
''' '''
salt.utils.versions.warn_until( salt.utils.versions.warn_until(
'Fluorine', 'Fluorine',
'This function is replaced by \'install\' as of Salt 2017.7.0. This' 'This function is replaced by \'install\' as of Salt 2017.7.0. This '
'warning will be removed in Salt Fluorine.') 'warning will be removed in Salt Fluorine.')
return install(name) return install(name)
@ -870,7 +870,7 @@ def install_updates(names):
''' '''
salt.utils.versions.warn_until( salt.utils.versions.warn_until(
'Fluorine', 'Fluorine',
'This function is replaced by \'install\' as of Salt 2017.7.0. This' 'This function is replaced by \'install\' as of Salt 2017.7.0. This '
'warning will be removed in Salt Fluorine.') 'warning will be removed in Salt Fluorine.')
return install(names) return install(names)

View File

@ -107,7 +107,9 @@ def installed(name, version=None, source=None, force=False, pre_versions=False,
# Package installed # Package installed
else: else:
version_info = __salt__['chocolatey.version'](name, check_remote=True) version_info = __salt__['chocolatey.version'](name=name,
check_remote=True,
source=source)
full_name = name full_name = name
for pkg in version_info: for pkg in version_info:

View File

@ -2312,6 +2312,7 @@ def detached(name,
else: else:
# Clone repository # Clone repository
if os.path.isdir(target): if os.path.isdir(target):
target_contents = os.listdir(target)
if force_clone: if force_clone:
# Clone is required, and target directory exists, but the # Clone is required, and target directory exists, but the
# ``force`` option is enabled, so we need to clear out its # ``force`` option is enabled, so we need to clear out its
@ -2328,20 +2329,26 @@ def detached(name,
'place (force_clone=True set in git.detached state)', 'place (force_clone=True set in git.detached state)',
target, name target, name
) )
try: removal_errors = {}
if os.path.islink(target): for target_object in target_contents:
os.unlink(target) target_path = os.path.join(target, target_object)
else: try:
salt.utils.files.rm_rf(target) salt.utils.rm_rf(target_path)
except OSError as exc: except OSError as exc:
if exc.errno != errno.ENOENT:
removal_errors[target_path] = exc
if removal_errors:
err_strings = [
' {0}\n {1}'.format(k, v)
for k, v in six.iteritems(removal_errors)
]
return _fail( return _fail(
ret, ret,
'Unable to remove {0}: {1}'.format(target, exc), 'Unable to remove\n{0}'.format('\n'.join(err_strings)),
comments comments
) )
else: ret['changes']['forced clone'] = True
ret['changes']['forced clone'] = True elif target_contents:
elif os.listdir(target):
# Clone is required, but target dir exists and is non-empty. We # Clone is required, but target dir exists and is non-empty. We
# can't proceed. # can't proceed.
return _fail( return _fail(

View File

@ -37,11 +37,16 @@ class MacPkgutilModuleTest(ModuleCase):
if not salt.utils.path.which('pkgutil'): if not salt.utils.path.which('pkgutil'):
self.skipTest('Test requires pkgutil binary') self.skipTest('Test requires pkgutil binary')
os_release = self.run_function('grains.get', ['osrelease'])
self.pkg_name = 'com.apple.pkg.BaseSystemResources'
if int(os_release.split('.')[1]) >= 13 and salt.utils.is_darwin():
self.pkg_name = 'com.apple.pkg.iTunesX'
def tearDown(self): def tearDown(self):
''' '''
Reset to original settings Reset to original settings
''' '''
self.run_function('pkgutil.forget', ['org.macports.MacPorts']) self.run_function('pkgutil.forget', [TEST_PKG_NAME])
self.run_function('file.remove', ['/opt/local']) self.run_function('file.remove', ['/opt/local'])
def test_list(self): def test_list(self):
@ -49,7 +54,7 @@ class MacPkgutilModuleTest(ModuleCase):
Test pkgutil.list Test pkgutil.list
''' '''
self.assertIsInstance(self.run_function('pkgutil.list'), list) self.assertIsInstance(self.run_function('pkgutil.list'), list)
self.assertIn('com.apple.pkg.BaseSystemResources', self.assertIn(self.pkg_name,
self.run_function('pkgutil.list')) self.run_function('pkgutil.list'))
def test_is_installed(self): def test_is_installed(self):
@ -59,7 +64,7 @@ class MacPkgutilModuleTest(ModuleCase):
# Test Package is installed # Test Package is installed
self.assertTrue( self.assertTrue(
self.run_function('pkgutil.is_installed', self.run_function('pkgutil.is_installed',
['com.apple.pkg.BaseSystemResources'])) [self.pkg_name]))
# Test Package is not installed # Test Package is not installed
self.assertFalse( self.assertFalse(

View File

@ -173,7 +173,7 @@ class MacUserModuleTest(ModuleCase):
self.assertTrue(os.path.exists('/etc/kcpassword')) self.assertTrue(os.path.exists('/etc/kcpassword'))
# Are the contents of the file correct # Are the contents of the file correct
test_data = b'.\xf8\'B\xa0\xd9\xad\x8b\xcd\xcdl' test_data = b".\xc3\xb8'B\xc2\xa0\xc3\x99\xc2\xad\xc2\x8b\xc3\x8d\xc3\x8dl"
with salt.utils.files.fopen('/etc/kcpassword', 'rb') as f: with salt.utils.files.fopen('/etc/kcpassword', 'rb') as f:
file_data = f.read() file_data = f.read()
self.assertEqual(test_data, file_data) self.assertEqual(test_data, file_data)

View File

@ -27,6 +27,15 @@ class PkgModuleTest(ModuleCase, SaltReturnAssertsMixin):
if salt.utils.platform.is_windows(): if salt.utils.platform.is_windows():
self.run_function('pkg.refresh_db') self.run_function('pkg.refresh_db')
os_release = self.run_function('grains.get', ['osrelease'])
if salt.utils.is_darwin() and int(os_release.split('.')[1]) >= 13:
self.pkg = 'wget'
elif salt.utils.is_windows():
self.pkg = 'putty'
else:
self.pkg = 'htop'
def test_list(self): def test_list(self):
''' '''
verify that packages are installed verify that packages are installed
@ -133,30 +142,18 @@ class PkgModuleTest(ModuleCase, SaltReturnAssertsMixin):
''' '''
successfully install and uninstall a package successfully install and uninstall a package
''' '''
os_grain = self.run_function('grains.item', ['os'])['os'] version = self.run_function('pkg.version', [self.pkg])
os_release = self.run_function('grains.item', ['osrelease'])['osrelease']
pkg = 'htop'
if os_grain == 'Windows':
pkg = 'putty'
version = self.run_function('pkg.version', [pkg])
if os_grain == 'Ubuntu':
if os_release.startswith('12.'):
self.skipTest('pkg.install and pkg.remove do not work on ubuntu '
'12 when run from the test suite')
def test_install(): def test_install():
install_ret = self.run_function('pkg.install', [pkg]) install_ret = self.run_function('pkg.install', [self.pkg])
self.assertIn(pkg, install_ret) self.assertIn(self.pkg, install_ret)
def test_remove(): def test_remove():
remove_ret = self.run_function('pkg.remove', [pkg]) remove_ret = self.run_function('pkg.remove', [self.pkg])
self.assertIn(pkg, remove_ret) self.assertIn(self.pkg, remove_ret)
if version and isinstance(version, dict): if version and isinstance(version, dict):
version = version[pkg] version = version[self.pkg]
if version: if version:
test_remove() test_remove()
@ -172,15 +169,10 @@ class PkgModuleTest(ModuleCase, SaltReturnAssertsMixin):
''' '''
test holding and unholding a package test holding and unholding a package
''' '''
pkg = 'htop'
os_family = self.run_function('grains.item', ['os_family'])['os_family'] os_family = self.run_function('grains.item', ['os_family'])['os_family']
os_major_release = self.run_function('grains.item', ['osmajorrelease'])['osmajorrelease'] os_major_release = self.run_function('grains.item', ['osmajorrelease'])['osmajorrelease']
available = self.run_function('sys.doc', ['pkg.hold']) available = self.run_function('sys.doc', ['pkg.hold'])
if os_family == 'RedHat':
if os_major_release == '5':
self.skipTest('`yum versionlock` does not seem to work on RHEL/CentOS 5')
if available: if available:
if os_family == 'RedHat': if os_family == 'RedHat':
lock_pkg = 'yum-versionlock' if os_major_release == '5' else 'yum-plugin-versionlock' lock_pkg = 'yum-versionlock' if os_major_release == '5' else 'yum-plugin-versionlock'
@ -188,13 +180,13 @@ class PkgModuleTest(ModuleCase, SaltReturnAssertsMixin):
if not versionlock: if not versionlock:
self.run_function('pkg.install', [lock_pkg]) self.run_function('pkg.install', [lock_pkg])
hold_ret = self.run_function('pkg.hold', [pkg]) hold_ret = self.run_function('pkg.hold', [self.pkg])
self.assertIn(pkg, hold_ret) self.assertIn(self.pkg, hold_ret)
self.assertTrue(hold_ret[pkg]['result']) self.assertTrue(hold_ret[self.pkg]['result'])
unhold_ret = self.run_function('pkg.unhold', [pkg]) unhold_ret = self.run_function('pkg.unhold', [self.pkg])
self.assertIn(pkg, unhold_ret) self.assertIn(self.pkg, unhold_ret)
self.assertTrue(hold_ret[pkg]['result']) self.assertTrue(hold_ret[self.pkg]['result'])
if os_family == 'RedHat': if os_family == 'RedHat':
if not versionlock: if not versionlock:

View File

@ -20,6 +20,7 @@ class ServiceModuleTest(ModuleCase):
self.service_name = 'cron' self.service_name = 'cron'
cmd_name = 'crontab' cmd_name = 'crontab'
os_family = self.run_function('grains.get', ['os_family']) os_family = self.run_function('grains.get', ['os_family'])
os_release = self.run_function('grains.get', ['osrelease'])
if os_family == 'RedHat': if os_family == 'RedHat':
self.service_name = 'crond' self.service_name = 'crond'
elif os_family == 'Arch': elif os_family == 'Arch':
@ -27,6 +28,8 @@ class ServiceModuleTest(ModuleCase):
cmd_name = 'systemctl' cmd_name = 'systemctl'
elif os_family == 'MacOS': elif os_family == 'MacOS':
self.service_name = 'org.ntp.ntpd' self.service_name = 'org.ntp.ntpd'
if int(os_release.split('.')[1]) >= 13:
self.service_name = 'com.apple.AirPlayXPCHelper'
if salt.utils.path.which(cmd_name) is None: if salt.utils.path.which(cmd_name) is None:
self.skipTest('{0} is not installed'.format(cmd_name)) self.skipTest('{0} is not installed'.format(cmd_name))

View File

@ -26,6 +26,7 @@ class ServiceTest(ModuleCase, SaltReturnAssertsMixin):
self.service_name = 'cron' self.service_name = 'cron'
cmd_name = 'crontab' cmd_name = 'crontab'
os_family = self.run_function('grains.get', ['os_family']) os_family = self.run_function('grains.get', ['os_family'])
os_release = self.run_function('grains.get', ['osrelease'])
self.stopped = False self.stopped = False
self.running = True self.running = True
if os_family == 'RedHat': if os_family == 'RedHat':
@ -35,6 +36,8 @@ class ServiceTest(ModuleCase, SaltReturnAssertsMixin):
cmd_name = 'systemctl' cmd_name = 'systemctl'
elif os_family == 'MacOS': elif os_family == 'MacOS':
self.service_name = 'org.ntp.ntpd' self.service_name = 'org.ntp.ntpd'
if int(os_release.split('.')[1]) >= 13:
self.service_name = 'com.apple.AirPlayXPCHelper'
self.stopped = '' self.stopped = ''
self.running = '[0-9]' self.running = '[0-9]'

View File

@ -457,10 +457,7 @@ class SaltTestingParser(optparse.OptionParser):
logging_level = logging.INFO logging_level = logging.INFO
else: else:
logging_level = logging.ERROR logging_level = logging.ERROR
if salt.utils.platform.is_windows(): os.environ['TESTS_LOG_LEVEL'] = str(self.options.verbosity) # future lint: disable=blacklisted-function
os.environ['TESTS_LOG_LEVEL'] = six.binary_type(self.options.verbosity)
else:
os.environ['TESTS_LOG_LEVEL'] = six.text_type(self.options.verbosity)
consolehandler.setLevel(logging_level) consolehandler.setLevel(logging_level)
logging.root.addHandler(consolehandler) logging.root.addHandler(consolehandler)
log.info('Runtests logging has been setup') log.info('Runtests logging has been setup')

View File

@ -132,8 +132,9 @@ def _has_required_moto():
@skipIf(HAS_MOTO is False, 'The moto module must be installed.') @skipIf(HAS_MOTO is False, 'The moto module must be installed.')
@skipIf(_has_required_boto() is False, 'The boto module must be greater than' @skipIf(_has_required_boto() is False, 'The boto module must be greater than'
' or equal to version {}. Installed: {}' ' or equal to version {}. Installed: {}'
.format(required_boto_version, _get_boto_version())) .format(required_boto_version, _get_boto_version() if HAS_BOTO else 'None'))
@skipIf(_has_required_moto() is False, 'The moto version must be >= to version {}. Installed: {}'.format(required_moto_version, _get_moto_version())) @skipIf(_has_required_moto() is False, 'The moto version must be >= to version {}. Installed: {}'
.format(required_moto_version, _get_moto_version() if HAS_MOTO else 'None'))
class BotoVpcTestCaseBase(TestCase, LoaderModuleMockMixin): class BotoVpcTestCaseBase(TestCase, LoaderModuleMockMixin):
conn3 = None conn3 = None

View File

@ -221,7 +221,7 @@ class CMDMODTestCase(TestCase, LoaderModuleMockMixin):
with patch('salt.utils.platform.is_windows', MagicMock(return_value=False)): with patch('salt.utils.platform.is_windows', MagicMock(return_value=False)):
with patch('os.path.isfile', MagicMock(return_value=True)): with patch('os.path.isfile', MagicMock(return_value=True)):
with patch('os.access', MagicMock(return_value=True)): with patch('os.access', MagicMock(return_value=True)):
ret = cmdmod._run('foo', use_vt=True).get('stderr') ret = cmdmod._run('foo', cwd=os.getcwd(), use_vt=True).get('stderr')
self.assertIn('foo', ret) self.assertIn('foo', ret)
def test_is_valid_shell_windows(self): def test_is_valid_shell_windows(self):