def upload(request): if request.method == 'POST': # 上传到本地目录 try: path = request.POST.get('path') proxy = request.POST.get('proxy') proxy_host = request.POST.getlist('proxy_host') # 上传到本地 f = request.FILES['file'] df = handle_uploaded_file(f) files = {'file': (f.name, open(df, 'rb'))} params = {'action': 'upload'} # 通过proxy处理文件 proxy_obj = Proxy.objects.get(id=proxy) tnow = datetime.datetime.now() # 调用proxy接口,上传文件 api = API('{0}/v1.0/upload'.format(proxy_obj.url), proxy_obj.username, CRYPTOR.decrypt(proxy_obj.password)) result, code = api.req_post(data=params, files=files) if code != 200: file = File(path=path, proxy=proxy_obj, create_time=tnow, status='01', result="上传文件失败") file.save() raise ServerError(result['messege']) # 上传文件成功之后,调用proxy接口,进行文件上传任务 hosts = [] if not proxy_host: hosts = Asset.objects.all().filter(proxy=proxy_obj) if not hosts: # 没有可执行主机 file = File(path=path, proxy=proxy_obj, create_time=tnow, status='01', result="没有可执行主机") file.save() raise RuntimeError("没有可执行主机") else: for host_id in proxy_host: hosts.append(Asset.objects.get(id=host_id)) host_list = [] resource = [] params = {} trigger_kwargs = {} trigger_kwargs['year'] = tnow.year trigger_kwargs['month'] = tnow.month trigger_kwargs['day'] = tnow.day trigger_kwargs['hour'] = tnow.hour trigger_kwargs['minute'] = tnow.minute+1 trigger_kwargs['second'] = tnow.second params['trigger_kwargs'] = trigger_kwargs params['task_name'] = 'ansible' task_kwargs = {} task_kwargs['module_name'] = 'copy' task_kwargs['module_args'] = 'src={0} dest={1}'.format(result.get('fp'), path) # 构建inventory 和 构建主机list for host in hosts: host_list.append(host.networking.all()[0].ip_address) tmp_d = dict() tmp_d['hostname'] = host.networking.all()[0].ip_address tmp_d['port'] = host.port tmp_d['username'] = host.username tmp_d['password'] = CRYPTOR.decrypt(host.password) # 用于前端确定选择的asset tmp_d['id'] = host.id resource.append(tmp_d) task_kwargs['host_list'] = host_list task_kwargs['resource'] = resource params['task_kwargs'] = task_kwargs # 调用proxy接口,创建任务 api = APIRequest('{0}/v1.0/job'.format(proxy_obj.url), proxy_obj.username, CRYPTOR.decrypt(proxy_obj.password)) result, code = api.req_post(json.dumps(params)) if code != 200: file = File(path=path, proxy=proxy_obj, create_time=tnow, status='01', result="上传文件失败") file.save() else: file = File(path=path, proxy=proxy_obj, task_uuid=result['job']['job_id'], create_time=tnow) file.save() except Exception, e: logger.error(traceback.format_exc()) return HttpResponseRedirect(reverse('file_upload'))