IoT
可以使用以下环境从环境中创建模块:
ModuleClient.CreateFromEnvironmentAsync(settings)
但是,似乎没有设备的等效方法。现在,我在程序中设置设备连接字符串来测试它,但是有没有更好的方法来读取iotedge/config.yaml
部署在那里的所有边缘设备的连接字符串?
为 .NET 和 python 执行此操作的方法将不胜感激。
IoT
可以使用以下环境从环境中创建模块:
ModuleClient.CreateFromEnvironmentAsync(settings)
但是,似乎没有设备的等效方法。现在,我在程序中设置设备连接字符串来测试它,但是有没有更好的方法来读取iotedge/config.yaml
部署在那里的所有边缘设备的连接字符串?
为 .NET 和 python 执行此操作的方法将不胜感激。
您可以使用 yaml 解析库来反序列化文档,例如 YamlDotNet。其实可以参考iot edge中的YamlDocument。但是在类中,并没有提供获取键值的方法。请参考以下代码。
public class YamlDocument
{
readonly Dictionary<object, object> root;
public YamlDocument(string input)
{
var reader = new StringReader(input);
var deserializer = new Deserializer();
this.root = (Dictionary<object, object>)deserializer.Deserialize(reader);
}
public object GetKeyValue(string key)
{
if(this.root.ContainsKey(key))
{
return this.root[key];
}
foreach(var item in this.root)
{
var subItem = item.Value as Dictionary<object, object>;
if(subItem != null && subItem.ContainsKey(key))
{
return subItem[key];
}
}
return null;
}
}
然后就可以从 config.yaml 中获取设备连接字符串了。如果你使用python,你可以导入yaml库来分析文件。
StreamReader sr = new StreamReader(@"C:\ProgramData\iotedge\config.yaml");
var yamlString = sr.ReadToEnd();
var yamlDoc = new YamlDocument(yamlString);
var connectionString = yamlDoc.GetKeyValue("device_connection_string");
Console.WriteLine("{0}", connectionString);
要从主机获取配置文件,请将以下内容添加到 docker 部署文件中。请注意,源文件是 config1.yaml,它与 config.yaml 相同,只是它对所有人都具有读取权限,而不仅仅是 root。
"createOptions": "{\"HostConfig\":{\"Binds\":[\"/etc/iotedge/config1.yaml:/app/copiedConfig.yaml\"]}}"
有了上面的行,就可以在容器中使用复制的Config.yaml 文件,以及@Michael Xu 的解析代码来派生连接字符串。
从长远来看,无论如何,人们可能都想使用设备配置服务,但希望这对出于任何原因使用设备连接字符串的人有所帮助..