+def get_pcu(pcuname):
+ plc_lock.acquire()
+ try:
+ print "GetPCU from PLC %s" % pcuname
+ l_pcu = plc.GetPCUs({'pcu_id' : pcuname})
+ print l_pcu
+ if len(l_pcu) > 0:
+ l_pcu = l_pcu[0]
+ except:
+ try:
+ print "GetPCU from file %s" % pcuname
+ l_pcus = database.dbLoad("pculist")
+ for i in l_pcus:
+ if i['pcu_id'] == pcuname:
+ l_pcu = i
+ except:
+ traceback.print_exc()
+ l_pcu = None
+
+ plc_lock.release()
+ return l_pcu
+
+def get_nodes(node_ids):
+ plc_lock.acquire()
+ l_node = []
+ try:
+ l_node = plc.getNodes(node_ids, ['hostname', 'last_contact', 'node_id', 'ports'])
+ except:
+ try:
+ plc_nodes = database.dbLoad("l_plcnodes")
+ for n in plc_nodes:
+ if n['node_id'] in node_ids:
+ l_node.append(n)
+ except:
+ traceback.print_exc()
+ l_node = None
+
+ plc_lock.release()
+ if l_node == []:
+ l_node = None
+ return l_node
+
+
+def get_plc_pcu_values(pcuname):
+ """
+ Try to contact PLC to get the PCU info.
+ If that fails, try a backup copy from the last run.
+ If that fails, return None
+ """
+ values = {}
+
+ l_pcu = get_pcu(pcuname)
+
+ if l_pcu is not None:
+ site_id = l_pcu['site_id']
+ node_ids = l_pcu['node_ids']
+ l_node = get_nodes(node_ids)
+
+ if l_node is not None:
+ for node in l_node:
+ values[node['hostname']] = node['ports'][0]
+
+ values['nodenames'] = [node['hostname'] for node in l_node]
+
+ # NOTE: this is for a dry run later. It doesn't matter which node.
+ values['node_id'] = l_node[0]['node_id']
+
+ values.update(l_pcu)
+ else:
+ values = None
+
+ return values
+
+def get_plc_site_values(site_id):
+ ### GET PLC SITE ######################
+ plc_lock.acquire()
+ values = {}
+ d_site = None
+
+ try:
+ d_site = plc.getSites({'site_id': site_id}, ['max_slices', 'slice_ids', 'node_ids', 'login_base'])
+ if len(d_site) > 0:
+ d_site = d_site[0]
+ except:
+ try:
+ plc_sites = database.dbLoad("l_plcsites")
+ for site in plc_sites:
+ if site['site_id'] == site_id:
+ d_site = site
+ break
+ except:
+ traceback.print_exc()
+ values = None
+
+ plc_lock.release()
+
+ if d_site is not None:
+ max_slices = d_site['max_slices']
+ num_slices = len(d_site['slice_ids'])
+ num_nodes = len(d_site['node_ids'])
+ loginbase = d_site['login_base']
+ values['plcsite'] = {'num_nodes' : num_nodes,
+ 'max_slices' : max_slices,
+ 'num_slices' : num_slices,
+ 'login_base' : loginbase,
+ 'status' : 'SUCCESS'}
+ else:
+ values = None
+
+
+ return values
+
+