Azure 自动化:使用 python runbook 解析 WEBHOOKDATA
Azure Automation: Parse WEBHOOKDATA with a python runbook
在 Azure 自动化中,当您为 Runbook 定义 Webhook 时,请求的 headers 通过 WEBHOOKDATA
输入参数传递给 Runbook。对于 python 个工作簿,参数作为第一个参数传递给脚本。
例如,这是一个操作手册:
import json
import sys
print(sys.argv)
if len(sys.argv) > 1 :
test = json.loads(sys.argv[1])
print(test)
这里是入参WEBHOOKDATA
{"WebhookName":"python-Test-Arguments","RequestBody":"","RequestHeader":{"Cache-Control":"no-cache","Connection":"keep-alive","Accept":"*/*","Accept-Encoding":"gzip","Host":"s2events.azure-automation.net","User-Agent":"PostmanRuntime/7.1.1","action":"myaction","Postman-Token":"312ce179-d2d1-4b5d-935c-d801fc0ba114","x-ms-request-id":"e6b3a5e3-17b3-4d2a-a00c-a1be928acca2"}}
输出(基本上print(sys.argv)
)
['C:\Temp\yjzgss3j.git\caf4e30b-0cb1-4c60-9e93-e2315b376634', '{WebhookName:python-Test-Arguments,RequestBody:",RequestHeader:{Cache-Control:no-cache,Connection:keep-alive,Accept:*/*,Accept-Encoding:gzip,Host:s2events.azure-automation.net,User-Agent:PostmanRuntime/7.1.1,action:myaction,Postman-Token:312ce179-d2d1-4b5d-935c-d801fc0ba114,x-ms-request-id:e6b3a5e3-17b3-4d2a-a00c-a1be928acca2}}']
json.loads
失败
Traceback (most recent call last): File "C:\Temp\yjzgss3j.git\caf4e30b-0cb1-4c60-9e93-e2315b376634",
line 7, in <module> test = json.loads(sys.argv[1].strip()) File "C:\Python27\lib\json\__init__.py",
line 339, in loads return _default_decoder.decode(s) File "C:\Python27\lib\json\decoder.py",
line 364, in decode obj, end = self.raw_decode(s, idx=_w(s, 0).end()) File "C:\Python27\lib\json\decoder.py",
line 380, in raw_decode obj, end = self.scan_once(s, idx)ValueError: Expecting property name: line 1 column 2 (char 1)
JSON 语法在我看来是正确的。可能与编码有关,或者 Azure 自动化如何将参数传递给 Runbook。
实际上我认为您的问题是格式错误的 JSON 字符串。请注意,您的字符串没有引号:
{WebhookName:python-Test-Arguments}
应该是这样的:
{"WebhookName":"python-Test-Arguments"}
要解决此问题,您需要修复响应字符串。
在 Azure 自动化中,当您为 Runbook 定义 Webhook 时,请求的 headers 通过 WEBHOOKDATA
输入参数传递给 Runbook。对于 python 个工作簿,参数作为第一个参数传递给脚本。
例如,这是一个操作手册:
import json
import sys
print(sys.argv)
if len(sys.argv) > 1 :
test = json.loads(sys.argv[1])
print(test)
这里是入参WEBHOOKDATA
{"WebhookName":"python-Test-Arguments","RequestBody":"","RequestHeader":{"Cache-Control":"no-cache","Connection":"keep-alive","Accept":"*/*","Accept-Encoding":"gzip","Host":"s2events.azure-automation.net","User-Agent":"PostmanRuntime/7.1.1","action":"myaction","Postman-Token":"312ce179-d2d1-4b5d-935c-d801fc0ba114","x-ms-request-id":"e6b3a5e3-17b3-4d2a-a00c-a1be928acca2"}}
输出(基本上print(sys.argv)
)
['C:\Temp\yjzgss3j.git\caf4e30b-0cb1-4c60-9e93-e2315b376634', '{WebhookName:python-Test-Arguments,RequestBody:",RequestHeader:{Cache-Control:no-cache,Connection:keep-alive,Accept:*/*,Accept-Encoding:gzip,Host:s2events.azure-automation.net,User-Agent:PostmanRuntime/7.1.1,action:myaction,Postman-Token:312ce179-d2d1-4b5d-935c-d801fc0ba114,x-ms-request-id:e6b3a5e3-17b3-4d2a-a00c-a1be928acca2}}']
json.loads
失败
Traceback (most recent call last): File "C:\Temp\yjzgss3j.git\caf4e30b-0cb1-4c60-9e93-e2315b376634",
line 7, in <module> test = json.loads(sys.argv[1].strip()) File "C:\Python27\lib\json\__init__.py",
line 339, in loads return _default_decoder.decode(s) File "C:\Python27\lib\json\decoder.py",
line 364, in decode obj, end = self.raw_decode(s, idx=_w(s, 0).end()) File "C:\Python27\lib\json\decoder.py",
line 380, in raw_decode obj, end = self.scan_once(s, idx)ValueError: Expecting property name: line 1 column 2 (char 1)
JSON 语法在我看来是正确的。可能与编码有关,或者 Azure 自动化如何将参数传递给 Runbook。
实际上我认为您的问题是格式错误的 JSON 字符串。请注意,您的字符串没有引号:
{WebhookName:python-Test-Arguments}
应该是这样的:
{"WebhookName":"python-Test-Arguments"}
要解决此问题,您需要修复响应字符串。