def salt_exec(self, minion_ids, salt_sls, salt_mdl, salt_arg, executor): salt_api = SaltAPI() if salt_mdl: salt_type = 0 if salt_mdl == "test.ping": result = salt_api.remote_noarg_execution(minion_ids, salt_mdl) logger.info('salt执行:%s,%s,%s' % (executor, minion_ids, salt_arg)) return self.check_minion_err(minion_ids, salt_mdl, salt_arg, result, executor, salt_type) else: # 权限验证 if not self.check_acl(salt_arg): return { "status": False, "message": "Deny Warning : You don't have permission run %s" % salt_arg } result = salt_api.shell_remote_execution(minion_ids, salt_arg) logger.info('salt执行:%s,%s,%s,%s' % (executor, minion_ids, salt_mdl, salt_arg)) return self.check_minion_err(minion_ids, salt_mdl, salt_arg, result, executor, salt_type) if salt_sls: salt_type = 1 state_sls = "init." + salt_sls result = salt_api.target_deploy(minion_ids, state_sls) logger.info('salt执行:%s,%s,%s' % (executor, minion_ids, state_sls)) return self.check_minion_err(minion_ids, state_sls, salt_arg, result, executor, salt_type)
def delete(self, request): action = request.query_params.get('action', None) jid = request.query_params.get('jid', None) minion_ids = request.query_params.get('minion_ids', None) print(json.loads(minion_ids)) if action and jid and minion_ids: for minion in json.loads(minion_ids): for minion_id, ppid in minion.items(): # 获取pgid 并杀掉 kill_ppid_pid = r'''ps -eo pid,pgid,ppid,comm |grep %s |grep salt-minion | awk '{print "kill -- -"$2}'|sh''' % ppid try: # 通过kill -- -pgid 删除salt 相关的父进程及子进程 salt_api = SaltAPI() pid_result = salt_api.shell_remote_execution( minion_id, kill_ppid_pid) logger.info("kill %s %s return: %s" % (minion, kill_ppid_pid, pid_result)) except Exception as e: logger.info("kill %s %s error: %s" % (minion, jid, e)) return Response({"status": 1, "message": ""}, 200) else: return Response( { "status": 0, "message": "The specified jid or action or minion_id " "parameter does not exist" }, 400)