ようへいの日々精進XP

よかろうもん

chef-zero を構築して knife-xenserver と連携してみた一部始終

追記(2013.05.27)

認証周りについて、@urasoko さんより下記のように教えて頂きました。

.pem ファイル自体は必要なものの中身のチェックはされないようです。

現場での運用を考慮すると永続的な node 情報や cookbook 情報の保持等が懸念材料となるので、結局のところ Opscode の Chef Server になってしまうのかなと思ってしまったりしてます。

概要

  • 簡易軽量 Chef Server の chef-zero を使ってみる
  • 構築にあたってはこちらを参考にさせて頂いた
  • 構築後は knife xenserver から利用してみることにする

環境

役割 名前 環境
Chef Server chef-zero Debian 7 / apt-get にて rubyruby-dev をインストール
Chef Client XenServer 上の VM CentOS 6.4
Workstation X1Carbon Debian 7

構築

必要なパッケージのインストール

apt get install ruby ruby-dev libssl-dev

gem にてインストール

gem install chef-zero --no-ri --no-rdoc
Building native extensions.  This could take a while...
Fetching: mixlib-log-1.6.0.gem (100%)
Fetching: hashie-2.0.5.gem (100%)
Fetching: moneta-0.6.0.gem (100%)
Fetching: chef-zero-1.0.1.gem (100%)
Successfully installed puma-2.0.1
Successfully installed mixlib-log-1.6.0
Successfully installed hashie-2.0.5
Successfully installed moneta-0.6.0
Successfully installed chef-zero-1.0.1
5 gems installed

インストール出来た。

ヘルプを確認してみる。

root@debian:~# chef-zero -h
Usage: chef-zero [ARGS]
    -H, --host HOST                  Host to bind to (default: 127.0.0.1)
    -p, --port PORT                  Port to listen on
        --[no-]generate-keys         Whether to generate actual keys or fake it (faster).  Default: false.
    -l, --log-level LEVEL            Set the output log level
    -h, --help                       Show this message
        --version                    Show version

デフォルトはローカルホストのみのアクセスを受け付けるとのことなので全てのホストからアクセスを受けつけるように -H オプションで 0.0.0.0 を指定して chef-zero を起動する。

chef-zero -H 0.0.0.0
>> Starting Chef Zero (v1.0.1)...
>> Puma (v2.0.1) is listening at http://0.0.0.0:8889
>> Press CTRL+C to stop

Web サーバー(puma)が 8889 番で Listen して起動する。ちなみに puma は EngineYard 製の ruby で書かれた Web サーバーで puma の名のごとく動作が速いのが売りらしく、公式サイトでは消費メモリが他の Web サーバー(Unicorn 等)より少ないのも特徴らしい。

初期設定

knife.rb の chef_server_url に chef-zero の IP アドレスとポートを指定する。

chef_server_url          "http://xxx.xxx.xxx.xxx:8889"

chef-zero は @urasoko さんがこちらで書かれている通り、認証が不要とのことで、client_keyvalidation_key 等を無効化してみて試した。

まず client_key を無効化してみると...

knife client list
ERROR: Your private key could not be loaded from /etc/chef/client.pem
Check your configuration file and ensure that your private key is readable

こんな感じでエラーとなるので client_key は chef-zero サーバーにアクセスする為には必須のようだ。また、実際に VM を構築する段階で validation_key の設定を行なっていない場合には下記のようなエラーが出てしまう...。

Connecting to XenServer host xxx.xxx.xxx.xxx...
Creating VM chef-test-zero...
Using template hoge [uuid: 886cd33d-380d-ac9a-83ab-ba0a00c4b7e1]...
VM Name: chef-test-zero
VM Memory: 512 MB

Waiting server... 

Server IPs: xxx.xxx.xxx.xxx,xxxx::xxxx:xxxx:xxxx:xxxx

Waiting for sshd... 
Trying to SSH to xxx.xxx.xxx.xxx...  done
Bootstrapping Chef on xxx.xxx.xxx.xxx
ERROR: Errno::ENOENT: No such file or directory - /etc/chef/validation.pem

となるので、実際に chef-zero を介して chef を利用する場合には client_keyvalidation_key の項目としての設定は必須であるが、中身に関して特にチェックされていないように思われる。なぜなら、client_keyvalidation_key に指定されたファイルは Hosted Chef からダウンロードされたものなので、前述の通り、認証は不要と言えると思う。

動作確認の為 knife client list を実行してみる。

knife client list
chef-validator
chef-webui

上記の通り正常に結果が返ってくる。

cookbook をアップロードしてみる

以前に Hosted Chef に登録した hoge_cookbook を少し弄って登録してみる。

vim hoge_cookbook/templates/default/config.conf.erb

chef-zero で設定されたことが判るように...

welcome to chef-zero

そして chef-zero にアップロードする。

cd ${chef-repo}
knife cookbook upload hoge_cookbook -o ./

アップロード出来たようだ。

Uploading hoge_cookbook  [0.1.2]
Uploaded 1 cookbook.

念の為、登録されている cookbook を確認してみる。

knife cookbook list

アップロードされている。

hoge_cookbook   0.1.2

Hosted Chef と表示のされ方が同じだー。


knife-xenserver との連携

早速、実行してみる

満を持して knife xenserver を実行してみる。

knife xenserver vm create --vm-template 886cd33d-380d-ac9a-83ab-ba0a00c4b7e1 --vm-name chef-test-zero --vm-networks 'Pool-wide network associated with eth0' -r "recipe[hoge_cookbook]" -d chef-full

さらっと bootstrap が終わって chef-zero サーバーから cookbook が同期される。

xxx.xx.xx.xx Thank you for installing Chef!
xxx.xx.xx.xx Starting Chef Client, version 11.4.4
xxx.xx.xx.xx Creating a new client identity for chef-test-zero using the validator key.
xxx.xx.xx.xx resolving cookbooks for run list: ["hoge_cookbook"]
xxx.xx.xx.xx Synchronizing Cookbooks:
xxx.xx.xx.xx   - hoge_cookbook
xxx.xx.xx.xx Compiling Cookbooks...
xxx.xx.xx.xx Converging 1 resources
xxx.xx.xx.xx 
xxx.xx.xx.xx Recipe: hoge_cookbook::default
xxx.xx.xx.xx   * template[/tmp/config.conf] action create
xxx.xx.xx.xx 
xxx.xx.xx.xx     - create template[/tmp/config.conf]
xxx.xx.xx.xx         --- /tmp/chef-tempfile20130526-984-o5lrqf  2013-05-26 14:48:24.721241712 +0900
xxx.xx.xx.xx         +++ /tmp/chef-rendered-template20130526-984-1nk1y24        2013-05-26 14:48:24.720241712 +0900
xxx.xx.xx.xx         @@ -0,0 +1 @@
xxx.xx.xx.xx         +welcome to chef-zero
xxx.xx.xx.xx 
xxx.xx.xx.xx Chef Client finished, 1 resources updated

