SlideShare uma empresa Scribd logo
1 de 11
Serverspecを使用した
サーバ設定テストの実例
https://speakerdeck.com/simozono/kagomoku-no8
鹿児島大学学術情報基盤センター
下園幸一
simozono@cc.kagoshima-u.ac.jp
2018/05/26 かごもく #8 でばっぐ 1
Serverspecとは
 サーバの実際の状態を「ローカルコマンド
実行」、「SSH」、「WinRM」、「Docker
API」等を通してテストする ruby で書かれ
たツール
 宮下剛輔氏によって開発されている
 https://serverspec.org/
 特徴
◦ テスト対象のサーバにはエージェント等を導入
する必要はない
◦ 構成管理ツール(Puppet, Ansible, CFEngine,
Itamae(Chef)等と共に使用可能
◦ ほぼ ruby の Rspec
 真の目的は「インフラストラクチャコード
のリファクタリングを助けること」
2018/05/26 かごもく #8 でばっぐ 2
2018年の状況
 2018年以降、それほど盛んでもない
 新機能は「自分で実装してね」という立
場
2018/05/26 かごもく #8 でばっぐ 3
利用方法
2018/05/26 かごもく #8 でばっぐ 4
gem のインストール
$ gem install serverspec
初期設定(雛形作成):
$ serverspec-init
Select OS type:
1) UN*X
2) Windows
Select number: 1
Select a backend type:
1) SSH
2) Exec (local)
Select number: 1
Vagrant instance y/n: n
Input target host name: webhost.cc.kagoshima-u.ac.jp
+ spec/
+ spec/webhost.cc.kagoshima-u.ac.jp/
+ spec/webhost.cc.kagoshima-u.ac.jp/sample_spec.rb
+ spec/spec_helper.rb
+ Rakefile
+ .rspec
$
severspecを導入するマシン
テスト対象ホスト
webhost.cc.kagoshima-u.ac.jp
ssh
ホスト名に対応した
ディレクトリが作成さ
れる
サンプルspecファイル
利用方法
2018/05/26 かごもく #8 でばっぐ 5
実行
$ rake spec:webhost.cc.kagoshima-u.ac.jp
結果
$ rake spec:webhost.cc.kagoshima-u.ac.jp ASK_SUDO_PASSWORD=1
Enter sudo password:
Package "httpd"
should be installed
Service "httpd"
should be enabled
should be running
Port "80"
should be listening
Finished in 1.48 seconds (files took 6.75 seconds to load)
4 examples, 0 failures
$
標準のディレクトリ構成と実行につい
て
./
spec
host1
http_spec.rb
users_spec.rb
… _spec.rb
host2
hoge1_spec.rb
hoge2_spec.rb
… _spec.rb…
spec_helper.rb
Rakefile
.rspec
2018/05/26 かごもく #8 でばっぐ 6
 spec ディレクトリ配下にディレクトリを作成すると、それは
「ホスト名」であると認識する
◦ 複数のホストに対するテストを管理できる
 ホスト名ディレクトリ配下の「*_spec.rb」をspecファイルとして
認識し、全てをテストする
 これらの制御は Rakefile で行っている
◦ Rakefile をいじれば、いろいろできる
 ssh のログイン制御等「テスト対象ホストへのアクセス方法」制
御は、spec_helper.rb で行っている
specファイルについて(1)
 リソースタイプ(resource type)
 マッチャー(matcher)
2018/05/26 かごもく #8 でばっぐ 7
sample_spec.rb (抜粋)
require 'spec_helper'
describe package('httpd') do
it { should be_installed }
end
describe service('httpd') do
it { should be_enabled }
it { should be_running }
end
describe port(80) do
it { should be_listening }
end
パッケージ httpd は
インストールされているか?
サービス httpd は
(起動時)有効になっ
ているか?
(現在)起動している
か?
specファイルについて(2)
 リソースタイプごとに一部マッチャーは決まっている
◦ もちろん rspec 由来のマッチャーも利用可能
 どんなリソースタイプがあるのか?
