itamae-serverspec入門

31
Itamae – Serverspec 入入 http://serverspec.o http://itamae.kitch

Upload: tatsunori-saito

Post on 06-Apr-2017

272 views

Category:

Engineering


2 download

TRANSCRIPT

Page 1: Itamae-Serverspec入門

Itamae – Serverspec 入門

http://serverspec.orghttp://itamae.kitchen

Page 2: Itamae-Serverspec入門

AgendaServerspec の部

◦serverspec とは◦serverspec の仕組み

serverspec-init Rakefile と

spec_helper.rb テストの実行

◦テストコード 簡単なテストコード リソースタイプ describe

Itamae の部◦Itamae とは◦レシピ

簡単なレシピ リソースタイプ よく使う ruby の文法

◦Itamae の実行

デモ

Page 3: Itamae-Serverspec入門

自己紹介名前

◦bbrfkr( ビビリフクロウ )所属

◦TIS 株式会社 IT 基盤技術推進部所属ミッション

◦インフラの構築・運用保守の自動化推進◦Ansible 、 Serverspec を用いた、自動化フレームワークの開発

Page 4: Itamae-Serverspec入門

Itamae の部

http://itamae.kitchen

Page 5: Itamae-Serverspec入門

Itamae とは構成管理ツールの一つサーバの「あるべき状態」を記述し、その状態に収束させる競合製品に Ansible 、 Chef などクックパッド社の荒井良太さんを中心に開発

http://itamae.kitchen

Page 6: Itamae-Serverspec入門

Itamae とは他の構成管理ツールとの比較

Itamae Ansible Chef

エージェントの必要性

不要 不要 必要

レシピ /プレイブックの記述言語

Ruby(DSL)

YAML Ruby(DSL)

既存モジュール/ リソースの数

少ない(15 個 )

非常に多い(806 個 )

多い(66 個 )

Page 7: Itamae-Serverspec入門

レシピ簡単なレシピ

◦docker パッケージをインストール◦docker サービスの起動、自動起動設定

package "docker" do action :installend

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

Page 8: Itamae-Serverspec入門

レシピリソースタイプ

◦Itamae が用意している、設定対象およびその設定モジュール群package "docker" do action :installend

「 package 」がリソースタイプ

Page 9: Itamae-Serverspec入門

レシピpackage リソース

◦パッケージのインストール、アンインストールpackage "docker" do action :installendservice リソース

◦サービスの起動 / 停止、自動起動設定service "docker" do action [:enable, :start]end

Page 10: Itamae-Serverspec入門

レシピfile リソース

◦ファイルの配置 / 削除、権限 / 所有者設定◦ファイルの内容変更

file "/foo" do action :edit block do |content| content.gsub!("world", "Itamae") endend

Page 11: Itamae-Serverspec入門

レシピ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

Page 12: Itamae-Serverspec入門

レシピよく使う 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

Page 13: Itamae-Serverspec入門

レシピよく使う 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

Page 14: Itamae-Serverspec入門

レシピよく使う 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

Page 15: Itamae-Serverspec入門

Itamae の実行「 itamae ssh 」コマンドで実行

◦-h :対象ホストを指定◦-u :接続ユーザを指定◦-p :接続ポートを指定

$ itamae ssh -h 192.168.0.10 -u root -p 22 cookbook.rb

Page 16: Itamae-Serverspec入門

Serverspec の部

http://serverspec.org

Page 17: Itamae-Serverspec入門

Serverspec とはインフラの自動テストツール対象サーバに SSH で接続し、テスト用コマンドを叩くサーバの内部状態を確認できる

◦ホワイトボックステストエージェントレス開発者は「宮下 剛輔」さん

http://serverspec.org

Page 18: Itamae-Serverspec入門

Serverspec の仕組みserverspec-init

◦serverspec の実行に必要な一式のディレクトリ構造を作ってくれるコマンド◦実行すると以下のような構造ができる

.|-- Rakefile`-- spec |-- 192.168.0.1 | `-- sample_spec.rb `-- spec_helper.rb

(rake) タスクを定義するファイル

テストコードの実装を助けるモジュール

httpd のインストール状況を試験するサンプルコード

Page 19: Itamae-Serverspec入門

Serverspec の仕組みRakefile

◦rake タスクを定義するファイル◦serverspec によるテスト実行の実態は、

rake タスクの実行◦デフォルトでは、「 spec/< ホスト名

> 」ディレクトリ内のテストコードを <ホスト名 > に対して実行するように rakeタスクが定義されている

Page 20: Itamae-Serverspec入門

Serverspec の仕組みspec_helper.rb

◦テストコードの実装を助けるモジュール◦テストコードが奇麗になるように、必要なモジュールを先にロードする◦対象サーバへの接続方法もこのファイルで定義

◆Check!!◆Rakefile と spec_helper.rb のカスタマイズでServerspec の挙動は如何様にも変えられる

Page 21: Itamae-Serverspec入門

Serverspec の仕組みテストの実行

◦テストの実行は Rakefile がある場所で以下のコマンドを実行するだけ

$ rake spec

Page 22: Itamae-Serverspec入門

テストコード簡単なテストコード

◦以下を確認 「 httpd 」パッケージがインストールされていること

require 'spec_helper'

describe ("check httpd is installed") do describe package("httpd") do it { should be_installed } endend

Page 23: Itamae-Serverspec入門

テストコードリソースタイプ

◦Serverspec が用意した、テスト対象、  およびテストモジュール群describe package("httpd") do it { should be_installed }end

「 package 」がリソースタイプ

Page 24: Itamae-Serverspec入門

テストコードpackage リソース

◦パッケージに対するテストモジュールを持っている インストール確認 インストールバージョン確認

describe package("httpd") do it { should be_installed }end

Page 25: Itamae-Serverspec入門

テストコードservice リソース

◦サービスに対するテストモジュールを持っている 起動確認 自動起動設定確認

describe service("httpd") do it { should be_enabled }end

Page 26: Itamae-Serverspec入門

テストコードfile リソース

◦ファイルやディレクトリに対するテストモジュールを持っている 存在確認 ファイルの内容確認 権限確認 所有者確認

describe file("/var/www/html/index.html") do it { should exist }end

Page 27: Itamae-Serverspec入門

テストコード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

Page 28: Itamae-Serverspec入門

デモ

http://serverspec.orghttp://itamae.kitchen

Page 29: Itamae-Serverspec入門

コントロールマシン Web サーバ

デモ内容テーマ: HTTPS サイトの構築• 環境

設定・テスト

http://serverspec.orghttp://itamae.kitchen

Apache

mod_ssl

Page 30: Itamae-Serverspec入門

デモ内容テーマ: HTTPS サイトの構築

[Itamae]•パッケージのインストール• httpd• mod_ssl

•秘密鍵の作成•自己署名証明書の作成•設定ファイルの修正•index.html の配置•サービスの起動•サービスの自動起動設定

[Serverspec]•インストールチェック• httpd• mod_ssl

•秘密鍵の存在確認•自己署名証明書の存在確認•設定ファイルの内容確認•index.html の存在確認•サービスの起動確認•サービスの自動起動設定確認

Itamae/Serverspec で自動化するところ

Page 31: Itamae-Serverspec入門

THANK YOU!!