azure 如何通过使用管道在自托管运行器上使用AZ CLI命令更新IoT边缘设备群的git凭据

wbgh16ku  于 2023-10-22  发布在  Git
关注(0)|答案(1)|浏览(129)

该项目在IoT Azure中,我的上下文由边缘父节点和边缘子节点组成,因此我为存储在IoT Hub中的每个边缘设备/模块提供了一个设备/模块孪生JSON,其中包含设备/模块的属性。
我正在寻找一个管道解决方案来更新存储在edge device twin和module twin中的Git hub容器凭据:

注册表运行时模块:

"$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 tubeby pipeline来为父设备进行大规模的git凭据更新。
我可能的做法是:
1.使用命令CLI获取父设备列表
1.对于每个设备,该命令应该只替换注册表模块和运行时模块中的git凭据
1.使用更新的Github凭据部署每个父设备

是否可以通过自托管runner中的pipeline与IoT HUB之间的交互来实现?

juzqafwq

juzqafwq1#

没有现成的方法可以让你通过Azure CLI找到父边缘设备。有一个名为parentScopes的属性,它将成为子设备孪生的一部分,包含对父设备的引用。下面是属性在子设备孪生JSON中保留的值的示例。

"parentScopes": [       
    "ms-azure-iot-edge://Parent1-638316034265745064"     
]

您可以从parentScopes属性的值中添加和提取父设备名称。Parent 1是上面示例孪生中父设备的deviceId。
获取父设备的一种更好的替代方法是向所有父设备添加一个标记,该标记可用于通过Azure CLI进行查询。请参阅下图,了解如何通过Azure门户添加此内容的详细信息。

您还可以使用以下命令az iot hub device-twin update -n <iothubname> -d <device id> --tags '{"isParent":true}'通过CLI向Iot Edge设备添加标记。
创建标记后,您可以使用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 Automatic Deployments。创建一个模块孪生部署并使用如下所示的目标条件

在模块孪生设置部分,您可以使用类似于下面的方法更新模块的环境属性

此方法可更好地监控部署状态、目标设备总数以及已成功应用部署的设备。
希望这对你有帮助。

相关问题