【发布时间】:2016-12-30 18:03:41
【问题描述】:
我正在构建一个本地作业运行器,它可以执行各种维护任务,从 FTP 到数据抓取和基本分析。由于它基于一个通用文件系统运行,它需要知道在哪里可以找到某些文件夹和文件。该应用没有数据库,主要依赖 YAML 格式的配置文件。
我现在正在为这些路径设计配置文件,我想知道是否有任何与此相关的最佳实践。我尝试搜索,但只能找到配置文件 格式 之间的参数,而不是其内容的设计。
以下是我正在讨论的方法:
-
用常用的字典名称嵌套路径,这样它们就可以递归循环以通过 os.path 生成绝对路径
fileserver: drive: path: Shared Files myfolder: path: MyFolder reports: path: Daily Reports other: path: Other Reports some: path: Some Reports some2014: path: Some Reports 2014 some2015: path: Some Reports 2015 another-folder: path: 1 - Another Folder reports: path: Daily Reports ip: 192.168.0.0 path: \\MYSERVER1 -
定义通用字典名称并添加一个“父”属性,然后使用父属性走到服务器根目录。
server: ip: 192.168.0.0 path: \\MYSERVER1 drive: path: Shared Files parent: server myfolder: path: MyFolder parent: drive myreports: path: Daily Reports parent: myfolder somereports: path: Some Reports parent: myreports some2015reports: path: Some Reports 2015 parent: myreports etc... -
在加载配置文件时使用占位符约定并将它们正则表达式为绝对路径:
server: \\MYSERVER1 drive: [server]\Shared Files myfolder: [drive]\My Folder etc.
在一个完美的世界中,当事情发生变化时,非技术人员很容易更新。有没有人有实施这样的经验?我认为我的任何一个解决方案都不是很好,我很想看到这种配置的生产示例。
【问题讨论】:
-
它是相对的,取决于单个配置文件需要多少个不同的服务器/服务/文件/路径。如果答案是 1,那么我会选择你的第二个文件,但如果答案是多个,那么我会选择 1。我建议你看看 Puppet、SaltStack、Ansible 和 Chef。
-
您应该使用第三个问题来编辑您的问题,因为格式不会显示在 cmets 上。
-
谢谢 Emett - 我已经更新了问题。我认为第三个最容易阅读,但由于我添加了斜杠,它不会让 os.path 有机会加入它们并纠正错误。第二个和第三个都需要整个应用程序的唯一 ID,但对于一小组路径可能更容易处理。这类事情有什么指导方针吗?
-
我不知道。这可能是一个非常自以为是的话题。也许值得对您的用户进行试运行并寻求反馈。我的选择是第一,但有一些更新。我会将它们添加到答案中,以便它们保持格式。
-
谢谢,查理。在这个特定的驱动器中大约有 12,000 个文件夹,因此对它们进行索引并不是一个真正实用的方法。此外,如果文件夹移动并更改名称,则遍历目录并不能帮助我找到正确的位置。将这一点从代码中剔除也使代码本身更具可扩展性,例如编写一个脚本来处理基于配置文件的 2+ 个 FTP 作业。