Chef 実践入門(1) クックブック
Chef実践入門 ~コードによるインフラ構成の自動化 (WEB+DB PRESS plus)
- 作者: 吉羽龍太郎,安藤祐介,伊藤直也,菅井祐太朗,並河祐貴
- 出版社/メーカー: 技術評論社
- 発売日: 2014/05/22
- メディア: 単行本(ソフトカバー)
- この商品を含むブログ (7件) を見る
今回も写経。
コミュニティクックブック
クックブックを検索する
$ knife cookbook site search apache2
apache:
cookbook: http://cookbooks.opscode.com/api/v1/cookbooks/apache
cookbook_description: various apache server related resource provides (LWRP)
cookbook_maintainer: melezhik
cookbook_name: apache
apache2:
cookbook: http://cookbooks.opscode.com/api/v1/cookbooks/apache2
cookbook_description: Installs and configures all aspects of apache2 using Debian style symlinks with helper definitions
cookbook_maintainer: onehealth
cookbook_name: apache2
apache2-windows:
cookbook: http://cookbooks.opscode.com/api/v1/cookbooks/apache2-windows
cookbook_description: Installs and configures Apache on Microsoft Windows platforms.
cookbook_maintainer: dlrobinson
cookbook_name: apache2-windows
(略)
クックブックの詳細を見る
$ knife cookbook site show apache2 | head -20
average_rating:
category: Other
created_at: 2009-10-25T23:47:55.000Z
deprecated: false
description: Installs and configures all aspects of apache2 using Debian style symlinks with helper definitions
external_url: http://github.com/opscode-cookbooks/apache2
latest_version: http://cookbooks.opscode.com/api/v1/cookbooks/apache2/versions/2.0.0
maintainer: onehealth
metrics:
downloads:
total: 11815036
versions:
0.10.0: 227842
0.10.1: 227941
0.11.0: 227831
0.12.0: 227835
0.12.1: 227865
0.12.2: 227868
0.12.3: 228022
0.9.1: 227976
クックブックの一覧
$ knife cookbook site list
Berkshelf
$ cat Berksfile
site :opscode
cookbook 'yum-epel'
cookbook 'apache2'
cookbook 'mysql'
$ berks
DEPRECATED: Your Berksfile contains a site location pointing to the Opscode Community Site (site :opscode). Site locations have been replaced by the source location. Change this to: 'source "https://supermarket.getchef.com"' to remove this warning. For more information visit https://github.com/berkshelf/berkshelf/wiki/deprecated-locations
Resolving cookbook dependencies...
Fetching cookbook index from https://supermarket.getchef.com...
Installing apache2 (2.0.0)
Installing logrotate (1.6.0)
Installing iptables (0.13.2)
Installing mysql (5.3.6)
Installing pacman (1.1.1)
Installing yum (3.2.2)
Installing yum-epel (0.4.0)
Installing yum-mysql-community (0.1.10)
$ vi Berksfile
$ cat Berksfile
source "https://supermarket.getchef.com"
cookbook 'yum-epel'
cookbook 'apache2'
cookbook 'mysql'
default.rb 以外のレシピ
recipe[apache2::mod_deflate]
default.rb の代わりに mod_deflate.rb が使われるルール。
Attribute の上書き
Node オブジェクトで apache2 の Attribute を上書き。
$ cat nodes/webdb.json
{
"apache": {
"listen_ports": [ 8080],
"keepalive": "Off",
"docroot_dir": "/home/vagrant/htdocs"
},
"run_list": [
"recipe[dstat]",
"recipe[apache2]",
"recipe[mysql]"
],
"automatic": {
"ipaddress": "webdb"
}
}
Chef Solo で複数ノードを管理する
Vagrant マルチ VM 機能
diff --git a/Vagrantfile b/Vagrantfile
index 0f53f00..660dfe6 100644
--- a/Vagrantfile
+++ b/Vagrantfile
@@ -12,6 +12,9 @@ Vagrant.configure(VAGRANTFILE_API_VERSION) do |config|
# Every Vagrant virtual environment requires a box to build off of.
config.vm.box = "opscode-centos-6.5"
+ config.vm.define :node01
+ config.vm.define :node02
+
# Disable automatic box update checking. If you disable this, then
# boxes will only be checked for updates when the user runs
# `vagrant box outdated`. This is not recommended.
ロール
diff --git a/nodes/node01.json b/nodes/node01.json
new file mode 100644
index 0000000..4bcece1
--- /dev/null
+++ b/nodes/node01.json
@@ -0,0 +1,5 @@
+{
+ "run_list": [
+ "role[web]"
+ ]
+}
diff --git a/nodes/node02.json b/nodes/node02.json
new file mode 100644
index 0000000..4bcece1
--- /dev/null
+++ b/nodes/node02.json
@@ -0,0 +1,5 @@
+{
+ "run_list": [
+ "role[web]"
+ ]
+}
diff --git a/roles/web.json b/roles/web.json
new file mode 100644
index 0000000..609467f
--- /dev/null
+++ b/roles/web.json
@@ -0,0 +1,9 @@
+{
+ "name": "web",
+ "chef_type": "role",
+ "json_class": "Chef::Role",
+ "run_list": [
+ "recipe[git]",
+ "recipe[apache2]"
+ ]
+}
Environments
diff --git a/environments/development.json b/environments/development.json
new file mode 100644
index 0000000..489416e
--- /dev/null
+++ b/environments/development.json
@@ -0,0 +1,13 @@
+{
+ "name": "development",
+ "description": "Development environment",
+ "chef_type": "environment",
+ "json_class": "Chef::Environment",
+ "default_attributes": {
+ "apache": {
+ "max_children": "10"
+ }
+ },
+ "override_attributes": {
+ }
+}
Attribute の優先度
- Node オブジェクト
- ロール
- Environments
- レシピの中で定義された Attribute
- クックブック内の Attribute ファイル
複数ノードへ Chef Solo を実行
$ vagrant ssh-config --host node01 --host node02 >> ~/.ssh/config
$ echo node01 node02 | xargs -n 1 knife solo bootstrap
$ echo node01 node02 | xargs -n 1 knife solo cook