[英]How to pass options to Rundeck job webhook URL
我在 Rundeck 中定义了一个 webhook 来运行特定的作业。 此作业定义了 3 个选项:${option.VMName}、${option.CPU} 和 ${option.Memory}。 作业本身被定义为本地 powershell 脚本并执行为:powershell ${scriptfile} ${option.VMName} ${option.CPU} ${option.Memory}。 这已经过测试并且工作正常。
我现在想调用 webhook POST URL,以便在定义这些选项的情况下远程触发作业(从 web 仪表板,使用 PowerShell)。 我尝试将选项添加到我的 URL 的末尾,但没有成功:
http://mywebhookuri#myjobname?opt.VMName=$VMName&opt.CPU=$CPU&opt.Memory=$Memory
http://mywebhookuri#myjobname?VMName=$VMName&CPU=$CPU&Memory=$Memory
以下 PowerShell 代码用于调用 webhook:
$WebHookURI = "http://mywebhookuri#myjobname"
$header = @{}
$header.add("Content-Type","text/plain")
$body = @{} | ConvertTo-Json
$result = Invoke-RestMethod -Method Post -Uri $WebHookURI -Body $body -Headers $header
webhook 插件和运行作业使用的文档 state “插件收到的 JSON 可用于提供选项、节点过滤器和运行身份用户”,但没有显示明确的示例任何一个。
如何将这些选项成功传递给 webhook URL?
为 MegaDrive68k 接受的答案添加一些细节(因为这本质上是两个问题):
我在 Rundeck webhook 定义的“选项”字段中添加了以下内容:
-VMName ${data.field1} -CPU ${data.field2} -Memory ${data.field3}
并且PowerShell代码修改如下:
$WebHookURI = 'http://mywebhookuri#myjobname'
$header = New-Object "System.Collections.Generic.Dictionary[[String],[String]]"
$header.add("Content-Type", "application/json")
$body = "{`n `"field1`" : `"$VMName`",`n `"field2`" : `"$CPU`",`n `"field3`" : `"$Memory`"`n}"
$result = Invoke-RestMethod -Method 'POST' -Uri $WebHookURI -Body $body -Headers $header
通过这些更改,我能够使用选项成功调用 Rundeck webhook。
按照文档,您需要以这种方式定义选项,然后调用传递 JSON 数据,我做了一个示例,但使用 cURL:
curl -H "Content-Type: application/json" -X POST -d '{"field1":"hello world"}' http://yourhost:4440/api/34/webhook/3moY0Ru1zxl5gM0tpVlecJ5BN1LPyhsx#New_Hook
这是针对此作业定义示例:
<joblist>
<job>
<context>
<options preserveOrder='true'>
<option name='opt1' />
</options>
</context>
<defaultTab>nodes</defaultTab>
<description></description>
<executionEnabled>true</executionEnabled>
<id>e97efb53-99a6-4e5a-80b7-a1b055866f43</id>
<loglevel>INFO</loglevel>
<name>HelloWorld</name>
<nodeFilterEditable>false</nodeFilterEditable>
<scheduleEnabled>true</scheduleEnabled>
<sequence keepgoing='false' strategy='node-first'>
<command>
<exec>echo ${option.opt1}</exec>
</command>
</sequence>
<uuid>e97efb53-99a6-4e5a-80b7-a1b055866f43</uuid>
</job>
</joblist>
PowerShell 的更简洁版本:
$WebHookURI = 'http://mywebhookuri#myjobname'
$header = @{}
$header.add("Content-Type", "application/json")
$body = @{
field1 = "$VMName";
field2 = "$CPU";
field3 = "$Memory"
} | ConvertTo-Json
$result = Invoke-RestMethod -Method 'POST' -Uri $WebHookURI -Body $body -Headers $header
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.