Пример #1
0
 def test__load_tab(self):
     cron.__grains__ = __grains__
     with patch.dict(cron.__grains__, {'os_family': 'Solaris'}):
         crons1 = cron.list_tab('root')
         crons2 = cron.list_tab('root')
         crons3 = cron.list_tab('root')
         crons4 = cron.list_tab('root')
         crons5 = cron.list_tab('root')
         self.assertEqual(
             crons1,
             {'pre': [], 'crons': [], 'env': [], 'special': []})
         self.assertEqual(
             crons2['crons'][0],
             {'comment': None,
              'commented': False,
              'dayweek': '*',
              'hour': '*',
              'identifier': None,
              'cmd': 'ls',
              'daymonth': '*',
              'minute': '*',
              'month': '*'})
         self.assertEqual(
             crons3['crons'][0],
             {'comment': 'commented',
              'commented': True,
              'dayweek': '*',
              'hour': '*',
              'identifier': None,
              'cmd': 'ls',
              'daymonth': '*',
              'minute': '*',
              'month': '*'})
         self.assertEqual(
             crons4['crons'][0],
             {'comment': 'foo',
              'commented': False,
              'dayweek': '*',
              'hour': '*',
              'identifier': None,
              'cmd': 'ls',
              'daymonth': '*',
              'minute': '*',
              'month': '*'})
         self.assertEqual(
             crons5['crons'][0],
             {'comment': 'foo',
              'commented': False,
              'dayweek': '*',
              'hour': '*',
              'identifier': 'blah',
              'cmd': 'ls',
              'daymonth': '*',
              'minute': '*',
              'month': '*'})
Пример #2
0
 def test__load_tab(self):
     cron.__grains__ = __grains__
     with patch.dict(cron.__grains__, {'os_family': 'Solaris'}):
         crons1 = cron.list_tab('root')
         crons2 = cron.list_tab('root')
         crons3 = cron.list_tab('root')
         crons4 = cron.list_tab('root')
         crons5 = cron.list_tab('root')
         self.assertEqual(
             crons1,
             {'pre': [], 'crons': [], 'env': [], 'special': []})
         self.assertEqual(
             crons2['crons'][0],
             {'comment': None,
              'commented': False,
              'dayweek': '*',
              'hour': '*',
              'identifier': None,
              'cmd': 'ls',
              'daymonth': '*',
              'minute': '*',
              'month': '*'})
         self.assertEqual(
             crons3['crons'][0],
             {'comment': 'commented',
              'commented': True,
              'dayweek': '*',
              'hour': '*',
              'identifier': None,
              'cmd': 'ls',
              'daymonth': '*',
              'minute': '*',
              'month': '*'})
         self.assertEqual(
             crons4['crons'][0],
             {'comment': 'foo',
              'commented': False,
              'dayweek': '*',
              'hour': '*',
              'identifier': None,
              'cmd': 'ls',
              'daymonth': '*',
              'minute': '*',
              'month': '*'})
         self.assertEqual(
             crons5['crons'][0],
             {'comment': 'foo',
              'commented': False,
              'dayweek': '*',
              'hour': '*',
              'identifier': 'blah',
              'cmd': 'ls',
              'daymonth': '*',
              'minute': '*',
              'month': '*'})
Пример #3
0
 def test_cron_extra_spaces(self):
     '''
     Issue #38449
     '''
     with patch.dict(cron.__grains__, {'os': None}), \
             patch('salt.modules.cron.raw_cron',
                   MagicMock(return_value=STUB_CRON_SPACES)):
         ret = cron.list_tab('root')
         eret = {
             'crons': [{
                 'cmd': 'echo "must  be  double  spaced"',
                 'comment': '',
                 'commented': False,
                 'daymonth': '*',
                 'dayweek': '*',
                 'hour': '*',
                 'identifier': 'echo "must  be  double  spaced"',
                 'minute': '11',
                 'month': '*'
             }],
             'env': [{
                 'name': 'TEST_VAR',
                 'value': '"a string with plenty of spaces"'
             }],
             'pre': [''],
             'special': []
         }
         self.assertEqual(eret, ret)
Пример #4
0
 def test_cron_extra_spaces(self):
     '''
     Issue #38449
     '''
     self.maxDiff = None
     with patch.dict(cron.__grains__, {'os': None}):
         ret = cron.list_tab('root')
         eret = {
             'crons': [{
                 'cmd': 'echo "must  be  double  spaced"',
                 'comment': '',
                 'commented': False,
                 'daymonth': '*',
                 'dayweek': '*',
                 'hour': '*',
                 'identifier': 'echo "must  be  double  spaced"',
                 'minute': '11',
                 'month': '*'
             }],
             'env': [{
                 'name': 'TEST_VAR',
                 'value': '"a string with plenty of spaces"'
             }],
             'pre': [''],
             'special': []
         }
         self.assertEqual(eret, ret)
Пример #5
0
 def test_cron_at_sign(self):
     with patch.dict(cron.__grains__, {'os': None}), \
             patch('salt.modules.cron.raw_cron',
                   MagicMock(return_value=STUB_AT_SIGN)):
         ret = cron.list_tab('root')
         eret = {'crons': [],
                 'env': [],
                 'pre': [''],
                 'special': [{u'cmd': u'echo "cron with @ sign"',
                              u'comment': u'',
                              u'commented': False,
                              u'identifier': u'echo "cron with @ sign"',
                              u'spec': u'@daily'}]}
         self.assertDictEqual(eret, ret)
