Funciones definidas por el usuario en Bicep (versión preliminar)

Dentro de su archivo Bicep, puede crear sus propias funciones. Estas funciones están disponibles para su uso en los archivos de Bicep. Las funciones definidas por el usuario son independientes de las funciones estándar de Bicep que están disponibles automáticamente en sus archivos de Bicep. Cree sus propias funciones cuando tenga expresiones complicadas que se usen repetidamente en los archivos de Bicep.

Se requiere la versión 0.20.X o posterior de la CLI de Bicep para usar esta característica.

Habilitación de la característica en versión preliminar

Para habilitar esta versión preliminar, modifica el archivo bicepconfig.json del proyecto para incluir el siguiente JSON:

{
  "experimentalFeaturesEnabled": {
    "userDefinedFunctions": true
  }
}

Limitaciones

Al definir una función de usuario, hay algunas restricciones:

  • La función no puede acceder a las variables.
  • La función solo puede usar los parámetros que se definen en la función.
  • La función no puede usar la función reference ni ninguna de las funciones list.
  • Los parámetros de la función no pueden tener valores predeterminados.

Definición de la función

Use la instrucción func para definir funciones definidas por el usuario.

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

Ejemplos

En los ejemplos siguientes se muestra cómo definir y usar funciones definidas por el usuario:

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')

Las salidas de los ejemplos anteriores son:

Nombre Tipo Value
azureUrl String https://microsoft.com/azure
greetingArray Matriz ["Hi Evie!","Hi Casper!"]
greetingObject Object {"hello":"Hi John!"}
nameArray Matriz ["John"]
addNameArray Matriz ["Mary","Bob","John"]

Con la CLI de Bicep versión 0.23.X o posterior, tiene la flexibilidad de invocar otra función definida por el usuario dentro de una función definida por el usuario. En el ejemplo anterior, con la definición de función de sayHelloString, puede volver a definir la función sayHelloObject como:

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

Las funciones definidas por el usuario admiten el uso de tipos de datos definidos por el usuario. Por ejemplo:

@minValue(0)
type positiveInt = int

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

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

output elements positiveInt = typedArg(inArray)

El resultado del ejemplo anterior es:

Nombre Tipo Value
Elementos positiveInt 3

Pasos siguientes