itamae-serverspec入門
TRANSCRIPT
Itamae – Serverspec 入門
http://serverspec.orghttp://itamae.kitchen
AgendaServerspec の部
◦serverspec とは◦serverspec の仕組み
serverspec-init Rakefile と
spec_helper.rb テストの実行
◦テストコード 簡単なテストコード リソースタイプ describe
Itamae の部◦Itamae とは◦レシピ
簡単なレシピ リソースタイプ よく使う ruby の文法
◦Itamae の実行
デモ
自己紹介名前
◦bbrfkr( ビビリフクロウ )所属
◦TIS 株式会社 IT 基盤技術推進部所属ミッション
◦インフラの構築・運用保守の自動化推進◦Ansible 、 Serverspec を用いた、自動化フレームワークの開発
Itamae の部
http://itamae.kitchen
Itamae とは構成管理ツールの一つサーバの「あるべき状態」を記述し、その状態に収束させる競合製品に Ansible 、 Chef などクックパッド社の荒井良太さんを中心に開発
http://itamae.kitchen
Itamae とは他の構成管理ツールとの比較
Itamae Ansible Chef
エージェントの必要性
不要 不要 必要
レシピ /プレイブックの記述言語
Ruby(DSL)
YAML Ruby(DSL)
既存モジュール/ リソースの数
少ない(15 個 )
非常に多い(806 個 )
多い(66 個 )
レシピ簡単なレシピ
◦docker パッケージをインストール◦docker サービスの起動、自動起動設定
package "docker" do action :installend
service "docker" do action [:enable, :start]end
レシピリソースタイプ
◦Itamae が用意している、設定対象およびその設定モジュール群package "docker" do action :installend
「 package 」がリソースタイプ
レシピpackage リソース
◦パッケージのインストール、アンインストールpackage "docker" do action :installendservice リソース
◦サービスの起動 / 停止、自動起動設定service "docker" do action [:enable, :start]end
レシピfile リソース
◦ファイルの配置 / 削除、権限 / 所有者設定◦ファイルの内容変更
file "/foo" do action :edit block do |content| content.gsub!("world", "Itamae") endend
レシピexecute リソース
◦任意のコマンド実行execute "touch /path/to/file" do not_if "test -e /path/to/file"end
※run_command メソッド◦任意のコマンドを実行。その結果をレシピ内の分岐条件などに使える
result = run_command("test -e /path/to/file", error: false)if result.exit_status != 0 execute "touch /path/to/file"end
レシピよく使う ruby の文法
◦if 文 条件分岐に利用。 アップデートがあったときのみ、 「 yum update -y 」を叩いたりとか
cmd = "sudo yum update --assumeno | grep \"No packages\""update_flag = run_command(cmd, error: false).exit_status
if update_flag != 0 execute "yum update -y"end
レシピよく使う ruby の文法
◦each メソッド 繰り返しに利用 複数のパッケージをインストールするときに
packages = ["openstack-nova-api", "openstack-nova-conductor", \ "openstack-nova-console", "openstack-nova-
novncproxy", \ "openstack-nova-scheduler"]packages.each do |pkg| package pkg do action :install endend
レシピよく使う ruby の文法
◦ヒアドキュメント 長い文字列を定義するときに便利 長いコマンドを見やすく定義できる
cmd = <<-"EOS" cd /etc/swift && \\ swift-ring-builder account.builder \\ add --region 1 --zone 1 --ip 192.168.0.10 --port 6002 \\ --device sdb --weight 100EOS
execute cmd
Itamae の実行「 itamae ssh 」コマンドで実行
◦-h :対象ホストを指定◦-u :接続ユーザを指定◦-p :接続ポートを指定
$ itamae ssh -h 192.168.0.10 -u root -p 22 cookbook.rb
Serverspec の部
http://serverspec.org
Serverspec とはインフラの自動テストツール対象サーバに SSH で接続し、テスト用コマンドを叩くサーバの内部状態を確認できる
◦ホワイトボックステストエージェントレス開発者は「宮下 剛輔」さん
http://serverspec.org
Serverspec の仕組みserverspec-init
◦serverspec の実行に必要な一式のディレクトリ構造を作ってくれるコマンド◦実行すると以下のような構造ができる
.|-- Rakefile`-- spec |-- 192.168.0.1 | `-- sample_spec.rb `-- spec_helper.rb
(rake) タスクを定義するファイル
テストコードの実装を助けるモジュール
httpd のインストール状況を試験するサンプルコード
Serverspec の仕組みRakefile
◦rake タスクを定義するファイル◦serverspec によるテスト実行の実態は、
rake タスクの実行◦デフォルトでは、「 spec/< ホスト名
> 」ディレクトリ内のテストコードを <ホスト名 > に対して実行するように rakeタスクが定義されている
Serverspec の仕組みspec_helper.rb
◦テストコードの実装を助けるモジュール◦テストコードが奇麗になるように、必要なモジュールを先にロードする◦対象サーバへの接続方法もこのファイルで定義
◆Check!!◆Rakefile と spec_helper.rb のカスタマイズでServerspec の挙動は如何様にも変えられる
Serverspec の仕組みテストの実行
◦テストの実行は Rakefile がある場所で以下のコマンドを実行するだけ
$ rake spec
テストコード簡単なテストコード
◦以下を確認 「 httpd 」パッケージがインストールされていること
require 'spec_helper'
describe ("check httpd is installed") do describe package("httpd") do it { should be_installed } endend
テストコードリソースタイプ
◦Serverspec が用意した、テスト対象、 およびテストモジュール群describe package("httpd") do it { should be_installed }end
「 package 」がリソースタイプ
テストコードpackage リソース
◦パッケージに対するテストモジュールを持っている インストール確認 インストールバージョン確認
describe package("httpd") do it { should be_installed }end
テストコードservice リソース
◦サービスに対するテストモジュールを持っている 起動確認 自動起動設定確認
describe service("httpd") do it { should be_enabled }end
テストコードfile リソース
◦ファイルやディレクトリに対するテストモジュールを持っている 存在確認 ファイルの内容確認 権限確認 所有者確認
describe file("/var/www/html/index.html") do it { should exist }end
テストコードdescribe
◦テストのグループを作るのに使う◦実際のテストは describe ブロックの中の it 、 its 文
describe ("check httpd service is enabled and running") describe service("httpd") do it { should be_running } it { should be_enabled } endend
デモ
http://serverspec.orghttp://itamae.kitchen
コントロールマシン Web サーバ
デモ内容テーマ: HTTPS サイトの構築• 環境
設定・テスト
http://serverspec.orghttp://itamae.kitchen
Apache
mod_ssl
デモ内容テーマ: HTTPS サイトの構築
[Itamae]•パッケージのインストール• httpd• mod_ssl
•秘密鍵の作成•自己署名証明書の作成•設定ファイルの修正•index.html の配置•サービスの起動•サービスの自動起動設定
[Serverspec]•インストールチェック• httpd• mod_ssl
•秘密鍵の存在確認•自己署名証明書の存在確認•設定ファイルの内容確認•index.html の存在確認•サービスの起動確認•サービスの自動起動設定確認
Itamae/Serverspec で自動化するところ
THANK YOU!!