class TestLBaaSMgmNova(testtools.TestCase): def setUp(self): super(TestLBaaSMgmNova, self).setUp() self.api = Node( "username", "password", "auth_test", "tenant1", "region1", "default", "default", '1234', '100' ) self.api.nova.management_url = "http://example.com" self.api.nova.auth_token = "token" def testCreateNode(self): with mock.patch.object(requests, "request", mock_request): with mock.patch('time.time', mock.Mock(return_value=1234)): data = self.api.build() self.assertEqual(data['id'], 417773) def testCreateNodeFail(self): with mock.patch.object(requests, "request", mock_bad_request): with mock.patch('time.time', mock.Mock(return_value=1234)): self.assertRaises(BuildError, self.api.build) def testDeleteNodeFail(self): with mock.patch.object(requests, "request", mock_bad_request): with mock.patch('time.time', mock.Mock(return_value=1234)): resp, data = self.api.delete('1234') self.assertFalse(resp) def testDeleteNodeSucceed(self): with mock.patch.object(requests, "request", mock_del_request): with mock.patch('time.time', mock.Mock(return_value=1234)): resp, data = self.api.delete('1234') self.assertTrue(resp)
def run(self): try: nova = Node() except Exception: LOG.exception("Error initialising Nova connection") self.msg[self.RESPONSE_FIELD] = self.RESPONSE_FAILURE return self.msg LOG.info( "Deleting a requested Nova instance {0}".format(self.msg['name']) ) try: node_id = nova.get_node(self.msg['name']) except NotFound: LOG.error( "No node found for {0}".format(self.msg['name']) ) self.msg[self.RESPONSE_FIELD] = self.RESPONSE_FAILURE return self.msg nova.delete(node_id) self.msg[self.RESPONSE_FIELD] = self.RESPONSE_SUCCESS LOG.info( 'Deleted node {0}, id {1}'.format(self.msg['name'], node_id) ) return self.msg
def run(self): try: nova = Node() except Exception: LOG.exception("Error initialising Nova connection") self.msg[self.RESPONSE_FIELD] = self.RESPONSE_FAILURE return self.msg LOG.info("Deleting a requested Nova instance {0}".format( self.msg['name'])) try: node_id = nova.get_node(self.msg['name']) except NotFound: LOG.error("No node found for {0}".format(self.msg['name'])) self.msg[self.RESPONSE_FIELD] = self.RESPONSE_FAILURE return self.msg nova.delete(node_id) self.msg[self.RESPONSE_FIELD] = self.RESPONSE_SUCCESS LOG.info('Deleted node {0}, id {1}'.format(self.msg['name'], node_id)) return self.msg
def retest_node(self, node_id, api): try: nova = Node( self.args.nova_user, self.args.nova_pass, self.args.nova_tenant, self.args.nova_auth_url, self.args.nova_region, self.args.nova_keyname, self.args.nova_secgroup, self.args.nova_image, self.args.nova_image_size, node_basename=self.args.node_basename ) except Exception as exc: self.logger.error( 'Error initialising Nova connection {exc}' .format(exc=exc) ) return self.logger.info('Retrying node {0}'.format(node_id)) try: resp, status = nova.status(node_id) except NotFound: self.logger.info( 'Node {0} no longer exists, removing from list' .format(node_id) ) self.node_list.delete(node_id) return except exceptions.ClientException as exc: self.logger.error( 'Error getting status from Nova, exception {exc}' .format(exc=sys.exc_info()[0]) ) return if resp.status_code not in(200, 203): self.logger.error( 'Error geting status from Nova, error {0}' .format(resp.status_code) ) return status = status['server'] if status['status'] == 'ACTIVE': name = status['name'] body = self.build_node_data(status) status, response = api.add_node(body) if not status: self.logger.error( 'Could not upload node {name} to API server' .format(name=name) ) else: self.node_list.delete(node_id) self.logger.info('Node {0} added to API server'.format(name)) return elif status['status'].startswith('BUILD'): self.logger.info( 'Node {0} still building, ignoring'.format(node_id) ) return else: self.logger.info( 'Node {0} is bad, deleting'.format(node_id) ) status, msg = nova.delete(node_id) if not status: self.logger.error(msg) else: self.logger.info('Delete successful') self.node_list.delete(node_id)