增加关联执行的功能

main
RogerWork 8 months ago
parent 6bb7f57c18
commit 54c694fc0f
  1. 23
      update/migrations/0027_updatecommand_combo_cmd_alter_updatecommand_run.py
  2. 3
      update/models.py
  3. 2
      update/serializers.py
  4. 26
      update/utils/cmd_extcute.py
  5. 4
      update/views.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)为之后'),
),
]

@ -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

@ -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):

@ -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, '<br/>'.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 '<br/>'.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

@ -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 + '<br/>' + config_after_output
redis_conn.set(redis_key, json.dumps(update_status), 5 * 60)

Loading…
Cancel
Save