Я пытаюсь написать bash-функцию, которая выполняет следующие действия:
- Если третьего аргумента нет, выполните команду.
- Если есть третий аргумент,взять каждый аргумент из третьего и запустить команду.
Проблема, с которой я столкнулся, - это последний бит команды --capabilities CAPABILITY_IAM
в операторе else
, который я не хочу передаватьвсе время, если у меня несколько параметров.
An error occurred (InsufficientCapabilitiesException) when calling the CreateStack operation: Requires capabilities : [CAPABILITY_NAMED_IAM]
// that means I need to pass in --capabilities CAPABILITY_IAM
Есть ли способ сказать bash, что: эй, возьмите все аргументы из третьего, а затем добавьте --capabilities CAPABILITY_IAM
после?Как и в JavaScript, я могу сделать это:
function allTogetherNow(a, b, ...c) {
console.log(`${a}, ${b}, ${c}. Can I have a little more?`);
}
allTogetherNow('one', 'two', 'three', 'four')
Вот моя функция:
cloudformation_create() {
if [ -z "$3" ]; then
aws cloudformation create-stack --stack-name "$1" --template-body file://"$2" --capabilities CAPABILITY_IAM
else
aws cloudformation create-stack --stack-name "$1" --template-body file://"$2" --parameters "${@:3}" --capabilities CAPABILITY_IAM
fi
}
А третий и т. Д. Параметры выглядят так, если я не использую функцию bash:
aws cloudformation create-stack --stack-name MY_STACK_NAME --template-body file://MY_FILE_NAME --parameters ParameterKey=KeyPairName,ParameterValue=TestKey ParameterKey=SubnetIDs,ParameterValue=SubnetID1 --capabilities CAPABILITY_IAM
Обновление от 22 мая 2019 года:
После ответа Денниса Уильямсона ниже.Я пробовал:
- Передача параметров в режиме AWS:
cloudformation_create STACK_NAME FILE_NAME ParameterKey=KeyPairName,ParameterValue=TestKey ParameterKey=SubnetIDs,ParameterValue=SubnetID1
Ошибка:
An error occurred (ValidationError) when calling the CreateStack operation: Parameters: [...] must have values
cloudformation_create STACK_NAME FILE_NAME "ParameterKey=KeyPairName,ParameterValue=TestKey ParameterKey=SubnetIDs,ParameterValue=SubnetID1"
Ошибка:
An error occurred (ValidationError) when calling the CreateStack operation: ParameterValue for ... is required
- Передача без
ParameterKey
и ParameterValue
:
cloudformation_create STACK_NAME FILE_NAME KeyPairName=TestKey SubnetIDs=SubnetID1
Ошибка:
Parameter validation failed:
Unknown parameter in Parameters[0]: "PARAM_NAME", must be one of: ParameterKey, ParameterValue, UsePreviousValue, ResolvedValue
// list of all the params with the above error
- Передать без
ParameterKey
и ParameterValue
и в виде строки.Получил ошибку:
arameter validation failed:
Unknown parameter in Parameters[0]: "PARAM_NAME", must be one of: ParameterKey, ParameterValue, UsePreviousValue, ResolvedValue
Я попробовал ответ Алекса Харви и получил это:
An error occurred (ValidationError) when calling the CreateStack operation: Template format error: unsupported structure.