Site icon Mr. 沙先生

Puppet 用 Puppetfile (librarian-puppet) 來管理 modules

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'

 

 

寫好之後就可以來安裝 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 !!

 

 

 

Exit mobile version