ChefのRecipeだけVagrantでつかう
Apache+mod_php 5.3をOSXで作ろうとおもったけど、環境汚さずに良い感じにいれるのがダルかったので、ひさびさにVagrantをいじっておりますが、数ヶ月放置してたレシピが腐ってつかえなくなってたuzullaですこんばんわ。
いや、そういう用途にはPuPHPetっていいかんじのがあるんですけど、
https://puphpet.com/
これ、vagrant upするとエライ勢いでエラー出るんですよね。まあうごくんですけど、不安でしゃーないので、自分で書くしかない。*1
さて、放置するとサードパーティー(というか本家)のレシピは仕様がかわるというのでちょっと悩んでいて、あー結局レシピ全部手書きでメンテしかないかなーっておもったけど、はたしてその状態で環境をとっておくための、利用頻度の低い「soloの」Chefの意味がどれだけあるのかと悩んでおります。
「腐らない」スクリプトのほうが、数年後使うハメになるとか、そういう場合には良いのではないか…。
さておき、VagrantではChefのRecipeを手軽につかえますね。Recipeが簡単につかえるのであって、Chefがどうこうではない*2。Recipeをシェルスクリプトみたいな風にみるやつですね。
Vagrant VirtualBox入れる、Bakeshelfもいれる
省略、適当にいれる、BakeshelfはGemとかでいれる。ChefやKnife-soloはいらない(けど、BakeShelfいれたら入るのかな)
VMのイメージ(box)はChef対応のやつを選びましょう。
ファイル構造
vmのディレクトリ ├── Berksfile ├── Vagrantfile ├── cookbooks │ └── Berkshelfで自動的に入るやつ └── site-cookbooks └── 自分のレシピ
Berksfile書く
たとえば
site :opscode cookbook "yum" cookbook "yum-epel" cookbook "mysql" cookbook "database" cookbook "simple_iptables"
その後
berks install -p cookbooks
してサードパーティーRecipeをcookbooksにいれておく。
site-cookbookに好きに書く
省略、自作のrecipeをsite-cookbooksにいれておく。
本当はもう全部どっかのRepoで管理して、Berksfileにまとめて書くべきで、site-cookbooksは書くべきではないなーとはおもってます(が、それにしても多少はのこるよね!)
Vagrantfile書く
たとえば
Vagrant.configure(VAGRANTFILE_API_VERSION) do |config| (略) config.vm.provision :chef_solo do |chef| #chef.log_level = :debug chef.cookbooks_path = ["./cookbooks", "./site-cookbooks"] # <-- 配列でわたせる chef.add_recipe "yum-epel" # <-- レシピを指定する chef.add_recipe "mysql::server" chef.add_recipe "install-httpd-php" chef.add_recipe "create-virtualhost" chef.add_recipe "setiptables" chef.json = { # <-- node/*.jsonみたいなのを書ける mysql: { server_root_password: "greatpass", server_repl_password: "greatpass", server_debian_password: "greatpass", bind_address: "127.0.0.1" }, vhost: { site_admin_email: "admin@example.co.jp", site_fqdn: "example.jp", site_root_dir: "/vagrant_data/code/public/", site_db: "app", site_db_user: "app", site_db_pass: "app-greatpass" } } end end
みたいなの書く。
knifeでいうところのnode/hogehoge.jsonがそのまま書けるの最近までしらなかったですね、まあとかにかく便利だ。
あとはvagrant upだ。
recipeのテスト(というか修正というか)は vagrant provisionでOKだ。