choria-mcorpc-support 2.21.0 → 2.23.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (145) hide show
  1. checksums.yaml +4 -4
  2. data/lib/mcollective.rb +1 -1
  3. data/lib/mcollective/agent/bolt_tasks.ddl +235 -0
  4. data/lib/mcollective/agent/bolt_tasks.json +347 -0
  5. data/lib/mcollective/agent/bolt_tasks.rb +176 -0
  6. data/lib/mcollective/agent/choria_util.ddl +152 -0
  7. data/lib/mcollective/agent/choria_util.json +244 -0
  8. data/lib/mcollective/agent/rpcutil.ddl +7 -3
  9. data/lib/mcollective/agent/rpcutil.json +333 -0
  10. data/lib/mcollective/agent/scout.ddl +169 -0
  11. data/lib/mcollective/agent/scout.json +224 -0
  12. data/lib/mcollective/agents.rb +7 -6
  13. data/lib/mcollective/aggregate.rb +4 -4
  14. data/lib/mcollective/aggregate/average.rb +2 -2
  15. data/lib/mcollective/aggregate/base.rb +2 -2
  16. data/lib/mcollective/aggregate/result.rb +3 -3
  17. data/lib/mcollective/aggregate/result/collection_result.rb +2 -2
  18. data/lib/mcollective/aggregate/result/numeric_result.rb +2 -2
  19. data/lib/mcollective/aggregate/sum.rb +2 -2
  20. data/lib/mcollective/aggregate/summary.rb +3 -4
  21. data/lib/mcollective/application.rb +57 -21
  22. data/lib/mcollective/application/choria.rb +249 -0
  23. data/lib/mcollective/application/completion.rb +6 -6
  24. data/lib/mcollective/application/describe_filter.rb +20 -20
  25. data/lib/mcollective/application/facts.rb +19 -11
  26. data/lib/mcollective/application/federation.rb +239 -0
  27. data/lib/mcollective/application/find.rb +4 -4
  28. data/lib/mcollective/application/help.rb +3 -3
  29. data/lib/mcollective/application/inventory.rb +3 -341
  30. data/lib/mcollective/application/ping.rb +3 -77
  31. data/lib/mcollective/application/playbook.rb +207 -0
  32. data/lib/mcollective/application/plugin.rb +106 -106
  33. data/lib/mcollective/application/rpc.rb +3 -108
  34. data/lib/mcollective/application/tasks.rb +416 -0
  35. data/lib/mcollective/applications.rb +11 -10
  36. data/lib/mcollective/audit/choria.rb +33 -0
  37. data/lib/mcollective/cache.rb +2 -4
  38. data/lib/mcollective/client.rb +11 -10
  39. data/lib/mcollective/config.rb +21 -34
  40. data/lib/mcollective/connector/base.rb +2 -1
  41. data/lib/mcollective/connector/nats.ddl +9 -0
  42. data/lib/mcollective/connector/nats.rb +450 -0
  43. data/lib/mcollective/data.rb +8 -3
  44. data/lib/mcollective/data/agent_data.rb +1 -1
  45. data/lib/mcollective/data/base.rb +6 -5
  46. data/lib/mcollective/data/bolt_task_data.ddl +90 -0
  47. data/lib/mcollective/data/bolt_task_data.rb +32 -0
  48. data/lib/mcollective/data/collective_data.rb +1 -1
  49. data/lib/mcollective/data/fact_data.rb +6 -6
  50. data/lib/mcollective/data/fstat_data.rb +2 -4
  51. data/lib/mcollective/data/result.rb +7 -2
  52. data/lib/mcollective/ddl/agentddl.rb +5 -17
  53. data/lib/mcollective/ddl/base.rb +10 -13
  54. data/lib/mcollective/discovery.rb +12 -26
  55. data/lib/mcollective/discovery/choria.ddl +11 -0
  56. data/lib/mcollective/discovery/choria.rb +223 -0
  57. data/lib/mcollective/discovery/flatfile.rb +7 -8
  58. data/lib/mcollective/discovery/mc.rb +2 -2
  59. data/lib/mcollective/discovery/stdin.rb +17 -18
  60. data/lib/mcollective/exceptions.rb +13 -0
  61. data/lib/mcollective/facts/base.rb +9 -9
  62. data/lib/mcollective/facts/yaml_facts.rb +12 -12
  63. data/lib/mcollective/generators.rb +3 -3
  64. data/lib/mcollective/generators/agent_generator.rb +3 -4
  65. data/lib/mcollective/generators/base.rb +14 -15
  66. data/lib/mcollective/generators/data_generator.rb +5 -6
  67. data/lib/mcollective/log.rb +2 -2
  68. data/lib/mcollective/logger/base.rb +3 -2
  69. data/lib/mcollective/logger/console_logger.rb +10 -10
  70. data/lib/mcollective/logger/file_logger.rb +7 -7
  71. data/lib/mcollective/logger/syslog_logger.rb +11 -15
  72. data/lib/mcollective/matcher.rb +14 -14
  73. data/lib/mcollective/matcher/parser.rb +31 -41
  74. data/lib/mcollective/matcher/scanner.rb +69 -74
  75. data/lib/mcollective/message.rb +10 -17
  76. data/lib/mcollective/monkey_patches.rb +2 -4
  77. data/lib/mcollective/optionparser.rb +1 -0
  78. data/lib/mcollective/pluginmanager.rb +3 -5
  79. data/lib/mcollective/pluginpackager.rb +1 -3
  80. data/lib/mcollective/pluginpackager/agent_definition.rb +3 -8
  81. data/lib/mcollective/pluginpackager/forge_packager.rb +7 -9
  82. data/lib/mcollective/pluginpackager/standard_definition.rb +1 -2
  83. data/lib/mcollective/registration/base.rb +18 -16
  84. data/lib/mcollective/rpc.rb +2 -4
  85. data/lib/mcollective/rpc/actionrunner.rb +16 -18
  86. data/lib/mcollective/rpc/agent.rb +26 -43
  87. data/lib/mcollective/rpc/audit.rb +1 -0
  88. data/lib/mcollective/rpc/client.rb +67 -85
  89. data/lib/mcollective/rpc/helpers.rb +55 -62
  90. data/lib/mcollective/rpc/progress.rb +2 -2
  91. data/lib/mcollective/rpc/reply.rb +17 -19
  92. data/lib/mcollective/rpc/request.rb +7 -5
  93. data/lib/mcollective/rpc/result.rb +6 -8
  94. data/lib/mcollective/rpc/stats.rb +49 -58
  95. data/lib/mcollective/security/base.rb +29 -36
  96. data/lib/mcollective/security/choria.rb +765 -0
  97. data/lib/mcollective/shell.rb +9 -4
  98. data/lib/mcollective/signer/base.rb +28 -0
  99. data/lib/mcollective/signer/choria.rb +185 -0
  100. data/lib/mcollective/ssl.rb +8 -6
  101. data/lib/mcollective/util.rb +58 -55
  102. data/lib/mcollective/util/bolt_support.rb +176 -0
  103. data/lib/mcollective/util/bolt_support/plan_runner.rb +167 -0
  104. data/lib/mcollective/util/bolt_support/task_result.rb +94 -0
  105. data/lib/mcollective/util/bolt_support/task_results.rb +128 -0
  106. data/lib/mcollective/util/choria.rb +1103 -0
  107. data/lib/mcollective/util/indifferent_hash.rb +12 -0
  108. data/lib/mcollective/util/natswrapper.rb +242 -0
  109. data/lib/mcollective/util/playbook.rb +435 -0
  110. data/lib/mcollective/util/playbook/data_stores.rb +201 -0
  111. data/lib/mcollective/util/playbook/data_stores/base.rb +99 -0
  112. data/lib/mcollective/util/playbook/data_stores/consul_data_store.rb +88 -0
  113. data/lib/mcollective/util/playbook/data_stores/environment_data_store.rb +33 -0
  114. data/lib/mcollective/util/playbook/data_stores/etcd_data_store.rb +42 -0
  115. data/lib/mcollective/util/playbook/data_stores/file_data_store.rb +106 -0
  116. data/lib/mcollective/util/playbook/data_stores/shell_data_store.rb +103 -0
  117. data/lib/mcollective/util/playbook/inputs.rb +265 -0
  118. data/lib/mcollective/util/playbook/nodes.rb +207 -0
  119. data/lib/mcollective/util/playbook/nodes/mcollective_nodes.rb +86 -0
  120. data/lib/mcollective/util/playbook/nodes/pql_nodes.rb +40 -0
  121. data/lib/mcollective/util/playbook/nodes/shell_nodes.rb +55 -0
  122. data/lib/mcollective/util/playbook/nodes/terraform_nodes.rb +65 -0
  123. data/lib/mcollective/util/playbook/nodes/yaml_nodes.rb +47 -0
  124. data/lib/mcollective/util/playbook/playbook_logger.rb +47 -0
  125. data/lib/mcollective/util/playbook/puppet_logger.rb +51 -0
  126. data/lib/mcollective/util/playbook/report.rb +152 -0
  127. data/lib/mcollective/util/playbook/task_result.rb +55 -0
  128. data/lib/mcollective/util/playbook/tasks.rb +196 -0
  129. data/lib/mcollective/util/playbook/tasks/base.rb +45 -0
  130. data/lib/mcollective/util/playbook/tasks/graphite_event_task.rb +64 -0
  131. data/lib/mcollective/util/playbook/tasks/mcollective_task.rb +356 -0
  132. data/lib/mcollective/util/playbook/tasks/shell_task.rb +93 -0
  133. data/lib/mcollective/util/playbook/tasks/slack_task.rb +105 -0
  134. data/lib/mcollective/util/playbook/tasks/webhook_task.rb +136 -0
  135. data/lib/mcollective/util/playbook/template_util.rb +98 -0
  136. data/lib/mcollective/util/playbook/uses.rb +169 -0
  137. data/lib/mcollective/util/tasks_support.rb +733 -0
  138. data/lib/mcollective/util/tasks_support/cli.rb +260 -0
  139. data/lib/mcollective/util/tasks_support/default_formatter.rb +138 -0
  140. data/lib/mcollective/util/tasks_support/json_formatter.rb +108 -0
  141. data/lib/mcollective/validator.rb +6 -1
  142. data/lib/mcollective/validator/bolt_task_name_validator.ddl +7 -0
  143. data/lib/mcollective/validator/bolt_task_name_validator.rb +11 -0
  144. data/lib/mcollective/validator/length_validator.rb +1 -3
  145. metadata +65 -2
