added: using fuelclient by default
This commit is contained in:
parent
4f3ff232e8
commit
dd9ec37870
@ -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)
|
||||||
|
@ -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
|
||||||
|
Loading…
x
Reference in New Issue
Block a user