Exemplo 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)
Exemplo 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)
Exemplo n.º 3
0
 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})
Exemplo n.º 4
0
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
Exemplo n.º 5
0
 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)
Exemplo n.º 6
0
 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)
Exemplo n.º 7
0
 def get(self, request):
     salt_api = SaltAPI()
     result = salt_api.runner("jobs.active")
     return Response(result)
Exemplo n.º 8
0
 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)
Exemplo n.º 9
0
 def get(self, request):
     salt_api = SaltAPI()
     jids = salt_api.runner("jobs.list_jobs")
     return Response(jids)
Exemplo n.º 10
0
    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)