James Iter 7 жил өмнө
parent
commit
f16ac32d57

+ 12 - 0
jimvc/api/guest.py

@@ -103,6 +103,11 @@ def r_create():
             Rules.VLAN_ID.value
         )
 
+    if 'link' in request.json:
+        args_rules.append(
+            Rules.LINK.value
+        )
+
     try:
         ret = dict()
         ret['state'] = ji.Common.exchange_state(20000)
@@ -250,6 +255,7 @@ def r_create():
                 guest.password = ji.Common.generate_random_code(length=16)
 
             guest.ip = guest_ip_generator.next()
+            guest.link = request.json.get('link', 'http://' + guest.ip)
             guest.vnc_port = guest_vnc_port_generator.next()
             guest.vlan_id = vlan_id
 
@@ -1444,6 +1450,11 @@ def r_update(uuids):
             Rules.REMARK.value,
         )
 
+    if 'link' in request.json:
+        args_rules.append(
+            Rules.LINK.value,
+        )
+
     if args_rules.__len__() < 2:
         return ret
 
@@ -1461,6 +1472,7 @@ def r_update(uuids):
             guest.uuid = uuid
             guest.get_by('uuid')
             guest.remark = request.json.get('remark', guest.remark)
+            guest.link = request.json.get('link', guest.link)
 
             guest.update()
             guest.get()

+ 3 - 2
jimvc/models/guest.py

@@ -38,6 +38,7 @@ class Guest(ORM):
         self.memory = None
         self.bandwidth = 0
         self.ip = None
+        self.link = ''
         self.network = None
         self.manage_network = None
         self.vnc_port = None
@@ -63,8 +64,8 @@ class Guest(ORM):
 
     @staticmethod
     def get_allow_update_keywords():
-        return ['autostart', 'remark', 'cpu', 'memory', 'bandwidth', 'network', 'manage_network', 'vnc_password',
-                'service_id', 'vlan_id']
+        return ['autostart', 'remark', 'cpu', 'memory', 'bandwidth', 'link', 'network', 'manage_network',
+                'vnc_password', 'service_id', 'vlan_id']
 
     @staticmethod
     def get_allow_content_search_keywords():

+ 1 - 0
jimvc/models/rules.py

@@ -78,6 +78,7 @@ class Rules(Enum):
     QUANTITY = (int, 'quantity')
     NAME = (basestring, 'name')
     PATH = (basestring, 'path')
+    LINK = (basestring, 'link')
     LOGIN_NAME = (basestring, 'login_name')
     PASSWORD = (basestring, 'password')
     LEASE_TERM = (int, 'lease_term')

+ 64 - 3
jimvc/themes/default/templates/guests_show.html

@@ -226,6 +226,17 @@
             $('#edit_remark').val($(me.relatedTarget).prev().text());
         });
 
+        $('#edit_link_modal').on('show.bs.modal', function (me) {
+            $('#edit_link_instance_uuid').val($(me.relatedTarget).parent().parent().parent().children()[0].textContent);
+
+            if ($(me.relatedTarget).prev().find('a').hasAttr('href')) {
+                $('#edit_link').val($(me.relatedTarget).prev().find('a').attr('href'));
+            } else {
+                $(me.relatedTarget).prev().html('<a href="" target="_blank" class="link">' + $(me.relatedTarget).prev().text() + '</a>');
+                $('#edit_link').val('');
+            }
+        });
+
         $('#service_label_edit_name_modal').on('show.bs.modal', function (me) {
             $('#service_id').val($(me.relatedTarget).parent().data('service_id'));
             $('#service_label_edit_name').val($(me.relatedTarget).parent().text().trim());
@@ -479,10 +490,12 @@
 
     function row_onmouseover(me) {
         $(me).find(".edit_remark_trigger").css('display','inline-flex');
+        $(me).find(".edit_link_trigger").css('display','inline-flex');
     }
 
     function row_onmouseout(me) {
         $(me).find(".edit_remark_trigger").css('display','none');
+        $(me).find(".edit_link_trigger").css('display','none');
     }
 
     function service_label_onmouseover(me) {
@@ -538,6 +551,31 @@
         });
     }
 
