#!/usr/bin/python import os import sys import base64 import traceback from django.db.models import F, Q from planetstack.config import Config from observer.syncstep import SyncStep from core.models import Service from requestrouter.models import ServiceMap from util.logger import Logger, logging parentdir = os.path.join(os.path.dirname(__file__),"..") sys.path.insert(0,parentdir) from rrlib import RequestRouterLibrary from configurationPush import ConfigurationPush import rrlib_config logger = Logger(level=logging.INFO) class SyncServiceMap(SyncStep, RequestRouterLibrary, ConfigurationPush): provides=[ServiceMap] requested_interval=0 def __init__(self, **args): SyncStep.__init__(self, **args) RequestRouterLibrary.__init__(self) ConfigurationPush.__init__(self) def fetch_pending(self): try: ret = ServiceMap.objects.filter(Q(enacted__lt=F('updated')) | Q(enacted=None)) return ret except Exception, e: traceback.print_exc() return None def sync_record(self, servicemap): try: print "sync! %s " % self.get_servicemap_uid(servicemap) self.gen_dnsredir_serviceconf(servicemap) self.gen_dnsdemux_serviceconf(servicemap) # push generated files from temp_config service_uid = self.get_servicemap_uid(servicemap) self.config_push(service_uid, rrlib_config.REDIR_USER, "/opt/planetstack/rr_observer/playbook/site_redir.yml", "/etc/ansible/requestrouter/dnsredir/hosts") self.config_push(service_uid, rrlib_config.DEMUX_USER, "/opt/planetstack/rr_observer/playbook/site_demux.yml", "/etc/ansible/requestrouter/dnsdemux/hosts") self.teardown_temp_configfiles(service_uid) except Exception, e: traceback.print_exc() return False if __name__ == "__main__": sv = SyncServiceMap() recs = sv.fetch_pending() for rec in recs: sv.sync_record( rec )