實作 Linux 基礎環境設定
任何系統環境除了 Application 以外,系統人員都會有自己的一套設定稱為 base,這個 base 可以套用給所有相同 OS-based system。
學習項目
- 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 驗證一下是否都有確實安裝。