Fixed: Update information for slave in slave list
Showing
... | @@ -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=?' | ||
... | ... |