X-Git-Url: http://git.onelab.eu/?a=blobdiff_plain;f=plugins%2Fdrl.py;h=1b106715dea9bfc0551f6be94c50a6e28055cc9e;hb=HEAD;hp=fa36f94b9ea96693c2d19b9450e734bbe115cb48;hpb=c7084bd609bf853e6fcb038350308347aba4eb20;p=nodemanager.git diff --git a/plugins/drl.py b/plugins/drl.py index fa36f94..1b10671 100644 --- a/plugins/drl.py +++ b/plugins/drl.py @@ -1,4 +1,4 @@ -#!/usr/bin/python +#!/usr/bin/python3 """ DRL configurator. """ @@ -18,85 +18,89 @@ drl = """ """ -def start(options, conf): - logger.log('drl plugin starting up...') +def start(): + logger.log('drl plugin starting up...') def DRLSetup(site_name, slice_name, site_id, bw_limit, peer): - DRL_file = '/vservers/%s/etc/drl.xml' % slice_name - DRL_config = drl % (site_name, site_id, bw_limit, peer) - - # Check config changes - if os.path.exists(DRL_file): - import md5 - new_digest = md5.new(DRL_config).digest() - old_digest = md5.new(open(DRL_file).read()).digest() - if old_digest == new_digest: - logger.log('drl: %s already exists...' % DRL_file) - DRLInstall(slice_name) - return - DRLConfig(DRL_file, DRL_config) - DRLInstall(slice_name) + DRL_file = '/vservers/%s/etc/drl.xml' % slice_name + DRL_config = drl % (site_name, site_id, bw_limit, peer) + + # Check config changes + if os.path.exists(DRL_file): + import md5 + new_digest = md5.new(DRL_config).digest() + old_digest = md5.new(open(DRL_file).read()).digest() + if old_digest == new_digest: + logger.log('drl: %s already exists...' % DRL_file) + DRLInstall(slice_name) + return + DRLConfig(DRL_file, DRL_config) + DRLInstall(slice_name) def DRLConfig(DRL_file, DRL_config): - logger.log('drl: %s is out-dated...' % DRL_file) - logger.log('drl: generating %s' % DRL_file) - f = open( DRL_file, 'w') - f.write(DRL_config) - f.close() + logger.log('drl: %s is out-dated...' % DRL_file) + logger.log('drl: generating %s' % DRL_file) + f = open( DRL_file, 'w') + f.write(DRL_config) + f.close() def DRLInstall(slice_name): - if not os.path.exists('/vservers/%s/etc/yum.repos.d/myplc.repo' % slice_name): - shutil.copyfile('/etc/yum.myplc.d/myplc.repo', '/vservers/%s/etc/yum.repos.d/myplc.repo' % slice_name) - logger.log('drl: installing DistributedRateLimiting into %s slice' % slice_name) - logger.log_call(['vserver', '%s' % slice_name, 'suexec', '0', 'yum', 'install', '-y', '-q', 'DistributedRateLimiting']) - logger.log_call(['vserver', '%s' % slice_name, 'suexec', '0', 'chkconfig', '--add', 'ulogd']) - else: - logger.log('drl: installing DistributedRateLimiting into %s slice' % slice_name) - logger.log_call(['vserver', '%s' % slice_name, 'suexec', '0', 'yum', 'update', '-y', '-q', 'DistributedRateLimiting']) - - logger.log('drl: (re)starting DistributedRateLimiting service') - logger.log_call(['vserver', '%s' % slice_name, 'suexec', '0', 'service', 'ulogd', 'restart']) + if not os.path.exists('/vservers/%s/etc/yum.repos.d/myplc.repo' % slice_name): + shutil.copyfile('/etc/yum.myplc.d/myplc.repo', '/vservers/%s/etc/yum.repos.d/myplc.repo' % slice_name) + logger.log('drl: installing DistributedRateLimiting into %s slice' % slice_name) + logger.log_call(['vserver', '%s' % slice_name, 'suexec', '0', 'yum', 'install', '-y', '-q', 'DistributedRateLimiting']) + logger.log_call(['vserver', '%s' % slice_name, 'suexec', '0', 'chkconfig', '--add', 'ulogd']) + else: + logger.log('drl: updating DistributedRateLimiting on %s slice' % slice_name) + logger.log_call(['vserver', '%s' % slice_name, 'suexec', '0', 'yum', 'update', '-y', '-q', 'DistributedRateLimiting']) + + logger.log('drl: (re)starting DistributedRateLimiting service') + logger.log_call(['vserver', '%s' % slice_name, 'suexec', '0', 'service', 'ulogd', 'restart']) def GetSlivers(data, conf = None, plc = None): - DRL_SLICE_NAME = '' - HAVE_DRL = 0 - node_id = tools.node_id() - - for sliver in data['slivers']: - for attribute in sliver['attributes']: - tag = attribute['tagname'] - value = attribute['value'] - if tag == 'drl' and value == '1': - HAVE_DRL = 1 - DRL_SLICE_NAME = sliver['name'] - - if HAVE_DRL: - site_id = plc.GetNodes({'node_id': int(node_id) }, ['site_id']) - site_id = site_id[0]['site_id'] - - q = plc.GetSites({'site_id': site_id, 'enabled': True, 'peer_site_id': None}, ['name', 'node_ids']) - for i in q: - if i['node_ids'] != [] and len(i['node_ids']) > 1: - z = plc.GetInterfaces({'node_id': i['node_ids'], 'is_primary': True, '~bwlimit': None}, ['node_id', 'ip', 'bwlimit']) - total_bwlimit = 0 - peer = '' - node_has_bwlimit = 0 - for j in range(len(z)): - total_bwlimit += z[j]['bwlimit'] - if z[j]['node_id'] != int(node_id): - peer += '\t%s\n' % z[j]['ip'] - else: - node_has_bwlimit = 1 - if node_has_bwlimit: - DRLSetup(i['name'], DRL_SLICE_NAME, site_id, total_bwlimit/1000, peer) - else: - logger.log('drl: This node has no bwlimit') - - else: - logger.log('drl: This site has only %s node' % len(i['node_ids'])) - else: - logger.log('drl: This node has no drl slice!...') + DRL_SLICE_NAME = '' + HAVE_DRL = 0 + node_id = tools.node_id() + + if 'slivers' not in data: + logger.log_missing_data("drl.GetSlivers", 'slivers') + return + + for sliver in data['slivers']: + for attribute in sliver['attributes']: + tag = attribute['tagname'] + value = attribute['value'] + if tag == 'drl' and value == '1': + HAVE_DRL = 1 + DRL_SLICE_NAME = sliver['name'] + + if HAVE_DRL: + site_id = plc.GetNodes({'node_id': int(node_id) }, ['site_id']) + site_id = site_id[0]['site_id'] + + q = plc.GetSites({'site_id': site_id, 'enabled': True, 'peer_site_id': None}, ['name', 'node_ids']) + for i in q: + if i['node_ids'] != [] and len(i['node_ids']) > 1: + z = plc.GetInterfaces({'node_id': i['node_ids'], 'is_primary': True, '~bwlimit': None}, ['node_id', 'ip', 'bwlimit']) + total_bwlimit = 0 + peer = '' + node_has_bwlimit = 0 + for j in range(len(z)): + total_bwlimit += z[j]['bwlimit'] + if z[j]['node_id'] != int(node_id): + peer += '\t%s\n' % z[j]['ip'] + else: + node_has_bwlimit = 1 + if node_has_bwlimit: + DRLSetup(i['name'], DRL_SLICE_NAME, site_id, total_bwlimit/1000, peer) + else: + logger.log('drl: This node has no bwlimit') + + else: + logger.log('drl: This site has only %s node' % len(i['node_ids'])) + else: + logger.log('drl: This node has no drl slice!...')