#json #post #devops #webhooks #rundeck
Вопрос:
Я пытаюсь получить данные с помощью плагина rundeck webhook, и для этого я использую команду curl:
curl -X POST -d '{"name":"John", "age":30, "car":null}' https://rundeck_server/api/12/webhook/QSxTDYd08dcYxKh1R5YJNOPQvmSJH2Z8#Netbox_Job
В настройках плагина rundeck webhook я добавляю эти 2 переменные: ‘whkpayload’ для получения всех данных json и ‘name’ для получения только имени (в этом примере должен быть возвращен John):
-whkpayload ${raw} -name ${data.name}
И, наконец, я показываю их с помощью этих строк:
echo @option.whkpayload@
echo @option.name@
Я получаю пустой результат и не могу понять, почему. Кто-нибудь может мне помочь, пожалуйста?
Ответ №1:
После этого вам нужно использовать параметр, вызываемый whkpayload
в вашем задании, и установить его как ${raw}
в конфигурации webhook.
Я привел пример:
- Определение задания в формате YAML (с
whkpayload
опцией):
- defaultTab: nodes
description: ''
executionEnabled: true
id: 0fcfca07-02f6-4583-a3eb-0002276bdf2d
loglevel: INFO
name: HelloWorld
nodeFilterEditable: false
options:
- name: age
- name: car
- name: name
- name: whkpayload
plugins:
ExecutionLifecycle: null
scheduleEnabled: true
sequence:
commands:
- description: command step
exec: echo "name ${option.name} - age ${option.age} - car ${option.car} - payload
${option.whkpayload}"
- description: inline-script step
fileExtension: .sh
interpreterArgsQuoted: false
script: echo "name @option.name@ - age @option.age@ - car @option.car@ - payload
@option.whkpayload@"
scriptInterpreter: /bin/bash
keepgoing: false
strategy: node-first
uuid: 0fcfca07-02f6-4583-a3eb-0002276bdf2d
- Конфигурация webhook.
- Веб-хук, вызываемый из cURL:
curl -H "Content-Type: application/json" -X POST -d '{"field1":"John", "field2":30, "field3":"chevy"}' http://localhost:4440/api/40/webhook/0vBZjWWrnXWvqENEdxkn0JRvjn5R63J0#MyWebhook
Комментарии:
1. Спасибо @MegaDrive68k, это подходит для этого варианта использования. Однако мне интересно, работает ли этот метод для получения списка словаря со случайным количеством записей каждый раз. например, мы получим 3 записи:
[{"first_name": "Henry", "last_name": "Henry"}, {"first_name": "Lionel", "last_name": "Messi"}, {"first_name": "Cristianno", "last_name": "Ronaldo"}]
в следующий раз мы получим только один раз:[{"first_name": "Henry", "last_name": "Henry"}]
PS: я пытался получить всю запись с помощью переменной whkpayload, но это не сработало.2. Я так не думаю, лучший способ в этом случае — повторить вызов curl с предложением «for», всегда передавая три параметра, определенные в webhook.