You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Azure共享映像库:编写Bash条件语句创建不存在的映像定义

在Azure共享映像库中判断并创建不存在的映像定义(Bash实现)

核心思路

你已经通过az sig image-definition list获取了现有映像定义名称,但默认返回的是JSON数组格式,需要先转换成Bash易处理的纯文本列表,再通过精确匹配判断目标名称是否存在,不存在则执行创建命令。

步骤1:可靠获取现有映像定义名称

默认的JSON输出不好直接在Bash中匹配,推荐用Azure CLI的-o tsv参数输出纯文本(无需额外工具),或者用jq解析(适合复杂场景):

方式1:用Azure CLI自带的tsv输出

# 获取现有映像定义名称,每行一个
defs=$(az sig image-definition list --resource-group "$MyRG" --gallery-name "$mySIG" --query "[*].name" -o tsv)

# 检查命令执行是否成功
if [ $? -ne 0 ]; then
    echo "错误:无法获取现有映像定义列表"
    exit 1
fi

方式2:用jq解析JSON(需提前安装jq)

如果已安装jq,可以用它精确提取名称:

defs=$(az sig image-definition list --resource-group "$MyRG" --gallery-name "$mySIG" | jq -r '.[].name')

步骤2:获取用户输入的目标名称

read -p "请输入要创建的映像定义名称: " target_def_name

# 检查输入是否为空
if [ -z "$target_def_name" ]; then
    echo "错误:映像定义名称不能为空"
    exit 1
fi

步骤3:判断并创建映像定义

用grep做精确匹配(避免部分名称匹配的误判),如果目标名称不存在则执行创建命令:

# 精确匹配目标名称,-q表示静默输出,只返回状态码
if ! echo "$defs" | grep -q "^$target_def_name$"; then
    echo "映像定义 '$target_def_name' 不存在,开始创建..."
    # 替换为你的实际参数:publisher、offer、sku、os-type等
    az sig image-definition create \
        --resource-group "$MyRG" \
        --gallery-name "$mySIG" \
        --gallery-image-definition "$target_def_name" \
        --publisher "你的发布者名称" \
        --offer "你的产品系列名称" \
        --sku "你的SKU名称" \
        --os-type "Linux"  # 若为Windows镜像,改为Windows

    # 检查创建是否成功
    if [ $? -eq 0 ]; then
        echo "映像定义 '$target_def_name' 创建成功"
    else
        echo "错误:创建映像定义失败"
        exit 1
    fi
else
    echo "映像定义 '$target_def_name' 已存在,无需创建"
fi

完整脚本示例

把上述步骤整合起来,就是一个可直接使用的脚本:

#!/bin/bash

# 定义你的资源组和共享映像库名称
MyRG="你的资源组名称"
mySIG="你的共享映像库名称"

# 获取现有映像定义名称
defs=$(az sig image-definition list --resource-group "$MyRG" --gallery-name "$mySIG" --query "[*].name" -o tsv)
if [ $? -ne 0 ]; then
    echo "错误:无法获取现有映像定义列表"
    exit 1
fi

# 获取用户输入
read -p "请输入要创建的映像定义名称: " target_def_name
if [ -z "$target_def_name" ]; then
    echo "错误:映像定义名称不能为空"
    exit 1
fi

# 判断并创建
if ! echo "$defs" | grep -q "^$target_def_name$"; then
    echo "创建映像定义 '$target_def_name'..."
    az sig image-definition create \
        --resource-group "$MyRG" \
        --gallery-name "$mySIG" \
        --gallery-image-definition "$target_def_name" \
        --publisher "MyPublisher" \
        --offer "MyOffer" \
        --sku "MySKU" \
        --os-type "Linux"

    if [ $? -eq 0 ]; then
        echo "创建成功"
    else
        echo "创建失败"
        exit 1
    fi
else
    echo "映像定义已存在"
fi

注意事项

  • 替换脚本中的占位参数为你的实际资源信息
  • 确保Azure CLI已登录且有足够权限操作共享映像库

内容的提问来源于stack exchange,提问作者TheMilli

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.12 23:01:13