ローファイ日記

出てくるコード片、ぼくが書いたものは断りがない場合 MIT License としています http://udzura.mit-license.org/

packer-provisioner-serverspec というPackerプラグインを書いた

以前、Qiitaでこういう記事を書いたんですが:

qiita.com

これと同じコンセプトで、最低限の設定で作成後のイメージにServerspecを走らせるためのプラグインを書きました。

github.com

インストールは、今のところ自分でビルドする必要があります(もうちょいちゃんとしたらバイナリを配りたい)。

# Needs Go >= 1.3
$ git clone https://github.com/udzura/packer-provisioner-serverspec.git
$ cd packer-provisioner-serverspec
$ make install

設定はこんな感じで。

{
    "builders" : [
        {
            "type": "amazon-ebs",
            "ssh_username": "centos",
            "ssh_pty": true,
            "...": "..."
        }
    ],

    "provisioners": [
        {
            "type": "shell",
            "script": "/path/to/your-provisoner.sh"
        },
        {
            "type": "serverspec",
            "source_path": "/path/to/your/serverspec-root"
        }
    ]
}

今はα版ということ(にしておく)で、いろいろな条件が固定です。

  • sshのユーザはsudoできないといけない
  • "ssh_pty": true でないといけない(Packer 0.8からだそうです。参考
  • rakeタスクは rake spec でないといけない
  • ディレクトリ構成はこんな感じがよさそう
/path/to/your/serverspec-root
├── Gemfile # Gemfileとlock、必ずしも必要なし
├── Gemfile.lock
├── Rakefile
└── spec
    ├── localhost
    │   ├── cloud_init_spec.rb
    │   ├── hosts_spec.rb
    │   ├── packages_spec.rb
    │   └── users_spec.rb # and so on...
    └── spec_helper.rb

Serverspec自体のインストールは omnibus を使っています。 @sawanoboly さんは神です。おかげで、CentOSUbuntuであればひとまず動きそうです。あ、Ubuntuはちゃんと検証していません......

rake spec が終わったらserverspecパッケージとアップしたserverspecのディレクトリは綺麗に消します。

そんな感じで、機能はまだ全然足りないですが、お試しください。


PR

こういうPackerの深い話、具体的にはprovisionerだけでなくbuilderまで自作した事例を、 HackerTackleというイベントで話します。ついでに、 Consulの話とかなんか抽象的な話もしちゃいます。

hakat.connpass.com

なんと! 明日 なんですが、会場かなり余裕があるので、今から登録しても参加できると思います!

九州に住んでいない人も、今から飛行機を取れば全然間に合います!

という感じで、深い話ができ、なおかつ最前線(自分を棚にあげる)のエンジニアに質問できたり、がっつり議論できる貴重な場だと思います。博多でお待ちしております!