Name: chef-test-zero
IP Address: xxx.xx.xx.xx
Environment: _default
Run List: recipe[hoge_cookbook]
Done!

念の為、対象の node にアクセスして確認してみる。

ssh node
[root@vm01 ~]# cd /tmp/
[root@vm01 tmp]# ls
config.conf  yum.log
[root@vm01 tmp]# cat config.conf 
welcome to chef-zero

/tmp/ 以下に config.conf ファイルが作成されていて、welcome to chef-zero が確認出来た!

まとめ(追記:2013.05.27)

  • chef-zero は Hosted Chef や既存の Chef Server よりも簡単に扱えるところが良い
  • 結果として、今回のような knife プラグイン等のテストに気軽に使えるところも良い
  • また、node の管理自体がそれほど複雑に行わない場合には chef-zero でも十分実用的だと思われる。ちゃんと運用していくには node 管理や冗長化等を検討する必要がある
  • とすると、やっぱりテスト用途等に限定されてしまいそうである...

knife-xenserver で XenServer を三枚におろす一部始終(リターンズ)(3)

概要

  • 以前に試した knife-xensever を改めて試してみる
  • 前回は XenServer の調子が悪くて断念してしまったこともあり、改めて、knife-xenserver と chef を利用したサーバーの構築を行なってみたい

前回、前々回まで

  • knife-xenserver を利用して VM の作成したりテンプレートの一覧取得等を行った
  • 同様に knife-xenserver を利用して VM の削除を行った
  • knife-xenserver が XenServer とどのような通信をしているのかをちょっとだけ調べた
  • node の初期設定(bootstrap)の挙動を確認した

今回

  • XenServer で VM を構築後、Chef Server(Hosted Chef)を利用して VM に対して cookbook を適用してみる

登場人物

役割 名前 別名
Chef Server Hosted Chef
Chef Client XenServer 上の VM node
Workstation X1Carbon

Chef Server としては Hosted Chef を利用する。また、すでに Hosted Chef からは knife.rbvalidation.pemaccount.pem はダウンロードされている状態でいつでも Hosted Chef が使える状態にしておくこと。尚、Client ととなるのはもちろん XenServer 上に構築する VM となる。


cookbook を用意する

テスト用の cookbook を用意してみる。この作業は Workstation 上にて行う。

knife cookbook create

knife cookbook create hoge_cookbook -o ./

template リソースを使ったごく簡単な cookbook で...

template "/tmp/config.conf" do
  source "config.conf.erb"
end

knife cookbook upload

Hosted Chef にアップロードする。

knife cookbook upload hoge_cookbook -o ./
Uploading hoge_cookbook  [0.1.1]
Uploaded 1 cookbook.

metadata.rbversion を任意でしているとバージョン番号(上記では 0.1.1)を指定することが出来る。

knife cookbook list

一応、Hosted Chef に登録済みの cookbook 一覧を取得してみる。

knife cookbook list
apache-enable    0.1.0
apache2          1.6.0
apache2-take     0.1.0
chef-client      2.2.2
cron             1.2.2
fluentd_apache   0.1.0
hoge_cookbook    0.1.1

ちゃんと登録されている。


XenServer で VM を構築後、Chef Server(Hosted Chef)を利用して VM に対して cookbook を適用してみる

knife xenserver vm create のおさらい

VM を構築後、VM に対して cookbook を適用する際に必要なオプション。

オプション 役割
--vm-template ${UUID} テンプレートの UUID を指定する
--vm-name ${VM_NAME} VM の名前を指定する
--vm-networks ${NETWORK} VM のネットワークを指定する
--vm-networks VM のネットワークを指定する
-r 適用する run-list やレシピを指定する "recipe[${recipe}]" で指定し、複数ある場合にはカンマで区切る
-d distro を指定する chef-full/centos5-gems/ubuntu12.04-gems 等を指定可能

実行してみる

長かったけどやっと knife xenserver vm create を実行してみる。

knife xenserver vm create --vm-template 886cd33d-380d-ac9a-83ab-ba0a00c4b7e1 --vm-name chef-test2 --vm-networks 'Pool-wide network associated with eth0' -r "recipe[hoge_cookbook]" d chef-full

VM が構築された後で bootstrap が実行された後...

xxx.xx.xx.xx Thank you for installing Chef!
xxx.xx.xx.xx Starting Chef Client, version 11.4.4
xxx.xx.xx.xx Creating a new client identity for chef-test2 using the validator key.
xxx.xx.xx.xx resolving cookbooks for run list: ["hoge_cookbook"]
xxx.xx.xx.xx Synchronizing Cookbooks:
xxx.xx.xx.xx   - hoge_cookbook
xxx.xx.xx.xx Compiling Cookbooks...
xxx.xx.xx.xx Converging 1 resources
xxx.xx.xx.xx Recipe: hoge_cookbook::default
xxx.xx.xx.xx   * template[/tmp/config.conf] action create
xxx.xx.xx.xx 
xxx.xx.xx.xx     - create template[/tmp/config.conf]
xxx.xx.xx.xx         --- /tmp/chef-tempfile20130526-980-88xi5r  2013-05-26 10:33:34.612251948 +0900
xxx.xx.xx.xx         +++ /tmp/chef-rendered-template20130526-980-w9ecix 2013-05-26 10:33:34.611252008 +0900
xxx.xx.xx.xx         @@ -0,0 +1 @@
xxx.xx.xx.xx         +hoge
xxx.xx.xx.xx 
xxx.xx.xx.xx Chef Client finished, 1 resources updated

Name: chef-test2
IP Address: xxx.xx.xx.xx
Environment: _default
Run List: recipe[hoge_cookbook]
Done!

Hosted Chef にアクセスして cookbook をダウンロードして node に cookbook が適用された。念の為、node 上でも確認してみる。

ssh node
[root@vm01 ~]# cd /tmp/
[root@vm01 tmp]# ls
config.conf  yum.log
[root@vm01 tmp]# cat config.conf 
hoge
[root@vm01 ~]#

一応、/tmp/ 以下に config.conf ファイルが作成されている。


