mirror of
https://github.com/saltstack/salt.git
synced 2025-04-17 10:10:20 +00:00
Merge branch '2014.7' into develop
Conflicts: conf/minion salt/modules/mine.py
This commit is contained in:
commit
36ef47e7a2
9 changed files with 219 additions and 50 deletions
11
conf/minion
11
conf/minion
|
@ -144,6 +144,17 @@
|
|||
# TODO: perhaps could update the scheduler to raise Exception in main thread after /mine_interval (60 minutes)/ fails
|
||||
#ping_interval: 90
|
||||
|
||||
# To auto recover minions if master changes IP address (DDNS)
|
||||
#
|
||||
# auth_tries: 10
|
||||
# auth_safemode: False
|
||||
# ping_interval: 90
|
||||
# restart_on_error: True
|
||||
#
|
||||
# Minions won't know master is missing until a ping fails. After the ping fail,
|
||||
# the minion will attempt authentication and likely fails out and cause a restart.
|
||||
# When the minion restarts it will resolve the masters IP and attempt to reconnect.
|
||||
|
||||
# If you don't have any problems with syn-floods, don't bother with the
|
||||
# three recon_* settings described below, just leave the defaults!
|
||||
#
|
||||
|
|
|
@ -93960,7 +93960,7 @@ When we are asked to update (regular interval) lets reap the cache
|
|||
#random_reauth_delay: 60
|
||||
|
||||
|
||||
# If you don\(aqt have any problems with syn\-floods, dont bother with the
|
||||
# If you don\(aqt have any problems with syn\-floods, don\(aqt bother with the
|
||||
# three recon_* settings described below, just leave the defaults!
|
||||
#
|
||||
# The ZeroMQ pull\-socket that binds to the masters publishing interface tries
|
||||
|
|
|
@ -215,6 +215,75 @@ format-patch`_ and send them to the `salt-users`_ mailing list. The contributor
|
|||
will then get credit for the patch, and the Salt community will have an archive
|
||||
of the patch and a place for discussion.
|
||||
|
||||
Backporting Pull Requests
|
||||
=========================
|
||||
|
||||
If a bug is fixed on ``develop`` and the bug is also present on a
|
||||
currently-supported release branch it will need to be back-ported to all
|
||||
applicable branches.
|
||||
|
||||
.. note:: Most Salt contributors can skip these instructions
|
||||
|
||||
These instructions do not need to be read in order to contribute to the
|
||||
Salt project! The SaltStack team will back-port fixes on behalf of
|
||||
contributors in order to keep the contribution process easy.
|
||||
|
||||
These instructions are intended for frequent Salt contributors, advanced
|
||||
Git users, SaltStack employees, or independent souls who wish to back-port
|
||||
changes themselves.
|
||||
|
||||
It is often easiest to fix a bug on the oldest supported release branch and
|
||||
then merge that branch forward into ``develop`` (as described earlier in this
|
||||
document). When that is not possible the fix must be back-ported, or copied,
|
||||
into any other affected branches.
|
||||
|
||||
These steps assume a pull request ``#1234`` has been merged into ``develop``.
|
||||
And ``upstream`` is the name of the remote pointing to the main Salt repo.
|
||||
|
||||
1. Identify the oldest supported release branch that is affected by the bug.
|
||||
|
||||
2. Create a new branch for the back-port by reusing the same branch from the
|
||||
original pull request.
|
||||
|
||||
Name the branch ``bp-<NNNN>`` and use the number of the original pull
|
||||
request.
|
||||
|
||||
.. code-block:: bash
|
||||
|
||||
git fetch upstream refs/pull/1234/head:bp-1234
|
||||
git checkout bp-1234
|
||||
|
||||
3. Find the parent commit of the original pull request.
|
||||
|
||||
The parent commit of the original pull request must be known in order to
|
||||
rebase onto a release branch. The easiest way to find this is on GitHub.
|
||||
|
||||
Open the original pull request on GitHub and find the first commit in the
|
||||
list of commits. Select and copy the SHA for that commit. The parent of
|
||||
that commit can be specified by appending ``~1`` to the end.
|
||||
|
||||
4. Rebase the new branch on top of the release branch.
|
||||
|
||||
* ``<release-branch>`` is the branch identified in step #1.
|
||||
|
||||
* ``<orig-base>`` is the SHA identified in step #3 -- don't forget to add
|
||||
``~1`` to the end!
|
||||
|
||||
.. code-block:: bash
|
||||
|
||||
git rebase --onto <release-branch> <orig-base> bp-1234
|
||||
|
||||
Note, release branches prior to ``2014.7`` will not be able to make use of
|
||||
rebase and must use cherry-picking instead.
|
||||
|
||||
5. Push the back-port branch to GitHub and open a new pull request.
|
||||
|
||||
Opening a pull request for the back-port allows for the test suite and
|
||||
normal code-review process.
|
||||
|
||||
.. code-block:: bash
|
||||
|
||||
git push -u origin bp-1234
|
||||
|
||||
.. _`saltstack/salt`: https://github.com/saltstack/salt
|
||||
.. _`GitHub Fork a Repo Guide`: https://help.github.com/articles/fork-a-repo
|
||||
|
|
|
@ -130,13 +130,21 @@ class Master(SMaster):
|
|||
Create a salt master server instance
|
||||
'''
|
||||
# Warn if ZMQ < 3.2
|
||||
if not(hasattr(zmq, 'zmq_version_info')) or \
|
||||
zmq.zmq_version_info() < (3, 2):
|
||||
# PyZMQ 2.1.9 does not have zmq_version_info
|
||||
log.warning('You have a version of ZMQ less than ZMQ 3.2! There '
|
||||
'are known connection keep-alive issues with ZMQ < '
|
||||
'3.2 which may result in loss of contact with '
|
||||
'minions. Please upgrade your ZMQ!')
|
||||
try:
|
||||
zmq_version_info = zmq.zmq_version_info()
|
||||
except AttributeError:
|
||||
# PyZMQ <= 2.1.9 does not have zmq_version_info, fall back to
|
||||
# using zmq.zmq_version() and build a version info tuple.
|
||||
zmq_version_info = tuple(
|
||||
[int(x) for x in zmq.zmq_version().split('.')]
|
||||
)
|
||||
if zmq_version_info < (3, 2):
|
||||
log.warning(
|
||||
'You have a version of ZMQ less than ZMQ 3.2! There are '
|
||||
'known connection keep-alive issues with ZMQ < 3.2 which '
|
||||
'may result in loss of contact with minions. Please '
|
||||
'upgrade your ZMQ!'
|
||||
)
|
||||
SMaster.__init__(self, opts)
|
||||
|
||||
def _clear_old_jobs(self):
|
||||
|
|
|
@ -570,13 +570,22 @@ class Minion(MinionBase):
|
|||
self._running = None
|
||||
|
||||
# Warn if ZMQ < 3.2
|
||||
if HAS_ZMQ and (not(hasattr(zmq, 'zmq_version_info')) or
|
||||
zmq.zmq_version_info() < (3, 2)):
|
||||
# PyZMQ 2.1.9 does not have zmq_version_info
|
||||
log.warning('You have a version of ZMQ less than ZMQ 3.2! There '
|
||||
'are known connection keep-alive issues with ZMQ < '
|
||||
'3.2 which may result in loss of contact with '
|
||||
'minions. Please upgrade your ZMQ!')
|
||||
if HAS_ZMQ:
|
||||
try:
|
||||
zmq_version_info = zmq.zmq_version_info()
|
||||
except AttributeError:
|
||||
# PyZMQ <= 2.1.9 does not have zmq_version_info, fall back to
|
||||
# using zmq.zmq_version() and build a version info tuple.
|
||||
zmq_version_info = tuple(
|
||||
[int(x) for x in zmq.zmq_version().split('.')]
|
||||
)
|
||||
if zmq_version_info < (3, 2):
|
||||
log.warning(
|
||||
'You have a version of ZMQ less than ZMQ 3.2! There are '
|
||||
'known connection keep-alive issues with ZMQ < 3.2 which '
|
||||
'may result in loss of contact with minions. Please '
|
||||
'upgrade your ZMQ!'
|
||||
)
|
||||
# Late setup the of the opts grains, so we can log from the grains
|
||||
# module
|
||||
opts['grains'] = salt.loader.grains(opts)
|
||||
|
@ -2554,13 +2563,22 @@ class ProxyMinion(Minion):
|
|||
|
||||
self._running = None
|
||||
# Warn if ZMQ < 3.2
|
||||
if HAS_ZMQ and (not(hasattr(zmq, 'zmq_version_info')) or
|
||||
zmq.zmq_version_info() < (3, 2)):
|
||||
# PyZMQ 2.1.9 does not have zmq_version_info
|
||||
log.warning('You have a version of ZMQ less than ZMQ 3.2! There '
|
||||
'are known connection keep-alive issues with ZMQ < '
|
||||
'3.2 which may result in loss of contact with '
|
||||
'minions. Please upgrade your ZMQ!')
|
||||
if HAS_ZMQ:
|
||||
try:
|
||||
zmq_version_info = zmq.zmq_version_info()
|
||||
except AttributeError:
|
||||
# PyZMQ <= 2.1.9 does not have zmq_version_info, fall back to
|
||||
# using zmq.zmq_version() and build a version info tuple.
|
||||
zmq_version_info = tuple(
|
||||
[int(x) for x in zmq.zmq_version().split('.')]
|
||||
)
|
||||
if zmq_version_info < (3, 2):
|
||||
log.warning(
|
||||
'You have a version of ZMQ less than ZMQ 3.2! There are '
|
||||
'known connection keep-alive issues with ZMQ < 3.2 which '
|
||||
'may result in loss of contact with minions. Please '
|
||||
'upgrade your ZMQ!'
|
||||
)
|
||||
# Late setup the of the opts grains, so we can log from the grains
|
||||
# module
|
||||
# print opts['proxymodule']
|
||||
|
|
|
@ -172,7 +172,7 @@ def _run(cmd,
|
|||
'instead.'
|
||||
)
|
||||
|
||||
if not _is_valid_shell(shell):
|
||||
if _is_valid_shell(shell) is False:
|
||||
log.warning(
|
||||
'Attempt to run a shell command with what may be an invalid shell! '
|
||||
'Check to ensure that the shell <{0}> is valid for this user.'
|
||||
|
|
|
@ -130,6 +130,9 @@ def send(func, *args, **kwargs):
|
|||
# Safe error, arg may be in kwargs
|
||||
pass
|
||||
f_call = salt.utils.format_call(__salt__[mine_func], func_data)
|
||||
for arg in args:
|
||||
if arg not in f_call['args']:
|
||||
f_call['args'].append(arg)
|
||||
try:
|
||||
if 'kwargs' in f_call:
|
||||
data[func] = __salt__[mine_func](*f_call['args'], **f_call['kwargs'])
|
||||
|
|
37
setup.py
37
setup.py
|
@ -736,24 +736,27 @@ if WITH_SETUPTOOLS:
|
|||
'https://github.com/saltstack/salt-testing/tarball/develop#egg=SaltTesting'
|
||||
]
|
||||
SETUP_KWARGS['tests_require'] = ['SaltTesting']
|
||||
else:
|
||||
SETUP_KWARGS['scripts'] = ['scripts/salt-call',
|
||||
'scripts/salt-cp',
|
||||
'scripts/salt-minion',
|
||||
'scripts/salt-unity',
|
||||
]
|
||||
|
||||
if IS_WINDOWS_PLATFORM is False:
|
||||
SETUP_KWARGS['scripts'].extend([
|
||||
'scripts/salt',
|
||||
'scripts/salt-api',
|
||||
'scripts/salt-cloud',
|
||||
'scripts/salt-key',
|
||||
'scripts/salt-master',
|
||||
'scripts/salt-run',
|
||||
'scripts/salt-ssh',
|
||||
'scripts/salt-syndic',
|
||||
])
|
||||
# When WITH_SETUPTOOLS is True, esky builds would fail to include the scripts,
|
||||
# and, if WITH_SETUPTOOLS is True, having scripts and console_scripts defined
|
||||
# does not, apparently, break the build, so, let's have both
|
||||
SETUP_KWARGS['scripts'] = ['scripts/salt-call',
|
||||
'scripts/salt-cp',
|
||||
'scripts/salt-minion',
|
||||
'scripts/salt-unity',
|
||||
]
|
||||
|
||||
if IS_WINDOWS_PLATFORM is False:
|
||||
SETUP_KWARGS['scripts'].extend([
|
||||
'scripts/salt',
|
||||
'scripts/salt-api',
|
||||
'scripts/salt-cloud',
|
||||
'scripts/salt-key',
|
||||
'scripts/salt-master',
|
||||
'scripts/salt-run',
|
||||
'scripts/salt-ssh',
|
||||
'scripts/salt-syndic',
|
||||
])
|
||||
|
||||
if __name__ == '__main__':
|
||||
setup(**SETUP_KWARGS)
|
||||
|
|
|
@ -57,7 +57,8 @@ def build_pillar_data(options):
|
|||
'''
|
||||
Build a YAML formatted string to properly pass pillar data
|
||||
'''
|
||||
pillar = {'test_transport': options.test_transport}
|
||||
pillar = {'test_transport': options.test_transport,
|
||||
'cloud_only': options.cloud_only}
|
||||
if options.test_git_commit is not None:
|
||||
pillar['test_git_commit'] = options.test_git_commit
|
||||
if options.test_git_url is not None:
|
||||
|
@ -427,16 +428,28 @@ def run(opts):
|
|||
except ValueError:
|
||||
print('Failed to load any JSON from {0!r}'.format(stdout.strip()))
|
||||
|
||||
# Run preparation SLS
|
||||
time.sleep(3)
|
||||
cmd = (
|
||||
'salt -t 1800 {target} state.sls {prep_sls} pillar="{pillar}" '
|
||||
'--no-color'.format(
|
||||
target=build_minion_target(opts, vm_name),
|
||||
prep_sls=opts.prep_sls,
|
||||
pillar=build_pillar_data(opts),
|
||||
if opts.cloud_only:
|
||||
# Run Cloud Provider tests preparation SLS
|
||||
time.sleep(3)
|
||||
cmd = (
|
||||
'salt -t 900 {target} state.sls {cloud_prep_sls} pillar="{pillar}" '
|
||||
'--no-color'.format(
|
||||
target=build_minion_target(opts, vm_name),
|
||||
cloud_prep_sls='cloud-only',
|
||||
pillar=build_pillar_data(opts),
|
||||
)
|
||||
)
|
||||
else:
|
||||
# Run standard preparation SLS
|
||||
time.sleep(3)
|
||||
cmd = (
|
||||
'salt -t 1800 {target} state.sls {prep_sls} pillar="{pillar}" '
|
||||
'--no-color'.format(
|
||||
target=build_minion_target(opts, vm_name),
|
||||
prep_sls=opts.prep_sls,
|
||||
pillar=build_pillar_data(opts),
|
||||
)
|
||||
)
|
||||
)
|
||||
print('Running CMD: {0}'.format(cmd))
|
||||
sys.stdout.flush()
|
||||
|
||||
|
@ -463,6 +476,44 @@ def run(opts):
|
|||
delete_vm(opts)
|
||||
sys.exit(retcode)
|
||||
|
||||
if opts.cloud_only:
|
||||
time.sleep(3)
|
||||
# Run Cloud Provider tests pillar preparation SLS
|
||||
cmd = (
|
||||
'salt -t 600 {target} state.sls {cloud_prep_sls} pillar="{pillar}" '
|
||||
'--no-color'.format(
|
||||
target=build_minion_target(opts, vm_name),
|
||||
cloud_prep_sls='cloud-test-configs',
|
||||
pillar=build_pillar_data(opts),
|
||||
)
|
||||
)
|
||||
print('Running CMD: {0}'.format(cmd))
|
||||
sys.stdout.flush()
|
||||
|
||||
proc = subprocess.Popen(
|
||||
cmd,
|
||||
shell=True,
|
||||
stdout=subprocess.PIPE,
|
||||
stderr=subprocess.STDOUT,
|
||||
)
|
||||
stdout, stderr = proc.communicate()
|
||||
|
||||
if stdout:
|
||||
# DO NOT print the state return here!
|
||||
print('Cloud configuration files provisioned via pillar.')
|
||||
sys.stdout.flush()
|
||||
if stderr:
|
||||
print(stderr)
|
||||
sys.stderr.flush()
|
||||
|
||||
retcode = proc.returncode
|
||||
if retcode != 0:
|
||||
print('Failed to execute the preparation SLS file. Exit code: {0}'.format(retcode))
|
||||
sys.stdout.flush()
|
||||
if opts.clean and 'JENKINS_SALTCLOUD_VM_NAME' not in os.environ:
|
||||
delete_vm(opts)
|
||||
sys.exit(retcode)
|
||||
|
||||
if opts.prep_sls_2 is not None:
|
||||
time.sleep(3)
|
||||
|
||||
|
@ -769,6 +820,12 @@ def parse():
|
|||
default=[],
|
||||
help='Match minions using compound matchers, the minion ID, plus the passed grain.'
|
||||
)
|
||||
parser.add_option(
|
||||
'--cloud-only',
|
||||
default=False,
|
||||
action='store_true',
|
||||
help='Run the cloud provider tests only.'
|
||||
)
|
||||
|
||||
options, args = parser.parse_args()
|
||||
|
||||
|
|
Loading…
Add table
Reference in a new issue