Selaa lähdekoodia

迁移时,目标主机使用 ip 地址标识

James Iter 7 vuotta sitten
vanhempi
sitoutus
902db51857

+ 11 - 3
INSTALL.sh

@@ -17,6 +17,7 @@ export PYPI='https://mirrors.aliyun.com/pypi/simple/'
 export SMTP_HOST=''
 export SMTP_USER=''
 export SMTP_PASSWORD=''
+export TOKEN=`echo $[$RANDOM]|md5sum|cut -c 1-32`
 
 ARGS=`getopt -o h --long rdb_root_password:,rdb_jimv_password:,redis_password:,jwt_secret:,secret_key:,version:,help -n 'INSTALL.sh' -- "$@"`
 
@@ -144,11 +145,13 @@ function install_JimVC() {
     cat > /etc/yum.repos.d/JimV.repo << EOF
 [JimV]
 name=JimV - \$basearch
-baseurl=http://repo.iit.im/centos/7/os/\$basearch
+baseurl=http://repo.jimv.cn/centos/7/os/\$basearch
+        http://repo.jimv.io/centos/7/os/\$basearch
+        http://repo.iit.im/centos/7/os/\$basearch
 failovermethod=priority
 enabled=1
 gpgcheck=0
-gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-EPEL-7
+gpgkey=https://repo.jimv.cn/RPM-GPG-KEY-JIMV-114EA591
 EOF
     yum install jimv-controller -y
 }
@@ -260,6 +263,10 @@ function initialization_db() {
     mysql -u jimv -p${RDB_JIMV_PSWD} -e 'show databases'
 }
 
