예제 #1
0
    def run_model(self, group_ids, host_ids, selected_module_name, custom_model_name, module_args):
        gen_resource = GenResource()

        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]

        module_name = selected_module_name if selected_module_name != 'custom' else custom_model_name

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

        if self.redis_instance.get(unique_key):
            self.send('<code style="color: #FF0000">\n有相同的任务正在进行!请稍后重试!\n</code>', close=True)
        else:
            try:
                self.redis_instance.set(unique_key, 1)
                ans = ANSRunner(resource, become='yes', become_method='sudo', become_user='******', sock=self)
                ans.run_module(host_list=host_list, module_name=module_name, module_args=module_args)

                module_record.delay(ans_user=UserProfile.objects.get(id=self.ans_info['run_user']),
                                    ans_remote_ip=self.ans_info['remote_ip'],
                                    ans_module=module_name,
                                    ans_args=module_args,
                                    ans_server=host_list, ans_result=ans.get_module_results)
            except Exception as e:
                self.send('<code style="color: #FF0000">\nansible执行模块出错:{}\n</code>'.format(str(e)))
            finally:
                self.redis_instance.delete(unique_key)
                self.close()
예제 #2
0
파일: middleware.py 프로젝트: ziguicxd/Ops
 def process_response(request, response):
     if request.method == 'POST' and 'run_module' in request.path and response.status_code == 200:
         post_data = dict(request._post)
         ans_server = [
             ServerAssets.objects.get(id=host_id).assets.asset_management_ip
             for host_id in post_data['ans_group_hosts']
         ]
         response_data = str(response.__dict__.get('_container')[0],
                             encoding="utf-8")
         res = eval(response_data)['msg']
         module_record.delay(ans_user=request.user,
                             ans_remote_ip=request.META['REMOTE_ADDR'],
                             ans_module=''.join(post_data['ansibleModule'])
                             if post_data['ansibleModule'] != ['custom']
                             else ''.join(post_data['customModule']),
                             ans_args=''.join(
                                 post_data['ansibleModuleArgs']),
                             ans_server=ans_server,
                             ans_result=res)
     elif request.method == 'GET' and response.status_code == 200:
         user_infos = []
         users = UserProfile.objects.all()
         for user in users:
             user_info = {
                 'user_id': user.id,
                 'username': user.username,
                 'user_image': str(user.image),
                 'login_status': user.login_status
             }
             user_infos.append(user_info)
         request.session['user_infos'] = user_infos
     return response