+    function link_update(me) {
+        var uuid = $('#edit_link_instance_uuid').val();
+        var link = $('#edit_link').val();
+        $('#edit_link_modal').modal('hide');
+        $.ajax({
+            url : '/api/guests/' + uuid,
+            type : 'PATCH',
+            contentType: "application/json; charset=utf-8",
+            data : JSON.stringify({
+                link: link
+            }),
+            error : function() {
+                alter_danger('实例快速链接更新失败!');
+            },
+            success : function() {
+                if ($('.guest_list tbody').find('td:contains(' + uuid + ')').parent().find('.link').hasAttr('href')) {
+                    $('.guest_list tbody').find('td:contains(' + uuid + ')').parent().find('.link').attr('href', link);
+                } else {
+                    $('.guest_list tbody').find('td:contains(' + uuid + ')').parent().find('.link').attr('href', link);
+                }
+                alter_success('实例快速链接更新成功!');
+            }
+        });
+    }
+
     function service_name_update(me) {
         var _id = $('#service_id').val();
         var name = $('#service_label_edit_name').val();
@@ -1787,8 +1825,8 @@
                     <th>状态</th>
                     <th>计算节点</th>
                     <th>配置</th>
-                    <th>网络</th>
-                    <th width="150px;">密码&nbsp;&nbsp;<a href="#" class="glyph-icon icon-elusive-eye-off" onclick="change_display_password(this);" style="color: #014c8c;"></a></th>
+                    <th width="140px;">网络</th>
+                    <th width="140px;">密码&nbsp;&nbsp;<a href="#" class="glyph-icon icon-elusive-eye-off" onclick="change_display_password(this);" style="color: #014c8c;"></a></th>
                     <th>创建时间</th>
                     <th>操作</th>
                 </tr>
@@ -1850,7 +1888,12 @@
                             {% endif %}
                     </td>
                     <td>
-                        {{ item.ip }}<br>
+                        <div>
+                            <p style="display: inline-block;">{% if item.link != '' %}<a class="link" target="_blank" href="{{ item.link }}">{{ item.ip }}</a>{% else %}{{ item.ip }}{% endif %}</p>
+                            <a href="javascript:;" class="edit_link_trigger" data-toggle="modal" data-target="#edit_link_modal" style="display: none; float: right;">
+                                <span class="glyph-icon icon-elusive-pencil" style="width: 20px; height: 20px; margin-left: 10px; border-radius: 0; border: 1px solid rgb(220, 233, 255); background-color: #ffffff;"></span>
+                            </a>
+                        </div>
                         <a href="/guests?filter=vlan_id:eq:{{ item.vlan_id }}" title="{{ item.vlan.description }}">{{ item.vlan.label }}</a>
                     </td>
                     <td><span class="unreal_password">*********</span><span class="real_password" style="display: none;">{{ item.password }}</span></td>
@@ -2196,6 +2239,24 @@
     </div>
 </div>
 
+<div class="modal" id="edit_link_modal" tabindex="-1" role="dialog" style="margin-top: 100px;">
+    <div class="modal-dialog modal-sm">
+        <div class="modal-content">
+            <div class="modal-header">
+                <h4 class="modal-title">编辑实例快速链接:</h4>
+            </div>
+            <div class="modal-body">
+                <input id="edit_link_instance_uuid" title="实例 UUID" class="form-control" name="uuid" hidden>
+                <input id="edit_link" title="实例快速链接 URL" class="form-control" name="link">
+            </div>
+            <div class="modal-footer">
+                <button type="button" class="btn btn-sm btn-primary" onclick="link_update();">确定</button>
+                <button type="button" class="btn btn-sm btn-default" data-dismiss="modal">取消</button>
+            </div>
+        </div>
+    </div>
+</div>
+
 <div class="modal" id="migrate_modal" tabindex="-1" role="dialog" style="margin-top: 100px;">
     <div class="modal-dialog modal-sm">
         <div class="modal-content">

+ 1 - 0
misc/init.sql

@@ -46,6 +46,7 @@ CREATE TABLE IF NOT EXISTS guest(
     -- bps
     bandwidth INT UNSIGNED NOT NULL DEFAULT 0,
     ip CHAR(15) NOT NULL,
+    link VARCHAR(255) NOT NULL DEFAULT '',
     network VARCHAR(64) NOT NULL,
     manage_network VARCHAR(64) NOT NULL,
     vnc_port INT UNSIGNED NOT NULL,

+ 1 - 0
misc/v0.8_to_v0.9/update.sql

@@ -1,5 +1,6 @@
 USE jimv;
 
+ALTER TABLE guest ADD COLUMN link VARCHAR(255) NOT NULL DEFAULT '';
 ALTER TABLE guest ADD COLUMN vlan_id INT NOT NULL DEFAULT -1;
 ALTER TABLE guest ADD INDEX (vlan_id);