Commit cea99f88 authored by Cédric Le Ninivin's avatar Cédric Le Ninivin

Fixed: Update information for slave in slave list

parent fbb680f5
...@@ -354,13 +354,21 @@ def request_not_shared(): ...@@ -354,13 +354,21 @@ def request_not_shared():
def request_slave(): def request_slave():
""" """
Function to organise link between slave and master Function to organise link between slave and master.
Slave information are stored in places:
1. slave table having information such as slave reference,
connection information to slave (given by slave master),
hosted_by and asked_by reference.
2. A dictionnary in slave_instance_list of selected slave master
in which are stored slave_reference, software_type, slave_title and
partition_parameter_kw stored as individual keys.
""" """
software_release = request.form['software_release'].encode() software_release = request.form['software_release'].encode()
# some supported parameters # some supported parameters
software_type = request.form.get('software_type').encode() software_type = request.form.get('software_type').encode()
partition_reference = request.form.get('partition_reference', '').encode() partition_reference = request.form.get('partition_reference', '').encode()
partition_id = request.form.get('computer_partition_id', '').encode() partition_id = request.form.get('computer_partition_id', '').encode()
# Contain slave parameters to be given to slave master
partition_parameter_kw = request.form.get('partition_parameter_xml', None) partition_parameter_kw = request.form.get('partition_parameter_xml', None)
if partition_parameter_kw : if partition_parameter_kw :
partition_parameter_kw = xml_marshaller.xml_marshaller.loads( partition_parameter_kw = xml_marshaller.xml_marshaller.loads(
...@@ -368,6 +376,7 @@ def request_slave(): ...@@ -368,6 +376,7 @@ def request_slave():
else: else:
partition_parameter_kw = {} partition_parameter_kw = {}
instance_xml = dict2xml(partition_parameter_kw) instance_xml = dict2xml(partition_parameter_kw)
# We will search for a master corresponding to request
args = [] args = []
a = args.append a = args.append
q = 'SELECT * FROM %s WHERE software_release=?' q = 'SELECT * FROM %s WHERE software_release=?'
...@@ -379,24 +388,31 @@ def request_slave(): ...@@ -379,24 +388,31 @@ def request_slave():
if partition is None: if partition is None:
app.logger.warning('No partition corresponding to slave request') app.logger.warning('No partition corresponding to slave request')
abort(408) abort(408)
# Define Slave
# We set slave dictionnary as described in docstring
new_slave = {} new_slave = {}
slave_reference = partition_id + '_' + partition_reference slave_reference = partition_id + '_' + partition_reference
new_slave['slave_title'] = slave_reference new_slave['slave_title'] = slave_reference
new_slave['slap_software_type'] = software_type new_slave['slap_software_type'] = software_type
new_slave['slave_reference'] = slave_reference new_slave['slave_reference'] = slave_reference
for key in partition_parameter_kw : for key in partition_parameter_kw :
new_slave[key] = partition_parameter_kw[key] if partition_parameter_kw[key] is not None :
new_slave[key] = partition_parameter_kw[key]
# Add slave to partition slave_list if not present # Add slave to partition slave_list if not present else replace information
slave_instance_list = partition['slave_instance_list'] slave_instance_list = partition['slave_instance_list']
if slave_instance_list == None: if slave_instance_list == None:
slave_instance_list = [] slave_instance_list = []
else: else:
slave_instance_list = xml_marshaller.xml_marshaller.loads(slave_instance_list) slave_instance_list = xml_marshaller.xml_marshaller.loads(slave_instance_list)
if not slave_reference in (x['slave_reference'] for x in slave_instance_list): for x in slave_instance_list:
slave_instance_list.append(new_slave) if x['slave_reference'] == slave_reference:
slave_instance_list.remove(x)
slave_instance_list.append(new_slave)
# Update slave_instance_list in database
args = [] args = []
a = args.append a = args.append
q = 'UPDATE %s SET slave_instance_list=?' q = 'UPDATE %s SET slave_instance_list=?'
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment