読者です 読者をやめる 読者になる 読者になる

複数サーバの設定をserverspecに食わせて実行するサンプル

dev.yaml

"host1":
  :roles:
    - foocheck
  :ssh_opts:
    :user: centos
    :keys: ~/.ssh/bar.pem
    :paranoid: false
"host2":
  :roles:
    - foocheck
  :ssh_opts:
    :user: centos
    :keys: ~/.ssh/bar.pem
    :paranoid: false

Rakefile

require 'rake'
require 'rspec/core/rake_task'
require 'yaml'

task :spec    => 'spec:all'
task :default => :spec


namespace :spec do
  spec_env = ENV['SPEC_ENV']
  if spec_env
    properties = YAML.load_file("./#{spec_env}.yaml")
  else
    raise RuntimeError, "HPB-ERROR: No hosts defined for \"#{spec_env}\""
  end

  task :all => properties.keys.map {|key| 'spec:' + key }

  properties.each_key do |key|
    desc "Run serverspec to #{key}"
    RSpec::Core::RakeTask.new(key.to_sym) do |t|
      t.fail_on_error = false
      ENV['TARGET_HOST'] = key
      t.pattern = 'spec/{' + properties[key][:roles].join(',') + '}/*_spec.rb'
    end
  end

end

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)

options[:user] ||= Etc.getlogin

# add ssh options
spec_env = ENV['SPEC_ENV']
properties = YAML.load_file("./#{spec_env}.yaml")
unless properties[host][:ssh_opts].nil?
  options.merge!(properties[host][:ssh_opts])
end

# add pty option
set :request_pty, true

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

# Disable sudo
# set :disable_sudo, true


# Set environment variables
# set :env, :LANG => 'C', :LC_MESSAGES => 'C'

# Set PATH
# set :path, '/sbin:/usr/local/sbin:$PATH'

実行方法

SPEC_ENV=dev /usr/local/rbenv/shims/bundle exec rake spec:all -t

squidめも

squid で HTTPS の透過型プロキシを立てる。さらに Google Apps 契約ドメインのアカウントだけが Google にログインできるようにする。 - pslaboの日記

TLS1.2が使えない環境のためのProxy (squid)設定 - kikumotoのメモ帳

POSTしてアプリケーションが503を返すのにNginxが40xを返してしまう話

Return 503 for POST request in Nginx - Stack Overflow

Rails Maintenance Pages Done Right — Onehub

nginx でメンテナンス画面を表示する方法 - SmallStyle(2012-03-05)

proxy_intercept_errors

nginxでerror_pageにproxy_pass配下のURLを指定する - うまいぼうぶろぐ

proxy - Is it possible to change the HTTP status code returned when proxy_pass gateway is down in nginx? - Stack Overflow

MacのNetwork周り

  • ipconfig getpacket <Device:eth0等>
    • DHCPでもらってるものをみる
  • networksetup -listallhardwareports
    • どのハードウェアがどのDeviceか見る
  • sudo ipconfig set en0 BOOTP
  • sudo ipconfig set en0 DHCP

参考

osx - DHCP Setting in Mac OS X - Stack Overflow

dockerめも

imageとcontainer

Dockerイメージとコンテナの削除方法 - Qiita

Dockerイメージの理解とコンテナのライフサイクル

Dockerにおけるコンテナのライフサイクル - めもめも

awsでjenkinsのメモ

事例

ECSのメモ

EC2 Container Serviceを使ってみる - Qiita

Jenkinsのメモ

Amazon EC2 Container Service Plugin - Jenkins - Jenkins Wiki

docker with jenkinsのメモ

Docker を使って Jenkins サーバーをローカルに構築する (プラグイン導入済み) | Developers.IO

jenkins pipelineのメモ

pipeline-plugin/TUTORIAL.md at master · jenkinsci/pipeline-plugin · GitHub

serverspecめも

$ gem install serverspec
$ serverspec-init // unixでsshのケース

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: abc
 + spec/
 + spec/abc/
 + spec/abc/sample_spec.rb
 + spec/spec_helper.rb
 + Rakefile
 + .rspec

参考