mirror of
https://github.com/saltstack/salt.git
synced 2025-04-17 10:10:20 +00:00
Merge branch '2017.7' into '2018.3'
Conflicts: - tests/support/case.py
This commit is contained in:
commit
d8e7c47a05
9 changed files with 57 additions and 15 deletions
3
Gemfile
3
Gemfile
|
@ -2,7 +2,8 @@
|
|||
|
||||
source 'https://rubygems.org'
|
||||
|
||||
gem 'test-kitchen', '~>1.21'
|
||||
# Point this back at the test-kitchen package after 1.23.3 is relased
|
||||
gem 'test-kitchen', :git => 'https://github.com/dwoz/test-kitchen.git', :branch => 'winrm_opts'
|
||||
gem 'kitchen-salt', '~>0.2'
|
||||
gem 'kitchen-sync'
|
||||
gem 'git'
|
||||
|
|
2
doc/_themes/saltstack2/layout.html
vendored
2
doc/_themes/saltstack2/layout.html
vendored
|
@ -256,7 +256,7 @@
|
|||
<!--
|
||||
<a href="https://saltstack.com/saltstack-enterprise/" target="_blank"><img class="nolightbox footer-banner center" src="{{ pathto('_static/images/enterprise_ad.jpg', 1) }}"/></a>
|
||||
-->
|
||||
<a href="http://saltconf.com" target="_blank"><img class="nolightbox footer-banner center" src="{{ pathto('_static/images/DOCBANNER.jpg', 1) }}"/></a>
|
||||
<a href="http://saltconf.com/saltconf18-speakers/" target="_blank"><img class="nolightbox footer-banner center" src="{{ pathto('_static/images/DOCBANNER.png', 1) }}"/></a>
|
||||
</div>
|
||||
{% endif %}
|
||||
</div>
|
||||
|
|
BIN
doc/_themes/saltstack2/static/images/DOCBANNER.jpg
vendored
BIN
doc/_themes/saltstack2/static/images/DOCBANNER.jpg
vendored
Binary file not shown.
Before Width: | Height: | Size: 497 KiB |
BIN
doc/_themes/saltstack2/static/images/DOCBANNER.png
vendored
Normal file
BIN
doc/_themes/saltstack2/static/images/DOCBANNER.png
vendored
Normal file
Binary file not shown.
After Width: | Height: | Size: 767 KiB |
|
@ -526,6 +526,19 @@ GPG key with ``git`` locally, and linking the GPG key to your GitHub account.
|
|||
Once these steps are completed, the commit signing verification will look like
|
||||
the example in GitHub's `GPG Signature Verification feature announcement`_.
|
||||
|
||||
Bootstrap Script Changes
|
||||
------------------------
|
||||
|
||||
Salt's Bootstrap Script, known as `bootstrap-salt.sh`_ in the Salt repo, has it's own
|
||||
repository, contributing guidelines, and release cadence.
|
||||
|
||||
All changes to the Bootstrap Script should be made to `salt-bootstrap repo`_. Any
|
||||
pull requests made to the `bootstrap-salt.sh`_ file in the Salt repository will be
|
||||
automatically overwritten upon the next stable release of the Bootstrap Script.
|
||||
|
||||
For more information on the release process or how to contribute to the Bootstrap
|
||||
Script, see the Bootstrap Script's `Contributing Guidelines`_.
|
||||
|
||||
.. _`saltstack/salt`: https://github.com/saltstack/salt
|
||||
.. _`GitHub Fork a Repo Guide`: https://help.github.com/articles/fork-a-repo
|
||||
.. _`GitHub issue tracker`: https://github.com/saltstack/salt/issues
|
||||
|
@ -537,3 +550,6 @@ the example in GitHub's `GPG Signature Verification feature announcement`_.
|
|||
.. _GPG Probot: https://probot.github.io/apps/gpg/
|
||||
.. _help articles: https://help.github.com/articles/signing-commits-with-gpg/
|
||||
.. _GPG Signature Verification feature announcement: https://github.com/blog/2144-gpg-signature-verification
|
||||
.. _bootstrap-salt.sh: https://github.com/saltstack/salt/blob/develop/salt/cloud/deploy/bootstrap-salt.sh
|
||||
.. _salt-bootstrap repo: https://github.com/saltstack/salt-bootstrap
|
||||
.. _Contributing Guidelines: https://github.com/saltstack/salt-bootstrap/blob/develop/CONTRIBUTING.md
|
||||
|
|
|
@ -271,7 +271,7 @@ def make_inheritable(token):
|
|||
win32con.DUPLICATE_SAME_ACCESS)
|
||||
|
||||
|
||||
def runas_system(cmd, username, password):
|
||||
def runas_system(cmd, username, password, cwd=None):
|
||||
# This only works as system, when salt is running as a service for example
|
||||
|
||||
# Check for a domain
|
||||
|
@ -310,8 +310,8 @@ def runas_system(cmd, username, password):
|
|||
|
||||
except win32security.error as exc:
|
||||
# User doesn't have admin, use existing token
|
||||
if exc[0] == winerror.ERROR_NO_SUCH_LOGON_SESSION \
|
||||
or exc[0] == winerror.ERROR_PRIVILEGE_NOT_HELD:
|
||||
if exc.winerror == winerror.ERROR_NO_SUCH_LOGON_SESSION \
|
||||
or exc.winerror == winerror.ERROR_PRIVILEGE_NOT_HELD:
|
||||
elevated_token = token
|
||||
else:
|
||||
raise
|
||||
|
@ -352,7 +352,7 @@ def runas_system(cmd, username, password):
|
|||
1,
|
||||
0,
|
||||
user_environment,
|
||||
None,
|
||||
cwd,
|
||||
startup_info)
|
||||
|
||||
hProcess, hThread, PId, TId = \
|
||||
|
@ -397,7 +397,7 @@ def runas(cmd, username, password, cwd=None):
|
|||
# This only works when not running under the system account
|
||||
# Debug mode for example
|
||||
if salt.utils.win_functions.get_current_user() == 'SYSTEM':
|
||||
return runas_system(cmd, username, password)
|
||||
return runas_system(cmd, username, password, cwd)
|
||||
|
||||
# Create a pipe to set as stdout in the child. The write handle needs to be
|
||||
# inheritable.
|
||||
|
|
|
@ -5,6 +5,10 @@ Tests for various minion timeouts
|
|||
|
||||
# Import Python libs
|
||||
from __future__ import absolute_import
|
||||
import os
|
||||
import sys
|
||||
|
||||
import salt.utils
|
||||
|
||||
# Import Salt Testing libs
|
||||
from tests.support.case import ShellCase
|
||||
|
@ -21,8 +25,18 @@ class MinionTimeoutTestCase(ShellCase):
|
|||
'''
|
||||
# Launch the command
|
||||
sleep_length = 30
|
||||
ret = self.run_salt('minion test.sleep {0}'.format(sleep_length), timeout=45)
|
||||
self.assertTrue(isinstance(ret, list), 'Return is not a list. Minion'
|
||||
if salt.utils.is_windows():
|
||||
popen_kwargs = {'env': dict(os.environ, PYTHONPATH=';'.join(sys.path))}
|
||||
else:
|
||||
popen_kwargs = None
|
||||
ret = self.run_salt(
|
||||
'minion test.sleep {0}'.format(sleep_length),
|
||||
timeout=45,
|
||||
catch_stderr=True,
|
||||
popen_kwargs=popen_kwargs,
|
||||
)
|
||||
self.assertTrue(isinstance(ret[0], list), 'Return is not a list. Minion'
|
||||
' may have returned error: {0}'.format(ret))
|
||||
self.assertTrue('True' in ret[1], 'Minion did not return True after '
|
||||
'{0} seconds.'.format(sleep_length))
|
||||
self.assertEqual(len(ret[0]), 2, 'Standard out wrong length {}'.format(ret))
|
||||
self.assertTrue('True' in ret[0][1], 'Minion did not return True after '
|
||||
'{0} seconds. ret={1}'.format(sleep_length, ret))
|
||||
|
|
|
@ -367,6 +367,12 @@ class WinSystemModuleTest(ModuleCase):
|
|||
'''
|
||||
Validate the date/time functions in the win_system module
|
||||
'''
|
||||
|
||||
@classmethod
|
||||
def tearDownClass(cls):
|
||||
if subprocess.call('w32tm /resync', shell=True) != 0:
|
||||
log.error("Re-syncing time failed")
|
||||
|
||||
def test_get_computer_name(self):
|
||||
'''
|
||||
Test getting the computer name
|
||||
|
@ -400,6 +406,7 @@ class WinSystemModuleTest(ModuleCase):
|
|||
|
||||
@flaky
|
||||
@destructiveTest
|
||||
@flaky
|
||||
def test_set_system_time(self):
|
||||
'''
|
||||
Test setting the system time
|
||||
|
|
|
@ -251,6 +251,7 @@ class ShellTestCase(TestCase, AdaptedConfigurationTestCaseMixin):
|
|||
# FIXME A timeout of zero or disabling timeouts may not return results!
|
||||
timeout=15,
|
||||
raw=False,
|
||||
popen_kwargs=None,
|
||||
log_output=None):
|
||||
'''
|
||||
Execute a script with the given argument string
|
||||
|
@ -285,11 +286,12 @@ class ShellTestCase(TestCase, AdaptedConfigurationTestCaseMixin):
|
|||
|
||||
tmp_file = tempfile.SpooledTemporaryFile()
|
||||
|
||||
popen_kwargs = {
|
||||
popen_kwargs = popen_kwargs or {}
|
||||
popen_kwargs = dict({
|
||||
'shell': True,
|
||||
'stdout': tmp_file,
|
||||
'universal_newlines': True,
|
||||
}
|
||||
}, **popen_kwargs)
|
||||
|
||||
if catch_stderr is True:
|
||||
popen_kwargs['stderr'] = subprocess.PIPE
|
||||
|
@ -488,7 +490,7 @@ class ShellCase(ShellTestCase, AdaptedConfigurationTestCaseMixin, ScriptPathMixi
|
|||
except OSError:
|
||||
os.chdir(INTEGRATION_TEST_DIR)
|
||||
|
||||
def run_salt(self, arg_str, with_retcode=False, catch_stderr=False, timeout=60): # pylint: disable=W0221
|
||||
def run_salt(self, arg_str, with_retcode=False, catch_stderr=False, timeout=60, popen_kwargs=None): # pylint: disable=W0221
|
||||
'''
|
||||
Execute salt
|
||||
'''
|
||||
|
@ -497,7 +499,8 @@ class ShellCase(ShellTestCase, AdaptedConfigurationTestCaseMixin, ScriptPathMixi
|
|||
arg_str,
|
||||
with_retcode=with_retcode,
|
||||
catch_stderr=catch_stderr,
|
||||
timeout=timeout)
|
||||
timeout=timeout,
|
||||
popen_kwargs=popen_kwargs)
|
||||
log.debug('Result of run_salt for command \'%s\': %s', arg_str, ret)
|
||||
return ret
|
||||
|
||||
|
@ -928,6 +931,7 @@ class ClientCase(AdaptedConfigurationTestCaseMixin, TestCase):
|
|||
else:
|
||||
raise
|
||||
|
||||
|
||||
# ----- Backwards Compatible Imports -------------------------------------------------------------------------------->
|
||||
from tests.support.mixins import ShellCaseCommonTestsMixin # pylint: disable=unused-import
|
||||
# <---- Backwards Compatible Imports ---------------------------------------------------------------------------------
|
||||
|
|
Loading…
Add table
Reference in a new issue