2016-12-20 2 views
1

をrundeckするオプションのパラメータを渡す私は次のように呼び出されrundeck使用して実行したいPythonスクリプトがあります。スクリプト

createInstance.py [-n <name>] <env> <version> 

名はオプションであり、envおよびバージョンが必要とされています。

私は名前のスクリプトを呼び出したい場合、私は呼び出します。

createInstance.py -n test staging 1.2.3.4 

私は名前をデフォルトにしたい場合は、私が呼び出します。

createInstance.py staging 1.2.3.4 

を私は持っている問題は、私は方法を知ってはいけないということですrundeckにスクリプトの引数文字列を指定します。私は3つのオプション、ENVに1つ、バージョンおよび名前で、仕事を持っていると私のように、引数の文字列を定義する場合:

-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 

私もこの変更を避けるしたいと思い、私はスクリプトをスタンドアロンでも使用できるようにしたいと考えています。

答えて

1

コマンドステップを使用するのではなく、インラインスクリプトステップを試してください。インラインスクリプトは、引数の数をカウントし、引数が設定されているかどうかをカウントできます。そのロジックを使用して、creteInstance.py argsを設定する方法を選択できます。

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*}を使用します。

これはすべて面倒ですが、これを機能としてリクエストしている未解決の問題は見つかりません(まだ)。

関連する問題