UnitedStack提出并创建的puppet-oslo项目,昨天(2月1日)正式进入governance,成为OpenStack官方项目!该项目将每个Puppet Module中与Oslo相关的配置逻辑完全抽离出来,统一进行管理,可以有效地减少代码冗余和维护工作量。
Puppet-oslo项目是继Steth项目之后,来自UnitedStack有云团队的项目再次进入Big Tent,也是来自中国的工程师团队对OpenStack的全新贡献。比Steth项目更进一步的是,Puppet-oslo项目已经被OpenStack社区的Technical Committee(技术委员会,简称为TC)正式接受,进入到Governance中,成为puppet official project。
Puppet-oslo项目当前的贡献者主要来自UnitedStack有云的Devops团队,设计和提交者余兴超是UnitedStack有云创始工程师之一、现任UnitedStack有云研发总监,同时也是OpenStack社区Puppet Modules项目核心开发者;另一位重要贡献者是来自UnitedStack有云DevOps团队的工程师廖鹏辉。需要特别感谢的是,来自Puppet项目PTL Emilien Macchi也在第一时间成为该项目的贡献者。
为什么 | 需要Puppet-oslo项目?
Puppet和Oslo都是Openstack的官方项目,Openstacker并不陌生。其中,Puppet是专注于提升OpenStack云部署的IT自动化可扩展性和可靠性的关键模块;Oslo则是一个通用库,通过一套通用的代码库来支持OpenStack各个组件的消息队列、数据库等基础功能。
为什么需要发展一个Puppet-oslo项目呢?因为随着Puppet Openstack社区的快速发展,当前社区已有了近30个puppet modules,每个module都独立管理着与oslo.*相关的配置参数。这对代码的一致性和维护便利带来了极大的挑战。
也就是说,当需要调整某一个参数,比如[oslo_messaging_rabbit]时,社区开发人员将不得不对每个module分别进行修改,一个简单的参数调整需要提交多达20多次。这样的结果不仅是工程师不胜其烦,而且对系统而言,也带来了大量的冗余代码,明显不符合开源社区所提倡的DRY原则。
Puppet-oslo项目的出现,就是为了解决这一问题。
讲述 | 核心贡献者与Puppet-oslo项目
图:余兴超:Puppet-oslo项目核心贡献者、UnitedStack有云研发总监
我在做puppet-keystone的部分代码重构时,使用一个define类型去统一管理所有服务的authtoken配置,受到这个思路的启发,发现可以运用相同的方法去统一的管理各服务的oslo.*项目,因此在openstack-dev邮件列表上提出了puppet-oslo项目,目的是将每个module中与oslo相关的配置逻辑完全抽离出来,统一进行管理,有效地减少代码冗余和维护工作量。社区对于这块的优化工作早在 Vancouver Design Summit上已经进行过专门的讨论,由于各个项目所使用的oslo.*组件并非统一,因此当时得出的结论是不做(http://my1.fr/blog/puppet-openstack-plans-for-liberty/)。因此,这个话题便慢慢沉寂下去。我们花费了2天时间调研了Openstack核心项目以及比较活跃的相关项目,给出的结论是绝大数项目主分支(Mitaka)的oslo.*版本是一致的,可以使用puppet-oslo进行统一管理。
在Puppet-openstack部署过程中,我发现许多废弃或者变更的参数在某些 puppet模块中没有来得及变更。于是开始将这些参数变更的 patch 提交到社区的 puppet 项目,这些参数中的oslo相关参数本来在每个模块中都应该是一致的,但由于每个puppet模块各自维护自身的oslo参数,更新的进度可能各不相同,也导致了配置的不一致。
正好得知我的Leader 余兴超在与社区讨论后启动开发一个叫做Puppet-oslo的新项目,用这个项目来为每个Openstack项目配置oslo相关参数,正好解决了很多oslo参数维护的问题。于是我当天就加入到了这个项目的开发,幸运的是,下午项目就进入社区Big Tent,随后又成为OpenStack官方项目。这充分证明了社区对Puppet-oslo项目的极大兴趣,因为它从根本上减小了 Puppet 项目参数的维护难度。今后我们将继续参与这个项目的开发,争取早日开始在Puppet-openstack项目中试用并推广。
解读 | Puppet-oslo如何做到统一管理?
Puppet-oslo项目将每个Puppet module中与oslo相关的配置逻辑完全抽离出来,统一进行管理,有效地减少代码冗余和维护工作量。也就是说,其他Puppet 模块本来是需要自己配置 oslo 的参数的,使用 Puppet-Oslo之后 ,其他 Puppet 模块就可以调用Puppet-oslo 来配置 Oslo 的参数,这能够做到一定程度的统一管理。
使用 Puppet-oslo之前:每个模块都要管理这些Oslo 的配置,每个改动都需要单独配置。
使用 Puppet-oslo之后:每个模块调用 Puppet-oslo来配置,好处显而易见,只需要配置一个即可。
背后故事 | Puppet-oslo项目闪电并入官方项目
Puppet-oslo项目并入Governance项目队列可以用闪电速度来形容,我们来简单梳理一下脉络:
2016年1月初,余兴超在Openstack-dev邮件列表中提出了Puppet-oslo项目,Puppet项目PTL Emilien Macchi表示大力支持。
3天后,Puppet-oslo项目成功并入“大帐篷”开发模式,并且开始进入申请社区governance项目队列。
期间,与OpenStack发行版本周期管理项目的PTL Doug Hellmann等社区技术领袖进行了深入交流。
最终,经过OpenStack基金会工程主管、OpenStack技术委员会主席兼发行版本经理Thierry Carrez的批准,正式并入Governance项目集,成为Puppet-OpenStack的官方项目。
Upstream First | UnitedStack有云一直在努力
Upstream First开发模式,与上游保持同步一直是UnitedStack有云恪守的准则。
在这样的追求下,是UnitedStack有云与OpenStack社区的良好互动,不仅首批通过互操作性测试,成为第一个通过的中国厂商。而且能够为社区的提升不断创造价值,本次的Puppet-oslo项目与不久之前提交的Steth项目都是积极参与社区建设的明证。
欢迎 | 加入Puppet-oslo
Puppet-oslo项目从成立到现在只有不到两个月的时间,还有很大的成长空间。我们希望有更多的OpenStack开发者可以加入!