configspec で Dockerfile を生成できるようにした

configspec とか Immutable Infrastructure について、@kazuho さんから色々とありがたいツッコミをいただきまして、その中で

個人的にはSCMあるいはLVMの管理下において、record-cmd yum -y install httpd とかすると、コマンドがSCMのコメントに残りつつ、ファイルシステムに発生した差分が変更履歴として保存されるくらいでいいんじゃないかと思う

— Kazuho Oku (@kazuho) November 26, 2013

といった tweet があり、それは Docker でやれるけど、configspec でやることではないなー、と思っていたところ、ふと

configspec から Dockerfile を生成する、というアプローチもありな気がしてきた。

— Gosuke Miyashita (@gosukenator) November 26, 2013

ってなことを思いつき、時同じくして @naoya_ito さんからも

@gosukenator configspecみたいなのがDockerfileを出力すればいいと思います

— Naoya Ito (@naoya_ito) November 26, 2013

とリプライいただいたので、早速実装してみた。v0.0.5 では、以下の様に Dockerfile の生成ができます。

$ configspec-init
Select a backend type:

  1) SSH
  2) Exec (local)
  3) Dockerfile

Select number: 3

 + spec/
 + spec/001_httpd_spec.rb
 + spec/spec_helper.rb
 + Rakefile

$ rake spec
/opt/boxen/rbenv/versions/2.0.0-p247/bin/ruby -S rspec

Package "httpd"
  should be installed

Finished in 0.00229 seconds
1 example, 0 failures

$ cat Dockerfile
RUN yum -y install httpd

まだ RedHat 系のパッケージインストールしか対応してないので、RUN yum -y install しか出力できないけど、おいおい対応していきます。

(というか、RSpec で副作用のある何かするの、@r7kamura 氏のネタに乗っかった側面が強いんだけど、本当にこの方向性でいいの?って気がしなくもない。)