omnibus-ctl 0.5.0 → 0.6.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: ba3442fde147f0b637bb2ce3dfe8f61952c00c5d
4
- data.tar.gz: 69b92b796d3f0afbbfe13bc429fcc09cb8ad8043
3
+ metadata.gz: 7124151190ecb3203434afe79f6f705cc92006ac
4
+ data.tar.gz: 2054e06087ef69abeb032265e01fd32dfc5db730
5
5
  SHA512:
6
- metadata.gz: 5d184d6b71831ed278e907ee83d3b73d26876dbcd4d1aae0a0ed5ac6b7e8990629e6a362b31132776878f6cf3ac0964e093c72bc098c385b9a746f100c1c2f34
7
- data.tar.gz: e2b700aa51a77c273846a1669ebbbda5c9a5c7bb520e277c1199dbabe66edbe248094b6614bac68a5679d5738e293feb26ea4f1265541b860d1bc782c84d8e46
6
+ metadata.gz: cd94929d628f632dd24ab41e36e3efba988ce2a0c7193172e1089d48136bbe108a997cc42a5438fd0165a8f3ce469911ddabae3c2965da002561a8084fb581b2
7
+ data.tar.gz: 3ce02e9da7978e6d40837d7ccf7e141a67b9447b9837e966b7b1db8d0d66a1007c1e36cf9283a383d9ee384ba41bfe8cd9d1026ff5795f9751dfae3d221cef65
data/README.md CHANGED
@@ -22,7 +22,7 @@ Then run the tests:
22
22
  bin/rspec
