~nabeken/diary/

Gentoo Linux(6年くらい)とFreeBSD(1年くらい)とOpenBSD(新参者)を使う日々。


IHANet BGP peering overview

Func と Puppet で相互運用してみる part 0

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 などのモジュールはなぜか動かなかった。残念。

IPv6 対応

この時代、まだ gethostbyname() 使ってやがるぜ…。

ソケットの生成に直接 socket.AF_INET 使っているため、ホスト名から IPv4 のみになっている。非常に残念。

python 歴2日目ですが、がんばりました。getaddrinfo と AF_UNSPEC と AI_PASSIVE で、v6/v4 dual stack になりました。http://github.com/nabeken/func/commit/f338a311c9cfde33753017554d5cc32822559206

github

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 に対応していないため)

func の依存しているパッケージ

あとで ebuild 書くためにメモ。

  • certmaster
  • pyopenssl

更新履歴

  • MAINT ログ出力を有効にした (Fri, 27 Jun 2008 17:16:34 +0900)
  • コードと日記の内容が違っていたのを修正 (Tue, 24 Jun 2008 09:52:51 +0900)
  • v6対応がひとまず完了した (Tue, 24 Jun 2008 01:06:51 +0900)
  • テストまで (Sun, 22 Jun 2008 15:06:58 +0900)
  • localhostでのエラーについて (Sun, 22 Jun 2008 13:23:24 +0900)
  • funcのインストールまで (Sun, 22 Jun 2008 02:04:05 +0900)