![](/img/trans.png)
[英]WSO2 upgrade 6.0 analysis, Is username replaced with user-id as input parameter for rest API's
[英]Reference value from state’s input, using JSONPath syntax in a SSMSendCommand API step through parameter which expects an array
我在 AWS 狀態機上為 api aws-sdk:ssm:sendCommand 定義了以下步驟
{
"Type": "Task",
"Parameters": {
"DocumentName.$": "$.result.DocumentName",
"InstanceIds.$": "$..Dimensions[?(@.Name=~/.*InstanceId.*/)].Value",
"MaxErrors": "0",
"MaxConcurrency": "100%",
"CloudWatchOutputConfig": {
"CloudWatchLogGroupName": "diskspace-log",
"CloudWatchOutputEnabled": true
},
"Parameters": {
"workingDirectory": [
""
],
"executionTimeout": [
"3600"
],
"commands": [
"echo -------------------Mounting volume without signals $..Dimensions[?(@.Name=~/.*device.*/)].Value---------------------",
"echo",
"mount $..Dimensions[?(@.Name=~/.*device.*/)].Value"
]
}
}
}
section: "commands": [] 需要一個數組。
“命令”應該接受輸入引用作為模式中的任何其他參數,因此理論上可以使用 json 路徑參數(示例:“size.$”:“$.product.details.size”)來引用所需的參數輸入。
https://docs.aws.amazon.com/step-functions/latest/dg/input-output-inputpath-params.html
以下示例在不使用輸入引用的情況下工作:
"commands": [
"echo -------------------Mounting /dev/ebs---------------------",
"echo",
"mount /dev/ebs"
]
但我需要從輸入中引用,硬編碼值對我不起作用。 我試過了,但沒有用。
"commands": [
"echo -------------------Mounting volume without signals $..Dimensions[?(@.Name=~/.*device.*/)].Value---------------------",
"echo",
"mount $..Dimensions[?(@.Name=~/.*device.*/)].Value"
]
也試過,也不起作用:
"commands.$": "States.Array(States.Format('echo -------------------Mounting volume without signals {} ---------------------', $..Dimensions[?(@.Name=~/.*device.*/)].Value),'echo',States.Format('mount {}', $..Dimensions[?(@.Name=~/.*device.*/)].Value))"
我相信一些提供的內部函數將有助於實現預期的結果,但我不知道如何正確設置語法。
該步驟調用 RunShellScript 類型的 documentCommand。 並執行狀態機步驟中參數提供的命令。
我得到了輸出:
States.Format('echo -------------------Mounting volume without signals {} ---------------------', $..Dimensions[?(@.Name=~/.*device.*/)].Value)'
它沒有檢測到輸入參考,我希望輸出。
-------------------Mounting volume without signals /dev/ebs ---------------------
並在后台執行:
mount /dev/ebs
我能夠通過傳遞狀態流發送命令,這里是定義:
{
"Type": "Pass",
"Next": "SendCommand",
"ResultPath": "$.ForArgs",
"Parameters": {
"Params": {
"Args": [
{
"Arg1": "ec2-metadata -i"
},
{
"Arg2": "echo"
},
{
"Arg3.$": "States.Format('echo -------------------Mounting volume without signals {} ---------------------', States.ArrayGetItem($..Dimensions[?(@.Name=~/.*device.*/)].Value, 0))"
},
{
"Arg4": "echo"
},
{
"Arg5.$": "States.Format('mount {}', States.ArrayGetItem($..Dimensions[?(@.Name=~/.*device.*/)].Value, 0))"
},
{
"Arg6.$": "States.Format('echo Checking if device {} is mounted', States.ArrayGetItem($..Dimensions[?(@.Name=~/.*device.*/)].Value, 0))"
},
{
"Arg7.$": "States.Format('if findmnt --source \"{}\" >/dev/null', States.ArrayGetItem($..Dimensions[?(@.Name=~/.*device.*/)].Value, 0))"
},
{
"Arg8": "\tthen echo device is mounted"
},
{
"Arg9": "\telse echo device is not mounted"
},
{
"Arg10": "fi"
}
]
}
}
}
接下來是 sendCommandApi:
"commands.$": "$.ForArgs.Params.Args[*][*]"
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.