https://serverspec.org/resource_types.html
2018/05/26 かごもく #8 でばっぐ 8
describe user('simozono') do
it { is_expected.to exist }
it { is_expected.to belong_to_group 'wheel' }
it { is_expected.to have_uid 1101 }
it { is_expected.to have_home_directory "/home/simozono" }
it { is_expected.to have_login_shell '/bin/bash' }
end
describe interface('ens160') do
it { is_expected.to exist }
it { is_expected.to be_up }
it { is_expected.to have_ipv4_address "192.168.1.241/24" }
end
describe file '/etc/ntp.conf' do
time_cc_regex = /^server[ t]+timeserver.kagoshima-u.ac.jp/
sinet_ntp_regex = /^server[ t]+ntp[01]1.sinet.ad.jp/
its(:content) { is_expected.to match time_cc_regex }
its(:content) { is_expected.to match sinet_ntp_regex }
end
所属組織での利用方法
 業務で必要なサーバは仮想化基盤 (Vmware)上に手動で作成
◦ サーバによって設定がまちまち
 logrotate が入っていたり入っていなかったり
 ログの保存期間が4週だったり60週だったり
 9つのサーバに対して serverspec を書いた
◦ 共通のテスト項目(ntpが動いているかとか)は、できるだけまとめた
 rspec の shared_examples 機能
 ホスト固有の情報(IPアドレス等)は、specファイルには書かずに、yaml ファイル
書く
 How to use host specific properties
 https://serverspec.org/advanced_tips.html
 よくなった点
◦ 設定等が統一された
◦ 新規サーバ構築時に設定が間違っていないかテストできる
◦ 設定変更者と設定変更確認者を分離し業務フローを作成
 問題点
◦ OS標準からの設定変更点を spec ファイルに全部書き出したか?
◦ 標準でマッチャーがないテスト項目は、設定ファイルの変更点を 正規
表現に頼っているため、正規表現の記載が面倒
 例: /etc/httpd/conf.d/vhost.conf の <VirtualHost *:80>の中で、ちゃんと
ServerName は指定のホスト名となっているか? CustomLog は 指定したファイ
ル名になっているか? <Directory> は指定したディレクトリになっているか?
2018/05/26 かごもく #8 でばっぐ 9
InSpecについて
 InSpecとは
◦ https://inspec.io/
 Chef Software が開発
 特徴
◦ InSpec is inspired by the wonderful Serverspec
project.
◦ InSpec は、コンプライアンス担保を目的として
いる。
 Migrate from Serverspec to InSpec
◦ https://www.inspec.io/docs/reference/migration/
 2018年現在、活発に開発が続いている
 詳細は…使ってないのでよくわかりません
2018/05/26 かごもく #8 でばっぐ 10
Serverspecに関する参考&感想
 本家
◦ https://serverspec.org/
 書籍
◦ O’Reilly より「Serverspec」
 qiita 等でいっぱい出てきます
 少し難しいことをしようと思うと ruby &
rspec の知識が必要となります
 本気でやると resource type が不足
◦ firewalld の設定
 https://github.com/decors/serverspec-firewalld-
resources を利用しました。
2018/05/26 かごもく #8 でばっぐ 11

Mais conteúdo relacionado

Mais procurados

Windows Server 2019 で Container を使ってみる
Windows Server 2019 で Container を使ってみるWindows Server 2019 で Container を使ってみる
Windows Server 2019 で Container を使ってみるKazuki Takai
 
Zabbixを徹底活用してみよう ~4.2の最新情報もご紹介~
Zabbixを徹底活用してみよう ~4.2の最新情報もご紹介~Zabbixを徹底活用してみよう ~4.2の最新情報もご紹介~
Zabbixを徹底活用してみよう ~4.2の最新情報もご紹介~Daisuke Ikeda
 
開発者におくるサーバーレスモニタリング
開発者におくるサーバーレスモニタリング開発者におくるサーバーレスモニタリング
開発者におくるサーバーレスモニタリングAmazon Web Services Japan
 
