天天看點

如何做好Puppet Modules管理

如何做好Puppet Modules管理

不同于其他的Openstack項目,puppet modules是一個數量龐大的存在。以我們目前在使用中的puppet modules為例,就已經多達96個(破百計日可待)。

依賴管理

目前有三種管理依賴的方式:

  • Git submodules 通過git submodule的方式管理各個子子產品
  • Puppet module tool 可以使用puppet forge基于module名稱和版本來搜尋和安裝module
  • Librarian-puppet ruby bundler的擴充,使用Puppetfile來管理

我們分别就這三種方式依次介紹一下,我們這裡不說哪種方法最好,但我們會說明我們根據什麼原因最終選擇了哪種方法。

1.Puppet module tool

該方法使用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-puppet

librarian-puppet支援從Modulefile或者metadata.json讀取依賴,或者使用獨立的Puppetfile。例如,社群的puppet-openstack_integration項目裡就包含了Puppetfile:

## 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:

librarian-puppet install --verbose           

3.git submodule

git submodule可以同時管理多個獨立的項目,同時保持送出的獨立。這也是目前我們所選擇的方式。

我們根據Puppet Module的類型将其劃分成了三個項目(你可以了解為modules的group):

  • sunfire 内部自研服務子產品
  • storm Openstack服務相關子產品
  • karma 運維系統相關子產品

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

  • 遵循線上代碼統一使用軟體包管理的方式
  • dev和test環境可以随時修複代碼并且靈活切換

None

繼續閱讀