まとめ

  • 三回にわたって knife プラグインの一つである knife-xenserver を使ってみた
  • 基本的には他のクラウドプラグイン(knife-ec2 等)と同様に利用することが出来ると思われる
  • Chef Server ではなく chef-solo を使うことが出来ないか調べたが、今のところ出来なさそう...
  • 実運用を考慮すると Chef Server は自前で Opscode の Chef Server を立てるか、軽量簡易な Chef Server の chef-zero を検討する
  • ということで次回は chef-zero を Chef Server に見立つつ、もう少し複雑な cookbook を適用してみる

knife-xenserver で XenServer を三枚におろす一部始終(リターンズ)(2)

概要

  • 以前に試した knife-xensever を改めて試してみる
  • 前回は XenServer の調子が悪くて断念してしまったこともあり、改めて、knife-xenserver と chef を利用したサーバーの構築を行なってみたい

前回まで

  • knife-xenserver を利用して VM の作成したりテンプレートの一覧取得等を行った
  • 同様に knife-xenserver を利用して VM の削除を行った
  • knife-xenserver が XenServer とどのような通信をしているのかをちょっとだけ調べた

今回

  • node の初期設定(bootstrap)の挙動を確認する
  • Chef Server(Hosted Chef)を利用して VM に対して cookbook を適用してみる

node の初期設定について

対象の node に対して chef が利用出来る状態を準備するステップ(という認識でいる)が bootstrap。今回の knife-xenserver でももちろん、

        --bootstrap-version VERSION  The version of Chef to install
        --skip-bootstrap             Skip bootstrap process (Deploy only mode)

上記のように bootstrap に関するオプションが用意されている。前者が任意のバージョンの chef をインストールする、後者は bootstrap のステップをスキップするオプションで、基本的には knife xenserver vm create を実行した際には漏れ無く bootstrap は実行されるようだ。

では、knife-xenserver の中でどのように bootstrap が実行されているのかを見てみたい。(おそらく、このロジック自体は他のクラウド用プラグインでも同じ挙動かと思われる)

knife-xenserver の中の bootstrap

knife-xenserver/lib/chef/knife/xenserver_vm_create.rb の一部を抜粋してみる。

 28       deps do
 29         require 'readline'
 30         require 'chef/json_compat'
 31         require 'chef/knife/bootstrap'
 32         Chef::Knife::Bootstrap.load_deps
 33       end

冒頭で他のライブラリと合わせて require 'chef/knife/bootstrap' chef 自体の bootstrap ライブラリをロードしている。

318       def bootstrap_for_node(vm)
319         bootstrap = Chef::Knife::Bootstrap.new
320         bootstrap.name_args = [@ssh_ip]
321         bootstrap.config[:run_list] = config[:run_list]
-- 略 --
326         bootstrap.config[:distro] = locate_config_value(:distro)
327         # bootstrap will run as root...sudo (by default) also messes up Ohai on CentOS boxes
-- 略 --
333         bootstrap
334       end

同じように最後の部分で require した bootstrap ライブラリを利用して bootstrap_for_node を定義しているように読み取れる。うんでもって...

305           bootstrap_for_node(vm).run
306           puts "\n"
307           puts "#{ui.color("Name", :cyan)}: #{vm.name}"
308           puts "#{ui.color("IP Address", :cyan)}: #{@ssh_ip}"
309           puts "#{ui.color("Environment", :cyan)}: #{config[:environment] || '_default'}"
310           puts "#{ui.color("Run List", :cyan)}: #{config[:run_list].join(', ')}"
311           puts "#{ui.color("Done!", :green)}"
312         else
313           ui.warn "Skipping bootstrapping as requested."
314         end

ちょっと戻るけど bootstrap_for_node を run しているんだろうなあという理解。で、次に疑問に思ったのは chef 自体の bootstrap ライブラリって何しているんだろう...ということで...

chef の bootstrap ライブラリ

chef-11.4.4/lib/chef/knife/bootstrap.rb の一部を抜粋してみる。

130       def find_template(template=nil)
131         # Are we bootstrapping using an already shipped template?
132         if config[:template_file]
133           bootstrap_files = config[:template_file]
134         else
135           bootstrap_files = []
136           bootstrap_files << File.join(File.dirname(__FILE__), 'bootstrap', "#{config[:distro]}.erb")
137           bootstrap_files << File.join(Knife.chef_config_dir, "bootstrap", "#{config[:distro]}.erb") if Knife.chef_config_dir
-- 略 --
140           bootstrap_files.flatten!
141         end

んん? どうやら何かしらのテンプレートファイルを読み込んでいるみたい。 しかも :distro で何かを定義しているっぽいぞ...そして、chef-11.4.4/lib/chef/knife/ 以下に bootstrap というディレクトリあるので確認してみる。

$ tree
.
├── archlinux-gems.erb
├── centos5-gems.erb
├── chef-full.erb
├── fedora13-gems.erb
├── ubuntu10.04-apt.erb
├── ubuntu10.04-gems.erb
└── ubuntu12.04-gems.erb

幾つかの OS ごとの erb ファイルがある。centos5-gems.erb あたりを少し見てみる。

cat centos5-gems.erb
 17   wget <%= "--proxy=on " if knife_config[:bootstrap_proxy] %>http://production.cf.rubygems.org/rubygems/rubygems-1.6.2.tgz -O - | tar zxf -
 18   (cd rubygems-1.6.2 && ruby setup.rb --no-format-executable)
 19 
 20   popd
 21   rm -r "$tmp_dir"
 22 fi
 23 
 24 gem update --system
 25 gem update
 26 gem install ohai --no-rdoc --no-ri --verbose
 27 gem install chef --no-rdoc --no-ri --verbose <%= bootstrap_version_string %>
 28 
 29 mkdir -p /etc/chef

なにやら gem で chef をインストールしたり、/etc/chef にディレクトリ作ったり...ざっくり言うと chef を使えるようにしている。ということで、あらためて knife-xenserver を見てみる。

knife xenserver vm create -d ${distro}

何気なく knife xenserver vm create -h を眺めていて --distro ってオプションがあったものの特に意識はしていなかった。が、しかし、意外に重要なオプションであることに気づいた。

    -d, --distro DISTRO              Bootstrap a distro using a template; default is 'ubuntu10.04-gems'

特にこのオプションを指定しないまま knife xenserver vm create を実行しようとすると、OS が ubuntu10.04 であればおそらく何の問題は無いが、それ以外(ubuntu 系も大丈夫??)の OS の場合には下記のような状態になってしまい bootstrap は失敗してしまう。

