這篇的主角是 Augesa 這個工具,Puppet 只是配角,原因是 Puppet 管理設定檔有一部分採用了 Augeas 這個強大的工具。
原生 Puppet 管理檔案使用 File 管理的是整個檔案內容,但是在某種情況下僅需要管理單一行設定,之前其實有介紹過 file_line 這個由 Puppet 官方開發的 Module,除此之外 Puppet 就是利用 Augeas 這個工具來管理「單行設定」。
Augesa 的核心有一部分是使用 Stock lenses 來參考設定檔的資訊,大部分在 Linux 上的設定檔都可以在 Stock lenses 找到,自定義的 xml、JSON、ini 也都可以管理。
安裝 Augeas 參考官方文件,一般需要兩個套件
- augeas-tools
- augeas-lenses
在這篇提供幾種使用情境
使用 ag command line 管理 json 檔案
$ augtool -A
augtool> set /augeas/load/Json/lens Json.lns
augtool> set /augeas/load/Json/incl /var/lib/transmission/.config/settings.json
augtool> load
- 使用 Set 先把 Json 的 lenses 和要管理的 settings.json 讀進來
- augeas print 測試讀 setting.json 是否正常
使用 ag command line 管理 /etc/yum.repo.d/epel.repo 檔案
$ augtool -A
augtool> set /augeas/load/Yum/lens Yum.lns
augtool> set /augeas/load/Yum/incl /etc/yum.repos.d/epel.repo
augtool> load
augtool> print /files
/files
/files/etc
/files/etc/yum.repos.d
/files/etc/yum.repos.d/epel.repo
/files/etc/yum.repos.d/epel.repo/epel
/files/etc/yum.repos.d/epel.repo/epel/name = "Extra Packages for Enterprise Linux 7 - $basearch"
/files/etc/yum.repos.d/epel.repo/epel/mirrorlist = "http://mirrors.fedoraproject.org/mirrorlist?repo=epel-7&arch=$basearch"
/files/etc/yum.repos.d/epel.repo/epel/enabled = "1"
/files/etc/yum.repos.d/epel.repo/epel/gpgcheck = "1"
/files/etc/yum.repos.d/epel.repo/epel/gpgkey = "file:///etc/pki/rpm-gpg/RPM-GPG-KEY-EPEL-7"
/files/etc/yum.repos.d/epel.repo/epel/failovermethod = "priority"
/files/etc/yum.repos.d/epel.repo/epel/exclude[1] = "puppet*"
/files/etc/yum.repos.d/epel.repo/epel/exclude[2] = "*augeas*"
- 因為 agueas 剛好有支援 Yum.lns 格式就直接 Set 讀進來
- augeas print 測試讀 epel.repo 是否正常
在 EPEL 這個 yum repository 加一筆 includepkgs=ossec-hids*
augtool> set /files/etc/yum.repos.d/epel.repo/epel/includepkgs "ossec-hids*"
augtool> print /files
/files
/files/etc
/files/etc/yum.repos.d
/files/etc/yum.repos.d/epel.repo
/files/etc/yum.repos.d/epel.repo/epel
/files/etc/yum.repos.d/epel.repo/epel/name = "Extra Packages for Enterprise Linux 7 - $basearch"
/files/etc/yum.repos.d/epel.repo/epel/mirrorlist = "http://mirrors.fedoraproject.org/mirrorlist?repo=epel-7&arch=$basearch"
/files/etc/yum.repos.d/epel.repo/epel/enabled = "1"
/files/etc/yum.repos.d/epel.repo/epel/gpgcheck = "1"
/files/etc/yum.repos.d/epel.repo/epel/gpgkey = "file:///etc/pki/rpm-gpg/RPM-GPG-KEY-EPEL-7"
/files/etc/yum.repos.d/epel.repo/epel/failovermethod = "priority"
/files/etc/yum.repos.d/epel.repo/epel/exclude[1] = "puppet*"
/files/etc/yum.repos.d/epel.repo/epel/exclude[2] = "*augeas*"
/files/etc/yum.repos.d/epel.repo/epel/includepkgs = "ossec-hids*"
/files/etc/yum.repos.d/epel.repo/includepkg = "ossec-hids*"
augtool> save
Saved 1 file(s)
augease save 後就會寫入檔案。
使用 Puppet augeas 移除 /opt/tomcat/conf/server.xml 內建的 Value 參數。
augeas { 'absent-default-config-server-valve':
lens => 'Xml.lns',
incl => '/opt/tomcat/conf/server.xml',
changes => 'rm Server/Service/Engine/Host/Valve',
}
結論
augeas 更好用的地方是在 Shell Script,不需要利用 sed、egrep 等工具 filter
如果是 Puppet 來說,file_line、augeas 兩者的選擇需要照情境來選擇。
參考: