class Collins::CLI::Provision

Constants

DEFAULT_OPTIONS
PROG_NAME

Attributes

options[R]

Public Class Methods

new() click to toggle source
# File lib/collins/cli/provision.rb, line 17
def initialize
  @options = DEFAULT_OPTIONS.clone
  @parsed, @validated = false, false
  @options[:build_contact] = Etc.getlogin
  @parser = nil
end

Public Instance Methods

parse!(argv = ARGV) click to toggle source
# File lib/collins/cli/provision.rb, line 24
def parse!(argv = ARGV)
  @parser = OptionParser.new do |opts|
    opts.banner = "Usage: #{PROG_NAME} [options]"
    #TODO -s to show provisoining_profiles
    opts.separator ""
    opts.on('-n','--nodeclass NODECLASS',String,"Nodeclass to provision as. (Required)") {|v| @options[:provision][:nodeclass] = v }
    opts.on('-p','--pool POOL',String,"Provision with pool POOL.") {|v| @options[:provision][:pool] = v }
    opts.on('-r','--role ROLE',String,"Provision with primary role ROLE.") {|v| @options[:provision][:primary_role] = v }
    opts.on('-R','--secondary-role ROLE',String,"Provision with secondary role ROLE.") {|v| @options[:provision][:secondary_role] = v }
    opts.on('-s','--suffix SUFFIX',String,"Provision with suffix SUFFIX.") {|v| @options[:provision][:suffix] = v }
    opts.on('-a','--activate',"Activate server on provision (useful with SL plugin) (Default: ignored)") {|v| @options[:provision][:activate] = true }
    opts.on('-b','--build-contact USER',String,"Build contact. (Default: #{@options[:build_contact]})") {|v| @options[:build_contact] = v }

    opts.separator ""
    opts.separator "General:"
    opts.on('-t','--tags TAG[,...]',Array,"Tags to work on, comma separated") {|v| @options[:tags] = v.map(&:to_sym)}
    opts.on('-C','--config CONFIG',String,'Use specific Collins config yaml for Collins::Client') {|v| @options[:config] = v}
    opts.on('-h','--help',"Help") {puts opts ; exit 0}

    opts.separator ""
    opts.separator "Examples:\n  Provision some machines:\n    collins find -Sunallocated -arack_position:716|#{PROG_NAME} -P -napiwebnode6 -RALL"
  end.parse!(argv)

  if @options[:tags].nil? or @options[:tags].empty?
    # read tags from stdin. first field on the line is the tag
    input = ARGF.readlines
    @options[:tags] = input.map{|l| l.split(/\s+/)[0] rescue nil}.compact.uniq
  end
  @parsed = true
  self
end
run!() click to toggle source
# File lib/collins/cli/provision.rb, line 61
def run!
  action_successes = []
  options[:tags].each do |t|
    action_string = "#{t} provisioning with #{options[:provision].map{|k,v| "#{k}:#{v}"}.join(" ")} by #{options[:build_contact]}... "
    printf action_string
    begin
      res = collins.provision(t, options[:provision][:nodeclass], options[:build_contact], options[:provision])
      puts (res ? SUCCESS : ERROR )
      action_successes << res
    rescue => e
      puts "#{ERROR} (#{e.message})"
      action_successes << false
    end
  end
  action_successes.all?
end
validate!() click to toggle source
# File lib/collins/cli/provision.rb, line 56
def validate!
  raise "You need to specify at least a nodeclass when provisioning" if options[:provision][:nodeclass].nil?
  self
end