Làm quen với chef – Infrastructure as Code (2)

Dạo này mình có việc riêng nên mãi không update được bài mới nào về chef. Hơn nữa gần đây thì lại đụng vào ansible nhiều hơn nên cũng chưa tìm hiểu thêm về chef được mấy. 🙁 Hôm nay lại viết tiếp một phần sử dụng đơn giản của chef.
Lần trước mình đã tạo một một thư mục chef-repo chuyên dùng để quản lý cookbooks và recipes.
Bài trước
Dùng knife để tạo một cookbooks
Thử tạo một cookbook tên là hello trong thư mục cookbooks. Dùng lênh knife cookbook
tuan:~/boxes/ $ cd chef-repo
tuan:~/boxes/chef-repo $ knife cookbook create hello -o cookbooks
** Creating cookbook hello
** Creating README for cookbook: hello
** Creating CHANGELOG for cookbook: hello
** Creating metadata for cookbook: hello
tuan:~/boxes/chef-repo $
tuan:~/boxes/chef-repo $ tree -L 2 cookbooks/
cookbooks/
└── hello
├── CHANGELOG.md
├── README.md
├── attributes
├── definitions
├── files
├── libraries
├── metadata.rb
├── providers
├── recipes
├── resources
└── templates

Chỉnh sửa một recipe trong cookbook hello
Ví dụ mình sẽ tạo một recipe cài đặt nginx
Nội dung file như sau
tuan:~/boxes/chef-repo $ vim cookbooks/hello/recipes/default.rb
########
package "nginx" do
action :install
end

service “nginx” do
action [ :enable, :start ]
end
template “nginx.conf” do
path “/etc/nginx/nginx.conf”
owner “root”
group “root”
mode 0644
notifies :reload, ‘service[nginx]’
end
########
Tạo file thiết định
Mình sẽ tạo một file json thiết định cho localhost
tuan:~/boxes/chef-repo $ vim nodes/localhost.json
########
{
"nginx": {
"port": 80
},
"run_list":[
"recipe[nginx]"
]
}
########

Tạo một máy ảo để làm target thực hiện chef
Cách cài đặt Vagrant
– Đầu tiên là phải cài VirtualBox trước
https://www.virtualbox.org/wiki/Downloads
– Sau đó là cài vagrant,
http://downloads.vagrantup.com/
Cách này thì đơn giản, chỉ cần vào link trên và download phiên bản phù hợp và cài
Cài đặt base box
Sau khi cài xong vagrant thì việc đầu tiên cần làm là cài base box. Base box cũng giống như 1 file ISO để cài 1 máy ảo, nhưng nó được tối ưu để sử dụng với vagrant. Thường thì Base box là Ubuntu LTS (Lucid, Precise) 32bit và sử dụng 384MB, tuy nhiên cũng có những community box (http://www.vagrantbox.es/).
Base box sẽ được cài 1 lần duy nhất, từ 1 base box thì nhiều virtual machine sẽ được setup và provision (cài đặt các libraries cần thiết) tuỳ theo yêu cầu từng project.
tuan:~/boxes $ vagrant box add centos https://s3.amazonaws.com/itmat-public/centos-6.3-chef-10.14.2.box
Vào thư mục của project, chạy 2 câu lệnh sau
tuan:~/boxes $vagrant init centos
uan:~/boxes $ vagrant up
/Applications/Vagrant/embedded/gems/gems/vagrant-1.3.5/lib/vagrant/util/which.rb:32: warning: Insecure world writable dir /usr/local/heroku/bin in PATH, mode 040777
Bringing machine 'default' up with 'virtualbox' provider...
[default] Clearing any previously set forwarded ports...
[default] Creating shared folders metadata...
[default] Clearing any previously set network interfaces...
[default] Preparing network interfaces based on configuration...
[default] Forwarding ports...
[default] -- 22 => 2222 (adapter 1)
[default] Booting VM...

Dòng đầu tiên có nghĩa là vagrant sẽ tạo 1 file configuration cho máy ảo (Vagrantfile) sử dụng centos-6.3-chef-10.14.2.box. Trong Vagrantfile đã có sẵn sample configuration và comments nên chắc không cần giải thích thêm ở đây.
Dòng tiếp theo là khởi động máy ảo (tầm 1,2 phút tuỳ cấu hình máy chủ)
Thực hiện chef cookbook vừa mới tạo
tuan:~/boxes/chef-repo $ bundle exec knife solo cook localhost