class Rundock::Hook::Serverspec

You can use this sample as following yaml files for example.

rundock do scenario.yml -k hook.yml

hook.yml

check_os:

hook_type: serverspec
pattern: /path/to/check_os/*_spec.rb

check_nginx:

hook_type: serverspec
pattern: /path/to/nginx/*_spec.rb
host_properties: /path/to/properties.yml
scenario.yml
  • node: anyhost-01

hook:

- check_os
  • node: anyhost-02

deploy:

- src: /path/to/nginx.conf.local
  dst: /etc/nginx/nginx.conf

command:

- 'sudo /etc/init.d/nginx reload'

hook:

- check_os
- check_nginx

anyhost-01:

host: 192.168.1.11

# inherit from ./defautl_ssh.yml anyhost-02:

host: 192.168.1.12
ssh_opts:
  port: 22
  user: anyuser
  key:  ~/.ssh/id_rsa

properties.yml

anyhost-02:

anykey1: value1
anykey2: value2

Public Instance Methods

hook(operation_attributes, log_buffer) click to toggle source
# File lib/rundock/plugin/hook/serverspec.rb, line 50
def hook(operation_attributes, log_buffer)
  node_info = operation_attributes[0][:nodeinfo]
  node_info[:nodename] = operation_attributes[0][:nodename]
  setenv(node_info, @contents)
  load "#{::File.expand_path(::File.dirname(__FILE__))}/../../../../Rakefile"
  Logger.info("serverspec started: #{node_info[:nodename]}(#{node_info[:host]})")
  Rake.application[:serverspec].invoke
  Rake.application[:serverspec].reenable
end

Private Instance Methods

setenv(nodeinfo, contents) click to toggle source
# File lib/rundock/plugin/hook/serverspec.rb, line 62
def setenv(nodeinfo, contents)
  ENV['PATTERN'] = Array(@contents[:pattern]).join(',')
  ENV['TARGET_HOST'] = nodeinfo[:nodename]
  ENV['TARGET_SSH_HOST'] = nodeinfo[:host]
  ENV['HOST_PROPERTIES'] = contents[:host_properties]
  ENV['SSH_CONFIG'] = nodeinfo[:ssh_config]
  ENV['KEYS'] = nodeinfo[:keys].join(',') if nodeinfo.key?(:keys)
  ENV['KEYS'] = nodeinfo[:key] if nodeinfo.key?(:key)
  ENV['PASSWORD'] = nodeinfo[:password] if nodeinfo.key?(:password)
  ENV['PROXY'] = nodeinfo[:proxy] if nodeinfo.key?(:proxy)
  ENV['USER'] = nodeinfo[:user] if nodeinfo.key?(:user)
  ENV['PORT'] = nodeinfo[:port].to_s if nodeinfo.key?(:port)
  ENV['USER_KNOWN_HOSTS_FILE'] = nodeinfo[:user_known_hosts_file] if nodeinfo.key?(:user_known_hosts_file)
  ENV['ENCRIPTION'] = nodeinfo[:encryption] if nodeinfo.key?(:encryption)
  ENV['COMPRESSION'] = nodeinfo[:compression] if nodeinfo.key?(:compression)
  ENV['COMPRESSION_LEVEL'] = nodeinfo[:compression_level] if nodeinfo.key?(:compression_level)
  ENV['TIMEOUT'] = nodeinfo[:timeout].to_s if nodeinfo.key?(:timeout)
  ENV['FORWARD_AGENT'] = nodeinfo[:forward_agent] if nodeinfo.key?(:forward_agent)
  ENV['GLOBAL_KNOWN_HOSTS_FILE'] = nodeinfo[:global_known_hosts_file] if nodeinfo.key?(:global_known_hosts_file)
  ENV['AUTH_METHODS'] = nodeinfo[:auth_methods].join(',') if nodeinfo.key?(:auth_methods)
  ENV['HMAC'] = nodeinfo[:hmac] if nodeinfo.key?(:hmac)
  ENV['REKEY_LIMIT'] = nodeinfo[:rekey_limit].to_s if nodeinfo.key?(:rekey_limit)
end