m_shige1979のときどきITブログ

プログラムの勉強をしながら学習したことや経験したことをぼそぼそと書いていきます

Github(変なおっさんの顔でるので気をつけてね)

https://github.com/mshige1979

chefの学習(レシピを作成)

レシピ

パッケージやコマンドの制御を記載したもの。

apacheレシピ
sudo knife cookbook create apache -o /var/chef/cookbooks

で作成して

/var/chef/cookbooks/apache/recipes/default.rb

package "httpd" do
  action :install
end

package "httpd-devel" do
  action :install
end

service "httpd" do
  action [ :enable, :start  ]
end

パッケージを1つずつインストールする場合は毎回記載しなくてはならない…

phpレシピ
sudo knife cookbook create php -o /var/chef/cookbooks

で作成して

/var/chef/cookbooks/php/recipes/default.rb

%w{php php-devel}.each do |item|
  package item do
    action :install
  end
end

rubyで記載するのでこのように記載してリスト制御を行うことができるとのこと(私はrubyはあまり知らないけど…)

MySQLレシピ
sudo knife cookbook create mysql -o /var/chef/cookbooks

で作成して

/var/chef/cookbooks/mysql/recipes/default.rb

%w{mysql mysql-devel mysql-server}.each do |item|
  package item do
    action :install
  end
end

service "mysqld" do
  action [ :enable, :start  ]
end

実行

複数指定することでまとめて実行

[vagrant@localhost ~]$ sudo chef-solo -o apache,php,mysql
[2014-07-13T04:50:08+00:00] WARN: *****************************************
[2014-07-13T04:50:08+00:00] WARN: Did not find config file: /etc/chef/solo.rb, using command line options.
[2014-07-13T04:50:08+00:00] WARN: *****************************************
[2014-07-13T04:50:08+00:00] WARN:
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
SSL validation of HTTPS requests is disabled. HTTPS connections are still
encrypted, but chef is not able to detect forged replies or man in the middle
attacks.

To fix this issue add an entry like this to your configuration file:

```
  # Verify all HTTPS connections (recommended)
  ssl_verify_mode :verify_peer

  # OR, Verify only connections to chef-server
  verify_api_cert true
```

To check your SSL configuration, or troubleshoot errors, you can use the
`knife ssl check` command like so:

```
  knife ssl check -c /etc/chef/solo.rb
```

* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *

Starting Chef Client, version 11.12.8
[2014-07-13T04:50:16+00:00] WARN: Run List override has been provided.
[2014-07-13T04:50:16+00:00] WARN: Original Run List: []
[2014-07-13T04:50:16+00:00] WARN: Overridden Run List: [recipe[apache], recipe[php], recipe[mysql]]
Compiling Cookbooks...
Converging 9 resources
Recipe: apache::default
  * package[httpd] action install
    - install version 2.2.15-30.el6.centos of package httpd

  * package[httpd-devel] action install
    - install version 2.2.15-30.el6.centos of package httpd-devel

  * service[httpd] action enable
    - enable service service[httpd]

  * service[httpd] action start
    - start service service[httpd]

Recipe: php::default
  * package[php] action install
    - install version 5.3.3-27.el6_5 of package php

  * package[php-devel] action install
    - install version 5.3.3-27.el6_5 of package php-devel

Recipe: mysql::default
  * package[mysql] action install
    - install version 5.1.73-3.el6_5 of package mysql

  * package[mysql-devel] action install
    - install version 5.1.73-3.el6_5 of package mysql-devel

  * package[mysql-server] action install
    - install version 5.1.73-3.el6_5 of package mysql-server

  * service[mysqld] action enable
    - enable service service[mysqld]

  * service[mysqld] action start
    - start service service[mysqld]


Running handlers:
Running handlers complete

Chef Client finished, 11/11 resources updated in 216.118470292 seconds
[vagrant@localhost ~]$

※少し時間がかかります。

リポジトリとか指定していないのでデフォルトのものになる感じかな?

php54サンプル

レシピ
sudo knife cookbook create php54 -o /var/chef/cookbooks


/var/chef/cookbooks/php54/recipes/default.rb

remote_file "#{Chef::Config[:file_cache_path]}/latest.rpm" do
  source "http://mirror.webtatic.com/yum/el6/latest.rpm"
  not_if "rpm -qa | grep -q '^latest'"
  action :create
  notifies :install, "rpm_package[latest]", :immediately
end

rpm_package "latest" do
  source "#{Chef::Config[:file_cache_path]}/latest.rpm"
  action :nothing
end

%w{php54w php54w-bcmath php54w-cli php54w-common php54w-dba php54w-devel php54w-embedded php54w-enchant php54w-fpm php54w-gd php54w-imap php54w-interbase php54w-intl php54w-ldap php54w-mbstring php54w-mcrypt php54w-mssql php54w-mysqlnd php54w-odbc php54w-pdo php54w-pear php54w-pecl-apc php54w-pecl-apcu php54w-pecl-apcu-devel php54w-pecl-gearman php54w-pecl-memcache php54w-pecl-xdebug php54w-pecl-zendopcache php54w-pgsql php54w-process php54w-pspell php54w-recode php54w-snmp php54w-soap php54w-tidy php54w-xml php54w-xmlrpc}.each do |item|
  package item do
    action :install
  end
end

リポジトリをダウンロードしないといけないらしく多少手間です。

まとめ

1つ1つのものをまとめておくことでリポジトリの参照先やソースインストールなどが変わった際、その部分のみを変更するだけで対応できそう。shellスクリプトでも分割すればいいかもしれないけど、chefのcookbookとVagrantfileを分離しておいたほうがメンテし易い感じがする。