Waiting for sshd... 
Trying to SSH to xxx.xx.xx.xx...  done
Bootstrapping Chef on xxx.xx.xx.xx
xxx.xx.xx.xx bash: line 3: apt-get: command not found
xxx.xx.xx.xx bash: line 4: apt-get: command not found
xxx.xx.xx.xx bash: line 5: wget: command not found
xxx.xx.xx.xx 
xxx.xx.xx.xx gzip: stdin: unexpected end of file
xxx.xx.xx.xx tar: Child returned status 1
xxx.xx.xx.xx tar: Error is not recoverable: exiting now
xxx.xx.xx.xx bash: line 6: cd: rubygems-1.6.2: No such file or directory
xxx.xx.xx.xx bash: line 9: gem: command not found
xxx.xx.xx.xx bash: line 10: gem: command not found
xxx.xx.xx.xx bash: line 11: gem: command not found
xxx.xx.xx.xx bash: line 62: chef-client: command not found

今回、検証で利用している OS は CentOS 6.4 で当然、apt-get は利用出来ない...ので、今回の検証では -d オプションに chef-full を指定することで正常に bootstrap を行うことが出来た!おそらく、OS の環境に合わせて bootstrap のテンプレートを自作することも可能な構造であると思われる。

まとめ

  • bootstrap も奥深い
  • --distro オプションは必須
  • また cookbook 適用まではたどりつけんかった...

knife-xenserver で XenServer を三枚におろす一部始終(リターンズ)

概要

  • 以前に試した knife-xensever を改めて試してみるs
  • 前回は XenServer の調子が悪くて断念してしまったこともあり、改めて、knife-xenserver と chef を利用したサーバーの構築を行なってみたい

knife-xensever

概要

github の README に Provision virtual machines with Citrix XenServer and Opscode Chef. とある通り、XenServer と chef を使って仮想マシンのプロビジョニングを行う knife のプラグイン。残念ながら活発には開発が行われていないようで、どのソースも半年くらい前で開発が止まってしまっている。

出来ること

  • XenServer に登録されている仮想サーバー及びテンプレート一覧の取得
  • テンプレートからの VM 作成
  • VM の削除
  • ネットワーク一覧の取得
  • xenserver-automater と絡めることで IP アドレスの設定等も行うことが出来る

技術的なメモ( fog について)

  • XenServer へのアクセスは fog が XenAPI を叩いてくれている(という認識)
  • fogruby の仮想環境にアクセスする為のライブラリ
 12     service(:compute, 'xenserver/compute', 'Compute')
 13 
 14     class Connection
 15       require 'xmlrpc/client'
 16 
 17       def initialize(host)
 18         @factory = XMLRPC::Client.new(host, '/')
 19         @factory.set_parser(NokogiriStreamParser.new)
 20       end

一応、fogソースコードを見てみると fog-1.11.1/lib/fog/xenserver.rb で以下の通り xmlrpc/client を require していることからも XenAPI を http 経由で叩いているようだ。


knife-xenserver を使ってみる

knife-xenserver のインストール

gem で一発!

sudo gem install knife-xenserver --no-ri --no-droc

その他、必要な gem もズラズラインストールされる。もちろん fog もインストールされる。

Fetching: terminal-table-1.4.5.gem (100%)
Fetching: builder-3.2.0.gem (100%)
Fetching: excon-0.22.1.gem (100%)
Fetching: formatador-0.2.4.gem (100%)
Fetching: net-scp-1.1.1.gem (100%)
Fetching: ruby-hmac-0.4.0.gem (100%)
Fetching: fog-1.11.1.gem (100%)
Fetching: colored-1.2.gem (100%)
Fetching: uuidtools-2.1.4.gem (100%)
Fetching: knife-xenserver-1.2.3.gem (100%)
Successfully installed terminal-table-1.4.5
Successfully installed builder-3.2.0
Successfully installed excon-0.22.1
Successfully installed formatador-0.2.4
Successfully installed net-scp-1.1.1
Successfully installed ruby-hmac-0.4.0
Successfully installed fog-1.11.1
Successfully installed colored-1.2
Successfully installed uuidtools-2.1.4
Successfully installed knife-xenserver-1.2.3
10 gems installed

インストール後の確認。

knife xenserver --help

下記のようにサブコマンド一覧が表示されればオッケー牧場。

FATAL: Cannot find sub command for: 'xenserver --help' # このメッセージはいただけない...
Available xenserver subcommands: (for details, knife SUB-COMMAND --help)

** XENSERVER COMMANDS **
knife xenserver template create
knife xenserver vm create (options)
knife xenserver network list
knife xenserver vm poweron VM_NAME [VM_NAME] (options)
knife xenserver vm list (options)
knife xenserver vm delete VM_NAME [VM_NAME] (options)
knife xenserver template list
knife xenserver vm poweroff VM_NAME [VM_NAME] (options)

knife.rb の設定

XenServer へのアクセス情報を knife.rb に設定する。もちろん、コマンドラインの引数でも渡すことが出来る。

knife[:xenserver_password] = "your_password"
knife[:xenserver_username] = "your_usre"
knife[:xenserver_host]     = "IP address or Hostname"

試しに template list を取得してみる。

knife xenserver template list
Connecting to XenServer host xxx.xxx.xxx.xxx...
+----------------------------------------------+--------+-------------+----------------------+
| NAME                                         | MEMORY | GUEST_TOOLS | NETWORKS             |
+----------------------------------------------+--------+-------------+----------------------+
| centos6.x                                    | 1024   | true        | Pool-wide network... |
|   uuid: 76e31f28-0a5a-8cc8-f484-ecd589667a8e |        |             |                      |
+----------------------------------------------+--------+-------------+----------------------+

XenServer のネットワークリストも取得してみる。

knife xenserver network list
Connecting to XenServer host xxx.xxx.xxx.xxx...
+----------------------------------------+------+------+--------+
| NETWORK_NAME                           | VIFs | PIFs | BRIDGE |
+----------------------------------------+------+------+--------+
| Host internal management network       | 0    |      | xenapi |
| Pool-wide network associated with eth0 | 3    | eth0 | xenbr0 |
+----------------------------------------+------+------+--------+

テンプレートから VM を作成してみる

一番シンプルに引数に --vm-template と --vm-name を設定して作成。--vm-template には上記で取得したテンプレートの UUID を指定する。

knife xenserver vm create --vm-template 76e31f28-0a5a-8cc8-f484-ecd589667a8e --vm-name hoge

暫くすると...

Creating VM hoge...
Using template centos6.x [uuid: 76e31f28-0a5a-8cc8-f484-ecd589667a8e]...
VM Name: hoge
VM Memory: 512 MB

Waiting server...

上記のように VM が作成されるが、Wating server... が出たままプロンプトが帰ってこない。

XenServer を確認すると...

uuid ( RO)           : b6bcfe6e-eafb-2066-e909-5e09d0115017
     name-label ( RW): hoge
    power-state ( RO): running

