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

2015年4月7日火曜日

Serverspec で公開鍵+ Passphrase で SSH ログインしてテストする方法

概要

サーバへのSSHログインが公開鍵+パスフレーズによる認証の場合にServerspecを実行する方法を紹介します

環境

  • CentOS release 6.6 (Final)
  • Serverspec 2.14.0

設定方法

spec_helper.rb の修正

以下の設定をspec_helper.rbに追記します

options[:keys] = ENV['KEY'];
options[:passphrase] = ENV['PASSPHRASE'];
options[:user] = ENV['USER'] || Etc.getlogin

環境変数「KEY」「PASSPHRASE」「USER」を実行時にセットできるようにします
追記した版のspec_helper.rbの全貌はこちら

require 'serverspec'
require 'net/ssh'

set :backend, :ssh

if ENV['ASK_SUDO_PASSWORD']
  begin
    require 'highline/import'
  rescue LoadError
    fail "highline is not available. Try installing it."
  end
  set :sudo_password, ask("Enter sudo password: ") { |q| q.echo = false }
else
  set :sudo_password, ENV['SUDO_PASSWORD']
end

host = ENV['TARGET_HOST']

options = Net::SSH::Config.for(host)

## for login key + passphrase configurations
options[:keys] = ENV['KEY'];
options[:passphrase] = ENV['PASSPHRASE'];
options[:user] = ENV['USER'] || Etc.getlogin
# options[:user] ||= Etc.getlogin

set :host,        options[:host_name] || host
set :ssh_options, options

実行方法

上記を記載したら実行します
実行方法は以下の通りです

rake spec:targetHost USER=hoge PASSPHRASE=fuga KEY=/opt/keys/hoge_login_key.pem

USERは指定しないと現在ログイン中のユーザで実行されます

最後に

今回は環境変数を使って実現していますが、例えばJSONファイルに設定を記載してそれを読み込むことでログインすることも可能だと思います

2014年8月7日木曜日

Jenkins+serversepc で結果を見やすくする

serverspecのテスト結果を見せれば、そのインフラ構成がわかる
が、結果がそもそも見づらい環境はよくないんじゃないかと思ってちょっとでも見やすくしてみました
目grepというか可視性を上げることは大事だと思います

■serverspec側でやること
gem install colorize

をして spec ファイル内の必要な部分で

require 'colorize'

...

puts "Start server-spec ".colorize(:color => :red, :background => :blue) + `hostname`.colorize(:color => :red, :background => :blue)

...
puts 

的なことをしてあげます
colorize は String クラスのobjectに対してANSIのカラーシーケンスを追加することができるライブラリです
puts することで serverspec の実行結果に必要な情報を出力してあげます
詳細は https://github.com/fazibear/colorize をご覧ください

そして、serverspec を実行する際に以下のオプションを指定してください
SPEC_OPTS="-fd"

こうすることで実行結果が自然言語っぽくなります

■Jenkins側でやること
AnsiColor Plugin をインストールします

Jenkinsの管理 -> プラグインの管理
から「AnsiColor Plugin」を検索してインストールします

インストール後に特に設定することはないですが
AnsiColor Plugin 自体のカスタマイズをすることはできるのでやりたい方は以下を参考に実施してみてください
https://wiki.jenkins-ci.org/display/JENKINS/AnsiColor+Plugin

また、Simple Theme Pluginがインストールされているなら実行結果を黒背景にするともっと見やすくなると思います
(参考にさせていただいきました -> http://kyamada.hatenablog.com/entry/2012/10/12/191723
Simple Theme Plugin の設定方法に関してはこちらを御覧ください

emacs /path/to/userContent/sample.css
pre {
    white-space: pre-wrap;       /* css-3 */
    white-space: -moz-pre-wrap;  /* Mozilla, since 1999 */
    white-space: -pre-wrap;      /* Opera 4-6 */
    white-space: -o-pre-wrap;    /* Opera 7 */
    word-wrap: break-word;       /* Internet Explorer 5.5+ */
    margin: 0;

    background-color:black;
    color:white;
}

.CodeMirror pre {
    color:black !important;
}

下の「.CodeMirror pre」の定義はジョブの説明を設定する際に文字色を黒にする設定です
preのcssの定義に引っ張られて文字色まで白になってしまい説明文がわからないので黒に設定します

Jenkinsのcssを直接変更しても対応可能です
CSSファイルを変更後はJenkinsの再起動は不要です(反映されない場合は、編集するcssが間違っているか Simple Theme Plugin の設定がうまくいってないと思います)

■Jenkinsのジョブに対してやること
serverspec を実行するジョブの設定を開きます

ビルド環境の設定項目に「Color ANSI Console Output」という項目が追加になっているのでチェックします
セレクトボックスでは出力する色の定義を選択できます
デフォルトでいろいろと用意されているのお好みに合わせて変更してください


また serverspec側でやること で記載した通りJenkinsから serverspec を実行するときのパラメータに SPEC_OPTS="-fd" を追加してください

■結果
上記の設定を実施した上でserverspec のジョブを実行しコンソール出力を見ると以下のような感じにすることができます


ちょっと見やすくすることができたと思います
まだまだ改善の余地はあると思うのでもっと見やすくできたらいいなーと思っています
以上

2013年9月22日日曜日

serverspecをインストールして試してみた

■環境
CentOS 5.9
serverspec (0.8.1)

■インストールおよび初期設定
gem install --no-rdoc --no-ri serverspec
serverspec-init
Select a backend type:

1) SSH
2) Exec (local)

Select number: 1

Vagrant instance y/n: n
Input target host name: testserver
+ spec/
+ spec/testserver/
+ spec/testserver/httpd_spec.rb
+ spec/spec_helper.rb
+ Rakefile

testserverをテストします
testserverへはsshにて接続してテストする設定となります

テストするサーバへsshのノンパスできるように設定します
http://kakakikikeke.blogspot.jp/2012/03/10ssh.html

パスワード認証を使ってSSHする場合には以下を参考にしてみてください
http://qiita.com/ingtk@github/items/e1bd500a7d6d95968d3c

■実行
rake spec

とするとサンプルのhttpdのインストールや設定の確認をするサンプルが動作します
標準出力にはテスト結果が出力されます
失敗したテストに関してはその詳細が表示されます

■サンプルレシピ作成
とりあえずサンプルを動作させただけなので独自でレシピを作成します

vim spec/testserver/bash_spec.rb
require 'spec_helper'

describe package('bash') do
  it { should be_installed   }
end

rake spec

bash がインストールされているか確認するサンプルレシピです
絶対成功すると思います
spec/[host_name]/配下にhogehoge_spec.rbという名前でレシピを作成すれば勝手にincludeしてテストしてくれます

書き方としては「describe hogehoge」でどんなテストをするか記述します
「it」どうなっているかを定義します
packageは引数で指定したパッケージがインストールされているか確認します
他にもserviceで指定したサービスが起動しているか調べたりやportで指定したポートがLISTENになっているかを確認できます
ファイルの有無やネットワークの通信などサーバの設定確認に必要なコマンドは一通り用意されているようです
詳細は以下で確認できます
http://serverspec.org/resource_types.html

■参考サイト