+function generate_token() {
+    redis-cli -a ${REDIS_PSWD} --raw ZADD Z:Token $(($(date +%s) + 86400)) ${TOKEN}
+}
+
 function generate_config_file() {
     sed -i "s/\"db_password\".*$/\"db_password\": \"${RDB_JIMV_PSWD}\",/" /etc/jimvc.conf
     sed -i "s/\"redis_password\".*$/\"redis_password\": \"${REDIS_PSWD}\",/" /etc/jimvc.conf
@@ -291,7 +298,7 @@ function display_summary_information() {
     echo
     echo "--->"
     echo "2: 到 [计算节点] 执行如下命令,进行 JimV-N 的部署。"
-    echo "curl https://raw.githubusercontent.com/jamesiter/JimV-N/master/INSTALL.sh | bash -s -- --redis_host `hostname -I` --redis_password ${REDIS_PSWD} --redis_port 6379"
+    echo "curl https://raw.githubusercontent.com/jamesiter/JimV-N/master/INSTALL.sh | bash -s -- --host `hostname -I` --token ${TOKEN}"
     echo
     echo "--->"
     echo "3: 享受 JimV 给您带来的 '简单、快速、灵活' 开创虚拟机实例的快乐。。。。。"
@@ -312,6 +319,7 @@ function deploy() {
     install_Redis
     install_Nginx
     initialization_db
+    generate_token
     generate_config_file
     start_JimVC
     display_summary_information

+ 1 - 2
docs/todo.md

@@ -91,10 +91,9 @@
 - [x] 考虑用 /etc/machine-id 替换 node_id
 - [ ] 邮局设置从配置文件提取到JimV系统配置中
 - [x] 当计算节点失联后,相应的虚拟机状态标识为"未知"状态
-- [ ] 替换热迁移时计算节点的主机名为 IP 地址
 - [x] 保留 IP 列表(可用作 VIP 场景)
 - [x] IP 修正功能
-- [ ] 替换热迁移时计算节点的主机名为 IP 地址
+- [x] 替换热迁移时计算节点的主机名为 IP 地址
 - [ ] 加入批量执行脚本功能
 - [ ] 创建虚拟机时,加入高级功能,选择 IP 池,选择分组
 

+ 4 - 0
jimvc/__init__.py

@@ -62,6 +62,8 @@ from jimvc.api.host import blueprint as host_blueprint
 from jimvc.api.host import blueprints as host_blueprints
 from jimvc.api.token import blueprint as token_blueprint
 from jimvc.api.token import blueprints as token_blueprints
+from jimvc.api.misc import blueprint as misc_blueprint
+from jimvc.api.misc import blueprints as misc_blueprints
 from jimvc.api.ssh_key import blueprint as ssh_key_blueprint
 from jimvc.api.ssh_key import blueprints as ssh_key_blueprints
 from jimvc.api.snapshot import blueprint as snapshot_blueprint
@@ -277,6 +279,8 @@ try:
     app.register_blueprint(host_blueprints)
     app.register_blueprint(token_blueprint)
     app.register_blueprint(token_blueprints)
+    app.register_blueprint(misc_blueprint)
+    app.register_blueprint(misc_blueprints)
     app.register_blueprint(ssh_key_blueprint)
     app.register_blueprint(ssh_key_blueprints)
     app.register_blueprint(snapshot_blueprint)

+ 11 - 10
jimvc/api/guest.py

@@ -774,19 +774,23 @@ def r_detach_disk(disk_uuid):
 
 
 @Utils.dumps2response
-def r_migrate(uuids, destination_host):
+def r_migrate(uuids, node_id):
 
     args_rules = [
         Rules.UUIDS.value,
-        Rules.DESTINATION_HOST.value
+        Rules.NODE_ID.value
     ]
 
     try:
-        ji.Check.previewing(args_rules, {'uuids': uuids, 'destination_host': destination_host})
+        ji.Check.previewing(args_rules, {'uuids': uuids, 'node_id': node_id})
 
         ret = dict()
         ret['state'] = ji.Common.exchange_state(20000)
 
+        config = Config()
+        config.id = 1
+        config.get()
+
         # 取全部活着的 hosts
         available_hosts = Host.get_available_hosts(nonrandom=None)
 
@@ -800,23 +804,20 @@ def r_migrate(uuids, destination_host):
             if host['node_id'] not in available_hosts_mapping_by_node_id:
                 available_hosts_mapping_by_node_id[host['node_id']] = host
 
+        dst_ip = available_hosts_mapping_by_node_id[node_id]['interfaces'][config.vm_manage_network]['ip']
+
         guest = Guest()
         for uuid in uuids.split(','):
             guest.uuid = uuid
             guest.get_by('uuid')
 
-        config = Config()
-        config.id = 1
-        config.get()
-
         for uuid in uuids.split(','):
             guest.uuid = uuid
             guest.get_by('uuid')
 
             # 忽略宕机计算节点 上面的 虚拟机 迁移请求
             # 忽略目标计算节点 等于 当前所在 计算节点 的虚拟机 迁移请求
-            if guest.node_id.__str__() not in available_hosts_mapping_by_node_id or \
-                    available_hosts_mapping_by_node_id[guest.node_id.__str__()]['hostname'] == destination_host:
+            if guest.node_id.__str__() not in available_hosts_mapping_by_node_id or guest.node_id.__str__() == node_id:
                 continue
 
             message = {
@@ -825,7 +826,7 @@ def r_migrate(uuids, destination_host):
                 'uuid': uuid,
                 'node_id': guest.node_id,
                 'storage_mode': config.storage_mode,
-                'duri': 'qemu+ssh://' + destination_host + '/system'
+                'duri': 'qemu+ssh://' + dst_ip + '/system'
             }
 
             Utils.emit_instruction(message=json.dumps(message))

+ 10 - 1
jimvc/api/misc.py

@@ -6,7 +6,10 @@ import jimit as ji
 import json
 from flask import Blueprint, request
 
-from jimvc.models import app_config, Rules, Token
+from jimvc.models import Config
+from jimvc.models import app_config
+from jimvc.models import Rules
+from jimvc.models import Token
 from jimvc.models import Utils
 from jimvc.models import Host
 
@@ -64,10 +67,16 @@ def r_join(node_id, _token):
             ret['state'] = ji.Common.exchange_state(40901)
 
         else:
+            config = Config()
+            config.id = 1
+            config.get()
+
             ret['data']['redis_host'] = request.host
             ret['data']['redis_port'] = app_config.get('redis_port', 6379)
             ret['data']['redis_password'] = app_config.get('redis_password', '')
             ret['data']['redis_dbid'] = app_config.get('redis_dbid', 0)
+            ret['data']['vm_network'] = config.vm_network
+            ret['data']['vm_manage_network'] = config.vm_manage_network
 
         return ret
 

+ 5 - 2
jimvc/api_route_table.py

@@ -3,7 +3,7 @@
 
 
 from jimvc.models import add_rule_api
-from jimvc.api import config, token
+from jimvc.api import config, token, misc
 from jimvc.api import ip_pool
 from jimvc.api import reserved_ip
 from jimvc.api import os_template_profile
@@ -41,6 +41,9 @@ add_rule_api(config.blueprint, '', api_func='config.r_get', methods=['GET'])
 # JimV 关于操作
 add_rule_api(about.blueprint, '', api_func='about.r_get', methods=['GET'])
 
+# 杂项操作
+add_rule_api(misc.blueprint, '/_join/<node_id>/<_token>', api_func='about.r_join', methods=['GET'])
+
 # IP 池操作
 add_rule_api(ip_pool.blueprint, '', api_func='ip_pool.r_create', methods=['POST'])
 add_rule_api(ip_pool.blueprints, '/<ids>', api_func='ip_pool.r_update', methods=['PATCH'])
@@ -126,7 +129,7 @@ add_rule_api(guest.blueprints, '/_suspend/<uuids>', api_func='guest.r_suspend',
 add_rule_api(guest.blueprints, '/_resume/<uuids>', api_func='guest.r_resume', methods=['PUT'])
 add_rule_api(guest.blueprint, '/_attach_disk/<uuid>/<disk_uuid>', api_func='guest.r_attach_disk', methods=['PUT'])
 add_rule_api(guest.blueprint, '/_detach_disk/<disk_uuid>', api_func='guest.r_detach_disk', methods=['PUT'])
-add_rule_api(guest.blueprints, '/_migrate/<uuids>/<destination_host>', api_func='guest.r_migrate', methods=['PUT'])
+add_rule_api(guest.blueprints, '/_migrate/<uuids>/<node_id>', api_func='guest.r_migrate', methods=['PUT'])
 add_rule_api(guest.blueprints, '/<uuids>', api_func='guest.r_get', methods=['GET'])
 add_rule_api(guest.blueprints, '', api_func='guest.r_get_by_filter', methods=['GET'])
 add_rule_api(guest.blueprints, '/_search', api_func='guest.r_content_search', methods=['GET'])

+ 2 - 2
jimvc/themes/default/templates/config_init.html

@@ -146,11 +146,11 @@
                         <div class="form-group">
                             <label class="col-sm-2 control-label">网桥(业务网络)</label>
                             <div class="col-sm-3">
-                                <input title="Guest 业务网络" class="form-control" id="vm_network" name="vm_network" type="text" value="net-br0">
+                                <input title="Guest 业务网络" class="form-control" id="vm_network" name="vm_network" type="text" value="net-br0" disabled>
                             </div>
                             <label class="col-sm-2 control-label">网桥(管理网络)</label>
                             <div class="col-sm-3">
-                                <input title="Guest 管理网络" class="form-control" id="vm_manage_network" name="vm_manage_network" type="text" value="net-br0">
+                                <input title="Guest 管理网络" class="form-control" id="vm_manage_network" name="vm_manage_network" type="text" value="net-br0" disabled>
                             </div>
                         </div>
                         <div class="form-group">

+ 5 - 5
jimvc/themes/default/templates/guests_show.html

@@ -255,7 +255,7 @@
                     $('#migrate_host').empty();
                     $.each(data.data, function(k, v) {
                         $('#migrate_host').append(
-                            $('<option>', {value: v['hostname'], text: v['hostname']})
+                            $('<option>', {value: v['node_id'], text: v['hostname']})
                         );
                     });
                     $('#migrate_host').trigger("chosen:updated");
@@ -770,9 +770,9 @@
         });
     }
 
-    function migrate(uuids, host) {
+    function migrate(uuids, node_id) {
         $.ajax({
-            url : '/api/guests/_migrate/' + uuids.join(',') + '/' + host,
+            url : '/api/guests/_migrate/' + uuids.join(',') + '/' + node_id,
             type : 'PUT',
             contentType: "application/json; charset=utf-8",
             error : function() {
@@ -976,9 +976,9 @@
         } else {
             uuids = get_checked_uuids();
         }
-        var host = $('#migrate_host').val();
+        var node_id = $('#migrate_host').val();
         $('#migrate_modal').modal('hide');
-        migrate([uuids], host);
+        migrate([uuids], node_id);
     }
 
     function reset_password_go() {