Posts categorized "Puppet" Feed

Aug 26, 2014

vagrant + puppet を使っての開発環境を作る場合に、いままでは、

  • プロジェクト直下に vagrant.pp をおいてそこにすべてを詰め込む
  • file resource を定義するとき、source で指定するファイルはプロジェクトで使う他の設定ファイル用のディレクトリに混ぜ込んでおいておいてフルパスハードコードで参照
source => '/vagrant/conf/my.cnf'

としていた。これはこれで機能していたし、手作業で構築する部分はゼロだった。ただ、この manifest を使いまわして puppet apply してAWS 上やら社内サーバーやらに QA 用の環境用意しようとなったとたん使い回しが効かなくて manifest 都度手直しとかするはめになってしまうことに気づいた。(まぁ、その環境でも /vagrant に git clone してもらえればそれはそれでいいんだけど...)

結局 manifest にフルパスをハードコードしないためには、モジュール化して、

source => 'puppet:///modules/mysql/my.cnf'

などとして参照できるようにすれば puppet apply --modulepath でどこに clone しても動く manifest になる。ということで、いまは以下の様な感じで作るのが自分の中のベストプラクティスとなった。

puppet
├── mysql
│   ├── files
│   │   └── my.cnf
│   └── manifests
│       └── init.pp
├── pound
│   ├── files
│   │   ├── example.com.pound.crt
│   │   └── pound.cfg
│   └── manifests
│       └── init.pp
└── site.pp

という感じで file resource 必要な奴はモジュール化。Vagrantfile は、

config.vm.provision :puppet do |puppet|
   puppet.module_path    = "puppet"
   puppet.manifests_path = "puppet"
   puppet.manifest_file  = "site.pp"
   puppet.options        = "--verbose"
end

とする。

これで、vagrant 使ってれば vagrant provision でもちろん行けるし、そうでない環境をどうにかしたいときには git clone してきて、

puppet apply --modulepath=$PWD/puppet puppet/site.pp

とすればよいだけ。

一手間あるといえばあるけど、アプリケーションが直接使うわけでもない my.cnf みたいなものを自然と別ディレクトリに分離できるし、心理的にもスッキリした感。しばらくこれでよさげ。

Feb 19, 2013

td-agent と fluent-gem コマンドでインストールした fluentd plugins、gem を管理するための Puppet モジュールつくってみた。

package provider に "fluentgem" が追加されているので、

include td-agent
package { 'fluent-plugin-datacounter':
  ensure   => 'installed',
  provider => 'fluentgem',
  require  => Package['td-agent'],
}

として、fluent plugin な gem などを追加することができるので、全部 /etc/td-agent/plugin にいれるとか、exec でほげほげしてふがふがして とか面倒なことしなくてもよくなった。あとは、最小限の td-agent.conf がはいっているのみ。

これで、 td-agent をばらまけるようになったし、先週書いた ganglia plugin で metric 収集も万全。ようやく fluentd スタート地点。

Dec 20, 2012

Puppet agent のログ(おもにエラー系)をメールとかなんとかで送る設定のメモ。

master が動いてるサーバーの puppet.conf の master セクションに以下追加(エラーをログとメールに通知する設定)。

[master]
    reports = log, tagmail

同じく master サーバーの tagmail.conf に以下。

warning,err,alert,emerg,crit: puppet@example.com

この設定で warning 以上のログを puppet@example.com に送ってくる。

puppetmaster を再起動したら、client なサーバー全部の puppet.conf に以下。

[agent]
    report = true

これでメールがほげほげ送られてくるので、エラー起こしたまんま同期漏れし続けてるというチョンボを回避できるようになる(2ヶ月近く同期とれてないサーバーにようやくきづいたので今更設定したところ....)。メール以外にも IRC やら Jabber で通知するプラグインなんかもあるようなのでお好みの方法で通知できるっぽい。

ということで、心配がひとつ減った。

参考)