如何作好Puppet Modules管理

如何作好Puppet Modules管理

不一樣於其餘的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

  • sunfire 內部自研服務模塊
  • storm Openstack服務相關模塊
  • karma 運維繫統相關模塊

咱們會爲storm建立多個分支,例如:liberty,mitaka。在dev和test環境會使用git命令來切換代碼,而在生產環境則會使用RPM包的方式來管理。這樣作的好處是:

  • 遵循線上代碼統一使用軟件包管理的方式
  • dev和test環境能夠隨時修復代碼而且靈活切換
相關文章
相關標籤/搜索