diff --git a/update/migrations/0027_updatecommand_combo_cmd_alter_updatecommand_run.py b/update/migrations/0027_updatecommand_combo_cmd_alter_updatecommand_run.py
new file mode 100644
index 0000000..1f1600b
--- /dev/null
+++ b/update/migrations/0027_updatecommand_combo_cmd_alter_updatecommand_run.py
@@ -0,0 +1,23 @@
+# Generated by Django 4.2.7 on 2024-03-20 03:19
+
+from django.db import migrations, models
+
+
+class Migration(migrations.Migration):
+
+ dependencies = [
+ ('update', '0026_updatelog'),
+ ]
+
+ operations = [
+ migrations.AddField(
+ model_name='updatecommand',
+ name='combo_cmd',
+ field=models.IntegerField(default=0, help_text='需要关联执行的命令', verbose_name='需要关联执行的命令'),
+ ),
+ migrations.AlterField(
+ model_name='updatecommand',
+ name='run',
+ field=models.BooleanField(default=False, help_text='在teardown前运行还是之后运行', verbose_name='在teardown前运行还是之后运行 true(0)为之前,false(1)为之后'),
+ ),
+ ]
diff --git a/update/models.py b/update/models.py
index 47b09df..9ece1e8 100644
--- a/update/models.py
+++ b/update/models.py
@@ -112,8 +112,9 @@ class UpdateCommand(BaseModels):
is_force = models.BooleanField(verbose_name='必选项', default=False, help_text='必选项')
is_delete = models.BooleanField(verbose_name='是否有效', default=True, help_text='是否有效')
comment = models.TextField(verbose_name='页面显示提示', default='', help_text='页面显示提示')
- run = models.BooleanField(verbose_name='在teardown前运行还是之后运行 true为之前,false为之后', default=False,
+ run = models.BooleanField(verbose_name='在teardown前运行还是之后运行 true(0)为之前,false(1)为之后', default=False,
help_text='在teardown前运行还是之后运行')
+ combo_cmd = models.IntegerField(verbose_name='需要关联执行的命令', default=0, help_text='需要关联执行的命令')
def __str__(self):
return self.desc
diff --git a/update/serializers.py b/update/serializers.py
index f28934c..5bcb8de 100644
--- a/update/serializers.py
+++ b/update/serializers.py
@@ -41,7 +41,7 @@ class UpdateCommandSerializer(serializers.ModelSerializer):
model = UpdateCommand
fields = (
'id', 'desc', 'command', 'ver_id', 'process', 'run_num', 'is_sys', 'is_checked', 'is_force', 'is_delete',
- 'comment', 'update_time')
+ 'comment', 'run', 'combo_cmd', 'update_time')
class UpdateAlterSerializer(serializers.ModelSerializer):
diff --git a/update/utils/cmd_extcute.py b/update/utils/cmd_extcute.py
index 8a63d3c..0535231 100644
--- a/update/utils/cmd_extcute.py
+++ b/update/utils/cmd_extcute.py
@@ -47,12 +47,12 @@ class UpdateCommandUtil:
return self.model.objects.filter(Q(is_delete=False) & Q(is_sys=False) & Q(process='client')).order_by(
'id').all()
- def get_checked_cmd(self, cmd_list):
+ def get_checked_cmd(self, cmd_list, is_delete='0'):
sys_result = self.get_sys_cmd()
checked_setup_result = self.model.objects.filter(
- Q(is_delete='0') & Q(id__in=cmd_list) & Q(process='setup')).order_by('run_num').all()
+ Q(is_delete=is_delete) & Q(id__in=cmd_list) & Q(process='setup')).order_by('run_num').all()
checked_teardown_result = self.model.objects.filter(
- Q(is_delete='0') & Q(id__in=cmd_list) & Q(process='teardown')).order_by('run_num').all()
+ Q(is_delete=is_delete) & Q(id__in=cmd_list) & Q(process='teardown')).order_by('run_num').all()
sys_cmd = [{'desc': sys.desc, 'cmd': sys.command} for sys in sys_result]
checked_setup_cmd = [{'desc': setup.desc, 'cmd': setup.command} for setup in checked_setup_result]
checked_teardown_cmd = [{'desc': teardown.desc, 'cmd': teardown.command} for teardown in
@@ -94,10 +94,10 @@ class UpdateCommandUtil:
print('输出结果:', exec_output)
return True, '
'.join(exec_output)
- def exec_cmd_by_type(self, cinema_ip, _type, cmd_list, short_release):
+ def exec_cmd_by_type(self, cinema_ip, _type, cmd_list, short_release, is_delete='0'):
print('需要执行的命令列表:', cmd_list)
exec_cmd_list = []
- exec_cmd_data = self.get_checked_cmd(cmd_list)
+ exec_cmd_data = self.get_checked_cmd(cmd_list, is_delete)
if _type == 'setup':
cmds = exec_cmd_data['sys'] + exec_cmd_data['setup']
elif _type == 'teardown':
@@ -124,7 +124,7 @@ class UpdateConfigUtil:
self.checked_list = checked_list
self.run_before_teardown = run_before_teardown
- def exec_config(self):
+ def exec_config(self, short_release):
cmd_list = self.get_all_exec_cmd()
db_config = Cinema.objects.filter(ip=self.ip).values()[0]
db_conn = pymysql.Connect(host=self.ip, port=3306, user=db_config['db_user'], passwd=db_config['db_pwd'],
@@ -138,6 +138,13 @@ class UpdateConfigUtil:
print("执行子命令: ", cmds['desc'], cmd, '结果:', '执行失败(设置无需修改)' if r == 0 else '执行成功')
result_list.append(cmds['desc'] + (':执行失败(设置无需修改)' if r == 0 else ':执行成功'))
db_conn.commit()
+
+ if cmds['combo_cmd'] != 0:
+ update_cmd = UpdateCommandUtil()
+ result, setup_output = update_cmd.exec_cmd_by_type(self.ip, 'setup', [cmds['combo_cmd']],
+ short_release, is_delete='1')
+ print('执行关联命令:', setup_output)
+
db_cursor.close()
db_conn.close()
return '
'.join(result_list)
@@ -146,9 +153,12 @@ class UpdateConfigUtil:
all_config_obj = UpdateCommand.objects.filter(
Q(process='config') & Q(run=self.run_before_teardown) & Q(is_delete=False)).values()
cmd_list = []
+ print(all_config_obj)
for config_item in all_config_obj:
if config_item['id'] in self.checked_list:
- cmd_list.append({"desc": config_item['desc'], "cmd": json.loads(config_item['command'])['checked']})
+ cmd_list.append({"desc": config_item['desc'], "cmd": json.loads(config_item['command'])['checked'],
+ "combo_cmd": config_item['combo_cmd']})
else:
- cmd_list.append({"desc": config_item['desc'], "cmd": json.loads(config_item['command'])['unchecked']})
+ cmd_list.append({"desc": config_item['desc'], "cmd": json.loads(config_item['command'])['unchecked'],
+ "combo_cmd": config_item['combo_cmd']})
return cmd_list
diff --git a/update/views.py b/update/views.py
index 2a7fba2..40d694c 100644
--- a/update/views.py
+++ b/update/views.py
@@ -250,7 +250,7 @@ def update_cine(request):
redis_conn.set(redis_key, json.dumps(update_status), 5 * 60)
config_list = list(set(cmd_list) & set(cmd_dict['config']))
update_config = UpdateConfigUtil(cinema_ip, config_list, True)
- config_before_output = update_config.exec_config()
+ config_before_output = update_config.exec_config(short_release)
update_status['config']['result'] = 'success'
update_status['config']['msg'] = config_before_output
redis_conn.set(redis_key, json.dumps(update_status), 5 * 60)
@@ -301,7 +301,7 @@ def update_cine(request):
redis_conn.set(redis_key, json.dumps(update_status), 5 * 60)
config_list = list(set(cmd_list) & set(cmd_dict['config']))
update_config = UpdateConfigUtil(cinema_ip, config_list, False)
- config_after_output = update_config.exec_config()
+ config_after_output = update_config.exec_config(short_release)
update_status['config']['result'] = 'success'
update_status['config']['msg'] = config_before_output + '
' + config_after_output
redis_conn.set(redis_key, json.dumps(update_status), 5 * 60)