From e80d27c1a33aef212a069fb5ee32cc78238a1130 Mon Sep 17 00:00:00 2001 From: ApexLiu Date: Sun, 19 Mar 2017 11:44:09 +0800 Subject: [PATCH] =?UTF-8?q?=E5=8D=87=E7=BA=A7=E5=90=91=E5=AF=BC=E7=AE=80?= =?UTF-8?q?=E5=8D=95=E6=B5=8B=E8=AF=95=E9=80=9A=E8=BF=87=E3=80=82=E4=B8=8B?= =?UTF-8?q?=E4=B8=80=E6=AD=A5=E8=B0=83=E6=95=B4=E6=95=B0=E6=8D=AE=E8=A1=A8?= =?UTF-8?q?=E4=B8=AD=E7=9A=84=E5=AD=97=E6=AE=B5=E5=90=8D=EF=BC=88=E8=A1=A8?= =?UTF-8?q?=E4=B8=AD=E7=9A=84=E5=AD=97=E6=AE=B5=E5=90=8D=E6=97=A0=E9=9C=80?= =?UTF-8?q?=E5=8A=A0=E8=A1=A8=E5=90=8D=E7=A7=B0=E5=89=8D=E7=BC=80=EF=BC=89?= =?UTF-8?q?=EF=BC=8C=E4=B8=94=E5=B0=86=E6=89=80=E6=9C=89=E6=93=8D=E4=BD=9C?= =?UTF-8?q?=E6=95=B0=E6=8D=AE=E5=BA=93=E7=9A=84=E5=9C=B0=E6=96=B9=E6=94=B9?= =?UTF-8?q?=E4=B8=BA=E4=BD=BF=E7=94=A8=E6=96=B0=E7=9A=84=E5=B0=81=E8=A3=85?= =?UTF-8?q?=E7=B1=BB=E7=9A=84=E6=96=B9=E5=BC=8F=EF=BC=8C=E4=B8=BA=E5=B0=86?= =?UTF-8?q?=E6=9D=A5=E6=94=AF=E6=8C=81mysql=E5=81=9A=E5=87=86=E5=A4=87?= =?UTF-8?q?=E3=80=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../app/eom_app/app/database/create.py | 2 +- .../app/eom_app/app/database/upgrade.py | 41 +++++++++++++++---- .../app/eom_app/controller/maintenance.py | 4 +- .../www/teleport/app/eom_app/module/host.py | 16 ++++---- 4 files changed, 44 insertions(+), 19 deletions(-) diff --git a/server/www/teleport/app/eom_app/app/database/create.py b/server/www/teleport/app/eom_app/app/database/create.py index 32ca895..606c5c7 100644 --- a/server/www/teleport/app/eom_app/app/database/create.py +++ b/server/www/teleport/app/eom_app/app/database/create.py @@ -35,7 +35,7 @@ def create_and_init(db, step_begin, step_end): );""".format(db.table_prefix)) # 注意,这个key表原名为cert,考虑到其中存放的是ssh密钥对,与证书无关,因此改名为key - # 这也是升级到数据库版本10的标志! + # 这也是升级到数据库版本5的标志! _db_exec(db, step_begin, step_end, '创建表 key', """CREATE TABLE `{}key` ( `cert_id` integer PRIMARY KEY AUTOINCREMENT, `cert_name` varchar(256), diff --git a/server/www/teleport/app/eom_app/app/database/upgrade.py b/server/www/teleport/app/eom_app/app/database/upgrade.py index 675fe3a..e409f08 100644 --- a/server/www/teleport/app/eom_app/app/database/upgrade.py +++ b/server/www/teleport/app/eom_app/app/database/upgrade.py @@ -35,7 +35,7 @@ class DatabaseUpgrade: ret = self.db.is_table_exists('sys_user') if ret is None: - self.step_end(_step, -1) + self.step_end(_step, -1, '无法连接到数据库') return False elif not ret: self.step_end(_step, 0, '跳过 v1 到 v2 的升级操作') @@ -121,29 +121,32 @@ class DatabaseUpgrade: _step = self.step_begin(' - 调整数据表...') if not self.db.exec('ALTER TABLE `{}auth` ADD `host_auth_id` INTEGER;'.format(self.db.table_prefix)): - self.step_end(_step, -1) + self.step_end(_step, -1, '无法在auth表中加入host_auth_id字段') return False if not self.db.exec('UPDATE `{}auth` SET `host_auth_id`=`host_id`;'.format(self.db.table_prefix)): - self.step_end(_step, -1) + self.step_end(_step, -1, '无法将auth表中host_auth_id字段的值均调整为host_id字段的值') return False if not self.db.exec('ALTER TABLE `{}log` ADD `protocol` INTEGER;'.format(self.db.table_prefix)): - self.step_end(_step, -1) + self.step_end(_step, -1, '无法在log表中加入protocol字段') return False if not self.db.exec('UPDATE `{}log` SET `protocol`=1 WHERE `sys_type`=1;'.format(self.db.table_prefix)): - self.step_end(_step, -1) + self.step_end(_step, -1, '无法修正log表中的protocol字段数据(1)') return False if not self.db.exec('UPDATE `{}log` SET `protocol`=2 WHERE `sys_type`=2;'.format(self.db.table_prefix)): - self.step_end(_step, -1) + self.step_end(_step, -1, '无法修正log表中的protocol字段数据(2)') return False - if not self.db.exec('UPDATE ``{}log`` SET `ret_code`=9999 WHERE `ret_code`=0;'.format(self.db.table_prefix)): - self.step_end(_step, -1) + if not self.db.exec('UPDATE `{}log` SET `ret_code`=9999 WHERE `ret_code`=0;'.format(self.db.table_prefix)): + self.step_end(_step, -1, '无法修正log表中的ret_code字段数据') return False + self.step_end(_step, 0) + _step = self.step_begin(' - 拆分数据表...') + # 新建两个表,用于拆分原来的 ts_host 表 if not self.db.exec("""CREATE TABLE `{}host_info` ( `host_id` integer PRIMARY KEY AUTOINCREMENT, @@ -254,12 +257,16 @@ class DatabaseUpgrade: shutil.copy(self.db.db_source['file'], _bak_file) self.step_end(_step, 0) + _step = self.step_begin(' - 为telnet增加默认配置') # 如果ts_config表中没有ts_server_telnet_port项,则增加默认值52389 db_ret = self.db.query('SELECT * FROM `{}config` WHERE `name`="ts_server_telnet_port";'.format(self.db.table_prefix)) if len(db_ret) == 0: if not self.db.exec('INSERT INTO `{}config` (`name`, `value`) VALUES ("ts_server_telnet_port", "52389");'.format(self.db.table_prefix)): + self.step_end(_step, -1) return False + self.step_end(_step, 0) + _step = self.step_begin(' - 调整认证数据表数据...') auth_info_ret = self.db.query('SELECT `id`, `host_id`, `pro_type`, `auth_mode`, `user_name`, `user_pswd`, `cert_id`, `encrypt`, `log_time` FROM `{}auth_info`;'.format(self.db.table_prefix)) auth_ret = self.db.query('SELECT `auth_id`, `account_name`, `host_id`, `host_auth_id` FROM `{}auth`;'.format(self.db.table_prefix)) @@ -271,7 +278,9 @@ class DatabaseUpgrade: # 从原来的表中查询数据 host_info_ret = self.db.query('SELECT `host_id`, `group_id`, `host_sys_type`, `host_ip`, `pro_port`, `host_lock`, `host_desc` FROM {}host_info;'.format(self.db.table_prefix)) if host_info_ret is None: + self.step_end(_step, 0, '尚无认证数据,跳过处理') return True + # 先找出最大的host_id,这样如果要拆分一个host,就知道新的host_id应该是多少了 for i in range(len(host_info_ret)): if host_info_ret[i][0] > max_host_id: @@ -380,6 +389,9 @@ class DatabaseUpgrade: # for i in range(len(new_auth)): # print(new_auth[i]) + self.step_end(_step, 0) + _step = self.step_begin(' - 重新整理认证数据表结构及数据...') + # 将整理好的数据写入新的临时表 # 先创建三个临时表 if not self.db.exec("""CREATE TABLE `{}auth_tmp` ( @@ -388,6 +400,7 @@ class DatabaseUpgrade: `host_id` INTEGER, `host_auth_id` int(11) NOT NULL );""".format(self.db.table_prefix)): + self.step_end(_step, -1, '无法创建认证数据临时表') return False if not self.db.exec("""CREATE TABLE `{}host_info_tmp` ( @@ -400,6 +413,7 @@ class DatabaseUpgrade: `host_lock` int(11) DEFAULT 0, `host_desc` DEFAULT '' );""".format(self.db.table_prefix)): + self.step_end(_step, -1, '无法创建主机信息数据临时表') return False if not self.db.exec("""CREATE TABLE `{}auth_info_tmp` ( @@ -413,6 +427,7 @@ class DatabaseUpgrade: `encrypt` INTEGER, `log_time` varchar(60) );""".format(self.db.table_prefix)): + self.step_end(_step, -1, '无法创建认证信息数据临时表') return False for i in range(len(new_host_info)): @@ -424,6 +439,7 @@ class DatabaseUpgrade: new_host_info[i]['host_lock'], new_host_info[i]['host_desc'] ) if not self.db.exec(sql): + self.step_end(_step, -1, '无法调整数据(1)') return False for i in range(len(new_auth_info)): @@ -436,6 +452,7 @@ class DatabaseUpgrade: ) # print(str_sql) if not self.db.exec(sql): + self.step_end(_step, -1, '无法调整数据(2)') return False for i in range(len(new_auth)): @@ -445,27 +462,35 @@ class DatabaseUpgrade: new_auth[i]['auth_id'], new_auth[i]['account_name'], new_auth[i]['host_id'], new_auth[i]['host_auth_id'] ) if not self.db.exec(sql): + self.step_end(_step, -1, '无法调整数据(3)') return False # 表改名 if not self.db.exec('ALTER TABLE `{}auth` RENAME TO `__bak_{}auth`;'.format(self.db.table_prefix, self.db.table_prefix)): + self.step_end(_step, -1, '无法处理临时表(1)') return False if not self.db.exec('ALTER TABLE `{}auth_info` RENAME TO `__bak_{}auth_info`;'.format(self.db.table_prefix, self.db.table_prefix)): + self.step_end(_step, -1, '无法处理临时表(2)') return False if not self.db.exec('ALTER TABLE `{}host_info` RENAME TO `__bak_{}host_info`;'.format(self.db.table_prefix, self.db.table_prefix)): + self.step_end(_step, -1, '无法处理临时表(3)') return False if not self.db.exec('ALTER TABLE `{}auth_tmp` RENAME TO `{}auth`;'.format(self.db.table_prefix, self.db.table_prefix)): + self.step_end(_step, -1, '无法处理临时表(4)') return False if not self.db.exec('ALTER TABLE `{}auth_info_tmp` RENAME TO `{}auth_info`;'.format(self.db.table_prefix, self.db.table_prefix)): + self.step_end(_step, -1, '无法处理临时表(5)') return False if not self.db.exec('ALTER TABLE `{}host_info_tmp` RENAME TO `{}host_info`;'.format(self.db.table_prefix, self.db.table_prefix)): + self.step_end(_step, -1, '无法处理临时表(6)') return False + self.step_end(_step, 0) return True except: diff --git a/server/www/teleport/app/eom_app/controller/maintenance.py b/server/www/teleport/app/eom_app/controller/maintenance.py index 4d44d39..7c9d1d7 100644 --- a/server/www/teleport/app/eom_app/controller/maintenance.py +++ b/server/www/teleport/app/eom_app/controller/maintenance.py @@ -100,7 +100,7 @@ class RpcThreadManage: if get_db().create_and_init(_step_begin, _step_end): cfg.app_mode = APP_MODE_NORMAL - self._step_begin(tid, '操作已完成') + # self._step_begin(tid, '操作已完成') self._thread_end(tid) @@ -114,7 +114,7 @@ class RpcThreadManage: if get_db().upgrade_database(_step_begin, _step_end): cfg.app_mode = APP_MODE_NORMAL - self._step_begin(tid, '操作已完成') + # self._step_begin(tid, '操作已完成') self._thread_end(tid) diff --git a/server/www/teleport/app/eom_app/module/host.py b/server/www/teleport/app/eom_app/module/host.py index beebeb6..e0fc673 100644 --- a/server/www/teleport/app/eom_app/module/host.py +++ b/server/www/teleport/app/eom_app/module/host.py @@ -332,7 +332,7 @@ def get_cert_list(): field_a = ['cert_id', 'cert_name', 'cert_pub', 'cert_pri', 'cert_desc'] str_sql = 'SELECT {} ' \ - 'FROM ts_cert as a '.format(','.join(['a.{}'.format(i) for i in field_a])) + 'FROM ts_key as a '.format(','.join(['a.{}'.format(i) for i in field_a])) db_ret = sql_exec.ExecProcQuery(str_sql) @@ -439,7 +439,7 @@ def delete_host(host_list): def add_cert(cert_pub, cert_pri, cert_name): sql_exec = get_db_con() # - str_sql = 'INSERT INTO ts_cert (cert_pub, cert_pri, cert_name) VALUES (\'{}\',\'{}\',\'{}\')'.format(cert_pub, cert_pri, cert_name) + str_sql = 'INSERT INTO ts_key (cert_pub, cert_pri, cert_name) VALUES (\'{}\',\'{}\',\'{}\')'.format(cert_pub, cert_pri, cert_name) ret = sql_exec.ExecProcNonQuery(str_sql) return ret @@ -447,7 +447,7 @@ def add_cert(cert_pub, cert_pri, cert_name): def delete_cert(cert_id): sql_exec = get_db_con() # - str_sql = 'DELETE FROM ts_cert WHERE cert_id = {} '.format(cert_id) + str_sql = 'DELETE FROM ts_key WHERE cert_id = {} '.format(cert_id) ret = sql_exec.ExecProcNonQuery(str_sql) return ret @@ -457,11 +457,11 @@ def update_cert(cert_id, cert_pub, cert_pri, cert_name): # if 0 == len(cert_pri): - str_sql = 'UPDATE ts_cert SET cert_pub = \'{}\', ' \ + str_sql = 'UPDATE ts_key SET cert_pub = \'{}\', ' \ 'cert_name = \'{}\'' \ ' WHERE cert_id = {}'.format(cert_pub, cert_name, cert_id) else: - str_sql = 'UPDATE ts_cert SET cert_pub = \'{}\', ' \ + str_sql = 'UPDATE ts_key SET cert_pub = \'{}\', ' \ 'cert_pri = \'{}\', cert_name = \'{}\'' \ ' WHERE cert_id = {}'.format(cert_pub, cert_pri, cert_name, cert_id) @@ -557,7 +557,7 @@ def get_host_auth_info(host_auth_id): cert_id = 0 else: cert_id = int(x.a_cert_id) # int(user_auth) - str_sql = 'SELECT cert_pri FROM ts_cert WHERE cert_id = {}'.format(cert_id) + str_sql = 'SELECT cert_pri FROM ts_key WHERE cert_id = {}'.format(cert_id) db_ret = sql_exec.ExecProcQuery(str_sql) if db_ret is not None and len(db_ret) == 1: (cert_pri,) = db_ret[0] @@ -609,7 +609,7 @@ def update_host_extend_info(host_id, args): def get_cert_info(cert_id): sql_exec = get_db_con() - str_sql = 'SELECT cert_pri FROM ts_cert WHERE cert_id = {}'.format(cert_id) + str_sql = 'SELECT cert_pri FROM ts_key WHERE cert_id = {}'.format(cert_id) db_ret = sql_exec.ExecProcQuery(str_sql) if db_ret is not None and len(db_ret) == 1: (cert_pri,) = db_ret[0] @@ -813,7 +813,7 @@ def get_auth_info(auth_id): elif db_item.c_auth_mode == 2: cert_id = db_item.c_cert_id - str_sql = 'SELECT cert_pri FROM ts_cert WHERE cert_id={}'.format(cert_id) + str_sql = 'SELECT cert_pri FROM ts_key WHERE cert_id={}'.format(cert_id) db_ret = sql_exec.ExecProcQuery(str_sql) if db_ret is None or len(db_ret) > 1: return None