Zabbix2.2をPostgeSQL9.3でインストールをChefのCookbookにした。

こないだZabbixのスペシャリスト講習会に行きまして、Zabbix2.2は導入してみたいという気持ちなりました。
せっかくだから以前Chef0.9の時に作ったcookbookも大幅にリニューアルして、前回はやろうとして断念したGitHUBでの公開も入れました。

https://github.com/rebine/chef_zabbix22_with_postgresql9
こちらがそのリポジトリ。実はまだ、ライセンスの記述とかMarkdown記法の勉強とかが追い付いていないのでボロッボロの状態です。

■README.mdについて

README.mdって英語で書かないといけないんでしたっけ?何か伝えようと書き始めるも、書いている最中にそれらを忘れていくというありさまなので、日本語で伝えたいことをまずはこのブログに書いて、推敲できたらMarkdownに書いていければなと思っています。

まず、このcookbookはさくらインターネットのVPSで2GBのメモリを持っているサーバ上で動かすために作りました。CentOS6.5ですけれど、おそらくepelリポジトリが最初から入っている状態なので、純粋にCentOSとは違うかもしれません。

同じサーバでApache(SSLとかバーチャルホストとか、Token表示とか)、sshd(ポートを変えたり、接続タイムアウトを伸ばしたり)、iptables(sshdのポートを変えているのに合わせている),useradd(ログインと作業用のユーザー。.vimrcやgitconfig などを整えてます)という他のcookbookも合わせてテストしています。

というわけで、本当はApacheなどもcookbookを同梱しないとサーバとしては不完全なのですが、http://IPアドレス/zabbix/ でも動いてしまうものなので、そのあたりは各自のポリシーに合わせて構成したほうが良いと思って同梱しませんでした。

/etc/zabbix/web/zabbix.conf.php もtemplateでcookbookに入っています。インストール直後にブラウザでアクセスをすると通常はバイナリチェックとDBへのアクセス設定画面になりますが、このrecipeはそれらを省略して直接ログイン画面がでるようにしました。

PostgreSQLについての特徴としてはsuper userとしてのpostgresにパスワードをつけていません。これも各自のポリシーがあると思って入れていません。.pgpassを接続ユーザーのログインディレクトリに設置するという方法があるのですが、僕は勝手に置かれるファイルが好きではないのと、ユーザー作成のcookbookと関連を持たせるのは適当な大きさのcookbookに分割しにくくなるだけなのでやめました。

zabbix serverやインストール時のpostgresql接続はローカルのunixソケットを使って通信するように設定ファイルを書きましたので、それについてはパスワードをつけていません。しかし、127.0.0.1(localhost)への接続へはパスワードをつけています。ですので、Zabbix管理画面の設定では、zabbixユーザーにパスワードを設定しています。

■Chefの記法について

今までnot_ifやらonly_ifやら使っていなかったrecipeばかりだったので、ここぞとばかりにいろんな判定をしています。

execute "create_table" do
  only_if "psql -U #{node[:zabbix][:pgsql_superuser]} -c '\\d' #{node[:zabbix][:database]} | grep 'No relations found.'"
  command "psql -U #{node[:zabbix][:base_role]} -f #{node[:zabbix][:sql_dir]}/schema.sql #{node[:zabbix][:database]}"
end

これはZabbixのテーブルを作成するcommandですが、-c ‘\\d’でzabbixデータベースのテーブル一覧をだし、何もない場合にSQLを実行しています。

今回、Chef実践入門も購入してrecipeを進化させたつもりでしたが、今見直したら、yum_repositoryというものがあると3章に書いてありました。ググれば下記のような参考になるサイトがあったので、自分のrecipeをもっと書き換えてみたいと思います。

はじめてのChef  http://www.sharkpp.net/blog/2014/04/18/first-step-chef.html

具体的には、このように書いていたところを

# repository
script "zabbix repo install" do
  not_if "rpm -qa | grep #{node[:zabbix][:repo_rpm]}"
  command "/bin/rpm -ivh #{node[:zabbix][:repourl]}"
end
yum_repository 'zenoss' do
  description "Zenoss Stable repo"
  baseurl "http://dev.zenoss.com/yum/stable/"
  gpgkey 'http://dev.zenoss.com/yum/RPM-GPG-KEY-zenoss'
  action :create
end

このように書き換えることができるってことですね。

公式のページからサンプルは拝借しました。
公式文書 http://docs.opscode.com/lwrp_yum.html

追記2014/07/13
Chef11でPostgresqlのyumリポジトリを追加してみる。(まだできてない)
こちらにyum_repositoryを試そうと思って作業した結果を記載しましたが、うまくいかないので当面はrpmのインストールで行こうかと思います。
恐らく、rpmをぬかしてからテストしなければいけないのではないかと推測していますが。

それよりはREADME.mdの充実をしようかと思います。

追記2014/07/13
日本語のREADME.mdを記述した部分が…日本語が変だったので修正。

追記2014/07/14
githubで公開しているリポジトリの、README.md,CHANGELOG.md,metadata.rb などのファイルを書き換えました。
日本語ではまだ書き切れていないのと、英語で書くのも慣れていないので間違いなどたくさんあるかと思いますが、質問があれば聞いてもらえるとうれしいですね。