right_chimp 1.0.1 → 1.0.2

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 634d307cab9b4664dd3a9ac2eb45814c485bc7cb
4
- data.tar.gz: 86e20d30c6fc23dfe79704cc3085f4b8cc62d66a
3
+ metadata.gz: 5df5e7af3e88a247df0ca5f855360b6d81316b17
4
+ data.tar.gz: 45a3a90419e7f4bc8f036853f913abcfd677d6a2
5
5
  SHA512:
6
- metadata.gz: b6bf575bd40a18cf89964b4cc01f333b2f689386ec64c933fbe042e1d3a52503bfc6605d5d5cd9965fb46cf79a0190875b5e93cf014fd483adf0e68a1873911f
7
- data.tar.gz: 9ca670a07b44af6ed0bf700cabfbeba41bc851a520098829ad33b4c1af21d6de972cf0fbea6736ffd088bc2ab8ba18cd6f7028b6394070a1165483503ec9a8aa
6
+ metadata.gz: c1a9b9120dd6b2df5e2fb87e3b10c4a942bd2c987ae300b9a5f8f8500b12fb5030b665c1e83ae6cbb6b04b7c992176ad23a656f0dcb0274ab501752903b6b76d
7
+ data.tar.gz: 4fd99523738ac5a9b2f57ed65b581a74f17e1ed716cd54f0215a3d05fa9e38ebedc007269d5a2b8deebdbe84cb9b85ac4ad18977c755b5f7bac1484ea9e631fe
data/CHANGES CHANGED
@@ -93,3 +93,8 @@ Version 1.0
93
93
  Version 1.0.1
94
94
  -------------
95
95
  * Add missing ERB template for chimpd
96
+
97
+ Version 1.0.2
98
+ -------------
99
+ * Add support for specifying inputs on the command line when working with arrays
100
+
data/Gemfile.lock CHANGED
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- right_chimp (1.0.1)
4
+ right_chimp (1.0.2)
5
5
  progressbar (~> 0.11.0)
6
6
  rake (~> 0.9.2.2)
7
7
  rest-client (~> 1.6.7)
@@ -18,7 +18,7 @@ GEM
18
18
  i18n (0.6.1)
19
19
  json (1.7.7)
20
20
  mime-types (1.23)
21
- multi_json (1.7.2)
21
+ multi_json (1.7.3)
22
22
  net-ssh (2.6.7)
23
23
  nokogiri (1.5.9)
24
24
  progressbar (0.11.0)
@@ -5,16 +5,16 @@
5
5
  module Chimp
6
6
  class Chimp
7
7
  attr_accessor :concurrency, :delay, :retry_count, :progress, :prompt,
8
- :quiet, :use_chimpd, :chimpd_host, :chimpd_port, :tags, :array_names,
8
+ :quiet, :use_chimpd, :chimpd_host, :chimpd_port, :tags, :array_names,
9
9
  :deployment_names, :script, :servers, :ssh, :report, :interactive, :action,
10
10
  :limit_start, :limit_end, :dry_run, :group, :job_id, :verify
11
-
11
+
12
12
  #
13
13
  # These class variables control verbosity
14
14
  #
15
15
  @@verbose = false
16
16
  @@quiet = false
17
-
17
+
18
18
  #
19
19
  # Set up reasonable defaults
20
20
  #
@@ -27,7 +27,7 @@ module Chimp
27
27
  @verify = true
28
28
  @dry_run = false
29
29
  @interactive = true
30
-
30
+
31
31
  #
32
32
  # Job control options
33
33
  #
@@ -35,7 +35,7 @@ module Chimp
35
35
  @delay = 0
36
36
  @retry_count = 0
37
37
  @timeout = 900
38
-
38
+
39
39
  @limit_start = 0
40
40
  @limit_end = 0
41
41
 
@@ -46,7 +46,7 @@ module Chimp
46
46
  @group = :default
47
47
  @group_type = :parallel
48
48
  @group_concurrency = 1
49
-
49
+
50
50
  #
51
51
  # Options for selecting objects to work on
52
52
  #
@@ -67,7 +67,7 @@ module Chimp
67
67
  @ignore_errors = false
68
68
 
69
69
  @break_array_into_instances = false
70
- @dont_check_templates_for_script = false
70
+ @dont_check_templates_for_script = false
71
71
 
72
72
  #
73
73
  # chimpd configuration
@@ -76,22 +76,22 @@ module Chimp
76
76
  @chimpd_host = 'localhost'
77
77
  @chimpd_port = 9055
78
78
  @chimpd_wait_until_done = false
79
-
79
+
80
80
  RestClient.log = nil
81
81
  end
82
-
82
+
83
83
  #
