module Sensu::Install

Constants

VERSION

Public Class Methods

clean_gem(raw_gem, options={}) click to toggle source
# File lib/sensu/install.rb, line 103
def clean_gem(raw_gem, options={})
  log "cleaning Sensu gem '#{raw_gem}'"
  gem_name, gem_version = raw_gem.split(":")
  gem_command = "gem clean #{gem_name}"
  if gem_version
    if gem_installed_versions(raw_gem, options) == [gem_version]
      log "Sensu gem '#{gem_name}' version '#{gem_version}' is the only version installed"
    else
      gem_command = "gem uninstall #{gem_name} --version '!= #{gem_version}' -a"
    end
  end
  log gem_command if options[:verbose]
  if system(gem_command)
    log "successfully cleaned Sensu gem '#{gem_name}'"
  else
    log "failed to clean Sensu gem '#{gem_name}'"
  end
end
cli_options(arguments=ARGV) click to toggle source
# File lib/sensu/install.rb, line 7
def cli_options(arguments=ARGV)
  options = {
    :verbose => false,
    :plugins => [],
    :extensions => [],
    :clean => false,
    :proxy => nil
  }
  optparse = OptionParser.new do |opts|
    opts.on("-h", "--help", "Display this message") do
      puts opts
      exit
    end
    opts.on("-v", "--verbose", "Enable verbose logging") do
      options[:verbose] = true
    end
    opts.on("-p", "--plugin PLUGIN", "Install a Sensu PLUGIN") do |plugin|
      options[:plugins] << plugin
    end
    opts.on("-P", "--plugins PLUGIN[,PLUGIN]", "PLUGIN or comma-delimited list of Sensu plugins to install") do |plugins|
      options[:plugins].concat(plugins.split(","))
    end
    opts.on("-e", "--extension EXTENSION", "Install a Sensu EXTENSION") do |extension|
      options[:extensions] << extension
    end
    opts.on("-E", "--extensions EXTENSION[,EXT]", "EXTENSION or comma-delimited list of Sensu extensions to install") do |extensions|
      options[:extensions].concat(extensions.split(","))
    end
    opts.on("-s", "--source SOURCE", "Install Sensu plugins and extensions from a custom SOURCE") do |source|
      options[:source] = source
    end
    opts.on("-c", "--clean", "Clean up (remove) other installed versions of the plugin(s) and/or extension(s)") do
      options[:clean] = true
    end
    opts.on("-x", "--proxy PROXY", "Install Sensu plugins and extensions via a PROXY URL") do |proxy|
      options[:proxy] = proxy
    end
  end
  optparse.parse!(arguments)
  options
end
gem_installed?(raw_gem, options={}) click to toggle source
# File lib/sensu/install.rb, line 53
def gem_installed?(raw_gem, options={})
  log "determining if Sensu gem '#{raw_gem}' is already installed ..."
  gem_name, gem_version = raw_gem.split(":")
  gem_command = "gem list -i #{gem_name}"
  gem_command << " --version '#{gem_version}'" if gem_version
  log gem_command if options[:verbose]
  if system(gem_command)
    log "Sensu gem '#{gem_name}' has already been installed"
    true
  else
    log "Sensu gem '#{gem_name}' has not been installed" if options[:verbose]
    false
  end
end
gem_installed_versions(raw_gem, options={}) click to toggle source
# File lib/sensu/install.rb, line 89
def gem_installed_versions(raw_gem, options={})
  gem_name, gem_version = raw_gem.split(":")
  log "determining installed versions of Sensu gem '#{gem_name}' ..."
  gem_command = "gem list #{gem_name}"
  log gem_command if options[:verbose]
  gem_command_output = `#{gem_command}`
  last_line = gem_command_output.split("\n").last
  if last_line == "false"
    []
  else
    /\((.*)\)/.match(last_line)[1].split(", ")
  end
end
install_extensions(extensions, options={}) click to toggle source
# File lib/sensu/install.rb, line 149
def install_extensions(extensions, options={})
  if ENV["EMBEDDED_RUBY"] == "false"
    log "EMBEDDED_RUBY must be set to true in order to install extensions"
    log "failed to install extensions: #{extensions}"
    exit 2
  end
  log "installing Sensu extensions ..."
  log "provided Sensu extensions: #{extensions}" if options[:verbose]
  extension_gems = extensions.map do |extension|
    if extension.start_with?("sensu-extensions-")
      extension
    else
      "sensu-extensions-#{extension}"
    end
  end
  log "compiled Sensu extension gems: #{extension_gems}" if options[:verbose]
  to_be_installed = extension_gems.reject do |raw_gem|
    gem_installed?(raw_gem, options)
  end
  log "Sensu extension gems to be installed: #{to_be_installed}"
  to_be_installed.each do |raw_gem|
    install_gem(raw_gem, options)
  end
  log "successfully installed Sensu extensions: #{to_be_installed}"
  if options[:clean]
    log "cleaning Sensu extension gems: #{extension_gems}" if options[:verbose]
    extension_gems.each do |raw_gem|
      clean_gem(raw_gem, options)
    end
  end
end
install_gem(raw_gem, options={}) click to toggle source
# File lib/sensu/install.rb, line 68
def install_gem(raw_gem, options={})
  log "installing Sensu gem '#{raw_gem}'"
  gem_name, gem_version = raw_gem.split(":")
  gem_command = "gem install #{gem_name}"
  gem_command << " --version '#{gem_version}'" if gem_version
  gem_command << " --no-ri --no-rdoc"
  gem_command << " --verbose" if options[:verbose]
  gem_command << " --source #{options[:source]}" if options[:source]
  gem_command << " --http-proxy #{options[:proxy]}" if options[:proxy]
  log gem_command if options[:verbose]
  unless system(gem_command)
    log "failed to install Sensu gem '#{gem_name}'"
    log "you can run the sensu-install command again with --verbose for more info" unless options[:verbose]
    log "please take note of any failure messages above"
    log "make sure you have build tools installed (e.g. gcc)"
    log "trying to determine the Sensu plugin homepage for #{gem_name} ..."
    system("gem specification #{gem_name} -r | grep homepage")
    exit 2
  end
end
install_plugins(plugins, options={}) click to toggle source
# File lib/sensu/install.rb, line 122
def install_plugins(plugins, options={})
  log "installing Sensu plugins ..."
  log "provided Sensu plugins: #{plugins}" if options[:verbose]
  plugin_gems = plugins.map do |plugin|
    if plugin.start_with?("sensu-plugins-")
      plugin
    else
      "sensu-plugins-#{plugin}"
    end
  end
  log "compiled Sensu plugin gems: #{plugin_gems}" if options[:verbose]
  to_be_installed = plugin_gems.reject do |raw_gem|
    gem_installed?(raw_gem, options)
  end
  log "Sensu plugin gems to be installed: #{to_be_installed}"
  to_be_installed.each do |raw_gem|
    install_gem(raw_gem, options)
  end
  log "successfully installed Sensu plugins: #{to_be_installed}"
  if options[:clean]
    log "cleaning Sensu plugin gems: #{plugin_gems}" if options[:verbose]
    plugin_gems.each do |raw_gem|
      clean_gem(raw_gem, options)
    end
  end
end
log(message) click to toggle source
# File lib/sensu/install.rb, line 49
def log(message)
  puts "[SENSU-INSTALL] #{message}"
end
run() click to toggle source
# File lib/sensu/install.rb, line 181
def run
  options = cli_options
  unless options[:plugins].empty?
    install_plugins(options[:plugins], options)
  end
  unless options[:extensions].empty?
    install_extensions(options[:extensions], options)
  end
end