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
版权:转载请在文章明显位置注明作者及出处。如发现错误,欢迎批评指正。
Azure Bicep(三)变量控制的更多相关文章
- js函数只执行一次,函数重写,变量控制与闭包三种做法
一.情景需求 调用后台接口需要附带token信息,那么在每个请求的头部添加token的做法就不太优雅了:一个网站请求100次,那就得写添加100次token,假设某天接口有所变动,改起来就十分麻烦了. ...
- Azure Bicep(二)语法简介
一,引言 上一篇文章有介绍到 Azure Bicep 的部署问题,文中也只是演示部署范围为 Sub,并将演示的 Azure Resource Group 到 Azure.给定 Bicep 文件,可以部 ...
- Spring使用环境变量控制配置文件加载
项目中需要用到很多配置文件,不同环境的配置文件是不一样的,因此如果只用一个配置文件,势必会造成配置文件混乱,这里提供一种利用环境变量控制配置文件加载的方法,如下: 一.配置环境变量 如果是window ...
- Swift中文教程(三)--流程控制
原文:Swift中文教程(三)--流程控制 Swift用if和switch编写条件控制语句,用for-in,for,while和do-while编写循环.条件控制语句和循环语句中,小括号是可选的,但花 ...
- Spring使用环境变量控制配置文件加载(转)
项目中需要用到很多配置文件,不同环境的配置文件是不一样的,因此如果只用一个配置文件,势必会造成配置文件混乱,这里提供一种利用环境变量控制配置文件加载的方法,如下: 一.配置环境变量 如果是window ...
- 关于a和b不用第三变量交换值的问题
今天在如鹏网(不是发广告)上看到一道题,题目很难就不说了,但是老师给的提示的题目却让我感兴趣,就是标题的内容. 题目是把a与b做异或比较从而实现不通过第三变量来交换a和b的数值答案是这样的: a=a^ ...
- JAVA交换两个变量的值-(不使用第三变量)
以下方法的根本原理就是: 借助第三个变量 c = a; a = b; b = c; 运算符-不借助第三变量: a = a+b; b = a-b; a = a-b; 为运算符-不借助第三个变量: (此种 ...
- python 学习之 基础篇三 流程控制
前言: 一. python中有严格的格式缩进,因为其在语法中摒弃了“{}”来包含代码块,使用严格的缩进来体现代码层次所以在编写代码的时候项目组要严格的统一器缩进语法,一个tab按键设置为四个空格来缩进 ...
- C# 8.0和.NET Core 3.0高级编程 分享笔记三:控制流程和转换类型
控制流程和转换类型 本章的内容主要包括编写代码.对变量执行简单的操作.做出决策.重复执行语句块.将变量或表达式值从一种类型转换为另一种类型.处理异常以及在数值变量中检查溢出. 本章涵盖以下主题: 操作 ...
随机推荐
- 遇到Web页面禁用鼠标右键操作时,该如何解禁?
在使用Selenium做Web UI自动化测试过程中,经常需要鼠标右击Web页面检查DOM节点,用于获取Web元素的定位信息.一般情况下,绝大多数页面都是能够响应鼠标右击操作的.但出于某些目的,有些W ...
- 从源码角度分析 MyBatis 工作原理
一.MyBatis 完整示例 这里,我将以一个入门级的示例来演示 MyBatis 是如何工作的. 注:本文后面章节中的原理.源码部分也将基于这个示例来进行讲解.完整示例源码地址 1.1. 数据库准备 ...
- bean的作用域和生命周期
一.Bean作用域 二.生命周期 其中,这个类实现各种接口重写各种方法,会按bean的声明周期按序执行: 其中,自定义的初始化和自定义销毁的方法不是实现接口重写,而是成员方法,并且在装配bean即在x ...
- 文件流转换(一般用于axios设置接收文件流设置时responseType: 'blob')
文件流转换 一般用于axios设置接收文件流设置时responseType: 'blob'当接口报错时,前端因已设置responseType: 'blob'无法再接收json格式数据,会把json格式 ...
- java 基础语法学习01
Java基础语法 注释 初次使用idea时相关配置 new project ->Empty project->进入页面 再选择file->project structure-> ...
- 利用nginx 来实现内网yum源(反向代理)
简介 在项目部署时,尤其是在政府企业,对于外网简直是奢望,但是对于运维来说,没有外网的话只能自建yum源.我今天来说的是一种简单的自建yum源方法,前提是必须有一台内外网都有的机器,我们一般称为前置机 ...
- 基于Typora的Latex代码书写并移植到word中
如何使用Markdown编译器 编辑Latex公式 并嵌入word内 前言:对于科研党来讲,在论文中数学公式的展示是必不可少的一环,但是如果不使用公式的格式去敲,那么公式就会过于难看,会大大降低你 ...
- 【死磕NIO】— 阻塞、非阻塞、同步、异步,傻傻分不清楚
万事从最基本的开始. 要想完全掌握 NIO,并不是掌握上面文章([死磕NIO]- NIO基础详解)中的三大组件就可以了,我们还需要掌握一些基本概念,如什么是 IO,5 种IO模型的区别,什么是阻塞&a ...
- Linux系列(1) - 使用Hyper-V安装Linux系统
前言 使用工具:Hyper-V,补充:hyper-v是一项技术,而vmware是一款软件.具体区别自行百度 LINUX版本:CentOS-8.4.2105-x86_64-dvd1.iso Window ...
- js中date类型的格式转化为yyyy-MM-dd HH:mm:ss的String类型
在vue中或其他框架中可以在Date的原型链中添加Format的方法,如ruoyi可以写在main.js中更好,如果写在utils还需要去导入包. 正常的js直接放到utils.js就好 Date.p ...