choria-mcorpc-support 2.23.1 → 2.24.2

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.
Files changed (49) hide show
  1. checksums.yaml +5 -5
  2. data/lib/mcollective.rb +3 -2
  3. data/lib/mcollective/agent/choria_util.ddl +206 -107
  4. data/lib/mcollective/agent/choria_util.json +101 -1
  5. data/lib/mcollective/agent/rpcutil.json +2 -3
  6. data/lib/mcollective/agent/scout.json +107 -135
  7. data/lib/mcollective/application/facts.rb +2 -67
  8. data/lib/mcollective/application/find.rb +1 -1
  9. data/lib/mcollective/application/plugin.rb +2 -15
  10. data/lib/mcollective/client.rb +1 -1
  11. data/lib/mcollective/config.rb +135 -103
  12. data/lib/mcollective/ddl.rb +0 -1
  13. data/lib/mcollective/discovery.rb +11 -63
  14. data/lib/mcollective/discovery/broadcast.ddl +11 -0
  15. data/lib/mcollective/discovery/choria.ddl +6 -4
  16. data/lib/mcollective/discovery/delegate.ddl +13 -0
  17. data/lib/mcollective/discovery/delegate.rb +73 -0
  18. data/lib/mcollective/discovery/external.ddl +13 -0
  19. data/lib/mcollective/discovery/file.ddl +13 -0
  20. data/lib/mcollective/discovery/flatfile.ddl +7 -5
  21. data/lib/mcollective/discovery/inventory.ddl +13 -0
  22. data/lib/mcollective/discovery/mc.ddl +3 -3
  23. data/lib/mcollective/generators.rb +0 -1
  24. data/lib/mcollective/optionparser.rb +1 -1
  25. data/lib/mcollective/pluginpackager/forge_packager.rb +1 -1
  26. data/lib/mcollective/rpc/client.rb +4 -2
  27. data/lib/mcollective/util.rb +25 -35
  28. data/lib/mcollective/util/tasks_support.rb +15 -2
  29. metadata +9 -23
  30. data/lib/mcollective/data.rb +0 -96
  31. data/lib/mcollective/data/agent_data.ddl +0 -22
  32. data/lib/mcollective/data/agent_data.rb +0 -17
  33. data/lib/mcollective/data/base.rb +0 -68
  34. data/lib/mcollective/data/bolt_task_data.ddl +0 -90
  35. data/lib/mcollective/data/bolt_task_data.rb +0 -32
  36. data/lib/mcollective/data/collective_data.ddl +0 -20
  37. data/lib/mcollective/data/collective_data.rb +0 -9
  38. data/lib/mcollective/data/fact_data.ddl +0 -28
  39. data/lib/mcollective/data/fact_data.rb +0 -55
  40. data/lib/mcollective/data/fstat_data.ddl +0 -89
  41. data/lib/mcollective/data/fstat_data.rb +0 -54
  42. data/lib/mcollective/data/result.rb +0 -50
  43. data/lib/mcollective/ddl/dataddl.rb +0 -56
  44. data/lib/mcollective/discovery/choria.rb +0 -223
  45. data/lib/mcollective/discovery/flatfile.rb +0 -47
  46. data/lib/mcollective/discovery/stdin.ddl +0 -11
  47. data/lib/mcollective/discovery/stdin.rb +0 -67
  48. data/lib/mcollective/generators/data_generator.rb +0 -50
  49. data/lib/mcollective/generators/templates/data_input_snippet.erb +0 -7
@@ -308,8 +308,7 @@
308
308
  },
309
309
  "machines": {
310
310
  "description": "Autonomous Agents",
311
- "display_as": "Machines",
312
- "default": null
311
+ "display_as": "Machines"
313
312
  }
314
313
  },
315
314
  "display": "always",
@@ -330,4 +329,4 @@
330
329
  "description": "Responds to requests for PING with PONG"
331
330
  }
332
331
  ]
