ラベル Chef の投稿を表示しています。 すべての投稿を表示
ラベル Chef の投稿を表示しています。 すべての投稿を表示

2013-08-13

Ruby2.0.xでchefを使ってみる

http://rubyinstaller.org/downloads/から

1. Ruby 2.0.0-p247
2. DevKit-mingw64-64-4.7.2-20130224-1432-sfx.exe

をダウンロードしてインストール

gemでchefクライアントをインストール
C:\> gem install chef --no-ri --no-rdoc

そして動作確認
C:\> knife node list
C:/Ruby/lib/ruby/site_ruby/2.0.0/rubygems/core_ext/kernel_require.rb:51:in `require': cannot load such file -- win32/process (LoadError)

win32/processがロードできないと怒られてしまいました(´・ω・`)
gemでインストールしてあげました

C:\> gem install win32-process --no-ri --no-rdoc

そして、リトライ
C:\> knife node list
C:/Ruby/lib/ruby/site_ruby/2.0.0/rubygems/core_ext/kernel_require.rb:51:in `require': cannot load such file -- windows/handle (LoadError)

今度はwindows/handlerがロードできないといわれてしまいました
windows-handlerというのを入れれば良いのかと思いきや、入れるべきはwindows-prというモジュールらしい

C:\> gem install windows-pr --no-ri --no-rdoc

もう一度トライ!
C:\> knife node list
node1

でましたヾ(*・∀・)ノ"

2013-06-28

Chefサーバにバイナリファイルを含むcookbookをアップロードするとエラーになる件

chef-server-11.0.8で運用していますが
ここにcookbook_fileとしてバイナリファイルを含むcookbookをアップロードして
WebUIからそのcookbookの中身を表示しようとすると
「ERROR: undefined method `close!' for nil:NilClass」
というエラーに見舞われました


調べてみると

https://tickets.opscode.com/browse/CHEF-3952

という記事にたどり着き、どうやらバグのようです
この記事に従い
/opt/chef-server/embedded/service/gem/ruby/1.9.1/gems/chef-11.4.0/lib/chef/rest.rb
/opt/chef-server/embedded/lib/ruby/gems/1.9.1/gems/chef-11.4.0/lib/chef/rest.rb

の245行目を

tempfile.close!
↓
tempfile.close! if tempfile

と変更して

chef-server-ctl restart

してあげると表示されるようになりましたよヾ(*・ω・)シ

2013-06-25

[Chef]recipe内の処理の実行順序について

通常recipeの実行は
1.compiling
2.converging
と進みcompiling時にresource外のrubyスクリプトが実行され、converging時にresourceのactionが実行される
これだとresourceでファイルを作成し、そのファイルに対してrubyスクリプトで何か処理を加えるみたいな場合にrubyスクリプト実行時にはまだファイルは生成されておらずエラーになってしまう
そこでhttp://docs.opscode.com/resource_common_compile.htmlによれば
r=file "/tmp/hoge" do
    action :nothing
end
r.run_action(:create)
puts File.exists?("/tmp/hoge")
みたいな感じにするとcompile時にresourceのactionを実行できるようだ

次のようなrecipeを作成して実行してみた
ruby_block "run 3rd" do
        block do
                puts "run 3rd"
        end
        action :create
end

r=ruby_block "run 2nd" do
        block do
                puts "run 2nd"
        end
        action :nothing
end

puts "run 1st"
r.run_action(:create)

実行結果はこのような感じ
# chef-client
Starting Chef Client, version 11.4.2
[2013-06-25T17:25:32+09:00] WARN: unable to detect ip6address
resolving cookbooks for run list: ["test"]
Synchronizing Cookbooks:
  - test
Compiling Cookbooks...
run 1st
Recipe: test::default
  * ruby_block[run 2nd] action createrun 2nd

    - execute the ruby block run 2nd

Converging 2 resources
  * ruby_block[run 3rd] action createrun 3rd

    - execute the ruby block run 3rd

  * ruby_block[run 2nd] action nothing (up to date)
Chef Client finished, 2 resources updated

2013-05-21

Chefのバックアップ、リストアを試してみた

