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:
Shuang Zheng 2021-02-02 21:22:45 +08:00 committed by wenlingz
parent bf88e24218
commit 1a0ab78a84
5 changed files with 76 additions and 29 deletions

View File

@ -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):

View File

@ -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>

View File

@ -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>

View File

@ -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>

View File

@ -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>