@@ -1,13 +1,13 @@
1
1
  module MCollective
2
2
  module Facts
3
- require 'yaml'
3
+ require "yaml"
4
4
 
5
5
  # A factsource that reads a hash of facts from a YAML file
6
6
  #
7
7
  # Multiple files can be specified seperated with a : in the
8
8
  # config file, they will be merged with later files overriding
9
9
  # earlier ones in the list.
10
- class Yaml_facts<Base
10
+ class Yaml_facts < Base
11
11
  def initialize
12
12
  @yaml_file_mtimes = {}
13
13
 
@@ -23,15 +23,15 @@ module MCollective
23
23
  fact_files.each do |file|
24
24
  begin
25
25
  if File.exist?(file)
26
- if YAML.respond_to? :safe_load
27
- facts.merge!(YAML.safe_load(File.read(file)))
28
- else
29
- facts.merge!(YAML.load(File.read(file))) # rubocop:disable Security/YAMLLoad
26
+ if YAML.respond_to? :safe_load
27
+ facts.merge!(YAML.safe_load(File.read(file)))
28
+ else
29
+ facts.merge!(YAML.load(File.read(file)))
30
30
  end
31
31
  else
32
32
  raise("Can't find YAML file to load: #{file}")
33
33
  end
34
- rescue Exception => e
34
+ rescue Exception => e # rubocop:disable Lint/RescueException
35
35
  Log.error("Failed to load yaml facts from #{file}: #{e.class}: #{e}")