333
- }
332
+ }
@@ -1,122 +1,58 @@
1
1
  {
2
2
  "$schema": "https://choria.io/schemas/mcorpc/ddl/v1/agent.json",
3
3
  "metadata": {
4
- "name": "scout",
5
- "description": "Choria Scout Agent Management API",
6
- "author": "R.I.Pienaar <rip@devco.net>",
7
4
  "license": "Apache-2.0",
5
+ "author": "R.I.Pienaar <rip@devco.net>",
6
+ "timeout": 5,
7
+ "name": "scout",
8
8
  "version": "0.0.1",
9
9
  "url": "https://choria.io",
10
- "provider": "golang",
11
- "timeout": 5
10
+ "description": "Choria Scout Agent Management API",
11
+ "provider": "golang"
12
12
  },
13
13
  "actions": [
14
14
  {
15
15
  "action": "checks",
16
- "input": {
17
- },
16
+ "display": "ok",
17
+ "description": "Obtain a list of checks and their current status",
18
+ "input": {},
18
19
  "output": {
19
20
  "checks": {
20
21
  "description": "Details about each check",
21
- "display_as": "Checks",
22
- "default": null,
23
- "type": "array"
22
+ "type": "array",
23
+ "display_as": "Checks"
24
24
  }
25
- },
26
- "display": "ok",
27
- "description": "Obtain a list of checks and their current status"
25
+ }
28
26
  },
29
27
  {
30
- "action": "goss_validate",
28
+ "action": "resume",
31
29
  "input": {
32
- "file": {
33
- "prompt": "Goss File",
34
- "description": "Path to the Goss validation specification",
35
- "type": "string",
36
- "default": null,
37
- "optional": false,
38
- "validation": ".+",
39
- "maxlength": 256
40
- },
41
- "vars": {
42
- "prompt": "Vars File",
43
- "description": "Path to a file to use as template variables",
44
- "type": "string",
45
- "default": null,
46
- "optional": true,
47
- "validation": ".+",
48
- "maxlength": 256
30
+ "checks": {
31
+ "prompt": "Checks",
32
+ "description": "Check to resume, empty means all",
33
+ "type": "array",
34
+ "optional": true
49
35
  }
50
36
  },
51
37
  "output": {
52
- "failures": {
53
- "description": "The number of tests that failed",
54
- "display_as": "Failed Tests",
55
- "default": null,
56
- "type": "integer"
57
- },
58
- "results": {
59
- "description": "The full test results",
60
- "display_as": "Results",
61
- "default": null,
38
+ "failed": {
39
+ "description": "List of checks that could not be resumed",
40
+ "display_as": "Failed",
62
41
  "type": "array"
63
42
  },
64
- "runtime": {
65
- "description": "The time it took to run the tests, in seconds",
66
- "display_as": "Runtime",
67
- "default": null,
68
- "type": "integer"
69
- },
70
- "success": {
71
- "description": "Indicates if the test passed",
72
- "display_as": "Success",
73
- "default": null,
74
- "type": "string"
75
- },
76
- "summary": {
77
- "description": "A human friendly test result",
78
- "display_as": "Summary",
79
- "default": null,
80
- "type": "string"
43
+ "transitioned": {
44
+ "description": "List of checks that were resumed",
45
+ "display_as": "Triggered",
46
+ "type": "array"
81
47
  },
82
- "tests": {
83
- "description": "The number of tests that were run",
84
- "display_as": "Tests",
85
- "default": null,
86
- "type": "integer"
48
+ "skipped": {
49
+ "description": "List of checks that was skipped",
50
+ "display_as": "Skipped",
51
+ "type": "array"
87
52
  }
88
53
  },
89
54
  "display": "failed",
90
- "description": "Performs a Goss validation using a specific file",
91
- "aggregate": [
92
- {
93
- "function": "summary",
94
- "args": [
95
- "tests",
96
- {
97
- "format": "%s Test Cases on %d node(s)"
98
- }
99
- ]
100
- },
101
- {
102
- "function": "summary",
103
- "args": [
104
- "failures",
105
- {
106
- "format": "%s Failed Cases on %d node(s)"
107
- }
108
- ]
109
- },
110
- {
111
- "function": "summary",
112
- "args": [
113
- "success",
114
- {
115
- "format": "%s Passed Cases on %d node(s)"
116
- }
117
- ]
118
- }
119
- ]
55
+ "description": "Resume active checking of one or more checks"
120
56
  },
121
57
  {
122
58
  "action": "maintenance",
@@ -125,7 +61,6 @@
125
61
  "prompt": "Checks",
126
62
  "description": "Check to pause, empty means all",
127
63
  "type": "array",
128
- "default": null,
129
64
  "optional": true
130
65
  }
131
66
  },
@@ -133,19 +68,16 @@
133
68
  "failed": {
134
69
  "description": "List of checks that could not be paused",
135
70
  "display_as": "Failed",
136
- "default": null,
137
- "type": "array"
138
- },
139
- "skipped": {
140
- "description": "List of checks that was skipped",
141
- "display_as": "Skipped",
142
- "default": null,
143
71
  "type": "array"
144
72
  },
145
73
  "transitioned": {
146
74
  "description": "List of checks that were paused",
147
75
  "display_as": "Triggered",
148
- "default": null,
76
+ "type": "array"
77
+ },
78
+ "skipped": {
79
+ "description": "List of checks that was skipped",
80
+ "display_as": "Skipped",
149
81
  "type": "array"
150
82
  }
151
83
  },
@@ -153,38 +85,82 @@
153
85
  "description": "Pause checking of one or more checks"
154
86
  },
155
87
  {
156
- "action": "resume",
88
+ "action": "goss_validate",
89
+ "description": "Performs a Goss validation using a specific file",
90
+ "display": "failed",
91
+ "aggregate": [
92
+ {
93
+ "function": "summary",
94
+ "args": [
95
+ "tests",
96
+ {"format": "%s Tests on %d node(s)"}
97
+ ]
98
+ },
99
+ {
100
+ "function": "summary",
101
+ "args": [
102
+ "failures",
103
+ {"format": "%s Failed test on %d node(s)"}
104
+ ]
105
+ },
106
+ {
107
+ "function": "summary",
108
+ "args": [
109
+ "success",
110
+ {"format": "%s Passed tests on %d node(s)"}
111
+ ]
112
+ }
113
+ ],
157
114
  "input": {
158
- "checks": {
159
- "prompt": "Checks",
160
- "description": "Check to resume, empty means all",
161
- "type": "array",
162
- "default": null,
115
+ "file": {
116
+ "prompt": "Goss File",
117
+ "description": "Path to the Goss validation specification",
118
+ "type": "string",
119
+ "maxlength": 256,
120
+ "validation": ".+",
121
+ "optional": false
122
+ },
123
+ "vars": {
124
+ "prompt": "Vars File",
125
+ "description": "Path to a file to use as template variables",
126
+ "type": "string",
127
+ "maxlength": 256,
128
+ "validation": ".+",
163
129
  "optional": true
164
130
  }
165
131
  },
166
132
  "output": {
167
- "failed": {
168
- "description": "List of checks that could not be resumed",
169
- "display_as": "Failed",
170
- "default": null,
171
- "type": "array"
133
+ "tests": {
134
+ "description": "The number of tests that were run",
135
+ "display_as": "Tests",
136
+ "type": "integer"
172
137
  },
173
- "skipped": {
174
- "description": "List of checks that was skipped",
175
- "display_as": "Skipped",
176
- "default": null,
177
- "type": "array"
138
+ "failures": {
139
+ "description": "The number of tests that failed",
140
+ "display_as": "Failed Tests",
141
+ "type": "integer"
178
142
  },
179
- "transitioned": {
180
- "description": "List of checks that were resumed",
181
- "display_as": "Triggered",
182
- "default": null,
143
+ "runtime": {
144
+ "description": "The time it took to run the tests, in seconds",
145
+ "display_as": "Runtime",
146
+ "type": "integer"
147
+ },
148
+ "success": {
149
+ "description": "Indicates if the test passed",
150
+ "display_as": "Success",
151
+ "type": "string"
152
+ },
153
+ "summary": {
154
+ "description": "A human friendly test result",
155
+ "display_as": "Summary",
156
+ "type": "string"
157
+ },
158
+ "results": {
159
+ "description": "The full test results",
160
+ "display_as": "Results",
183
161
  "type": "array"
184
162
  }
185
- },
186
- "display": "failed",
187
- "description": "Resume active checking of one or more checks"
163
+ }
188
164
  },
189
165
  {
190
166
  "action": "trigger",
@@ -193,7 +169,6 @@
193
169
  "prompt": "Checks",
194
170
  "description": "Check to trigger, empty means all",
195
171
  "type": "array",
196
- "default": null,
197
172
  "optional": true
198
173
  }
199
174
  },
@@ -201,19 +176,16 @@
201
176
  "failed": {
202
177
  "description": "List of checks that could not be triggered",
203
178
  "display_as": "Failed",
204
- "default": null,
205
- "type": "array"
206
- },
207
- "skipped": {
208
- "description": "List of checks that was skipped",
209
- "display_as": "Skipped",
210
- "default": null,
211
179
  "type": "array"
212
180
  },
213
181
  "transitioned": {
214
182
  "description": "List of checks that were triggered",
215
183
  "display_as": "Triggered",
216
- "default": null,
184
+ "type": "array"
185
+ },
186
+ "skipped": {
187
+ "description": "List of checks that was skipped",
188
+ "display_as": "Skipped",
217
189
  "type": "array"
218
190
  }
219
191
  },
@@ -221,4 +193,4 @@
221
193
  "description": "Force an immediate check of one or more checks"
222
194
  }
223
195
  ]
224
- }
196
+ }
@@ -1,71 +1,6 @@
1
1
  class MCollective::Application::Facts < MCollective::Application # rubocop:disable Style/ClassAndModuleChildren
