微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

Rundeck API使用python pycurl上传作业失败

如何解决Rundeck API使用python pycurl上传作业失败

我正在尝试在python中使用pycurl实现rundeck作业导入功能,但找不到该文件。卷曲版本也可以。

    def importRundeckJOB(jobConfigFilePath):
        responSEObject = BytesIO()
        rd = pycurl.Curl()

        rd.setopt(rd.URL,RUNDECK_API_END_POINT)
        rd.setopt(rd.HTTPHEADER,['X-Rundeck-Auth-Token: '+RUNDECK_TOKEN,"Accept: application/json"])
        rd.setopt(rd.HTTPPOST,[("dupeOption","update"),("fileformat","yaml"),("xmlBatch",jobConfigFilePath )])
        rd.setopt(rd.WRITEFUNCTION,responSEObject.write)
        rd.perform()
        responseCode = rd.getinfo(rd.HTTP_CODE)
        rd.close()

错误::

{'error': True,'apiversion': 17,'errorCode': 'api.error.jobs.import.missing-file','message': 'No file was uploaded'}

工作卷曲

curl --header X-Rundeck-Auth-Token:<TOKEN> -F xmlBatch=@"<FILE_PATH>"  -F dupeOption=update -F fileformat=yaml <RUNDECK_API_END_POINT>/import

{
  "succeeded": [
    {
      "index": 1,"id": "deploy-job","name": "deploy-job","group": "DEV","project": "SOF","permalink": "<RUNDECK_URL>/job/show/deploy-job"
    }
  ],"Failed": [],"skipped": []
}

解决方法

我找到了一个解决方案,我需要一个附加参数来处理文件。

http://pycurl.io/docs/latest/quickstart.html#file-upload-multipart-post

c.FORM_FILE

工作解决方案

    def importRundeckJOB(jobConfigFilePath):
        responseObject = BytesIO()
        rd = pycurl.Curl()

        rd.setopt(rd.URL,RUNDECK_API_END_POINT)
        rd.setopt(rd.HTTPHEADER,['X-Rundeck-Auth-Token: '+RUNDECK_TOKEN,"Accept: application/json"])
        rd.setopt(rd.HTTPPOST,[("dupeOption","update"),("fileformat","yaml"),("xmlBatch",(rd.FORM_FILE,jobConfigFile))])
        rd.setopt(rd.WRITEFUNCTION,responseObject.write)
        rd.perform()
        responseCode = rd.getinfo(rd.HTTP_CODE)
        rd.close()

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。