簡體   English   中英

如何使用 Rundeck API 將文件傳遞給 Rundeck 作業?

[英]How to pass a file to a Rundeck job with the Rundeck API?

我有一個帶有文件選項的 Rundeck 作業。

如何使用帶有 curl 的 Rundeck HTTP API 將文件傳遞給這個 Rundeck 作業?

我知道如何將文本傳遞給 Rundeck 文本選項。

但我沒有找到如何將文件傳遞給 Rundeck 文件選項。

謝謝。

大衛。

使用RD CLI工具最簡單,只需執行以下操作:

rd run -j YourJobName -p YourProjectName -- -YourOptionName@ /path/to/yourfile.txt

使用 API 看起來更復雜(兩步)。 看一看

PD:在深度上,RD CLI 是一個 Rundeck API 抽象,內部也是如此。

我分析了 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})

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM