在 Puppet Enterprise 裡面有提到「Managing environment content with Puppetfiles」可以用 Puppetfile 來管理你的 module,但是 Puppetfile 官方僅有在 Enterprise 裡面才有支援,後來在 Puppet 的非官方社群「voxpupuli」提供的 librarian-puppet 工具讓 Open Source 也能享受 Puppetfile 的功能
在之前沒有 librarian-puppet 的時候,你必須使用 Puppet module install 來管理,或是把它加到現有的 Git repository
librarian-puppet 就像是 bundler,編寫 Puppetfile 後可以透過 librarian-puppet install 來安裝到 modules 目錄,
安裝 librarian-puppet
用 gem 來安裝 librarian-puppet
$ gem install librarian-puppet
用 init 生成 Puppetfile
$ librarian-puppet init
Puppetfile 的寫法
Puppetfile 能讓你寫 metadata.json 或是 modulefile 指定 dependencies
#!/usr/bin/env ruby # use dependencies defined in metadata.json metadata
一個範例的 Puppetfile:
#!/usr/bin/env ruby #^syntax detection forge "https://forgeapi.puppetlabs.com" # A module from the Puppet Forge mod 'puppetlabs-stdlib' mod 'puppetlabs-ntp' mod 'puppetlabs-accounts' mod 'puppetlabs-apache' mod 'puppetlabs-apt' :ref => '4.0.0' # local Roles/Profiles Pattern. mod 'shazi7804/role', :path => './role' mod 'shazi7804/profile', :path => './profile' # A module from git mod 'shazi7804/ssm_agent', :git => 'git://github.com/shazi7804/puppet-ssm_agent.git' mod 'shazi7804/aws_agent', :git => 'git://github.com/shazi7804/puppet-aws_agent.git'
- forge 指定從 https://forgeapi.puppetlabs.com 下載
- mod 從 forge 指定 modules
- :path 從 local 上拉 modules ,這邊範例 Role and Profile pattern 的 modules
- :git 從 Git 上拉 modules
- :ref 可以指定 branch (:ref => ‘feature/master/dans_refactor’ ) 或是 tag (:ref => ‘4.0.0’),要特別注意,在 r10k 裡面指定 ref 的方式是 :branch, :tag, :commit,和這裡不同
寫好之後就可以來安裝 Puppet modules
$ librarian-puppet install --no-use-v1-api
install 後會產生 .tmp、.librarian、Puppetfile.lock、modules,一般會把 .tmp、moduels 加到 .gitignore 裡面,因為用 Puppetfile 來管理 modules 了,而 .tmp 是 cache module 的檔案。
還有一些日常用法:
查看 modules
$ librarian-puppet show
更新 dependencies
$ librarian-puppet outdated
更新 modules
$ librarian-puppet update
Done !!