Пример #6
0
 def test_list_tab_commented_cron_jobs(self):
     '''
     handle commented cron jobs
     https://github.com/saltstack/salt/issues/29082
     '''
     self.maxDiff = None
     with patch(
         'salt.modules.cron.raw_cron',
         new=MagicMock(side_effect=get_crontab)
     ):
         set_crontab(
             '# An unmanaged commented cron job\n'
             '#0 * * * * /bin/true\n'
             '# Lines below here are managed by Salt, do not edit\n'
             '# cron_1 SALT_CRON_IDENTIFIER:cron_1\n#DISABLED#0 * * * * my_cmd_1\n'
             '# cron_2 SALT_CRON_IDENTIFIER:cron_2\n#DISABLED#* * * * * my_cmd_2\n'
             '# cron_3 SALT_CRON_IDENTIFIER:cron_3\n'
             '#DISABLED#but it is a comment line'
             '#DISABLED#0 * * * * my_cmd_3\n'
             '# cron_4 SALT_CRON_IDENTIFIER:cron_4\n0 * * * * my_cmd_4\n'
         )
         crons1 = cron.list_tab('root')
         self.assertEqual(crons1, {
             'crons': [
                 {'cmd': 'my_cmd_1', 'comment': 'cron_1', 'daymonth': '*',
                  'dayweek': '*', 'hour': '*', 'identifier': 'cron_1',
                  'minute': '0', 'month': '*', 'commented': True},
                 {'cmd': 'my_cmd_2', 'comment': 'cron_2', 'daymonth': '*',
                  'dayweek': '*', 'hour': '*', 'identifier': 'cron_2',
                  'minute': '*', 'month': '*', 'commented': True},
                 {'cmd': 'line#DISABLED#0 * * * * my_cmd_3',
                  'comment': 'cron_3', 'daymonth': 'is',
                  'dayweek': 'comment', 'hour': 'it', 'identifier': 'cron_3',
                  'minute': 'but', 'month': 'a', 'commented': True},
                 {'cmd': 'my_cmd_4', 'comment': 'cron_4', 'daymonth': '*',
                  'dayweek': '*', 'hour': '*', 'identifier': 'cron_4',
                  'minute': '0', 'month': '*', 'commented': False},
             ],
             'env': [],
             'pre': ['# An unmanaged commented cron job', '#0 * * * * /bin/true'],
             'special': []})
Пример #7
0
 def test_list_tab_commented_cron_jobs(self):
     '''
     handle commented cron jobs
     https://github.com/saltstack/salt/issues/29082
     '''
     self.maxDiff = None
     with patch(
         'salt.modules.cron.raw_cron',
         new=MagicMock(side_effect=get_crontab)
     ):
         set_crontab(
             '# An unmanaged commented cron job\n'
             '#0 * * * * /bin/true\n'
             '# Lines below here are managed by Salt, do not edit\n'
             '# cron_1 SALT_CRON_IDENTIFIER:cron_1\n#DISABLED#0 * * * * my_cmd_1\n'
             '# cron_2 SALT_CRON_IDENTIFIER:cron_2\n#DISABLED#* * * * * my_cmd_2\n'
             '# cron_3 SALT_CRON_IDENTIFIER:cron_3\n'
             '#DISABLED#but it is a comment line'
             '#DISABLED#0 * * * * my_cmd_3\n'
             '# cron_4 SALT_CRON_IDENTIFIER:cron_4\n0 * * * * my_cmd_4\n'
         )
         crons1 = cron.list_tab('root')
         self.assertEqual(crons1, {
             'crons': [
                 {'cmd': 'my_cmd_1', 'comment': 'cron_1', 'daymonth': '*',
                  'dayweek': '*', 'hour': '*', 'identifier': 'cron_1',
                  'minute': '0', 'month': '*', 'commented': True},
                 {'cmd': 'my_cmd_2', 'comment': 'cron_2', 'daymonth': '*',
                  'dayweek': '*', 'hour': '*', 'identifier': 'cron_2',
                  'minute': '*', 'month': '*', 'commented': True},
                 {'cmd': 'line#DISABLED#0 * * * * my_cmd_3',
                  'comment': 'cron_3', 'daymonth': 'is',
                  'dayweek': 'comment', 'hour': 'it', 'identifier': 'cron_3',
                  'minute': 'but', 'month': 'a', 'commented': True},
                 {'cmd': 'my_cmd_4', 'comment': 'cron_4', 'daymonth': '*',
                  'dayweek': '*', 'hour': '*', 'identifier': 'cron_4',
                  'minute': '0', 'month': '*', 'commented': False},
             ],
             'env': [],
             'pre': ['# An unmanaged commented cron job', '#0 * * * * /bin/true'],
             'special': []})
Пример #8
0
 def test_list_tab(self):
     self.assertDictEqual(STUB_SIMPLE_CRON_DICT, cron.list_tab('DUMMY_USER'))
Пример #9
0
 def test_list_tab(self):
     self.assertDictEqual(STUB_SIMPLE_CRON_DICT,
                          cron.list_tab('DUMMY_USER'))
