add: node_status, sanity checks

node status added to config as config option
sanity checks for rqdir (request directory)
This commit is contained in:
adobdin 2015-12-18 10:47:32 +00:00
parent 8effff5158
commit 3346786a80
3 changed files with 26 additions and 14 deletions

View File

@ -5,6 +5,7 @@ fuelip: 127.0.0.1
rqdir: ./rq rqdir: ./rq
logdir: ./logs logdir: ./logs
out-dir: ../timmy-ng/info out-dir: ../timmy-ng/info
node-status: ['ready']
timeout: 15 timeout: 15
find: find:
template: -name '*.log' template: -name '*.log'

View File

@ -5,6 +5,7 @@ ssh:
fuelip: localhost fuelip: localhost
out-dir: /tmp/timmy-gen/info out-dir: /tmp/timmy-gen/info
timeout: 15 timeout: 15
node-status: ['ready', 'discover']
find: find:
template: -name '*.gz' -o -name '*.log' -o -name '*-[0-9]4' template: -name '*.gz' -o -name '*.log' -o -name '*-[0-9]4'
path: /var/log/ path: /var/log/

View File

@ -56,7 +56,7 @@ class Node(object):
def set_files(self, dirname, key, ds, version): def set_files(self, dirname, key, ds, version):
files = [] files = []
for role in self.roles: for role in self.roles:
if role in ds[key]['by-role'].keys(): if 'by-role' in ds[key] and role in ds[key]['by-role'].keys():
for f in ds[key]['by-role'][role]: for f in ds[key]['by-role'][role]:
files += [os.path.join(dirname, key, 'by-role', role, f)] files += [os.path.join(dirname, key, 'by-role', role, f)]
if (('release-'+version in ds[key].keys()) and if (('release-'+version in ds[key].keys()) and
@ -64,11 +64,13 @@ class Node(object):
for f in ds[key]['release-'+version][role]: for f in ds[key]['release-'+version][role]:
files += [os.path.join(dirname, key, files += [os.path.join(dirname, key,
'release-'+version, role, f)] 'release-'+version, role, f)]
for f in ds[key]['by-os'][self.os_platform].keys(): if 'by-os' in ds[key]:
files += [os.path.join(dirname, key, 'by-os', for f in ds[key]['by-os'][self.os_platform].keys():
self.os_platform, f)] files += [os.path.join(dirname, key, 'by-os',
for f in ds[key]['default']['default'].keys(): self.os_platform, f)]
files += [os.path.join(dirname, key, 'default', 'default', f)] if 'default' in ds[key] and 'default' in ds[key]['default']:
for f in ds[key]['default']['default'].keys():
files += [os.path.join(dirname, key, 'default', 'default', f)]
self.files[key] = sorted(set(files)) self.files[key] = sorted(set(files))
logging.debug('set_files:\nkey: %s, node: %s, file_list: %s' % logging.debug('set_files:\nkey: %s, node: %s, file_list: %s' %
(key, self.node_id, self.files[key])) (key, self.node_id, self.files[key]))
@ -92,7 +94,7 @@ class Node(object):
def add_files(self, dirname, key, ds): def add_files(self, dirname, key, ds):
for role in self.roles: for role in self.roles:
if role in ds[key]['once-by-role'].keys(): if 'once-by-role' in ds[key] and role in ds[key]['once-by-role'].keys():
for f in ds[key]['once-by-role'][role]: for f in ds[key]['once-by-role'][role]:
self.files[key] += [os.path.join(dirname, key, self.files[key] += [os.path.join(dirname, key,
'once-by-role', role, f)] 'once-by-role', role, f)]
@ -320,6 +322,7 @@ class Nodes(object):
roles = [] roles = []
for node in self.nodes.values(): for node in self.nodes.values():
node.set_files(self.dirname, key, self.files, self.version) node.set_files(self.dirname, key, self.files, self.version)
# once-by-role functionality
if self.extended and key == ckey and node.online: if self.extended and key == ckey and node.online:
for role in node.roles: for role in node.roles:
if role not in roles: if role not in roles:
@ -335,8 +338,9 @@ class Nodes(object):
key, key,
node.files[key])) node.files[key]))
for key in [fkey, lkey]: for key in [fkey, lkey]:
for node in self.nodes.values(): if key in self.files.keys():
node.get_data_from_files(key) for node in self.nodes.values():
node.get_data_from_files(key)
for node in self.nodes.values(): for node in self.nodes.values():
logging.debug('%s' % node.files[ckey]) logging.debug('%s' % node.files[ckey])
@ -351,7 +355,7 @@ class Nodes(object):
if (self.cluster and str(self.cluster) != str(node.cluster) and if (self.cluster and str(self.cluster) != str(node.cluster) and
node.cluster != 0): node.cluster != 0):
continue continue
if node.status in ['ready', 'discover'] and node.online: if node.status in self.conf['node-status'] and node.online:
t = threading.Thread(target=node.exec_cmd, t = threading.Thread(target=node.exec_cmd,
args=(label, args=(label,
self.sshvars, self.sshvars,
@ -371,7 +375,7 @@ class Nodes(object):
if (self.cluster and str(self.cluster) != str(node.cluster) and if (self.cluster and str(self.cluster) != str(node.cluster) and
node.cluster != 0): node.cluster != 0):
continue continue
if node.status in ['ready', 'discover'] and node.online: if node.status in self.conf['node-status'] and node.online:
t = threading.Thread(target=node.du_logs, t = threading.Thread(target=node.du_logs,
args=(label, args=(label,
self.sshopts, self.sshopts,
@ -451,6 +455,9 @@ class Nodes(object):
logging.warning("Can't compress archive %s" % (errs)) logging.warning("Can't compress archive %s" % (errs))
def get_conf_files(self, odir=fkey, timeout=15): def get_conf_files(self, odir=fkey, timeout=15):
if fkey not in self.files:
logging.warning("get_conf_files: %s directory does not exist" %(fkey))
return
lock = flock.FLock('/tmp/timmy-files.lock') lock = flock.FLock('/tmp/timmy-files.lock')
if not lock.lock(): if not lock.lock():
logging.warning('Unable to obtain lock, skipping "files"-part') logging.warning('Unable to obtain lock, skipping "files"-part')
@ -461,7 +468,7 @@ class Nodes(object):
if (self.cluster and str(self.cluster) != str(node.cluster) and if (self.cluster and str(self.cluster) != str(node.cluster) and
node.cluster != 0): node.cluster != 0):
continue continue
if node.status in ['ready', 'discover'] and node.online: if node.status in self.conf['node-status'] and node.online:
t = threading.Thread(target=node.get_files, t = threading.Thread(target=node.get_files,
args=(label, args=(label,
self.logdir, self.logdir,
@ -474,18 +481,21 @@ class Nodes(object):
t.join() t.join()
lock.unlock() lock.unlock()
def get_log_files(self, odir='logfiles', timeout=15): def get_log_files(self, odir=lkey, timeout=15):
# lock = flock.FLock('/tmp/timmy-logs.lock') # lock = flock.FLock('/tmp/timmy-logs.lock')
# if not lock.lock(): # if not lock.lock():
# logging.warning('Unable to obtain lock, skipping "logs"-part') # logging.warning('Unable to obtain lock, skipping "logs"-part')
# return '' # return ''
if lkey not in self.files:
logging.warning("get_log_files: %s directory does not exist" %(lkey))
return
label = lkey label = lkey
threads = [] threads = []
for node in self.nodes.values(): for node in self.nodes.values():
if (self.cluster and str(self.cluster) != str(node.cluster) and if (self.cluster and str(self.cluster) != str(node.cluster) and
node.cluster != 0): node.cluster != 0):
continue continue
if (node.status in ['ready', 'discover'] and if (node.status in self.conf['node-status'] and
node.online and str(node.node_id) != '0'): node.online and str(node.node_id) != '0'):
t = threading.Thread(target=node.get_files, t = threading.Thread(target=node.get_files,
args=(label, args=(label,