choria-mcorpc-support 2.21.1 → 2.23.1

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 -2
  3. data/lib/mcollective/agent/bolt_tasks.ddl +253 -0
  4. data/lib/mcollective/agent/bolt_tasks.json +365 -0
  5. data/lib/mcollective/agent/bolt_tasks.rb +178 -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 +8 -4
  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 +189 -0
  23. data/lib/mcollective/application/completion.rb +6 -6
  24. data/lib/mcollective/application/facts.rb +11 -11
  25. data/lib/mcollective/application/federation.rb +237 -0
  26. data/lib/mcollective/application/find.rb +4 -4
  27. data/lib/mcollective/application/help.rb +3 -3
  28. data/lib/mcollective/application/inventory.rb +3 -341
  29. data/lib/mcollective/application/ping.rb +5 -51
  30. data/lib/mcollective/application/playbook.rb +207 -0
  31. data/lib/mcollective/application/plugin.rb +106 -106
  32. data/lib/mcollective/application/rpc.rb +3 -108
  33. data/lib/mcollective/application/tasks.rb +425 -0
  34. data/lib/mcollective/applications.rb +11 -10
  35. data/lib/mcollective/audit/choria.rb +33 -0
  36. data/lib/mcollective/cache.rb +2 -4
  37. data/lib/mcollective/client.rb +11 -10
  38. data/lib/mcollective/config.rb +21 -34
  39. data/lib/mcollective/connector/base.rb +2 -1
  40. data/lib/mcollective/connector/nats.ddl +9 -0
  41. data/lib/mcollective/connector/nats.rb +450 -0
  42. data/lib/mcollective/data.rb +8 -3
  43. data/lib/mcollective/data/agent_data.rb +1 -1
  44. data/lib/mcollective/data/base.rb +6 -5
  45. data/lib/mcollective/data/bolt_task_data.ddl +90 -0
  46. data/lib/mcollective/data/bolt_task_data.rb +32 -0
  47. data/lib/mcollective/data/collective_data.rb +1 -1
  48. data/lib/mcollective/data/fact_data.rb +6 -6
  49. data/lib/mcollective/data/fstat_data.rb +2 -4
  50. data/lib/mcollective/data/result.rb +7 -2
  51. data/lib/mcollective/ddl/agentddl.rb +5 -17
  52. data/lib/mcollective/ddl/base.rb +10 -13
  53. data/lib/mcollective/discovery.rb +24 -39
  54. data/lib/mcollective/discovery/choria.ddl +11 -0
  55. data/lib/mcollective/discovery/choria.rb +223 -0
  56. data/lib/mcollective/discovery/flatfile.rb +7 -8
  57. data/lib/mcollective/discovery/mc.rb +2 -2
  58. data/lib/mcollective/discovery/stdin.rb +17 -18
  59. data/lib/mcollective/exceptions.rb +13 -0
  60. data/lib/mcollective/facts/base.rb +9 -9
  61. data/lib/mcollective/facts/yaml_facts.rb +12 -12
  62. data/lib/mcollective/generators.rb +3 -3
  63. data/lib/mcollective/generators/agent_generator.rb +3 -4
  64. data/lib/mcollective/generators/base.rb +14 -15
  65. data/lib/mcollective/generators/data_generator.rb +5 -6
  66. data/lib/mcollective/log.rb +2 -2
  67. data/lib/mcollective/logger/base.rb +3 -2
  68. data/lib/mcollective/logger/console_logger.rb +10 -10
  69. data/lib/mcollective/logger/file_logger.rb +7 -7
  70. data/lib/mcollective/logger/syslog_logger.rb +11 -15
  71. data/lib/mcollective/message.rb +8 -39
  72. data/lib/mcollective/monkey_patches.rb +2 -4
  73. data/lib/mcollective/optionparser.rb +2 -1
  74. data/lib/mcollective/pluginmanager.rb +3 -5
  75. data/lib/mcollective/pluginpackager.rb +1 -3
  76. data/lib/mcollective/pluginpackager/agent_definition.rb +3 -8
  77. data/lib/mcollective/pluginpackager/forge_packager.rb +7 -9
  78. data/lib/mcollective/pluginpackager/standard_definition.rb +1 -2
  79. data/lib/mcollective/registration/base.rb +18 -16
  80. data/lib/mcollective/rpc.rb +2 -4
  81. data/lib/mcollective/rpc/actionrunner.rb +16 -18
  82. data/lib/mcollective/rpc/agent.rb +26 -43
  83. data/lib/mcollective/rpc/audit.rb +1 -0
  84. data/lib/mcollective/rpc/client.rb +67 -85
  85. data/lib/mcollective/rpc/helpers.rb +55 -62
  86. data/lib/mcollective/rpc/progress.rb +2 -2
  87. data/lib/mcollective/rpc/reply.rb +17 -19
  88. data/lib/mcollective/rpc/request.rb +7 -5
  89. data/lib/mcollective/rpc/result.rb +6 -8
  90. data/lib/mcollective/rpc/stats.rb +49 -58
  91. data/lib/mcollective/security/base.rb +13 -56
  92. data/lib/mcollective/security/choria.rb +765 -0
  93. data/lib/mcollective/shell.rb +9 -4
  94. data/lib/mcollective/signer/base.rb +28 -0
  95. data/lib/mcollective/signer/choria.rb +185 -0
  96. data/lib/mcollective/ssl.rb +8 -6
  97. data/lib/mcollective/util.rb +58 -55
  98. data/lib/mcollective/util/bolt_support.rb +176 -0
  99. data/lib/mcollective/util/bolt_support/plan_runner.rb +167 -0
  100. data/lib/mcollective/util/bolt_support/task_result.rb +94 -0
  101. data/lib/mcollective/util/bolt_support/task_results.rb +128 -0
  102. data/lib/mcollective/util/choria.rb +946 -0
  103. data/lib/mcollective/util/indifferent_hash.rb +12 -0
  104. data/lib/mcollective/util/natswrapper.rb +242 -0
  105. data/lib/mcollective/util/playbook.rb +435 -0
  106. data/lib/mcollective/util/playbook/data_stores.rb +201 -0
  107. data/lib/mcollective/util/playbook/data_stores/base.rb +99 -0
  108. data/lib/mcollective/util/playbook/data_stores/consul_data_store.rb +88 -0
  109. data/lib/mcollective/util/playbook/data_stores/environment_data_store.rb +33 -0
  110. data/lib/mcollective/util/playbook/data_stores/etcd_data_store.rb +42 -0
  111. data/lib/mcollective/util/playbook/data_stores/file_data_store.rb +106 -0
  112. data/lib/mcollective/util/playbook/data_stores/shell_data_store.rb +103 -0
  113. data/lib/mcollective/util/playbook/inputs.rb +265 -0
  114. data/lib/mcollective/util/playbook/nodes.rb +207 -0
  115. data/lib/mcollective/util/playbook/nodes/mcollective_nodes.rb +86 -0
  116. data/lib/mcollective/util/playbook/nodes/pql_nodes.rb +40 -0
  117. data/lib/mcollective/util/playbook/nodes/shell_nodes.rb +55 -0
  118. data/lib/mcollective/util/playbook/nodes/terraform_nodes.rb +65 -0
  119. data/lib/mcollective/util/playbook/nodes/yaml_nodes.rb +47 -0
  120. data/lib/mcollective/util/playbook/playbook_logger.rb +47 -0
  121. data/lib/mcollective/util/playbook/puppet_logger.rb +51 -0
  122. data/lib/mcollective/util/playbook/report.rb +152 -0
  123. data/lib/mcollective/util/playbook/task_result.rb +55 -0
  124. data/lib/mcollective/util/playbook/tasks.rb +196 -0
  125. data/lib/mcollective/util/playbook/tasks/base.rb +45 -0
  126. data/lib/mcollective/util/playbook/tasks/graphite_event_task.rb +64 -0
  127. data/lib/mcollective/util/playbook/tasks/mcollective_task.rb +356 -0
  128. data/lib/mcollective/util/playbook/tasks/shell_task.rb +93 -0
  129. data/lib/mcollective/util/playbook/tasks/slack_task.rb +105 -0
  130. data/lib/mcollective/util/playbook/tasks/webhook_task.rb +136 -0
  131. data/lib/mcollective/util/playbook/template_util.rb +98 -0
  132. data/lib/mcollective/util/playbook/uses.rb +169 -0
  133. data/lib/mcollective/util/tasks_support.rb +751 -0
  134. data/lib/mcollective/util/tasks_support/cli.rb +260 -0
  135. data/lib/mcollective/util/tasks_support/default_formatter.rb +138 -0
  136. data/lib/mcollective/util/tasks_support/json_formatter.rb +108 -0
  137. data/lib/mcollective/validator.rb +6 -1
  138. data/lib/mcollective/validator/bolt_task_name_validator.ddl +7 -0
  139. data/lib/mcollective/validator/bolt_task_name_validator.rb +11 -0
  140. data/lib/mcollective/validator/length_validator.rb +1 -3
  141. metadata +65 -6
  142. data/lib/mcollective/application/describe_filter.rb +0 -87
  143. data/lib/mcollective/matcher.rb +0 -220
  144. data/lib/mcollective/matcher/parser.rb +0 -128
  145. data/lib/mcollective/matcher/scanner.rb +0 -241