Пример #10
0
 def test__issue10959(self):
     '''
     handle multi old style crontabs
     https://github.com/saltstack/salt/issues/10959
     '''
     with patch('salt.modules.cron.raw_cron',
                new=MagicMock(side_effect=get_crontab)):
         set_crontab(
             '# Lines below here are managed by Salt, do not edit\n'
             '# uoo SALT_CRON_IDENTIFIER:NO ID SET\n* * * * * ls\n'
             '# uuoo SALT_CRON_IDENTIFIER:NO ID SET\n* * * * * too\n'
             '# uuuoo SALT_CRON_IDENTIFIER:NO ID SET\n* * * * * zoo\n'
             '# SALT_CRON_IDENTIFIER:NO ID SET\n* * * * * yoo\n'
             '# SALT_CRON_IDENTIFIER:NO ID SET\n* * * * * xoo\n'
             # as managed per salt, the last lines will be merged together !
             '# SALT_CRON_IDENTIFIER:NO ID SET\n* * * * * samecmd\n'
             '* * * * * samecmd\n'
             '* * * * * otheridcmd\n'
             '* * * * * otheridcmd\n'
             '# SALT_CRON_IDENTIFIER:NO ID SET\n0 * * * * samecmd1\n'
             '1 * * * * samecmd1\n'
             '0 * * * * otheridcmd1\n'
             '1 * * * * otheridcmd1\n'
             # special case here, none id managed line with same command
             # as a later id managed line will become managed
             '# SALT_CRON_IDENTIFIER:1\n0 * * * * otheridcmd1\n'
             '# SALT_CRON_IDENTIFIER:2\n0 * * * * otheridcmd1\n')
         crons1 = cron.list_tab('root')
         # the filtering is done on save, we reflect in listing
         # the same that we have in a file, no matter what we
         # have
         self.assertEqual(
             crons1, {
                 'crons': [{
                     'cmd': 'ls',
                     'comment': 'uoo',
                     'daymonth': '*',
                     'dayweek': '*',
                     'hour': '*',
                     'identifier': 'NO ID SET',
                     'minute': '*',
                     'month': '*'
                 }, {
                     'cmd': 'too',
                     'comment': 'uuoo',
                     'daymonth': '*',
                     'dayweek': '*',
                     'hour': '*',
                     'identifier': 'NO ID SET',
                     'minute': '*',
                     'month': '*'
                 }, {
                     'cmd': 'zoo',
                     'comment': 'uuuoo',
                     'daymonth': '*',
                     'dayweek': '*',
                     'hour': '*',
                     'identifier': 'NO ID SET',
                     'minute': '*',
                     'month': '*'
                 }, {
                     'cmd': 'yoo',
                     'comment': '',
                     'daymonth': '*',
                     'dayweek': '*',
                     'hour': '*',
                     'identifier': 'NO ID SET',
                     'minute': '*',
                     'month': '*'
                 }, {
                     'cmd': 'xoo',
                     'comment': '',
                     'daymonth': '*',
                     'dayweek': '*',
                     'hour': '*',
                     'identifier': 'NO ID SET',
                     'minute': '*',
                     'month': '*'
                 }, {
                     'cmd': 'samecmd',
                     'comment': '',
                     'daymonth': '*',
                     'dayweek': '*',
                     'hour': '*',
                     'identifier': 'NO ID SET',
                     'minute': '*',
                     'month': '*'
                 }, {
                     'cmd': 'samecmd',
                     'comment': None,
                     'daymonth': '*',
                     'dayweek': '*',
                     'hour': '*',
                     'identifier': None,
                     'minute': '*',
                     'month': '*'
                 }, {
                     'cmd': 'otheridcmd',
                     'comment': None,
                     'daymonth': '*',
                     'dayweek': '*',
                     'hour': '*',
                     'identifier': None,
                     'minute': '*',
                     'month': '*'
                 }, {
                     'cmd': 'otheridcmd',
                     'comment': None,
                     'daymonth': '*',
                     'dayweek': '*',
                     'hour': '*',
                     'identifier': None,
                     'minute': '*',
                     'month': '*'
                 }, {
                     'cmd': 'samecmd1',
                     'comment': '',
                     'daymonth': '*',
                     'dayweek': '*',
                     'hour': '*',
                     'identifier': 'NO ID SET',
                     'minute': '0',
                     'month': '*'
                 }, {
                     'cmd': 'samecmd1',
                     'comment': None,
                     'daymonth': '*',
                     'dayweek': '*',
                     'hour': '*',
                     'identifier': None,
                     'minute': '1',
                     'month': '*'
                 }, {
                     'cmd': 'otheridcmd1',
                     'comment': None,
                     'daymonth': '*',
                     'dayweek': '*',
                     'hour': '*',
                     'identifier': None,
                     'minute': '0',
                     'month': '*'
                 }, {
                     'cmd': 'otheridcmd1',
                     'comment': None,
                     'daymonth': '*',
                     'dayweek': '*',
                     'hour': '*',
                     'identifier': None,
                     'minute': '1',
                     'month': '*'
                 }, {
                     'cmd': 'otheridcmd1',
                     'comment': '',
                     'daymonth': '*',
                     'dayweek': '*',
                     'hour': '*',
                     'identifier': '1',
                     'minute': '0',
                     'month': '*'
                 }, {
                     'cmd': 'otheridcmd1',
                     'comment': '',
                     'daymonth': '*',
                     'dayweek': '*',
                     'hour': '*',
                     'identifier': '2',
                     'minute': '0',
                     'month': '*'
                 }],
                 'env': [],
                 'pre': [],
                 'special': []
             })
         # so yood so far, no problem for now, trying to save the
         # multilines without id crons now
         inc_tests = [
             ('# Lines below here are managed by Salt, do not edit\n'
              '# uoo SALT_CRON_IDENTIFIER:NO ID SET\n* * * * * ls'),
             #
             ('# Lines below here are managed by Salt, do not edit\n'
              '# uoo SALT_CRON_IDENTIFIER:NO ID SET\n* * * * * ls\n'
              '# uuoo SALT_CRON_IDENTIFIER:NO ID SET\n* * * * * too'),
             #
             ('# Lines below here are managed by Salt, do not edit\n'
              '# uoo SALT_CRON_IDENTIFIER:NO ID SET\n* * * * * ls\n'
              '# uuoo SALT_CRON_IDENTIFIER:NO ID SET\n* * * * * too\n'
              '# uuuoo SALT_CRON_IDENTIFIER:NO ID SET\n* * * * * zoo'),
             #
             ('# Lines below here are managed by Salt, do not edit\n'
              '# uoo SALT_CRON_IDENTIFIER:NO ID SET\n* * * * * ls\n'
              '# uuoo SALT_CRON_IDENTIFIER:NO ID SET\n* * * * * too\n'
              '# uuuoo SALT_CRON_IDENTIFIER:NO ID SET\n* * * * * zoo\n'
              '# SALT_CRON_IDENTIFIER:NO ID SET\n* * * * * yoo'),
             #
             ('# Lines below here are managed by Salt, do not edit\n'
              '# uoo SALT_CRON_IDENTIFIER:NO ID SET\n* * * * * ls\n'
              '# uuoo SALT_CRON_IDENTIFIER:NO ID SET\n* * * * * too\n'
              '# uuuoo SALT_CRON_IDENTIFIER:NO ID SET\n* * * * * zoo\n'
              '# SALT_CRON_IDENTIFIER:NO ID SET\n* * * * * yoo\n'
              '# SALT_CRON_IDENTIFIER:NO ID SET\n* * * * * xoo'),
             #
             ('# Lines below here are managed by Salt, do not edit\n'
              '# uoo SALT_CRON_IDENTIFIER:NO ID SET\n* * * * * ls\n'
              '# uuoo SALT_CRON_IDENTIFIER:NO ID SET\n* * * * * too\n'
              '# uuuoo SALT_CRON_IDENTIFIER:NO ID SET\n* * * * * zoo\n'
              '# SALT_CRON_IDENTIFIER:NO ID SET\n* * * * * yoo\n'
              '# SALT_CRON_IDENTIFIER:NO ID SET\n* * * * * xoo\n'
              '# SALT_CRON_IDENTIFIER:NO ID SET\n* * * * * samecmd'),
             #
             ('# Lines below here are managed by Salt, do not edit\n'
              '# uoo SALT_CRON_IDENTIFIER:NO ID SET\n* * * * * ls\n'
              '# uuoo SALT_CRON_IDENTIFIER:NO ID SET\n* * * * * too\n'
              '# uuuoo SALT_CRON_IDENTIFIER:NO ID SET\n* * * * * zoo\n'
              '# SALT_CRON_IDENTIFIER:NO ID SET\n* * * * * yoo\n'
              '# SALT_CRON_IDENTIFIER:NO ID SET\n* * * * * xoo\n'
              '# SALT_CRON_IDENTIFIER:NO ID SET\n* * * * * samecmd'),
             #
             ('# Lines below here are managed by Salt, do not edit\n'
              '# uoo SALT_CRON_IDENTIFIER:NO ID SET\n* * * * * ls\n'
              '# uuoo SALT_CRON_IDENTIFIER:NO ID SET\n* * * * * too\n'
              '# uuuoo SALT_CRON_IDENTIFIER:NO ID SET\n* * * * * zoo\n'
              '# SALT_CRON_IDENTIFIER:NO ID SET\n* * * * * yoo\n'
              '# SALT_CRON_IDENTIFIER:NO ID SET\n* * * * * xoo\n'
              '# SALT_CRON_IDENTIFIER:NO ID SET\n* * * * * samecmd\n'
              '* * * * * otheridcmd'),
             #
             ('# Lines below here are managed by Salt, do not edit\n'
              '# uoo SALT_CRON_IDENTIFIER:NO ID SET\n* * * * * ls\n'
              '# uuoo SALT_CRON_IDENTIFIER:NO ID SET\n* * * * * too\n'
              '# uuuoo SALT_CRON_IDENTIFIER:NO ID SET\n* * * * * zoo\n'
              '# SALT_CRON_IDENTIFIER:NO ID SET\n* * * * * yoo\n'
              '# SALT_CRON_IDENTIFIER:NO ID SET\n* * * * * xoo\n'
              '# SALT_CRON_IDENTIFIER:NO ID SET\n* * * * * samecmd\n'
              '* * * * * otheridcmd'),
             #
             ('# Lines below here are managed by Salt, do not edit\n'
              '# uoo SALT_CRON_IDENTIFIER:NO ID SET\n* * * * * ls\n'
              '# uuoo SALT_CRON_IDENTIFIER:NO ID SET\n* * * * * too\n'
              '# uuuoo SALT_CRON_IDENTIFIER:NO ID SET\n* * * * * zoo\n'
              '# SALT_CRON_IDENTIFIER:NO ID SET\n* * * * * yoo\n'
              '# SALT_CRON_IDENTIFIER:NO ID SET\n* * * * * xoo\n'
              '# SALT_CRON_IDENTIFIER:NO ID SET\n* * * * * samecmd\n'
              '* * * * * otheridcmd\n'
              '# SALT_CRON_IDENTIFIER:NO ID SET\n'
              '0 * * * * samecmd1'),
             #
             ('# Lines below here are managed by Salt, do not edit\n'
              '# uoo SALT_CRON_IDENTIFIER:NO ID SET\n* * * * * ls\n'
              '# uuoo SALT_CRON_IDENTIFIER:NO ID SET\n* * * * * too\n'
              '# uuuoo SALT_CRON_IDENTIFIER:NO ID SET\n* * * * * zoo\n'
              '# SALT_CRON_IDENTIFIER:NO ID SET\n* * * * * yoo\n'
              '# SALT_CRON_IDENTIFIER:NO ID SET\n* * * * * xoo\n'
              '# SALT_CRON_IDENTIFIER:NO ID SET\n* * * * * samecmd\n'
              '* * * * * otheridcmd\n'
              '# SALT_CRON_IDENTIFIER:NO ID SET\n1 * * * * samecmd1'),
             #
             ('# Lines below here are managed by Salt, do not edit\n'
              '# uoo SALT_CRON_IDENTIFIER:NO ID SET\n* * * * * ls\n'
              '# uuoo SALT_CRON_IDENTIFIER:NO ID SET\n* * * * * too\n'
              '# uuuoo SALT_CRON_IDENTIFIER:NO ID SET\n* * * * * zoo\n'
              '# SALT_CRON_IDENTIFIER:NO ID SET\n* * * * * yoo\n'
              '# SALT_CRON_IDENTIFIER:NO ID SET\n* * * * * xoo\n'
              '# SALT_CRON_IDENTIFIER:NO ID SET\n* * * * * samecmd\n'
              '* * * * * otheridcmd\n'
              '# SALT_CRON_IDENTIFIER:NO ID SET\n1 * * * * samecmd1\n'
              '0 * * * * otheridcmd1'),
             #
             ('# Lines below here are managed by Salt, do not edit\n'
              '# uoo SALT_CRON_IDENTIFIER:NO ID SET\n* * * * * ls\n'
              '# uuoo SALT_CRON_IDENTIFIER:NO ID SET\n* * * * * too\n'
              '# uuuoo SALT_CRON_IDENTIFIER:NO ID SET\n* * * * * zoo\n'
              '# SALT_CRON_IDENTIFIER:NO ID SET\n* * * * * yoo\n'
              '# SALT_CRON_IDENTIFIER:NO ID SET\n* * * * * xoo\n'
              '# SALT_CRON_IDENTIFIER:NO ID SET\n* * * * * samecmd\n'
              '* * * * * otheridcmd\n'
              '# SALT_CRON_IDENTIFIER:NO ID SET\n1 * * * * samecmd1\n'
              '1 * * * * otheridcmd1'),
             #
             ('# Lines below here are managed by Salt, do not edit\n'
              '# uoo SALT_CRON_IDENTIFIER:NO ID SET\n* * * * * ls\n'
              '# uuoo SALT_CRON_IDENTIFIER:NO ID SET\n* * * * * too\n'
              '# uuuoo SALT_CRON_IDENTIFIER:NO ID SET\n* * * * * zoo\n'
              '# SALT_CRON_IDENTIFIER:NO ID SET\n* * * * * yoo\n'
              '# SALT_CRON_IDENTIFIER:NO ID SET\n* * * * * xoo\n'
              '# SALT_CRON_IDENTIFIER:NO ID SET\n* * * * * samecmd\n'
              '* * * * * otheridcmd\n'
              '# SALT_CRON_IDENTIFIER:NO ID SET\n1 * * * * samecmd1\n'
              '# SALT_CRON_IDENTIFIER:1\n0 * * * * otheridcmd1'),
             #
             ('# Lines below here are managed by Salt, do not edit\n'
              '# uoo SALT_CRON_IDENTIFIER:NO ID SET\n* * * * * ls\n'
              '# uuoo SALT_CRON_IDENTIFIER:NO ID SET\n* * * * * too\n'
              '# uuuoo SALT_CRON_IDENTIFIER:NO ID SET\n* * * * * zoo\n'
              '# SALT_CRON_IDENTIFIER:NO ID SET\n* * * * * yoo\n'
              '# SALT_CRON_IDENTIFIER:NO ID SET\n* * * * * xoo\n'
              '# SALT_CRON_IDENTIFIER:NO ID SET\n* * * * * samecmd\n'
              '* * * * * otheridcmd\n'
              '# SALT_CRON_IDENTIFIER:NO ID SET\n1 * * * * samecmd1\n'
              '# SALT_CRON_IDENTIFIER:1\n0 * * * * otheridcmd1\n'
              '# SALT_CRON_IDENTIFIER:2\n0 * * * * otheridcmd1')
         ]
         set_crontab('')
         for idx, cr in enumerate(crons1['crons']):
             cron.set_job('root', **cr)
             self.assertEqual(get_crontab(), inc_tests[idx],
                              ("idx {0}\n'{1}'\n != \n'{2}'\n\n\n"
                               "\'{1}\' != \'{2}\'").format(
                                   idx, get_crontab(), inc_tests[idx]))
