Merge "Pool manager now posts nodes to API server"
This commit is contained in:
commit
cd0d9af506
@ -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
|
||||
|
@ -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):
|
||||
|
@ -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,
|
||||
|
@ -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
|
||||
|
Loading…
x
Reference in New Issue
Block a user