Esempio n. 1
0
    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)
Esempio n. 2
0
 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)