• Azure Bicep(三)变量控制


    一,引言

      当我们在使用 Azure Bicep 的时候会出现以下几个问题:

    1)文件中有很多地方会重用很多相同的值

    2)输入参数可以在统一的地方进行修改

    带着这些问题,我们开始今天的内容,学习如何在 Bicep 中使用变量。

    --------------------我是分割线--------------------

    1,Azure Bicep 开发利器

    2,Azure Bicep(二)语法简介

    3,Azure Bicep(三)变量控制

    二,正文

    1,语法

    在 Bicep 中声明变量并给其初值时非常简单的。如下图所示,为标准的参数赋值的语句

    param runtime string='.NET 6'

    Bicep 语句中的变量的定义类似于其他语言,但是也有它的奇特之处,我称它为 “Azure Bicep 语法糖”

    var myString = 'some string value'
    var myNull = null
    var location = resourceGroup().location

    以上的语句中,我们不难看出,

    第一个变量没有类型

    第二个变量没有类型,而且变量默认值为 null

    第三个变量的默认值为表达式

    2,使用参数,变量

    常见的情况时在变量声明中使用参数

    //targetScope='resourceGroup' Default Deplay Target
    param webAppName string = toLower('cnbateblogweb')
    param webSiteName string=toLower('${webAppName}-appservice')

    变量也是一样的,但是需要注意的时,我们不能在变量使用的时候引入循环,这个是不允许的

    var name = 'Allen'
    var str= 'Hello, ${name}!'

    3,资源属性

    除了使用参数和变量之外,还可以使用资源属性来创建变量 planid

    //targetScope='resourceGroup' Default Deplay Target
    param webAppName string = toLower('cnbateblogweb')
    param webSiteName string = toLower('${webAppName}-appservice')
    param runtime string = '.NET 6'
    param webAppPlanName string = toLower('${webAppName}-appserviceplan')
    param location string = resourceGroup().location // Location for all resources
    
    resource appServicePlan 'Microsoft.Web/serverfarms@2020-12-01' = {
      name: webAppPlanName
      location: location
      sku: {
        name: 'F1'
        capacity: 1
      }
    }
    
    var planid = '${appServicePlan.id}'
    
    resource webApplication 'Microsoft.Web/sites@2018-11-01' = {
      name: webSiteName
      location: location
      properties: {
        serverFarmId: planid
        siteConfig: {
          linuxFxVersion: runtime
        }
      }
    }

    4,模块

    如果模块在 outpus 部分中返回一些值,它们也可以用于变量声明。模块在输出中返回完整的存储帐户对象,然后我们在主模板中使用这些对象

    main.bicep

    module stg 'storageaccount/storage.bicep' = {
      name: 'storageDeployment'
      params: {
        storageAccountName: 'cnbateblogsa'
      }
    }
    
    var myTag = '${stg.outputs.storageAccount.kind}-${stg.outputs.storageAccount.sku.name}'

    storage.bicep

    param storageAccountName string
    
    resource stg 'Microsoft.Storage/storageAccounts@2021-02-01' = {
      name: storageAccountName
      location: resourceGroup().location
      kind: 'StorageV2'
      sku: {
        name: 'Standard_LRS'
      }
    }
    
    output storageAccount object = stg

    5,循环

    使用循环来初始化变量,并且可以使用循环定义多个资源模块

    // Creating a variable using a for-loop
    var secretsValues = [for i in range(0, 3): {
      name: 'secret${i}'
      value: 'supersecretvalue${i}'
    }]
    
    // Assuming that a key vault already exists
    resource kv 'Microsoft.KeyVault/vaults@2019-09-01' existing = {
      name: 'kv-contoso'
    }
    
    // Using variable to create multiple resources
    resource secrets 'Microsoft.KeyVault/vaults/secrets@2019-09-01' = [for secret in secretsValues: {
      name: secret.name
      parent: kv
      properties: {
        value: secret.value
      }
    }]

    三,结尾

      今天我们介绍了Azure Bicep的变量的相关用法。变量用于简化 Bicep 文件开发。 请定义包含复杂表达式的变量,而不必在整个 Bicep 文件中重复使用复杂的表达式。 然后,在整个 Bicep 文件中根据需要使用该变量。资源管理器会在启动部署操作之前解析变量。 在 Bicep 文件中所有使用该变量的位置,资源管理器都会将其替换为解析的值。本文所分享的内容也存在着很多我自己的一些理解,有理解不到位的,还包含,并且指出不足之处!!!!!

    作者:Allen 

    版权:转载请在文章明显位置注明作者及出处。如发现错误,欢迎批评指正。

    作者:Allen 版权:转载请在文章明显位置注明作者及出处。如发现错误,欢迎批评指正。
  • 相关阅读:
    Linux_LEMP
    Linux_LEMP
    Linux_指令杂烩
    Linux_指令杂烩
    Linux_SELinux使用
    AWS S3存储基于Hadoop之上的一致性保证
    Ozone数据写入过程分析
    Ozone Datanode的分布式元数据管理
    聊聊Ozone的Topology Awareness
    Ozone数据探查服务Recon的启用
  • 原文地址:https://www.cnblogs.com/AllenMaster/p/15401844.html
Copyright © 2020-2023  润新知