choria-mcorpc-support 2.21.1 → 2.23.1
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 +4 -4
- data/lib/mcollective.rb +1 -2
- data/lib/mcollective/agent/bolt_tasks.ddl +253 -0
- data/lib/mcollective/agent/bolt_tasks.json +365 -0
- data/lib/mcollective/agent/bolt_tasks.rb +178 -0
- data/lib/mcollective/agent/choria_util.ddl +152 -0
- data/lib/mcollective/agent/choria_util.json +244 -0
- data/lib/mcollective/agent/rpcutil.ddl +8 -4
- data/lib/mcollective/agent/rpcutil.json +333 -0
- data/lib/mcollective/agent/scout.ddl +169 -0
- data/lib/mcollective/agent/scout.json +224 -0
- data/lib/mcollective/agents.rb +7 -6
- data/lib/mcollective/aggregate.rb +4 -4
- data/lib/mcollective/aggregate/average.rb +2 -2
- data/lib/mcollective/aggregate/base.rb +2 -2
- data/lib/mcollective/aggregate/result.rb +3 -3
- data/lib/mcollective/aggregate/result/collection_result.rb +2 -2
- data/lib/mcollective/aggregate/result/numeric_result.rb +2 -2
- data/lib/mcollective/aggregate/sum.rb +2 -2
- data/lib/mcollective/aggregate/summary.rb +3 -4
- data/lib/mcollective/application.rb +57 -21
- data/lib/mcollective/application/choria.rb +189 -0
- data/lib/mcollective/application/completion.rb +6 -6
- data/lib/mcollective/application/facts.rb +11 -11
- data/lib/mcollective/application/federation.rb +237 -0
- data/lib/mcollective/application/find.rb +4 -4
- data/lib/mcollective/application/help.rb +3 -3
- data/lib/mcollective/application/inventory.rb +3 -341
- data/lib/mcollective/application/ping.rb +5 -51
- data/lib/mcollective/application/playbook.rb +207 -0
- data/lib/mcollective/application/plugin.rb +106 -106
- data/lib/mcollective/application/rpc.rb +3 -108
- data/lib/mcollective/application/tasks.rb +425 -0
- data/lib/mcollective/applications.rb +11 -10
- data/lib/mcollective/audit/choria.rb +33 -0
- data/lib/mcollective/cache.rb +2 -4
- data/lib/mcollective/client.rb +11 -10
- data/lib/mcollective/config.rb +21 -34
- data/lib/mcollective/connector/base.rb +2 -1
- data/lib/mcollective/connector/nats.ddl +9 -0
- data/lib/mcollective/connector/nats.rb +450 -0
- data/lib/mcollective/data.rb +8 -3
- data/lib/mcollective/data/agent_data.rb +1 -1
- data/lib/mcollective/data/base.rb +6 -5
- data/lib/mcollective/data/bolt_task_data.ddl +90 -0
- data/lib/mcollective/data/bolt_task_data.rb +32 -0
- data/lib/mcollective/data/collective_data.rb +1 -1
- data/lib/mcollective/data/fact_data.rb +6 -6
- data/lib/mcollective/data/fstat_data.rb +2 -4
- data/lib/mcollective/data/result.rb +7 -2
- data/lib/mcollective/ddl/agentddl.rb +5 -17
- data/lib/mcollective/ddl/base.rb +10 -13
- data/lib/mcollective/discovery.rb +24 -39
- data/lib/mcollective/discovery/choria.ddl +11 -0
- data/lib/mcollective/discovery/choria.rb +223 -0
- data/lib/mcollective/discovery/flatfile.rb +7 -8
- data/lib/mcollective/discovery/mc.rb +2 -2
- data/lib/mcollective/discovery/stdin.rb +17 -18
- data/lib/mcollective/exceptions.rb +13 -0
- data/lib/mcollective/facts/base.rb +9 -9
- data/lib/mcollective/facts/yaml_facts.rb +12 -12
- data/lib/mcollective/generators.rb +3 -3
- data/lib/mcollective/generators/agent_generator.rb +3 -4
- data/lib/mcollective/generators/base.rb +14 -15
- data/lib/mcollective/generators/data_generator.rb +5 -6
- data/lib/mcollective/log.rb +2 -2
- data/lib/mcollective/logger/base.rb +3 -2
- data/lib/mcollective/logger/console_logger.rb +10 -10
- data/lib/mcollective/logger/file_logger.rb +7 -7
- data/lib/mcollective/logger/syslog_logger.rb +11 -15
- data/lib/mcollective/message.rb +8 -39
- data/lib/mcollective/monkey_patches.rb +2 -4
- data/lib/mcollective/optionparser.rb +2 -1
- data/lib/mcollective/pluginmanager.rb +3 -5
- data/lib/mcollective/pluginpackager.rb +1 -3
- data/lib/mcollective/pluginpackager/agent_definition.rb +3 -8
- data/lib/mcollective/pluginpackager/forge_packager.rb +7 -9
- data/lib/mcollective/pluginpackager/standard_definition.rb +1 -2
- data/lib/mcollective/registration/base.rb +18 -16
- data/lib/mcollective/rpc.rb +2 -4
- data/lib/mcollective/rpc/actionrunner.rb +16 -18
- data/lib/mcollective/rpc/agent.rb +26 -43
- data/lib/mcollective/rpc/audit.rb +1 -0
- data/lib/mcollective/rpc/client.rb +67 -85
- data/lib/mcollective/rpc/helpers.rb +55 -62
- data/lib/mcollective/rpc/progress.rb +2 -2
- data/lib/mcollective/rpc/reply.rb +17 -19
- data/lib/mcollective/rpc/request.rb +7 -5
- data/lib/mcollective/rpc/result.rb +6 -8
- data/lib/mcollective/rpc/stats.rb +49 -58
- data/lib/mcollective/security/base.rb +13 -56
- data/lib/mcollective/security/choria.rb +765 -0
- data/lib/mcollective/shell.rb +9 -4
- data/lib/mcollective/signer/base.rb +28 -0
- data/lib/mcollective/signer/choria.rb +185 -0
- data/lib/mcollective/ssl.rb +8 -6
- data/lib/mcollective/util.rb +58 -55
- data/lib/mcollective/util/bolt_support.rb +176 -0
- data/lib/mcollective/util/bolt_support/plan_runner.rb +167 -0
- data/lib/mcollective/util/bolt_support/task_result.rb +94 -0
- data/lib/mcollective/util/bolt_support/task_results.rb +128 -0
- data/lib/mcollective/util/choria.rb +946 -0
- data/lib/mcollective/util/indifferent_hash.rb +12 -0
- data/lib/mcollective/util/natswrapper.rb +242 -0
- data/lib/mcollective/util/playbook.rb +435 -0
- data/lib/mcollective/util/playbook/data_stores.rb +201 -0
- data/lib/mcollective/util/playbook/data_stores/base.rb +99 -0
- data/lib/mcollective/util/playbook/data_stores/consul_data_store.rb +88 -0
- data/lib/mcollective/util/playbook/data_stores/environment_data_store.rb +33 -0
- data/lib/mcollective/util/playbook/data_stores/etcd_data_store.rb +42 -0
- data/lib/mcollective/util/playbook/data_stores/file_data_store.rb +106 -0
- data/lib/mcollective/util/playbook/data_stores/shell_data_store.rb +103 -0
- data/lib/mcollective/util/playbook/inputs.rb +265 -0
- data/lib/mcollective/util/playbook/nodes.rb +207 -0
- data/lib/mcollective/util/playbook/nodes/mcollective_nodes.rb +86 -0
- data/lib/mcollective/util/playbook/nodes/pql_nodes.rb +40 -0
- data/lib/mcollective/util/playbook/nodes/shell_nodes.rb +55 -0
- data/lib/mcollective/util/playbook/nodes/terraform_nodes.rb +65 -0
- data/lib/mcollective/util/playbook/nodes/yaml_nodes.rb +47 -0
- data/lib/mcollective/util/playbook/playbook_logger.rb +47 -0
- data/lib/mcollective/util/playbook/puppet_logger.rb +51 -0
- data/lib/mcollective/util/playbook/report.rb +152 -0
- data/lib/mcollective/util/playbook/task_result.rb +55 -0
- data/lib/mcollective/util/playbook/tasks.rb +196 -0
- data/lib/mcollective/util/playbook/tasks/base.rb +45 -0
- data/lib/mcollective/util/playbook/tasks/graphite_event_task.rb +64 -0
- data/lib/mcollective/util/playbook/tasks/mcollective_task.rb +356 -0
- data/lib/mcollective/util/playbook/tasks/shell_task.rb +93 -0
- data/lib/mcollective/util/playbook/tasks/slack_task.rb +105 -0
- data/lib/mcollective/util/playbook/tasks/webhook_task.rb +136 -0
- data/lib/mcollective/util/playbook/template_util.rb +98 -0
- data/lib/mcollective/util/playbook/uses.rb +169 -0
- data/lib/mcollective/util/tasks_support.rb +751 -0
- data/lib/mcollective/util/tasks_support/cli.rb +260 -0
- data/lib/mcollective/util/tasks_support/default_formatter.rb +138 -0
- data/lib/mcollective/util/tasks_support/json_formatter.rb +108 -0
- data/lib/mcollective/validator.rb +6 -1
- data/lib/mcollective/validator/bolt_task_name_validator.ddl +7 -0
- data/lib/mcollective/validator/bolt_task_name_validator.rb +11 -0
- data/lib/mcollective/validator/length_validator.rb +1 -3
- metadata +65 -6
- data/lib/mcollective/application/describe_filter.rb +0 -87
- data/lib/mcollective/matcher.rb +0 -220
- data/lib/mcollective/matcher/parser.rb +0 -128
- data/lib/mcollective/matcher/scanner.rb +0 -241
data/lib/mcollective/data.rb
CHANGED
|
@@ -28,12 +28,16 @@ module MCollective
|
|
|
28
28
|
end
|
|
29
29
|
|
|
30
30
|
# Data.package("httpd").architecture
|
|
31
|
-
def self.method_missing(method, *args)
|
|
31
|
+
def self.method_missing(method, *args)
|
|
32
32
|
super unless PluginManager.include?(pluginname(method))
|
|
33
33
|
|
|
34
34
|
PluginManager[pluginname(method)].lookup(args.first)
|
|
35
35
|
end
|
|
36
36
|
|
|
37
|
+
def self.respond_to_missing?(method, *)
|
|
38
|
+
PluginManager.include?(pluginname(method)) || super
|
|
39
|
+
end
|
|
40
|
+
|
|
37
41
|
def self.ddl(plugin)
|
|
38
42
|
DDL.new(pluginname(plugin), :data)
|
|
39
43
|
end
|
|
@@ -55,7 +59,8 @@ module MCollective
|
|
|
55
59
|
ddl.validate_input_argument(input, :query, argument)
|
|
56
60
|
else
|
|
57
61
|
raise("No data plugin argument was declared in the %s DDL but an input was supplied" % name) if argument
|
|
58
|
-
|
|
62
|
+
|
|
63
|
+
true
|
|
59
64
|
end
|
|
60
65
|
end
|
|
61
66
|
|
|
@@ -82,7 +87,7 @@ module MCollective
|
|
|
82
87
|
when :number, :integer, :float
|
|
83
88
|
return DDL.string_to_number(input)
|
|
84
89
|
end
|
|
85
|
-
rescue # rubocop:disable Lint/
|
|
90
|
+
rescue # rubocop:disable Lint/SuppressedException
|
|
86
91
|
end
|
|
87
92
|
|
|
88
93
|
input
|
|
@@ -8,6 +8,7 @@ module MCollective
|
|
|
8
8
|
type = klass.to_s.split("::").last.downcase
|
|
9
9
|
|
|
10
10
|
PluginManager << {:type => type, :class => klass.to_s, :single_instance => false}
|
|
11
|
+
super
|
|
11
12
|
end
|
|
12
13
|
|
|
13
14
|
def initialize
|
|
@@ -22,9 +23,9 @@ module MCollective
|
|
|
22
23
|
def lookup(what)
|
|
23
24
|
ddl_validate(what)
|
|
24
25
|
|
|
25
|
-
Log.debug("Doing data query %s for '%s'" % [
|
|
26
|
+
Log.debug("Doing data query %s for '%s'" % [@name, what])
|
|
26
27
|
|
|
27
|
-
Timeout
|
|
28
|
+
Timeout.timeout(@timeout) do
|
|
28
29
|
query_data(what)
|
|
29
30
|
end
|
|
30
31
|
|
|
@@ -40,7 +41,7 @@ module MCollective
|
|
|
40
41
|
end
|
|
41
42
|
|
|
42
43
|
def self.query(&block)
|
|
43
|
-
|
|
44
|
+
module_eval { define_method("query_data", &block) }
|
|
44
45
|
end
|
|
45
46
|
|
|
46
47
|
def ddl_validate(what)
|
|
@@ -58,10 +59,10 @@ module MCollective
|
|
|
58
59
|
|
|
59
60
|
# Always be active unless a specific block is given with activate_when
|
|
60
61
|
def self.activate?
|
|
61
|
-
|
|
62
|
+
true
|
|
62
63
|
end
|
|
63
64
|
|
|
64
|
-
def startup_hook;end
|
|
65
|
+
def startup_hook; end
|
|
65
66
|
end
|
|
66
67
|
end
|
|
67
68
|
end
|
|
@@ -0,0 +1,90 @@
|
|
|
1
|
+
metadata :name => "bolt_task",
|
|
2
|
+
:description => "Information about past Bolt Task",
|
|
3
|
+
:author => "R.I.Pienaar <rip@devco.net>",
|
|
4
|
+
:license => "Apache-2.0",
|
|
5
|
+
:version => "0.19.0",
|
|
6
|
+
:url => "https://choria.io",
|
|
7
|
+
:timeout => 1
|
|
8
|
+
|
|
9
|
+
usage <<-EOU
|
|
10
|
+
This data plugin let you extract information about a previously
|
|
11
|
+
run Bolt Task for use in discovery and elsewhere.
|
|
12
|
+
|
|
13
|
+
To run a task on nodes where one previously failed:
|
|
14
|
+
|
|
15
|
+
mco tasks run myapp::update -S "bolt_task('ae561842dc7d5a9dae94f766dfb3d4c8').exitcode > 0"
|
|
16
|
+
EOU
|
|
17
|
+
|
|
18
|
+
dataquery :description => "Puppet Bolt Task state" do
|
|
19
|
+
input :query,
|
|
20
|
+
:prompt => "Task ID",
|
|
21
|
+
:description => "The Task ID to retrieve",
|
|
22
|
+
:type => :string,
|
|
23
|
+
:validation => '^[a-z,0-9]{32}$',
|
|
24
|
+
:maxlength => 32
|
|
25
|
+
|
|
26
|
+
output :known,
|
|
27
|
+
:description => "If this is a known task on this node",
|
|
28
|
+
:display_as => "Known Task",
|
|
29
|
+
:default => false
|
|
30
|
+
|
|
31
|
+
output :spool,
|
|
32
|
+
:description => "Where on disk the task status is stored",
|
|
33
|
+
:display_as => "Spool",
|
|
34
|
+
:default => ""
|
|
35
|
+
|
|
36
|
+
output :task,
|
|
37
|
+
:description => "The name of the task that was run",
|
|
38
|
+
:display_as => "Task",
|
|
39
|
+
:default => ""
|
|
40
|
+
|
|
41
|
+
output :caller,
|
|
42
|
+
:description => "The user who invoked the task",
|
|
43
|
+
:display_as => "Invoked by",
|
|
44
|
+
:default => ""
|
|
45
|
+
|
|
46
|
+
output :stdout,
|
|
47
|
+
:description => "The STDOUT output from the task",
|
|
48
|
+
:display_as => "STDOUT",
|
|
49
|
+
:default => ""
|
|
50
|
+
|
|
51
|
+
output :stderr,
|
|
52
|
+
:description => "The STDERR output from the task",
|
|
53
|
+
:display_as => "STDERR",
|
|
54
|
+
:default => ""
|
|
55
|
+
|
|
56
|
+
output :exitcode,
|
|
57
|
+
:description => "The exitcode from the task",
|
|
58
|
+
:display_as => "Exit Code",
|
|
59
|
+
:default => 127
|
|
60
|
+
|
|
61
|
+
output :runtime,
|
|
62
|
+
:description => "How long the task took to run",
|
|
63
|
+
:display_as => "Runtime",
|
|
64
|
+
:default => 0.0
|
|
65
|
+
|
|
66
|
+
output :start_time,
|
|
67
|
+
:description => "When the task was started, seconds since 1970 in UTC time",
|
|
68
|
+
:display_as => "Start Time",
|
|
69
|
+
:default => 0
|
|
70
|
+
|
|
71
|
+
output :wrapper_spawned,
|
|
72
|
+
:description => "Did the wrapper start successfully",
|
|
73
|
+
:display_as => "Wrapper Spawned",
|
|
74
|
+
:default => false
|
|
75
|
+
|
|
76
|
+
output :wrapper_error,
|
|
77
|
+
:description => "Error output from the wrapper command",
|
|
78
|
+
:display_as => "Wrapper Error",
|
|
79
|
+
:default => ""
|
|
80
|
+
|
|
81
|
+
output :wrapper_pid,
|
|
82
|
+
:description => "The PID of the wrapper that runs the task",
|
|
83
|
+
:display_as => "Wrapper PID",
|
|
84
|
+
:default => -1
|
|
85
|
+
|
|
86
|
+
output :completed,
|
|
87
|
+
:description => "Did the task complete running",
|
|
88
|
+
:display_as => "Completed",
|
|
89
|
+
:default => false
|
|
90
|
+
end
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
module MCollective
|
|
2
|
+
module Data
|
|
3
|
+
class Bolt_task_data < Base
|
|
4
|
+
activate_when do
|
|
5
|
+
Util::Choria.new.tasks_support.tasks_compatible?
|
|
6
|
+
end
|
|
7
|
+
|
|
8
|
+
query do |taskid|
|
|
9
|
+
tasks = Util::Choria.new.tasks_support
|
|
10
|
+
|
|
11
|
+
begin
|
|
12
|
+
status = tasks.task_status(taskid)
|
|
13
|
+
|
|
14
|
+
result[:known] = true
|
|
15
|
+
|
|
16
|
+
if status["task"]
|
|
17
|
+
tasks.task_status(taskid).each do |item, value|
|
|
18
|
+
value = value.utc.to_i if value.is_a?(Time)
|
|
19
|
+
value = value.to_json if value.is_a?(Hash)
|
|
20
|
+
|
|
21
|
+
result[item.intern] = value
|
|
22
|
+
end
|
|
23
|
+
|
|
24
|
+
result[:start_time] = result[:start_time].to_i
|
|
25
|
+
end
|
|
26
|
+
rescue
|
|
27
|
+
Log.debug("Task %s was not found, returning default data. Error was: %s" % [taskid, $!.to_s])
|
|
28
|
+
end
|
|
29
|
+
end
|
|
30
|
+
end
|
|
31
|
+
end
|
|
32
|
+
end
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
module MCollective
|
|
2
2
|
module Data
|
|
3
|
-
class Fact_data<Base
|
|
3
|
+
class Fact_data < Base
|
|
4
4
|
query do |path|
|
|
5
|
-
parts = path.split
|
|
5
|
+
parts = path.split(/\./)
|
|
6
6
|
walk_path(parts)
|
|
7
7
|
end
|
|
8
8
|
|
|
@@ -14,7 +14,7 @@ module MCollective
|
|
|
14
14
|
result[:value] = false
|
|
15
15
|
result[:value_encoding] = false
|
|
16
16
|
|
|
17
|
-
facts = PluginManager[
|
|
17
|
+
facts = PluginManager["facts_plugin"].get_facts
|
|
18
18
|
|
|
19
19
|
path.each do |level|
|
|
20
20
|
case facts
|
|
@@ -25,7 +25,7 @@ module MCollective
|
|
|
25
25
|
return
|
|
26
26
|
end
|
|
27
27
|
when Hash
|
|
28
|
-
|
|
28
|
+
unless facts.include?(level)
|
|
29
29
|
# we don't have the key for the next level, so give up
|
|
30
30
|
return
|
|
31
31
|
end
|
|
@@ -44,10 +44,10 @@ module MCollective
|
|
|
44
44
|
# this is fixed flatten the data with json and flag that we have
|
|
45
45
|
# munged the data
|
|
46
46
|
result[:value] = facts.to_json
|
|
47
|
-
result[:value_encoding] =
|
|
47
|
+
result[:value_encoding] = "application/json"
|
|
48
48
|
else
|
|
49
49
|
result[:value] = facts
|
|
50
|
-
result[:value_encoding] =
|
|
50
|
+
result[:value_encoding] = "text/plain"
|
|
51
51
|
end
|
|
52
52
|
end
|
|
53
53
|
end
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
module MCollective
|
|
2
2
|
module Data
|
|
3
|
-
class Fstat_data<Base
|
|
3
|
+
class Fstat_data < Base
|
|
4
4
|
query do |file|
|
|
5
5
|
result[:name] = file
|
|
6
6
|
result[:output] = "not present"
|
|
@@ -18,8 +18,7 @@ module MCollective
|
|
|
18
18
|
result[:uid] = 0
|
|
19
19
|
result[:gid] = 0
|
|
20
20
|
|
|
21
|
-
|
|
22
|
-
if File.exists?(file)
|
|
21
|
+
if File.exist?(file)
|
|
23
22
|
result[:output] = "present"
|
|
24
23
|
result[:present] = 1
|
|
25
24
|
|
|
@@ -53,4 +52,3 @@ module MCollective
|
|
|
53
52
|
end
|
|
54
53
|
end
|
|
55
54
|
end
|
|
56
|
-
|
|
@@ -9,7 +9,7 @@ module MCollective
|
|
|
9
9
|
def initialize(outputs)
|
|
10
10
|
@data = {}
|
|
11
11
|
|
|
12
|
-
outputs.
|
|
12
|
+
outputs.each_key do |output|
|
|
13
13
|
@data[output] = Marshal.load(Marshal.dump(outputs[output].fetch(:default, nil)))
|
|
14
14
|
end
|
|
15
15
|
end
|
|
@@ -24,7 +24,8 @@ module MCollective
|
|
|
24
24
|
|
|
25
25
|
def []=(key, val)
|
|
26
26
|
# checks using the string representation of the class name to avoid deprecations on Bignum and Fixnum
|
|
27
|
-
raise "Can only store String, Integer, Float or Boolean data but got #{val.class} for key #{key}" unless ["String", "Integer", "Bignum", "Fixnum", "Float", "TrueClass",
|
|
27
|
+
raise "Can only store String, Integer, Float or Boolean data but got #{val.class} for key #{key}" unless ["String", "Integer", "Bignum", "Fixnum", "Float", "TrueClass",
|
|
28
|
+
"FalseClass"].include?(val.class.to_s)
|
|
28
29
|
|
|
29
30
|
@data[key.to_sym] = val
|
|
30
31
|
end
|
|
@@ -33,6 +34,10 @@ module MCollective
|
|
|
33
34
|
@data.keys
|
|
34
35
|
end
|
|
35
36
|
|
|
37
|
+
def respond_to_missing?(method, *)
|
|
38
|
+
include?(method)
|
|
39
|
+
end
|
|
40
|
+
|
|
36
41
|
def method_missing(method, *args)
|
|
37
42
|
key = method.to_sym
|
|
38
43
|
|
|
@@ -87,14 +87,10 @@ module MCollective
|
|
|
87
87
|
# Sets the display preference to either :ok, :failed, :flatten or :always
|
|
88
88
|
# operates on action level
|
|
89
89
|
def display(pref)
|
|
90
|
-
if pref == :flatten
|
|
91
|
-
Log.warn("The display option :flatten is being deprecated and will be removed in the next minor release.")
|
|
92
|
-
end
|
|
90
|
+
Log.warn("The display option :flatten is being deprecated and will be removed in the next minor release.") if pref == :flatten
|
|
93
91
|
|
|
94
92
|
# defaults to old behavior, complain if its supplied and invalid
|
|
95
|
-
unless [:ok, :failed, :flatten, :always].include?(pref)
|
|
96
|
-
raise "Display preference #{pref} is not valid, should be :ok, :failed, :flatten or :always"
|
|
97
|
-
end
|
|
93
|
+
raise "Display preference #{pref} is not valid, should be :ok, :failed, :flatten or :always" unless [:ok, :failed, :flatten, :always].include?(pref)
|
|
98
94
|
|
|
99
95
|
action = @current_entity
|
|
100
96
|
@entities[action][:display] = pref
|
|
@@ -223,23 +219,15 @@ module MCollective
|
|
|
223
219
|
# agent should be allowed based on action name and inputs.
|
|
224
220
|
def validate_rpc_request(action, arguments)
|
|
225
221
|
# is the action known?
|
|
226
|
-
unless actions.include?(action)
|
|
227
|
-
raise DDLValidationError, "Attempted to call action #{action} for #{@pluginname} but it's not declared in the DDL"
|
|
228
|
-
end
|
|
222
|
+
raise DDLValidationError, "Attempted to call action #{action} for #{@pluginname} but it's not declared in the DDL" unless actions.include?(action)
|
|
229
223
|
|
|
230
224
|
input = action_interface(action)[:input] || {}
|
|
231
225
|
compatible_args = symbolize_basic_input_arguments(input, arguments)
|
|
232
226
|
|
|
233
227
|
input.each_key do |key|
|
|
234
|
-
|
|
235
|
-
unless compatible_args.include?(key)
|
|
236
|
-
raise DDLValidationError, "Action #{action} needs a #{key} argument"
|
|
237
|
-
end
|
|
238
|
-
end
|
|
228
|
+
raise DDLValidationError, "Action #{action} needs a #{key} argument" if !input[key][:optional] && !compatible_args.include?(key)
|
|
239
229
|
|
|
240
|
-
if compatible_args.include?(key)
|
|
241
|
-
validate_input_argument(input, key, compatible_args[key])
|
|
242
|
-
end
|
|
230
|
+
validate_input_argument(input, key, compatible_args[key]) if compatible_args.include?(key)
|
|
243
231
|
end
|
|
244
232
|
|
|
245
233
|
true
|
data/lib/mcollective/ddl/base.rb
CHANGED
|
@@ -64,6 +64,7 @@ module MCollective
|
|
|
64
64
|
def usage(usage_text)
|
|
65
65
|
@usage = usage_text
|
|
66
66
|
end
|
|
67
|
+
# rubocop:enable Lint/DuplicateMethods, Style/TrivialAccessors
|
|
67
68
|
|
|
68
69
|
def template_for_plugintype
|
|
69
70
|
case @plugintype
|
|
@@ -80,9 +81,7 @@ module MCollective
|
|
|
80
81
|
end
|
|
81
82
|
|
|
82
83
|
def loadddlfile
|
|
83
|
-
if @config.mode == :client && !client_activated?
|
|
84
|
-
raise("%s/%s is disabled, cannot load DDL file" % [@plugintype, @pluginname])
|
|
85
|
-
end
|
|
84
|
+
raise("%s/%s is disabled, cannot load DDL file" % [@plugintype, @pluginname]) if @config.mode == :client && !client_activated?
|
|
86
85
|
|
|
87
86
|
if ddlfile = findddlfile
|
|
88
87
|
instance_eval(File.read(ddlfile), ddlfile, 1)
|
|
@@ -111,10 +110,10 @@ module MCollective
|
|
|
111
110
|
end
|
|
112
111
|
|
|
113
112
|
def validate_requirements
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
113
|
+
requirement = @requirements[:mcollective]
|
|
114
|
+
|
|
115
|
+
if requirement && (Util.versioncmp(Util.mcollective_version, requirement) < 0)
|
|
116
|
+
raise DDLValidationError, "%s plugin '%s' requires MCollective version %s or newer" % [@plugintype.to_s.capitalize, @pluginname, requirement]
|
|
118
117
|
end
|
|
119
118
|
|
|
120
119
|
true
|
|
@@ -147,7 +146,7 @@ module MCollective
|
|
|
147
146
|
Validator.validate(argument, input[key][:type])
|
|
148
147
|
end
|
|
149
148
|
|
|
150
|
-
|
|
149
|
+
true
|
|
151
150
|
rescue => e
|
|
152
151
|
raise DDLValidationError, "Cannot validate input %s: %s" % [key, e.to_s], e.backtrace
|
|
153
152
|
end
|
|
@@ -196,8 +195,8 @@ module MCollective
|
|
|
196
195
|
action = @current_entity
|
|
197
196
|
|
|
198
197
|
@entities[action][:output][argument] = {:description => properties[:description],
|
|
199
|
-
:display_as
|
|
200
|
-
:default
|
|
198
|
+
:display_as => properties[:display_as],
|
|
199
|
+
:default => properties[:default]}
|
|
201
200
|
|
|
202
201
|
@entities[action][:output][argument][:type] = properties[:type] if properties[:type]
|
|
203
202
|
end
|
|
@@ -208,9 +207,7 @@ module MCollective
|
|
|
208
207
|
valid_requirements = [:mcollective]
|
|
209
208
|
|
|
210
209
|
requirement.each_key do |key|
|
|
211
|
-
unless valid_requirements.include?(key)
|
|
212
|
-
raise "Requirement %s is not a valid requirement, only %s is supported" % [key, valid_requirements.join(", ")]
|
|
213
|
-
end
|
|
210
|
+
raise "Requirement %s is not a valid requirement, only %s is supported" % [key, valid_requirements.join(", ")] unless valid_requirements.include?(key)
|
|
214
211
|
|
|
215
212
|
@requirements[key] = requirement[key]
|
|
216
213
|
end
|
|
@@ -29,9 +29,7 @@ module MCollective
|
|
|
29
29
|
|
|
30
30
|
raise "Unknown discovery method %s" % method unless has_method?(method)
|
|
31
31
|
|
|
32
|
-
|
|
33
|
-
raise "Custom discovery methods require direct addressing mode" unless Config.instance.direct_addressing
|
|
34
|
-
end
|
|
32
|
+
raise "Custom discovery methods require direct addressing mode" if method != "mc" && !Config.instance.direct_addressing
|
|
35
33
|
|
|
36
34
|
method
|
|
37
35
|
end
|
|
@@ -49,9 +47,7 @@ module MCollective
|
|
|
49
47
|
|
|
50
48
|
# if the discovery method got changed we might have an old DDL cached
|
|
51
49
|
# this will detect that and reread the correct DDL from disk
|
|
52
|
-
unless @ddl.meta[:name] == discovery_method
|
|
53
|
-
@ddl = DDL.new(discovery_method, :discovery)
|
|
54
|
-
end
|
|
50
|
+
@ddl = DDL.new(discovery_method, :discovery) unless @ddl.meta[:name] == discovery_method
|
|
55
51
|
|
|
56
52
|
@ddl
|
|
57
53
|
end
|
|
@@ -62,32 +58,22 @@ module MCollective
|
|
|
62
58
|
def check_capabilities(filter)
|
|
63
59
|
capabilities = ddl.discovery_interface[:capabilities]
|
|
64
60
|
|
|
65
|
-
|
|
66
|
-
raise "Cannot use class filters while using the '%s' discovery method" % discovery_method unless filter["cf_class"].empty?
|
|
67
|
-
end
|
|
61
|
+
raise "Cannot use class filters while using the '%s' discovery method" % discovery_method if !capabilities.include?(:classes) && !filter["cf_class"].empty?
|
|
68
62
|
|
|
69
|
-
|
|
70
|
-
raise "Cannot use fact filters while using the '%s' discovery method" % discovery_method unless filter["fact"].empty?
|
|
71
|
-
end
|
|
63
|
+
raise "Cannot use fact filters while using the '%s' discovery method" % discovery_method if !capabilities.include?(:facts) && !filter["fact"].empty?
|
|
72
64
|
|
|
73
|
-
|
|
74
|
-
raise "Cannot use identity filters while using the '%s' discovery method" % discovery_method unless filter["identity"].empty?
|
|
75
|
-
end
|
|
65
|
+
raise "Cannot use identity filters while using the '%s' discovery method" % discovery_method if !capabilities.include?(:identity) && !filter["identity"].empty?
|
|
76
66
|
|
|
77
|
-
|
|
78
|
-
raise "Cannot use compound filters while using the '%s' discovery method" % discovery_method unless filter["compound"].empty?
|
|
79
|
-
end
|
|
67
|
+
raise "Cannot use compound filters while using the '%s' discovery method" % discovery_method if !capabilities.include?(:compound) && !filter["compound"].empty?
|
|
80
68
|
end
|
|
81
69
|
|
|
82
70
|
# checks if compound filters are used and then forces the 'mc' discovery plugin
|
|
83
71
|
def force_discovery_method_by_filter(filter)
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
@client.options[:discovery_method] = "mc"
|
|
72
|
+
if discovery_method != "mc" && !filter["compound"].empty?
|
|
73
|
+
Log.info "Switching to mc discovery method because compound filters are used"
|
|
74
|
+
@client.options[:discovery_method] = "mc"
|
|
88
75
|
|
|
89
|
-
|
|
90
|
-
end
|
|
76
|
+
return true
|
|
91
77
|
end
|
|
92
78
|
|
|
93
79
|
false
|
|
@@ -99,19 +85,18 @@ module MCollective
|
|
|
99
85
|
def timeout_for_compound_filter(compound_filter)
|
|
100
86
|
return 0 if compound_filter.nil? || compound_filter.empty?
|
|
101
87
|
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
timeout
|
|
88
|
+
# disabled while bringing in new compound filters
|
|
89
|
+
# compound_filter.each do |filter|
|
|
90
|
+
# filter.each do |statement|
|
|
91
|
+
# next unless statement["fstatement"]
|
|
92
|
+
#
|
|
93
|
+
# pluginname = Data.pluginname(statement["fstatement"]["name"])
|
|
94
|
+
# ddl = DDL.new(pluginname, :data)
|
|
95
|
+
# timeout += ddl.meta[:timeout]
|
|
96
|
+
# end
|
|
97
|
+
# end
|
|
98
|
+
|
|
99
|
+
0
|
|
115
100
|
end
|
|
116
101
|
|
|
117
102
|
def discovery_timeout(timeout, filter)
|
|
@@ -134,9 +119,9 @@ module MCollective
|
|
|
134
119
|
discovered = discovery_class.discover(filter, discovery_timeout(timeout, filter), limit, @client)
|
|
135
120
|
|
|
136
121
|
if limit > 0
|
|
137
|
-
|
|
122
|
+
discovered[0, limit]
|
|
138
123
|
else
|
|
139
|
-
|
|
124
|
+
discovered
|
|
140
125
|
end
|
|
141
126
|
end
|
|
142
127
|
end
|