Beispiel #1
0
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...<<<<<<<<<<<<<<<<<<<<<<<<'
Beispiel #2
0
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)