Esempio n. 1
0
def role_run(request, pk):
    role = AnsibleRole.objects.select_related('role_user').get(id=pk)
    main_file = os.path.join(settings.ANSIBLE_ROLE_PATH, role.playbook_name,
                             'site.yml')

    if request.method == 'GET':
        content = ''
        with open(main_file, 'r') as f:
            for line in f.readlines():
                content = content + line
        return JsonResponse({
            'code': 200,
            'content': content,
            'playbook_name': role.playbook_name
        })
    elif request.method == 'POST':
        redis_conn = RedisOps(settings.REDIS_HOST, settings.REDIS_PORT,
                              settings.REDIS_DB)
        unique_key = role.playbook_name

        if redis_conn.exists(unique_key):
            return JsonResponse({'msg': ['有相同的任务正在执行,请稍后再试'], 'code': 403})
        else:
            group_ids = request.POST.getlist('group_ids')
            try:
                res = get_playbook_res(group_ids, main_file)
                return JsonResponse({'code': 200, 'msg': res})
            except Exception as e:
                return JsonResponse({
                    'code': 500,
                    'msg': ['playbook执行失败:{}'.format(e)]
                })
            finally:
                redis_conn.delete(unique_key)
Esempio n. 2
0
def playbook_run(request, pk):
    playbook = AnsiblePlaybook.objects.select_related('playbook_user').get(
        id=pk)

    if request.method == 'GET':
        content = playbook.playbook_content
        return JsonResponse({'code': 200, 'content': content})
    elif request.method == 'POST':
        redis_conn = RedisOps(settings.REDIS_HOST, settings.REDIS_PORT,
                              settings.REDIS_DB)
        unique_key = playbook.playbook_name

        if redis_conn.exists(unique_key):
            return JsonResponse({'msg': ['有相同的任务正在执行,请稍后再试'], 'code': 403})
        else:
            group_ids = request.POST.getlist('group_ids')
            try:
                res = get_playbook_res(group_ids, playbook.playbook_file.path)
                return JsonResponse({'code': 200, 'msg': res})
            except Exception as e:
                return JsonResponse({
                    'code': 500,
                    'msg': ['playbook执行失败:{}'.format(e)]
                })
            finally:
                redis_conn.delete(unique_key)
Esempio n. 3
0
 def __init__(self, message):
     super(GuacamoleThread, self).__init__()
     self._stop_event = threading.Event()
     self.message = message
     self.redis_instance = RedisOps(settings.REDIS_HOST, settings.REDIS_PORT, 9)
     self.read_lock = threading.RLock()
     self.write_lock = threading.RLock()
Esempio n. 4
0
 def __init__(self, *args, **kwargs):
     super(PlayBookResultsCollector, self).__init__(*args, **kwargs)
     self.task_skipped = []
     self.task_failed = []
     self.task_status = {}
     self.task_unreachable = []
     self.task_ok = []
     self.redis_instance = RedisOps(settings.REDIS_HOST, settings.REDIS_PORT, 8)
     self.channel_key = self.unique_key
Esempio n. 5
0
 def __init__(self, message):
     super(GuacamoleThread, self).__init__()
     self._stop_event = threading.Event()
     self.start_time = time.time()
     self.current_time = time.strftime(settings.TIME_FORMAT)
     self.message = message
     self.redis_instance = RedisOps(settings.REDIS_HOST, settings.REDIS_PORT, 9)
     self.read_lock = threading.RLock()
     self.write_lock = threading.RLock()
     self.txt = []
Esempio n. 6
0
 def __init__(self, *args, **kwargs):
     super(DeployConsumer, self).__init__(*args, **kwargs)
     self.redis_instance = RedisOps(settings.REDIS_HOST,
                                    settings.REDIS_PORT, 5)
     self.deploy_results = []
     self.config = None
     self.d_type = None
     self.release_name = None
     self.release_desc = None
     self.host_list = None
     self.branch_tag = None
Esempio n. 7
0
def run_module(request):
    if request.method == 'POST':
        gen_resource = GenResource()
        redis_conn = RedisOps(settings.REDIS_HOST, settings.REDIS_PORT,
                              settings.REDIS_DB)
        remote_ip = request.META['REMOTE_ADDR']
        group_ids = request.POST.getlist('hostGroup')
        host_ids = request.POST.getlist('ans_group_hosts')
        if group_ids == ['custom'] or group_ids == ['all']:
            resource = gen_resource.gen_host_list(host_ids)
        else:
            resource = gen_resource.gen_group_dict(group_ids)

        host_list = [
            ServerAssets.objects.get(id=host_id).assets.asset_management_ip
            for host_id in host_ids
        ]
        selected_module_name = request.POST.get('ansibleModule')
        custom_model_name = request.POST.get('customModule')
        module_name = selected_module_name if selected_module_name != 'custom' else custom_model_name
        module_args = request.POST.get('ansibleModuleArgs')

        unique_key = '{}.{}.{}'.format(host_ids, module_name, module_args)

        if redis_conn.exists(unique_key):
            return JsonResponse({'msg': ['有相同的任务正在执行,请稍后再试'], 'code': 403})
        else:
            try:
                redis_conn.set(unique_key, 1)
                ans = ANSRunner(resource,
                                become='yes',
                                become_method='sudo',
                                become_user='******')
                ans.run_module(host_list=host_list,
                               module_name=module_name,
                               module_args=module_args)
                res = ans.get_model_result()

                return JsonResponse({'code': 200, 'msg': res})
            except Exception as e:
                return JsonResponse({
                    'code': 500,
                    'msg': ['任务执行失败:{}'.format(e)]
                })
            finally:
                redis_conn.delete(unique_key)
    inventory = AnsibleInventory.objects.prefetch_related('ans_group_hosts')
    hosts = ServerAssets.objects.select_related('assets')
    return render(request, 'task/run_module.html', locals())
Esempio n. 8
0
 def __init__(self, *args, **kwargs):
     super(AnsPlaybookConsumer, self).__init__(*args, **kwargs)
     self.redis_instance = RedisOps(settings.REDIS_HOST,
                                    settings.REDIS_PORT, 4)
     self.ans_info = None
Esempio n. 9
0
 def __init__(self, *args, **kwargs):
     super(ModelResultsCollector, self).__init__(*args, **kwargs)
     self.redis_instance = RedisOps(settings.REDIS_HOST, settings.REDIS_PORT, 7)
     self.channel_key = self.unique_key
     self.module_results = []
Esempio n. 10
0
def get_redis_instance():
    redis_instance = RedisOps(settings.REDIS_HOST, settings.REDIS_PORT, 7)
    return redis_instance