omnibus-ctl 0.5.0 → 0.6.0

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: 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