Source code for fab_deploy.crontab
from __future__ import with_statement
from fabric.api import *
__all__ = ['crontab_set', 'crontab_add', 'crontab_show', 'crontab_remove', 'crontab_update']
def _marker(marker):
return ' # MARKER:%s' % marker if marker else ''
def _get_current():
with settings(hide('warnings', 'stdout'), warn_only=True):
output = run('crontab -l')
return output if output.succeeded else ''
[docs]def crontab_set(content):
""" Sets crontab content """
run("echo '%s'|crontab -" % content)
[docs]def crontab_show():
""" Shows current crontab """
puts(_get_current())
[docs]def crontab_add(content, marker=None):
""" Adds line to crontab. Line can be appended with special marker
comment so it'll be possible to reliably remove or update it later. """
old_crontab = _get_current()
crontab_set(old_crontab + '\n' + content + _marker(marker))
[docs]def crontab_remove(marker):
""" Removes a line added and marked using crontab_add. """
lines = [line for line in _get_current().splitlines()
if line and not line.endswith(_marker(marker))]
crontab_set("\n".join(lines))
[docs]def crontab_update(content, marker):
""" Adds or updates a line in crontab. """
crontab_remove(marker)
crontab_add(content, marker)