一応、VM は起動しているが MAC アドレスが重複してしまったようでネットワークインターフェースが上がらない。原因は何のことない VM 作成に利用したテンプレートにてネットワークインターフェースの MAC アドレスが指定されていた為で、とりあえずの対策としては下記のように ifcfg-eh0 の MAC アドレスの指定をコメントアウトしてテンプレートを再作成した。

#HWADDR=BA:EC:17:92:CD:2F

再作成したテンプレートを利用して改めて VM を作成してみる。

knife xenserver vm create --vm-template 886cd33d-380d-ac9a-83ab-ba0a00c4b7e1 --vm-name hoge --vm-networks 'Pool-wide network associated with eth0'

--vm-networks には上記で取得した NETWORK_NAMEeth0 がバインドされたネットワークを指定する。

VM を削除する

xenserver vm delete ${vmname} で VM を削除することも出来る。

knife xenserver vm delete hoge

下記のようにインタラクティブに削除出来るので安心。${vmname} が同じであっても UUID で判別してくれる。

Do you really want to delete this virtual machine hoge? (Y/N) Y
Deleted virtual machine hoge [uuid: b6bcfe6e-eafb-2066-e909-5e09d0115017]
Do you really want to delete this virtual machine hoge? (Y/N) Y
Deleted virtual machine hoge [uuid: fe284ec8-0a83-25ab-8173-c5c0748a1e3f]

まとめ

  • 長くなりそうなので chef の登場は次回
  • knife プラグインを使った XenServer 上の VM 操作はとても簡単に行うことが出来た
  • テンプレートを作る際にはテンプレートの元になる OS 側の事前準備が必要になる
  • 特に NIC 周り

ツイートと github で振り返る Chef Casual Talks Vol.2(2)

前半からの続き...

togetter なら

  • @yando さんが纏めて下さっています!

要件

  • Chef Casual Talks Vol.2 で強者シェフ達の知恵を拝借する
  • Chef を使っていく上で今後、自分が何をすべきかを再確認する
  • ちょこちょこ追記していきます...

内容

cookbookの分け方の変遷(仮)

と題して @nakashii_ さんの自社での Chef 運用の変遷(運用の中で Chef の使われて方が変わってしまった)についてのお話。2009 年位から運用されているとのことで、現在まで約三期に渡って運用が変遷してきたとのこと。

  • 初期
    • cookbook が乱立…
  • 二期
    • 繰り返しの実行を意識できるように、Attribute や Environment を積極的に使いはじめる…
  • 三期
    • 有志で共通の cookbook の作成(Attribute の利用必須)、共通 cookbook 以外では 1 PJ あたり 1 cookbook に制限
  • 基本設定の cookbook と プロジェクトごとの cookbook
  • テストの自動化
    • test-kitchen
  • chef を使った監視設定の自動化
    • サーバーを監視する為の情報はほとんど chef に入っている
  • cookbook の管理は?(subversion ??)
    • git base で管理している

  • コードレビューは?
    • 複雑なコードを書いた時等に行う
    • コードレビューが根付いてない
  • github enterprise の稟議ってどんなふうに書くの?
    • 羨ましい...

ChefConf 2013に参加してきたこと

ChefConf に参加された古川さんのお話。

* Chef の導入事例
* Opscode の人達等によるベストプラクティス、リファクタリング

等が本場 Opscode の人達から聞けるという神のような機会。ほとんどのセッションは Youtube で見ることが出来るけど...。面白かったセッションは...

  • Facebook での導入事例
    • 15000 台の通信量をどのように制限するか
    • ohai で取ってくる通信量を制限する
    • 結果として 1KB 以下になった
  • ディズニーでの導入事例
    • 学習コストが高い
    • 幾つかのプラグインを作成
      • knife-servicedsk
    • Remy Testing Cookbook
      • ディズニー謹製の CookBook テスト環境!
  • vagrant だと動作が遅い
    • OpenStack を使っている
  • Chef の cooking 作法
    • Lint = foodcritic
      • Chef の書式をチェックしてくれる
  • Don't use role and environment
    • cookbook のように version 管理出来ない
  • test = minitest-chef-handler + vagrant
    • test はやっぱり vagrant と連携させるのは王道
  • ドメイン情報等は data bag
  • シンプルに書きましょう
    • LWRP を使いましょう

chef-zero使ってみた

@urasako さんの Chef Server よりも手軽に使える Chef Server として開発された chef-zero のお話。すでにブログ等でも紹介されていらっしゃるようですが、一部の機能を制限することで Chef Server をより簡単に身近にする為のツールでいろいろな活用方法がツーイートされていた。

Windows で Chef-solo 使ってみた話

@tora470 さんが Windows で Chef を使っているお話。

Windows で業務で Chef を導入を検証されていて Windows 特有の作法で色々と苦労されているようで、それに対する会場内の議論も活発だった。

Windows でシンボリックリンク作成について、実際に link リソースを使ってみたところ上手く作成出来たとのツイート。Windows で Chef かー、試してみたい。パソコンのセットアップに使えたりするのかな...

test-kitchen 1.0 探訪記

Debian デベロッパーの樋口さんの二本目。資料はこちら

  • opscode 製のテスト・ツール
  • @sethvargo さん(Opscode の偉い人)
  • 新しい機能(要素)
    • ドライバ(仮想化プラットフォーム)
      • kitchen-vagrant
    • busser(片付ける人)
      • busser-bats
  • その他
    • Vagrant 1.1.0 以上
    • Berkchelf との連携
    • .kitchen.yml
    • 並列実行
  • 0.7 からの移行
    • 無理!

まとめ

  • 書いて思い出す勉強会
  • 今回は参加者は少なかったものの濃い内容でお腹いっぱいだった
  • 前回、Chef にはベストプラクティスは無いというような話があったが、今回は運用フェーズに乗るシチュエーションの中で Chef で構築した環境の正しさをどのように検証するかというテストツールについて濃い話を聞けて良かった
  • また、knife プラグインや capistrano 等の Chef と取り巻くツール類がこれかも充実してくるのではという勢いを感じた
  • Windows での運用についても専用のリソースが定義されていたり、積極的に導入されようとしている方もいらっしゃって大きな可能性を感じられた
  • 会場を提供頂いている EngineYard さんにはいつも感謝!
  • 懇親会のおつかれ酸(酸っぱいサワー)が何気においしゅうございました






お腹いっぱいです...

ツイートと github で振り返る Chef Casual Talks Vol.2(1)

要件

  • Chef Casual Talks Vol.2 で強者シェフ達の知恵を拝借する
  • Chef を使っていく上で今後、自分が何をすべきかを再確認する
  • また、自分も喋る
  • ちょこちょこ追記していきます...

メモ

  • githubに Markdown で纏めてみました