knife-backupというモジュールを利用して実現できるようです
まずはモジュールのインストール
$ sudo gem install knife-backup --no-ri --no-rdoc
利用できるコマンド
** BACKUP COMMANDS **
knife backup export [COMPONENT [COMPONENT ...]] [-D DIR] (options)
knife backup restore [COMPONENT [COMPONENT ...]] [-D DIR] (options)
とりあえず、全部バックアップしてみる
-Dオプションでバックアップデータを格納するディレクトリを指定
$ knife backup export clients nodes roles environments data_bags cookbooks -D backup
指定したディレクトリに、コンポーネントの種類ごとにサブディレクトリが作成されてバックアップが作成される
$ ls -1 backup
clients
cookbooks
data_bags
environments
nodes
roles
nodesをリストア
既存のnodeの情報が上書きされるけど良いか?と聞いてくるのでYと回答
Nと答えるとそこで終了される
$ knife backup restore nodes -D backup
WARNING: This will overwrite existing data!
Do you want to restore backup, possibly overwriting exisitng data? (Y/N) Y
=== Restoring nodes ===
な感じでリストア完了ヾ(*・ω・)シ

2013-04-26

EC2上のCentOS6.3にChef Server 11.0.6をインストールしてみた

■サーバ側

インスタンスタイプはm1.mediumを利用した→m1.smallでもいけた
ダウンロードサイトよりChef ServerのOmnibus Installerのダウンロード
wget https://opscode-omnibus-packages.s3.amazonaws.com/el/6/x86_64/chef-server-11.0.6-1.el6.x86_64.rpm
yumコマンドでインストール
yum install -y --nogpg chef-server-11.0.6-1.el6.x86_64.rpm
設定
chef-server-ctl reconfigure
テスト
chef-server-ctl test
あとはこのサーバの443番ポートを自分の環境と、Chefで管理しようとしている対象ノードからアクセスできるように設定しておく
ここまで行えば、https://ec2-xxx-xxx-xxx-xxx.ap-northeast-1.compute.amazonaws.com/にブラウザでアクセスすればWeb管理画面が表示される
インストール処理の過程でいわゆるオレオレ証明書が作成されるのでSSL証明書の警告がでる。

■ワークステーション側

ダウンロードサイトよりChef ClientのOmnibus Installerのダウンロードしてインストール
レポジトリの雛形をダウンロードしてきて展開
cd ~/
wget https://github.com/opscode/chef-repo/archive/master.zip
unzip master.zip
mv chef-repo{-master,}
ワークステーション上にknifeの設定ファイルを作成
mkdir ~/chef-repo/.chef
cat <<"EOF" > ~/chef-repo/.chef/knife.rb
current_dir = File.dirname(__FILE__)
log_level                :info
log_location             STDOUT
node_name                "admin"
client_key               "#{current_dir}/admin.pem"
validation_client_name   "chef-validator"
validation_key           "#{current_dir}/chef-validator.pem"
chef_server_url          "https://xxx.xxx.xxx.xxx"
cache_type               'BasicFile'
cache_options( :path => "#{ENV['HOME']}/.chef/checksums" )
cookbook_path            ["#{current_dir}/../cookbooks"]
EOF
Chef Serverからインストール時に作成される認証情報を入手して、ワークステーション側の~/chef-repo/.chef/に配置する
Chef Server上のこのファイル↓
/etc/chef-server/admin.pem
/etc/chef-server/chef-validator.pem
クライアントリストを取得してみて動作確認
$ cd ~/chef-repo
$ knife client list
chef-validator
chef-webui

■ノード側

ワークステーションからbootstrapを実行
※ワークステーションからノードの22番ポートに、ノードからChef Serverの443番ポートにアクセスできるよう設定しておく
knife bootstrap yyy.yyy.yyy.yyy -i ssh_key_file
ワークステーションからノードが登録されたことを確認
$ knife node list
new_node
これでとりあえずはChef Serverからノードを管理できる環境が整いましたヾ(*・ω・)シ

---------- P.S. -----------
※正式なSSL証明書がある場合は、SSL証明書の警告がでないよう置き換えておけば良さそう
/var/opt/chef-server/nginx/ca/chef11.crt
※cookbookのアップロードに失敗する場合はアップロード先URLの設定を書き換えて再起動
/var/opt/chef-server/erchef/etc/app.config
# {s3_url, "[hostname]"},
chef-server-ctl restart