Merge branch '2018.3' into 'fluorine'

No conflicts.
This commit is contained in:
rallytime 2018-09-05 09:41:04 -04:00
commit 862c44c036
No known key found for this signature in database
GPG Key ID: E8F1A4B90D0DEA19
5 changed files with 14 additions and 22 deletions

View File

@ -32,20 +32,9 @@ possible solution or implementation.
- ``Blocked`` - The issue is waiting on actions by parties outside of - ``Blocked`` - The issue is waiting on actions by parties outside of
SaltStack, such as receiving more information from the submitter or SaltStack, such as receiving more information from the submitter or
resolution of an upstream issue. This milestone is usually applied in resolution of an upstream issue. This milestone is usually applied in
conjunction with the labels ``Info Needed``, ``Question``, ``Expected conjunction with the labels ``Info Needed``, ``Question``,
Behavior``, ``Won't Fix For Now``, or ``Upstream Bug``. ``Expected Behavior``, ``Won't Fix For Now``, or ``Upstream Bug``.
- ``Under Review`` - The issue is having further validation done by a SaltStack
engineer.
- ``<Sprint>`` - The issue is being actively worked on by a SaltStack engineer.
Sprint milestones names are constructed from the chemical symbol of the next
release's codename and the number of sprints until that release is made. For
example, if the next release codename is ``Neon`` and there are five sprints
until that release, the corresponding sprint milestone will be called ``Ne
5``. See :ref:`here <version-numbers>` for a discussion of Salt's release
codenames.
Labels Labels
====== ======

View File

@ -446,7 +446,7 @@ class SSH(object):
if target.get('passwd', False) or self.opts['ssh_passwd']: if target.get('passwd', False) or self.opts['ssh_passwd']:
self._key_deploy_run(host, target, False) self._key_deploy_run(host, target, False)
return ret return ret
if (ret[host].get('stderr') or '').count('Permission denied'): if ret[host].get('stderr', '').count('Permission denied'):
target = self.targets[host] target = self.targets[host]
# permission denied, attempt to auto deploy ssh key # permission denied, attempt to auto deploy ssh key
print(('Permission denied for host {0}, do you want to deploy ' print(('Permission denied for host {0}, do you want to deploy '

View File

@ -66,13 +66,15 @@ passed in as a dict, or as a string to pull from pillars or minion config:
# Import Python Libs # Import Python Libs
from __future__ import absolute_import, print_function, unicode_literals from __future__ import absolute_import, print_function, unicode_literals
import logging
import uuid import uuid
# Import Salt Libs # Import Salt Libs
import salt.utils.dictupdate as dictupdate from salt.ext.six.moves import range
from salt.utils import exactly_one
from salt.exceptions import SaltInvocationError from salt.exceptions import SaltInvocationError
import logging import salt.utils.data
import salt.utils.dictupdate
log = logging.getLogger(__name__) # pylint: disable=W1699 log = logging.getLogger(__name__) # pylint: disable=W1699
@ -143,7 +145,7 @@ def hosted_zone_present(name, Name=None, PrivateZone=False,
if not isinstance(VPCs, list): if not isinstance(VPCs, list):
raise SaltInvocationError("Parameter 'VPCs' must be a list of dicts.") raise SaltInvocationError("Parameter 'VPCs' must be a list of dicts.")
for v in VPCs: for v in VPCs:
if not isinstance(v, dict) or not exactly_one((v.get('VPCId'), v.get('VPCName'))): if not isinstance(v, dict) or not salt.utils.data.exactly_one((v.get('VPCId'), v.get('VPCName'))):
raise SaltInvocationError("Parameter 'VPCs' must be a list of dicts, each composed " raise SaltInvocationError("Parameter 'VPCs' must be a list of dicts, each composed "
"of either a 'VPCId' or a 'VPCName', and optionally a " "of either a 'VPCId' or a 'VPCName', and optionally a "
"'VPCRegion', to help distinguish between multitple matches.") "'VPCRegion', to help distinguish between multitple matches.")
@ -251,7 +253,7 @@ def hosted_zone_present(name, Name=None, PrivateZone=False,
log.info(msg) log.info(msg)
ret['comment'] = ' '.join([ret['comment'], msg]) ret['comment'] = ' '.join([ret['comment'], msg])
ret['changes']['old'] = zone ret['changes']['old'] = zone
ret['changes']['new'] = dictupdate.update(ret['changes'].get('new', {}), r) ret['changes']['new'] = salt.utils.dictupdate.update(ret['changes'].get('new', {}), r)
else: else:
ret['comment'] = 'Update of Route 53 {} hosted zone {} comment failed'.format('private' ret['comment'] = 'Update of Route 53 {} hosted zone {} comment failed'.format('private'
if PrivateZone else 'public', Name) if PrivateZone else 'public', Name)

View File

@ -667,4 +667,4 @@ class CPModuleTest(ModuleCase):
os.unlink(tgt_cache_file) os.unlink(tgt_cache_file)
def test_envs(self): def test_envs(self):
self.assertEqual(self.run_function('cp.envs'), ['base', 'prod']) self.assertEqual(sorted(self.run_function('cp.envs')), sorted(['base', 'prod']))

View File

@ -6,12 +6,13 @@ from __future__ import absolute_import
# Import Salt Testing libs # Import Salt Testing libs
from tests.support.case import ModuleCase from tests.support.case import ModuleCase
from tests.support.unit import skipIf from tests.support.unit import skipIf
from tests.support.helpers import destructiveTest from tests.support.helpers import destructiveTest, flaky
# Import Salt Libs # Import Salt Libs
import salt.utils.platform import salt.utils.platform
@flaky
@skipIf(not salt.utils.platform.is_windows(), 'Tests for only Windows') @skipIf(not salt.utils.platform.is_windows(), 'Tests for only Windows')
class NTPTest(ModuleCase): class NTPTest(ModuleCase):
''' '''