36
36
  end
37
37
  end
@@ -49,13 +49,13 @@ module MCollective
49
49
  @yaml_file_mtimes[file] ||= File.stat(file).mtime
50
50
  mtime = File.stat(file).mtime
51
51
 
52
- if mtime > @yaml_file_mtimes[file]
53
- @yaml_file_mtimes[file] = mtime
52
+ next unless mtime > @yaml_file_mtimes[file]
54
53
 
55
- Log.debug("Forcing fact reload due to age of #{file}")
54
+ @yaml_file_mtimes[file] = mtime
56
55
 
57
- return true
58
- end
56
+ Log.debug("Forcing fact reload due to age of #{file}")
57
+
58
+ return true
59
59
  end
60
60
 
61
61
  false
@@ -1,7 +1,7 @@
1
1
  module MCollective
2
2
  module Generators
3
- require "mcollective/generators/base.rb"
4
- require "mcollective/generators/data_generator.rb"
5
- require "mcollective/generators/agent_generator.rb"
3
+ require "mcollective/generators/base"
4
+ require "mcollective/generators/data_generator"
5
+ require "mcollective/generators/agent_generator"
6
6
  end
7
7
  end
@@ -1,11 +1,10 @@
1
1
  module MCollective
2
2
  module Generators
3
- class AgentGenerator<Base
4
-
3
+ class AgentGenerator < Base
5
4
  attr_accessor :ddl, :content
6
5
 
