「连载」边缘计算(三十六)03-19:边缘部分源码分析(源码分析篇)

122 阅读4分钟

(接上篇)

配置模块初始化

配置模块初始化具体如下所示。

err := archaius.Init()...CONFIG = archaius.GetConfigFactory()

  获取内存配置源

获取内存配置源具体如下所示。

ms := memoryconfigsource.NewMemoryConfigurationSource()CONFIG.AddSource(ms)

获取命令行配置源

获取命令行配置源具体如下所示。

cmdSource := commandlinesource.NewCommandlineConfigSource()CONFIG.AddSource(cmdSource)

获取环境变量配置源

获取环境变量配置源具体如下所示。

envSource := envconfigsource.NewEnvConfigurationSource()CONFIG.AddSource(envSource)

根据配置文件路径获取配置源

根据配置文件路径获取配置源具体如下所示。

| confLocation := getConfigDirectory() + "/conf"_, err = os.Stat(confLocation)if !os.IsExist(err) {os.Mkdir(confLocation, os.ModePerm)}err = filepath.Walk(confLocation, func(location string, f os.FileInfo, err error) error {if f == nil {return err}if f.IsDir() {return nil}ext := strings.ToLower(path.Ext(location))if ext == ".yml" || ext == ".yaml" {archaius.AddFile(location)}return nil})...}) | | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |

目前,KubeEdge所用的读取配置文件的方式是根据配置文件路径获取配置源。下面深入剖析该配置文件读取方式,首先确定配置所在路径。getConfigDirectory()函数定义具体如下所示。

KubeEdge/beehive/pkg/common/config/config.go
//constants to define config pathsconst (ParameterConfigPath     = "config-path"EnvironmentalConfigPath = "GOARCHAIUS_CONFIG_PATH")...// get the configuration file pathfunc getConfigDirectory() string {if config, err := CONFIG.GetValue(ParameterConfigPath).ToString(); err == nil {return config} if config, err := CONFIG.GetValue(EnvironmentalConfigPath).ToString(); err == nil {return config} return util.GetCurrentDirectory()}

  getConfigDirectory()函数中获取配置文件所在目录的方式有如下3种。

  1)根据ParameterConfigPath获取,具体如下所示。

// get the configuration file pathfunc getConfigDirectory() string {if config, err := CONFIG.GetValue(ParameterConfigPath).ToString(); err == nil {return config}

  2)根据EnvironmentalConfigPath获取,具体如下所示。

if config, err := CONFIG.GetValue(EnvironmentalConfigPath).ToString(); err == nil {return config}

  3)根据可执行文件运行所在的当前目录下获取,具体如下所示。

return util.GetCurrentDirectory()

接着分析怎么读入配置文件,具体读入方法如下所示。

KubeEdge/beehive/pkg/common/config/config.go
confLocation := getConfigDirectory() + "/conf"_, err = os.Stat(confLocation)if !os.IsExist(err) {os.Mkdir(confLocation, os.ModePerm)}err = filepath.Walk(confLocation, func(location string, f os.FileInfo, err error) error {if f == nil {return err}if f.IsDir() {return nil}ext := strings.ToLower(path.Ext(location))if ext == ".yml"ext == ".yaml" {archaius.AddFile(location)}return nil})...})

未完待续……」 点击下方标题可阅读技术文章

「连载」边缘计算(一)01-16:边缘计算系统(基础篇)

juejin.cn/post/732453…

「连载」边缘计算(二)01-16:边缘计算系统(基础篇)

juejin.cn/post/732452…

「连载」边缘计算(三)01-17:边缘计算系统(基础篇)

juejin.cn/post/732488…

「连载」边缘计算(四)01-18:边缘计算系统(基础篇)

juejin.cn/post/732525…

「连载」边缘计算(五)01-19:云、边、端的部署与配置(基础篇)

juejin.cn/post/732542…

「连载」边缘计算(六)01-22:云、边、端的部署与配置(基础篇)

juejin.cn/post/732657…

「连载」边缘计算(七)01-23:云、边、端的部署与配置(基础篇)

juejin.cn/post/732686…

「连载」边缘计算(八)01-24:云、边、端的部署与配置(基础篇)

juejin.cn/post/732719…

「连载」边缘计算(九)01-25:云、边、端的部署与配置(基础篇)

juejin.cn/post/732768…

「连载」边缘计算(十)01-26:云、边、端的部署与配置(基础篇)

juejin.cn/post/732798…

「连载」边缘计算(十一)01-29:云、边、端的部署与配置(基础篇)

juejin.cn/spost/73290…

「连载」边缘计算(十二)01-30:云、边、端的部署与配置(基础篇)

juejin.cn/post/732947…

「连载」边缘计算(十三)01-31:云、边、端的部署与配置(基础篇)

juejin.cn/post/732979…

「连载」边缘计算(十四)02-01:云、边、端的部署与配置(基础篇)

juejin.cn/post/733029…

「连载」边缘计算(十五)02-02:云、边、端的部署与配置(基础篇)

juejin.cn/post/733054…

「连载」边缘计算(十六)02-18:云、边、端的部署与配置(基础篇)

juejin.cn/post/733653…

「连载」边缘计算(十七)02-19:边缘计算系统逻辑架构(原理篇)

juejin.cn/post/733686…

「连载」边缘计算(十八)02-20:边缘计算系统逻辑架构(原理篇)

juejin.cn/post/733723…

「连载」边缘计算(十九)02-21:边缘计算系统逻辑架构(原理篇)

juejin.cn/post/733758…

「连载」边缘计算(二十)02-22:边缘部分原理解析(原理篇)

juejin.cn/post/733797…

「连载」边缘计算(二十一)02-23:边缘部分原理解析(原理篇)

juejin.cn/post/733830…

「连载」边缘计算(二十二)02-26:边缘部分原理解析(原理篇)

juejin.cn/post/733946…

「连载」边缘计算(二十三)02-27:边缘部分原理解析(原理篇)

juejin.cn/post/733980…

「连载」边缘计算(二十四)02-28:边缘部分原理解析(原理篇)

juejin.cn/post/734019…

「连载」边缘计算(二十五)03-04:边缘部分原理解析(原理篇)

juejin.cn/post/734175…

「连载」边缘计算(二十六)03-05:边缘部分原理解析(原理篇)

juejin.cn/post/734240…

「连载」边缘计算(二十七)03-06:边缘部分源码分析(源码分析篇)

juejin.cn/post/734279…

「连载」边缘计算(二十八)03-07:边缘部分源码分析(源码分析篇)

juejin.cn/post/734324…

「连载」边缘计算(二十九)03-08:边缘部分源码分析(源码分析篇)

juejin.cn/post/734353…

「连载」边缘计算(三十)03-11:边缘部分源码分析(源码分析篇)

juejin.cn/post/734457…

「连载」边缘计算(三十一)03-12:边缘部分源码分析(源码分析篇)

juejin.cn/post/734507…

「连载」边缘计算(三十二)03-13:边缘部分源码分析(源码分析篇)

juejin.cn/post/734542…

「连载」边缘计算(三十三)03-14:边缘部分源码分析(源码分析篇)

juejin.cn/post/734582…

「连载」边缘计算(三十四)03-15:边缘部分源码分析(源码分析篇)

juejin.cn/post/734622…

「连载」边缘计算(三十五)03-18:边缘部分源码分析(源码分析篇)

juejin.cn/post/734727…