まっしろけっけ

めもてきなやーつ

chefレシピ記述色々

package

前回の記事でも使用したpackageの色々

nginxをインストール
version hogeを指定

package "nginx" do
  action :install
  version "hoge"
end

actionの種類(一部)

  • install パッケージをインストール
  • upgrate レシピを実行した際に最新版にアップグレード
  • remove パッケージ削除

gem_package

任意のgemのinstall

rakeをインストール

gem_package "rake" do
  action :install
end

gemコマンドのパスを指定
versionも指定

gem_package "rake" do
  gem_binary "gem_file_path"
  version "0.0.1"
  action :upgrade
end

テンプレートから設定ファイルの配置

templateはAttributeを利用したい場合に使用する

/etc/nginx/nginx.confにおかれたファイルを管理

template "nginx.conf" do
  path "/etc/nginx/nginx.conf"
  source "nginx.conf.erb"
  owner "root"
  group "root"
  mode 0644
end

pathは配布するディレクトリのパス
sourceはcookbook templates/default以下にある配布したいファイルを指定
owner, groupでそれぞれ所有者とグループを指定しmodeでパーミッションを指定

下記の様に省略も可能

template "/etc/nginx/nginx.conf" do
  owner "root"
  group "root"
  mode 0644
end

省略した場合chefがルールに従いファイルなどを選択します

Attributeを使用する

cookbook内のattributes内にファイルを作成

$ vi cookbooks/hoge/attributes/default.rb
default[:packages] = %w{zsh gcc make readline-devel}
$ vi cookbooks/hoge/recipes/default.rb
node[:packages].each do |package_name|
  package package_name do
    action :install
  end
end

attributes/default.rbでdefault[:packages]に格納した値を
recipesで使用することができます。
recipes以外にもtemplates内のファイルでも使用出来るので
nginx.confのport番号等をattributesで管理も可能になります。

attributesでの変数への格納がdefaultなのは
roles/内のjsonファイルで上書きができるからです

service

サービス系packageの起動など

nginxの起動
status, restart, reloadが使えるよっていう指定をする

service "nginx" do
  action [ :enable, :start ]
  supports :status => true, restart => true, reload => true
end

nginx.confが更新された場合にreloadする
上記に加えて下記を記述

template "/etc/nginx/nginx.conf" do
  notifies :reload, 'service[nginx]'
end

service "nginx"を探してreload処理を行ってくれます。

file操作

任意のファイルを配布したい

/tmp/hoge.txtとして
files/default/hoge.txtをパーミッション0644で配布

cookbook_file "/tmp/hoge.txt" do
  source "hoge.txt"
  owner "root"
  group "root"
  mode 0644
end
ディレクトリを操作したい

/etc/hogeのディレクトリを作成
所有者,グループroot パーミッション0777

derectory "/etc/hoge" do
  owner "hoge"
  group "hoge"
  mode 0777
  action :create
end

action

  • create ディレクトリ作成
  • delete ディレクトリ削除

ユーザ,グループ作成

ユーザhogeを作成

user "hoge" do
  comment "hoge"
  home "/home/hoge"
  shell "/bin/bash"
  password nil
  supports :manage_home => true
end

グループhogeを作成

group "hoge" do
  gid 999
  members ['hoge', 'test']
  action :create
end

gitレポジトリからファイル取得

/tmp/railsにgit://github.com/rails/rails.gitのmasterブランチからファイルを取得

git "/tmp/rails" do
  repository "git://github.com/rails/rails.git"
  reference "master"
  action :checkout
  user "root"
  group "root"
end

シェルスクリプト実行

touch /tmp/hoge.txtをユーザhogeで実行実行

bash "create hoge.txt" do
   user "hoge"
   group "hoge"
   environment "HOME" => "/home/hoge"
   cwd "/home/hoge"
   code <<-EOH
     touch /tmp/hoge.txt
   EOH
   creates "/tmp/hoge.txt"
end

cwdでカレントディレクトリを指定し
environmentで環境変数を設定
codeに実行するスクリプトを指定
createsで/tmp/hoge.txtがあった場合はスクリプトを実行しないことを指定

その他

その他に関してはこちらのドキュメントにいっぱいのってます。
実際に使用したものはメモてきにここに追記していこうかと思ってます