暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

Azure CLI 如何检查资源是否存在

汪宇杰博客 2020-02-23
1074

点击上方蓝字关注“汪宇杰博客”

导语

Azure CLI 可以帮助我们使用脚本完成 Azure 的自动化配置和管理任务。理想情况下对于经常需要重复操作的任务,使用 CLI 脚本可以防止996修福报。然而 Azure CLI 目前仍有一些功能还不够方便,反而会让我们写脚本的时候修福报,比如检查资源是否存在……

目前的情况


对于某些资源类型,例如资源组(Resource Group),Azure CLI 直接提供了 exists 指令可以返回资源是否存在。例如我们的脚本在创建资源组之前可以先判断其是否存在:

$rsgExists = az group exists -n $rsgName

if ($rsgExists -eq 'false') {

    az group create -l $regionName -n $rsgName

}

然而Bing不是每种 Azure 资源都提供了 exists 指令。截至目前最新版 2.1 CLI,其中 App Service Plan 就木有 exits 指令:

参考:https://docs.microsoft.com/en-us/cli/azure/appservice/plan?view=azure-cli-latest

代码丑点,能跑就行


既然 Azure CLI 对于部分资源类型还没提供原生 exits 支持,我们只能自己 996 一下,利用现有的指令查找资源名称,并判断返回结果的数目是否大于零,以此判断资源是否存在。

以 Windows PowerShell 为例,执行 az appservice plan list 可以列出当前订阅下所有的 App Service Plan。而加上 --query 参数就可以按条件筛选 App Service Plan,比如按名称筛选就是 ?name='名称'

az appservice plan list --query "[?name=='moonglade-test-plan']"

对于不存在的 App Service Plan,返回为空

az appservice plan list --query "[?name=='work996']"

这里的第一份福报是 Azure CLI 的返回格式为 Json 字符串,要让它转化为对象才可以被 PowerShell 识别进行后续操作。幸好 PowerShell 自带了很方便的转换方法,解决了福报:在命令后加上 | ConvertFrom-Json

于是,我们可以通过检查返回的数组对象长度是否大于0来判断 App Service Plan 是否存在:

这里会遇到第二个福报。注意看,这里的 True 和 False 是真正的布尔类型,而 Azure CLI 自带的 exists 命令返回的是字符串的 'true' 或 'false'。因此在这里,我们可以直接用if语句来判断这个真正的布尔类型,而不是像之前那样用-eq判断字符串相等。我的实际代码如下:

$planCheck = az appservice plan list --query "[?name=='$aspName']" | ConvertFrom-Json

$planExists = $planCheck.Length -gt 0

if (!$planExists) {

    az appservice plan create -n $aspName -g $rsgName --sku S1 --location $regionName

}

参考: https://github.com/Azure/azure-cli/issues/6442#issuecomment-392963887

文章转载自汪宇杰博客,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论