该项目位于 IoT Azure 中,我的上下文由边缘父级和边缘子级组成,因此我为存储在 IoT 中心的每个边缘设备/模块都有一个设备/模块孪生 json,其中包含设备/模块的属性。
我正在寻找一种管道解决方案来更新存储在边缘设备孪生和模块孪生中的 Git 中心容器凭据,相对于:
注册表和运行时模块:
"$edgeAgent": {
"modules": {
"registry": {
"env": {
"REGISTRY_PROXY_REMOTEURL": {
"value": "https://ghcr.io"
},
"REGISTRY_PROXY_PASSWORD": {
"value": "xxxxx"
},
"REGISTRY_PROXY_USERNAME": {
"value": "xxxxx"
}
}
},
"runtime": {
"settings": {
"minDockerVersion": "v1.25",
"registryCredentials": {
"ghcr": {
"address": "ghcr.io",
"password": "xxxxx",
"username": "xxxxx"
}
}
},
"type": "docker"
}
}
}
我想通过管道使用 azure cli 仅针对父设备进行大规模 git 凭据更新。
我可能的方法是:
是否可以通过自托管运行器中的管道与IoT HUB之间的交互来做到这一点?
没有现成的方法可以让您通过 Azure CLI 查找父边缘设备。有一个名为 parentScopes 的属性,它将成为子设备孪生的一部分,其中包含对父设备的引用。以下是属性在子设备孪生 JSON 中保留的值的示例。
"parentScopes": [
"ms-azure-iot-edge://Parent1-638316034265745064"
]
您可以添加从
parentScopes
属性的值中提取父设备名称。 Parent1 是上述示例孪生中父设备的 deviceId。
获取父设备的更好替代方法是向所有可用于通过 Azure CLI 查询的父设备添加标签。请参阅下图,了解如何通过 Azure 门户添加此内容的详细信息。
您还可以使用以下命令通过 CLI 将标签添加到 IoT Edge 设备
az iot hub device-twin update -n <iothubname> -d <device id> --tags '{"isParent":true}'
。
创建标签后,您可以使用 Azure CLI 查询来筛选父设备,如下所示。
az iot hub query --hub-name <your-IoTHub-nam>--query-command "SELECT deviceId FROM devices WHERE capabilities.iotEdge = true AND tags.isParent = true"
以上查询返回父设备的deviceId。您可以通过 CLI 利用 az iot edge set-modules 或 az iot Edge deployment create 命令来更新模块孪生的设置。
如果您愿意接受其他方法,可以将父设备 ID 传递到 IoT Edge 自动部署。创建模块孪生部署并使用如下所示的目标条件
在模块孪生设置部分,您可以使用类似于下面的方法来更新模块的环境属性
此方法可以更好地监控部署状态、目标设备总数以及已成功应用部署的设备。
希望这有帮助。