Как передать параметры в URL веб-крюка работы Rundeck - PullRequest
1 голос
/ 25 февраля 2020

Я определил webhook в Rundeck для запуска определенного задания. Для этого задания определены 3 параметра: $ {option.VMName}, $ {option.CPU} и $ {option.Memory}. Само задание определяется как локальный сценарий powershell и выполняется следующим образом: powershell $ {scriptfile} $ {option.VMName} $ {option.CPU} $ {option.Memory}. Это проверено и работает отлично.

Теперь я хотел бы вызвать POST URL-адрес webhook, чтобы задание запускалось удаленно (из веб-панели управления с помощью PowerShell) с этими параметрами. Я безуспешно пытался добавить параметры в конец моего URL:

http://mywebhookuri#myjobname?opt.VMName=$VMName&opt.CPU=$CPU&opt.Memory=$Memory
http://mywebhookuri#myjobname?VMName=$VMName&CPU=$CPU&Memory=$Memory

Для вызова webhook используется следующий код PowerShell:

$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, полученный плагином, может использоваться для предоставления параметров, фильтра узла и пользователя запуска от имени», но не показывает четкого примера того или другого.

Как мне успешно передать эти параметры URL-адресу webhook?

Ответы [ 2 ]

2 голосов
/ 26 февраля 2020

Чтобы добавить некоторые детали к принятому ответу MegaDrive68k (поскольку это, по сути, два вопроса):

Я добавил следующее в поле «Опции» в определении веб-крюка Rundeck:

-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 с параметрами.

1 голос
/ 25 февраля 2020

Следуя документации , вам необходимо определить параметр в этом пути, а затем вызвать передачу данных 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>
...