2
2
  description "Reports on usage for a specific fact"
3
3
 
4
- def post_option_parser(configuration)
5
- configuration[:fact] = ARGV.shift unless ARGV.empty?
6
- end
7
-
8
- def validate_configuration(configuration)
9
- raise "Please specify a fact to report for" unless configuration.include?(:fact)
10
- end
11
-
12
- def show_single_fact_report(fact, facts, verbose=false)
13
- puts("Report for fact: #{fact}\n\n")
14
-
15
- facts = stringify_facts_hash(facts)
16
-
17
- field_size = MCollective::Util.field_size(facts.keys)
18
- facts.keys.sort.each do |k|
19
- printf(" %-#{field_size}s found %d times\n", k, facts[k].size)
20
-
21
- next unless verbose
22
-
23
- puts
24
-
25
- facts[k].sort.each do |f|
26
- puts(" #{f}")
27
- end
28
-
29
- puts
30
- end
31
- end
32
-
33
- def stringify_facts_hash(facts)
34
- res = Hash.new([])
35
- facts.each { |k, v| res[k.to_s] += v }
36
- res
37
- end
38
-
39
- def main
40
- rpcutil = rpcclient("rpcutil")
41
- rpcutil.progress = false
42
-
43
- facts = {}
44
-
45
- rpcutil.get_fact(:fact => configuration[:fact]) do |resp|
46
- begin
47
- value = resp[:body][:data][:value].to_s
48
-
49
- if resp[:body][:data].include?(:value)
50
- if facts.include?(value)
51
- facts[value] << resp[:senderid]
52
- else
53
- facts[value] = [resp[:senderid]]
54
- end
55
- end
56
- rescue Exception => e # rubocop:disable Lint/RescueException
57
- warn "Could not parse facts for #{resp[:senderid]}: #{e.class}: #{e}"
58
- end
59
- end
60
-
61
- if facts.empty?
62
- puts "No values found for fact #{configuration[:fact]}\n"
63
- else
64
- show_single_fact_report(configuration[:fact], facts, options[:verbose])
65
- end
66
-
67
- printrpcstats
68
-
69
- halt rpcutil.stats
70
- end
4
+ external(:command => "choria", :args => ["facts"])
5
+ external_help(:command => "choria", :args => ["facts", "--help"])
71
6
  end
