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)
def delete(self, request): hostnames = request.data.get('hostname', None) for hostname in hostnames: minion_id = self.check_object(hostname) salt_api = SaltAPI() salt_api.delete_key(minion_id) return Response({"status": 1})
def minion_status(): sapi = SaltAPI() minions_status = sapi.runner("manage.status") for minion_id in minions_status['up']: hostname = MinionsStatus() try: res = MinionsStatus.objects.filter(minion_id=minion_id) if not res: hostname.minion_id = minion_id hostname.minion_status = "up" hostname.save() except Exception as e: logger.error(e.args) for minion_id in minions_status['down']: hostname = MinionsStatus() try: res = MinionsStatus.objects.filter(minion_id=minion_id) if not res: hostname.minion_id = minion_id hostname.minion_status = "down" hostname.save() except Exception as e: logger.error(e.args) pass
def get(self, request): job_active_list = [] salt_api = SaltAPI() result = salt_api.runner("jobs.active") if request: for jid, info in result.items(): # 不能直接把info放到append中 info.update({"Jid": jid}) job_active_list.append(info) return Response({ "data": job_active_list, "status": 1, "message": "" }, 200)
def post(self, request): minion_ids = request.data.get('minion_ids', None) salt_api = SaltAPI() result = salt_api.sync_grains(minion_ids) return Response(result)
def get(self, request): salt_api = SaltAPI() result = salt_api.runner("jobs.active") return Response(result)
def get(self, request, *args, **kwargs): jid = request.query_params.get('jid', None) salt_api = SaltAPI() result = salt_api.jobs_info(jid) return Response(result)
def get(self, request): salt_api = SaltAPI() jids = salt_api.runner("jobs.list_jobs") return Response(jids)
def get(self, request, *args, **kwargs): hostname = request.query_params.get('hostname', None) salt_api = SaltAPI() result = salt_api.list_all_key() minion_key = [] if hostname: for minions_rejected in result.get("minions_rejected"): if self.filter_hostname(hostname, minions_rejected): minion_key.append({ "minions_status": "Accepted", "minions_id": minions_rejected }) for minions_denied in result.get("minions_denied"): if self.filter_hostname(hostname, minions_denied): minion_key.append({ "minions_status": "Accepted", "minions_id": minions_denied }) for minions in result.get("minions"): if self.filter_hostname(hostname, minions): minion_key.append({ "minions_status": "Accepted", "minions_id": minions }) for minions_pre in result.get("minions_pre"): if self.filter_hostname(hostname, minions_pre): minion_key.append({ "minions_status": "Accepted", "minions_id": minions_pre }) return Response({ "data": minion_key, "status": True, "message": "" }, 200) if isinstance(result, dict): if result.get("status") is False: return result, 500 for minions_rejected in result.get("minions_rejected"): minion_key.append({ "minions_status": "Rejected", "minions_id": minions_rejected }) for minions_denied in result.get("minions_denied"): minion_key.append({ "minions_status": "Denied", "minions_id": minions_denied }) for minions in result.get("minions"): minion_key.append({ "minions_status": "Accepted", "minions_id": minions }) for minions_pre in result.get("minions_pre"): minion_key.append({ "minions_status": "Unaccepted", "minions_id": minions_pre }) else: logger.error("Get minion key error: %s" % result) return Response({ "data": minion_key, "status": True, "message": "" }, 200)