【发布时间】:2021-10-11 07:19:51
【问题描述】:
我正在尝试将服务与可用服务名称列表进行比较,如果在列表中找到服务,则更新服务,否则部署服务。 但即使在列表变量中提供服务时,以下条件也仅部署新服务?
SERVNAME=ner
SERVICE=$(az ml service list -g $(ml_rg) --workspace-name $(ml_ws) --model-name $(model_name) --query "[].name")
if [[ "$SERVNAME" == "$SERVICE" ]];
then
echo "Service Found: $(SERVNAME) and updating the service"
az ml service update --name $(AKS_DEPLOYMENT_NAME) \
--model '$(MODEL_NAME):$(MODEL_VERSION)' \
--dc aksDeploymentConfig.json \
--ic inferenceConfig.json \
-e $(ml_env_name) --ev $(ml_env_version) \
-g $(ml_rg) --workspace-name $(ml_ws) -v ;
else
echo "Service Not found and starting deploying new service"
az ml model deploy --name $(AKS_DEPLOYMENT_NAME) --model \
'$(MODEL_NAME):$(MODEL_VERSION)' \
--compute-target $(ml_aks_name) \
--ic inferenceConfig.json \
-e $(ml_env_name) --ev $(ml_env_version) \
--dc aksDeploymentConfig.json \
-g $(ml_rg) --workspace-name $(ml_ws) \
--overwrite -v ;
fi
示例列表
SERVNAME="ner"
SERVICE=[ "ner", "aks-gpu-ner-0306210907", "aks-gpu-ner-30012231", "aks-gpu-ner-1305211336"]
【问题讨论】:
-
这里有很多不正确的 bash 语法。看起来您正在使用
$( )来获取变量的值,但这是运行命令并获取其输出的语法;我想你想要${ }。说到这一点,像这样的变量引用应该几乎总是在双引号中(尤其不是单引号,因为它们可以防止变量扩展)。 shellcheck.net 会指出很多问题。此外,最后SERVICE的示例值不是有效的语法;该值是否实际上包含括号和引号? -
@GordonDavisson 是的带括号和引号的服务变量是运行“az ml service list”命令的结果。
标签: linux bash azure-devops azure-machine-learning-studio