Merge "Pool manager now posts nodes to API server"

This commit is contained in:
Jenkins 2012-10-30 20:17:21 +00:00 committed by Gerrit Code Review
commit cd0d9af506
4 changed files with 28 additions and 9 deletions

View File

@ -48,3 +48,5 @@ haproxy_image = 12345
api_servers = 10.0.0.1:8889 10.0.0.2:8889
nodes = 10
check_interval = 5
# 100 - xsmall, 101 - small, 102 - medium
image_size = 102

View File

@ -69,8 +69,6 @@ class Server(object):
'Building {nodes} nodes'
.format(nodes=nodes_required)
)
# TODO:
# deal with case where node is created but not sent to API
self.build_nodes(nodes_required, api)
else:
self.logger.info('No new nodes required')
@ -95,10 +93,9 @@ class Server(object):
self.args.nova_keyname,
self.args.nova_secgroup,
self.args.haproxy_image,
102
self.args.image_size
)
while count > 0:
# Do stuff
status, data = nova.build()
if not status:
self.logger.error(data)
@ -109,10 +106,13 @@ class Server(object):
for address in addresses:
if not address['addr'].startswith('10.'):
break
body['ip'] = address['addr']
body['address'] = address['addr']
self.logger.info('Adding server {name} on {ip}'
.format(name=body['name'], ip=body['ip']))
# TODO: upload to API server
.format(name=body['name'], ip=body['address']))
# TODO: store failed uploads to API server to retry
status, response = api.add_node(body)
if not status:
return
count = count - 1
def exit_handler(self, signum, frame):

View File

@ -53,9 +53,12 @@ class Node(object):
while waits > 0:
time.sleep(3)
status = self._status(server_id)
# Should also check if it is not spawning, so errors are detected
if status['status'] == 'ACTIVE':
return True, status
elif not status['status'].startswith('BUILD'):
return False, 'Error spawning node {nid} status {stat}'.format(
node=node_id, stat=status['status']
)
waits = waits - 1
return (False,

View File

@ -50,7 +50,7 @@ class APIClient(object):
)
def add_node(self, node_data):
requests.post('{url}/devices', json.dumps(node_data))
return self._post('{url}/devices'.format(url=self.url), node_data)
def delete_node(self, node_id):
requests.delete(
@ -76,3 +76,17 @@ class APIClient(object):
.format(code=r.status_code))
return False, r.json
return True, r.json
def _post(self, url, node_data):
try:
r = requests.post(url, data=json.dumps(node_data), verify=False)
except:
self.logger.error('Exception communicating to server: {exc}'
.format(exc=sys.exc_info()[0]))
return False, None
if r.status_code != 200:
self.logger.error('Server returned error {code}'
.format(code=r.status_code))
return False, r.json
return True, r.json