@@ -16,7 +16,7 @@ class MCollective::Application::Find < MCollective::Application # rubocop:disabl
16
16
 
17
17
  nodes.each {|c| puts c}
18
18
 
19
- warn "\nDiscovered %s nodes in %.2f seconds using the %s discovery plugin" % [nodes.size, discoverytime, mc.client.discoverer.discovery_method] if options[:verbose]
19
+ warn "\nDiscovered %s nodes in %.2f seconds using the %s discovery plugin" % [nodes.size, discoverytime, mc.client.options[:discovery_method]] if options[:verbose]
20
20
 
21
21
  !nodes.empty? ? exit(0) : exit(1)
22
22
  end
@@ -9,7 +9,6 @@ mco plugin package [options] <directory>
9
9
  mco plugin doc <plugin>
10
10
  mco plugin doc <type/plugin>
11
11
  mco plugin generate agent <pluginname> [actions=val,val]
12
- mco plugin generate data <pluginname> [outputs=val,val]
13
12
 
14
13
  info : Display plugin information including package details.
15
14
  package : Create all available plugin packages.
@@ -116,11 +115,6 @@ mco plugin package [options] <directory>
116
115
  :arguments => ["--actions [ACTIONS]"],
117
116
  :type => Array
118
117
 
119
- option :outputs,
120
- :description => "Outputs to be generated for an Data Plugin",
121
- :arguments => ["--outputs [OUTPUTS]"],
122
- :type => Array
123
-
124
118
  option :keep_artifacts,