Пример #11
0
 def test_list_tab(self):
     with patch('salt.modules.cron.raw_cron', new=MagicMock(return_value=STUB_SIMPLE_RAW_CRON)):
         self.assertDictEqual(STUB_SIMPLE_CRON_DICT, cron.list_tab('DUMMY_USER'))
Пример #12
0
 def test__load_tab(self):
     with patch.dict(cron.__grains__, {'os_family': 'Solaris'}), \
             patch('salt.modules.cron.raw_cron',
                   new=MagicMock(side_effect=[
                       (L + '\n'),
                       (L + '* * * * * ls\nn'),
                       (L + '# commented\n'
                        '#DISABLED#* * * * * ls\n'),
                       (L + '# foo\n'
                        '* * * * * ls\n'),
                       (L + '# foo {0}:blah\n'.format(
                           cron.SALT_CRON_IDENTIFIER) +
                           '* * * * * ls\n')])):
         crons1 = cron.list_tab('root')
         crons2 = cron.list_tab('root')
         crons3 = cron.list_tab('root')
         crons4 = cron.list_tab('root')
         crons5 = cron.list_tab('root')
         self.assertEqual(
             crons1,
             {'pre': [], 'crons': [], 'env': [], 'special': []})
         self.assertEqual(
             crons2['crons'][0],
             {'comment': None,
              'commented': False,
              'dayweek': '*',
              'hour': '*',
              'identifier': None,
              'cmd': 'ls',
              'daymonth': '*',
              'minute': '*',
              'month': '*'})
         self.assertEqual(
             crons3['crons'][0],
             {'comment': 'commented',
              'commented': True,
              'dayweek': '*',
              'hour': '*',
              'identifier': None,
              'cmd': 'ls',
              'daymonth': '*',
              'minute': '*',
              'month': '*'})
         self.assertEqual(
             crons4['crons'][0],
             {'comment': 'foo',
              'commented': False,
              'dayweek': '*',
              'hour': '*',
              'identifier': None,
              'cmd': 'ls',
              'daymonth': '*',
              'minute': '*',
              'month': '*'})
         self.assertEqual(
             crons5['crons'][0],
             {'comment': 'foo',
              'commented': False,
              'dayweek': '*',
              'hour': '*',
              'identifier': 'blah',
              'cmd': 'ls',
              'daymonth': '*',
              'minute': '*',
              'month': '*'})
