mirror of
https://github.com/valitydev/salt.git
synced 2024-11-07 08:58:59 +00:00
Merge branch '2017.7' into 'develop'
No conflicts.
This commit is contained in:
commit
4d96cc1068
@ -72,12 +72,12 @@ MOCK_MODULES = [
|
||||
'Crypto.Signature',
|
||||
'Crypto.Signature.PKCS1_v1_5',
|
||||
'M2Crypto',
|
||||
'msgpack',
|
||||
'yaml',
|
||||
'yaml.constructor',
|
||||
'yaml.nodes',
|
||||
'yaml.parser',
|
||||
'yaml.scanner',
|
||||
'salt.utils.yamlloader',
|
||||
'zmq',
|
||||
'zmq.eventloop',
|
||||
'zmq.eventloop.ioloop',
|
||||
@ -126,7 +126,6 @@ MOCK_MODULES = [
|
||||
'ClusterShell',
|
||||
'ClusterShell.NodeSet',
|
||||
'django',
|
||||
'docker',
|
||||
'libvirt',
|
||||
'MySQLdb',
|
||||
'MySQLdb.cursors',
|
||||
@ -176,7 +175,7 @@ MOCK_MODULES = [
|
||||
|
||||
for mod_name in MOCK_MODULES:
|
||||
if mod_name == 'psutil':
|
||||
mock = Mock(mapping={'total': 0, 'version_info': (0, 6,0)}) # Otherwise it will crash Sphinx
|
||||
mock = Mock(mapping={'total': 0}) # Otherwise it will crash Sphinx
|
||||
else:
|
||||
mock = Mock()
|
||||
sys.modules[mod_name] = mock
|
||||
|
@ -74,6 +74,10 @@ state modules
|
||||
dellchassis
|
||||
disk
|
||||
docker
|
||||
docker_container
|
||||
docker_image
|
||||
docker_network
|
||||
docker_volume
|
||||
drac
|
||||
elasticsearch
|
||||
elasticsearch_index
|
||||
|
@ -43,6 +43,14 @@ def _merge_extra_filerefs(*args):
|
||||
return ','.join(ret)
|
||||
|
||||
|
||||
def _thin_dir():
|
||||
'''
|
||||
Get the thin_dir from the master_opts if not in __opts__
|
||||
'''
|
||||
thin_dir = __opts__.get('thin_dir', __opts__['__master_opts__']['thin_dir'])
|
||||
return thin_dir
|
||||
|
||||
|
||||
def sls(mods, saltenv='base', test=None, exclude=None, **kwargs):
|
||||
'''
|
||||
Create the seed file for a state.sls run
|
||||
@ -100,7 +108,7 @@ def sls(mods, saltenv='base', test=None, exclude=None, **kwargs):
|
||||
roster_grains)
|
||||
trans_tar_sum = salt.utils.get_hash(trans_tar, __opts__['hash_type'])
|
||||
cmd = 'state.pkg {0}/salt_state.tgz test={1} pkg_sum={2} hash_type={3}'.format(
|
||||
__opts__['thin_dir'],
|
||||
_thin_dir(),
|
||||
test,
|
||||
trans_tar_sum,
|
||||
__opts__['hash_type'])
|
||||
@ -112,7 +120,7 @@ def sls(mods, saltenv='base', test=None, exclude=None, **kwargs):
|
||||
**st_kwargs)
|
||||
single.shell.send(
|
||||
trans_tar,
|
||||
'{0}/salt_state.tgz'.format(__opts__['thin_dir']))
|
||||
'{0}/salt_state.tgz'.format(_thin_dir()))
|
||||
stdout, stderr, _ = single.cmd_block()
|
||||
|
||||
# Clean up our tar
|
||||
@ -177,7 +185,7 @@ def low(data, **kwargs):
|
||||
roster_grains)
|
||||
trans_tar_sum = salt.utils.get_hash(trans_tar, __opts__['hash_type'])
|
||||
cmd = 'state.pkg {0}/salt_state.tgz pkg_sum={1} hash_type={2}'.format(
|
||||
__opts__['thin_dir'],
|
||||
_thin_dir(),
|
||||
trans_tar_sum,
|
||||
__opts__['hash_type'])
|
||||
single = salt.client.ssh.Single(
|
||||
@ -188,7 +196,7 @@ def low(data, **kwargs):
|
||||
**st_kwargs)
|
||||
single.shell.send(
|
||||
trans_tar,
|
||||
'{0}/salt_state.tgz'.format(__opts__['thin_dir']))
|
||||
'{0}/salt_state.tgz'.format(_thin_dir()))
|
||||
stdout, stderr, _ = single.cmd_block()
|
||||
|
||||
# Clean up our tar
|
||||
@ -250,7 +258,7 @@ def high(data, **kwargs):
|
||||
roster_grains)
|
||||
trans_tar_sum = salt.utils.get_hash(trans_tar, __opts__['hash_type'])
|
||||
cmd = 'state.pkg {0}/salt_state.tgz pkg_sum={1} hash_type={2}'.format(
|
||||
__opts__['thin_dir'],
|
||||
_thin_dir(),
|
||||
trans_tar_sum,
|
||||
__opts__['hash_type'])
|
||||
single = salt.client.ssh.Single(
|
||||
@ -261,7 +269,7 @@ def high(data, **kwargs):
|
||||
**st_kwargs)
|
||||
single.shell.send(
|
||||
trans_tar,
|
||||
'{0}/salt_state.tgz'.format(__opts__['thin_dir']))
|
||||
'{0}/salt_state.tgz'.format(_thin_dir()))
|
||||
stdout, stderr, _ = single.cmd_block()
|
||||
|
||||
# Clean up our tar
|
||||
@ -353,7 +361,7 @@ def highstate(test=None, **kwargs):
|
||||
roster_grains)
|
||||
trans_tar_sum = salt.utils.get_hash(trans_tar, __opts__['hash_type'])
|
||||
cmd = 'state.pkg {0}/salt_state.tgz test={1} pkg_sum={2} hash_type={3}'.format(
|
||||
__opts__['thin_dir'],
|
||||
_thin_dir(),
|
||||
test,
|
||||
trans_tar_sum,
|
||||
__opts__['hash_type'])
|
||||
@ -365,7 +373,7 @@ def highstate(test=None, **kwargs):
|
||||
**st_kwargs)
|
||||
single.shell.send(
|
||||
trans_tar,
|
||||
'{0}/salt_state.tgz'.format(__opts__['thin_dir']))
|
||||
'{0}/salt_state.tgz'.format(_thin_dir()))
|
||||
stdout, stderr, _ = single.cmd_block()
|
||||
|
||||
# Clean up our tar
|
||||
@ -433,7 +441,7 @@ def top(topfn, test=None, **kwargs):
|
||||
roster_grains)
|
||||
trans_tar_sum = salt.utils.get_hash(trans_tar, __opts__['hash_type'])
|
||||
cmd = 'state.pkg {0}/salt_state.tgz test={1} pkg_sum={2} hash_type={3}'.format(
|
||||
__opts__['thin_dir'],
|
||||
_thin_dir(),
|
||||
test,
|
||||
trans_tar_sum,
|
||||
__opts__['hash_type'])
|
||||
@ -445,7 +453,7 @@ def top(topfn, test=None, **kwargs):
|
||||
**st_kwargs)
|
||||
single.shell.send(
|
||||
trans_tar,
|
||||
'{0}/salt_state.tgz'.format(__opts__['thin_dir']))
|
||||
'{0}/salt_state.tgz'.format(_thin_dir()))
|
||||
stdout, stderr, _ = single.cmd_block()
|
||||
|
||||
# Clean up our tar
|
||||
@ -697,7 +705,7 @@ def single(fun, name, test=None, **kwargs):
|
||||
|
||||
# We use state.pkg to execute the "state package"
|
||||
cmd = 'state.pkg {0}/salt_state.tgz test={1} pkg_sum={2} hash_type={3}'.format(
|
||||
__opts__['thin_dir'],
|
||||
_thin_dir(),
|
||||
test,
|
||||
trans_tar_sum,
|
||||
__opts__['hash_type'])
|
||||
@ -713,7 +721,7 @@ def single(fun, name, test=None, **kwargs):
|
||||
# Copy the tar down
|
||||
single.shell.send(
|
||||
trans_tar,
|
||||
'{0}/salt_state.tgz'.format(__opts__['thin_dir']))
|
||||
'{0}/salt_state.tgz'.format(_thin_dir()))
|
||||
|
||||
# Run the state.pkg command on the target
|
||||
stdout, stderr, _ = single.cmd_block()
|
||||
|
@ -1370,7 +1370,10 @@ class LazyLoader(salt.utils.lazy.LazyDict):
|
||||
(importlib.machinery.SourcelessFileLoader, importlib.machinery.BYTECODE_SUFFIXES),
|
||||
(importlib.machinery.ExtensionFileLoader, importlib.machinery.EXTENSION_SUFFIXES),
|
||||
]
|
||||
file_finder = importlib.machinery.FileFinder(fpath, *loader_details)
|
||||
file_finder = importlib.machinery.FileFinder(
|
||||
fpath_dirname,
|
||||
*loader_details
|
||||
)
|
||||
spec = file_finder.find_spec(mod_namespace)
|
||||
if spec is None:
|
||||
raise ImportError()
|
||||
|
@ -856,7 +856,7 @@ def _parse_network_settings(opts, current):
|
||||
_raise_error_network('hostname', ['server1.example.com'])
|
||||
|
||||
if 'nozeroconf' in opts:
|
||||
nozeroconf = salt.utils.dequote(opts['nozerconf'])
|
||||
nozeroconf = salt.utils.dequote(opts['nozeroconf'])
|
||||
if nozeroconf in valid:
|
||||
if nozeroconf in _CONFIG_TRUE:
|
||||
result['nozeroconf'] = true_val
|
||||
|
@ -300,7 +300,7 @@ def install_semod(module_path):
|
||||
|
||||
salt '*' selinux.install_semod [salt://]path/to/module.pp
|
||||
|
||||
.. versionadded:: develop
|
||||
.. versionadded:: 2016.11.6
|
||||
'''
|
||||
if module_path.find('salt://') == 0:
|
||||
module_path = __salt__['cp.cache_file'](module_path)
|
||||
@ -318,7 +318,7 @@ def remove_semod(module):
|
||||
|
||||
salt '*' selinux.remove_semod module_name
|
||||
|
||||
.. versionadded:: develop
|
||||
.. versionadded:: 2016.11.6
|
||||
'''
|
||||
cmd = 'semodule -r {0}'.format(module)
|
||||
return not __salt__['cmd.retcode'](cmd)
|
||||
|
@ -258,12 +258,22 @@ def _get_opts(**kwargs):
|
||||
Return a copy of the opts for use, optionally load a local config on top
|
||||
'''
|
||||
opts = copy.deepcopy(__opts__)
|
||||
|
||||
if 'localconfig' in kwargs:
|
||||
opts = salt.config.minion_config(kwargs['localconfig'], defaults=opts)
|
||||
else:
|
||||
if 'saltenv' in kwargs:
|
||||
return salt.config.minion_config(kwargs['localconfig'], defaults=opts)
|
||||
|
||||
if 'saltenv' in kwargs:
|
||||
saltenv = kwargs['saltenv']
|
||||
if not isinstance(saltenv, six.string_types):
|
||||
opts['environment'] = str(kwargs['saltenv'])
|
||||
else:
|
||||
opts['environment'] = kwargs['saltenv']
|
||||
if 'pillarenv' in kwargs:
|
||||
|
||||
if 'pillarenv' in kwargs:
|
||||
pillarenv = kwargs['pillarenv']
|
||||
if not isinstance(pillarenv, six.string_types):
|
||||
opts['pillarenv'] = str(kwargs['pillarenv'])
|
||||
else:
|
||||
opts['pillarenv'] = kwargs['pillarenv']
|
||||
|
||||
return opts
|
||||
|
@ -262,7 +262,7 @@ def module_install(name):
|
||||
name
|
||||
Path to file with module to install
|
||||
|
||||
.. versionadded:: develop
|
||||
.. versionadded:: 2016.11.6
|
||||
'''
|
||||
ret = {'name': name,
|
||||
'result': True,
|
||||
@ -283,7 +283,7 @@ def module_remove(name):
|
||||
name
|
||||
The name of the module to remove
|
||||
|
||||
.. versionadded:: develop
|
||||
.. versionadded:: 2016.11.6
|
||||
'''
|
||||
ret = {'name': name,
|
||||
'result': True,
|
||||
|
@ -3497,3 +3497,21 @@ def dequote(val):
|
||||
if is_quoted(val):
|
||||
return val[1:-1]
|
||||
return val
|
||||
|
||||
|
||||
def mkstemp(*args, **kwargs):
|
||||
'''
|
||||
Helper function which does exactly what `tempfile.mkstemp()` does but
|
||||
accepts another argument, `close_fd`, which, by default, is true and closes
|
||||
the fd before returning the file path. Something commonly done throughout
|
||||
Salt's code.
|
||||
'''
|
||||
if 'prefix' not in kwargs:
|
||||
kwargs['prefix'] = '__salt.tmp.'
|
||||
close_fd = kwargs.pop('close_fd', True)
|
||||
fd_, fpath = tempfile.mkstemp(*args, **kwargs)
|
||||
if close_fd is False:
|
||||
return (fd_, fpath)
|
||||
os.close(fd_)
|
||||
del fd_
|
||||
return fpath
|
||||
|
@ -9,7 +9,6 @@ import logging
|
||||
import os
|
||||
import shutil
|
||||
import subprocess
|
||||
import tempfile
|
||||
import time
|
||||
|
||||
# Import salt libs
|
||||
@ -22,9 +21,9 @@ from salt.ext import six
|
||||
|
||||
log = logging.getLogger(__name__)
|
||||
|
||||
TEMPFILE_PREFIX = '__salt.tmp.'
|
||||
REMOTE_PROTOS = ('http', 'https', 'ftp', 'swift', 's3')
|
||||
VALID_PROTOS = ('salt', 'file') + REMOTE_PROTOS
|
||||
TEMPFILE_PREFIX = '__salt.tmp.'
|
||||
|
||||
|
||||
def guess_archive_type(name):
|
||||
@ -44,20 +43,10 @@ def guess_archive_type(name):
|
||||
|
||||
def mkstemp(*args, **kwargs):
|
||||
'''
|
||||
Helper function which does exactly what `tempfile.mkstemp()` does but
|
||||
accepts another argument, `close_fd`, which, by default, is true and closes
|
||||
the fd before returning the file path. Something commonly done throughout
|
||||
Salt's code.
|
||||
Should eventually reside here, but for now point back at old location in
|
||||
salt.utils
|
||||
'''
|
||||
if 'prefix' not in kwargs:
|
||||
kwargs['prefix'] = TEMPFILE_PREFIX
|
||||
close_fd = kwargs.pop('close_fd', True)
|
||||
fd_, fpath = tempfile.mkstemp(*args, **kwargs)
|
||||
if close_fd is False:
|
||||
return (fd_, fpath)
|
||||
os.close(fd_)
|
||||
del fd_
|
||||
return fpath
|
||||
return salt.utils.mkstemp(*args, **kwargs)
|
||||
|
||||
|
||||
def recursive_copy(source, dest):
|
||||
|
@ -5,6 +5,7 @@ Test the grains module
|
||||
|
||||
# Import python libs
|
||||
from __future__ import absolute_import
|
||||
import logging
|
||||
import os
|
||||
import time
|
||||
|
||||
@ -13,6 +14,8 @@ from tests.support.case import ModuleCase
|
||||
from tests.support.unit import skipIf
|
||||
from tests.support.helpers import destructiveTest
|
||||
|
||||
log = logging.getLogger(__name__)
|
||||
|
||||
|
||||
class TestModulesGrains(ModuleCase):
|
||||
'''
|
||||
@ -110,11 +113,12 @@ class TestModulesGrains(ModuleCase):
|
||||
'''
|
||||
test to ensure some core grains are returned
|
||||
'''
|
||||
grains = ['os', 'os_family', 'osmajorrelease', 'osrelease', 'osfullname', 'id']
|
||||
grains = ('os', 'os_family', 'osmajorrelease', 'osrelease', 'osfullname', 'id')
|
||||
os = self.run_function('grains.get', ['os'])
|
||||
|
||||
for grain in grains:
|
||||
get_grain = self.run_function('grains.get', [grain])
|
||||
log.debug('Value of \'%s\' grain: \'%s\'', grain, get_grain)
|
||||
if os == 'Arch' and grain in ['osmajorrelease']:
|
||||
self.assertEqual(get_grain, '')
|
||||
continue
|
||||
|
@ -91,8 +91,13 @@ class SSHAuthKeyTestCase(TestCase, LoaderModuleMockMixin):
|
||||
email = 'github.com'
|
||||
empty_line = '\n'
|
||||
comment_line = '# this is a comment \n'
|
||||
|
||||
# Write out the authorized key to a temporary file
|
||||
temp_file = tempfile.NamedTemporaryFile(delete=False)
|
||||
if salt.utils.is_windows():
|
||||
temp_file = tempfile.NamedTemporaryFile(delete=False)
|
||||
else:
|
||||
temp_file = tempfile.NamedTemporaryFile(delete=False, mode='w+')
|
||||
|
||||
# Add comment
|
||||
temp_file.write(comment_line)
|
||||
# Add empty line for #41335
|
||||
|
Loading…
Reference in New Issue
Block a user