7
- def initialize(plugin_name, actions = [], name = nil, description = nil, author = nil ,
8
- license = nil, version = nil, url = nil, timeout = nil)
6
+ def initialize(plugin_name, actions=[], name=nil, description=nil, author=nil,
7
+ license=nil, version=nil, url=nil, timeout=nil)
9
8
 
10
9
  super(name, description, author, license, version, url, timeout)
11
10
  @plugin_name = plugin_name
@@ -2,6 +2,7 @@ module MCollective
2
2
  module Generators
3
3
  class Base
4
4
  attr_accessor :meta, :plugin_name, :mod_name
5
+
5
6
  def initialize(name, description, author, license, version, url, timeout)
6
7
  @meta = {:name => name,
7
8
  :description => description,
@@ -23,23 +24,21 @@ module MCollective
23
24
  end
24
25
 
25
26
  def write_plugins
26
- begin
27
- Dir.mkdir @plugin_name
28
- dirname = File.join(@plugin_name, @mod_name.downcase)
29
- Dir.mkdir dirname
30
- puts "Created plugin directory : #{@plugin_name}"
27
+ Dir.mkdir @plugin_name
28
+ dirname = File.join(@plugin_name, @mod_name.downcase)
29
+ Dir.mkdir dirname
30
+ puts "Created plugin directory : #{@plugin_name}"
31
31
 
32
- File.open(File.join(dirname, "#{@plugin_name}.ddl"), "w"){|f| f.puts @ddl}
33
- puts "Created DDL file : #{File.join(dirname, "#{@plugin_name}.ddl")}"
32
+ File.open(File.join(dirname, "#{@plugin_name}.ddl"), "w") {|f| f.puts @ddl}
33
+ puts "Created DDL file : #{File.join(dirname, "#{@plugin_name}.ddl")}"
34
34
 
35
- File.open(File.join(dirname, "#{@plugin_name}.rb"), "w"){|f| f.puts @plugin}
36
- puts "Created #{@mod_name} file : #{File.join(dirname, "#{@plugin_name}.rb")}"
37
- rescue Errno::EEXIST
38
- raise "cannot generate '#{@plugin_name}' : plugin directory already exists."
39
- rescue Exception => e
40
- FileUtils.rm_rf(@plugin_name) if File.directory?(@plugin_name)
41
- raise "cannot generate plugin - #{e}"
42
- end
35
+ File.open(File.join(dirname, "#{@plugin_name}.rb"), "w") {|f| f.puts @plugin}
36
+ puts "Created #{@mod_name} file : #{File.join(dirname, "#{@plugin_name}.rb")}"
37
+ rescue Errno::EEXIST
38
+ raise "cannot generate '#{@plugin_name}' : plugin directory already exists."
39
+ rescue Exception => e # rubocop:disable Lint/RescueException
40
+ FileUtils.rm_rf(@plugin_name) if File.directory?(@plugin_name)
41
+ raise "cannot generate plugin - #{e}"
43
42
  end
44
43
  end
45
44
  end
@@ -1,11 +1,10 @@
1
1
  module MCollective
2
2
  module Generators
3
- class DataGenerator<Base
4
-
3
+ class DataGenerator < Base
5
4
  attr_accessor :ddl, :content
6
5
 
7
- def initialize(plugin_name, outputs = [], name = nil, description = nil, author = nil ,
8
- license = nil, version = nil, url = nil, timeout = nil)
6
+ def initialize(plugin_name, outputs=[], name=nil, description=nil, author=nil,
7
+ license=nil, version=nil, url=nil, timeout=nil)
9
8
 
10
9
  super(name, description, author, license, version, url, timeout)
11
10
  @mod_name = "Data"
@@ -22,7 +21,7 @@ module MCollective
22
21
  query_text = "dataquery :description => \"Query information\" do\n"
23
22
  query_text += ERB.new(File.read(File.join(File.dirname(__FILE__), "templates", "data_input_snippet.erb"))).result
24
23
 
25
- @outputs.each_with_index do |output,i|
24
+ @outputs.each_with_index do |output, i|
26
25
  query_text += "%2s%s" % [" ", "output :#{output},\n"]
27
26
  query_text += "%9s%s" % [" ", ":description => \"%DESCRIPTION%\",\n"]
28
27
  query_text += "%9s%s" % [" ", ":display_as => \"%DESCRIPTION%\"\n"]
@@ -39,7 +38,7 @@ module MCollective
39
38
  content_text = "%6s%s" % [" ", "query do |what|\n"]
40
39
 
41
40
  @outputs.each do |output|
42
- content_text += "%8s%s" % [" ", "result[:#{output}] = nil\n"]
41
+ content_text += "%8s%s" % [" ", "result[:#{output}] = nil\n"]
43
42
  end
44
43
  content_text += "%6s%s" % [" ", "end\n"]
45
44
 
@@ -60,7 +60,7 @@ module MCollective
60
60
  else
61
61
  t = Time.new.strftime("%H:%M:%S")
62
62
 
63
- STDERR.puts "#{t}: #{level}: #{from}: #{msg}"
63
+ warn "#{t}: #{level}: #{from}: #{msg}"
64
64
  end
65
65
  end
66
66
 
@@ -98,7 +98,7 @@ module MCollective
98
98
  @logger.start
99
99
  rescue Exception => e # rubocop:disable Lint/RescueException
100
100
  @configured = false
101
- STDERR.puts "Could not start logger: #{e.class} #{e}"
101
+ warn "Could not start logger: #{e.class} #{e}"
102
102
  end
103
103
 
104
104
  # figures out the filename that called us
@@ -29,7 +29,7 @@ module MCollective
29
29
  end
30
30
 
31
31
  # Sets a new level and record it in @active_level
32
- def set_level(level)
32
+ def set_level(level) # rubocop:disable Naming/AccessorMethodName
33
33
  set_logging_level(level)
34
34
  @active_level = level.to_sym
35
35
  end
@@ -47,6 +47,7 @@ module MCollective
47
47
  end
48
48
 
49
49
  private
50
+
50
51
  def map_level(level)
51
52
  raise "Logger class do not know how to handle #{level} messages" unless valid_levels.include?(level.to_sym)
52
53
 
@@ -54,7 +55,7 @@ module MCollective
54
55
  end
55
56
 
56
57
  # Gets the next level in the list, cycles down to the firt once it reaches the end
57
- def get_next_level
58
+ def get_next_level # rubocop:disable Naming/AccessorMethodName
58
59
  # if all else fails, always go to debug mode
59
60
  nextlvl = :debug
60
61
 
@@ -1,7 +1,7 @@
1
1
  module MCollective
2
2
  module Logger
3
3
  # Implements a syslog based logger using the standard ruby syslog class
4
- class Console_logger<Base
4
+ class Console_logger < Base
5
5
  def start
6
6
  set_level(:info)
7
7
 
@@ -9,19 +9,19 @@ module MCollective
9
9
  set_level(config.loglevel.to_sym) if config.configured
10
10
  end
11
11
 
12
- def set_logging_level(level)
12
+ def set_logging_level(level) # rubocop:disable Naming/AccessorMethodName
13
13
  # nothing to do here, we ignore high levels when we log
14
14
  end
15
15
 
16
16
  def valid_levels
17
- {:info => :info,
18
- :warn => :warning,
17
+ {:info => :info,
18
+ :warn => :warning,
19
19
  :debug => :debug,
20
20
  :fatal => :crit,
21
21
  :error => :err}
22
22
  end
23
23
 
24
- def log(level, from, msg, normal_output=STDERR, last_resort_output=STDERR)
24
+ def log(level, from, msg, normal_output=$stderr, last_resort_output=$stderr)
25
25
  if @known_levels.index(level) >= @known_levels.index(@active_level)
26
26
  time = Time.new.strftime("%Y/%m/%d %H:%M:%S")
27
27
 
@@ -41,20 +41,20 @@ module MCollective
41
41
 
42
42
  colors = {:error => Util.color(:red),
43
43
  :fatal => Util.color(:red),
44
- :warn => Util.color(:yellow),
45
- :info => Util.color(:green),
44
+ :warn => Util.color(:yellow),
45
+ :info => Util.color(:green),
46
46
  :reset => Util.color(:reset)}
47
47
 
48
48
  if colorize
49
- return colors[level] || ""
49
+ colors[level] || ""
50
50
  else
51
- return ""
51
+ ""
52
52
  end
53
53
  end
54
54
 
55
55
  # Helper to return a string in specific color
56
56
  def colorize(level, msg)
57
- "%s%s%s" % [ color(level), msg, color(:reset) ]
57
+ "%s%s%s" % [color(level), msg, color(:reset)]
58
58
  end
59
59
  end
60
60
  end
@@ -1,4 +1,4 @@
1
- require 'logger'
1
+ require "logger"
2
2
 
3
3
  module MCollective
4
4
  module Logger
@@ -9,7 +9,7 @@ module MCollective
9
9
  # - config.logfile
10
10
  # - config.keeplogs defaults to 2097152
11
11
  # - config.max_log_size defaults to 5
12
- class File_logger<Base
12
+ class File_logger < Base
13
13
  def start
14
14
  config = Config.instance
15
15
 
@@ -19,16 +19,16 @@ module MCollective
19
19
  set_level(config.loglevel.to_sym)
20
20
  end
21
21
 
22
- def set_logging_level(level)
22
+ def set_logging_level(level) # rubocop:disable Naming/AccessorMethodName
23
23
  @logger.level = map_level(level)
24
- rescue Exception => e
24
+ rescue Exception => e # rubocop:disable Lint/RescueException
25
25
  @logger.level = ::Logger::DEBUG
26
26
  log(:error, "", "Could not set logging to #{level} using debug instead: #{e.class} #{e}")
27
27
  end
28
28
 
29
29
  def valid_levels
30
- {:info => ::Logger::INFO,
31
- :warn => ::Logger::WARN,
30
+ {:info => ::Logger::INFO,
31
+ :warn => ::Logger::WARN,
32
32
  :debug => ::Logger::DEBUG,
33
33
  :fatal => ::Logger::FATAL,
34
34
  :error => ::Logger::ERROR}
@@ -39,7 +39,7 @@ module MCollective
39
39
  rescue
40
40
  # if this fails we probably cant show the user output at all,
41
41
  # STDERR it as last resort
42
- STDERR.puts("#{level}: #{msg}")
42
+ warn("#{level}: #{msg}")
43
43
  end
44
44
 
45
45
  def reopen
@@ -1,8 +1,8 @@
1
1
  module MCollective
2
2
  module Logger
3
3
  # Implements a syslog based logger using the standard ruby syslog class
4
- class Syslog_logger<Base
5
- require 'syslog'
4
+ class Syslog_logger < Base
5
+ require "syslog"
6
6
 
7
7
  include Syslog::Constants
8
8
 
@@ -19,34 +19,30 @@ module MCollective
19
19
  end
20
20
 
21
21
  def syslog_facility(facility)
22
- begin
23
- Syslog.const_get("LOG_#{facility.upcase}")
24
- rescue NameError => e
25
- STDERR.puts "Invalid syslog facility #{facility} supplied, reverting to USER"
26
- Syslog::LOG_USER
27
- end
22
+ Syslog.const_get("LOG_#{facility.upcase}")
23
+ rescue NameError
24
+ warn "Invalid syslog facility #{facility} supplied, reverting to USER"
25
+ Syslog::LOG_USER
28
26
  end
29
27
 
30
- def set_logging_level(level)
28
+ def set_logging_level(level) # rubocop:disable Naming/AccessorMethodName
31
29
  # noop
32
30
  end
33
31
 
34
32
  def valid_levels
35
- {:info => :info,
36
- :warn => :warning,
33
+ {:info => :info,
34
+ :warn => :warning,
37
35
  :debug => :debug,
38
36
  :fatal => :crit,
39
37
  :error => :err}
40
38
  end
41
39
 
42
40
  def log(level, from, msg)
43
- if @known_levels.index(level) >= @known_levels.index(@active_level)
44
- Syslog.send(map_level(level), "#{from} #{msg}")
45
- end
41
+ Syslog.send(map_level(level), "#{from} #{msg}") if @known_levels.index(level) >= @known_levels.index(@active_level)
46
42
  rescue
47
43
  # if this fails we probably cant show the user output at all,
48
44
  # STDERR it as last resort
49
- STDERR.puts("#{level}: #{msg}")
45
+ warn("#{level}: #{msg}")
50
46
  end
51
47
  end
52
48
  end
@@ -102,9 +102,9 @@ module MCollective
102
102
  # If data field has not been set we set the comparison result to nil
103
103
  eval_result = nil
104
104
  end
105
- return eval_result
105
+ eval_result
106
106
  else
107
- return result
107
+ result
108
108
  end
109
109
  rescue NoMethodError
110
110
  Log.debug("cannot execute discovery function '#{function_hash['name']}'. data plugin not found")
@@ -113,9 +113,10 @@ module MCollective
113
113
 
114
114
  # Evaluates a compound statement
115
115
  def self.eval_compound_statement(expression)
116
- if expression.values.first =~ /^\//
116
+ case expression.values.first
117
+ when /^\//
117
118
  Util.has_cf_class?(expression.values.first)
118
- elsif expression.values.first =~ />=|<=|=|<|>/
119
+ when />=|<=|=|<|>/
119
120
  optype = expression.values.first.match(/>=|<=|=|<|>/)
120
121
  name, value = expression.values.first.split(optype[0])
121
122
  if value.split("")[0] == "/"
@@ -160,20 +161,21 @@ module MCollective
160
161
  result = l_compare.match(r_compare)
161
162
  # Flip return value for != operator
162
163
  if function_hash["operator"] == "!=~"
163
- return !result
164
+ !result
164
165
  else
165
- return !!result
166
+ !!result
166
167
  end
167
168
  else
168
169
  Log.debug("Cannot do a regex check on a non string value.")
169
- return false
170
+ false
170
171
  end
171
172
  # Otherwise do a normal comparison while taking the type into account
172
173
  else
173
174
  if l_compare.is_a? String
174
175
  r_compare = r_compare.to_s
175
176
  elsif r_compare.is_a? String
176
- if l_compare.is_a? Numeric
177
+ case l_compare
178
+ when Numeric
177
179
  r_compare = r_compare.strip
178
180
  begin
179
181
  r_compare = Integer(r_compare)
@@ -184,7 +186,7 @@ module MCollective
184
186
  raise(ArgumentError, "invalid numeric value: #{r_compare}")
185
187
  end
186
188
  end
187
- elsif l_compare.is_a?(TrueClass) || l_compare.is_a?(FalseClass)
189
+ when TrueClass, FalseClass
188
190
  r_compare = r_compare.strip
189
191
  if r_compare == true.to_s # rubocop:disable Metrics/BlockNesting
190
192
  r_compare = true
@@ -201,8 +203,8 @@ module MCollective
201
203
  else
202
204
  raise(ArgumentError, "invalid operator: #{operator}")
203
205
  end
204
- result = l_compare.send(operator, r_compare)
205
- return result
206
+ l_compare.send(operator, r_compare)
207
+
206
208
  end
207
209
  end
208
210
 
@@ -210,9 +212,7 @@ module MCollective
210
212
  def self.create_compound_callstack(call_string)
211
213
  callstack = Matcher::Parser.new(call_string).execution_stack
212
214
  callstack.each_with_index do |statement, i|
213
- if statement.keys.first == "fstatement"
214
- callstack[i]["fstatement"] = create_function_hash(statement.values.first)
215
- end
215
+ callstack[i]["fstatement"] = create_function_hash(statement.values.first) if statement.keys.first == "fstatement"
216
216
  end
217
217
  callstack
218
218
  end
@@ -1,3 +1,4 @@
1
+ # rubocop:disable Metrics/BlockNesting
1
2
  module MCollective
2
3
  module Matcher
3
4
  class Parser
@@ -10,9 +11,9 @@ module MCollective
10
11
  @token_errors = []
11
12
  @paren_errors = []
12
13
  parse
13
- exit_with_token_errors if @token_errors.size > 0
14
- exit_with_parse_errors if @parse_errors.size > 0
15
- exit_with_paren_errors if @paren_errors.size > 0
14
+ exit_with_token_errors unless @token_errors.empty?
15
+ exit_with_parse_errors unless @parse_errors.empty?
16
+ exit_with_paren_errors unless @paren_errors.empty?
16
17
  end
17
18
 
18
19
  # Exit and highlight any malformed tokens
@@ -31,7 +32,7 @@ module MCollective
31
32
  @scanner.arguments[i] = Util.colorize(:red, @scanner.arguments[i])
32
33
  end
33
34
  end
34
- raise "Parse errors found while parsing -S input #{ @scanner.arguments.join}"
35
+ raise "Parse errors found while parsing -S input #{@scanner.arguments.join}"
35
36
  end
36
37
 
37
38
  def exit_with_paren_errors
@@ -42,13 +43,12 @@ module MCollective
42
43
  end
43
44
 
44
45
  # Parse the input string, one token at a time a contruct the call stack
45
- def parse
46
+ def parse # rubocop:disable Metrics/MethodLength
46
47
  pre_index = @scanner.token_index
47
- p_token,p_token_value = nil
48
- c_token,c_token_value = @scanner.get_token
49
- parenth = 0
48
+ p_token = nil
49
+ c_token, c_token_value = @scanner.get_token
50
50
 
51
- while (c_token != nil)
51
+ until c_token.nil?
52
52
  @scanner.token_index += 1
53
53
  n_token, n_token_value = @scanner.get_token
54
54
 
@@ -58,67 +58,56 @@ module MCollective
58
58
  @token_errors << c_token_value
59
59
 
60
60
  when "and"
61
- unless (n_token =~ /not|fstatement|statement|\(/) || (scanner.token_index == scanner.arguments.size) && !(n_token == nil)
61
+ unless (n_token =~ /not|fstatement|statement|\(/) || (scanner.token_index == scanner.arguments.size) && !n_token.nil?
62
62
  @parse_errors << [pre_index, scanner.token_index]
63
63
  end
64
64
 
65
- if p_token == nil
65
+ case p_token
66
+ when nil
66
67
  @parse_errors << [pre_index - c_token.size, scanner.token_index]
67
- elsif (p_token == "and" || p_token == "or")
68
+ when "and", "or"
68
69
  @parse_errors << [pre_index - 1 - p_token.size, pre_index - 1]
69
70
  end
70
71
 
71
72
  when "or"
72
- unless (n_token =~ /not|fstatement|statement|\(/) || (scanner.token_index == scanner.arguments.size) && !(n_token == nil)
73
+ unless (n_token =~ /not|fstatement|statement|\(/) || (scanner.token_index == scanner.arguments.size) && !n_token.nil?
73
74
  @parse_errors << [pre_index, scanner.token_index]
74
75
  end
75
76
 
76
- if p_token == nil
77
+ case p_token
78
+ when nil
77
79
  @parse_errors << [pre_index - c_token.size, scanner.token_index]
78
- elsif (p_token == "and" || p_token == "or")
80
+ when "and", "or"
79
81
  @parse_errors << [pre_index - 1 - p_token.size, pre_index - 1]
80
82
  end
81
83
 
82
84
  when "not"
83
- unless n_token =~ /fstatement|statement|\(|not/ && !(n_token == nil)
84
- @parse_errors << [pre_index, scanner.token_index]
85
- end
85
+ @parse_errors << [pre_index, scanner.token_index] unless n_token =~ /fstatement|statement|\(|not/ && !n_token.nil?
86
86
 
87
- when "statement","fstatement"
88
- unless n_token =~ /and|or|\)/
89
- unless scanner.token_index == scanner.arguments.size
90
- @parse_errors << [pre_index, scanner.token_index]
91
- end
92
- end
87
+ when "statement", "fstatement"
88
+ @parse_errors << [pre_index, scanner.token_index] if n_token !~ /and|or|\)/ && scanner.token_index != scanner.arguments.size
93
89
 
94
90
  when ")"
95
- unless (n_token =~ /|and|or|not|\(/)
96
- unless(scanner.token_index == scanner.arguments.size)
97
- @parse_errors << [pre_index, scanner.token_index]
98
- end
99
- end
100
- unless @paren_errors.empty?
101
- @paren_errors.pop
91
+ @parse_errors << [pre_index, scanner.token_index] if n_token !~ /|and|or|not|\(/ && scanner.token_index != scanner.arguments.size
92
+ if @paren_errors.empty?
93
+ @paren_errors.push(n_token.nil? ? scanner.token_index - 1 : scanner.token_index - n_token_value.size)
102
94
  else
103
- @paren_errors.push((n_token.nil?) ? scanner.token_index - 1: scanner.token_index - n_token_value.size)
95
+ @paren_errors.pop
104
96
  end
105
97
 
106
98
  when "("
107
- unless n_token =~ /fstatement|statement|not|\(/
108
- @parse_errors << [pre_index, scanner.token_index]
109
- end
110
- @paren_errors.push((n_token.nil?) ? scanner.token_index - 1: scanner.token_index - n_token_value.size)
99
+ @parse_errors << [pre_index, scanner.token_index] unless n_token =~ /fstatement|statement|not|\(/
100
+ @paren_errors.push(n_token.nil? ? scanner.token_index - 1 : scanner.token_index - n_token_value.size)
111
101
 
112
102
  else
113
103
  @parse_errors << [pre_index, scanner.token_index]
114
104
  end
115
105
 
116
- unless n_token == " " ||c_token == "bad_token"
117
- @execution_stack << {c_token => c_token_value}
118
- end
106
+ @execution_stack << {c_token => c_token_value} unless n_token == " " || c_token == "bad_token"
119
107
 
120
- p_token, p_token_value = c_token, c_token_value
121
- c_token, c_token_value = n_token, n_token_value
108
+ p_token = c_token
109
+ c_token = n_token
110
+ c_token_value = n_token_value
122
111
  end
123
112
  pre_index = @scanner.token_index
124
113
  end
@@ -126,3 +115,4 @@ module MCollective
126
115
  end
127
116
  end
128
117
  end
118
+ # rubocop:enable Metrics/BlockNesting