iT邦幫忙

2018 iT 邦幫忙鐵人賽
DAY 9
0

本系列文資料可參考以下:


Module 是 Puppet 管理中非常重要的一環,利用已經編寫好的 module 在 manifests 就不需要在打上落落長的設定檔。

建議

這個篇幅屬於可 LAB 性質,可以參考 shazi7804/puppet-master-docker 來實作 Puppet code。


動手寫 Module

如果覺得線上的所有 module 都不符合你的需求,可以自己動手寫,在這篇會以基礎的 module 方向去寫。

你可以把 module 放在以下位置:

  • /etc/puppetlabs/code/environments/production/modules
  • /etc/puppetlabs/code/modules
  • /opt/puppetlabs/puppet/modules

基礎 module 檔案結構

以一個 apache module 為例,我會需要產生以下這些檔案結構

$ tree /etc/puppetlabs/code/modules/apache
├── files
|   └── default.conf
└── manifests
    ├── init.pp
    ├── install.pp
    ├── config.pp
    ├── service.pp

module 的 manifests

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

要引用 module 只需要使用 include 就可以把已經寫好的 apache module 引用進來

node default {
  include ::apache
}

只要三行、三行、三行 !! 就完成佈署安裝 apache 了

這樣 Puppet code 就簡潔許多了,恭喜你已經學會了基本的 module 寫法,可以再往進階 module 前進。


上一篇
Day 8 - 手把手系列 - 第一個 manifests
下一篇
Day 10 - modules 的篩選
系列文
Ops 的轉職之路 - Puppet 從入門就放棄30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言