mirror of
https://github.com/valitydev/salt.git
synced 2024-11-07 08:58:59 +00:00
Merge branch '2016.11' into '2017.7'
Conflicts: - salt/modules/win_pkg.py
This commit is contained in:
commit
08bbcf5790
@ -110,7 +110,7 @@ To pass through a file that contains jinja + yaml templating (the default):
|
||||
method='POST',
|
||||
data_file='/srv/salt/somefile.jinja',
|
||||
data_render=True,
|
||||
template_data={'key1': 'value1', 'key2': 'value2'}
|
||||
template_dict={'key1': 'value1', 'key2': 'value2'}
|
||||
)
|
||||
|
||||
To pass through a file that contains mako templating:
|
||||
@ -123,7 +123,7 @@ To pass through a file that contains mako templating:
|
||||
data_file='/srv/salt/somefile.mako',
|
||||
data_render=True,
|
||||
data_renderer='mako',
|
||||
template_data={'key1': 'value1', 'key2': 'value2'}
|
||||
template_dict={'key1': 'value1', 'key2': 'value2'}
|
||||
)
|
||||
|
||||
Because this function uses Salt's own rendering system, any Salt renderer can
|
||||
@ -140,7 +140,7 @@ However, this can be changed to ``master`` if necessary.
|
||||
method='POST',
|
||||
data_file='/srv/salt/somefile.jinja',
|
||||
data_render=True,
|
||||
template_data={'key1': 'value1', 'key2': 'value2'},
|
||||
template_dict={'key1': 'value1', 'key2': 'value2'},
|
||||
opts=__opts__
|
||||
)
|
||||
|
||||
@ -149,7 +149,7 @@ However, this can be changed to ``master`` if necessary.
|
||||
method='POST',
|
||||
data_file='/srv/salt/somefile.jinja',
|
||||
data_render=True,
|
||||
template_data={'key1': 'value1', 'key2': 'value2'},
|
||||
template_dict={'key1': 'value1', 'key2': 'value2'},
|
||||
node='master'
|
||||
)
|
||||
|
||||
@ -170,11 +170,11 @@ a Python dict.
|
||||
header_file='/srv/salt/headers.jinja',
|
||||
header_render=True,
|
||||
header_renderer='jinja',
|
||||
template_data={'key1': 'value1', 'key2': 'value2'}
|
||||
template_dict={'key1': 'value1', 'key2': 'value2'}
|
||||
)
|
||||
|
||||
Because much of the data that would be templated between headers and data may be
|
||||
the same, the ``template_data`` is the same for both. Correcting possible
|
||||
the same, the ``template_dict`` is the same for both. Correcting possible
|
||||
variable name collisions is up to the user.
|
||||
|
||||
Authentication
|
||||
|
@ -405,8 +405,6 @@ class SyncClientMixin(object):
|
||||
)
|
||||
data['success'] = False
|
||||
|
||||
namespaced_event.fire_event(data, 'ret')
|
||||
|
||||
if self.store_job:
|
||||
try:
|
||||
salt.utils.job.store_job(
|
||||
@ -424,6 +422,9 @@ class SyncClientMixin(object):
|
||||
log.error('Could not store job cache info. '
|
||||
'Job details for this run may be unavailable.')
|
||||
|
||||
# Outputters _can_ mutate data so write to the job cache first!
|
||||
namespaced_event.fire_event(data, 'ret')
|
||||
|
||||
# if we fired an event, make sure to delete the event object.
|
||||
# This will ensure that we call destroy, which will do the 0MQ linger
|
||||
log.info('Runner completed: {0}'.format(data['jid']))
|
||||
|
@ -1927,7 +1927,7 @@ def list_policy_versions(policy_name,
|
||||
return ret.get('list_policy_versions_response', {}).get('list_policy_versions_result', {}).get('versions')
|
||||
except boto.exception.BotoServerError as e:
|
||||
log.debug(e)
|
||||
msg = 'Failed to list {0} policy vesions.'
|
||||
msg = 'Failed to list {0} policy versions.'
|
||||
log.error(msg.format(policy_name))
|
||||
return []
|
||||
|
||||
|
@ -1978,6 +1978,8 @@ def acl_create(consul_url=None, **kwargs):
|
||||
Create a new ACL token.
|
||||
|
||||
:param consul_url: The Consul server URL.
|
||||
:param id: Unique identifier for the ACL to create
|
||||
leave it blank to let consul server generate one
|
||||
:param name: Meaningful indicator of the ACL's purpose.
|
||||
:param type: Type is either client or management. A management
|
||||
token is comparable to a root user and has the
|
||||
@ -2008,6 +2010,9 @@ def acl_create(consul_url=None, **kwargs):
|
||||
else:
|
||||
raise SaltInvocationError('Required argument "name" is missing.')
|
||||
|
||||
if 'id' in kwargs:
|
||||
data['ID'] = kwargs['id']
|
||||
|
||||
if 'type' in kwargs:
|
||||
data['Type'] = kwargs['type']
|
||||
|
||||
@ -2126,7 +2131,7 @@ def acl_delete(consul_url=None, **kwargs):
|
||||
ret['res'] = False
|
||||
return ret
|
||||
|
||||
function = 'acl/delete/{0}'.format(kwargs['id'])
|
||||
function = 'acl/destroy/{0}'.format(kwargs['id'])
|
||||
res = _query(consul_url=consul_url,
|
||||
data=data,
|
||||
method='PUT',
|
||||
|
@ -218,7 +218,7 @@ def uptime():
|
||||
with salt.utils.fopen(ut_path) as rfh:
|
||||
seconds = int(float(rfh.read().split()[0]))
|
||||
elif salt.utils.is_sunos():
|
||||
# note: some flavors/vesions report the host uptime inside a zone
|
||||
# note: some flavors/versions report the host uptime inside a zone
|
||||
# https://support.oracle.com/epmos/faces/BugDisplay?id=15611584
|
||||
res = __salt__['cmd.run_all']('kstat -p unix:0:system_misc:boot_time')
|
||||
if res['retcode'] > 0:
|
||||
|
@ -945,27 +945,63 @@ def install(name=None, refresh=False, pkgs=None, **kwargs):
|
||||
packages listed under ``pkgs`` will be installed via a single
|
||||
command.
|
||||
|
||||
You can specify a version by passing the item as a dict:
|
||||
|
||||
CLI Example:
|
||||
|
||||
.. code-block:: bash
|
||||
|
||||
# will install the latest version of foo and bar
|
||||
salt '*' pkg.install pkgs='["foo", "bar"]'
|
||||
|
||||
# will install the latest version of foo and version 1.2.3 of bar
|
||||
salt '*' pkg.install pkgs='["foo", {"bar": "1.2.3"}]'
|
||||
|
||||
Kwargs:
|
||||
|
||||
version (str):
|
||||
The specific version to install. If omitted, the latest version
|
||||
will be installed. If passed with multiple install, the version
|
||||
will apply to all packages. Recommended for single installation
|
||||
only.
|
||||
The specific version to install. If omitted, the latest version will
|
||||
be installed. Recommend for use when installing a single package.
|
||||
|
||||
If passed with a list of packages in the ``pkgs`` parameter, the
|
||||
version will be ignored.
|
||||
|
||||
CLI Example:
|
||||
|
||||
.. code-block:: bash
|
||||
|
||||
# Version is ignored
|
||||
salt '*' pkg.install pkgs="['foo', 'bar']" version=1.2.3
|
||||
|
||||
If passed with a comma seperated list in the ``name`` parameter, the
|
||||
version will apply to all packages in the list.
|
||||
|
||||
CLI Example:
|
||||
|
||||
.. code-block:: bash
|
||||
|
||||
# Version 1.2.3 will apply to packages foo and bar
|
||||
salt '*' pkg.install foo,bar version=1.2.3
|
||||
|
||||
cache_file (str):
|
||||
A single file to copy down for use with the installer. Copied to
|
||||
the same location as the installer. Use this over ``cache_dir`` if
|
||||
there are many files in the directory and you only need a specific
|
||||
file and don't want to cache additional files that may reside in
|
||||
the installer directory. Only applies to files on ``salt://``
|
||||
A single file to copy down for use with the installer. Copied to the
|
||||
same location as the installer. Use this over ``cache_dir`` if there
|
||||
are many files in the directory and you only need a specific file
|
||||
and don't want to cache additional files that may reside in the
|
||||
installer directory. Only applies to files on ``salt://``
|
||||
|
||||
cache_dir (bool):
|
||||
True will copy the contents of the installer directory. This is
|
||||
useful for installations that are not a single file. Only applies
|
||||
to directories on ``salt://``
|
||||
useful for installations that are not a single file. Only applies to
|
||||
directories on ``salt://``
|
||||
|
||||
saltenv (str): Salt environment. Default 'base'
|
||||
extra_install_flags (str):
|
||||
Additional install flags that will be appended to the
|
||||
``install_flags`` defined in the software definition file. Only
|
||||
applies when single package is passed.
|
||||
|
||||
saltenv (str):
|
||||
Salt environment. Default 'base'
|
||||
|
||||
report_reboot_exit_codes (bool):
|
||||
If the installer exits with a recognized exit code indicating that
|
||||
@ -1061,13 +1097,22 @@ def install(name=None, refresh=False, pkgs=None, **kwargs):
|
||||
# "sources" argument
|
||||
pkg_params = __salt__['pkg_resource.parse_targets'](name, pkgs, **kwargs)[0]
|
||||
|
||||
if len(pkg_params) > 1:
|
||||
if kwargs.get('extra_install_flags') is not None:
|
||||
log.warning('\'extra_install_flags\' argument will be ignored for '
|
||||
'multiple package targets')
|
||||
|
||||
# Windows expects an Options dictionary containing 'version'
|
||||
for pkg in pkg_params:
|
||||
pkg_params[pkg] = {'version': pkg_params[pkg]}
|
||||
|
||||
if pkg_params is None or len(pkg_params) == 0:
|
||||
log.error('No package definition found')
|
||||
return {}
|
||||
|
||||
if not pkgs and len(pkg_params) == 1:
|
||||
# Only use the 'version' param if 'name' was not specified as a
|
||||
# comma-separated list
|
||||
# Only use the 'version' param if a single item was passed to the 'name'
|
||||
# parameter
|
||||
pkg_params = {
|
||||
name: {
|
||||
'version': kwargs.get('version'),
|
||||
|
@ -1,9 +1,18 @@
|
||||
# -*- coding: utf-8 -*-
|
||||
'''
|
||||
Microsoft certificate management via the Pki PowerShell module.
|
||||
Microsoft certificate management via the PKI Client PowerShell module.
|
||||
https://technet.microsoft.com/en-us/itpro/powershell/windows/pkiclient/pkiclient
|
||||
|
||||
The PKI Client PowerShell module is only available on Windows 8+ and Windows
|
||||
Server 2012+.
|
||||
https://technet.microsoft.com/en-us/library/hh848636(v=wps.620).aspx
|
||||
|
||||
:platform: Windows
|
||||
|
||||
:depends:
|
||||
- PowerShell 4
|
||||
- PKI Client Module (Windows 8+ / Windows Server 2012+)
|
||||
|
||||
.. versionadded:: 2016.11.0
|
||||
'''
|
||||
# Import python libs
|
||||
@ -29,11 +38,17 @@ __virtualname__ = 'win_pki'
|
||||
|
||||
def __virtual__():
|
||||
'''
|
||||
Only works on Windows systems with the PKI PowerShell module installed.
|
||||
Requires Windows
|
||||
Requires Windows 8+ / Windows Server 2012+
|
||||
Requires PowerShell
|
||||
Requires PKI Client PowerShell module installed.
|
||||
'''
|
||||
if not salt.utils.is_windows():
|
||||
return False, 'Only available on Windows Systems'
|
||||
|
||||
if salt.utils.version_cmp(__grains__['osversion'], '6.2.9200') == -1:
|
||||
return False, 'Only available on Windows 8+ / Windows Server 2012 +'
|
||||
|
||||
if not __salt__['cmd.shell_info']('powershell')['installed']:
|
||||
return False, 'Powershell not available'
|
||||
|
||||
|
@ -1138,13 +1138,22 @@ def latest(name,
|
||||
password=password,
|
||||
https_user=https_user,
|
||||
https_pass=https_pass)
|
||||
comments.append(
|
||||
'Remote \'{0}\' changed from {1} to {2}'.format(
|
||||
remote,
|
||||
salt.utils.url.redact_http_basic_auth(fetch_url),
|
||||
redacted_fetch_url
|
||||
if fetch_url is None:
|
||||
comments.append(
|
||||
'Remote \'{0}\' set to {1}'.format(
|
||||
remote,
|
||||
redacted_fetch_url
|
||||
)
|
||||
)
|
||||
ret['changes']['new'] = name + ' => ' + remote
|
||||
else:
|
||||
comments.append(
|
||||
'Remote \'{0}\' changed from {1} to {2}'.format(
|
||||
remote,
|
||||
salt.utils.url.redact_http_basic_auth(fetch_url),
|
||||
redacted_fetch_url
|
||||
)
|
||||
)
|
||||
)
|
||||
|
||||
if remote_rev is not None:
|
||||
if __opts__['test']:
|
||||
|
@ -120,13 +120,13 @@ def volume_present(name, bricks, stripe=False, replica=False, device_vg=False,
|
||||
.. code-block:: yaml
|
||||
|
||||
myvolume:
|
||||
glusterfs.created:
|
||||
glusterfs.volume_present:
|
||||
- bricks:
|
||||
- host1:/srv/gluster/drive1
|
||||
- host2:/srv/gluster/drive2
|
||||
|
||||
Replicated Volume:
|
||||
glusterfs.created:
|
||||
glusterfs.volume_present:
|
||||
- name: volume2
|
||||
- bricks:
|
||||
- host1:/srv/gluster/drive2
|
||||
|
@ -1264,8 +1264,11 @@ def installed(
|
||||
|
||||
``NOTE:`` For :mod:`apt <salt.modules.aptpkg>`,
|
||||
:mod:`ebuild <salt.modules.ebuild>`,
|
||||
:mod:`pacman <salt.modules.pacman>`, :mod:`yumpkg <salt.modules.yumpkg>`,
|
||||
and :mod:`zypper <salt.modules.zypper>`, version numbers can be specified
|
||||
:mod:`pacman <salt.modules.pacman>`,
|
||||
:mod:`winrepo <salt.modules.win_pkg>`,
|
||||
:mod:`yumpkg <salt.modules.yumpkg>`, and
|
||||
:mod:`zypper <salt.modules.zypper>`,
|
||||
version numbers can be specified
|
||||
in the ``pkgs`` argument. For example:
|
||||
|
||||
.. code-block:: yaml
|
||||
|
@ -810,21 +810,21 @@ def wait_for_winexesvc(host, port, username, password, timeout=900):
|
||||
log.debug('winexe connected...')
|
||||
return True
|
||||
log.debug('Return code was {0}'.format(ret_code))
|
||||
time.sleep(1)
|
||||
except socket.error as exc:
|
||||
log.debug('Caught exception in wait_for_winexesvc: {0}'.format(exc))
|
||||
time.sleep(1)
|
||||
if time.time() - start > timeout:
|
||||
log.error('winexe connection timed out: {0}'.format(timeout))
|
||||
return False
|
||||
log.debug(
|
||||
'Retrying winexe connection to host {0} on port {1} '
|
||||
'(try {2})'.format(
|
||||
host,
|
||||
port,
|
||||
try_count
|
||||
)
|
||||
|
||||
if time.time() - start > timeout:
|
||||
log.error('winexe connection timed out: {0}'.format(timeout))
|
||||
return False
|
||||
log.debug(
|
||||
'Retrying winexe connection to host {0} on port {1} '
|
||||
'(try {2})'.format(
|
||||
host,
|
||||
port,
|
||||
try_count
|
||||
)
|
||||
)
|
||||
time.sleep(1)
|
||||
|
||||
|
||||
def wait_for_winrm(host, port, username, password, timeout=900, use_ssl=True):
|
||||
@ -853,19 +853,19 @@ def wait_for_winrm(host, port, username, password, timeout=900, use_ssl=True):
|
||||
log.debug('WinRM session connected...')
|
||||
return s
|
||||
log.debug('Return code was {0}'.format(r.status_code))
|
||||
time.sleep(1)
|
||||
except WinRMTransportError as exc:
|
||||
log.debug('Caught exception in wait_for_winrm: {0}'.format(exc))
|
||||
if time.time() - start > timeout:
|
||||
log.error('WinRM connection timed out: {0}'.format(timeout))
|
||||
return None
|
||||
log.debug(
|
||||
'Retrying WinRM connection to host {0} on port {1} '
|
||||
'(try {2})'.format(
|
||||
host, port, trycount
|
||||
)
|
||||
|
||||
if time.time() - start > timeout:
|
||||
log.error('WinRM connection timed out: {0}'.format(timeout))
|
||||
return None
|
||||
log.debug(
|
||||
'Retrying WinRM connection to host {0} on port {1} '
|
||||
'(try {2})'.format(
|
||||
host, port, trycount
|
||||
)
|
||||
time.sleep(1)
|
||||
)
|
||||
time.sleep(1)
|
||||
|
||||
|
||||
def validate_windows_cred(host,
|
||||
|
Loading…
Reference in New Issue
Block a user