Определяемые пользователем функции в Bicep

В файле Bicep можно создать собственные функции. Эти функции доступны для использования в файлах Bicep. Определяемые пользователем функции отличаются от стандартных функций Bicep, которые автоматически доступны в файлах Bicep. Создайте собственные функции при наличии сложных выражений, которые многократно используются в файлах Bicep.

Для использования этой функции требуется интерфейс командной строки Bicep версии 0.26.X или более поздней .

Ограничения

При определении пользовательской функции есть несколько ограничений:

  • Функция не может обращаться к переменным.
  • Функция может использовать только параметры, определенные в самой функции.
  • Функция не может использовать эталонную функцию или любую функцию из списка функций.
  • Для параметров этой функции нельзя задавать значения по умолчанию.

Определение функции

Используйте инструкцию func для определения определяемых пользователем функций.

func <user-defined-function-name> (<argument-name> <data-type>, <argument-name> <data-type>, ...) <function-data-type> => <expression>

Примеры

В следующих примерах показано, как определить и использовать определяемые пользователем функции:

func buildUrl(https bool, hostname string, path string) string => '${https ? 'https' : 'http'}://${hostname}${empty(path) ? '' : '/${path}'}'

func sayHelloString(name string) string => 'Hi ${name}!'

func sayHelloObject(name string) object => {
  hello: 'Hi ${name}!'
}

func nameArray(name string) array => [
  name
]

func addNameArray(name string) array => [
  'Mary'
  'Bob'
  name
]

output azureUrl string = buildUrl(true, 'microsoft.com', 'azure')
output greetingArray array = map(['Evie', 'Casper'], name => sayHelloString(name))
output greetingObject object = sayHelloObject('John')
output nameArray array = nameArray('John')
output addNameArray array = addNameArray('John')

Выходные данные из предыдущих примеров:

Имя. Тип значение
azureUrl Строка https://microsoft.com/azure
приветствиеArray Массив ["Hi Evie!", "Hi Casper!"]
greetingObject Object {"hello":"Привет Джон!"}
nameArray Массив ["Джон"]
addNameArray Массив ["Мэри", "Боб","Джон"]

При использовании интерфейса командной строки Bicep версии 0.23.X или более поздней вы можете вызвать другую определяемую пользователем функцию в определяемой пользователем функции. В предыдущем примере с определением sayHelloStringфункции можно переопределить функцию sayHelloObject следующим образом:

func sayHelloObject(name string) object => {
  hello: sayHelloString(name)
}

Определяемые пользователем функции поддерживают использование определяемых пользователем типов данных. Например:

@minValue(0)
type positiveInt = int

func typedArg(input string[]) positiveInt => length(input)

param inArray array = [
  'Bicep'
  'ARM'
  'Terraform'
]

output elements positiveInt = typedArg(inArray)

Выходные данные из предыдущего примера:

Имя. Тип значение
элементы positiveInt 3

Следующие шаги