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

Rundeck - 作业导入不适用于 yaml

如何解决Rundeck - 作业导入不适用于 yaml

我正在使用 API 进行这个 Rundeck 作业导入,从我的本地邮递员那里,我可以使用正文中给定的 yaml 进行作业导入。

但是当我尝试从本地对 curl 执行相同操作时,它失败了:

[root@vms ]# curl -k --location --request POST 'rundeck-host:4443/api/14/project/project-name/jobs/import' --header 'Content-Type: application/yaml' --header 'X-Rundeck-Auth-Token: my-token' --data @job.yaml
<result error='true' apiversion='33'>
  <error code='api.error.jobs.import.invalid'>
    <message>Jobs Document was invalid for format xml: mapping values are not allowed here
 in 'reader',line 1,column 33:
    - defaultTab: nodes  description: ''  executionEnabled: true  gr ...
                                    ^
</message>
  </error>
</result>

即使在 fileformate=yaml 等所有选项上付出了很多代价,它也不起作用。

请告诉我我做错了什么。

解决方法

它适用于以下调用(在 Rundeck 3.3.10 上测试):

#!/bin/sh

# protocol
protocol="http"

# basic rundeck info
rdeck_host="localhost"
rdeck_port="4440"
rdeck_api="38"
rdeck_token="2aoZkhOR0ZSwMIZo4Sg6hrY57NfiN4nB"

# specific api call info
rdeck_project="ProjectEXAMPLE"
rdeck_yaml_file="job.yaml"

# api call
curl -kSsv --header "X-Rundeck-Auth-Token:$rdeck_token" \
 -F xmlBatch=@"$rdeck_yaml_file" \
 "$protocol://$rdeck_host:$rdeck_port/api/$rdeck_api/project/$rdeck_project/jobs/import?fileformat=yaml"

以及以下作业定义示例(job.yaml 文件):

- defaultTab: nodes
  description: ''
  executionEnabled: true
  id: 24d326d4-5fa9-4f42-98d6-b27b338fa7ff
  loglevel: INFO
  name: HelloWorld
  nodeFilterEditable: false
  plugins:
    ExecutionLifecycle: null
  scheduleEnabled: true
  sequence:
    commands:
    - exec: echo "hi"
    keepgoing: false
    strategy: node-first
  uuid: 24d326d4-5fa9-4f42-98d6-b27b338fa7ff
,

我能够管理此 curl 工作,我没有将 yaml 作为文件传递,而是将 yaml 作为 curl 的数据传递,并且它起作用了。

像 Rundeck 提到的那样理想,它确实支持 yaml 作为文件格式,因此它应该接受 yaml 文件基础调用。

命令和输出:(再次输出,即使传递了额外的参数,我也无法格式化为 json)

curl -k --location --request POST 'rundeck-node:4443/api/14/project/project-name/jobs/import' --header 'Content-Type: application/yaml' --header 'X-Rundeck-Auth-Token: your-token' --data "$(cat job-to-import.yaml)"
<result success='true' apiversion='33'>
  <succeeded count='1'>
    <job index='1' href='rundeck-node:4443/api/33/job/410b1862-504a-4a52-beb0-8ba4ecc5f174'>
      <id>410b1862-504a-4a52-beb0-8ba4ecc5f174</id>
      <name>your-job-name</name>
      <group>job-group-name-if-any</group>
      <project>project-name</project>
      <permalink>rundeck-node:4443/project/project-name/job/show/410b1862-504a-4a52-beb0-8ba4ecc5f174</permalink>
    </job>
  </succeeded>
  <failed count='0' />
  <skipped count='0' />
</result>

如果您找到执行此操作的正确方法,请发表评论或写另一个答案。

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