實作 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 驗證一下是否都有確實安裝。

results matching ""

    No results matching ""