23
23
  ```
24
24
 
25
- ## Framework API
25
+ ## Command API
26
26
 
27
27
  There are two main functions you will use in your `*-ctl` project to add commands.
28
28
 
@@ -67,6 +67,27 @@ Another Category:
67
67
 
68
68
  If you only use `add_command_under_category` to add your custom commands, everything will be outputted under a category.
69
69
 
70
+ ## Pre-hook API
71
+
72
+ ### add_global_pre_hook(string, ruby_block)
73
+
74
+ This method will add a global pre-hook block that will be executed before any
75
+ *-ctl command is run. If the pre-hook raises an exception it will cause an early
76
+ exit before the command is run.
77
+
78
+ Input Arguments:
79
+
80
+ 1. Name of the hook
81
+ 1. Ruby block of the code to be executed.
82
+
83
+ ### Sample
84
+
85
+ ```ruby
86
+ add_global_pre_hook "ensure that the user is always root" do
87
+ raise "You must run this command as root" unless Process.uid == 0
88
+ end
89
+ ```
90
+
70
91
  ## Releasing
71
92
 
72
93
  *NOTE: Versions prior to 0.3.6 do not use a "v" prefix for their tags. Current
@@ -27,7 +27,7 @@ module Omnibus
27
27
 
28
28
  File::umask(022)
29
29
 
30
- SV_COMMAND_NAMES = %w[status up down once pause cont hup alarm interrupt quit
30
+ SV_COMMAND_NAMES = %w[status up down once pause cont hup alarm int quit
31
31
  term kill start stop restart shutdown force-stop
32
32
  force-reload force-restart force-shutdown check usr1 usr2]
33
33
 
@@ -56,6 +56,12 @@ module Omnibus
56
56
  @quiet = false
57
57
  @exe_name = File.basename($0)
58
58
  @force_exit = false
59
+ @global_pre_hooks = {}
60
+
61
+ # TODO(ssd) 2017-03-28: Set SVDIR explicitly. Once we fix a bug
62
+ # in our debian support, where we rely on system-installed
63
+ # runit, we can likely change this back to ENV.delete("SVDIR")
64
+ ENV['SVDIR'] = service_path
59
65
 
60
66
  # backwards compat command map that does not have categories
61
67
  @command_map = { }
@@ -151,6 +157,7 @@ module Omnibus
151
157
  def self.to_method_name(name)
152
158
  name.gsub(/-/, '_').to_sym
153
159
  end
160
+
154
161
  def to_method_name(name)
155
162
  Ctl.to_method_name(name)
156
163
  end
@@ -185,21 +192,22 @@ module Omnibus
185
192
  eval(IO.read(filepath), nil, filepath, 1)
186
193
  end
187
194
 
188
- def add_command(name, description, arity=1, &block)
189
- @command_map[name] = { :desc => description, :arity => arity }
190
- metaclass = class << self; self; end
191
- # Ruby does not like dashes in method names
192
- method_name = to_method_name(name).to_sym
193
- metaclass.send(:define_method, method_name) { |*args| block.call(*args) }
195
+ def add_command(name, description, arity = 1, &block)
196
+ @command_map[name] = { desc: description, arity: arity }
197
+ self.class.send(:define_method, to_method_name(name).to_sym) { |*args| block.call(*args) }
194
198
  end
195
199
 
196
- def add_command_under_category(name, category, description, arity=1, &block)
200
+ def add_command_under_category(name, category, description, arity = 1, &block)
197
201
  # add new category if it doesn't exist
198
- @category_command_map[category] = {} unless @category_command_map.has_key?(category)
199
- @category_command_map[category][name] = { :desc => description, :arity => arity }
200
- metaclass = class << self; self; end
201
- method_name = to_method_name(name).to_sym
202
- metaclass.send(:define_method, method_name) { |*args| block.call(*args) }
202
+ @category_command_map[category] ||= {}
203
+ @category_command_map[category][name] = { desc: description, arity: arity }
204
+ self.class.send(:define_method, to_method_name(name).to_sym) { |*args| block.call(*args) }
205
+ end
206
+
207
+ def add_global_pre_hook(name, &block)
208
+ method_name = to_method_name("#{name}_global_pre_hook").to_sym
209
+ @global_pre_hooks[name] = method_name
210
+ self.class.send(:define_method, method_name, block)
203
211
  end
204
212
 
205
213
  def exit!(code)
@@ -481,11 +489,11 @@ EOM
481
489
 
482
490
  def run_chef(attr_location, args='')
483
491
  if @verbose
484
- log_level = "-L debug"
492
+ log_level = "-l debug"
485
493
  elsif @quiet
486
494
  # null formatter is awfully quiet, so let them know we're doing something.
487
495
  log "Reconfiguring #{display_name}."
488
- log_level = "-L fatal -F null"
496
+ log_level = "-l fatal -F null"
489
497
  else
490
498
  log_level = ""
491
499
  end
@@ -568,10 +576,10 @@ EOM
568
576
 
569
577
  def tail(*args)
570
578
  # find /var/log -type f -not -path '*/sasl/*' | grep -E -v '(lock|@|tgz|gzip)' | xargs tail --follow=name --retry
571
- command = "find #{log_path}"
579
+ command = "find -L #{log_path}"
572
580
  command << "/#{args[1]}" if args[1]
573
581
  command << ' -type f'
574
- command << log_path_exclude.map { |path| " -not -path #{path}" }.join(' ')
582
+ command << log_path_exclude.map { |path| " -not -path '#{path}'" }.join(' ')
575
583
  command << " | grep -E -v '#{log_exclude}' | xargs tail --follow=name --retry"
576
584
 
577
585
  system(command)
@@ -686,6 +694,12 @@ EOM
686
694
 
687
695
  command_to_run = args[0]
688
696
 
697
+ ## when --help is run as the command itself, we need to strip off the
698
+ ## `--` to ensure the command maps correctly.
699
+ if command_to_run == "--help"
700
+ command_to_run = "help"
701
+ end
702
+
689
703
  # This piece of code checks if the argument is an option. If it is,
690
704
  # then it sets service to nil and adds the argument into the options
691
705
  # argument. This is ugly. A better solution is having a proper parser.
@@ -721,6 +735,8 @@ EOM
721
735
  @force_exit = false
722
736
  exit_code = 0
723
737
 
738
+ run_global_pre_hooks
739
+
724
740
  # Filter args to just command and service. If you are loading
725
741
  # custom commands and need access to the command line argument,
726
742
  # use ARGV directly.
@@ -747,6 +763,17 @@ EOM
747
763
  end
748
764
  end
749
765
 
766
+ def run_global_pre_hooks
767
+ @global_pre_hooks.each do |hook_name, method_name|
768
+ begin
769
+ send(method_name)
770
+ rescue => e
771
+ $stderr.puts("Global pre-hook '#{hook_name}' failed with: '#{e.message}'")
772
+ exit(1)
773
+ end
774
+ end
775
+ end
776
+
750
777
  # Below are some basic command hooks that do the right thing
751
778
  # when a service is configured as external via [package][service
752
779
 
@@ -1,5 +1,5 @@
1
1
  module Omnibus
2
2
  class Ctl
3
- VERSION = "0.5.0"
3
+ VERSION = "0.6.0"
4
4
  end
5
5
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: omnibus-ctl
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.5.0
4
+ version: 0.6.0
5
5
  platform: ruby
6
6
  authors:
7
- - Opscode, Inc.
7
+ - Chef Software, Inc.
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2016-04-15 00:00:00.000000000 Z
11
+ date: 2018-03-08 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rake
@@ -66,7 +66,8 @@ files:
66
66
  - lib/omnibus-ctl.rb
67
67
  - lib/omnibus-ctl/version.rb
68
68
  homepage: http://github.com/chef/omnibus-ctl
69
- licenses: []
69
+ licenses:
70
+ - Apache-2.0
70
71
  metadata: {}
71
72
  post_install_message:
72
73
  rdoc_options: []
@@ -84,7 +85,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
84
85
  version: '0'
85
86
  requirements: []
86
87
  rubyforge_project:
87
- rubygems_version: 2.5.2
88
+ rubygems_version: 2.6.13
88
89
  signing_key:
89
90
  specification_version: 4
90
91
  summary: Provides command line control for omnibus packages