84
84
  # Entry point for the chimp command line application
85
85
  #
86
86
  def run
87
87
  queue = ChimpQueue.instance
88
-
88
+
89
89
  parse_command_line if @interactive
90
90
  check_option_validity if @interactive
91
91
  disable_logging unless @@verbose
92
-
92
+
93
93
  puts "chimp #{VERSION} executing..." if (@interactive and not @use_chimpd) and not @@quiet
94
-
94
+
95
95
  #
96
96
  # Wait for chimpd to complete tasks
97
97
  #
@@ -113,11 +113,11 @@ module Chimp
113
113
  # ahead and start making API calls to select the objects
114
114
  # to operate upon
115
115
  #
116
- get_array_info
116
+ get_array_info
117
117
  get_server_info
118
118
  get_template_info
119
119
  get_executable_info
120
-
120
+
121
121
  #
122
122
  # Optionally display the list of objects to operate on
123
123
  # and prompt the user
@@ -125,14 +125,14 @@ module Chimp
125
125
  if @prompt and @interactive
126
126
  list_of_objects = make_human_readable_list_of_objects
127
127
  confirm = (list_of_objects.size > 0 and @action != :action_none) or @action == :action_none
128
-
128
+
129
129
  verify("Your command will be executed on the following:", list_of_objects, confirm)
130
-
130
+
131
131
  if @servers.length >= 2 and @server_template and @executable and not @dont_check_templates_for_script
132
132
  warn_if_rightscript_not_in_all_servers @servers, @server_template, @executable
133
133
  end
134
134
  end
135
-
135
+
136
136
  #
137
137
  # Load the queue with work
138
138
  #
@@ -145,16 +145,16 @@ module Chimp
145
145
  if @action == :action_none or queue.group[@group].size == 0
146
146
  puts "No actions to perform." unless @@quiet
147
147
  else
148
- do_work
148
+ do_work
149
149
  end
150
150
  end
151
-
151
+
152
152
  #
153
153
  # Process a non-interactive chimp object command
154
154
  # Used by chimpd
155
155
  #
156
156
  def process
157
- get_array_info
157
+ get_array_info
158
158
  get_server_info
159
159
  get_template_info
160
160
  get_executable_info
@@ -170,7 +170,7 @@ module Chimp
170
170
  @server_template = detect_server_template(@template, @script, @servers, @array_names)
171
171
  end
172
172
  end
173
-
173
+
174
174
  #
175
175
  # Get the Executable (RightScript) info from the API
176
176
  #
@@ -180,7 +180,7 @@ module Chimp
180
180
  puts "Using SSH command: \"#{@ssh}\"" if @action == :action_ssh
181
181
  end
182
182
  end
183
-
183
+
184
184
  #
185
185
  # Parse command line options
186
186
  #
@@ -221,7 +221,7 @@ module Chimp
221
221
  [ '--timeout', '-5', GetoptLong::REQUIRED_ARGUMENT ],
222
222
  [ '--noverify', '-6', GetoptLong::NO_ARGUMENT ]
223
223
  )
224
-
224
+
225
225
  opts.each do |opt, arg|
226
226
  case opt
227
227
  when '--help', '-h'
@@ -322,7 +322,7 @@ module Chimp
322
322
  help
323
323
  exit 1
324
324
  end
325
-
325
+
326
326
  #
327
327
  # Before we're totally done parsing command line options,
328
328
  # let's make sure that a few things make sense
@@ -330,9 +330,9 @@ module Chimp
330
330
  if @group_concurrency > @concurrency
331
331
  @concurrency = @group_concurrency
332
332
  end
333
-
333
+
334
334
  end
335
-
335
+
336
336
  #
337
337
  # Check for any invalid combinations of command line options
338
338
  #
@@ -342,14 +342,14 @@ module Chimp
342
342
  help
343
343
  exit 1
344
344
  end
345
-
345
+
346
346
  if not @array_names.empty? and ( not @tags.empty? or not @deployment_names.empty? )
347
347
  puts "ERROR: You cannot mix ServerArray queries with other types of queries."
348
348
  help
349
349
  exit 1
350
350
  end
351
351
  end
352
-
352
+
353
353
  #
354
354
  # Go through each of the various ways to specify servers via
355
355
  # the command line (tags, deployments, etc.) and get all the info
@@ -360,7 +360,7 @@ module Chimp
360
360
  @servers += get_servers_by_deployment(@deployment_names)
361
361
  @servers = filter_out_non_operational_servers(@servers)
362
362
  end
363
-
363
+
364
364
  #
365
365
  # Load up @array with server arrays to operate on
366
366
  #
@@ -373,11 +373,11 @@ module Chimp
373
373
  # into Servers as necessary.