125
119
  :description => "Don't remove artifacts after building packages",
126
120
  :arguments => ["--keep-artifacts"],
@@ -167,7 +161,7 @@ mco plugin package [options] <directory>
167
161
 
168
162
  # Generate a plugin skeleton
169
163
  def generate_command
170
- raise "undefined plugin type. cannot generate plugin. valid types are 'agent' and 'data'" if configuration["target"] == "."
164
+ raise "undefined plugin type. cannot generate plugin. valid types are 'agent'" if configuration["target"] == "."
171
165
 
172
166
  unless configuration[:pluginname]
173
167
  puts "No plugin name specified. Using 'new_plugin'"
@@ -181,12 +175,6 @@ mco plugin package [options] <directory>
181
175
  Generators::AgentGenerator.new(configuration[:pluginname], configuration[:actions], configuration[:pluginname],
182
176
  configuration[:description], configuration[:author], configuration[:license],
183
177
  configuration[:version], configuration[:url], configuration[:timeout])
184
- when "data"
185
- raise "data plugin must have at least one output" unless configuration[:outputs]
186
-
187
- Generators::DataGenerator.new(configuration[:pluginname], configuration[:outputs], configuration[:pluginname],
188
- configuration[:description], configuration[:author], configuration[:license],
189
- configuration[:version], configuration[:url], configuration[:timeout])
190
178
  else
191
179
  raise "invalid plugin type. cannot generate plugin '#{configuration[:target]}'"
192
180
  end
@@ -228,7 +216,6 @@ mco plugin package [options] <directory>
228
216
  ["Agents", :agent],
229
217
  ["Aggregate", :aggregate],
230
218
  ["Connectors", :connector],
231
- ["Data Queries", :data],
232
219
  ["Discovery Methods", :discovery],
233
220
  ["Validator Plugins", :validator]
234
221
  ]
@@ -345,7 +332,7 @@ mco plugin package [options] <directory>
345
332
  # Return the name of the type of plugin as a string
346
333
  def identify_plugin
347
334
  plugintype = Dir.glob(File.join(configuration[:target], "*")).select do |file|
348
- File.directory?(file) && file.match(/(connector|facts|registration|security|audit|pluginpackager|data|discovery|validator)/)
335
+ File.directory?(file) && file.match(/(connector|facts|registration|security|audit|pluginpackager|discovery|validator)/)
349
336
  end
350
337
 
351
338
  raise "more than one plugin type detected in directory" if plugintype.size > 1