前回の続き、nantonaku-shiawase.hatenablog.com
ツールについての概要
・chefはcookbookというスクリプトの集合を使って、そのスクリプトの通りにソフトウェアをインストールする
・cookbookはいろいろな人が公開している
しかし、他人の使ったcookbookを自ら改造したりするのは車輪の再発明だし、ごちゃごちゃになってしまう。
そこで登場するのがBerkshelfだ。
Berkshelfはこれまたrubyで出来たソフトウェア。Berksfileに必要なパッケージを書くことで、常に最新のchefのcookbookをインストールしてくれる。さらには依存関係についても設定できるらしい。つってもこの辺のソフトウェアは日進月歩で何をやろうにもごちゃごちゃしている、はよ淘汰されて枯れなさい!
Berkshelfを使った場合のVagrantfileの構成
Berkshelfを使用するとVagrantfileに書いてやる。そうするとvagrant upしたときにBerkshelfがまずアップデートされる。
下の方に解説をば…
# -*- mode: ruby -*- # vi: set ft=ruby : # Vagrantfile API/syntax version. Don't touch unless you know what you're doing! VAGRANTFILE_API_VERSION = "2" Vagrant.configure(VAGRANTFILE_API_VERSION) do |config| # Every Vagrant virtual environment requires a box to build off of. config.vm.box = "fedora-20" config.vm.box_url = "https://dl.dropboxusercontent.com/u/15733306/vagrant/fedora-20-netinst-2014_01_05-minimal-puppet-guestadditions.box" config.omnibus.chef_version = :latest config.berkshelf.enabled = true # use chef_solo config.vm.provision "chef_solo" do |chef| chef.cookbooks_path = ["./cookbooks", "./site-cookbooks"] chef.run_list = [ "recipe[yum]", "recipe[apache2]", "recipe[apache2::mod_php5]", "recipe[apache2::mod_rewrite]", "recipe[php]", "recipe[cpan]", "recipe[git]" ] # original cookbook chef.add_recipe 'foltia::default' end end
config.omnibus.chef_version = :latest
前回の記事ではomnibus installerを生のシェルスクリプトで実行していたが、Vagrantのプラグインを使用すると、この1行でゲスト環境へのchefのインストールが完了する。
config.berkshelf.enabled = true
いるのかわからん。
chef.run_list
後述のBerksfileで指定したcookbookを実行する
Berkshelfの構成
Berksfile
・1行目は「source 'https://api.berkshelf.com'」と書くのが最新の文法らしい
・最後の行にローカルのcookbookを指定している。これをしないとchefが実行されない!
source 'https://api.berkshelf.com' cookbook "php" cookbook "apache2" cookbook "git" cookbook "cpan" cookbook "foltia", path: "./site-cookbooks/foltia"
依存関係ライブラリの使用法
foltiaはいくつかcpanのライブラリを使用する。この時はsite-cookbooks/
$ cat ./site-cookbooks/foltia/metadata.rb name 'foltia' maintainer 'YOUR_COMPANY_NAME' maintainer_email 'YOUR_EMAIL' license 'All rights reserved' description 'Installs/Configures foltia' long_description IO.read(File.join(File.dirname(__FILE__), 'README.md')) version '0.1.0' depends 'cpan'
dependsに依存関係を書いてやれば、include_recipeすれば、そのレシピで定義された機能が使えるはず。(使えるけどエラーが出る場合もある)
$ cat ./site-cookbooks/foltia/recipes/default.rb # # Cookbook Name:: foltia # Recipe:: default # # Copyright 2015, Hiroyuki Nagata # # All rights reserved - Do Not Redistribute # include_recipe 'cpan::bootstrap' cpan_client 'Time::HiRes' do action 'install' install_type 'cpan_module' user 'root' group 'root' end