iT邦幫忙

2018 iT 邦幫忙鐵人賽
DAY 18
0
DevOps

Ops 的轉職之路 - Puppet 從入門就放棄系列 第 18

Day 18 - 手把手系列 - Linux 實戰

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


前面 17 天講了一堆 Puppet 的一些重要的用法,接下來的 Day 18、19、20 是直接帶領各位在實務上可能用到的經驗。

這篇主要是以 Linux base 的基礎設定為主,每一個管理員針對自己的每一台系統都會有 應該 要做的事情,例如 ntp 校時、

建議

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


學習項目

  • resource
    • file
    • exec
    • augeas
  • facts
  • stdlib/file_line

實作目標

  • motd
  • hostname
  • environment
  • sudoers
  • ntp
  • snmp

Dependencies

在這個 workshop 會需要用到以下 module

  • puppetlabs-stdlib
  • puppetlabs-motd
  • puppetlabs-ntp
  • shazi7804-snmp

LAB Start

  • motd 登入時提供給使用者的歡迎訊息,用 puppetlabs-motd 來實現。
class { 'motd':
  template => "${module_name}/base/motd.erb",
}

因為想要依照不同的 node 給予相對應訊息,所以採用 motd 的 template。

templates/motd.erb

================================================
The site <%= @fqdn %> is managed by Puppet.

用 facts 的 fqdn 動態改變字串。

  • 將 hostname 自動與 certname 同步。
file { '/etc/hostname':
  ensure  => file,
  content => $trusted['certname'],
  notify  => Exec['hostname-refresh']
}
exec { 'hostname-refresh':
  command     => 'hostname -F /etc/hostname',
  path        => '/bin:/usr/sbin:/usr/bin:/sbin',
  refreshonly => true
}

因為必須先設定 /etc/hostname 後才使用 hostname -F 去生效,所以會有順序上的問題,在 exec 這邊用 refreshonly 被動的方式等待觸發才會執行,而 file 有異動的時候會 notify Exec['hostname-refresh']。

  • 控制 /etc/environment 系統變數。
augeas { 'set-environment':
  lens    => 'Shellvars.lns',
  incl    => '/etc/environment',
  changes => template("${module_name}/environment.erb"),
}

augeas 是用來管理所有系統設定檔,特性是可以處理單行而不影響既有的資料,因為 environment 可能會有許多 application 會共用這隻檔案,所以不適合用 file 來管理,如果用 file 就咬死這隻檔案的彈性了。

  • 預設信任 sudo group 可以 sudo
file_line { 'sudo_rule-sudo':
  path => '/etc/sudoers',
  line => '%sudo ALL=(ALL:ALL) ALL',
}

這邊用到 stdlib 的 file_line,其用途跟 augeas 很像,都是用來控制單行不影響既有資料,不過 file_line 可以處理非系統設定檔

  • 用 module 快速安裝 ntp
class { '::ntp':
  servers => ['time.google.com'],
}
  • 用 module 快速安裝 snmp
class { '::snmp':
  agent_address => 'udp:161',
  com2sec       => ["notConfigUser  default  public"],
  views         => ['systemview  included  .1'],
}

最後 deploy 到 node 驗證一下是否都有確實安裝。


上一篇
Day 17 - 什麼軟體盤點?就用 facter 就好啦!
下一篇
Day 19 - 手把手系列 - LAMP 實戰
系列文
Ops 的轉職之路 - Puppet 從入門就放棄30

尚未有邦友留言

立即登入留言