我有一个带有文件选项的Rundeck作业。
如何使用带有curl的Rundeck HTTP API将文件传递到此Rundeck作业?
我知道如何将文本传递给Rundeck文本选项。
但是我找不到如何将文件传递给Rundeck文件选项。
谢谢。
大卫。
答案 0 :(得分:0)
使用RD CLI工具最简单,只需执行以下操作:
rd run -j YourJobName -p YourProjectName -- -YourOptionName@ /path/to/yourfile.txt
使用API看起来更加复杂(两步)。拿一个look。
PD:从深度上讲,RD CLI是Rundeck API的抽象,在内部也是如此。
答案 1 :(得分:0)
我分析了rundeck-cli的工作方式,并编写了以下代码段:
RD_URL = "https://xxxx"
RD_USER = 'XXX'
RD_PASSWORD = 'xxxx'
RD_JOBID = 'xxxx'
import json
import requests
import sys
import os.path
class Rundeck():
def __init__(self, username, password):
self.cookies = None
self._login(username, password)
def _login(self, username, password):
r = requests.post('%s/j_security_check' % RD_URL,
data={'j_username': username,
'j_password': password
},
allow_redirects=False
)
self.cookies = r.cookies
def run(self, jobid, options=None):
r = requests.post('%s/api/18/job/%s/run' % (RD_URL, jobid),
cookies=self.cookies,
headers={'Accept': 'application/json',
'Content-Type': 'application/json'
},
data=json.dumps({'options': options})
)
if r.status_code != 200:
raise Exception(r.text)
def upload(self, jobid, option, f):
fd = open(f, 'rb')
f_name = os.path.basename(f)
r = requests.post('%s/api/29/job/%s/input/file?optionName=%s&filename=%s' % (RD_URL,
jobid,
option,
f_name),
cookies=self.cookies,
headers={'Accept': 'application/json',
'Content-Type': 'application/octet-stream'
},
data=fd
)
if r.status_code != 200:
raise Exception(r.text)
json_result = json.loads(r.text)
return json_result['options'][option]
if __name__ == '__main__':
rd = Rundeck(RD_USER, RD_PASSWORD)
u = rd.upload(RD_JOBID, 'fichier', 'zz.txt')
rd.run(RD_JOBID, options = {'fichier': u})