added: using fuelclient by default

This commit is contained in:
adobdin 2016-06-20 12:30:36 +00:00
parent 4f3ff232e8
commit dd9ec37870
2 changed files with 66 additions and 28 deletions

View File

@ -16,7 +16,7 @@
# under the License. # under the License.
project_name = 'timmy' project_name = 'timmy'
version = '1.8.0' version = '1.8.1'
if __name__ == '__main__': if __name__ == '__main__':
exit(0) exit(0)

View File

@ -31,9 +31,9 @@ from tools import w_list, run_with_lock
from copy import deepcopy from copy import deepcopy
try: try:
from fuelclient.client import Client from fuelclient.client import Client as FuelClient
except: except:
Client = None FuelClient = None
try: try:
from fuelclient.client import logger from fuelclient.client import logger
@ -177,6 +177,7 @@ class Node(object):
if code != 0: if code != 0:
self.logger.warning('node: %s: could not determine' self.logger.warning('node: %s: could not determine'
' MOS release' % self.id) ' MOS release' % self.id)
release = 'n/a'
else: else:
release = release.strip('\n "\'') release = release.strip('\n "\'')
self.logger.info('node: %s, MOS release: %s' % self.logger.info('node: %s, MOS release: %s' %
@ -405,23 +406,34 @@ class NodeManager(object):
self.import_rq() self.import_rq()
self.nodes = {} self.nodes = {}
self.fuel_init() self.fuel_init()
if FuelClient and conf['fuelclient']:
try:
self.logger.info('Setup fuelclient instance')
self.fuelclient = FuelClient()
self.fuelclient.username = self.conf['fuel_user']
self.fuelclient.password = self.conf['fuel_pass']
self.fuelclient.tenant_name = self.conf['fuel_tenant']
# self.fuelclient.debug_mode(True)
except:
self.logger.info('Failed to setup fuelclient instance')
self.fuelclient = None
else:
self.logger.info('Skipping setup fuelclient instance')
self.fuelclient = None
if nodes_json: if nodes_json:
self.nodes_json = tools.load_json_file(nodes_json) self.nodes_json = tools.load_json_file(nodes_json)
else: else:
if Client and conf['fuelclient']: if (not self.get_nodes_fuelclient() and
if ((not self.get_nodes_fuelclient()) and not self.get_nodes_cli()):
(not self.get_nodes_cli())): sys.exit(4)
sys.exit(4)
else:
if not self.get_nodes_cli():
sys.exit(4)
self.nodes_init() self.nodes_init()
# apply soft-filter on all nodes # apply soft-filter on all nodes
for node in self.nodes.values(): for node in self.nodes.values():
if not self.filter(node, self.conf['soft_filter']): if not self.filter(node, self.conf['soft_filter']):
node.filtered_out = True node.filtered_out = True
if not conf['shell_mode']: if not conf['shell_mode']:
self.nodes_get_release() if not self.get_release_fuel_client():
self.get_release_cli()
self.nodes_reapply_conf() self.nodes_reapply_conf()
self.conf_assign_once() self.conf_assign_once()
if extended: if extended:
@ -529,14 +541,10 @@ class NodeManager(object):
self.nodes[self.conf['fuel_ip']] = fuelnode self.nodes[self.conf['fuel_ip']] = fuelnode
def get_nodes_fuelclient(self): def get_nodes_fuelclient(self):
if not self.fuelclient:
return False
try: try:
self.logger.info('Setup fuelclient instance') self.nodes_json = self.fuelclient.get_request('nodes')
c = Client()
c.username = self.conf['fuel_user']
c.password = self.conf['fuel_pass']
c.tenant_name = self.conf['fuel_tenant']
# c.debug_mode(True)
self.nodes_json = c.get_request('nodes')
self.logger.debug(self.nodes_json) self.logger.debug(self.nodes_json)
return True return True
except Exception as e: except Exception as e:
@ -545,6 +553,36 @@ class NodeManager(object):
exc_info=True) exc_info=True)
return False return False
def get_release_fuel_client(self):
if not self.fuelclient:
return False
try:
self.logger.info('getting release from fuel')
v = self.fuelclient.get_request('version')
fuel_version = v['release']
self.logger.debug('version response:%s' % v)
clusters = self.fuelclient.get_request('clusters')
self.logger.debug('clusters response:%s' % clusters)
except:
self.logger.warning(("Can't get fuel version or "
"clusters information"))
return False
self.nodes[self.conf['fuel_ip']].release = fuel_version
cldict = {}
for cluster in clusters:
cldict[cluster['id']] = cluster
if cldict:
for node in self.nodes.values():
if node.cluster:
node.release = cldict[node.cluster]['fuel_version']
else:
# set to n/a or may be fuel_version
if node.id != 0:
node.release = 'n/a'
self.logger.info('node: %s - release: %s' % (node.id,
node.release))
return True
def get_nodes_cli(self): def get_nodes_cli(self):
self.logger.info('use CLI for getting node information') self.logger.info('use CLI for getting node information')
fuelnode = self.nodes[self.conf['fuel_ip']] fuelnode = self.nodes[self.conf['fuel_ip']]
@ -564,6 +602,16 @@ class NodeManager(object):
self.nodes_json = json.loads(nodes_json) self.nodes_json = json.loads(nodes_json)
return True return True
def get_release_cli(self):
run_items = []
for key, node in self.nodes.items():
if not node.filtered_out:
run_items.append(tools.RunItem(target=node.get_release,
key=key))
result = tools.run_batch(run_items, 100, dict_result=True)
for key in result:
self.nodes[key].release = result[key]
def nodes_init(self): def nodes_init(self):
for node_data in self.nodes_json: for node_data in self.nodes_json:
node_roles = node_data.get('roles') node_roles = node_data.get('roles')
@ -587,16 +635,6 @@ class NodeManager(object):
if self.filter(node, self.conf['hard_filter']): if self.filter(node, self.conf['hard_filter']):
self.nodes[node.ip] = node self.nodes[node.ip] = node
def nodes_get_release(self):
run_items = []
for key, node in self.nodes.items():
if not node.filtered_out:
run_items.append(tools.RunItem(target=node.get_release,
key=key))
result = tools.run_batch(run_items, 100, dict_result=True)
for key in result:
self.nodes[key].release = result[key]
def conf_assign_once(self): def conf_assign_once(self):
once = Node.conf_once_prefix once = Node.conf_once_prefix
p = Node.conf_match_prefix p = Node.conf_match_prefix