【问题标题】:How to pass options to Rundeck job webhook URL如何将选项传递给 Rundeck 作业 webhook URL
【发布时间】:2020-06-09 12:12:19
【问题描述】:

我在 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 插件和运行作业用法的文档声明“插件接收的 JSON 可用于提供选项、节点过滤器和运行身份用户”,但没有显示任何一个的明显例子。

如何成功地将这些选项传递给 webhook URL?

【问题讨论】:

  • -Body 需要一个对象,但您发送的是一个字符串。删除 | ConvertTo-Json 并仅使用 $body = @{} 来表示空主体。使用$body = @{VMName="xyz"; CPU="cpu"; Memory ="Memory"} 传递变量

标签: json powershell rest rundeck


【解决方案1】:

documentation之后,你需要以this的方式定义选项,然后调用传递一个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>

【讨论】:

    【解决方案2】:

    为 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。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-10-14
      • 2019-08-18
      • 1970-01-01
      • 2018-06-27
      相关资源
      最近更新 更多