defaults = { 'apt': { 'unattended-upgrades': { 'day': 5, 'hour': 21, }, }, 'icinga2_api': { 'apt': { 'services': { 'UNATTENDED UPGRADES': { 'command_on_monitored_host': '/usr/local/share/icinga/plugins/check_unattended_upgrades', }, }, }, }, } @metadata_reactor.provides( 'cron/jobs/upgrade-and-reboot' ) def patchday(metadata): day = metadata.get('apt/unattended-upgrades/day') hour = metadata.get('apt/unattended-upgrades/hour') spread = metadata.get('apt/unattended-upgrades/spread_in_group', None) if spread is not None: spread_nodes = sorted(repo.nodes_in_group(spread)) day += spread_nodes.index(node) return { 'cron': { 'jobs': { 'upgrade-and-reboot': '{minute} {hour} * * {day} root /usr/local/sbin/upgrade-and-reboot'.format( minute=node.magic_number % 30, hour=hour, day=day%7, ), }, }, }