いきなりまとめ(感じたこと)

  • TestKitchen や Foodcritic、chefspec や serverspec 等のテストツールの習得は必須(だと思う)
  • LWRP や data bag は積極的に使うようにする
  • knife プラグイン等、これからも周辺のツールは Chef の利用者が増えると共に充実していくんだろうなあ
  • 痒いところに手が届く、そんなツールの誕生は待っていても生まれない、自分で作る
  • ツイートや Blog もいいけど困ったことや改善案は直接 Opscode なり、作者にリクエストを送ろう!(オー!)
  • Chef の歴史は多少あるにせよすでにガチガチの運用フェーズの方々もいる中で、まだ試行錯誤されている方々もいらっしゃる
  • 運用に乗っけてみて初めて判ること、運用してきてカオスになってしまうことがある
  • 一定のルールと cookbook をレイヤー化する
  • Windows で Chef という選択肢もきっとあり?

内容

@yando さんの Raspberry Pi からの foodcritic のお話。foodcritic のルールを日本語訳と主なルールの紹介とルールから読み取る正しい cookbook の書き方。細かい話かもしれないけどパーミッションを書くときには 5 桁が正しいとか「ほーそうなんだ!」

@tk0miya さんがご自身の chef-solo のイケてない部分解決するべく作られたツールの紹介。capistrano を使って chef-solo のインストールから cookbook の転送等を行なってくれるツール。knife には無い機能として並列処理や Windows での利用も可能とのこと。また、paratrooper-chef の knife プラグインを書く際にハマった点(1.gem の名前が chef で終わる 2.バージョンが 3 つの数字で構成されているこれらのの場合には gem からロードされない)

はるばる関西から来られた @sawanoboly さんの knife plugin の作り方。「孤独な chef も、これでもう孤独では無い」というコンセプト(?)を元に作られた knife-twitter を題材として knife plugin の作り方のポイントを紹介。Ruby のことはよく理解出来ていないけど、作り方としてはシンプルなのかなーという印象。ちなみに自分もほんの少しだけお手伝いさせて頂きましたwしばらくはこれで呟きますw

@takipone さんが実務にて service リソースで squid を再起動させてみたらうまく再起動してくれないお話squid は再起動の際に 30 秒間待ってから stop start する仕様らしく、回避策として 30 秒間待たないように設定した上で運用されているとのこと。その場でかわされた議論としては、そもそも再起動をさせずに設定ファイルを置くところまでを Chef でさせるとか、apache2 の cookbook のように restart_command を置き換えてしまう等が意見として出ていた。

ツイートはされていないけど、Debian デベロッパーの樋口さんの「LWRPを活用しようとしてみた件」(資料探してます...)(共有ありがとうございます @urasoko さん)ではfoodcritic では Difinitions は非推奨となり 代わりに LWRP が推奨されているもののドキュメントが少ない!とのことで issues に投げてみたお話。「blog や twitter では届かない」「どんどん報告しましょう」に反省。

長くなりそうなので、後半に続く...

Community Cookbooks 探訪(2)- memcached

要件

  • Community Cookbooks の中から一つの cookbook を選んでどんな事が書いてあるか読み解く
  • 先人たちの叡智を吸収して、cookbook 作成スキルをアップしたい

注意点

  • まずは usage を個人的な意訳メモですのでご了承下さい!

今日のメニュー

概要

  • memcached パッケージを対象 node に導入するシンプルな cookbook
  • ohai を使い OS におけるパッケージ管理コマンドの違い等を吸収している

git より clone

$ git clone https://github.com/opscode-cookbooks/memcached.git

cookbook の構造

$ tree
.
├── CHANGELOG.md
├── CONTRIBUTING
├── Gemfile
├── LICENSE
├── README.md
├── attributes
│   └── default.rb
├── definitions
│   └── memcached_instance.rb
├── metadata.rb
├── recipes
│   └── default.rb
├── templates
│   └── default
│       ├── memcached.conf.erb
│       ├── memcached.default.erb
│       ├── memcached.sysconfig.erb
│       ├── sv-memcached-log-run.erb
│       └── sv-memcached-run.erb
└── test
    └── kitchen
        ├── Kitchenfile
        └── cookbooks
            ├── Cheffile
            └── memcached_test
                ├── README.md
                ├── metadata.rb
                └── recipes
                    ├── default.rb
                    └── instance.rb

使い方

  • 基本的に runlist に追加して利用する

ぢゃあ、いったい何をやっているのか?

レシピ、コードを読んでみる

recipes/default.rb
 21 if node['platform_family'] == "rhel" and node['platform_version'].to_i < 6
 22  include_recipe "yum::epel"
 23 end
 24 
 25 package "memcached" do
 26   action :install
 27 end
 28 
 29 package "libmemcache-dev" do
 30   case node['platform_family']
 31   when "rhel", "fedora"
 32     package_name "libmemcached-devel"
 33   when "smartos"
 34     package_name "libmemcached"
 35   else
 36     package_name "libmemcache-dev"
 37   end
 38   action :install
 39 end
  • 21 行目から... ohai で取得した platform_family をチェックして rhel = RedHat 系 で且つ version が 6 以下の node であれば yum::epel レシピを include する
  • 25 行目は単純な memcached のインストール
  • 29 行目以降、libmemcache-dev パッケージの導入に際して 21 行目同様に OS の環境をチェックしてパッケージ名を調節している
 41 service "memcached" do
 42   action :nothing
 43   supports :status => true, :start => true, :stop => true, :restart => true
 44 end
  • 言わずもがな service の自動起動を設定する
  • ただし、action :nothing となっているので後述の設定ファイルの設置に記載されている notifies :restart にて実行される
 46 case node['platform_family']
 47 when "rhel", "fedora"
 48   template "/etc/sysconfig/memcached" do
 49     source "memcached.sysconfig.erb"
- 略 -
 53     variables(
 54       :listen => node['memcached']['listen'],
- 略 -
 58       :memory => node['memcached']['memory']
 59     )
 60     notifies :restart, "service[memcached]"
 61   end
 62 when "smartos"
 63   # SMF directly configures memcached with no opportunity to alter settings
 64   # If you need custom parameters, use the memcached_instance provider
 65   service "memcached" do
 66     action :enable
 67   end
 68 else
 69   template "/etc/memcached.conf" do
 70     source "memcached.conf.erb"