@@ -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
@@ -2,8 +2,7 @@ module MCollective
2
2
  # container for a message, its headers, agent, collective and other meta data
3
3
  class Message
4
4
  attr_reader :message, :request, :validated, :msgtime, :payload, :type, :expected_msgid, :reply_to
5
- attr_accessor :headers, :agent, :collective, :filter
6
- attr_accessor :requestid, :discovered_hosts, :options, :ttl
5
+ attr_accessor :headers, :agent, :collective, :filter, :requestid, :discovered_hosts, :options, :ttl
7
6
 
8
7
  VALIDTYPES = [:message, :request, :direct_request, :reply].freeze
9
8
 
@@ -79,9 +78,7 @@ module MCollective
79
78
  if type == :direct_request
80
79
  raise "Direct requests is not enabled using the direct_addressing config option" unless Config.instance.direct_addressing
81
80
 
82
- unless @discovered_hosts && !@discovered_hosts.empty?
83
- raise "Can only set type to :direct_request if discovered_hosts have been set"
84
- end
81
+ raise "Can only set type to :direct_request if discovered_hosts have been set" unless @discovered_hosts && !@discovered_hosts.empty?
85
82
 
86
83
  # clear out the filter, custom discovery sources might interpret the filters
87
84
  # different than the remote mcollectived and in directed mode really the only
