Przeglądaj źródła

加入添加操作细则功能

James Iter 9 lat temu
rodzic
commit
fbd7a7b3a1
2 zmienionych plików z 99 dodań i 30 usunięć
  1. 79 18
      templates/operate_rule_show.html
  2. 20 12
      views/operate_rule.py

+ 79 - 18
templates/operate_rule_show.html

@@ -124,7 +124,8 @@
             $('#edit_command').val($(me.relatedTarget).parent()[0].innerText);
         });
 
-        $('#add_boot_job_modal').on('show.bs.modal', function (me) {
+        $('#add_operate_rule_modal').on('show.bs.modal', function (me) {
+            refresh_operate_rule_boot_job_selectpicker($('#boot_job_id'));
         });
 
         $('#update_kind_modal').on('show.bs.modal', function (me) {
@@ -141,6 +142,40 @@
             $('#update_sequence_instance_desc_sub').empty();
             $('#update_sequence_instance_desc_sub').append($(me.relatedTarget).parent().next().find('div').prop('outerHTML'));
         });
+
+        $('#kind').on('changed.bs.select', function (me) {
+            $('#payload_panel').empty();
+            if ($('#kind').val() == '0') {
+                $('#payload_panel').append('\
+                    <div class="form-group">\
+                        <div class="col-sm-2"></div>\
+                        <label class="col-sm-2 control-label"><span class="glyph-icon icon-terminal"></span>&nbsp;&nbsp;命令</label>\
+                        <div class="col-sm-6">\
+                            <input id="command" title="命令" class="form-control" name="command">\
+                        </div>\
+                    </div>'
+                );
+            } else {
+                $('#payload_panel').append('\
+                    <div class="form-group">\
+                        <div class="col-sm-2"></div>\
+                        <label class="col-sm-2 control-label"><span class="glyph-icon icon-elusive-stumbleupon"></span>&nbsp;&nbsp;文件路径</label>\
+                        <div class="col-sm-6">\
+                            <input id="path" title="操作细则文件路径" class="form-control" name="path">\
+                        </div>\
+                    </div>'
+                );
+                $('#payload_panel').append('\
+                    <div class="form-group">\
+                        <div class="col-sm-2"></div>\
+                        <label class="col-sm-2 control-label"><span class="glyph-icon icon-file-text-o"></span>&nbsp;&nbsp;文件内容</label>\
+                        <div class="col-sm-6">\
+                            <textarea id="content" title="操作细则文件内容" class="form-control" rows="6" name="content"></textarea>\
+                        </div>\
+                    </div>'
+                );
+            }
+        });
     });
 
     function refresh() {
@@ -163,7 +198,7 @@
     }
 
     $(function() { "use strict";
-        $("#update_sequence").TouchSpin({
+        $("#update_sequence, #sequence").TouchSpin({
             max: 20,
             min: 1,
             verticalbuttons: true,
@@ -172,6 +207,26 @@
         });
     });
 
+    function refresh_operate_rule_boot_job_selectpicker(selectpicker) {
+        $.ajax({
+            url : '/api/boot_jobs',
+            type : 'GET',
+            contentType: "application/json; charset=utf-8",
+            dataType: 'json',
+            error : function() {
+            },
+            success : function(data, textStatus, xhr) {
+                selectpicker.empty();
+                $.each(data.data, function(k, v) {
+                    selectpicker.append(
+                        $('<option>', {value: v['id'], text: v['name'], 'data-subtext': v['remark']})
+                    );
+                });
+                selectpicker.selectpicker('refresh');
+            }
+        });
+    }
+
     function path_update(me) {
         var operate_rule_id = $('#operate_rule_id').val();
         var path = $('#edit_path').val();
@@ -273,7 +328,7 @@
 
     function remove(id) {
         $.ajax({
-            url : '/api/boot_jobs/' + id,
+            url : '/api/operate_rules/' + id,
             type : 'DELETE',
             contentType: "application/json; charset=utf-8",
             error : function() {
@@ -318,7 +373,7 @@
                         </div>
                         <div class="pull-right">
                             <button class="btn btn-default" onclick="refresh()" style="border-radius: 0;"><span class="glyph-icon icon-elusive-arrows-cw"></span></button>
-                            <a class="btn btn-info" href="javascript:;" data-toggle="modal" data-target="#add_boot_job_modal" style="border-radius: 0; padding-left: 40px; padding-right: 40px;">添加操作细则</a>
+                            <a class="btn btn-info" href="javascript:;" data-toggle="modal" data-target="#add_operate_rule_modal" style="border-radius: 0; padding-left: 40px; padding-right: 40px;">添加操作细则</a>
                         </div>
                     </div>
                 </div>
@@ -327,7 +382,7 @@
                 <thead>
                 <tr role="row">
                     <th style="display: none;">ID</th>
-                    <th>操作细则名称</th>
+                    <th>启动作业</th>
                     <th width="80px;">类型</th>
                     <th>执行序列</th>
                     <th width="600px;">[路径/内容 | 命令]</th>
@@ -385,8 +440,10 @@
                             <ul class="dropdown-menu">
                                 <li>
                                     <a href="javascript:;" data-toggle="modal" data-target="#delete_modal"
-                                       onclick="$('#operate_rule_id').val($(this).parent().parent().parent().parent().parent().children()[0].textContent);
-                                       $('#delete_instance_desc').text($(this).parent().parent().parent().parent().parent().children()[1].textContent)">
+                                        onclick="$('#operate_rule_id').val($(this).parent().parent().parent().parent().parent().children()[0].textContent);
+                                        $('#delete_instance_desc_sub').empty();
+                                        $('#delete_instance_desc_sub').append($(this).parent().parent().parent().parent().prev().find('div').prop('outerHTML'));
+                                        $('#delete_instance_desc').text($(this).parent().parent().parent().parent().parent().children()[1].textContent)">
                                         删除
                                     </a>
                                 </li>
@@ -503,6 +560,7 @@
             <div class="modal-body">
                 <p>你确定要删除该操作细则吗?</p>
                 <h3 style="color: orangered;" id="delete_instance_desc"></h3>
+                <h6 id="delete_instance_desc_sub"></h6>
             </div>
             <div class="modal-footer">
                 <button type="button" class="btn btn-sm btn-primary" onclick="delete_at();">确定</button>
@@ -512,7 +570,7 @@
     </div>
 </div>
 
-<div class="modal" id="add_boot_job_modal" tabindex="-1" role="dialog" style="margin-top: 100px;">
+<div class="modal" id="add_operate_rule_modal" tabindex="-1" role="dialog" style="margin-top: 100px;">
     <div class="modal-dialog modal-lg">
         <div class="modal-content">
             <div class="modal-header">
@@ -520,32 +578,35 @@
             </div>
             <div class="modal-body" style="padding-top: 0; padding-bottom: 0;">
                 <div class="example-box-wrapper">
-                    <form class="form-horizontal bordered-row" action="/boot_job" method="post">
+                    <form class="form-horizontal bordered-row" action="/operate_rule" method="post">
                         <div class="form-group">
                             <div class="col-sm-2"></div>
-                            <label class="col-sm-2 control-label"><span class="glyph-icon icon-elusive-compass-circled"></span>&nbsp;&nbsp;操作细则名称</label>
+                            <label class="col-sm-2 control-label"><span class="glyph-icon icon-elusive-compass-circled"></span>&nbsp;&nbsp;启动作业</label>
                             <div class="col-sm-6">
-                                <input id="name" name="name" type="text" title="操作细则名称" class="form-control">
+                                <select id="boot_job_id" name="boot_job_id" title="启动作业" class="selectpicker">
+                                </select>
                             </div>
                         </div>
                         <div class="form-group">
                             <div class="col-sm-2"></div>
-                            <label class="col-sm-2 control-label"><span class="glyph-icon icon-pie-chart"></span>&nbsp;&nbsp;作用域</label>
+                            <label class="col-sm-2 control-label"><span class="glyph-icon icon-th-list"></span>&nbsp;&nbsp;类型</label>
                             <div class="col-sm-6">
-                                <select id="use_for" name="use_for" title="作用域" class="selectpicker">
-                                    <option value="0" data-subtext="从模板克隆的虚拟机,首次启动时初始化系统使用" selected>模板</option>
-                                    <option value="1" data-subtext="JimV系统平台内置的功能,如重置系统密码,更换IP等操作">系统</option>
-                                    <option value="2" data-subtext="通过重启系统,批量执行用户预定的操作">用户</option>
+                                <select id="kind" name="kind" title="请选择" class="selectpicker">
+                                    <option value="0" data-subtext="系统启动前,通过 guestfish 所执行的命令">命令</option>
+                                    <option value="1" data-subtext="系统启动前,通过 guestfish 替换目标文件中的内容">覆写文件</option>
+                                    <option value="2" data-subtext="系统启动前,通过 guestfish 向目标文件追加内容">追加内容</option>
                                 </select>
                             </div>
                         </div>
                         <div class="form-group">
                             <div class="col-sm-2"></div>
-                            <label class="col-sm-2 control-label"><span class="glyph-icon icon-newspaper-o"></span>&nbsp;&nbsp;备注</label>
+                            <label class="col-sm-2 control-label"><span class="glyph-icon icon-sort-numeric-asc"></span>&nbsp;&nbsp;执行序列</label>
                             <div class="col-sm-6">
-                                <input id="remark" name="remark" type="text" title="备注" class="form-control">
+                                <input id="sequence" title="执行序列" class="form-control" type="text" value="1" name="sequence">
                             </div>
                         </div>
+                        <div id="payload_panel" class="form-group">
+                        </div>
                         <div class="form-group">
                             <div class="col-sm-4"></div>
                             <div class="col-sm-6 pull-right">

+ 20 - 12
views/operate_rule.py

@@ -7,6 +7,8 @@ from flask import Blueprint, render_template, url_for, request, redirect
 import requests
 from math import ceil
 
+from models.status import OperateRuleKind
+
 
 __author__ = 'James Iter'
 __date__ = '2017/7/17'
@@ -110,26 +112,32 @@ def create():
     host_url = request.host_url.rstrip('/')
 
     if request.method == 'POST':
-        name = request.form.get('name')
-        use_for = request.form.get('use_for')
-        remark = request.form.get('remark')
+        boot_job_id = int(request.form.get('boot_job_id'))
+        kind = int(request.form.get('kind'))
+        sequence = int(request.form.get('sequence'))
 
         payload = {
-            "name": name,
-            "use_for": int(use_for),
-            "remark": remark
+            "boot_job_id": boot_job_id,
+            "kind": kind,
+            "sequence": sequence
         }
 
-        url = host_url + '/api/boot_job'
+        if kind == OperateRuleKind.cmd.value:
+            payload['command'] = request.form.get('command', '')
+
+        else:
+            payload['path'] = request.form.get('path', '')
+            payload['content'] = request.form.get('content', '')
+
+        url = host_url + '/api/operate_rule'
         headers = {'content-type': 'application/json'}
         r = requests.post(url, data=json.dumps(payload), headers=headers)
         j_r = json.loads(r.content)
-        return render_template('success.html', go_back_url='/boot_jobs', timeout=10000, title='提交成功',
-                               message_title='添加启动作业的请求已被接受',
-                               message='您所提交的启动作业已创建。页面将在10秒钟后自动跳转到模板列表页面!')
+        return render_template('success.html', go_back_url='/operate_rules', timeout=10000, title='提交成功',
+                               message_title='添加启动作业操作细则的请求已被接受',
+                               message='您所提交的启动作业操作细则已创建。页面将在10秒钟后自动跳转到模板列表页面!')
 
     else:
-        return redirect(url_for('v_boot_jobs.show'))
-
+        return redirect(url_for('v_operate_rules.show'))