YugabyteDBを使ってみよう(NewSQL/分散SQLデータベースよろず勉強会 #1 発表資料)
YugabyteDBを使ってみよう(NewSQL/分散SQLデータベースよろず勉強会 #1 発表資料)YugabyteDBを使ってみよう(NewSQL/分散SQLデータベースよろず勉強会 #1 発表資料)
YugabyteDBを使ってみよう(NewSQL/分散SQLデータベースよろず勉強会 #1 発表資料)NTT DATA Technology & Innovation
 
CRX: Container Runtime Executive 
CRX: Container Runtime Executive CRX: Container Runtime Executive 
CRX: Container Runtime Executive imurata8203
 
フィッシングとドメイン名・DNS
フィッシングとドメイン名・DNSフィッシングとドメイン名・DNS
フィッシングとドメイン名・DNSShiojiri Ohhara
 
Harbor RegistryのReplication機能
Harbor RegistryのReplication機能Harbor RegistryのReplication機能
Harbor RegistryのReplication機能Masanori Nara
 
20200826 AWS Black Belt Online Seminar AWS CloudFormation
20200826 AWS Black Belt Online Seminar AWS CloudFormation 20200826 AWS Black Belt Online Seminar AWS CloudFormation
20200826 AWS Black Belt Online Seminar AWS CloudFormation Amazon Web Services Japan
 
AWSのログ管理ベストプラクティス
AWSのログ管理ベストプラクティスAWSのログ管理ベストプラクティス
AWSのログ管理ベストプラクティスAkihiro Kuwano
 
楽天サービスを支えるネットワークインフラストラクチャー
楽天サービスを支えるネットワークインフラストラクチャー楽天サービスを支えるネットワークインフラストラクチャー
楽天サービスを支えるネットワークインフラストラクチャーRakuten Group, Inc.
 
Cloud Spanner をより便利にする運用支援ツールの紹介
Cloud Spanner をより便利にする運用支援ツールの紹介Cloud Spanner をより便利にする運用支援ツールの紹介
Cloud Spanner をより便利にする運用支援ツールの紹介gree_tech
 
製造業向けSmart Factoryデモと 関連AWSサービスのご紹介
製造業向けSmart Factoryデモと 関連AWSサービスのご紹介製造業向けSmart Factoryデモと 関連AWSサービスのご紹介
製造業向けSmart Factoryデモと 関連AWSサービスのご紹介Amazon Web Services Japan
 
コンテナネットワーキング(CNI)最前線
コンテナネットワーキング(CNI)最前線コンテナネットワーキング(CNI)最前線
コンテナネットワーキング(CNI)最前線Motonori Shindo
 
20190320 AWS Black Belt Online Seminar Amazon EBS
20190320 AWS Black Belt Online Seminar Amazon EBS20190320 AWS Black Belt Online Seminar Amazon EBS
20190320 AWS Black Belt Online Seminar Amazon EBSAmazon Web Services Japan
 
どうやって決める?kubernetesでのシークレット管理方法(Cloud Native Days 2020 発表資料)
どうやって決める?kubernetesでのシークレット管理方法(Cloud Native Days 2020 発表資料)どうやって決める?kubernetesでのシークレット管理方法(Cloud Native Days 2020 発表資料)
どうやって決める?kubernetesでのシークレット管理方法(Cloud Native Days 2020 発表資料)NTT DATA Technology & Innovation
 
Chefで始めるWindows Server構築
Chefで始めるWindows Server構築Chefで始めるWindows Server構築
Chefで始めるWindows Server構築Takashi Kanai
 
AWSでDockerを扱うためのベストプラクティス
AWSでDockerを扱うためのベストプラクティスAWSでDockerを扱うためのベストプラクティス
AWSでDockerを扱うためのベストプラクティスAmazon Web Services Japan
 

Mais procurados (20)

Windows Server 2019 で Container を使ってみる
Windows Server 2019 で Container を使ってみるWindows Server 2019 で Container を使ってみる
Windows Server 2019 で Container を使ってみる
 
Zabbixを徹底活用してみよう ~4.2の最新情報もご紹介~
Zabbixを徹底活用してみよう ~4.2の最新情報もご紹介~Zabbixを徹底活用してみよう ~4.2の最新情報もご紹介~
Zabbixを徹底活用してみよう ~4.2の最新情報もご紹介~
 
開発者におくるサーバーレスモニタリング
開発者におくるサーバーレスモニタリング開発者におくるサーバーレスモニタリング
開発者におくるサーバーレスモニタリング
 
YugabyteDBを使ってみよう(NewSQL/分散SQLデータベースよろず勉強会 #1 発表資料)
YugabyteDBを使ってみよう(NewSQL/分散SQLデータベースよろず勉強会 #1 発表資料)YugabyteDBを使ってみよう(NewSQL/分散SQLデータベースよろず勉強会 #1 発表資料)
YugabyteDBを使ってみよう(NewSQL/分散SQLデータベースよろず勉強会 #1 発表資料)
 
CRX: Container Runtime Executive 
CRX: Container Runtime Executive CRX: Container Runtime Executive 
CRX: Container Runtime Executive 
 
フィッシングとドメイン名・DNS
フィッシングとドメイン名・DNSフィッシングとドメイン名・DNS
フィッシングとドメイン名・DNS
 
Harbor RegistryのReplication機能
Harbor RegistryのReplication機能Harbor RegistryのReplication機能
Harbor RegistryのReplication機能
 
Keystone fernet token
Keystone fernet tokenKeystone fernet token
Keystone fernet token
 
20200826 AWS Black Belt Online Seminar AWS CloudFormation
20200826 AWS Black Belt Online Seminar AWS CloudFormation 20200826 AWS Black Belt Online Seminar AWS CloudFormation
20200826 AWS Black Belt Online Seminar AWS CloudFormation
 
分散トレーシング技術について(Open tracingやjaeger)
分散トレーシング技術について(Open tracingやjaeger)分散トレーシング技術について(Open tracingやjaeger)
分散トレーシング技術について(Open tracingやjaeger)
 
NGINXをBFF (Backend for Frontend)として利用した話
NGINXをBFF (Backend for Frontend)として利用した話NGINXをBFF (Backend for Frontend)として利用した話
NGINXをBFF (Backend for Frontend)として利用した話
 
AWSのログ管理ベストプラクティス
AWSのログ管理ベストプラクティスAWSのログ管理ベストプラクティス
AWSのログ管理ベストプラクティス
 
楽天サービスを支えるネットワークインフラストラクチャー
楽天サービスを支えるネットワークインフラストラクチャー楽天サービスを支えるネットワークインフラストラクチャー
楽天サービスを支えるネットワークインフラストラクチャー
 
Cloud Spanner をより便利にする運用支援ツールの紹介
Cloud Spanner をより便利にする運用支援ツールの紹介Cloud Spanner をより便利にする運用支援ツールの紹介
Cloud Spanner をより便利にする運用支援ツールの紹介
 
製造業向けSmart Factoryデモと 関連AWSサービスのご紹介
製造業向けSmart Factoryデモと 関連AWSサービスのご紹介製造業向けSmart Factoryデモと 関連AWSサービスのご紹介
製造業向けSmart Factoryデモと 関連AWSサービスのご紹介
 
コンテナネットワーキング(CNI)最前線
コンテナネットワーキング(CNI)最前線コンテナネットワーキング(CNI)最前線
コンテナネットワーキング(CNI)最前線
 
20190320 AWS Black Belt Online Seminar Amazon EBS
20190320 AWS Black Belt Online Seminar Amazon EBS20190320 AWS Black Belt Online Seminar Amazon EBS
20190320 AWS Black Belt Online Seminar Amazon EBS
 
どうやって決める?kubernetesでのシークレット管理方法(Cloud Native Days 2020 発表資料)
どうやって決める?kubernetesでのシークレット管理方法(Cloud Native Days 2020 発表資料)どうやって決める?kubernetesでのシークレット管理方法(Cloud Native Days 2020 発表資料)
どうやって決める?kubernetesでのシークレット管理方法(Cloud Native Days 2020 発表資料)
 
Chefで始めるWindows Server構築
Chefで始めるWindows Server構築Chefで始めるWindows Server構築
Chefで始めるWindows Server構築
 
AWSでDockerを扱うためのベストプラクティス
AWSでDockerを扱うためのベストプラクティスAWSでDockerを扱うためのベストプラクティス
AWSでDockerを扱うためのベストプラクティス
 

Semelhante a serverspecを使用したサーバ設定テストの実例

成長を加速する minne の技術基盤戦略
成長を加速する minne の技術基盤戦略成長を加速する minne の技術基盤戦略
成長を加速する minne の技術基盤戦略Hiroshi SHIBATA
 
~Dockerfileの開発を劇的に楽にする~ Dockerfile開発環境 EDGE
~Dockerfileの開発を劇的に楽にする~ Dockerfile開発環境 EDGE~Dockerfileの開発を劇的に楽にする~ Dockerfile開発環境 EDGE
~Dockerfileの開発を劇的に楽にする~ Dockerfile開発環境 EDGE辰徳 斎藤
 
Itamae-Serverspec入門
Itamae-Serverspec入門Itamae-Serverspec入門
Itamae-Serverspec入門辰徳 斎藤
 
ネットワークエンジニアのための Puppet / Chef
ネットワークエンジニアのための Puppet / Chefネットワークエンジニアのための Puppet / Chef
ネットワークエンジニアのための Puppet / Chefnpsg
 
ゲームのインフラをAwsで実戦tips全て見せます
ゲームのインフラをAwsで実戦tips全て見せますゲームのインフラをAwsで実戦tips全て見せます
ゲームのインフラをAwsで実戦tips全て見せますinfinite_loop
 
Ruby向け帳票ソリューション「ThinReports」の開発で知るOSSの威力
Ruby向け帳票ソリューション「ThinReports」の開発で知るOSSの威力Ruby向け帳票ソリューション「ThinReports」の開発で知るOSSの威力
Ruby向け帳票ソリューション「ThinReports」の開発で知るOSSの威力ThinReports
 
Open Source System Administration Framework - Func
Open Source System Administration Framework - FuncOpen Source System Administration Framework - Func
Open Source System Administration Framework - FuncGosuke Miyashita
 
Openstack SPICE console (icehouse) verification
Openstack SPICE console (icehouse) verificationOpenstack SPICE console (icehouse) verification
Openstack SPICE console (icehouse) verificationyukihiro kawada
 
PaaSの作り方 Sqaleの場合
PaaSの作り方 Sqaleの場合PaaSの作り方 Sqaleの場合
PaaSの作り方 Sqaleの場合hiboma
 
ヤギにサーバーを管理してもらう話
ヤギにサーバーを管理してもらう話ヤギにサーバーを管理してもらう話
ヤギにサーバーを管理してもらう話Masaki Kobayashi
 
名古屋Ruby会議01 A3.製造業向け3Dデータ変換ソリューションにおけるRuby活用事例
名古屋Ruby会議01 A3.製造業向け3Dデータ変換ソリューションにおけるRuby活用事例名古屋Ruby会議01 A3.製造業向け3Dデータ変換ソリューションにおけるRuby活用事例
名古屋Ruby会議01 A3.製造業向け3Dデータ変換ソリューションにおけるRuby活用事例Shigeru UCHIYAMA
 
シラサギハンズオン 1015 1016
シラサギハンズオン 1015 1016シラサギハンズオン 1015 1016
シラサギハンズオン 1015 1016Yu Ito
 
第20回CloudStackユーザ会_ApacheCloudStack4.4新機能紹介
第20回CloudStackユーザ会_ApacheCloudStack4.4新機能紹介第20回CloudStackユーザ会_ApacheCloudStack4.4新機能紹介
第20回CloudStackユーザ会_ApacheCloudStack4.4新機能紹介Midori Oge
 
XML-RPC : Pythonが「電池付属」と呼ばれる理由
XML-RPC : Pythonが「電池付属」と呼ばれる理由XML-RPC : Pythonが「電池付属」と呼ばれる理由
XML-RPC : Pythonが「電池付属」と呼ばれる理由Ransui Iso
 
Awsで構築したのだよ 05 プロセス監視、メモリ使用率、ディスク使用率をCloudWatchのカスタムメトリクスに追加したい
Awsで構築したのだよ 05 プロセス監視、メモリ使用率、ディスク使用率をCloudWatchのカスタムメトリクスに追加したいAwsで構築したのだよ 05 プロセス監視、メモリ使用率、ディスク使用率をCloudWatchのカスタムメトリクスに追加したい
Awsで構築したのだよ 05 プロセス監視、メモリ使用率、ディスク使用率をCloudWatchのカスタムメトリクスに追加したい聡 大久保
 

Semelhante a serverspecを使用したサーバ設定テストの実例 (20)

成長を加速する minne の技術基盤戦略
成長を加速する minne の技術基盤戦略成長を加速する minne の技術基盤戦略
成長を加速する minne の技術基盤戦略
 
~Dockerfileの開発を劇的に楽にする~ Dockerfile開発環境 EDGE
~Dockerfileの開発を劇的に楽にする~ Dockerfile開発環境 EDGE~Dockerfileの開発を劇的に楽にする~ Dockerfile開発環境 EDGE
~Dockerfileの開発を劇的に楽にする~ Dockerfile開発環境 EDGE
 
Itamae-Serverspec入門
Itamae-Serverspec入門Itamae-Serverspec入門
Itamae-Serverspec入門
 
ネットワークエンジニアのための Puppet / Chef
ネットワークエンジニアのための Puppet / Chefネットワークエンジニアのための Puppet / Chef
ネットワークエンジニアのための Puppet / Chef
 
ゲームのインフラをAwsで実戦tips全て見せます
ゲームのインフラをAwsで実戦tips全て見せますゲームのインフラをAwsで実戦tips全て見せます
ゲームのインフラをAwsで実戦tips全て見せます
 
Ruby向け帳票ソリューション「ThinReports」の開発で知るOSSの威力
Ruby向け帳票ソリューション「ThinReports」の開発で知るOSSの威力Ruby向け帳票ソリューション「ThinReports」の開発で知るOSSの威力
Ruby向け帳票ソリューション「ThinReports」の開発で知るOSSの威力
 
Open Source System Administration Framework - Func
Open Source System Administration Framework - FuncOpen Source System Administration Framework - Func
Open Source System Administration Framework - Func
 
Tottoruby 20110903
Tottoruby 20110903Tottoruby 20110903
Tottoruby 20110903
 
Openstack SPICE console (icehouse) verification
Openstack SPICE console (icehouse) verificationOpenstack SPICE console (icehouse) verification
Openstack SPICE console (icehouse) verification
 
Windows Azure PHP Tips
Windows Azure PHP Tips Windows Azure PHP Tips
Windows Azure PHP Tips
 
PaaSの作り方 Sqaleの場合
PaaSの作り方 Sqaleの場合PaaSの作り方 Sqaleの場合
PaaSの作り方 Sqaleの場合
 
ヤギにサーバーを管理してもらう話
ヤギにサーバーを管理してもらう話ヤギにサーバーを管理してもらう話
ヤギにサーバーを管理してもらう話
 
名古屋Ruby会議01 A3.製造業向け3Dデータ変換ソリューションにおけるRuby活用事例
名古屋Ruby会議01 A3.製造業向け3Dデータ変換ソリューションにおけるRuby活用事例名古屋Ruby会議01 A3.製造業向け3Dデータ変換ソリューションにおけるRuby活用事例
名古屋Ruby会議01 A3.製造業向け3Dデータ変換ソリューションにおけるRuby活用事例
 
シラサギハンズオン 1015 1016
シラサギハンズオン 1015 1016シラサギハンズオン 1015 1016
シラサギハンズオン 1015 1016
 
第20回CloudStackユーザ会_ApacheCloudStack4.4新機能紹介
第20回CloudStackユーザ会_ApacheCloudStack4.4新機能紹介第20回CloudStackユーザ会_ApacheCloudStack4.4新機能紹介
第20回CloudStackユーザ会_ApacheCloudStack4.4新機能紹介
 
Ansible2.0と実用例
Ansible2.0と実用例Ansible2.0と実用例
Ansible2.0と実用例
 
Apache Module
Apache ModuleApache Module
Apache Module
 
XML-RPC : Pythonが「電池付属」と呼ばれる理由
XML-RPC : Pythonが「電池付属」と呼ばれる理由XML-RPC : Pythonが「電池付属」と呼ばれる理由
XML-RPC : Pythonが「電池付属」と呼ばれる理由
 
Awsで構築したのだよ 05 プロセス監視、メモリ使用率、ディスク使用率をCloudWatchのカスタムメトリクスに追加したい
Awsで構築したのだよ 05 プロセス監視、メモリ使用率、ディスク使用率をCloudWatchのカスタムメトリクスに追加したいAwsで構築したのだよ 05 プロセス監視、メモリ使用率、ディスク使用率をCloudWatchのカスタムメトリクスに追加したい
Awsで構築したのだよ 05 プロセス監視、メモリ使用率、ディスク使用率をCloudWatchのカスタムメトリクスに追加したい
 
[Japan Tech summit 2017] DEP 005
[Japan Tech summit 2017] DEP 005[Japan Tech summit 2017] DEP 005
[Japan Tech summit 2017] DEP 005
 

serverspecを使用したサーバ設定テストの実例

  • 2. Serverspecとは  サーバの実際の状態を「ローカルコマンド 実行」、「SSH」、「WinRM」、「Docker API」等を通してテストする ruby で書かれ たツール  宮下剛輔氏によって開発されている  https://serverspec.org/  特徴 ◦ テスト対象のサーバにはエージェント等を導入 する必要はない ◦ 構成管理ツール(Puppet, Ansible, CFEngine, Itamae(Chef)等と共に使用可能 ◦ ほぼ ruby の Rspec  真の目的は「インフラストラクチャコード のリファクタリングを助けること」 2018/05/26 かごもく #8 でばっぐ 2
  • 4. 利用方法 2018/05/26 かごもく #8 でばっぐ 4 gem のインストール $ gem install serverspec 初期設定(雛形作成): $ serverspec-init Select OS type: 1) UN*X 2) Windows Select number: 1 Select a backend type: 1) SSH 2) Exec (local) Select number: 1 Vagrant instance y/n: n Input target host name: webhost.cc.kagoshima-u.ac.jp + spec/ + spec/webhost.cc.kagoshima-u.ac.jp/ + spec/webhost.cc.kagoshima-u.ac.jp/sample_spec.rb + spec/spec_helper.rb + Rakefile + .rspec $ severspecを導入するマシン テスト対象ホスト webhost.cc.kagoshima-u.ac.jp ssh ホスト名に対応した ディレクトリが作成さ れる サンプルspecファイル
  • 5. 利用方法 2018/05/26 かごもく #8 でばっぐ 5 実行 $ rake spec:webhost.cc.kagoshima-u.ac.jp 結果 $ rake spec:webhost.cc.kagoshima-u.ac.jp ASK_SUDO_PASSWORD=1 Enter sudo password: Package "httpd" should be installed Service "httpd" should be enabled should be running Port "80" should be listening Finished in 1.48 seconds (files took 6.75 seconds to load) 4 examples, 0 failures $
  • 6. 標準のディレクトリ構成と実行につい て ./ spec host1 http_spec.rb users_spec.rb … _spec.rb host2 hoge1_spec.rb hoge2_spec.rb … _spec.rb… spec_helper.rb Rakefile .rspec 2018/05/26 かごもく #8 でばっぐ 6  spec ディレクトリ配下にディレクトリを作成すると、それは 「ホスト名」であると認識する ◦ 複数のホストに対するテストを管理できる  ホスト名ディレクトリ配下の「*_spec.rb」をspecファイルとして 認識し、全てをテストする  これらの制御は Rakefile で行っている ◦ Rakefile をいじれば、いろいろできる  ssh のログイン制御等「テスト対象ホストへのアクセス方法」制 御は、spec_helper.rb で行っている
  • 7. specファイルについて(1)  リソースタイプ(resource type)  マッチャー(matcher) 2018/05/26 かごもく #8 でばっぐ 7 sample_spec.rb (抜粋) require 'spec_helper' describe package('httpd') do it { should be_installed } end describe service('httpd') do it { should be_enabled } it { should be_running } end describe port(80) do it { should be_listening } end パッケージ httpd は インストールされているか? サービス httpd は (起動時)有効になっ ているか? (現在)起動している か?
  • 8. specファイルについて(2)  リソースタイプごとに一部マッチャーは決まっている ◦ もちろん rspec 由来のマッチャーも利用可能  どんなリソースタイプがあるのか? https://serverspec.org/resource_types.html 2018/05/26 かごもく #8 でばっぐ 8 describe user('simozono') do it { is_expected.to exist } it { is_expected.to belong_to_group 'wheel' } it { is_expected.to have_uid 1101 } it { is_expected.to have_home_directory "/home/simozono" } it { is_expected.to have_login_shell '/bin/bash' } end describe interface('ens160') do it { is_expected.to exist } it { is_expected.to be_up } it { is_expected.to have_ipv4_address "192.168.1.241/24" } end describe file '/etc/ntp.conf' do time_cc_regex = /^server[ t]+timeserver.kagoshima-u.ac.jp/ sinet_ntp_regex = /^server[ t]+ntp[01]1.sinet.ad.jp/ its(:content) { is_expected.to match time_cc_regex } its(:content) { is_expected.to match sinet_ntp_regex } end
  • 9. 所属組織での利用方法  業務で必要なサーバは仮想化基盤 (Vmware)上に手動で作成 ◦ サーバによって設定がまちまち  logrotate が入っていたり入っていなかったり  ログの保存期間が4週だったり60週だったり  9つのサーバに対して serverspec を書いた ◦ 共通のテスト項目(ntpが動いているかとか)は、できるだけまとめた  rspec の shared_examples 機能  ホスト固有の情報(IPアドレス等)は、specファイルには書かずに、yaml ファイル 書く  How to use host specific properties  https://serverspec.org/advanced_tips.html  よくなった点 ◦ 設定等が統一された ◦ 新規サーバ構築時に設定が間違っていないかテストできる ◦ 設定変更者と設定変更確認者を分離し業務フローを作成  問題点 ◦ OS標準からの設定変更点を spec ファイルに全部書き出したか? ◦ 標準でマッチャーがないテスト項目は、設定ファイルの変更点を 正規 表現に頼っているため、正規表現の記載が面倒  例: /etc/httpd/conf.d/vhost.conf の <VirtualHost *:80>の中で、ちゃんと ServerName は指定のホスト名となっているか? CustomLog は 指定したファイ ル名になっているか? <Directory> は指定したディレクトリになっているか? 2018/05/26 かごもく #8 でばっぐ 9
  • 10. InSpecについて  InSpecとは ◦ https://inspec.io/  Chef Software が開発  特徴 ◦ InSpec is inspired by the wonderful Serverspec project. ◦ InSpec は、コンプライアンス担保を目的として いる。  Migrate from Serverspec to InSpec ◦ https://www.inspec.io/docs/reference/migration/  2018年現在、活発に開発が続いている  詳細は…使ってないのでよくわかりません 2018/05/26 かごもく #8 でばっぐ 10
  • 11. Serverspecに関する参考&感想  本家 ◦ https://serverspec.org/  書籍 ◦ O’Reilly より「Serverspec」  qiita 等でいっぱい出てきます  少し難しいことをしようと思うと ruby & rspec の知識が必要となります  本気でやると resource type が不足 ◦ firewalld の設定  https://github.com/decors/serverspec-firewalld- resources を利用しました。 2018/05/26 かごもく #8 でばっぐ 11