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

标签 azure github-actions azure-iot-hub azure-iot-edge github-actions-self-hosted-runners

该项目位于 IoT Azure 中,我的上下文由 Edge 父级和 Edge 子级组成,因此我为存储在 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 凭据更新。

我可能的方法是:

  1. 使用命令 CLI 获取父设备列表
  2. 对于每个设备,该命令应仅替换注册表模块和运行时模块中的 git 凭据
  3. 使用更新的 Github 凭据部署每台父设备

是否可以通过自托管运行器中的管道与 IoT HUB 之间的交互来实现?

最佳答案

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

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

您可以添加从parentScopes的值中提取父设备名称。属性(property)。 Parent1 是上述示例孪生中父设备的 deviceId。

获取父设备的更好替代方法是向所有可用于通过 Azure CLI 进行查询的父设备添加标签。请参阅下图,详细了解如何通过 Azure 门户添加此内容。

enter image description here

您还可以使用以下命令通过 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。您可以利用az iot edge set-modulesaz iot edge deployment create通过 CLI 命令更新模块孪生的设置。

如果您愿意接受其他方法,可以将父设备 ID 传递给 IoT Edge Automatic Deployments 。创建模块孪生部署并使用如下所示的目标条件

enter image description here

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

enter image description here

此方法可以更好地监控部署状态、目标设备总数以及已成功应用部署的设备。

希望这有帮助。

关于azure - 如何使用 AZ CLI 命令在自托管运行器上执行的管道来更新 IoT 边缘设备群的 git 凭据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/77235650/

相关文章:

azure - 如何捕获 Azure 设备 SDK 中引发的错误?

Azure IoT Hub触发器按顺序处理数据

azure - 使用 REST 将数据发送到 Azure IoT 中心

node.js - 使用 node.js '@azure/storage-blob' 包从 Azure 存储流式传输视频

github-actions - Github 操作 : How use strategy/matrix with script

Github 更新/覆盖发布的现有 Assets

github-actions - 在 GitHub Actions 中,我可以返回一个值以供以后用作条件吗?

azure - 什么更快 : ranged queries on partition keys or individual equality queries on PK's in Azure table Storage?

azure - 如何在 Azure 中为云服务(经典)创建内部负载均衡器?

azure - 如何从docker注册表中提取容器镜像来部署azure容器