mirror of
https://github.com/valitydev/salt.git
synced 2024-11-06 16:45:27 +00:00
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:
commit
0ad101d560
@ -158,6 +158,7 @@ MOCK_MODULES = [
|
||||
'jnpr.junos.utils.sw',
|
||||
'dns',
|
||||
'dns.resolver',
|
||||
'keyring',
|
||||
'netaddr',
|
||||
'netaddr.IPAddress',
|
||||
'netaddr.core',
|
||||
@ -199,6 +200,8 @@ def mock_decorator_with_params(*oargs, **okwargs):
|
||||
|
||||
# Define a fake version attribute for the following libs.
|
||||
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['ntsecuritycon'].STANDARD_RIGHTS_REQUIRED = 0
|
||||
sys.modules['ntsecuritycon'].SYNCHRONIZE = 0
|
||||
|
@ -1,6 +1,6 @@
|
||||
.\" 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
|
||||
salt-api \- salt-api Command
|
||||
.
|
||||
@ -103,12 +103,10 @@ Logfile logging log level. One of \fBall\fP, \fBgarbage\fP, \fBtrace\fP,
|
||||
.UNINDENT
|
||||
.SH SEE ALSO
|
||||
.sp
|
||||
\fIsalt\-api(7)\fP
|
||||
\fIsalt(7)\fP
|
||||
\fIsalt\-master(1)\fP
|
||||
\fBsalt\-api(7)\fP
|
||||
\fBsalt(7)\fP
|
||||
\fBsalt\-master(1)\fP
|
||||
.SH AUTHOR
|
||||
Thomas S. Hatch <thatch45@gmail.com> and many others, please see the Authors file
|
||||
.SH COPYRIGHT
|
||||
2016 SaltStack, Inc.
|
||||
.\" Generated by docutils manpage writer.
|
||||
.
|
||||
|
@ -1,6 +1,6 @@
|
||||
.\" 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
|
||||
salt-call \- salt-call Documentation
|
||||
.
|
||||
@ -227,6 +227,11 @@ Write the output to the specified file.
|
||||
.UNINDENT
|
||||
.INDENT 0.0
|
||||
.TP
|
||||
.B \-\-out\-file\-append, \-\-output\-file\-append
|
||||
Append the output to the specified file.
|
||||
.UNINDENT
|
||||
.INDENT 0.0
|
||||
.TP
|
||||
.B \-\-no\-color
|
||||
Disable all colored output
|
||||
.UNINDENT
|
||||
@ -245,14 +250,25 @@ changes and success and \fByellow\fP denotes a expected future change in configu
|
||||
.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
|
||||
.sp
|
||||
\fIsalt(1)\fP
|
||||
\fIsalt\-master(1)\fP
|
||||
\fIsalt\-minion(1)\fP
|
||||
\fBsalt(1)\fP
|
||||
\fBsalt\-master(1)\fP
|
||||
\fBsalt\-minion(1)\fP
|
||||
.SH AUTHOR
|
||||
Thomas S. Hatch <thatch45@gmail.com> and many others, please see the Authors file
|
||||
.SH COPYRIGHT
|
||||
2016 SaltStack, Inc.
|
||||
.\" Generated by docutils manpage writer.
|
||||
.
|
||||
|
@ -1,6 +1,6 @@
|
||||
.\" 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
|
||||
salt-cloud \- Salt Cloud Command
|
||||
.
|
||||
@ -276,6 +276,11 @@ Write the output to the specified file.
|
||||
.UNINDENT
|
||||
.INDENT 0.0
|
||||
.TP
|
||||
.B \-\-out\-file\-append, \-\-output\-file\-append
|
||||
Append the output to the specified file.
|
||||
.UNINDENT
|
||||
.INDENT 0.0
|
||||
.TP
|
||||
.B \-\-no\-color
|
||||
Disable all colored output
|
||||
.UNINDENT
|
||||
@ -294,6 +299,19 @@ changes and success and \fByellow\fP denotes a expected future change in configu
|
||||
.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
|
||||
.sp
|
||||
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
|
||||
.SH SEE ALSO
|
||||
.sp
|
||||
\fIsalt\-cloud(7)\fP
|
||||
\fIsalt(7)\fP
|
||||
\fIsalt\-master(1)\fP
|
||||
\fIsalt\-minion(1)\fP
|
||||
\fBsalt\-cloud(7)\fP
|
||||
\fBsalt(7)\fP
|
||||
\fBsalt\-master(1)\fP
|
||||
\fBsalt\-minion(1)\fP
|
||||
.SH AUTHOR
|
||||
Thomas S. Hatch <thatch45@gmail.com> and many others, please see the Authors file
|
||||
.SH COPYRIGHT
|
||||
2016 SaltStack, Inc.
|
||||
.\" Generated by docutils manpage writer.
|
||||
.
|
||||
|
@ -1,6 +1,6 @@
|
||||
.\" 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
|
||||
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
|
||||
..
|
||||
.sp
|
||||
Copy a file to a set of systems
|
||||
Copy a file or files to one or more minions
|
||||
.SH SYNOPSIS
|
||||
.INDENT 0.0
|
||||
.INDENT 3.5
|
||||
.sp
|
||||
.nf
|
||||
.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
|
||||
.fi
|
||||
.UNINDENT
|
||||
.UNINDENT
|
||||
.SH DESCRIPTION
|
||||
.sp
|
||||
Salt copy copies a local file out to all of the Salt minions matched by the
|
||||
given target.
|
||||
salt\-cp copies files from the master to all of the Salt minions matched by the
|
||||
specified target expression.
|
||||
.sp
|
||||
Salt copy is only intended for use with small files (< 100KB). If you need
|
||||
to copy large files out to minions please use the cp.get_file function.
|
||||
.sp
|
||||
Note: salt\-cp uses salt\(aqs publishing mechanism. This means the privacy of the
|
||||
\fBNOTE:\fP
|
||||
.INDENT 0.0
|
||||
.INDENT 3.5
|
||||
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
|
||||
in use. In addition, if the salt\-master is running with debug logging it is
|
||||
possible that the contents of the file will be logged to disk.
|
||||
in use. In addition, if the master or minion is running with debug logging,
|
||||
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
|
||||
.INDENT 0.0
|
||||
.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
|
||||
location of the range server is referenced in the master configuration
|
||||
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
|
||||
.SH SEE ALSO
|
||||
.sp
|
||||
\fIsalt(1)\fP
|
||||
\fIsalt\-master(1)\fP
|
||||
\fIsalt\-minion(1)\fP
|
||||
\fBsalt(1)\fP
|
||||
\fBsalt\-master(1)\fP
|
||||
\fBsalt\-minion(1)\fP
|
||||
.SH AUTHOR
|
||||
Thomas S. Hatch <thatch45@gmail.com> and many others, please see the Authors file
|
||||
.SH COPYRIGHT
|
||||
2016 SaltStack, Inc.
|
||||
.\" Generated by docutils manpage writer.
|
||||
.
|
||||
|
@ -1,6 +1,6 @@
|
||||
.\" 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
|
||||
salt-key \- salt-key Documentation
|
||||
.
|
||||
@ -182,6 +182,11 @@ Write the output to the specified file.
|
||||
.UNINDENT
|
||||
.INDENT 0.0
|
||||
.TP
|
||||
.B \-\-out\-file\-append, \-\-output\-file\-append
|
||||
Append the output to the specified file.
|
||||
.UNINDENT
|
||||
.INDENT 0.0
|
||||
.TP
|
||||
.B \-\-no\-color
|
||||
Disable all colored output
|
||||
.UNINDENT
|
||||
@ -200,6 +205,19 @@ changes and success and \fByellow\fP denotes a expected future change in configu
|
||||
.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
|
||||
.INDENT 0.0
|
||||
.TP
|
||||
@ -322,12 +340,10 @@ Auto\-create a signing key\-pair if it does not yet exist
|
||||
.UNINDENT
|
||||
.SH SEE ALSO
|
||||
.sp
|
||||
\fIsalt(7)\fP
|
||||
\fIsalt\-master(1)\fP
|
||||
\fIsalt\-minion(1)\fP
|
||||
\fBsalt(7)\fP
|
||||
\fBsalt\-master(1)\fP
|
||||
\fBsalt\-minion(1)\fP
|
||||
.SH AUTHOR
|
||||
Thomas S. Hatch <thatch45@gmail.com> and many others, please see the Authors file
|
||||
.SH COPYRIGHT
|
||||
2016 SaltStack, Inc.
|
||||
.\" Generated by docutils manpage writer.
|
||||
.
|
||||
|
@ -1,6 +1,6 @@
|
||||
.\" 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
|
||||
salt-master \- salt-master Documentation
|
||||
.
|
||||
@ -108,12 +108,10 @@ Logfile logging log level. One of \fBall\fP, \fBgarbage\fP, \fBtrace\fP,
|
||||
.UNINDENT
|
||||
.SH SEE ALSO
|
||||
.sp
|
||||
\fIsalt(1)\fP
|
||||
\fIsalt(7)\fP
|
||||
\fIsalt\-minion(1)\fP
|
||||
\fBsalt(1)\fP
|
||||
\fBsalt(7)\fP
|
||||
\fBsalt\-minion(1)\fP
|
||||
.SH AUTHOR
|
||||
Thomas S. Hatch <thatch45@gmail.com> and many others, please see the Authors file
|
||||
.SH COPYRIGHT
|
||||
2016 SaltStack, Inc.
|
||||
.\" Generated by docutils manpage writer.
|
||||
.
|
||||
|
@ -1,6 +1,6 @@
|
||||
.\" 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
|
||||
salt-minion \- salt-minion Documentation
|
||||
.
|
||||
@ -109,12 +109,10 @@ Logfile logging log level. One of \fBall\fP, \fBgarbage\fP, \fBtrace\fP,
|
||||
.UNINDENT
|
||||
.SH SEE ALSO
|
||||
.sp
|
||||
\fIsalt(1)\fP
|
||||
\fIsalt(7)\fP
|
||||
\fIsalt\-master(1)\fP
|
||||
\fBsalt(1)\fP
|
||||
\fBsalt(7)\fP
|
||||
\fBsalt\-master(1)\fP
|
||||
.SH AUTHOR
|
||||
Thomas S. Hatch <thatch45@gmail.com> and many others, please see the Authors file
|
||||
.SH COPYRIGHT
|
||||
2016 SaltStack, Inc.
|
||||
.\" Generated by docutils manpage writer.
|
||||
.
|
||||
|
@ -1,6 +1,6 @@
|
||||
.\" 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
|
||||
salt-proxy \- salt-proxy Documentation
|
||||
.
|
||||
@ -116,13 +116,11 @@ Logfile logging log level. One of \fBall\fP, \fBgarbage\fP, \fBtrace\fP,
|
||||
.UNINDENT
|
||||
.SH SEE ALSO
|
||||
.sp
|
||||
\fIsalt(1)\fP
|
||||
\fIsalt(7)\fP
|
||||
\fIsalt\-master(1)\fP
|
||||
\fIsalt\-minion(1)\fP
|
||||
\fBsalt(1)\fP
|
||||
\fBsalt(7)\fP
|
||||
\fBsalt\-master(1)\fP
|
||||
\fBsalt\-minion(1)\fP
|
||||
.SH AUTHOR
|
||||
Thomas S. Hatch <thatch45@gmail.com> and many others, please see the Authors file
|
||||
.SH COPYRIGHT
|
||||
2016 SaltStack, Inc.
|
||||
.\" Generated by docutils manpage writer.
|
||||
.
|
||||
|
@ -1,6 +1,6 @@
|
||||
.\" 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
|
||||
salt-run \- salt-run Documentation
|
||||
.
|
||||
@ -114,12 +114,10 @@ Logfile logging log level. One of \fBall\fP, \fBgarbage\fP, \fBtrace\fP,
|
||||
.UNINDENT
|
||||
.SH SEE ALSO
|
||||
.sp
|
||||
\fIsalt(1)\fP
|
||||
\fIsalt\-master(1)\fP
|
||||
\fIsalt\-minion(1)\fP
|
||||
\fBsalt(1)\fP
|
||||
\fBsalt\-master(1)\fP
|
||||
\fBsalt\-minion(1)\fP
|
||||
.SH AUTHOR
|
||||
Thomas S. Hatch <thatch45@gmail.com> and many others, please see the Authors file
|
||||
.SH COPYRIGHT
|
||||
2016 SaltStack, Inc.
|
||||
.\" Generated by docutils manpage writer.
|
||||
.
|
||||
|
@ -1,6 +1,6 @@
|
||||
.\" 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
|
||||
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
|
||||
.INDENT 0.0
|
||||
.TP
|
||||
.B \-r, \-\-raw, \-\-raw\-shell
|
||||
Execute a raw shell command.
|
||||
.B \-\-version
|
||||
Print the version of Salt that is running.
|
||||
.UNINDENT
|
||||
.INDENT 0.0
|
||||
.TP
|
||||
.B \-\-priv
|
||||
Specify the SSH private key file to be used for authentication.
|
||||
.B \-\-versions\-report
|
||||
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
|
||||
.INDENT 0.0
|
||||
.TP
|
||||
@ -90,9 +112,74 @@ is 25.
|
||||
.UNINDENT
|
||||
.INDENT 0.0
|
||||
.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
|
||||
Disables StrictHostKeyChecking to relax acceptance of new and unknown
|
||||
host keys.
|
||||
By default ssh host keys are honored and connections will ask for
|
||||
approval. Use this option to disable StrictHostKeyChecking.
|
||||
.UNINDENT
|
||||
.INDENT 0.0
|
||||
.TP
|
||||
@ -103,11 +190,22 @@ changed and would still error with \-\-ignore\-host\-keys.
|
||||
.UNINDENT
|
||||
.INDENT 0.0
|
||||
.TP
|
||||
.B \-\-user=SSH_USER
|
||||
Set the default user to attempt to use when authenticating.
|
||||
.UNINDENT
|
||||
.INDENT 0.0
|
||||
.TP
|
||||
.B \-\-passwd
|
||||
Set the default password to attempt to use when authenticating.
|
||||
.UNINDENT
|
||||
.INDENT 0.0
|
||||
.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
|
||||
Set this flag to attempt to deploy the authorized ssh key with all
|
||||
minions. This combined with \-\-passwd can make initial deployment of keys
|
||||
@ -115,35 +213,25 @@ very fast and easy.
|
||||
.UNINDENT
|
||||
.INDENT 0.0
|
||||
.TP
|
||||
.B \-\-version
|
||||
Print the version of Salt that is running.
|
||||
.B \-\-identities\-only
|
||||
Use the only authentication identity files configured in the ssh_config
|
||||
files. See IdentitiesOnly flag in man ssh_config.
|
||||
.UNINDENT
|
||||
.INDENT 0.0
|
||||
.TP
|
||||
.B \-\-versions\-report
|
||||
Show program\(aqs dependencies and version number, and then exit
|
||||
.B \-\-sudo
|
||||
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
|
||||
.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
|
||||
.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.
|
||||
.B \-\-scan\-timeout=SSH_SCAN_TIMEOUT
|
||||
Scanning socket timeout for the scan roster.
|
||||
.UNINDENT
|
||||
.SS Logging Options
|
||||
.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:
|
||||
\fBwarning\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
|
||||
.SS Output Options
|
||||
.INDENT 0.0
|
||||
.TP
|
||||
@ -212,6 +310,11 @@ Write the output to the specified file.
|
||||
.UNINDENT
|
||||
.INDENT 0.0
|
||||
.TP
|
||||
.B \-\-out\-file\-append, \-\-output\-file\-append
|
||||
Append the output to the specified file.
|
||||
.UNINDENT
|
||||
.INDENT 0.0
|
||||
.TP
|
||||
.B \-\-no\-color
|
||||
Disable all colored output
|
||||
.UNINDENT
|
||||
@ -230,14 +333,25 @@ changes and success and \fByellow\fP denotes a expected future change in configu
|
||||
.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
|
||||
.sp
|
||||
\fIsalt(7)\fP
|
||||
\fIsalt\-master(1)\fP
|
||||
\fIsalt\-minion(1)\fP
|
||||
\fBsalt(7)\fP
|
||||
\fBsalt\-master(1)\fP
|
||||
\fBsalt\-minion(1)\fP
|
||||
.SH AUTHOR
|
||||
Thomas S. Hatch <thatch45@gmail.com> and many others, please see the Authors file
|
||||
.SH COPYRIGHT
|
||||
2016 SaltStack, Inc.
|
||||
.\" Generated by docutils manpage writer.
|
||||
.
|
||||
|
@ -1,6 +1,6 @@
|
||||
.\" 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
|
||||
salt-syndic \- salt-syndic Documentation
|
||||
.
|
||||
@ -110,12 +110,10 @@ Logfile logging log level. One of \fBall\fP, \fBgarbage\fP, \fBtrace\fP,
|
||||
.UNINDENT
|
||||
.SH SEE ALSO
|
||||
.sp
|
||||
\fIsalt(1)\fP
|
||||
\fIsalt\-master(1)\fP
|
||||
\fIsalt\-minion(1)\fP
|
||||
\fBsalt(1)\fP
|
||||
\fBsalt\-master(1)\fP
|
||||
\fBsalt\-minion(1)\fP
|
||||
.SH AUTHOR
|
||||
Thomas S. Hatch <thatch45@gmail.com> and many others, please see the Authors file
|
||||
.SH COPYRIGHT
|
||||
2016 SaltStack, Inc.
|
||||
.\" Generated by docutils manpage writer.
|
||||
.
|
||||
|
@ -1,6 +1,6 @@
|
||||
.\" 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
|
||||
salt-unity \- salt-unity Command
|
||||
.
|
||||
@ -50,20 +50,18 @@ invokes that script.
|
||||
.SH OPTIONS
|
||||
.SH SEE ALSO
|
||||
.sp
|
||||
\fIsalt\-api(1)\fP
|
||||
\fIsalt\-call(1)\fP
|
||||
\fIsalt\-cloud(1)\fP
|
||||
\fIsalt\-cp(1)\fP
|
||||
\fIsalt\-key(1)\fP
|
||||
\fIsalt\-main(1)\fP
|
||||
\fIsalt\-master(1)\fP
|
||||
\fIsalt\-minion(1)\fP
|
||||
\fIsalt\-run(1)\fP
|
||||
\fIsalt\-ssh(1)\fP
|
||||
\fIsalt\-syndic(1)\fP
|
||||
\fBsalt\-api(1)\fP
|
||||
\fBsalt\-call(1)\fP
|
||||
\fBsalt\-cloud(1)\fP
|
||||
\fBsalt\-cp(1)\fP
|
||||
\fBsalt\-key(1)\fP
|
||||
\fBsalt\-main(1)\fP
|
||||
\fBsalt\-master(1)\fP
|
||||
\fBsalt\-minion(1)\fP
|
||||
\fBsalt\-run(1)\fP
|
||||
\fBsalt\-ssh(1)\fP
|
||||
\fBsalt\-syndic(1)\fP
|
||||
.SH AUTHOR
|
||||
Thomas S. Hatch <thatch45@gmail.com> and many others, please see the Authors file
|
||||
.SH COPYRIGHT
|
||||
2016 SaltStack, Inc.
|
||||
.\" Generated by docutils manpage writer.
|
||||
.
|
||||
|
@ -1,6 +1,6 @@
|
||||
.\" 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
|
||||
salt \- salt
|
||||
.
|
||||
@ -306,6 +306,11 @@ Write the output to the specified file.
|
||||
.UNINDENT
|
||||
.INDENT 0.0
|
||||
.TP
|
||||
.B \-\-out\-file\-append, \-\-output\-file\-append
|
||||
Append the output to the specified file.
|
||||
.UNINDENT
|
||||
.INDENT 0.0
|
||||
.TP
|
||||
.B \-\-no\-color
|
||||
Disable all colored output
|
||||
.UNINDENT
|
||||
@ -324,14 +329,25 @@ changes and success and \fByellow\fP denotes a expected future change in configu
|
||||
.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
|
||||
.sp
|
||||
\fIsalt(7)\fP
|
||||
\fIsalt\-master(1)\fP
|
||||
\fIsalt\-minion(1)\fP
|
||||
\fBsalt(7)\fP
|
||||
\fBsalt\-master(1)\fP
|
||||
\fBsalt\-minion(1)\fP
|
||||
.SH AUTHOR
|
||||
Thomas S. Hatch <thatch45@gmail.com> and many others, please see the Authors file
|
||||
.SH COPYRIGHT
|
||||
2016 SaltStack, Inc.
|
||||
.\" Generated by docutils manpage writer.
|
||||
.
|
||||
|
134372
doc/man/salt.7
134372
doc/man/salt.7
File diff suppressed because it is too large
Load Diff
@ -1,6 +1,6 @@
|
||||
.\" 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
|
||||
spm \- Salt Package Manager Command
|
||||
.
|
||||
@ -132,12 +132,10 @@ in that directory which describes them.
|
||||
.UNINDENT
|
||||
.SH SEE ALSO
|
||||
.sp
|
||||
\fIsalt(1)\fP
|
||||
\fIsalt\-master(1)\fP
|
||||
\fIsalt\-minion(1)\fP
|
||||
\fBsalt(1)\fP
|
||||
\fBsalt\-master(1)\fP
|
||||
\fBsalt\-minion(1)\fP
|
||||
.SH AUTHOR
|
||||
Thomas S. Hatch <thatch45@gmail.com> and many others, please see the Authors file
|
||||
.SH COPYRIGHT
|
||||
2016 SaltStack, Inc.
|
||||
.\" Generated by docutils manpage writer.
|
||||
.
|
||||
|
@ -3044,6 +3044,27 @@ the metadata will be refreshed.
|
||||
|
||||
.. _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
|
||||
================================================
|
||||
|
||||
@ -3087,19 +3108,6 @@ out for 2015.8.0 and later minions.
|
||||
|
||||
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:: win_repo_cachefile
|
||||
|
||||
|
@ -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
|
||||
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
|
||||
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
|
||||
__: https://github.com/saltstack-formulas/php-formula/blob/82e2cd3a/php/ng/files/php.ini
|
||||
.. _`Nginx vhosts`: https://github.com/saltstack-formulas/nginx-formula/blob/5cad4512/nginx/ng/vhosts_config.sls
|
||||
.. _`php.ini`: https://github.com/saltstack-formulas/php-formula/blob/82e2cd3a/php/ng/files/php.ini
|
||||
|
||||
Environment specific information
|
||||
................................
|
||||
|
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
@ -13,6 +13,12 @@ to ``tcp`` on each Salt minion and Salt master.
|
||||
|
||||
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
|
||||
=============
|
||||
This implementation over TCP focuses on flexibility over absolute efficiency.
|
||||
|
@ -386,8 +386,8 @@ If Exist "%BinDir%\Lib\site-packages\salt\modules\solaris*"^
|
||||
del /Q "%BinDir%\Lib\site-packages\salt\modules\solaris*" 1>nul
|
||||
If Exist "%BinDir%\Lib\site-packages\salt\modules\solr.py"^
|
||||
del /Q "%BinDir%\Lib\site-packages\salt\modules\solr.*" 1>nul
|
||||
If Exist "%BinDir%\Lib\site-packages\salt\modules\ssh*"^
|
||||
del /Q "%BinDir%\Lib\site-packages\salt\modules\ssh*" 1>nul
|
||||
If Exist "%BinDir%\Lib\site-packages\salt\modules\ssh_*"^
|
||||
del /Q "%BinDir%\Lib\site-packages\salt\modules\ssh_*" 1>nul
|
||||
If Exist "%BinDir%\Lib\site-packages\salt\modules\supervisord.py"^
|
||||
del /Q "%BinDir%\Lib\site-packages\salt\modules\supervisord.*" 1>nul
|
||||
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
|
||||
If Exist "%BinDir%\Lib\site-packages\salt\states\snapper.py"^
|
||||
del /Q "%BinDir%\Lib\site-packages\salt\states\snapper.*" 1>nul
|
||||
If Exist "%BinDir%\Lib\site-packages\salt\states\ssh*"^
|
||||
del /Q "%BinDir%\Lib\site-packages\salt\states\ssh*" 1>nul
|
||||
If Exist "%BinDir%\Lib\site-packages\salt\states\ssh_*"^
|
||||
del /Q "%BinDir%\Lib\site-packages\salt\states\ssh_*" 1>nul
|
||||
If Exist "%BinDir%\Lib\site-packages\salt\states\supervisord.py"^
|
||||
del /Q "%BinDir%\Lib\site-packages\salt\states\supervisord.*" 1>nul
|
||||
If Exist "%BinDir%\Lib\site-packages\salt\states\sysrc.py"^
|
||||
|
@ -212,7 +212,7 @@ def prep_trans_tar(opts, file_client, chunks, file_refs, pillar=None, id_=None,
|
||||
os.makedirs(env_root)
|
||||
for ref in file_refs[saltenv]:
|
||||
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)
|
||||
try:
|
||||
path = file_client.cache_file(name, saltenv, cachedir=cachedir)
|
||||
|
@ -70,7 +70,10 @@ def start(address=None, port=5000, ssl_crt=None, ssl_key=None):
|
||||
def post(self, tag): # pylint: disable=arguments-differ
|
||||
body = self.request.body
|
||||
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)
|
||||
|
||||
application = tornado.web.Application([(r"/(.*)", WebHook), ])
|
||||
|
@ -2931,9 +2931,8 @@ def shell_info(shell, list_modules=False):
|
||||
'HKEY_LOCAL_MACHINE',
|
||||
'Software\\Microsoft\\PowerShell\\{0}'.format(reg_ver),
|
||||
'Install')
|
||||
if 'vtype' in install_data and \
|
||||
install_data['vtype'] == 'REG_DWORD' and \
|
||||
install_data['vdata'] == 1:
|
||||
if install_data.get('vtype') == 'REG_DWORD' and \
|
||||
install_data.get('vdata') == 1:
|
||||
details = __salt__['reg.list_values'](
|
||||
'HKEY_LOCAL_MACHINE',
|
||||
'Software\\Microsoft\\PowerShell\\{0}\\'
|
||||
|
@ -6,6 +6,7 @@ from __future__ import absolute_import, print_function, unicode_literals
|
||||
|
||||
# Import python libs
|
||||
import copy
|
||||
import glob
|
||||
import logging
|
||||
import os
|
||||
import re
|
||||
@ -245,13 +246,17 @@ def _git_run(command, cwd=None, user=None, password=None, identity=None,
|
||||
)
|
||||
tmp_ssh_wrapper = None
|
||||
if salt.utils.platform.is_windows():
|
||||
for suffix in ('', ' (x86)'):
|
||||
ssh_exe = (
|
||||
'C:\\Program Files{0}\\Git\\bin\\ssh.exe'
|
||||
.format(suffix)
|
||||
)
|
||||
if os.path.isfile(ssh_exe):
|
||||
env['GIT_SSH_EXE'] = ssh_exe
|
||||
# Known locations for Git's ssh.exe in Windows
|
||||
globmasks = [os.path.join(os.getenv('SystemDrive'), os.sep,
|
||||
'Program Files*', 'Git', 'usr', 'bin',
|
||||
'ssh.exe'),
|
||||
os.path.join(os.getenv('SystemDrive'), os.sep,
|
||||
'Program Files*', 'Git', 'bin',
|
||||
'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
|
||||
else:
|
||||
raise CommandExecutionError(
|
||||
|
@ -1348,5 +1348,5 @@ def owner(*paths, **kwargs): # pylint: disable=unused-argument
|
||||
else:
|
||||
ret[path] = ''
|
||||
if len(ret) == 1:
|
||||
return six.itervalues(ret)
|
||||
return next(six.itervalues(ret))
|
||||
return ret
|
||||
|
@ -442,7 +442,7 @@ def refresh_db(root=None):
|
||||
|
||||
def install(name=None,
|
||||
refresh=False,
|
||||
sysupgrade=False,
|
||||
sysupgrade=None,
|
||||
pkgs=None,
|
||||
sources=None,
|
||||
**kwargs):
|
||||
@ -482,7 +482,8 @@ def install(name=None,
|
||||
|
||||
sysupgrade
|
||||
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:
|
||||
|
||||
@ -520,9 +521,6 @@ def install(name=None,
|
||||
{'<package>': {'old': '<old-version>',
|
||||
'new': '<new-version>'}}
|
||||
'''
|
||||
refresh = salt.utils.data.is_true(refresh)
|
||||
sysupgrade = salt.utils.data.is_true(sysupgrade)
|
||||
|
||||
try:
|
||||
pkg_params, pkg_type = __salt__['pkg_resource.parse_targets'](
|
||||
name, pkgs, sources, **kwargs
|
||||
@ -550,9 +548,9 @@ def install(name=None,
|
||||
cmd.extend(pkg_params)
|
||||
elif pkg_type == 'repository':
|
||||
cmd.append('-S')
|
||||
if refresh:
|
||||
if refresh is True:
|
||||
cmd.append('-y')
|
||||
if sysupgrade:
|
||||
if sysupgrade is True or (sysupgrade is None and refresh is True):
|
||||
cmd.append('-u')
|
||||
cmd.extend(['--noprogressbar', '--noconfirm', '--needed'])
|
||||
wildcards = []
|
||||
|
@ -92,9 +92,13 @@ class Registry(object): # pylint: disable=R0903
|
||||
'''
|
||||
def __init__(self):
|
||||
self.hkeys = {
|
||||
'HKEY_CURRENT_CONFIG': win32con.HKEY_CURRENT_CONFIG,
|
||||
'HKEY_CLASSES_ROOT': win32con.HKEY_CLASSES_ROOT,
|
||||
'HKEY_CURRENT_USER': win32con.HKEY_CURRENT_USER,
|
||||
'HKEY_LOCAL_MACHINE': win32con.HKEY_LOCAL_MACHINE,
|
||||
'HKEY_USERS': win32con.HKEY_USERS,
|
||||
'HKCC': win32con.HKEY_CURRENT_CONFIG,
|
||||
'HKCR': win32con.HKEY_CLASSES_ROOT,
|
||||
'HKCU': win32con.HKEY_CURRENT_USER,
|
||||
'HKLM': win32con.HKEY_LOCAL_MACHINE,
|
||||
'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 \
|
||||
# as we do not want to remove all or most of the registry
|
||||
self.subkey_slash_check = {
|
||||
win32con.HKEY_CURRENT_USER: 0,
|
||||
win32con.HKEY_LOCAL_MACHINE: 1,
|
||||
win32con.HKEY_USERS: 1
|
||||
win32con.HKEY_CURRENT_USER: 0,
|
||||
win32con.HKEY_LOCAL_MACHINE: 1,
|
||||
win32con.HKEY_USERS: 1,
|
||||
win32con.HKEY_CURRENT_CONFIG: 1,
|
||||
win32con.HKEY_CLASSES_ROOT: 1
|
||||
}
|
||||
|
||||
self.registry_32 = {
|
||||
@ -200,6 +206,8 @@ def list_keys(hive, key=None, use_32bit_registry=False):
|
||||
- HKEY_LOCAL_MACHINE or HKLM
|
||||
- HKEY_CURRENT_USER or HKCU
|
||||
- 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
|
||||
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_CURRENT_USER or HKCU
|
||||
- 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
|
||||
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,
|
||||
'key': local_key,
|
||||
'vname': _to_mbcs(vname),
|
||||
'vdata': _to_mbcs(vdata),
|
||||
'vtype': registry.vtype_reverse[vtype],
|
||||
'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)
|
||||
except pywintypes.error as exc: # pylint: disable=E0602
|
||||
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_CURRENT_USER or HKCU
|
||||
- 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.
|
||||
|
||||
@ -367,11 +385,14 @@ def read_value(hive, key, vname=None, use_32bit_registry=False):
|
||||
# RegQueryValueEx returns and accepts unicode data
|
||||
vdata, vtype = win32api.RegQueryValueEx(handle, local_vname)
|
||||
if vdata or vdata in [0, '']:
|
||||
# Only convert text types to unicode
|
||||
ret['vtype'] = registry.vtype_reverse[vtype]
|
||||
if vtype == 7:
|
||||
if vtype == win32con.REG_MULTI_SZ:
|
||||
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)
|
||||
else:
|
||||
ret['vdata'] = vdata
|
||||
else:
|
||||
ret['comment'] = 'Empty Value'
|
||||
except WindowsError: # pylint: disable=E0602
|
||||
@ -408,6 +429,8 @@ def set_value(hive,
|
||||
- HKEY_LOCAL_MACHINE or HKLM
|
||||
- HKEY_CURRENT_USER or HKCU
|
||||
- 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.
|
||||
|
||||
@ -548,6 +571,8 @@ def delete_key_recursive(hive, key, use_32bit_registry=False):
|
||||
- HKEY_LOCAL_MACHINE or HKLM
|
||||
- HKEY_CURRENT_USER or HKCU
|
||||
- HKEY_USER or HKU
|
||||
- HKEY_CLASSES_ROOT or HKCR
|
||||
- HKEY_CURRENT_CONFIG or HKCC
|
||||
|
||||
: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_CURRENT_USER or HKCU
|
||||
- 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.
|
||||
|
||||
|
@ -304,7 +304,7 @@ def list_update(name, download=False, install=False):
|
||||
'''
|
||||
salt.utils.versions.warn_until(
|
||||
'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.')
|
||||
return get(name, download, install)
|
||||
|
||||
@ -531,7 +531,7 @@ def list_updates(software=True,
|
||||
'''
|
||||
salt.utils.versions.warn_until(
|
||||
'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.')
|
||||
return list(software, drivers, summary, skip_installed, categories,
|
||||
severities, download, install)
|
||||
@ -719,7 +719,7 @@ def download_update(name):
|
||||
'''
|
||||
salt.utils.versions.warn_until(
|
||||
'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.')
|
||||
return download(name)
|
||||
|
||||
@ -751,7 +751,7 @@ def download_updates(names):
|
||||
'''
|
||||
salt.utils.versions.warn_until(
|
||||
'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.')
|
||||
return download(names)
|
||||
|
||||
@ -839,7 +839,7 @@ def install_update(name):
|
||||
'''
|
||||
salt.utils.versions.warn_until(
|
||||
'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.')
|
||||
return install(name)
|
||||
|
||||
@ -870,7 +870,7 @@ def install_updates(names):
|
||||
'''
|
||||
salt.utils.versions.warn_until(
|
||||
'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.')
|
||||
return install(names)
|
||||
|
||||
|
@ -107,7 +107,9 @@ def installed(name, version=None, source=None, force=False, pre_versions=False,
|
||||
|
||||
# Package installed
|
||||
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
|
||||
for pkg in version_info:
|
||||
|
@ -2312,6 +2312,7 @@ def detached(name,
|
||||
else:
|
||||
# Clone repository
|
||||
if os.path.isdir(target):
|
||||
target_contents = os.listdir(target)
|
||||
if force_clone:
|
||||
# Clone is required, and target directory exists, but the
|
||||
# ``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)',
|
||||
target, name
|
||||
)
|
||||
try:
|
||||
if os.path.islink(target):
|
||||
os.unlink(target)
|
||||
else:
|
||||
salt.utils.files.rm_rf(target)
|
||||
except OSError as exc:
|
||||
removal_errors = {}
|
||||
for target_object in target_contents:
|
||||
target_path = os.path.join(target, target_object)
|
||||
try:
|
||||
salt.utils.rm_rf(target_path)
|
||||
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(
|
||||
ret,
|
||||
'Unable to remove {0}: {1}'.format(target, exc),
|
||||
'Unable to remove\n{0}'.format('\n'.join(err_strings)),
|
||||
comments
|
||||
)
|
||||
else:
|
||||
ret['changes']['forced clone'] = True
|
||||
elif os.listdir(target):
|
||||
ret['changes']['forced clone'] = True
|
||||
elif target_contents:
|
||||
# Clone is required, but target dir exists and is non-empty. We
|
||||
# can't proceed.
|
||||
return _fail(
|
||||
|
@ -37,11 +37,16 @@ class MacPkgutilModuleTest(ModuleCase):
|
||||
if not salt.utils.path.which('pkgutil'):
|
||||
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):
|
||||
'''
|
||||
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'])
|
||||
|
||||
def test_list(self):
|
||||
@ -49,7 +54,7 @@ class MacPkgutilModuleTest(ModuleCase):
|
||||
Test pkgutil.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'))
|
||||
|
||||
def test_is_installed(self):
|
||||
@ -59,7 +64,7 @@ class MacPkgutilModuleTest(ModuleCase):
|
||||
# Test Package is installed
|
||||
self.assertTrue(
|
||||
self.run_function('pkgutil.is_installed',
|
||||
['com.apple.pkg.BaseSystemResources']))
|
||||
[self.pkg_name]))
|
||||
|
||||
# Test Package is not installed
|
||||
self.assertFalse(
|
||||
|
@ -173,7 +173,7 @@ class MacUserModuleTest(ModuleCase):
|
||||
self.assertTrue(os.path.exists('/etc/kcpassword'))
|
||||
|
||||
# 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:
|
||||
file_data = f.read()
|
||||
self.assertEqual(test_data, file_data)
|
||||
|
@ -27,6 +27,15 @@ class PkgModuleTest(ModuleCase, SaltReturnAssertsMixin):
|
||||
if salt.utils.platform.is_windows():
|
||||
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):
|
||||
'''
|
||||
verify that packages are installed
|
||||
@ -133,30 +142,18 @@ class PkgModuleTest(ModuleCase, SaltReturnAssertsMixin):
|
||||
'''
|
||||
successfully install and uninstall a package
|
||||
'''
|
||||
os_grain = self.run_function('grains.item', ['os'])['os']
|
||||
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')
|
||||
version = self.run_function('pkg.version', [self.pkg])
|
||||
|
||||
def test_install():
|
||||
install_ret = self.run_function('pkg.install', [pkg])
|
||||
self.assertIn(pkg, install_ret)
|
||||
install_ret = self.run_function('pkg.install', [self.pkg])
|
||||
self.assertIn(self.pkg, install_ret)
|
||||
|
||||
def test_remove():
|
||||
remove_ret = self.run_function('pkg.remove', [pkg])
|
||||
self.assertIn(pkg, remove_ret)
|
||||
remove_ret = self.run_function('pkg.remove', [self.pkg])
|
||||
self.assertIn(self.pkg, remove_ret)
|
||||
|
||||
if version and isinstance(version, dict):
|
||||
version = version[pkg]
|
||||
version = version[self.pkg]
|
||||
|
||||
if version:
|
||||
test_remove()
|
||||
@ -172,15 +169,10 @@ class PkgModuleTest(ModuleCase, SaltReturnAssertsMixin):
|
||||
'''
|
||||
test holding and unholding a package
|
||||
'''
|
||||
pkg = 'htop'
|
||||
os_family = self.run_function('grains.item', ['os_family'])['os_family']
|
||||
os_major_release = self.run_function('grains.item', ['osmajorrelease'])['osmajorrelease']
|
||||
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 os_family == 'RedHat':
|
||||
lock_pkg = 'yum-versionlock' if os_major_release == '5' else 'yum-plugin-versionlock'
|
||||
@ -188,13 +180,13 @@ class PkgModuleTest(ModuleCase, SaltReturnAssertsMixin):
|
||||
if not versionlock:
|
||||
self.run_function('pkg.install', [lock_pkg])
|
||||
|
||||
hold_ret = self.run_function('pkg.hold', [pkg])
|
||||
self.assertIn(pkg, hold_ret)
|
||||
self.assertTrue(hold_ret[pkg]['result'])
|
||||
hold_ret = self.run_function('pkg.hold', [self.pkg])
|
||||
self.assertIn(self.pkg, hold_ret)
|
||||
self.assertTrue(hold_ret[self.pkg]['result'])
|
||||
|
||||
unhold_ret = self.run_function('pkg.unhold', [pkg])
|
||||
self.assertIn(pkg, unhold_ret)
|
||||
self.assertTrue(hold_ret[pkg]['result'])
|
||||
unhold_ret = self.run_function('pkg.unhold', [self.pkg])
|
||||
self.assertIn(self.pkg, unhold_ret)
|
||||
self.assertTrue(hold_ret[self.pkg]['result'])
|
||||
|
||||
if os_family == 'RedHat':
|
||||
if not versionlock:
|
||||
|
@ -20,6 +20,7 @@ class ServiceModuleTest(ModuleCase):
|
||||
self.service_name = 'cron'
|
||||
cmd_name = 'crontab'
|
||||
os_family = self.run_function('grains.get', ['os_family'])
|
||||
os_release = self.run_function('grains.get', ['osrelease'])
|
||||
if os_family == 'RedHat':
|
||||
self.service_name = 'crond'
|
||||
elif os_family == 'Arch':
|
||||
@ -27,6 +28,8 @@ class ServiceModuleTest(ModuleCase):
|
||||
cmd_name = 'systemctl'
|
||||
elif os_family == 'MacOS':
|
||||
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:
|
||||
self.skipTest('{0} is not installed'.format(cmd_name))
|
||||
|
@ -26,6 +26,7 @@ class ServiceTest(ModuleCase, SaltReturnAssertsMixin):
|
||||
self.service_name = 'cron'
|
||||
cmd_name = 'crontab'
|
||||
os_family = self.run_function('grains.get', ['os_family'])
|
||||
os_release = self.run_function('grains.get', ['osrelease'])
|
||||
self.stopped = False
|
||||
self.running = True
|
||||
if os_family == 'RedHat':
|
||||
@ -35,6 +36,8 @@ class ServiceTest(ModuleCase, SaltReturnAssertsMixin):
|
||||
cmd_name = 'systemctl'
|
||||
elif os_family == 'MacOS':
|
||||
self.service_name = 'org.ntp.ntpd'
|
||||
if int(os_release.split('.')[1]) >= 13:
|
||||
self.service_name = 'com.apple.AirPlayXPCHelper'
|
||||
self.stopped = ''
|
||||
self.running = '[0-9]'
|
||||
|
||||
|
@ -457,10 +457,7 @@ class SaltTestingParser(optparse.OptionParser):
|
||||
logging_level = logging.INFO
|
||||
else:
|
||||
logging_level = logging.ERROR
|
||||
if salt.utils.platform.is_windows():
|
||||
os.environ['TESTS_LOG_LEVEL'] = six.binary_type(self.options.verbosity)
|
||||
else:
|
||||
os.environ['TESTS_LOG_LEVEL'] = six.text_type(self.options.verbosity)
|
||||
os.environ['TESTS_LOG_LEVEL'] = str(self.options.verbosity) # future lint: disable=blacklisted-function
|
||||
consolehandler.setLevel(logging_level)
|
||||
logging.root.addHandler(consolehandler)
|
||||
log.info('Runtests logging has been setup')
|
||||
|
@ -132,8 +132,9 @@ def _has_required_moto():
|
||||
@skipIf(HAS_MOTO is False, 'The moto module must be installed.')
|
||||
@skipIf(_has_required_boto() is False, 'The boto module must be greater than'
|
||||
' or equal to version {}. Installed: {}'
|
||||
.format(required_boto_version, _get_boto_version()))
|
||||
@skipIf(_has_required_moto() is False, 'The moto version must be >= to version {}. Installed: {}'.format(required_moto_version, _get_moto_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() if HAS_MOTO else 'None'))
|
||||
class BotoVpcTestCaseBase(TestCase, LoaderModuleMockMixin):
|
||||
conn3 = None
|
||||
|
||||
|
@ -221,7 +221,7 @@ class CMDMODTestCase(TestCase, LoaderModuleMockMixin):
|
||||
with patch('salt.utils.platform.is_windows', MagicMock(return_value=False)):
|
||||
with patch('os.path.isfile', 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)
|
||||
|
||||
def test_is_valid_shell_windows(self):
|
||||
|
Loading…
Reference in New Issue
Block a user