- 略 - 
 74     variables(
 75       :listen => node['memcached']['listen'],
- 略 -
 79       :memory => node['memcached']['memory']
 80     )
 81     notifies :restart, "service[memcached]"
 82   end
 83 end
  • パッケージ導入と同じく、ohai の platform_family の値を参考に memcached 自体の設定ファイル設定を行なっている
  • 設定ファイルの中身は attribute に設定した内容を temlate の variables にて上書きをしている
  • 設定ファイルを設置した後、`notifies :restart, "service[memcached]"` で memacached のサービスを再起動している
  • 途中に `when "smartos"` とあるが、smartos ってそもそも何だろ?って話なので、別途で調査をする
memcached/attributes/default.rb
 20 default['memcached']['memory'] = 64
 21 default['memcached']['port'] = 11211
 22 default['memcached']['user'] = "nobody"
 23 default['memcached']['listen'] = "0.0.0.0"
 24 default['memcached']['maxconn'] = 1024
  • デフォルトでは上記の値が設定されている
  • 環境に応じて適宜書き換える
memcached/templates/default
$ tree
.
├── memcached.conf.erb
├── memcached.default.erb
├── memcached.sysconfig.erb
├── sv-memcached-log-run.erb
└── sv-memcached-run.erb

まとめ

  • シンプルだけど cookbook 初心者の自分でも attribute とか template の使い方や ohai の役割等が分り易い cookbook だった
  • また service の action :nothing からの notifies :restart についても理解し易かった

Community Cookbooks 探訪(1)- users

要件

  • Community Cookbooks の中から一つの cookbook を選んでどんな事が書いてあるか読み解く
  • 先人たちの叡智を吸収して、cookbook 作成スキルをアップしたい

注意点

  • まずは usage を個人的な意訳メモですので、記載内容につきましては責任を負いかねますのでご了承下さい!

今日のメニュー

概要

  • "Creates users from a databag search." とあるので databag を使った node 上のユーザー管理 cookbook だと思われる
  • LWRP として任意の cookbook から利用する
  • Opscode がメンテナンスする LWRP(Light Weight Resource Providor)
    • LWRP については別途記事にしてみたい

git より clone

$ git clone git://github.com/opscode-cookbooks/users.git

cookbook の構造

$ tree users/
users/
├── CHANGELOG.md
├── CONTRIBUTING
├── LICENSE
├── README.md
├── metadata.rb
├── providers
│   └── manage.rb
├── recipes
│   ├── default.rb
│   └── sysadmins.rb
├── resources
│   └── manage.rb
└── templates
    └── default
        ├── authorized_keys.erb
        ├── private_key.erb
        └── public_key.pub.erb

5 directories, 12 files

使い方

LWRP として他の cookbook から下記のように記載して利用する
include_recipe "users"

もしくは、以下のように記載しても利用することが出来る

include_recipe "users::sysadmins"
databag に ユーザーデータを JSON データとして作成する
knife data bag create users

上記のコマンドを実行して ${chef-repo}/data_bags/users/${user_name} を作成する。以下、実際の data bag の中身。README.md から抜粋。

{
  "id": "bofh",
  "ssh_keys": "ssh-rsa AAAAB3Nz...yhCw== bofh",
}

{
  "id": "bofh",
  "password": "$1$d...HgH0",
  "ssh_keys": [
    "ssh-rsa AAA123...xyz== foo",
    "ssh-rsa AAA456...uvw== bar"
  ],
  "groups": [ "sysadmin", "dba", "devops" ],
  "uid": 2001,
  "shell": "\/bin\/bash",
  "comment": "BOFH",
  "nagios": {
    "pager": "8005551212@txt.att.net",
    "email": "bofh@example.com"
  },
  "openid": "bofh.myopenid.com"
}
制限事項

users/providers/manage.rb に以下のような記述があることから chef-solo-search がインストールされていないと chef-solo からだと利用出来ないようだ。

   if Chef::Config[:solo] and not chef_solo_search_installed?
     Chef::Log.warn("This recipe uses search. Chef Solo does not support search unless you install the chef-solo-search cookbook.")
   else

ぢゃあ、いったい何をやっているのか?

レシピ、コードを読んでみる

users/providers/manage.rb

まずは chef-solo の whyrun をサポートさせる為の記述。

 21 def whyrun_supported?
 22   true
 23 end

`action :remove` とあることからおそらくユーザー削除を定義している部分。41 行目で data_bags/users/ 以下から対象となるユーザーを id をキーとして検索し、ユーザーを削除する機能を提供している。

 37 action :remove do
 38   if Chef::Config[:solo] and not chef_solo_search_installed?
 39     Chef::Log.warn("This recipe uses search. Chef Solo does not support search unless you install the chef-solo-search cookbook.")
 40   else
 41     search(new_resource.data_bag, "groups:#{new_resource.search_group} AND action:remove") do |rm_user|
 42       user rm_user['username'] ||= rm_user['id'] do
 43         action :remove
 44       end
 45     end
 46     new_resource.updated_by_last_action(true)
 47   end
 48 endしている

`action :create`とあることからユーザーの追加を定義している部分。上記の remove 同様に data_bags/users/ 以下を検索した上で該当する id をキーとしてユーザー名を取得し、ユーザー作成の為に必要な各種設定($HOME の作成等)の機能を提供している。

 50 action :create do
 51   security_group = Array.new
 52 
- 略 -
 56     search(new_resource.data_bag, "groups:#{new_resource.search_group} AND NOT action:remove") do |u|
 57       u['username'] ||= u['id']
 58       security_group << u['username']
- 略 -
 83       # Create user object.
 84       # Do NOT try to manage null home directories.
 85       user u['username'] do
 86         uid u['uid']
 87         if u['gid']
 88           gid u['gid']
 89         end
 90         shell u['shell']
 91         comment u['comment']
 92         password u['password'] if u['password']
- 略 -
108         if u['ssh_keys']
- 略 -
119         if u['ssh_private_key']
- 略 -
131         if u['ssh_public_key']

password や ssh の authorized_keys や公開鍵等も data bag に登録されていれば、それらを元にファイルを作成しユーザーを作成してくれる機能を提供する。パスワードは暗号化する必要があるが、ドキュメントによると openssl コマンドを利用して作るようにと書かれている。

openssl passwd -1 "plaintextpassword"
users/resources/manage.rb

提供する action を定義しているようで、:create と :remove だけを提供。

 21 actions :create, :remove

それぞれの attribute の種類やデフォルトの値等が指定されている。

 28 attribute :data_bag, :kind_of => String, :default => "users"
 29 attribute :search_group, :kind_of => String, :name_attribute => true
 30 attribute :group_name, :kind_of => String, :name_attribute => true
 31 attribute :group_id, :kind_of => Integer, :required => true
 32 attribute :cookbook, :kind_of => String, :default => "users"
 33 
 34 def initialize(*args)
 35   super
 36   @action = :create
 37 end

まとめ

この cookbook に関して

