将可选参数传递给rundeck脚本

时间:2016-12-20 02:32:34

标签: rundeck

我有一个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

我想避免进行此更改,因为我希望能够单独使用这些脚本。

3 个答案:

答案 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

如果为空(""),则将完全省略第一个选项。