Files
acrn-hypervisor/misc/acrn-config/config_app/templates/launch.html
Shuang Zheng f7594f0a93 acrn-config: assign VM IDs for dynamic scenario and launch setting
When dynamically creating or adding or deleting VMs, acrn config app
will assign VM IDs for the VMs with the orders of prelaunched VMs and SOS
VM and postlaunched VMs to be consistent with the VM order of vm_configs
in vm configuration. When dynamically creating launch scripts, acrn
config app will let users to specify the VM ID before launch setting.

Tracked-On: #4641

Signed-off-by: Shuang Zheng <shuang.zheng@intel.com>
Acked-by: Terry Zou <terry.zou@intel.com>
2020-04-22 20:10:17 +08:00

396 lines
24 KiB
HTML

{% extends 'base.html' %}
{% block body_content %}
<div class="modal fade" id="save_modal" tabindex="-1" role="dialog" aria-labelledby="myModalLabel" aria-hidden="true">
<div class="modal-dialog">
<div class="modal-content">
<div class="modal-header">
<button type="button" class="close" data-dismiss="modal" aria-hidden="true">&times;</button>
<h4 class="modal-title" id="myModalLabel">Save as</h4>
</div>
<div class="modal-body">
<div class="form-group row">
<label for="new_launch_name" class="col-sm-3 control-label">Launch Name: </label>
<div class="col-sm-6">
<input type="text" class="form-control" id="new_launch_name"
value={{launch}}>
</div>
</div>
<div class="form-group row hidden" id="src_path_row">
<label for="src_path" class="col-sm-3 control-label"
title="the relative path of acrn-hypervisor; if no path is specified,
the launch scripts will be generated into misc/acrn-config/xmls/config-xmls/[board]/output and overwirte the previous files.">
Source Path: </label>
<div class="col-sm-9">
<input type="text" class="form-control" id="src_path" value=""
placeholder="input the path to generate launch scripts">
</div>
</div>
</div>
<div class="modal-footer">
<button type="button" class="btn btn-default" data-dismiss="modal">Cancel</button>
<button type="button" id="remove_launch" class="btn btn-default" data-dismiss="modal">Remove</button>
<button type="button" id="save_launch" data-id="" class="btn btn-primary">Submit
</button>
</div>
</div>
</div>
</div>
<div class="modal fade" id="add_launch_modal" tabindex="-1" role="dialog" aria-labelledby="addlaunchModalLabel" aria-hidden="true">
<div class="modal-dialog">
<div class="modal-content">
<div class="modal-header">
<button type="button" class="close" data-dismiss="modal" aria-hidden="true">&times;</button>
<h4 class="modal-title" id="addlaunchModalLabel">Configure UOS for Post-launched VM</h4>
</div>
<div class="modal-body">
<div class="form-group row">
<label for="add_launch_type" class="col-sm-3 control-label">VM : </label>
<div class="dropdown col-sm-6">
<select class="selectpicker" data-width="auto" id="add_launch_type">
</select>
</div>
</div>
<div class="form-group row">
<label for="new_launch_name2" class="col-sm-3 control-label">Launch Name : </label>
<div class="col-sm-6">
<input type="text" class="form-control" id="new_launch_name2"
value={{ launch }}>
</div>
</div>
</div>
<div class="modal-footer">
<button type="button" class="btn btn-default" data-dismiss="modal">Cancel</button>
<button type="button" id="add_launch_submit" data-id="" class="btn btn-primary" data-dismiss="modal">Submit
</button>
</div>
</div>
</div>
</div>
<form class="form-horizontal" role="form" method="post">
<div class="form-group">
<label for="old_launch_name" class="col-sm-2 control-label" style="text-align: left;">&nbsp;&nbsp;Launch
Setting:</label>
<div class="col-sm-3">
<text class="form-control" id="old_launch_name" readonly>{{launch}}</text>
</div>
<div class="col-sm-1 col-sm-offset-1">
{% if board_info != None %}
<label for="launch_file" class="btn btn-primary" id="scenario_file2"
style="border: 1px solid #ccc; display: inline-block; padding: 6px 12px;
cursor: pointer; border-radius:5px; ">
Import XML</label>
<input type="file" name="file" id="launch_file" class="col-sm-1 btn btn-primary" style="display: none;">
{% else %}
<label class="btn"
style="border: 1px solid #ccc; display: inline-block; padding: 6px 12px;
cursor: pointer; border-radius:5px; ">
Import XML</label>
<input type="file" name="file" class="col-sm-1" style="display: none;" disabled>
{% endif %}
</div>
{% if board_info != None and root != None %}
<div class="col-sm-1">
<button type="button" class="btn btn-primary" data-id="save" data-toggle="modal" data-target="#save_modal"
id="export_launch_xml">Export XML
</button>
</div>
<div class="col-sm-1">
<button type="button" id="generate_launch_script" class="btn btn-primary" data-id="generate_launch_script"
data-toggle="modal" data-target="#save_modal">Generate Launch Script
</button>
</div>
{% else %}
<div class="col-sm-1">
<button type="button" disabled class="btn btn-primary">Export XML</button>
</div>
<div class="col-sm-1">
<button type="button" disabled class="btn btn-primary">Generate Launch Script</button>
</div>
{% endif %}
</div>
<div class="form-group">
<label for="scenario_name" class="col-sm-2 control-label" style="text-align: left;">&nbsp;&nbsp;Select
Scenario:</label>
<div class="dropdown col-sm-9">
<select class="selectpicker" data-width="auto" id="scenario_name">
<option style="display:none">
<option disabled selected value> -- Select an option -- </option>
{% for sc in scenarios[1] %}
{% if root !=None and root.attrib['scenario'] == sc%}
<option value="{{sc}}" selected>{{sc}}</option>
{% else %}
<option value="{{sc}}">{{sc}}</option>
{% endif %}
{% endfor %}
</select>
</div>
</div>
{% if board_info != None and root != None %}
<table class="table table-hover" id="tab">
{% for vm in root.getchildren() %}
<tr>
<td>
<div class="form-group">
<label class="col-sm-3 control-label">UOS: </label>
<label class="col-sm-1 control-label" id="vm">{{vm.attrib['id']}}</label>
</div>
<div class="form-group">
<label class="col-sm-3 control-label">VM ID: </label>
<label class="col-sm-1 control-label" id="vm_id">
{{post_launch_vm_list[vm.attrib['id']|int-1][0] if post_launch_vm_list|length>=1 else ''}}</label>
</div>
<div class="form-group">
<button type="button" class="col-sm-6 btn" id="add_launch_vm" data-id="{{vm.attrib['id']}}" data-toggle="modal"
data-target="#add_launch_modal">Configure an UOS below</button>
</div>
<div class="form-group">
<button type="button" class="col-sm-6 btn" id="remove_launch_vm" data-id="{{vm.attrib['id']}}">
Remove this VM</button>
</div>
</td>
<td>
{% for elem in vm.getchildren() %}
{% if elem.getchildren() == [] and ('configurable' not in elem.attrib or elem.attrib['configurable'] !=
'0') %}
<div class="form-group">
<label class="col-sm-1 control-label" data-toggle="tooltip"
title="{{elem.attrib['desc'] if 'desc' in elem.attrib else elem.tag}}">{{elem.tag}}</label>
<label class="col-sm-2 control-label"></label>
{% set elem_text = '' if elem.text == None else elem.text %}
{% if ','.join(['uos', elem.tag]) not in launch_item_values %}
<div class="col-sm-6">
{% if 'readonly' in elem.attrib and elem.attrib['readonly'] == 'true' %}
{% if elem.tag == 'kernel_cmdline' %}
<textarea type="text" class="form-control"
id="{{'uos:id='+vm.attrib['id']+','+elem.tag}}" readonly>{{elem_text}}</textarea>
{% else %}
<input type="text" class="form-control"
id="{{'uos:id='+vm.attrib['id']+','+elem.tag}}" value="{{elem_text}}" readonly/>
{% endif %}
{% else %}
{% if elem.tag == 'kernel_cmdline' %}
<textarea type="text" class="form-control" style="height:120px"
id="{{'uos:id='+vm.attrib['id']+','+elem.tag}}">{{elem_text}}</textarea>
{% else %}
<input type="text" class="form-control" value="{{elem_text}}"
id="{{'uos:id='+vm.attrib['id']+','+elem.tag}}"/>
{% endif %}
{% endif %}
</div>
{% else %}
<div class="dropdown col-sm-6">
{% if 'readonly' in elem.attrib and elem.attrib['readonly'] == 'true' %}
<select class="selectpicker" data-width="auto" title="" disabled
id="{{'uos:id='+vm.attrib['id']+','+elem.tag}}">
{% else %}
<select class="selectpicker" data-width="auto" title=""
id="{{'uos:id='+vm.attrib['id']+','+elem.tag}}">
{% endif %}
<option disabled selected value> -- Select an option -- </option>
{% for item_value in launch_item_values[','.join(['uos', elem.tag])] %}
{% if item_value == elem_text %}
<option value="{{item_value}}" selected="selected">{{item_value}}</option>
{% else %}
<option value="{{item_value}}">{{item_value}}</option>
{% endif %}
{% endfor %}
</select>
</div>
{% endif %}
<p id="{{'uos:id='+vm.attrib['id']+','+elem.tag}}_err" class="col-sm-3"></p>
</div>
{% elif elem.getchildren() != [] %}
{% if 'multiselect' not in elem.attrib or elem.attrib['multiselect'] != 'true' %}
{% set first_child = [] %}
{% set first_multi_child = {'block': 0, 'network': 0, 'input': 0} %}
{% for sub_elem in elem.getchildren() %}
{% set sub_elem_text = '' if sub_elem.text == None else sub_elem.text %}
{% if 'configurable' not in sub_elem.attrib or sub_elem.attrib['configurable'] != '0' %}
<div class="form-group">
{% if 'id' not in elem.attrib %}
{% if not first_child %}
<label class="col-sm-1 control-label" data-toggle="tooltip"
title="{{sub_elem.attrib['desc'] if 'desc' in sub_elem.attrib else sub_elem.tag}}">
{{elem.tag}}</label>
{% else %}
<label class="col-sm-1 control-label" data-toggle="tooltip"
title="{{sub_elem.attrib['desc'] if 'desc' in sub_elem.attrib else sub_elem.tag}}">
</label>
{% endif %}
<label class="col-sm-2 control-label" data-toggle="tooltip"
title="{{sub_elem.attrib['desc'] if 'desc' in sub_elem.attrib else sub_elem.tag}}">
{{sub_elem.tag}}</label>
{% if ','.join(['uos', elem.tag, sub_elem.tag]) not in launch_item_values
and elem.tag != 'vcpu_affinity'%}
<div class="col-sm-5">
{% if 'readonly' in sub_elem.attrib and sub_elem.attrib['readonly'] == 'true' %}
<input type="text" class="form-control" readonly
id="{{'uos:id='+vm.attrib['id']+','+elem.tag+','+sub_elem.tag}}"
value="{{sub_elem_text}}">
{% else %}
<input type="text" class="form-control"
id="{{'uos:id='+vm.attrib['id']+','+elem.tag+','+sub_elem.tag}}"
value="{{sub_elem_text}}">
{% endif %}
</div>
{% if elem.tag in ['virtio_devices'] and sub_elem.tag in ['block', 'network', 'input'] %}
<div class="col-sm-1">
<button type="button" class="btn" id="add_virtio_{{sub_elem.tag}}_{{first_multi_child[sub_elem.tag]}}">+</button>
{% if first_multi_child[sub_elem.tag] == 0 %}
<button type="button" disabled class="btn" id="remove_virtio_{{sub_elem.tag}}_{{first_multi_child[sub_elem.tag]}}">-</button>
{% else %}
<button type="button" class="btn" id="remove_virtio_{{sub_elem.tag}}_{{first_multi_child[sub_elem.tag]}}">-</button>
{% endif %}
</div>
{% do first_multi_child.update({sub_elem.tag: first_multi_child[sub_elem.tag]+1}) %}
{% endif%}
{% else %}
{% set item_key = ','.join(['uos', elem.tag, sub_elem.tag]) if elem.tag != 'vcpu_affinity'
else ','.join(['uos', elem.tag]) %}
<div class="dropdown col-sm-6">
{% if 'readonly' in sub_elem.attrib and sub_elem.attrib['readonly'] == 'true' %}
<select class="selectpicker" data-width="auto" disabled
id="{{'uos:id='+vm.attrib['id']+','+elem.tag+','+sub_elem.tag}}">
{% else %}
<select class="selectpicker" data-width="auto"
id="{{'uos:id='+vm.attrib['id']+','+elem.tag+','+sub_elem.tag}}">
{% endif %}
<option disabled selected value> -- Select an option -- </option>
{% for item_value in launch_item_values[item_key] %}
{% if item_value == sub_elem_text %}
<option value="{{item_value}}" selected="selected">{{item_value}}</option>
{% else %}
<option value="{{item_value}}">{{item_value}}</option>
{% endif %}
{% endfor %}
</select>
{% if elem.tag == 'vcpu_affinity' %}
<button type="button" class="btn" id="add_vcpu_{{first_child|length}}">+</button>
{% if not first_child %}
<button type="button" disabled class="btn" id="remove_vcpu_{{first_child|length}}">-</button>
{% else %}
<button type="button" class="btn" id="remove_vcpu_{{first_child|length}}">-</button>
{% endif %}
{% endif %}
</div>
{% endif %}
{% do first_child.append(1) %}
<p id="{{'uos:id='+vm.attrib['id']+','+elem.tag+','+sub_elem.tag}}_err" class="col-sm-3"></p>
{% else %}
{% if not first_child %}
{% do first_child.append(1) %}
<label class="col-sm-1 control-label" data-toggle="tooltip"
title="{{sub_elem.attrib['desc'] if 'desc' in sub_elem.attrib else sub_elem.tag}}">
{{elem.tag+' '+elem.attrib['id']}}</label>
{% else %}
<label class="col-sm-1 control-label" data-toggle="tooltip"
title="{{sub_elem.attrib['desc'] if 'desc' in sub_elem.attrib else sub_elem.tag}}">
</label>
{% endif %}
<label class="col-sm-2 control-label" data-toggle="tooltip"
title="{{sub_elem.attrib['desc'] if 'desc' in sub_elem.attrib else sub_elem.tag}}">
{{sub_elem.tag}}</label>
{% if ','.join(['uos', elem.tag, sub_elem.tag]) not in launch_item_values %}
<div class="col-sm-6">
{% if 'readonly' in sub_elem.attrib and sub_elem.attrib['readonly'] == 'true' %}
<input type="text" class="form-control" readonly
id="{{'uos:id='+vm.attrib['id']+','+elem.tag+':id='+elem.attrib['id']+','+sub_elem.tag}}"
value="{{sub_elem_text}}">
{% else %}
<input type="text" class="form-control"
id="{{'uos:id='+vm.attrib['id']+','+elem.tag+':id='+elem.attrib['id']+','+sub_elem.tag}}"
value="{{sub_elem_text}}">
{% endif %}
</div>
{% else %}
<div class="dropdown col-sm-6">
{% if 'readonly' in sub_elem.attrib and sub_elem.attrib['readonly'] == 'true' %}
<select class="selectpicker" data-width="auto" disabled
id="{{'uos:id='+vm.attrib['id']+','+elem.tag+':id='+elem.attrib['id']+','+sub_elem.tag}}">
{% else %}
<select class="selectpicker" data-width="auto"
id="{{'uos:id='+vm.attrib['id']+','+elem.tag+':id='+elem.attrib['id']+','+sub_elem.tag}}">
{% endif %}
<option disabled selected value> -- Select an option -- </option>
{% for item_value in launch_item_values[','.join(['uos', elem.tag, sub_elem.tag])] %}
{% if item_value == sub_elem_text %}
<option value="{{item_value}}" selected="selected">{{item_value}}</option>
{% else %}
<option value="{{item_value}}">{{item_value}}</option>
{% endif %}
{% endfor %}
</select>
</div>
<p id="{{'uos:id='+vm.attrib['id']+','+elem.tag+':id='+elem.attrib['id']+','+sub_elem.tag}}_err"
class="col-sm-3"></p>
{% endif %}
{% endif %}
</div>
{% endif %}
{% endfor %}
{% elif 'configurable' not in elem.attrib or elem.attrib['configurable'] != '0' %}
<div class="form-group">
<label class="col-sm-1 control-label" data-toggle="tooltip"
title="{{elem.attrib['desc'] if 'desc' in elem.attrib else elem.tag}}">{{elem.tag}}</label>
<label class="col-sm-2 control-label" data-toggle="tooltip"
title="{{elem.attrib['desc'] if 'desc' in elem.attrib else elem.tag}}"></label>
<div class="dropdown col-sm-9">
{% if 'readonly' in elem.attrib and elem.attrib['readonly'] == 'true' %}
<select class="selectpicker" data-width="auto" disabled
id="{{'uos:id='+vm.attrib['id']+','+elem.tag+','+elem.tag[:-1]}}" multiple>
{% else %}
<select class="selectpicker" data-width="auto" disabled
id="{{'uos:id='+vm.attrib['id']+','+elem.tag+','+elem.tag[:-1]}}" multiple>
{% endif %}
{% if ','.join(['uos', elem.tag]) not in launch_item_values %}
{% set x=1 %}
{% for sub_elem in elem.getchildren() %}
<option value="{{sub_elem.text}}" selected="selected">{{sub_elem.text}}</option>
{% endfor %}
{% else %}
{% set selected_list = [] %}
{% for sub_elem in elem.getchildren() %}
{% do selected_list.append(sub_elem.text) %}
{% endfor %}
{% for item_value in launch_item_values[','.join(['uos', elem.tag])] %}
{% if item_value in selected_list %}
<option value="{{item_value}}" selected="selected">{{item_value}}</option>
{% else %}
<option value="{{item_value}}">{{item_value}}</option>
{% endif %}
{% endfor %}
{% endif %}
</select>
</div>
<p id="{{'uos:id='+vm.attrib['id']+','+elem.tag+','+elem.tag[:-1]}}_err" class="col-sm-3"></p>
</div>
{% endif %}
{% endif %}
{% endfor %}
</td>
</tr>
{% endfor %}
<tr><td>
<button type="button" class="btn" id="add_launch_script" data-toggle="modal" data-id="-1"
data-target="#add_launch_modal">Configure an UOS</button>
</td></tr>
</table>
{% else %}
<text class="form-control" id="err_msg">No setting available. Select one board info and make sure the launch xml
exists.
</text>
{% endif %}
</form>
{% endblock %}