2016-12-20 4 views
1

У меня есть питон скрипт, который я хотел бы работать с использованием Rundeck, который вызывается следующим образом:Попутных необязательные параметры Rundeck сценария

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

Где имя является необязательным и окр и версия требуются.

например. если я хочу, чтобы вызвать скрипт с именем я бы назвал:

createInstance.py -n test staging 1.2.3.4 

Если я хочу по умолчанию имя, я бы назвал:

createInstance.py staging 1.2.3.4 

У меня есть проблема в том, что я не знаю, как для указания строки аргументов сценария в rundeck. У меня есть работа, с 3-х вариантов, по одному для окр, версии и имя, и если я задаем строку аргументы как:

-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.

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*} в качестве ввода для реальной команды.

Все это довольно грязно, и я не могу найти какую-либо открытую проблему, запрашивая это как функцию (пока).

Смежные вопросы