首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使用Rundeck API将文件传递到Rundeck作业?

如何使用Rundeck API将文件传递到Rundeck作业?
EN

Stack Overflow用户
提问于 2020-02-21 02:58:28
回答 2查看 598关注 0票数 0

我有一个带有文件选项的Rundeck作业。

如何使用带有curl的Rundeck HTTP API将文件传递到此Rundeck作业?

我知道如何将文本传递给Rundeck文本选项。

但是我不知道如何将文件传递给Rundeck文件选项。

谢谢。

大卫。

EN

回答 2

Stack Overflow用户

发布于 2020-02-21 04:46:01

RD CLI工具是最简单的,只需做:

代码语言:javascript
复制
rd run -j YourJobName -p YourProjectName -- -YourOptionName@ /path/to/yourfile.txt

使用API看起来更复杂(两个步骤)。拿一个look

PD:从深度上讲,RD CLI是一个Rundeck API抽象,在内部也是如此。

票数 0
EN

Stack Overflow用户

发布于 2020-03-05 00:54:40

我分析了rundeck-cli的工作原理,并编写了以下代码片段:

代码语言:javascript
复制
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})
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/60326822

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档