我有一个python脚本,我想使用rundeck运行,调用如下:
createInstance.py [-n <name>] <env> <version>
其中name是可选的,需要env和version。
e.g。如果我想用一个名字调用脚本我会打电话:
createInstance.py -n test staging 1.2.3.4
如果我想默认名称,我会打电话:
createInstance.py staging 1.2.3.4
我遇到的问题是我不知道如何在rundeck中指定脚本参数字符串。我有一个工作,有3个选项,一个用于env,版本和名称,如果我将参数字符串定义为:
-n ${option.name} ${option.env} ${option.version}
每当取消设置名称时,rundeck调用:
createInstance.py -n staging 1.2.3.4
相反,我希望它省略-n。有没有办法做到这一点?现在我唯一的选择是更改脚本以更宽容地处理-n,并始终确保它最终,例如:
createInstance.py staging 1.2.3.4 -n
createInstance.py staging 1.2.3.4 -n test
我想避免进行此更改,因为我希望能够单独使用这些脚本。
答案 0 :(得分:1)
尝试使用内联脚本步骤,而不是使用命令步骤。您的内联脚本可以计算参数的数量以及它们是否已设置。然后使用该逻辑,您可以选择如何设置creteInstance.py args。
答案 1 :(得分:0)
正如@ Alex-SF建议的那样,我还使用了内联脚本以及键值数据日志过滤器。脚本是:
#!/bin/bash
# Parse optional parameters
# https://stackoverflow.com/questions/41233996/passing-optional-parameters-to-rundeck-script
# Arguments to this script should be in the format "flag" "value", eg "-p" ${option.name}
# If value is not missing then return will be "flag value", otherwise blank
echo -n "RUNDECK:DATA:"
while (( "$#" )); do
flag="$1"
value="$2"
if [[ -z "$value" ]] || [[ $value =~ ^\- ]]; then
# no value for this parameter (empty or picking up the next flag)
echo -n ""
shift
else
# value provided for this parameter
echo -n "$flag $value "
shift
shift
fi
done
键值数据过滤器使用模式^RUNDECK:DATA:(.*)$
和名称数据args
。然后我使用${data.args*}
作为真实命令的输入。
这一切都相当混乱,我无法找到任何未解决的问题(请求)。
答案 2 :(得分:0)
使用内联脚本并使用bash
中的条件变量扩展功能。
createInstance.py ${RD_OPTION_NAME:+-n $RD_OPTION_NAME} $RD_OPTION_ENV $RD_OPTION_VERSION
如果为空(""
),则将完全省略第一个选项。