@@ -109,6 +106,7 @@ module MCollective
109
106
  # at us.
110
107
  def expected_msgid=(msgid)
111
108
  raise "Can only store the expected msgid for reply messages" unless @type == :reply
109
+
112
110
  @expected_msgid = msgid
113
111
  end
114
112
 
@@ -132,7 +130,7 @@ module MCollective
132
130
 
133
131
  def description
134
132
  cid = ""
135
- cid += payload[:callerid] + "@" if payload.include?(:callerid)
133
+ cid += "#{payload[:callerid]}@" if payload.include?(:callerid)
136
134
  cid += payload[:senderid]
137
135
 
138
136
  "#{requestid} for agent '#{agent}' in collective '#{collective}' from #{cid}"
@@ -150,8 +148,6 @@ module MCollective
150
148
  @requestid = request.payload[:requestid]
151
149
  @payload = PluginManager["security_plugin"].encodereply(agent, payload, requestid, request.payload[:callerid])
152
150
  when :request, :direct_request
153
- validate_compound_filter(@filter["compound"]) unless @filter["compound"].empty?
154
-
155
151
  @requestid ||= create_reqid
156
152
  @payload = PluginManager["security_plugin"].encoderequest(Config.instance.identity, payload, requestid, filter, agent, collective, ttl)
157
153
  else
@@ -159,29 +155,6 @@ module MCollective
159
155
  end
160
156
  end
161
157
 
162
- def validate_compound_filter(compound_filter)
163
- compound_filter.each do |filter|
164
- filter.each do |statement|
165
- next unless statement["fstatement"]
166
- functionname = statement["fstatement"]["name"]
167
- pluginname = Data.pluginname(functionname)
168
- value = statement["fstatement"]["value"]
169
-
170
- ddl = DDL.new(pluginname, :data)
171
-
172
- # parses numbers and booleans entered as strings into proper
173
- # types of data so that DDL validation will pass
174
- statement["fstatement"]["params"] = Data.ddl_transform_input(ddl, statement["fstatement"]["params"])
175
-
176
- Data.ddl_validate(ddl, statement["fstatement"]["params"])
177
-
178
- unless value && Data.ddl_has_output?(ddl, value)
179
- raise(DDLValidationError, "Data plugin '%s()' does not return a '%s' value" % [functionname, value])
180
- end
181
- end
182
- end
183
- end
184
-
185
158
  def decode!
186
159
  raise "Cannot decode message type #{type}" unless [:request, :reply].include?(type)
187
160
 
@@ -194,15 +167,15 @@ module MCollective
194
167
  else
195
168
  # We're in the client, log and carry on as best we can
196
169
 
197
- # Note: mc_sender is unverified. The verified identity is in the
170
+ # NOTE: mc_sender is unverified. The verified identity is in the
198
171
  # payload we just failed to decode
199
172
  Log.warn("Failed to decode a message from '#{headers['mc_sender']}': #{e}")
200
173
  return
201
174
  end
202
175
  end
203
176
 
204
- if type == :request
205
- raise "callerid in request is not valid, surpressing reply to potentially forged request" unless PluginManager["security_plugin"].valid_callerid?(payload[:callerid])
177
+ if type == :request && !PluginManager["security_plugin"].valid_callerid?(payload[:callerid])
178
+ raise "callerid in request is not valid, surpressing reply to potentially forged request"
206
179
  end
207
180
 
208
181
  [:collective, :agent, :filter, :requestid, :ttl, :msgtime].each do |prop|
@@ -216,11 +189,7 @@ module MCollective
216
189
 
217
190
  msg_age = Time.now.utc.to_i - msgtime
218
191
 
219
- if msg_age > ttl
220
- PluginManager["global_stats"].ttlexpired
221
- raise(MsgTTLExpired, "Message #{description} created at #{msgtime} is #{msg_age} seconds old, TTL is #{ttl}. Rejecting message.")
222
- end
223
-
192
+ raise(MsgTTLExpired, "Message #{description} created at #{msgtime} is #{msg_age} seconds old, TTL is #{ttl}. Rejecting message.") if msg_age > ttl
224
193
  raise(NotTargettedAtUs, "Message #{description} does not pass filters. Ignoring message.") unless PluginManager["security_plugin"].validate_filter?(payload[:filter])
225
194
 
226
195
  @validated = true