不一样于其余的Openstack项目,puppet modules是一个数量庞大的存在。以咱们当前在使用中的puppet modules为例,就已经多达96个(破百计日可待)。git
目前有三种管理依赖的方式:apache
咱们分别就这三种方式依次介绍一下,咱们这里不说哪一种方法最好,但咱们会说明咱们根据什么缘由最终选择了哪一种方法。json
1.Puppet module toolruby
该方法使用metadata.json文件来管理每一个module之间的依赖关系,以puppet-nova为例:运维
"dependencies": [ { "name": "puppetlabs/apache", "version_requirement": ">=1.0.0 <2.0.0" }, { "name": "duritong/sysctl", "version_requirement": ">=0.0.1 <1.0.0" }, { "name": "openstack/cinder", "version_requirement": ">=8.0.0 <9.0.0" }, { "name": "openstack/glance", "version_requirement": ">=8.0.0 <9.0.0" }, { "name": "puppetlabs/inifile", "version_requirement": ">=1.0.0 <2.0.0" }, { "name": "openstack/keystone", "version_requirement": ">=8.0.0 <9.0.0" }, { "name": "puppetlabs/rabbitmq", "version_requirement": ">=2.0.2 <6.0.0" }, { "name": "puppetlabs/stdlib", "version_requirement": ">=4.0.0 <5.0.0" }, { "name": "openstack/openstacklib", "version_requirement": ">=8.0.0 <9.0.0" }, { "name": "openstack/oslo", "version_requirement": "<9.0.0" } ]
2.Librarian-puppetui
librarian-puppet支持从Modulefile或者metadata.json读取依赖,或者使用独立的Puppetfile。例如,社区的puppet-openstack_integration项目里就包含了Puppetfile:spa
## OpenStack modules mod 'aodh', :git => 'https://git.openstack.org/openstack/puppet-aodh', :ref => 'master' mod 'barbican', :git => 'https://git.openstack.org/openstack/puppet-barbican', :ref => 'master' ...
能够使用如下命令安装其所依赖的module:code
librarian-puppet install --verbose
3.git submoduleorm
git submodule能够同时管理多个独立的项目,同时保持提交的独立。这也是目前咱们所选择的方式。
咱们根据Puppet Module的类型将其划分红了三个项目(你能够理解为modules的group):blog
咱们会为storm建立多个分支,例如:liberty,mitaka。在dev和test环境会使用git命令来切换代码,而在生产环境则会使用RPM包的方式来管理。这样作的好处是: