def watch_etcd_key(service, labels=[]): watch_key = '/services/'+str(service) # # store previous value #' prev_containers = etcd_driver.get_service_containers(service) previous_value = len(prev_containers) print 'previous value was '+str(previous_value) current_value = previous_value curr_containers = prev_containers print 'started watching key '+ watch_key while True: event = client.read(watch_key, recursive=True, wait=True, timeout=0) # # number of nodes has changed... # print 'watch key has changed>>>>>>>>>>>>>>>>>>>>>>>>>>>>' current_containers = etcd_driver.get_service_containers(service) curr = len(current_containers) previous_value = current_value current_value = curr prev_containers = curr_containers curr_containers = current_containers delta = current_value - previous_value service_change(watch_key, delta) print 'watching for next change...<<<<<<<<<<<<<<<<<<<<<<<<'
def watch_etcd_key(service, labels=[]): # # watch a key in etcd # # watch_key = '/'+str(service) watch_key = '/services/'+str(service) # # store previous value #' # prev_dict = ast.literal_eval(client.read(watch_key).value) prev_containers = etcd_driver.get_service_containers(service) previous_value = len(prev_containers) print 'previous value was '+str(previous_value) current_value = previous_value curr_containers = prev_containers print 'started watching key '+ watch_key # for event in client.eternal_watch(watch_key): while True: event = client.read(watch_key, recursive=True, wait=True, timeout=0) # # number of nodes has changed... # node removed: # node added: # container shouldn't know anything else? # how to restart cassandra? replace nodes one at a time? # # current_dictionary = ast.literal_eval(client.read(watch_key).value) print 'watch key has changed>>>>>>>>>>>>>>>>>>>>>>>>>>>>' current_containers = etcd_driver.get_service_containers(service) curr = len(current_containers) # if curr != 0: previous_value = current_value current_value = curr prev_containers = curr_containers curr_containers = current_containers delta = current_value - previous_value # print 'prev is '+str(previous_value)+' curr is '+str(current_value)+' delta is '+str(delta) service_change(watch_key, delta) print 'watching for next change...<<<<<<<<<<<<<<<<<<<<<<<<'
def clean_service(service): service_tasks = marathon_client.list_tasks() service_task_names = map(lambda x: x.id, service_tasks) # # loop through etcd instances, if name not in tasks, clean up # service_name = service etcd_container_names = etcd_driver.get_service_containers(service_name) # print etcd_container_names for container_name in etcd_container_names: if container_name not in service_task_names: deregister_with_etcd(service, container_name) # # remove groups that no longer have containers # for group in etcd_driver.get_service_groups(service): if len(etcd_driver.get_group_container_names(service, group)) == 0: etcd_driver.remove_group(service, group)