Пример #13
0
 def test__issue10959(self):
     '''
     handle multi old style crontabs
     https://github.com/saltstack/salt/issues/10959
     '''
     with patch(
         'salt.modules.cron.raw_cron',
         new=MagicMock(side_effect=get_crontab)
     ):
         set_crontab(
             '# Lines below here are managed by Salt, do not edit\n'
             '# uoo SALT_CRON_IDENTIFIER:NO ID SET\n* * * * * ls\n'
             '# uuoo SALT_CRON_IDENTIFIER:NO ID SET\n* * * * * too\n'
             '# uuuoo SALT_CRON_IDENTIFIER:NO ID SET\n* * * * * zoo\n'
             '# SALT_CRON_IDENTIFIER:NO ID SET\n* * * * * yoo\n'
             '# SALT_CRON_IDENTIFIER:NO ID SET\n* * * * * xoo\n'
             # as managed per salt, the last lines will be merged together !
             '# SALT_CRON_IDENTIFIER:NO ID SET\n* * * * * samecmd\n'
             '* * * * * samecmd\n'
             '* * * * * otheridcmd\n'
             '* * * * * otheridcmd\n'
             '# SALT_CRON_IDENTIFIER:NO ID SET\n0 * * * * samecmd1\n'
             '1 * * * * samecmd1\n'
             '0 * * * * otheridcmd1\n'
             '1 * * * * otheridcmd1\n'
             # special case here, none id managed line with same command
             # as a later id managed line will become managed
             '# SALT_CRON_IDENTIFIER:1\n0 * * * * otheridcmd1\n'
             '# SALT_CRON_IDENTIFIER:2\n0 * * * * otheridcmd1\n'
         )
         crons1 = cron.list_tab('root')
         # the filtering is done on save, we reflect in listing
         # the same that we have in a file, no matter what we
         # have
         self.assertEqual(crons1, {
             'crons': [
                 {'cmd': 'ls', 'comment': 'uoo', 'daymonth': '*',
                  'dayweek': '*', 'hour': '*', 'identifier': 'NO ID SET',
                  'minute': '*', 'month': '*'},
                 {'cmd': 'too', 'comment': 'uuoo', 'daymonth': '*',
                  'dayweek': '*', 'hour': '*', 'identifier': 'NO ID SET',
                  'minute': '*', 'month': '*'},
                 {'cmd': 'zoo', 'comment': 'uuuoo', 'daymonth': '*',
                  'dayweek': '*', 'hour': '*', 'identifier': 'NO ID SET',
                  'minute': '*', 'month': '*'},
                 {'cmd': 'yoo', 'comment': '', 'daymonth': '*',
                  'dayweek': '*', 'hour': '*', 'identifier': 'NO ID SET',
                  'minute': '*', 'month': '*'},
                 {'cmd': 'xoo', 'comment': '', 'daymonth': '*',
                  'dayweek': '*', 'hour': '*', 'identifier': 'NO ID SET',
                  'minute': '*', 'month': '*'},
                 {'cmd': 'samecmd', 'comment': '', 'daymonth': '*',
                  'dayweek': '*', 'hour': '*', 'identifier': 'NO ID SET',
                  'minute': '*', 'month': '*'},
                 {'cmd': 'samecmd', 'comment': None, 'daymonth': '*',
                  'dayweek': '*', 'hour': '*', 'identifier': None,
                  'minute': '*', 'month': '*'},
                 {'cmd': 'otheridcmd', 'comment': None, 'daymonth': '*',
                  'dayweek': '*', 'hour': '*', 'identifier': None,
                  'minute': '*', 'month': '*'},
                 {'cmd': 'otheridcmd', 'comment': None, 'daymonth': '*',
                  'dayweek': '*', 'hour': '*', 'identifier': None,
                  'minute': '*', 'month': '*'},
                 {'cmd': 'samecmd1', 'comment': '', 'daymonth': '*',
                  'dayweek': '*', 'hour': '*', 'identifier': 'NO ID SET',
                  'minute': '0', 'month': '*'},
                 {'cmd': 'samecmd1', 'comment': None, 'daymonth': '*',
                  'dayweek': '*', 'hour': '*', 'identifier': None,
                  'minute': '1', 'month': '*'},
                 {'cmd': 'otheridcmd1', 'comment': None, 'daymonth': '*',
                  'dayweek': '*', 'hour': '*', 'identifier': None,
                  'minute': '0', 'month': '*'},
                 {'cmd': 'otheridcmd1', 'comment': None, 'daymonth': '*',
                  'dayweek': '*', 'hour': '*', 'identifier': None,
                  'minute': '1', 'month': '*'},
                 {'cmd': 'otheridcmd1', 'comment': '', 'daymonth': '*',
                  'dayweek': '*', 'hour': '*', 'identifier': '1',
                  'minute': '0', 'month': '*'},
                 {'cmd': 'otheridcmd1',
                  'comment': '', 'daymonth': '*', 'dayweek': '*',
                  'hour': '*', 'identifier': '2', 'minute': '0',
                  'month': '*'}
             ],
             'env': [],
             'pre': [],
             'special': []})
         # so yood so far, no problem for now, trying to save the
         # multilines without id crons now
         inc_tests = [
             ('# Lines below here are managed by Salt, do not edit\n'
              '# uoo SALT_CRON_IDENTIFIER:NO ID SET\n* * * * * ls'),
             #
             ('# Lines below here are managed by Salt, do not edit\n'
              '# uoo SALT_CRON_IDENTIFIER:NO ID SET\n* * * * * ls\n'
              '# uuoo SALT_CRON_IDENTIFIER:NO ID SET\n* * * * * too'),
             #
             ('# Lines below here are managed by Salt, do not edit\n'
              '# uoo SALT_CRON_IDENTIFIER:NO ID SET\n* * * * * ls\n'
              '# uuoo SALT_CRON_IDENTIFIER:NO ID SET\n* * * * * too\n'
              '# uuuoo SALT_CRON_IDENTIFIER:NO ID SET\n* * * * * zoo'),
             #
             ('# Lines below here are managed by Salt, do not edit\n'
              '# uoo SALT_CRON_IDENTIFIER:NO ID SET\n* * * * * ls\n'
              '# uuoo SALT_CRON_IDENTIFIER:NO ID SET\n* * * * * too\n'
              '# uuuoo SALT_CRON_IDENTIFIER:NO ID SET\n* * * * * zoo\n'
              '# SALT_CRON_IDENTIFIER:NO ID SET\n* * * * * yoo'),
             #
             ('# Lines below here are managed by Salt, do not edit\n'
              '# uoo SALT_CRON_IDENTIFIER:NO ID SET\n* * * * * ls\n'
              '# uuoo SALT_CRON_IDENTIFIER:NO ID SET\n* * * * * too\n'
              '# uuuoo SALT_CRON_IDENTIFIER:NO ID SET\n* * * * * zoo\n'
              '# SALT_CRON_IDENTIFIER:NO ID SET\n* * * * * yoo\n'
              '# SALT_CRON_IDENTIFIER:NO ID SET\n* * * * * xoo'),
             #
             ('# Lines below here are managed by Salt, do not edit\n'
              '# uoo SALT_CRON_IDENTIFIER:NO ID SET\n* * * * * ls\n'
              '# uuoo SALT_CRON_IDENTIFIER:NO ID SET\n* * * * * too\n'
              '# uuuoo SALT_CRON_IDENTIFIER:NO ID SET\n* * * * * zoo\n'
              '# SALT_CRON_IDENTIFIER:NO ID SET\n* * * * * yoo\n'
              '# SALT_CRON_IDENTIFIER:NO ID SET\n* * * * * xoo\n'
              '# SALT_CRON_IDENTIFIER:NO ID SET\n* * * * * samecmd'),
             #
             ('# Lines below here are managed by Salt, do not edit\n'
              '# uoo SALT_CRON_IDENTIFIER:NO ID SET\n* * * * * ls\n'
              '# uuoo SALT_CRON_IDENTIFIER:NO ID SET\n* * * * * too\n'
              '# uuuoo SALT_CRON_IDENTIFIER:NO ID SET\n* * * * * zoo\n'
              '# SALT_CRON_IDENTIFIER:NO ID SET\n* * * * * yoo\n'
              '# SALT_CRON_IDENTIFIER:NO ID SET\n* * * * * xoo\n'
              '# SALT_CRON_IDENTIFIER:NO ID SET\n* * * * * samecmd'),
             #
             ('# Lines below here are managed by Salt, do not edit\n'
              '# uoo SALT_CRON_IDENTIFIER:NO ID SET\n* * * * * ls\n'
              '# uuoo SALT_CRON_IDENTIFIER:NO ID SET\n* * * * * too\n'
              '# uuuoo SALT_CRON_IDENTIFIER:NO ID SET\n* * * * * zoo\n'
              '# SALT_CRON_IDENTIFIER:NO ID SET\n* * * * * yoo\n'
              '# SALT_CRON_IDENTIFIER:NO ID SET\n* * * * * xoo\n'
              '# SALT_CRON_IDENTIFIER:NO ID SET\n* * * * * samecmd\n'
              '* * * * * otheridcmd'),
             #
             ('# Lines below here are managed by Salt, do not edit\n'
              '# uoo SALT_CRON_IDENTIFIER:NO ID SET\n* * * * * ls\n'
              '# uuoo SALT_CRON_IDENTIFIER:NO ID SET\n* * * * * too\n'
              '# uuuoo SALT_CRON_IDENTIFIER:NO ID SET\n* * * * * zoo\n'
              '# SALT_CRON_IDENTIFIER:NO ID SET\n* * * * * yoo\n'
              '# SALT_CRON_IDENTIFIER:NO ID SET\n* * * * * xoo\n'
              '# SALT_CRON_IDENTIFIER:NO ID SET\n* * * * * samecmd\n'
              '* * * * * otheridcmd'),
             #
             ('# Lines below here are managed by Salt, do not edit\n'
              '# uoo SALT_CRON_IDENTIFIER:NO ID SET\n* * * * * ls\n'
              '# uuoo SALT_CRON_IDENTIFIER:NO ID SET\n* * * * * too\n'
              '# uuuoo SALT_CRON_IDENTIFIER:NO ID SET\n* * * * * zoo\n'
              '# SALT_CRON_IDENTIFIER:NO ID SET\n* * * * * yoo\n'
              '# SALT_CRON_IDENTIFIER:NO ID SET\n* * * * * xoo\n'
              '# SALT_CRON_IDENTIFIER:NO ID SET\n* * * * * samecmd\n'
              '* * * * * otheridcmd\n'
              '# SALT_CRON_IDENTIFIER:NO ID SET\n'
              '0 * * * * samecmd1'),
             #
             ('# Lines below here are managed by Salt, do not edit\n'
              '# uoo SALT_CRON_IDENTIFIER:NO ID SET\n* * * * * ls\n'
              '# uuoo SALT_CRON_IDENTIFIER:NO ID SET\n* * * * * too\n'
              '# uuuoo SALT_CRON_IDENTIFIER:NO ID SET\n* * * * * zoo\n'
              '# SALT_CRON_IDENTIFIER:NO ID SET\n* * * * * yoo\n'
              '# SALT_CRON_IDENTIFIER:NO ID SET\n* * * * * xoo\n'
              '# SALT_CRON_IDENTIFIER:NO ID SET\n* * * * * samecmd\n'
              '* * * * * otheridcmd\n'
              '# SALT_CRON_IDENTIFIER:NO ID SET\n1 * * * * samecmd1'),
             #
             ('# Lines below here are managed by Salt, do not edit\n'
              '# uoo SALT_CRON_IDENTIFIER:NO ID SET\n* * * * * ls\n'
              '# uuoo SALT_CRON_IDENTIFIER:NO ID SET\n* * * * * too\n'
              '# uuuoo SALT_CRON_IDENTIFIER:NO ID SET\n* * * * * zoo\n'
              '# SALT_CRON_IDENTIFIER:NO ID SET\n* * * * * yoo\n'
              '# SALT_CRON_IDENTIFIER:NO ID SET\n* * * * * xoo\n'
              '# SALT_CRON_IDENTIFIER:NO ID SET\n* * * * * samecmd\n'
              '* * * * * otheridcmd\n'
              '# SALT_CRON_IDENTIFIER:NO ID SET\n1 * * * * samecmd1\n'
              '0 * * * * otheridcmd1'),
             #
             ('# Lines below here are managed by Salt, do not edit\n'
              '# uoo SALT_CRON_IDENTIFIER:NO ID SET\n* * * * * ls\n'
              '# uuoo SALT_CRON_IDENTIFIER:NO ID SET\n* * * * * too\n'
              '# uuuoo SALT_CRON_IDENTIFIER:NO ID SET\n* * * * * zoo\n'
              '# SALT_CRON_IDENTIFIER:NO ID SET\n* * * * * yoo\n'
              '# SALT_CRON_IDENTIFIER:NO ID SET\n* * * * * xoo\n'
              '# SALT_CRON_IDENTIFIER:NO ID SET\n* * * * * samecmd\n'
              '* * * * * otheridcmd\n'
              '# SALT_CRON_IDENTIFIER:NO ID SET\n1 * * * * samecmd1\n'
              '1 * * * * otheridcmd1'),
             #
             ('# Lines below here are managed by Salt, do not edit\n'
              '# uoo SALT_CRON_IDENTIFIER:NO ID SET\n* * * * * ls\n'
              '# uuoo SALT_CRON_IDENTIFIER:NO ID SET\n* * * * * too\n'
              '# uuuoo SALT_CRON_IDENTIFIER:NO ID SET\n* * * * * zoo\n'
              '# SALT_CRON_IDENTIFIER:NO ID SET\n* * * * * yoo\n'
              '# SALT_CRON_IDENTIFIER:NO ID SET\n* * * * * xoo\n'
              '# SALT_CRON_IDENTIFIER:NO ID SET\n* * * * * samecmd\n'
              '* * * * * otheridcmd\n'
              '# SALT_CRON_IDENTIFIER:NO ID SET\n1 * * * * samecmd1\n'
              '# SALT_CRON_IDENTIFIER:1\n0 * * * * otheridcmd1'),
             #
             ('# Lines below here are managed by Salt, do not edit\n'
              '# uoo SALT_CRON_IDENTIFIER:NO ID SET\n* * * * * ls\n'
              '# uuoo SALT_CRON_IDENTIFIER:NO ID SET\n* * * * * too\n'
              '# uuuoo SALT_CRON_IDENTIFIER:NO ID SET\n* * * * * zoo\n'
              '# SALT_CRON_IDENTIFIER:NO ID SET\n* * * * * yoo\n'
              '# SALT_CRON_IDENTIFIER:NO ID SET\n* * * * * xoo\n'
              '# SALT_CRON_IDENTIFIER:NO ID SET\n* * * * * samecmd\n'
              '* * * * * otheridcmd\n'
              '# SALT_CRON_IDENTIFIER:NO ID SET\n1 * * * * samecmd1\n'
              '# SALT_CRON_IDENTIFIER:1\n0 * * * * otheridcmd1\n'
              '# SALT_CRON_IDENTIFIER:2\n0 * * * * otheridcmd1')
         ]
         set_crontab('')
         for idx, cr in enumerate(crons1['crons']):
             cron.set_job('root', **cr)
             self.assertEqual(
                 get_crontab(),
                 inc_tests[idx], (
                     "idx {0}\n '{1}'\n != \n'{2}'\n\n\n"
                     "{1!r} != {2!r}"
                 ).format(
                     idx, get_crontab(), inc_tests[idx]))