mirror of
https://github.com/saltstack/salt.git
synced 2025-04-17 10:10:20 +00:00
Merge pull request #26219 from alprs/fix-cron_identifier_default
cron: make identifier default to state ID
This commit is contained in:
commit
8e1b5da2e0
4 changed files with 69 additions and 168 deletions
|
@ -9,6 +9,8 @@ Version 2015.5.4 is a bugfix release for :doc:`2015.5.0
|
|||
|
||||
Changes:
|
||||
|
||||
- The ``cron.present`` state now correctly defaults to state ID as identifier.
|
||||
|
||||
- When querying for VMs in ``ditigal_ocean_v2.py``, the number of VMs to include in a page was changed from 20
|
||||
(default) to 200 to reduce the number of API calls to Digital Ocean.
|
||||
|
||||
|
|
|
@ -265,14 +265,20 @@ def list_tab(user):
|
|||
ret['special'].append(dat)
|
||||
elif line.startswith('#'):
|
||||
# It's a comment! Catch it!
|
||||
comment = line.lstrip('# ')
|
||||
comment_line = line.lstrip('# ')
|
||||
|
||||
# load the identifier if any
|
||||
if SALT_CRON_IDENTIFIER in comment:
|
||||
parts = comment.split(SALT_CRON_IDENTIFIER)
|
||||
comment = parts[0].rstrip()
|
||||
if SALT_CRON_IDENTIFIER in comment_line:
|
||||
parts = comment_line.split(SALT_CRON_IDENTIFIER)
|
||||
comment_line = parts[0].rstrip()
|
||||
# skip leading :
|
||||
if len(parts[1]) > 1:
|
||||
identifier = parts[1][1:]
|
||||
|
||||
if comment is None:
|
||||
comment = comment_line
|
||||
else:
|
||||
comment += '\n' + comment_line
|
||||
elif len(line.split()) > 5:
|
||||
# Appears to be a standard cron line
|
||||
comps = line.split()
|
||||
|
|
|
@ -125,8 +125,7 @@ from salt.ext.six import string_types
|
|||
import salt.utils
|
||||
from salt.modules.cron import (
|
||||
_needs_change,
|
||||
_cron_matched,
|
||||
SALT_CRON_NO_IDENTIFIER
|
||||
_cron_matched
|
||||
)
|
||||
|
||||
|
||||
|
@ -217,7 +216,7 @@ def present(name,
|
|||
month='*',
|
||||
dayweek='*',
|
||||
comment=None,
|
||||
identifier=None):
|
||||
identifier=False):
|
||||
'''
|
||||
Verifies that the specified cron job is present for the specified user.
|
||||
For more advanced information about what exactly can be set in the cron
|
||||
|
@ -257,8 +256,8 @@ def present(name,
|
|||
edits. This defaults to the state id
|
||||
'''
|
||||
name = ' '.join(name.strip().split())
|
||||
if not identifier:
|
||||
identifier = SALT_CRON_NO_IDENTIFIER
|
||||
if identifier is False:
|
||||
identifier = name
|
||||
ret = {'changes': {},
|
||||
'comment': '',
|
||||
'name': name,
|
||||
|
@ -313,7 +312,7 @@ def present(name,
|
|||
|
||||
def absent(name,
|
||||
user='root',
|
||||
identifier=None,
|
||||
identifier=False,
|
||||
**kwargs):
|
||||
'''
|
||||
Verifies that the specified cron job is absent for the specified user; only
|
||||
|
@ -335,8 +334,8 @@ def absent(name,
|
|||
### of unsupported arguments will result in a traceback.
|
||||
|
||||
name = ' '.join(name.strip().split())
|
||||
if not identifier:
|
||||
identifier = SALT_CRON_NO_IDENTIFIER
|
||||
if identifier is False:
|
||||
identifier = name
|
||||
ret = {'name': name,
|
||||
'result': True,
|
||||
'changes': {},
|
||||
|
|
|
@ -135,7 +135,8 @@ class CronTestCase(TestCase):
|
|||
cron.present(
|
||||
name='foo',
|
||||
hour='2',
|
||||
user='root')
|
||||
user='root',
|
||||
identifier=None)
|
||||
self.assertEqual(
|
||||
get_crontab(),
|
||||
('# Lines below here are managed by Salt, do not edit\n'
|
||||
|
@ -143,7 +144,7 @@ class CronTestCase(TestCase):
|
|||
'* 2 * * * foo\n'
|
||||
'# SALT_CRON_IDENTIFIER:2\n'
|
||||
'* 2 * * * foo\n'
|
||||
'* 2 * * * foo\n'))
|
||||
'* 2 * * * foo'))
|
||||
|
||||
@patch('salt.modules.cron.raw_cron',
|
||||
new=MagicMock(side_effect=get_crontab))
|
||||
|
@ -192,214 +193,107 @@ class CronTestCase(TestCase):
|
|||
new=MagicMock(side_effect=get_crontab))
|
||||
@patch('salt.modules.cron._write_cron_lines',
|
||||
new=MagicMock(side_effect=write_crontab))
|
||||
def test_aissue_1072(self):
|
||||
def test_multiline_comments_are_updated(self):
|
||||
set_crontab(
|
||||
'# Lines below here are managed by Salt, do not edit\n'
|
||||
'# I have a multi-line comment SALT_CRON_IDENTIFIER:1\n'
|
||||
'# First crontab - single line comment SALT_CRON_IDENTIFIER:1\n'
|
||||
'* 1 * * * foo'
|
||||
)
|
||||
cron.present(
|
||||
name='foo',
|
||||
hour='1',
|
||||
comment='1I have a multi-line comment\n2about my script here.\n',
|
||||
comment='First crontab\nfirst multi-line comment\n',
|
||||
identifier='1',
|
||||
user='root')
|
||||
cron.present(
|
||||
name='foo',
|
||||
hour='1',
|
||||
comment='3I have a multi-line comment\n3about my script here.\n',
|
||||
comment='First crontab\nsecond multi-line comment\n',
|
||||
identifier='1',
|
||||
user='root')
|
||||
cron.present(
|
||||
name='foo',
|
||||
hour='1',
|
||||
comment='I have a multi-line comment\nabout my script here.\n',
|
||||
comment='Second crontab\nmulti-line comment\n',
|
||||
identifier='2',
|
||||
user='root')
|
||||
self.assertEqual(
|
||||
get_crontab(),
|
||||
'# Lines below here are managed by Salt, do not edit\n'
|
||||
'# 2about my script here. SALT_CRON_IDENTIFIER:1\n'
|
||||
'# First crontab\n'
|
||||
'# second multi-line comment SALT_CRON_IDENTIFIER:1\n'
|
||||
'* 1 * * * foo\n'
|
||||
'# I have a multi-line comment\n'
|
||||
'# about my script here. SALT_CRON_IDENTIFIER:2\n'
|
||||
'# Second crontab\n'
|
||||
'# multi-line comment SALT_CRON_IDENTIFIER:2\n'
|
||||
'* 1 * * * foo')
|
||||
|
||||
@patch('salt.modules.cron.raw_cron',
|
||||
new=MagicMock(side_effect=get_crontab))
|
||||
@patch('salt.modules.cron._write_cron_lines',
|
||||
new=MagicMock(side_effect=write_crontab))
|
||||
def test_issue_11935(self):
|
||||
def test_existing_unmanaged_jobs_are_made_managed(self):
|
||||
set_crontab(
|
||||
'# Lines below here are managed by Salt, do not edit\n'
|
||||
'0 2 * * * find /var/www -type f '
|
||||
'-mtime -7 -print0 | xargs -0 '
|
||||
'clamscan -i --no-summary 2>/dev/null'
|
||||
'0 2 * * * foo'
|
||||
)
|
||||
cmd = (
|
||||
'find /var/www -type f -mtime -7 -print0 '
|
||||
'| xargs -0 clamscan -i --no-summary 2>/dev/null'
|
||||
)
|
||||
self.assertEqual(cron._check_cron('root', cmd, hour='2', minute='0'),
|
||||
'present')
|
||||
ret = cron.present(cmd, 'root', minute='0', hour='2')
|
||||
self.assertEqual(ret['changes'], {})
|
||||
self.assertEqual(
|
||||
ret['comment'],
|
||||
'Cron find /var/www -type f -mtime -7 -print0 '
|
||||
'| xargs -0 clamscan -i --no-summary 2>/dev/null already present')
|
||||
self.assertEqual(cron._check_cron('root', cmd, hour='3', minute='0'),
|
||||
'update')
|
||||
ret = cron.present(cmd, 'root', minute='0', hour='3')
|
||||
self.assertEqual(ret['changes'],
|
||||
{'root': 'find /var/www -type f -mtime -7 -print0 | '
|
||||
'xargs -0 clamscan -i --no-summary 2>/dev/null'})
|
||||
self.assertEqual(
|
||||
ret['comment'],
|
||||
'Cron find /var/www -type f -mtime -7 -print0 '
|
||||
'| xargs -0 clamscan -i --no-summary 2>/dev/null updated')
|
||||
ret = cron._check_cron('root', 'foo', hour='2', minute='0')
|
||||
self.assertEqual(ret, 'present')
|
||||
ret = cron.present('foo', 'root', minute='0', hour='2')
|
||||
self.assertEqual(ret['changes'], {'root': 'foo'})
|
||||
self.assertEqual(ret['comment'], 'Cron foo updated')
|
||||
self.assertEqual(
|
||||
get_crontab(),
|
||||
'# Lines below here are managed by Salt, do not edit\n'
|
||||
'0 3 * * * find /var/www -type f -mtime -7 -print0 |'
|
||||
' xargs -0 clamscan -i --no-summary 2>/dev/null')
|
||||
'# SALT_CRON_IDENTIFIER:foo\n'
|
||||
'0 2 * * * foo')
|
||||
ret = cron.present('foo', 'root', minute='0', hour='2')
|
||||
self.assertEqual(ret['changes'], {})
|
||||
self.assertEqual(ret['comment'], 'Cron foo already present')
|
||||
|
||||
@patch('salt.modules.cron.raw_cron',
|
||||
new=MagicMock(side_effect=get_crontab))
|
||||
@patch('salt.modules.cron._write_cron_lines',
|
||||
new=MagicMock(side_effect=write_crontab))
|
||||
def test_issue_11935_with_id(self):
|
||||
def test_existing_noid_jobs_are_updated_with_identifier(self):
|
||||
set_crontab(
|
||||
'# Lines below here are managed by Salt, do not edit\n'
|
||||
'# SALT_CRON_IDENTIFIER:1\n'
|
||||
'0 2 * * * find /var/www -type f '
|
||||
'-mtime -7 -print0 | xargs -0 '
|
||||
'clamscan -i --no-summary 2>/dev/null'
|
||||
'# SALT_CRON_IDENTIFIER:NO ID SET\n'
|
||||
'1 * * * * foo'
|
||||
)
|
||||
cmd = (
|
||||
'find /var/www -type f -mtime -7 -print0 '
|
||||
'| xargs -0 clamscan -i --no-summary 2>/dev/null'
|
||||
)
|
||||
self.assertEqual(cron._check_cron(
|
||||
'root', cmd, hour='2', minute='0', identifier=1), 'present')
|
||||
ret = cron.present(cmd, 'root', minute='0', hour='2', identifier='1')
|
||||
self.assertEqual(ret['changes'], {})
|
||||
self.assertEqual(
|
||||
ret['comment'],
|
||||
'Cron find /var/www -type f -mtime -7 -print0 '
|
||||
'| xargs -0 clamscan -i --no-summary 2>/dev/null already present')
|
||||
self.assertEqual(cron._check_cron(
|
||||
'root', cmd, hour='3', minute='0', identifier='1'), 'update')
|
||||
ret = cron.present(cmd, 'root', minute='0', hour='3', identifier='1')
|
||||
self.assertEqual(ret['changes'],
|
||||
{'root': 'find /var/www -type f -mtime -7 -print0 | '
|
||||
'xargs -0 clamscan -i --no-summary 2>/dev/null'})
|
||||
self.assertEqual(
|
||||
ret['comment'],
|
||||
'Cron find /var/www -type f -mtime -7 -print0 '
|
||||
'| xargs -0 clamscan -i --no-summary 2>/dev/null updated')
|
||||
ret = cron._check_cron('root', 'foo', minute=1)
|
||||
self.assertEqual(ret, 'present')
|
||||
ret = cron.present('foo', 'root', minute=1)
|
||||
self.assertEqual(ret['changes'], {'root': 'foo'})
|
||||
self.assertEqual(ret['comment'], 'Cron foo updated')
|
||||
self.assertEqual(
|
||||
get_crontab(),
|
||||
'# Lines below here are managed by Salt, do not edit\n'
|
||||
'# SALT_CRON_IDENTIFIER:1\n'
|
||||
'0 3 * * * find /var/www -type f -mtime -7 -print0 |'
|
||||
' xargs -0 clamscan -i --no-summary 2>/dev/null')
|
||||
'# SALT_CRON_IDENTIFIER:foo\n'
|
||||
'1 * * * * foo')
|
||||
|
||||
@patch('salt.modules.cron.raw_cron',
|
||||
new=MagicMock(side_effect=get_crontab))
|
||||
@patch('salt.modules.cron._write_cron_lines',
|
||||
new=MagicMock(side_effect=write_crontab))
|
||||
def test_issue_11935_mixed(self):
|
||||
def test_existing_duplicate_unmanaged_jobs_are_merged_and_given_id(self):
|
||||
set_crontab(
|
||||
'# Lines below here are managed by Salt, do not edit\n'
|
||||
'0 2 * * * find /var/www -type f '
|
||||
'-mtime -7 -print0 | xargs -0 '
|
||||
'clamscan -i --no-summary 2>/dev/null'
|
||||
'0 2 * * * foo\n'
|
||||
'0 2 * * * foo'
|
||||
)
|
||||
cmd = (
|
||||
'find /var/www -type f -mtime -7 -print0 '
|
||||
'| xargs -0 clamscan -i --no-summary 2>/dev/null'
|
||||
)
|
||||
self.assertEqual(cron._check_cron('root', cmd, hour='2', minute='0'),
|
||||
'present')
|
||||
ret = cron.present(cmd, 'root', minute='0', hour='2')
|
||||
ret = cron._check_cron('root', 'foo', hour='2', minute='0')
|
||||
self.assertEqual(ret, 'present')
|
||||
ret = cron.present('foo', 'root', minute='0', hour='2')
|
||||
self.assertEqual(ret['changes'], {'root': 'foo'})
|
||||
self.assertEqual(ret['comment'], 'Cron foo updated')
|
||||
self.assertEqual(
|
||||
get_crontab(),
|
||||
'# Lines below here are managed by Salt, do not edit\n'
|
||||
'# SALT_CRON_IDENTIFIER:foo\n'
|
||||
'0 2 * * * foo')
|
||||
ret = cron.present('foo', 'root', minute='0', hour='2')
|
||||
self.assertEqual(ret['changes'], {})
|
||||
self.assertEqual(
|
||||
ret['comment'],
|
||||
'Cron find /var/www -type f -mtime -7 -print0 '
|
||||
'| xargs -0 clamscan -i --no-summary 2>/dev/null already present')
|
||||
self.assertEqual(cron._check_cron('root', cmd, hour='3', minute='0'),
|
||||
'update')
|
||||
ret = cron.present(cmd, 'root', minute='0', hour='3')
|
||||
self.assertEqual(ret['changes'],
|
||||
{'root': 'find /var/www -type f -mtime -7 -print0 | '
|
||||
'xargs -0 clamscan -i --no-summary 2>/dev/null'})
|
||||
self.assertEqual(
|
||||
ret['comment'],
|
||||
'Cron find /var/www -type f -mtime -7 -print0 '
|
||||
'| xargs -0 clamscan -i --no-summary 2>/dev/null updated')
|
||||
self.assertEqual(
|
||||
get_crontab(),
|
||||
'# Lines below here are managed by Salt, do not edit\n'
|
||||
'0 3 * * * find /var/www -type f -mtime -7 -print0 |'
|
||||
' xargs -0 clamscan -i --no-summary 2>/dev/null')
|
||||
self.assertEqual(cron._check_cron(
|
||||
'root', cmd, hour='2', minute='0', identifier='1'), 'update')
|
||||
ret = cron.present(cmd, 'root', minute='0', hour='2', identifier='1')
|
||||
self.assertEqual(
|
||||
ret['changes'],
|
||||
{'root': 'find /var/www -type f -mtime -7 -print0 | '
|
||||
'xargs -0 clamscan -i --no-summary 2>/dev/null'})
|
||||
self.assertEqual(
|
||||
ret['comment'],
|
||||
'Cron find /var/www -type f -mtime -7 -print0 '
|
||||
'| xargs -0 clamscan -i --no-summary 2>/dev/null updated')
|
||||
self.assertEqual(cron._check_cron(
|
||||
'root', cmd, hour='3', minute='0', identifier='1'), 'update')
|
||||
ret = cron.present(cmd, 'root', minute='0', hour='3', identifier='1')
|
||||
self.assertEqual(ret['changes'],
|
||||
{'root': 'find /var/www -type f -mtime -7 -print0 | '
|
||||
'xargs -0 clamscan -i --no-summary 2>/dev/null'})
|
||||
self.assertEqual(
|
||||
ret['comment'],
|
||||
'Cron find /var/www -type f -mtime -7 -print0 '
|
||||
'| xargs -0 clamscan -i --no-summary 2>/dev/null updated')
|
||||
self.assertEqual(
|
||||
get_crontab(),
|
||||
'# Lines below here are managed by Salt, do not edit\n'
|
||||
'# SALT_CRON_IDENTIFIER:1\n'
|
||||
'0 3 * * * find /var/www -type f -mtime -7 -print0 |'
|
||||
' xargs -0 clamscan -i --no-summary 2>/dev/null')
|
||||
|
||||
set_crontab(
|
||||
'# Lines below here are managed by Salt, do not edit\n'
|
||||
'0 2 * * * find /var/www -type f '
|
||||
'-mtime -7 -print0 | xargs -0 '
|
||||
'clamscan -i --no-summary 2>/dev/null'
|
||||
)
|
||||
self.assertEqual(cron._check_cron(
|
||||
'root', cmd + "a", hour='2', minute='0', identifier='1'), 'absent')
|
||||
ret = cron.present(
|
||||
cmd + "a", 'root', minute='0', hour='2', identifier='1')
|
||||
self.assertEqual(
|
||||
ret['changes'],
|
||||
{'root': 'find /var/www -type f -mtime -7 -print0 | '
|
||||
'xargs -0 clamscan -i --no-summary 2>/dev/nulla'})
|
||||
self.assertEqual(
|
||||
ret['comment'],
|
||||
'Cron find /var/www -type f -mtime -7 -print0 | '
|
||||
'xargs -0 clamscan -i --no-summary 2>/dev/nulla added '
|
||||
'to root\'s crontab')
|
||||
self.assertEqual(
|
||||
get_crontab(),
|
||||
'# Lines below here are managed by Salt, do not edit\n'
|
||||
'0 2 * * *'
|
||||
' find /var/www -type f -mtime -7 -print0'
|
||||
' | xargs -0 clamscan -i --no-summary 2>/dev/null\n'
|
||||
'# SALT_CRON_IDENTIFIER:1\n'
|
||||
'0 2 * * *'
|
||||
' find /var/www -type f -mtime -7 -print0'
|
||||
' | xargs -0 clamscan -i --no-summary 2>/dev/nulla')
|
||||
|
||||
self.assertEqual(ret['comment'], 'Cron foo already present')
|
||||
|
||||
if __name__ == '__main__':
|
||||
from integration import run_tests
|
||||
|
|
Loading…
Add table
Reference in a new issue