config_tools: update config app when creating new scenarios according to folder reorg
update scenaro xml templates when creating or loading new scenarios according to config app folder reorg. set default values for new create VMs from scenario schema when creating a new scenario setting, adding a new VM, loading new default scenarios for a new board; add MBA_DELAY in generic scenario xml. Tracked-On: #5672 Signed-off-by: Shuang Zheng <shuang.zheng@intel.com> Reviewed-by: Mao, Junjie <junjie.mao@intel.com> Reviewed-by: Victor Sun <victor.sun@intel.com>
This commit is contained in:
parent
bf88e24218
commit
1a0ab78a84
|
@ -66,9 +66,7 @@ def scenario(scenario_name):
|
|||
|
||||
board_info, board_type, scenario_config, launch_config = get_xml_configs()
|
||||
(bios_info, base_board_info) = get_board_info(board_info)
|
||||
acrn_config_element_root = get_acrn_config_element(
|
||||
os.path.join(os.path.dirname(os.path.abspath(__file__)), '..', 'schema', 'config.xsd'))
|
||||
xpath_dict = acrn_config_element_2_xpath_dict(acrn_config_element_root, {})
|
||||
xpath_dict = get_xpath_dict_of_xsd()
|
||||
|
||||
current_app.config.update(SCENARIO=scenario_name)
|
||||
|
||||
|
@ -256,8 +254,7 @@ def save_scenario():
|
|||
'error_list': {'error': 'Can not add a new VM. Max VM number is {}.'.format(MAX_VM_NUM)}}
|
||||
curr_vm_id = generator.split(':')[1]
|
||||
add_vm_type = scenario_config_data['add_vm_type']
|
||||
generic_scenario_config = get_generic_scenario_config(scenario_config, add_vm_type)
|
||||
generic_scenario_config_root = generic_scenario_config.get_curr_root()
|
||||
add_scenario_config = get_generic_scenario_config(scenario_config, add_vm_type)
|
||||
vm_to_add = []
|
||||
if str(curr_vm_id) == '-1':
|
||||
curr_vm_index = 1
|
||||
|
@ -267,13 +264,12 @@ def save_scenario():
|
|||
if curr_vm_id == vm_list[i]:
|
||||
curr_vm_index = i + 2
|
||||
break
|
||||
for vm in list(generic_scenario_config_root):
|
||||
if vm.tag == 'vm':
|
||||
for i in range(0, MAX_VM_NUM):
|
||||
if str(i) not in vm_list:
|
||||
break
|
||||
vm.attrib['id'] = str(i)
|
||||
vm_to_add.append(vm)
|
||||
if add_scenario_config and add_scenario_config.tag == 'vm':
|
||||
for i in range(0, MAX_VM_NUM):
|
||||
if str(i) not in vm_list:
|
||||
break
|
||||
add_scenario_config.attrib['id'] = str(i)
|
||||
vm_to_add.append(add_scenario_config)
|
||||
for vm in vm_to_add:
|
||||
scenario_config.insert_curr_elem(curr_vm_index, vm)
|
||||
curr_vm_index += 1
|
||||
|
@ -376,8 +372,7 @@ def save_launch():
|
|||
if add_vm_id == vm_info[0]:
|
||||
add_launch_id = i + 1
|
||||
break
|
||||
generic_scenario_config = get_generic_scenario_config(launch_config, add_launch_type)
|
||||
generic_scenario_config_root = generic_scenario_config.get_curr_root()
|
||||
add_launch_config = get_generic_scenario_config(launch_config, add_launch_type)
|
||||
vm_to_add = []
|
||||
if str(curr_vm_id) == '-1':
|
||||
curr_vm_index = len(vm_list)
|
||||
|
@ -387,13 +382,12 @@ def save_launch():
|
|||
if curr_vm_id == vm_list[i]:
|
||||
curr_vm_index = i + 1
|
||||
break
|
||||
for vm in list(generic_scenario_config_root):
|
||||
if vm.tag == 'uos':
|
||||
for i in range(1, MAX_VM_NUM):
|
||||
if str(i) not in vm_list:
|
||||
break
|
||||
vm.attrib['id'] = str(add_launch_id)
|
||||
vm_to_add.append(vm)
|
||||
if add_launch_config and add_launch_config.tag == 'uos':
|
||||
for i in range(1, MAX_VM_NUM):
|
||||
if str(i) not in vm_list:
|
||||
break
|
||||
add_launch_config.attrib['id'] = str(add_launch_id)
|
||||
vm_to_add.append(add_launch_config)
|
||||
|
||||
for vm in vm_to_add:
|
||||
launch_config.insert_curr_elem(curr_vm_index, vm)
|
||||
|
@ -503,8 +497,8 @@ def create_setting():
|
|||
os.remove(launch_file)
|
||||
|
||||
if mode == 'create':
|
||||
template_file_name = 'LAUNCH_POST_STD_VM'
|
||||
src_file_name = os.path.join(current_app.config.get('CONFIG_PATH'), 'template', template_file_name+'.xml')
|
||||
template_file_name = 'industry_launch_2uos'
|
||||
src_file_name = os.path.join(current_app.config.get('CONFIG_PATH'), 'generic', template_file_name + '.xml')
|
||||
else:
|
||||
src_file_name = os.path.join(current_app.config.get('CONFIG_PATH'), board_type, default_name + '.xml')
|
||||
copyfile(src_file_name,
|
||||
|
@ -512,6 +506,7 @@ def create_setting():
|
|||
|
||||
launch_config.set_curr(create_name)
|
||||
if mode == 'create':
|
||||
launch_config.delete_curr_key('uos:id=2')
|
||||
launch_config.delete_curr_key('uos:id=1')
|
||||
launch_config.save(create_name)
|
||||
return {'status': 'success', 'setting': create_name, 'error_list': {}}
|
||||
|
@ -522,8 +517,8 @@ def create_setting():
|
|||
os.remove(scenario_file)
|
||||
|
||||
if mode == 'create':
|
||||
template_file_name = 'HV'
|
||||
src_file_name = os.path.join(current_app.config.get('CONFIG_PATH'), 'template', template_file_name+'.xml')
|
||||
template_file_name = 'industry'
|
||||
src_file_name = os.path.join(current_app.config.get('CONFIG_PATH'), 'generic', template_file_name + '.xml')
|
||||
else:
|
||||
src_file_name = os.path.join(current_app.config.get('CONFIG_PATH'), board_type, default_name + '.xml')
|
||||
copyfile(src_file_name,
|
||||
|
@ -542,6 +537,9 @@ def create_setting():
|
|||
scenario_config.clone_curr_elem(elem_clos_max, 'hv', 'FEATURES', 'RDT')
|
||||
for i in range(num_mba_delay):
|
||||
scenario_config.clone_curr_elem(elem_mba_delay, 'hv', 'FEATURES', 'RDT')
|
||||
for i in range(8):
|
||||
scenario_config.delete_curr_key('vm:id={}'.format(i))
|
||||
scenario_config = set_default_config(scenario_config)
|
||||
scenario_config.save(create_name)
|
||||
return {'status': 'success', 'setting': create_name, 'error_list': {}}
|
||||
|
||||
|
@ -969,11 +967,23 @@ def get_xml_configs(user_defined=True):
|
|||
def get_generic_scenario_config(scenario_config, add_vm_type=None):
|
||||
|
||||
if add_vm_type is not None:
|
||||
config_path = os.path.join(current_app.config.get('CONFIG_PATH'), 'template')
|
||||
vm_dict = {
|
||||
'PRE_STD_VM': ('logical_partition', 'vm:id=0'),
|
||||
'PRE_RT_VM': ('hybrid_rt', 'vm:id=0'),
|
||||
'SAFETY_VM': ('hybrid', 'vm:id=0'),
|
||||
'SOS_VM': ('industry', 'vm:id=0'),
|
||||
'POST_STD_VM': ('industry', 'vm:id=1'),
|
||||
'POST_RT_VM': ('industry', 'vm:id=2'),
|
||||
'KATA_VM': ('industry', 'vm:id=1'),
|
||||
'LAUNCH_POST_STD_VM': ('industry_launch_2uos', 'uos:id=1'),
|
||||
'LAUNCH_POST_RT_VM': ('industry_launch_2uos', 'uos:id=2')
|
||||
}
|
||||
config_path = os.path.join(current_app.config.get('CONFIG_PATH'), 'generic')
|
||||
generic_scenario_config = XmlConfig(config_path)
|
||||
if os.path.isfile(os.path.join(config_path, add_vm_type + '.xml')):
|
||||
generic_scenario_config.set_curr(add_vm_type)
|
||||
return generic_scenario_config
|
||||
if os.path.isfile(os.path.join(config_path, vm_dict[add_vm_type][0] + '.xml')):
|
||||
generic_scenario_config.set_curr(vm_dict[add_vm_type][0])
|
||||
generic_scenario_config = set_default_config(generic_scenario_config)
|
||||
return generic_scenario_config.get_curr_elem(vm_dict[add_vm_type][1])
|
||||
else:
|
||||
return None
|
||||
config_path = os.path.join(current_app.config.get('CONFIG_PATH'), 'generic')
|
||||
|
@ -1172,6 +1182,39 @@ def assign_vm_id(scenario_config):
|
|||
vm.attrib['id'] = str(post_launched_vm_index)
|
||||
post_launched_vm_index += 1
|
||||
|
||||
|
||||
def get_xpath_dict_of_xsd():
|
||||
"""
|
||||
get xpath_dict of the xsd config
|
||||
:return: xpath dict
|
||||
"""
|
||||
acrn_config_element_root = get_acrn_config_element(
|
||||
os.path.join(os.path.dirname(os.path.abspath(__file__)), '..', 'schema', 'config.xsd'))
|
||||
xpath_dict = acrn_config_element_2_xpath_dict(acrn_config_element_root, {})
|
||||
return xpath_dict
|
||||
|
||||
|
||||
def set_default_config(config):
|
||||
'''
|
||||
set default values for current config
|
||||
:param config: the current config
|
||||
:return: the return config setting with default values
|
||||
'''
|
||||
xpath_dict = get_xpath_dict_of_xsd()
|
||||
config_root = config.get_curr_root()
|
||||
|
||||
return set_default_config_for_curr_layer(config, config_root, '/'+config_root.tag, xpath_dict)
|
||||
|
||||
|
||||
def set_default_config_for_curr_layer(config, elem, key, xpath_dict):
|
||||
for sub_elem in list(elem):
|
||||
sub_key = key+'/'+sub_elem.tag
|
||||
if sub_key in xpath_dict.keys() and xpath_dict[sub_key] and xpath_dict[sub_key]['default']:
|
||||
config.set_curr_value(xpath_dict[sub_key]['default'], *tuple(sub_key.split('/')[2:]))
|
||||
set_default_config_for_curr_layer(config, sub_elem, sub_key, xpath_dict)
|
||||
return config
|
||||
|
||||
|
||||
@CONFIG_APP.context_processor
|
||||
def utility_functions():
|
||||
def print_in_console(message):
|
||||
|
|
|
@ -33,6 +33,7 @@
|
|||
<CLOS_MASK>0xfff</CLOS_MASK>
|
||||
<CLOS_MASK>0xfff</CLOS_MASK>
|
||||
<CLOS_MASK>0xfff</CLOS_MASK>
|
||||
<MBA_DELAY>0</MBA_DELAY>
|
||||
</RDT>
|
||||
<HYPERV_ENABLED>y</HYPERV_ENABLED>
|
||||
<IOMMU_ENFORCE_SNP>n</IOMMU_ENFORCE_SNP>
|
||||
|
|
|
@ -33,6 +33,7 @@
|
|||
<CLOS_MASK>0xfff</CLOS_MASK>
|
||||
<CLOS_MASK>0xfff</CLOS_MASK>
|
||||
<CLOS_MASK>0xfff</CLOS_MASK>
|
||||
<MBA_DELAY>0</MBA_DELAY>
|
||||
</RDT>
|
||||
<HYPERV_ENABLED>y</HYPERV_ENABLED>
|
||||
<IOMMU_ENFORCE_SNP>n</IOMMU_ENFORCE_SNP>
|
||||
|
|
|
@ -33,6 +33,7 @@
|
|||
<CLOS_MASK>0xfff</CLOS_MASK>
|
||||
<CLOS_MASK>0xfff</CLOS_MASK>
|
||||
<CLOS_MASK>0xfff</CLOS_MASK>
|
||||
<MBA_DELAY>0</MBA_DELAY>
|
||||
</RDT>
|
||||
<HYPERV_ENABLED>y</HYPERV_ENABLED>
|
||||
<IOMMU_ENFORCE_SNP>n</IOMMU_ENFORCE_SNP>
|
||||
|
|
|
@ -33,6 +33,7 @@
|
|||
<CLOS_MASK>0xfff</CLOS_MASK>
|
||||
<CLOS_MASK>0xfff</CLOS_MASK>
|
||||
<CLOS_MASK>0xfff</CLOS_MASK>
|
||||
<MBA_DELAY>0</MBA_DELAY>
|
||||
</RDT>
|
||||
<HYPERV_ENABLED>y</HYPERV_ENABLED>
|
||||
<IOMMU_ENFORCE_SNP>n</IOMMU_ENFORCE_SNP>
|
||||
|
|
Loading…
Reference in New Issue