374
374
  #
375
375
  if @break_array_into_instances
376
- Log.debug "Breaking array into instances..."
376
+ Log.debug "Breaking array into instances..."
377
377
  @servers += get_servers_by_array(@array_names)
378
378
  @array_names = []
379
379
  end
380
-
380
+
381
381
  @array_names.each do |array_name|
382
382
  Log.debug "Querying API for ServerArray \'#{array_name}\'..."
383
383
  a = Ec2ServerArray.find_by(:nickname) { |n| n =~ /^#{array_name}/i }.first
@@ -392,7 +392,7 @@ module Chimp
392
392
  end
393
393
  end
394
394
  end
395
-
395
+
396
396
  #
397
397
  # Get servers to operate on via a tag query
398
398
  #
@@ -401,7 +401,7 @@ module Chimp
401
401
  def get_servers_by_tag(tags)
402
402
  return([]) unless tags.size > 0
403
403
  servers = ::Tag.search("ec2_instance", tags, :match_all => @match_all)
404
-
404
+
405
405
  if tags.size > 0 and servers.nil? or servers.empty?
406
406
  if @ignore_errors
407
407
  Log.warn "Tag query returned no results: #{tags.join(" ")}"
@@ -409,10 +409,10 @@ module Chimp
409
409
  raise "Tag query returned no results: #{tags.join(" ")}"
410
410
  end
411
411
  end
412
-
412
+
413
413
  return(servers)
414
414
  end
415
-
415
+
416
416
  #
417
417
  # Parse deployment names and get Server objects
418
418
  #
@@ -420,28 +420,28 @@ module Chimp
420
420
  #
421
421
  def get_servers_by_deployment(names)
422
422
  servers = []
423
-
423
+
424
424
  if names.size > 0
425
425
  names.each do |deployment|
426
426
  d = ::Deployment.find_by_nickname(deployment).first
427
-
427
+
428
428
  if d == nil
429
429
  if @ignore_errors
430
430
  Log.warn "cannot find deployment #{deployment}"
431
- else
431
+ else
432
432
  raise "cannot find deployment #{deployment}"
433
433
  end
434
434
  else
435
435
  d.servers_no_reload.each do |s|
436
436
  servers << s
437
- end
437
+ end
438
438
  end
439
439
  end
440
440
  end
441
-
441
+
442
442
  return(servers)
443
443
  end
444
-
444
+
445
445
  #
446
446
  # Parse array names
447
447
  #
@@ -452,7 +452,7 @@ module Chimp
452
452
  if names.size > 0
453
453
  names.each do |array_name|
454
454
  all_arrays = ::Ec2ServerArray.find_by(:nickname) { |n| n =~ /^#{array_name}/i }
455
-
455
+
456
456
  if all_arrays != nil and all_arrays.first != nil
457
457
  all_arrays.first.instances.each do |s|
458
458
  array_servers << s
@@ -460,10 +460,10 @@ module Chimp
460
460
  end
461
461
  end
462
462
  end
463
-
463
+
464
464
  return(array_servers)
465
465
  end
466
-
466
+
467
467
  #
468
468
  # ServerTemplate auto-detection
469
469
  #
@@ -471,21 +471,21 @@ module Chimp
471
471
  #
472
472
  def detect_server_template(template, script, servers, array_names_to_detect)
473
473
  st = nil
474
-
474
+
475
475
  #
476
476
  # If we have a script name but no template, check
477
477
  # each server for the script until we locate it.
478
478
  #
479
479
  if script and template == nil
480
480
  Log.debug "getting template URI..."
481
-
481
+
482
482
  if not servers.empty?
483
483
  for i in (0..servers.size - 1)
484
-
485
- template = servers[i]['server_template_href'] if not servers[i].empty?
484
+
485
+ template = servers[i]['server_template_href'] if not servers[i].empty?
486
486
  break if template
487
487
  end
488
-
488
+
489
489
  elsif not array_names_to_detect.empty?
490
490
  array_names_to_detect.each do |array_name|
491
491
  a = Ec2ServerArray.find_by(:nickname) { |n| n =~ /^#{array_name}/i }.first
@@ -494,41 +494,41 @@ module Chimp
494
494
  break if template
495
495
  end
496
496
  end
497
-
497
+
498
498
  raise "Unable to locate ServerTemplate!" unless template
499
499
  Log.debug "Template: #{template}"
500
500
  end
501
-
501
+
502
502
  #
503
503
  # Now look up the ServerTemplate via the RightScale API
504
504
  #
505
505
  if template
506
- Log.debug "Looking up template..."
507
-
506
+ Log.debug "Looking up template..."
507
+
508
508
  if template =~ /^http/
509
509
  st = ::ServerTemplate.find(template)
510
510
  else
511
511
  st = ::ServerTemplate.find_by_nickname(template).first
512
512
  end
513
-
513
+
514
514
  if st == nil
515
515
  raise "No matching ServerTemplate found!"
516
516
  else
517
- Log.debug "ServerTemplate: \"#{st['nickname']}\""
517
+ Log.debug "ServerTemplate: \"#{st['nickname']}\""
518
518
  end
519
519
  end
520
-
520
+
521
521
  return(st)
522
522
  end
523
-
523
+
524
524
  #
525
525
  # Look up the RightScript
526
526
  #
527
527
  # Returns: RestConnection::Executable
528
528
  #
529
529
  def detect_right_script(st, script)
530
- executable = nil
531
-
530
+ executable = nil
531
+
532
532
  if script == ""
533
533
  if not @interactive
534
534
  puts "Error: empty --script= option is supported only in interactive mode. Exiting."
@@ -538,16 +538,16 @@ module Chimp
538
538
  op_script_names = ['dummy name'] # Placeholder for #0 since we want to offer choices 1..n
539
539
  op_script_hrefs = [ 'dummy href' ]
540
540
  st.executables.each do |ex|
541
- if ex.apply == "operational"
541
+ if ex.apply == "operational"
542
542
  op_script_names.push( ex.name )
543
- op_script_hrefs.push( ex.href )
543
+ op_script_hrefs.push( ex.href )
544
544
  end
545
545
  end
546
546
  if op_script_names.length <= 1
547
547
  puts "Warning: No operational scripts found on the server(s). "
548
- puts " (Search performed on server template '#{st.nickname}')"
548
+ puts " (Search performed on server template '#{st.nickname}')"
549
549
  else
550
- puts "List of available operational scripts in the server template: ('#{st.nickname}')"
550
+ puts "List of available operational scripts in the server template: ('#{st.nickname}')"
551
551
  puts "------------------------------------------------------------"
552
552
  for i in 1..op_script_names.length - 1
553
553
  puts " %3d. #{op_script_names[i]}" % i
@@ -567,7 +567,7 @@ module Chimp
567
567
  script = op_script_hrefs[ op_script_id ]
568
568
  end
569
569
  end
570
-
570
+
571
571
  if script
572
572
  if script =~ /^http/ or script =~ /^\d+$/
573
573
  if script =~ /^\d+$/
@@ -575,10 +575,10 @@ module Chimp
575
575
  script = url_prefix + "/right_scripts/#{script}"
576
576
  end
577
577
  script_URI = script
578
- Log.debug "Looking for script href \"#{script_URI}\""
579
- puts
580
- # First look up the script URI in the template.
581
- # It *will* be found if we came here from the 'if script = ""' block
578
+ Log.debug "Looking for script href \"#{script_URI}\""
579
+ puts
580
+ # First look up the script URI in the template.
581
+ # It *will* be found if we came here from the 'if script = ""' block
582
582
  script = st.executables.detect { |ex| ex.href == script }
583
583
  if not script
584
584
  script_obj = ::RightScript.find(script_URI)
@@ -586,24 +586,24 @@ module Chimp
586
586
  script_data[ 'name' ] = script_obj.params['name']
587
587
  script = ::RightScript.new({ :href => script_URI, :right_script => script_data })
588
588
  end
589
- else
590
- Log.debug "looking for script \"#{script}\""
589
+ else
590
+ Log.debug "looking for script \"#{script}\""
591
591
  script = st.executables.detect { |ex| ex.name =~ /#{script}/ }
592
592
  end
593
-
593
+
594
594
  if script != nil and script['right_script'] != nil
595
595
  puts "RightScript: \"#{script['right_script']['name']}\"" if @interactive
596
596
  else
597
597
  puts "No matching RightScript found!"
598
598
  raise "No matching RightScript found!"
599
599
  end
600
-
600
+
601
601
  executable = script
602
602
  end
603
-
603
+
604
604
  return(executable)
605
605
  end
606
-
606
+
607
607
  #
608
608
  # Load up the queue with work
609
609
  #
@@ -613,14 +613,14 @@ module Chimp
613
613
  counter = 0
614
614
  tasks = []
615
615
  Log.debug "Loading queue..."
616
-
616
+
617
617
  #
618
618
  # Configure group
619
619
  #
620
620
  if not ChimpQueue[@group]
621
621
  ChimpQueue.instance.create_group(@group, @group_type, @group_concurrency)
622
622
  end
623
-
623
+
624
624
  #
625
625
  # Process ServerArray selection
626
626
  #
@@ -628,12 +628,12 @@ module Chimp
628
628
  if not queue_arrays.empty?
629
629
  queue_arrays.each do |array|
630
630
  instances = filter_out_non_operational_servers(array.instances)
631
-
631
+
632
632
  if not instances
633
633
  Log.error("no instances in array!")
634
634
  break
635
635
  end
636
-
636
+
637
637
  instances.each do |array_instance|
638
638
  #
639
639
  # Handle limiting options
@@ -641,31 +641,39 @@ module Chimp
641
641
  counter += 1
642
642
  next if @limit_start.to_i > 0 and counter < @limit_start.to_i
643
643
  break if @limit_end.to_i > 0 and counter > @limit_end.to_i
644
- a = ExecArray.new(:array => array, :server => array_instance, :exec => queue_executable, :template => queue_template, :verbose => @@verbose, :quiet => @@quiet)
644
+ a = ExecArray.new(
645
+ :array => array,
646
+ :server => array_instance,
647
+ :exec => queue_executable,
648
+ :inputs => @inputs,
649
+ :template => queue_template,
650
+ :verbose => @@verbose,
651
+ :quiet => @@quiet
652
+ )
645
653
  a.dry_run = @dry_run
646
654
  ChimpQueue.instance.push(@group, a)
647
655
  end
648
656
  end
649
657
  end
650
-
658
+
651
659
  #
652
660
  # Process Server selection
653
661
  #
654
662
  Log.debug("Processing server selection")
655
-
663
+
656
664
  queue_servers.sort! { |a,b| a['nickname'] <=> b['nickname'] }
657
665
  queue_servers.each do |server|
658
-
666
+
659
667
  #
660
668
  # Handle limiting options
661
669
  #
662
670
  counter += 1
663
671
  next if @limit_start.to_i > 0 and counter < @limit_start.to_i
664
672
  break if @limit_end.to_i > 0 and counter > @limit_end.to_i
665
-
673
+
666
674
  #
667
675
  # Construct the Server object
668
- #
676
+ #
669
677
  s = ::Server.new
670
678
  s.href = server['href']
671
679
  s.current_instance_href = server['current_instance_href']
@@ -673,7 +681,7 @@ module Chimp
673
681
  s.nickname = s.name
674
682
  s.ip_address = server['ip-address'] || server['ip_address']
675
683
  e = nil
676
-
684
+
677
685
  if queue_executable
678
686
  e = ExecRightScript.new(
679
687
  :server => s,
@@ -683,7 +691,7 @@ module Chimp
683
691
  :verbose => @@verbose,
684
692
  :quiet => @@quiet
685
693
  )
686
- elsif @ssh
694
+ elsif @ssh
687
695
  e = ExecSSH.new(
688
696
  :server => s,
689
697
  :ssh_user => @ssh_user,
@@ -708,22 +716,22 @@ module Chimp
708
716
  e = ExecSetTags.new(:server => s, :verbose => @@verbose, :quiet => @@quiet)
709
717
  e.tags = set_tags
710
718
  end
711
-
719
+
712
720
  if e != nil
713
721
  e.dry_run = @dry_run
714
722
  e.quiet = @@quiet
715
723
  tasks.push(e)
716
724
  end
717
-
725
+
718
726
  end
719
-
727
+
720
728
  return(tasks)
721
729
  end
722
-
730
+
723
731
  def add_to_queue(a)
724
732
  a.each { |task| ChimpQueue.instance.push(@group, task) }
725
733
  end
726
-
734
+
727
735
  #
728
736
  # Execute the user's command and provide for retrys etc.
729
737
  #
@@ -733,18 +741,18 @@ module Chimp
733
741
  queue.delay = delay
734
742
  queue.retry_count = retry_count
735
743
  total_queue_size = queue.size
736
-
744
+
737
745
  puts "Executing..." unless progress or not quiet
738
746
  pbar = ProgressBar.new("Executing", 100) if progress
739
747
  queue.start
740
-
748
+
741
749
  queue.wait_until_done(@group) do
742
750
  pbar.set(((total_queue_size.to_f - queue.size.to_f)/total_queue_size.to_f*100).to_i) if progress
743
751
  end
744
-
752
+
745
753
  pbar.finish if progress
746
754
  end
747
-
755
+
748
756
  #
749
757
  # Set the action
750
758
  #
@@ -752,13 +760,13 @@ module Chimp
752
760
  raise ArgumentError.new "Cannot reset action" unless @action == :action_none
753
761
  @action = a
754
762
  end
755
-
763
+
756
764
  #
757
765
  # Allow user to verify results and retry if necessary
758
766
  #
759
767
  def verify_results(group = :default)
760
768
  failed_workers, results_display = get_results(group)
761
-
769
+
762
770
  #
763
771
  # If no workers failed, then we're done.
764
772
  #
@@ -768,13 +776,13 @@ module Chimp
768
776
  # Some workers failed; offer the user a chance to retry them
769
777
  #
770
778
  verify("The following objects failed:", results_display, false)
771
-
779
+
772
780
  while true
773
781
  puts "(R)etry failed jobs"
774
782
  puts "(A)bort chimp run"
775
783
  puts "(I)gnore errors and continue"
776
784
  command = gets()
777
-
785
+
778
786
  if command =~ /^a/i
779
787
  puts "Aborting!"
780
788
  exit 1
@@ -784,11 +792,11 @@ module Chimp
784
792
  elsif command =~ /^r/i
785
793
  puts "Retrying..."
786
794
  ChimpQueue.instance.group[group].requeue_failed_jobs!
787
- return false
795
+ return false
788
796
  end
789
797
  end
790
798
  end
791
-
799
+
792
800
  #
793
801
  # Get the results from the QueueRunner and format them
794
802
  # in a way that's easy to display to the user
@@ -799,7 +807,7 @@ module Chimp
799
807
  results = queue.group[@group].results()
800
808
  failed_workers = []
801
809
  results_display = []
802
-
810
+
803
811
  results.each do |result|
804
812
  next if result == nil
805
813
 
@@ -811,20 +819,20 @@ module Chimp
811
819
  results_display << "#{name.ljust(40)} #{message}"
812
820
  end
813
821
  end
814
-
822
+
815
823
  return [failed_workers, results_display]
816
824
  end
817
-
825
+
818
826
  def print_timings
819
827
  ChimpQueue.instance.group[@group].results.each do |task|
820
828
  puts "Host: #{task[:host]} Type: #{task[:name]} Time: #{task[:total]} seconds"
821
829
  end
822
830
  end
823
-
831
+
824
832
  def get_failures
825
833
  return get_results(@group)
826
834
  end
827
-
835
+
828
836
  #
829
837
  # Filter out non-operational servers
830
838
  # Then add operational servers to the list of objects to display
@@ -834,61 +842,61 @@ module Chimp
834
842
  servers.reject! { |s| s == nil || s['state'] != "operational" }
835
843
  return(servers)
836
844
  end
837
-
845
+
838
846
  #
839
847
  # Do work: either by submitting to chimpd
840
848
  # or running it ourselves.
841
849
  #
842
850
  def do_work
843
851
  done = false
844
-
852
+
845
853
  while not done
846
854
  queue_runner(@concurrency, @delay, @retry_count, @progress)
847
-
855
+
848
856
  if @interactive and @verify
849
- done = verify_results(@group)
857
+ done = verify_results(@group)
850
858
  else
851
859
  done = true
852
860
  end
853
861
  end
854
-
862
+
855
863
  if not @verify
856
864
  failed_workers, results_display = get_results(group)
857
865
  exit 1 if failed_workers.size > 0
858
866
  end
859
-
860
- puts "chimp run complete"
867
+
868
+ puts "chimp run complete"
861
869
  end
862
-
870
+
863
871
  #
864
872
  # Completely process a non-interactive chimp object command
865
873
  #
866
874
  def process
867
- get_array_info
875
+ get_array_info
868
876
  get_server_info
869
877
  get_template_info
870
878
  get_executable_info
871
879
  return generate_jobs(@servers, @arrays, @server_template, @executable)
872
880
  end
873
-
881
+
874
882
  #
875
883
  # Always returns 0. Used for chimpd compatibility.
876
884
  #
877
885
  def job_id
878
886
  return 0
879
887
  end
880
-
888
+
881
889
  #
882
890
  # Connect to chimpd and wait for the work queue to empty, and
883
891
  # prompt the user if there are any errors.
884
892
  #
885
893
  def chimpd_wait_until_done
886
894
  local_queue = ChimpQueue.instance
887
-
895
+
888
896
  begin
889
897
  while true
890
898
  local_queue = ChimpQueue.instance
891
-
899
+
892
900
  #
893
901
  # load up remote chimpd jobs into the local queue
894
902
  # this makes all the standard queue control methods available to us
@@ -896,7 +904,7 @@ module Chimp
896
904
  retry_count = 1
897
905
  while true
898
906
  local_queue.reset!
899
-
907
+
900
908
  begin
901
909
  puts "Waiting for chimpd jobs to complete for group #{@group}..."
902
910
  all = ChimpDaemonClient.retrieve_group_info(@chimpd_host, @chimpd_port, @group, :all)
@@ -906,25 +914,25 @@ module Chimp
906
914
  sleep 5
907
915
  retry
908
916
  end
909
-
910
- if @ignore_errors
917
+
918
+ if @ignore_errors
911
919
  exit 0
912
920
  else
913
921
  $stderr.puts "ERROR: Group \"#{group}\" not found!"
914
922
  exit 1
915
923
  end
916
924
  end
917
-
925
+
918
926
  ChimpQueue.instance.create_group(@group)
919
927
  ChimpQueue[@group].set_jobs(all)
920
-
928
+
921
929
  break if ChimpQueue[@group].done?
922
930
 
923
931
  $stdout.print "."
924
932
  $stdout.flush
925
933
  sleep 5
926
934
  end
927
-
935
+
928
936
  #
929
937
  # If verify_results returns true, then ask chimpd to requeue all failed jobs.
930
938
  #
@@ -946,17 +954,17 @@ module Chimp
946
954
  ENV['REST_CONNECTION_LOG'] = "/dev/null"
947
955
  ENV['RESTCLIENT_LOG'] = "/dev/null"
948
956
  end
949
-
957
+
950
958
  #
951
959
  # Configure the Log object
952
960
  #
953
961
  def self.set_verbose(v=true, q=false)
954
962
  @@verbose = v
955
963
  @@quiet = q
956
-
964
+
957
965
  STDOUT.sync = true
958
966
  STDERR.sync = true
959
-
967
+
960
968
  if @@verbose == true
961
969
  Log.threshold = Logger::DEBUG
962
970
  elsif @@quiet == true
@@ -965,22 +973,22 @@ module Chimp
965
973
  Log.threshold = Logger::INFO
966
974
  end
967
975
  end
968
-
976
+
969
977
  def self.verbose?
970
978
  return @@verbose
971
979
  end
972
-
980
+
973
981
  #
974
982
  # Always returns 0. Used for chimpd compatibility.
975
983
  #
976
984
  def job_id
977
985
  return 0
978
986
  end
979
-
987
+
980
988
  ####################################################
981
989
  private
982
990
  ####################################################
983
-
991
+
984
992
  #
985
993
  # Allow the user to verify the list of servers that an
986
994
  # operation will be run against.
@@ -988,22 +996,22 @@ module Chimp
988
996
  def verify(message, items, confirm=true)
989
997
  puts message
990
998
  puts "=================================================="
991
-
999
+
992
1000
  i = 0
993
1001
  items.sort.each do |item|
994
1002
  i += 1
995
1003
  puts " %03d. #{item}" % i
996
1004
  end
997
-
1005
+
998
1006
  puts "=================================================="
999
-
1007
+
1000
1008
  if confirm
1001
1009
  puts "Press enter to confirm or ^C to exit"
1002
1010
  gets
1003
- end
1011
+ end
1004
1012
  end
1005
1013
 
1006
- #
1014
+ #
1007
1015
  # Verify that the given rightscript_executable (the object corresponding to the script)
1008
1016
  # that is associated with the server_template exists in all servers
1009
1017
  # (No need to check server arrays, they must all have the same template.)
@@ -1017,7 +1025,7 @@ module Chimp
1017
1025
  main_server_template = server_template
1018
1026
  main_server_template_name = main_server_template.params['nickname']
1019
1027
  main_server_template_href = main_server_template.params['href']
1020
-
1028
+
1021
1029
  # Find which server has the specified template (the "main" template)
1022
1030
  server_that_has_main_template = nil
1023
1031
  for i in (0..servers.length - 1)
@@ -1030,18 +1038,18 @@ module Chimp
1030
1038
  puts "internal error validating rightscript presence in all servers"
1031
1039
  return
1032
1040
  end
1033
-
1041
+
1034
1042
  some_servers_have_different_template = false
1035
1043
  num_servers_missing_rightscript = 0
1036
-
1044
+
1037
1045
  for i in (0..servers.length - 1)
1038
1046
  next if servers[i].empty?
1039
-
1047
+
1040
1048
  this_server_template_href = servers[i]['server_template_href']
1041
-
1049
+
1042
1050
  # If the server's template has the same href, this server is good
1043
1051
  next if this_server_template_href == main_server_template_href
1044
-
1052
+
1045
1053
  if not some_servers_have_different_template
1046
1054
  some_servers_have_different_template = true
1047
1055
  if not @@quiet
@@ -1053,7 +1061,7 @@ module Chimp
1053
1061
  end
1054
1062
  end
1055
1063
  end
1056
-
1064
+
1057
1065
  this_server_template = ::ServerTemplate.find(this_server_template_href)
1058
1066
  next if this_server_template == nil
1059
1067
  if not @@quiet
@@ -1063,7 +1071,7 @@ module Chimp
1063
1071
  puts " href: '#{this_server_template.params['href']}'"
1064
1072
  end
1065
1073
  end
1066
-
1074
+
1067
1075
  # Now check if the offending template has the rightscript in question
1068
1076
  has_script = false
1069
1077
  this_server_template.executables.each do |cur_script|
@@ -1084,7 +1092,7 @@ module Chimp
1084
1092
  end
1085
1093
  end
1086
1094
  end
1087
- if some_servers_have_different_template
1095
+ if some_servers_have_different_template
1088
1096
  if num_servers_missing_rightscript == 0
1089
1097
  puts "Script OK. The servers have different templates, but they all contain the script, \'#{rightscript_executable['right_script']['name']}\'"
1090
1098
  else
@@ -1097,17 +1105,17 @@ module Chimp
1097
1105
  end
1098
1106
  puts
1099
1107
  end
1100
-
1108
+
1101
1109
  #
1102
1110
  # Generate a human readable list of objects
1103
1111
  #
1104
1112
  def make_human_readable_list_of_objects
1105
1113
  list_of_objects = []
1106
-
1114
+
1107
1115
  if @servers
1108
1116
  list_of_objects += @servers.map { |s| s['nickname'] }
1109
1117
  end
1110
-
1118
+
1111
1119
  if @arrays
1112
1120
  @arrays.each do |a|
1113
1121
  i = filter_out_non_operational_servers(a.instances)
@@ -1116,7 +1124,7 @@ module Chimp
1116
1124
  end
1117
1125
  return(list_of_objects)
1118
1126
  end
1119
-
1127
+
1120
1128
  #
1121
1129
  # Print out help information
1122
1130
  #
@@ -1127,7 +1135,7 @@ module Chimp
1127
1135
  puts "To select servers using tags:"
1128
1136
  puts " --tag=<tag> example: --tag=service:dataservice=true"
1129
1137
  puts " --tag-use-and 'and' all tags when selecting servers (default)"
1130
- puts " --tag-use-or 'or' all tags when selecting servers"
1138
+ puts " --tag-use-or 'or' all tags when selecting servers"
1131
1139
  puts
1132
1140
  puts "To select arrays or deployments:"
1133
1141
  puts " --array=<name> array to execute upon"
@@ -1146,7 +1154,7 @@ module Chimp
1146
1154
  puts " --group=<name> specify an execution group"
1147
1155
  puts " --group-type=<serial|parallel> specify group execution type"
1148
1156
  puts " --group-concurrency=<n> specify group concurrency, e.g. for parallel groups"
1149
- puts
1157
+ puts
1150
1158
  puts " --concurrency=<n> number of concurrent actions to perform. Default: 1"
1151
1159
  puts " --delay=<seconds> delay a number of seconds between operations"
1152
1160
  puts
@@ -1175,7 +1183,7 @@ module Chimp
1175
1183
  puts " server_template_href, deployment_href, created_at, updated_at"
1176
1184
  puts
1177
1185
  end
1178
-
1186
+
1179
1187
  end
1180
1188
  end
1181
1189
 
@@ -6,17 +6,10 @@ module Chimp
6
6
  def run
7
7
  run_with_retry do
8
8
  audit_entry = []
9
-
10
- #
11
- # If we have API 0.1 access, then use the 0.1 version of this call.
12
- # Otherwise use the 1.0 version.
13
- #
14
- if @array.internal
15
- audit_entry = @array.internal.run_script_on_instances(@exec, @server['href'], {})
16
- else
17
- audit_entry = @array.run_script_on_instances(@exec, @server['href'], {})
18
- end
19
-
9
+ options = @inputs
10
+
11
+ audit_entry = @array.run_script_on_instances(@exec, @server['href'], options)
12
+
20
13
  if audit_entry
21
14
  audit_entry.each do |a|
22
15
  a.wait_for_completed
@@ -26,18 +19,18 @@ module Chimp
26
19
  end
27
20
  end
28
21
  end
29
-
22
+
30
23
  def describe_work
31
24
  return "ExecArray job_id=#{@job_id} script=\"#{@exec['right_script']['name']}\" server=\"#{@server['nickname']}\""
32
25
  end
33
-
26
+
34
27
  def info
35
28
  return @exec['right_script']['name']
36
29
  end
37
-
30
+
38
31
  def target
39
32
  return @server['nickname']
40
33
  end
41
-
34
+
42
35
  end
43
36
  end
@@ -1,3 +1,3 @@
1
1
  module Chimp
2
- VERSION = "1.0.1"
2
+ VERSION = "1.0.2"
3
3
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: right_chimp
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.0.1
4
+ version: 1.0.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - Christopher Deutsch
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2013-05-06 00:00:00.000000000 Z
11
+ date: 2013-05-09 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: progressbar