Posted on Fri Jun 27 17:16:34 +0900 2008 by nabeken
Func は Python, Puppet は Ruby ですが、両方とも XMLRPC over https なのは同じです。また、両者の関係は互いを補完するものです。
使いわけつつも、相互に使えるものは使ってしまおうというのが今回の主旨。…といいつつ、v6対応で手間取ったので、まだ本来の目標にはほど遠いです。
OS は Func が使いやすい CentOS 5.1 にしました。Puppet は以下の設定をして、インストール。
[puppet] name=Puppet baseurl=http://people.redhat.com/dlutter/yum/rhel5/ gpgcheck=0
自前のレシピで必要なパッケージはさくっと入れる。ここは Puppet の仕事。
Func は EPEL プロジェクトが提供する成果物を利用することにする。
http://fedoraproject.org/wiki/EPEL
さっそく設定。
# rpm -Uvh http://download.fedora.redhat.com/pub/epel/5/i386/epel-release-5-2.noarch.rpm # yum install func
certmaster に接続する際、自身の hostname 決定時に localhost のままだとエラーが出る模様。/etc/hosts を修正して、127.0.0.1 以外でも自身の hostname に mapping できるようにする。
なお、 func の設定は /etc/func/minion.conf ではなくて、 /etc/certmaster/minion.conf になる。これ重要。
# func "*.tokyo.tknetworks.org" call command run date [0, 'Sun Jun 22 09:39:08 JST 2008n', '']
Python API から叩けば、結果は配列として受けとれるのだろう。このあたりが Capistrano とは違うと思う。yumcmd や hardware などのモジュールはなぜか動かなかった。残念。
この時代、まだ gethostbyname() 使ってやがるぜ…。
ソケットの生成に直接 socket.AF_INET 使っているため、ホスト名から IPv4 のみになっている。非常に残念。
python 歴2日目ですが、がんばりました。getaddrinfo と AF_UNSPEC と AI_PASSIVE で、v6/v4 dual stack になりました。http://github.com/nabeken/func/commit/f338a311c9cfde33753017554d5cc32822559206
github に func のリポジトリがあったので、まずはそこから fork します。
そのあと、まず自分で git.fedoraproject.org から pull したリポジトリに fork した github 上のリポジトリを fetch します。
# git fetch git@github.com:nabeken/func.git master:github-func // remote の master を local の github-func ブランチに fetch する
で、 rebase しようとしたら、なんかもうそもそも git.f.org 側で rebase していないものが push されていて、やたらぐちゃぐちゃになっている。
とりあえず、
# git format-patch 'HEAD^'
これで自分の変更点をパッチにする。その後、
# git co github-func # git apply < 0001-mogemoge # git commit # git push git@github.com:nabeken/func.git HEAD:master
で反映しました。http://github.com/nabeken/func/tree/master
pull して、 make build && make install してください。
このパッチは certmaster であらかじめ証明書への署名は完了しているのを前提にしています。(certmasterはまだ v6 に対応していないため)
あとで ebuild 書くためにメモ。