问题描述
我有一个在 Ubuntu 16.04 上运行 IoT Edge 1.0.10.3 的工作虚拟机,我在过去一个月左右关闭了它。
今天打开它发现:
- 我可以正常启动所有模块。他们都报告正在运行
- 运行时响应为:
400 -- The deployment configuration is malformed or invalid
- 运行 iotedge 检查,似乎没有任何错误
- 当我尝试
set modules
时,在 IoT 边缘模块下:There are no listed IoT Edge Modules
- 我还在 EdgeHub 日志中收到以下错误:
<4> 2021-01-19 22:27:12.834 +00:00 [WRN] - Error getting edge hub config from twin desired properties
System.ArgumentException: schemaVersion is null or whitespace.
at Microsoft.Azure.Devices.Edge.Util.Preconditions.CheckArgument(Boolean expression,String message) in /home/vsts/work/1/s/edge-util/src/Microsoft.Azure.Devices.Edge.Util/Preconditions.cs:line 73
at Microsoft.Azure.Devices.Edge.Util.Preconditions.CheckNonWhiteSpace(String value,String paramName) in /home/vsts/work/1/s/edge-util/src/Microsoft.Azure.Devices.Edge.Util/Preconditions.cs:line 192
at Microsoft.Azure.Devices.Edge.Hub.Core.Config.EdgeHubDesiredProperties..ctor(String schemaVersion,IDictionary`2 routes,StoreAndForwardConfiguration storeAndForwardConfiguration) in /home/vsts/work/1/s/edge-hub/src/Microsoft.Azure.Devices.Edge.Hub.Core/config/EdgeHubDesiredProperties.cs:line 14
at lambda_method(Closure,Object[] )
at Newtonsoft.Json.Serialization.JsonSerializerInternalReader.CreateObjectUsingCreatorWithParameters(JsonReader reader,JsonObjectContract contract,JsonProperty containerProperty,ObjectConstructor`1 creator,String id)
at Newtonsoft.Json.Serialization.JsonSerializerInternalReader.CreateNewObject(JsonReader reader,JsonObjectContract objectContract,JsonProperty containerMember,String id,Boolean& createdFromNonDefaultCreator)
at Newtonsoft.Json.Serialization.JsonSerializerInternalReader.CreateObject(JsonReader reader,Type objectType,JsonContract contract,JsonProperty member,JsonContainerContract containerContract,Object existingValue)
at Newtonsoft.Json.Serialization.JsonSerializerInternalReader.CreateValueInternal(JsonReader reader,Object existingValue)
at Newtonsoft.Json.Serialization.JsonSerializerInternalReader.Deserialize(JsonReader reader,Boolean checkAdditionalContent)
at Newtonsoft.Json.JsonSerializer.DeserializeInternal(JsonReader reader,Type objectType)
at Newtonsoft.Json.JsonSerializer.Deserialize(JsonReader reader,Type objectType)
at Newtonsoft.Json.JsonConvert.DeserializeObject(String value,Type type,JsonSerializerSettings settings)
at Newtonsoft.Json.JsonConvert.DeserializeObject[T](String value,JsonSerializerSettings settings)
at Newtonsoft.Json.JsonConvert.DeserializeObject[T](String value)
at Microsoft.Azure.Devices.Edge.Hub.Core.Config.TwinConfigSource.GetConfigInternal() in /home/vsts/work/1/s/edge-hub/src/Microsoft.Azure.Devices.Edge.Hub.Core/config/TwinConfigSource.cs:line 97
at Microsoft.Azure.Devices.Edge.Hub.Core.Config.TwinConfigSource.GetConfigInternal() in /home/vsts/work/1/s/edge-hub/src/Microsoft.Azure.Devices.Edge.Hub.Core/config/TwinConfigSource.cs:line 105
在过去一个月的离线状态下会发生什么使边缘进入不一致状态?
解决方法
根据 docs,您的日志引用的 $schemaVersion 是在 1.0.10 中引入的。文档说推荐使用该属性,但似乎运行时需要它。在您的评论中,您包含了缺少 $schemaVersion 的所需属性。尝试设置以下所需的属性:
"properties":{
"desired":{
"routes":{},"schemaVersion": "1.1","$metadata":{
"$lastUpdated":"2020-11-25T18:26:39.4780665Z","$lastUpdatedVersion":5,"routes":{
"$lastUpdated":"2020-11-25T15:03:42.6671499Z","$lastUpdatedVersion":4
}
}
}
}