Merge "Pool manager now posts nodes to API server"
This commit is contained in:
@@ -48,3 +48,5 @@ haproxy_image = 12345
|
|||||||
api_servers = 10.0.0.1:8889 10.0.0.2:8889
|
api_servers = 10.0.0.1:8889 10.0.0.2:8889
|
||||||
nodes = 10
|
nodes = 10
|
||||||
check_interval = 5
|
check_interval = 5
|
||||||
|
# 100 - xsmall, 101 - small, 102 - medium
|
||||||
|
image_size = 102
|
||||||
|
|||||||
@@ -69,8 +69,6 @@ class Server(object):
|
|||||||
'Building {nodes} nodes'
|
'Building {nodes} nodes'
|
||||||
.format(nodes=nodes_required)
|
.format(nodes=nodes_required)
|
||||||
)
|
)
|
||||||
# TODO:
|
|
||||||
# deal with case where node is created but not sent to API
|
|
||||||
self.build_nodes(nodes_required, api)
|
self.build_nodes(nodes_required, api)
|
||||||
else:
|
else:
|
||||||
self.logger.info('No new nodes required')
|
self.logger.info('No new nodes required')
|
||||||
@@ -95,10 +93,9 @@ class Server(object):
|
|||||||
self.args.nova_keyname,
|
self.args.nova_keyname,
|
||||||
self.args.nova_secgroup,
|
self.args.nova_secgroup,
|
||||||
self.args.haproxy_image,
|
self.args.haproxy_image,
|
||||||
102
|
self.args.image_size
|
||||||
)
|
)
|
||||||
while count > 0:
|
while count > 0:
|
||||||
# Do stuff
|
|
||||||
status, data = nova.build()
|
status, data = nova.build()
|
||||||
if not status:
|
if not status:
|
||||||
self.logger.error(data)
|
self.logger.error(data)
|
||||||
@@ -109,10 +106,13 @@ class Server(object):
|
|||||||
for address in addresses:
|
for address in addresses:
|
||||||
if not address['addr'].startswith('10.'):
|
if not address['addr'].startswith('10.'):
|
||||||
break
|
break
|
||||||
body['ip'] = address['addr']
|
body['address'] = address['addr']
|
||||||
self.logger.info('Adding server {name} on {ip}'
|
self.logger.info('Adding server {name} on {ip}'
|
||||||
.format(name=body['name'], ip=body['ip']))
|
.format(name=body['name'], ip=body['address']))
|
||||||
# TODO: upload to API server
|
# TODO: store failed uploads to API server to retry
|
||||||
|
status, response = api.add_node(body)
|
||||||
|
if not status:
|
||||||
|
return
|
||||||
count = count - 1
|
count = count - 1
|
||||||
|
|
||||||
def exit_handler(self, signum, frame):
|
def exit_handler(self, signum, frame):
|
||||||
|
|||||||
@@ -53,9 +53,12 @@ class Node(object):
|
|||||||
while waits > 0:
|
while waits > 0:
|
||||||
time.sleep(3)
|
time.sleep(3)
|
||||||
status = self._status(server_id)
|
status = self._status(server_id)
|
||||||
# Should also check if it is not spawning, so errors are detected
|
|
||||||
if status['status'] == 'ACTIVE':
|
if status['status'] == 'ACTIVE':
|
||||||
return True, status
|
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
|
waits = waits - 1
|
||||||
|
|
||||||
return (False,
|
return (False,
|
||||||
|
|||||||
@@ -50,7 +50,7 @@ class APIClient(object):
|
|||||||
)
|
)
|
||||||
|
|
||||||
def add_node(self, node_data):
|
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):
|
def delete_node(self, node_id):
|
||||||
requests.delete(
|
requests.delete(
|
||||||
@@ -76,3 +76,17 @@ class APIClient(object):
|
|||||||
.format(code=r.status_code))
|
.format(code=r.status_code))
|
||||||
return False, r.json
|
return False, r.json
|
||||||
return True, 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
|
||||||
|
|||||||
Reference in New Issue
Block a user