Class: Collins::CLI::Provision
- Inherits:
-
Object
- Object
- Collins::CLI::Provision
- Includes:
- Mixins
- Defined in:
- lib/collins/cli/provision.rb
Constant Summary collapse
- PROG_NAME =
'collins provision'- DEFAULT_OPTIONS =
{ :timeout => 120, :provision => { } }
Constants included from Mixins
Mixins::COLORS, Mixins::ERROR, Mixins::SUCCESS
Instance Attribute Summary collapse
-
#options ⇒ Object
readonly
Returns the value of attribute options.
Instance Method Summary collapse
-
#initialize ⇒ Provision
constructor
A new instance of Provision.
- #parse!(argv = ARGV) ⇒ Object
- #run! ⇒ Object
- #validate! ⇒ Object
Methods included from Mixins
#api_call, #as_query?, #collins, #convert_to_query
Constructor Details
#initialize ⇒ Provision
Returns a new instance of Provision.
17 18 19 20 21 22 |
# 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 |
Instance Attribute Details
#options ⇒ Object (readonly)
Returns the value of attribute options.
15 16 17 |
# File 'lib/collins/cli/provision.rb', line 15 def @options end |
Instance Method Details
#parse!(argv = ARGV) ⇒ Object
24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 |
# File 'lib/collins/cli/provision.rb', line 24 def parse!(argv = ARGV) @parser = OptionParser.new do |opts| opts. = "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! ⇒ Object
61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 |
# File 'lib/collins/cli/provision.rb', line 61 def run! action_successes = [] [:tags].each do |t| action_string = "#{t} provisioning with #{[:provision].map{|k,v| "#{k}:#{v}"}.join(" ")} by #{[:build_contact]}... " printf action_string begin res = collins.provision(t, [:provision][:nodeclass], [:build_contact], [:provision]) puts (res ? SUCCESS : ERROR ) action_successes << res rescue => e puts "#{ERROR} (#{e.})" action_successes << false end end action_successes.all? end |
#validate! ⇒ Object
56 57 58 59 |
# File 'lib/collins/cli/provision.rb', line 56 def validate! raise "You need to specify at least a nodeclass when provisioning" if [:provision][:nodeclass].nil? self end |