Add token get and Nailgun API call functions

This commit is contained in:
f3flight 2016-08-02 14:20:03 +00:00
parent 8822d3d15f
commit 9105df0bee
2 changed files with 51 additions and 0 deletions

View File

@ -34,6 +34,7 @@ def load_conf(filename):
conf['fuel_port'] = '8000'
conf['fuel_pass'] = 'admin'
conf['fuel_tenant'] = 'admin'
conf['fuel_keystone_port'] = '5000'
conf['fuelclient'] = True # use fuelclient library by default
conf['fuel_skip_proxy'] = True
conf['timeout'] = 15

View File

@ -26,6 +26,7 @@ import logging
import sys
import re
from datetime import datetime, date, timedelta
import urllib2
import tools
from tools import w_list, run_with_lock
from copy import deepcopy
@ -438,6 +439,7 @@ class NodeManager(object):
if self.conf['rqfile']:
self.import_rq()
self.nodes = {}
self.token = None
self.fuel_init()
# save os environment variables
environ = os.environ
@ -645,6 +647,54 @@ class NodeManager(object):
node.release))
return True
def auth_token(self):
'''Get keystone token to access Nailgun API. Requires Fuel 7.0+'''
if self.token:
return True
req_data = ('{ "auth": {'
' "scope": {'
' "project": {'
' "name": "%s",'
' "domain": { "id": "default" }'
' }'
' },'
' "identity": {'
' "methods": ["password"],'
' "password": {'
' "user": {'
' "name": "%s",'
' "domain": { "id": "default" },'
' "password": "%s"'
' }'
' }'
' }'
'}}' % (self.conf['fuel_tenant'],
self.conf['fuel_user'],
self.conf['fuel_pass']))
req = urllib2.Request("http://%s:%s/v3/auth/tokens" %
(self.conf['fuel_ip'],
self.conf['fuel_keystone_port']), req_data,
{'Content-Type': 'application/json'})
try:
token = urllib2.urlopen(req).info().getheader('X-Subject-Token')
self.token = token
return True
except:
return False
def get_api_request(self, request):
if self.auth_token():
url = "http://%s:%s/api/%s" % (self.conf['fuel_ip'],
self.conf['fuel_port'],
request)
req = urllib2.Request(url, None, {'X-Auth-Token': self.token})
try:
if urllib2.urlopen(req).getcode() == 200:
return urllib2.urlopen(req).read()
else:
self.logger.error('NodeManager: cannot get response'
' from %s' % url)
def get_nodes_cli(self):
self.logger.info('use CLI for getting node information')
fuelnode = self.nodes[self.conf['fuel_ip']]