Puppet-LVMを使ってみた

PuppetでLVMを管理できるといろいろと便利そうなのだが、そのためのモジュールが見つかったので、使ってみた。(Puppetmaster: Fedora14, Puppetd: CentOS5.5 EPEL: puppet-0.25.5-1.el5) Puppet-LVMのリンク先はこちら。
https://github.com/puppetlabs/puppet-lvm

注意点として、このモジュールはlib/ 以下のファイル(Rubyで書かれている。。) を含んでいるため、puppetmasterd, puppetdが動く両方のサーバーの/etc/puppetd.confで、 次を設定する必要がある。 (新しめのバージョンでないと使えないらしい。。)

[main]
  pluginsync = true

さらに、Puppetmaster側では、moduleのパスを設定する必要がある。

[puppetmasterd]
  modulepath = /etc/puppet/modules

<<参考リンク>>
http://docs.puppetlabs.com/guides/plugins_in_modules.html

モジュールのインストールとしては、githubからダウンロードしたtarファイルを/etc/puppet/modules 以下に展開する形になる。 /etc/puppet/modules/puppet-lvm が出来ていれば上手くいっている。
準備が整ったら、Puppetマスター側で、次のようなマニフェストを追加する。例として PV: /dev/vdbに、VG: datavg1 を構成し、そこからLV: datalv4, datalv5 作成(サイズは60MB)=>ext3で初期化 を実行する。

import 'puppet-lvm'

 physical_volume { "/dev/vdb":
    ensure => present,
 }
 volume_group { "datavg1":
    ensure => present,
    physical_volumes => "/dev/vdb",
    require => [Physical_volume["/dev/vdb"],]
 }
 logical_volume { "datalv5":
    ensure => present,
    volume_group => "datavg1",
    size => "60M",
    require => [Volume_group["datavg1"],]
 }
 filesystem { "/dev/datavg1/datalv5":
    ensure => present,
    fs_type => "ext3",
    require => [Logical_volume["datalv5"],]
 }
 logical_volume { "datalv4":
    ensure => present,
    volume_group => "datavg1",
    size => "60M",
    require => [Volume_group["datavg1"],]
 }
 filesystem { "/dev/datavg1/datalv4":
    ensure => present,
    fs_type => "ext3",
    require => [Logical_volume["datalv4"],]
 }

予定どおりファイルシステムが作成されれば成功である。ちなみに lvm::volume を関数として使っても同じことができる。

基本的にこれだけだが w 、各logical_volumeでサイズを拡張して同期を行うと、自動的にファイルシステム拡張を行ってくれる。(中身はresize2fsを使っているため、おそらくext2/3のみ.. ) この際、ファイルシステムもLVと同時に拡張された。

なお、LV縮小には対応していないので注意。。エラーメッセージは以下のとおりで、LV縮小に伴うファイルシステム破損を警戒しているようだ。。

err: //Node[centos-virt25.jp.example.org]/Logical_volume[datalv5]/size: change from 100M to 80M failed: Decreasing the size requires manual intervention (100M < 100M)

元々PuppetではLVMを変更する機能が無かったため、テンプレートやKickStartでいろいろと試していたが、使い勝手の面ではPuppetを経由した方がよさそうだ。まずは最小サイズでLVMを作成したテンプレートを用意しておき、デプロイの際に適宜拡張していくと、ちょうどよいだろうか。。