本系列文資料可參考以下:
Module 是 Puppet 管理中非常重要的一環,利用已經編寫好的 module 在 manifests 就不需要在打上落落長的設定檔。
這個篇幅屬於可 LAB 性質,可以參考 shazi7804/puppet-master-docker 來實作 Puppet code。
如果覺得線上的所有 module 都不符合你的需求,可以自己動手寫,在這篇會以基礎的 module 方向去寫。
你可以把 module 放在以下位置:
以一個 apache module 為例,我會需要產生以下這些檔案結構
$ tree /etc/puppetlabs/code/modules/apache
├── files
| └── default.conf
└── manifests
├── init.pp
├── install.pp
├── config.pp
├── service.pp
init.pp 是預設被讀取的檔案,通常用來定義變數、引用 class。
class apache (
String $package_name = 'apache2',
String $package_ensure = 'installed',
String $service_name = 'apache2',
String $service_ensure = 'running',
String $default_site_conf = '/etc/apache2/sites-enabled/default.conf',
String $run_user = 'www-data',
){
contain apache::install
contain apache::config
contain apache::service
Class['::apache::install']
-> Class['::apache::config']
~> Class['::apache::service']
}
install.pp 用來定義如何安裝 package。
class apache::install inherits apache {
package { $apache::package_name:
ensure => $apache::package_ensure
}
}
service.pp 用來處理服務
class apache::service inherits apache {
service { $apache::service_name:
ensure => $apache::service_ensure,
subscribe => Package['apache'],
require => Class['apache::install']
}
}
config.pp 用來處理設定檔
class apache::config inherits apache {
file { $apache::default_site_conf:
ensure => file,
owner => $apache::run_user,
source => "puppet:///modules/${module_name}/default.conf"
}
}
要引用 module 只需要使用 include 就可以把已經寫好的 apache module 引用進來
node default {
include ::apache
}
只要三行、三行、三行 !! 就完成佈署安裝 apache 了
這樣 Puppet code 就簡潔許多了,恭喜你已經學會了基本的 module 寫法,可以再往進階 module 前進。