感想
  • 最近、個人的話題の data bag を使った cookbook だけに少し時間を掛けて読んでみた
  • data bag の取り扱いについて理解に苦しんでいたが、この cookbook を読むことで、「こんな風に使うんだなー」ってのを改めて実感出来た
疑問
  • data bag のキーに openid が定義されているけど、いったいこれは何者?

LWRP について

LWRP 自体はちゃんと紐解いて理解したいと思うが、今回取り上げた users 以外にも幾つか存在する LWRP はレシピの中で書く resource(以下の例だと hoge の部分と action に続く :bar)を定義しているものなんだろうなーというフワッとした理解。(このあたり、来週月曜日の勉強会で聞けたら嬉しいなあ)

hoge 'foo' do
    action :bar
end

chef を現場投入してみて気づいたことの幾つか

要件

  • chef を現場投入してみて気づいたことを整理する

どんな風に使ったのか

  • テンプレート作成した仮想ホスト 2 台に対して下記の状態に収束させる為に使った
    • /etc/hostname と /etc/hosts をホスト毎で設定
    • ssh の root ログインの許可を停止
    • 各種パッケージの導入
    • 各種設定(認証周り、メール設定等)

工夫したところとメリット

メリット

  • 従来は自家製シェルスクリプトを走らせた後、幾つかの質問に答える必要があったが不要になった
  • 10 分/台 → 5 分/台に短縮

工夫したところ

テンプレートからホストを作成する為、ホスト名を修正する必要があったが、nodes/${IP_address}.json ファイルにホスト名を入れて template リソースを使ってホスト毎で上書きをした。→結果として IP アドレスとホスト名の管理を nodes/${IP_address}.json ファイル で出来るのでは?というアイデアが湧いた...

JSON ファイル...

${chef-repo}/nodes/${IP_address}.json

以下のように記載。

{
"host_name": ${your_hostname},
"run_list":
        [
                "recipe[${recipe}]"
        ]
}

該当するレシピは...

${chef-repo}/${cookbook}/site-cookbooks/hostname_setting.rb

以下のように記載。

# /etc/hostname setting
template "/etc/hostname" do
        source "hostname.erb"
        owner "root"
        group "root"
        mode 0644
        variables({
                :hostname => node[:host_name] # node ファイルで指定した値が入る
        })
end
# /etc/hosts setting
template "/etc/hosts" do
        source "hosts.erb"
        owner "root"
        group "root"
        mode 0644
        variables({
                :hostname => node[:host_name] # node ファイルで指定した値が入る
        })
end

利用するテンプレートファイル(一部)...

${chef-repo}/${cookbook}/templates/default/hostname.erb

以下のように記載。

<%= @hostname %>

問題点、今後の課題

knife solo の並列処理(複数サーバーへの実行)

  • 今回、knife solo を二台同時に叩く方法として tmux で画面分割して叩いた。二台ならこの方法でもいけるけど、二台以上は現実的ではない...
  • 解決策として roundsman というツールがあるのを勉強会で聞いているで試してみたい!

出来るだけコードは短く、綺麗に...

  • パッケージインストール等は出来るだけまとめて書く
%w{hoge huga baz}.each do |hoges|
         package hoges do
         action: install
end
  • 上から下にダラダラとではなく not_if や only_if 、nothing を使う
  • 冗長は避け、且つ、他人の可読性の高いレシピを書く

本当に意図した通りに収束しているか?

  • cookbook の意図した通りに反映されているかを確認したい
  • レシピのシンタックスエラーを事前に確認したい

これらの要望を実現できるのが...以下を習得する必要がある。

  • knife cookbook test
    • レシピのシンタックスエラーを確認
  • whyrun
    • cookbook 実行時のエラーが出ないかをある程度調べる事が出来る
  • chefspec
  • serverspec
    • 実際にサーバーにアクセスしてのユニットテストで chef 以外にも puppet 等でも使えるはず...
    • 個人的には手動でセットアップされたサーバーでも使えそうだなと期待

出来るだけ自動化を目指す

whyrun → knife-solo 実行 → テスト(チェック)

という一連の流れを自動化し、属人化によるミスを減らしていきたい...とは言え...ホスト名を typo して構築後に手動で直したのはココだけの秘密...。あと、現場での啓蒙活動も大切だなと思ったり。

ツイートで振り返るよへみち chef の近況

要件

  • よへみち chef の近況についてツイートで振り返ります

世の中の流れ

Provisioning Frameworks Casual Talks vol.1

ツイッターを見ていると非常に濃い内容のお話が聞けたようで...行きたい、行きたいと呟いていながら諸般の事情で参加出来ず...。時代に取り残されたような気分で落ち込んで...もいられないのでツイートであったり、参加された方が書かれたブログを読み返す。

気になったのツイート

ホントにたくさんのツイートがあって読み切れないくらいだけど、以下をピックアップ。傾向として cookbook のテストフレームワークについて多くが語られていたようで、特に serverspec についてほとんどのスピーカーの方が話されていたようだ。

入門Chef Solo - Infrastructure as Code」の作者である伊藤直也さんのお話。knife-solo と chef sever の比較、そして chef と fabric についてが何気に興味深い。自動化=fabric と 収束=chef でそもぞもコンセプトが異なるという点が興味深かった。

Software Design の chef 特集を執筆されていた @namikawa さんのツイート。cookbook 力の次のステップはやっぱりテストなのかなと思った次第。

今回のイベントを一言で言い表しているのかもしてないツイート。時代は serverspec をはじめとすると cookbook やマニフェストのテストなのかなと。冪とう性やコンバージェンスを担保する手法として、これからは chef を便利にする knife のプラグインや cookbook の書き方も大切だが、serverspec や chefspec のテストも頑張らんといかんだとうなあと思った次第。

chefspec の開発者である Seth Vargo さんもプレゼンされたようで(Skype でかなー?)自分の場合、英語でのプレゼンって理解出来ないんだろうけど、そこに神を身近に感じるだけでも参加する意義はあったんではないかと悔しさが募る...

最近のつぶやき

ほとんどが chefspec について...

chefspec の流れから Data Bags を含んだ cookbook のテストについて試行錯誤...

今、ココ...

chefspec を jenkins と絡めてテストを自動化してみたり...

chefspec をもう少し頑張ってみたり...

chefspec をいじり始めました

とまあ、ダメダメながらも地味やっちょります。

まとめ

  • chef や puppet をはじめとする provisioning framework は次の世代(冪等性やコンバージェンスを担保する為のテスト等をちゃんとやらんといかん)に来ているんだなって思いました。
  • 完全に置いてかれている感がありますが、引き続き、地道に頑張っていこうと思いました。