cc9f31ce5697cf64a8e2ca039c01e5442e579e9e
[packages/precise/mcollective.git] / website / releasenotes.md
1 ---
2 layout: default
3 title: Release Notes
4 toc: false
5 ---
6
7 This is a list of release notes for various releases, you should review these
8 before upgrading as any potential problems and backward incompatible changes
9 will be highlighted here.
10
11 <a name="2_3_1">&nbsp;</a>
12
13 ## 2.3.1 - 2013/02/14
14
15 This is the second release in the new development series of MCollective.  This
16 release features enhancements and bug fixes.
17
18 This release is for early adopters, production users should consider the 2.2.x
19 series.
20
21 ### New Features and Improvements
22
23  * Initial work towards online help, improved logging and internationalization
24  * The output from *--help* has been made clearer
25  * The output of a failed reply in the default *printrpc* method has been improved
26
27 ### Bug Fixes
28
29  * The vendored JSON gem was updated to version 1.5.5 due to CVE-2013-0269
30  * The RPC client inadvertently lost the ability to set discovery_timeout, this has been restored
31  * Plugins with underscores in their name were not packagable on Debian, we now change underscores to dashes
32  * The STOMP connector will not be maintained further and has been removed
33  * A config file reading race condition were fixed, we no longer attempt to use config details before parsing the config file thus always using defaults.
34  * Dependencies on packaged plugins have been made more specific to ensure updates work correctly
35  * When an argument to the rpc application fails to parse the command will fail instead of continue with unexpected side effects
36  * Processing of *--no-response* was broken in 2.3.0, this has been fixed
37
38 ### Removed Functionality
39
40  * The STOMP adapter has been deprecated and removed
41
42 ### Online Help and Internationalization
43
44 Starting in this release a number of errors and messages will start showing error codes along
45 with the error text and we have a method for obtaining detailed information about each coded
46 message.
47
48 An example log line can be seen here:
49
50 {% highlight console %}
51 puppetd.rb:26 PLMC34: setting meta data in agents have been deprecated, DDL files are now being used for this information. Please update the 'puppetd.rb' agent
52 {% endhighlight %}
53
54 And an example CLI error string:
55
56 {% highlight console %}
57 % mco rpc rpcutil get_fact
58
59 The rpc application failed to run: PLMC30: Action 'get_fact' needs a 'fact' argument
60
61 Use the 'mco doc PLMC30' command for details about this error, use -v for full error backtrace details
62 {% endhighlight %}
63
64 You can now use the *mco doc PLMC30* command to get additional information about this error
65 and any other error code you might see.
66
67 Only a small number of errors and log lines have been updated for the new system and
68 we will soon publish web versions of these help documents too which should help when
69 searching for resolution to common errors.
70
71 ### Backwards Compatibility and Upgrading
72
73 The STOMP connector has been removed, if you are using it please move to the RabbitMQ
74 or ActiveMQ one before upgrading.  Especially if you use Debian which would avoid the
75 package upgrading from failing
76
77 ### Changes since 2.3.0
78
79 |Date|Description|Ticket|
80 |----|-----------|------|
81 |*2013/02/14*|*Release 2.3.1*|19265|
82 |2013/02/14|Initial work towards internationalization and online help|18663|
83 |2013/02/14|Update vendored JSON gem for CVE-2013-0269|19265|
84 |2013/02/13|Restore the ability to set a discovery timeout on a RPC client|19238|
85 |2013/02/12|Replace underscores in plugin names with dashes to keep Debian happy|19200|
86 |2013/02/12|Fix package building on certain Debian systems|19141|
87 |2013/02/12|Remove the stomp connector|19146|
88 |2013/02/07|Read the client config before trying to use any configuration options|19105|
89 |2013/01/22|When an argument fails to parse in the rpc application fail rather than continue with unintended consequences|18773|
90 |2013/01/22|The fix the *--no-response* argument to the rpc application that broke due to 18438|18513|
91 |2013/01/22|Set *=* dependencies on the various packages that form a plugin rather than *>=*|18758|
92 |2013/01/21|Improve presentation of the --help output for applications|18447|
93 |2013/01/21|When a request failed via *reply.fail*, only show the message and not the half built data|18434|
94
95 <a name="2_2_3">&nbsp;</a>
96
97 ## 2.2.3 - 2013/02/14
98
99 This is a maintenance release to the current production version of MCollective.
100 This release is a bug fix only release.
101
102 ### Bug Fixes
103
104  * The vendored JSON gem was updated to version 1.5.5 due to CVE-2013-0269
105  * The RPC client inadvertently lost the ability to set discovery_timeout, this has been restored
106  * Plugins with underscores in their name were not packagable on Debian, we now change underscores to dashes
107  * The STOMP adapter will not be maintained past this release series, we now issue deprecation warnigns
108  * A config file reading race condition were fixed, we no longer attempt to use config details before parsing the config file thus always using defaults.
109  * Dependencies on packaged plugins have been made more specific to ensure updates work correctly
110
111 ### Backwards Compatibility and Upgrading
112
113 This release should be 100% backwards compatible with 2.2.0, 2.2.1 and 2.2.2, when upgrading
114 from earlier releases please review the Release notes for 2.0.0.
115
116 If you packaged any plugins with a underscore in their name, future packages will have a dash
117 instead, this might cause upgrade problems.
118
119 We are deprecating the STOMP connector, if you are using this connector please consider moving to the
120 ActiveMQ or RabbitMQ specific ones.
121
122 ### Changes since 2.2.2
123
124 |Date|Description|Ticket|
125 |----|-----------|------|
126 |*2013/02/14*|*Release 2.2.3*|19265|
127 |2013/02/14|Update vendored JSON gem for CVE-2013-0269|19265|
128 |2013/02/13|Restore the ability to set a discovery timeout on a RPC client|19238|
129 |2013/02/12|Replace underscores in plugin names with dashes to keep Debian happy|19200|
130 |2013/02/12|Fix package building on certain Debian systems|19141|
131 |2013/02/12|Deprecate the stomp connector|19146|
132 |2013/02/07|Read the client config before trying to use any configuration options|19105|
133 |2013/01/22|Set *=* dependencies on the various packages that form a plugin rather than *>=*|18758|
134
135 <a name="2_0_1">&nbsp;</a>
136
137 ## 2.0.1 - 2013/02/14
138
139 This is a maintenance release against our unsupported past production release, it brings no
140 visible changes or bug fixes we only updated the vendored JSON gem to version 1.5.5 due to
141 CVE-2013-0269
142
143 <a name="2_2_2">&nbsp;</a>
144
145 ## 2.2.2 - 2013/01/17
146
147 This is a maintenance release to the current production version of MCollective.
148 This release is a bug fix only release.
149
150 ### Bug Fixes
151
152  * Add the package iteration number as dependency for common packages
153  * The :any validator has been restored
154  * Packaging non-agent plugins failed when providing custom paths
155  * Packaging on RHEL5 systems failed due to an undefined buildroot
156  * When available packages will be built using rpmbuild-md5
157  * Help for data plugins with no input queries are now rendered correctly
158  * The rpcutil#get_data action now supports data plugins without input queries
159  * The RPM packages will now require Ruby > 1.8 to improve packaging for 1.9.x
160
161 ### Backwards Compatibility and Upgrading
162
163 This release should be 100% backwards compatible with 2.2.0 and 2.2.1, when upgrading
164 from earlier releases please review the Release notes for 2.0.0.
165
166 ### Changes since 2.2.1
167
168 |Date|Description|Ticket|
169 |----|-----------|------|
170 |*2013/02/17*|*Release 2.2.2*|18258|
171 |2013/01/03|Add the package iteration number as a dependency for the common packages|18273|
172 |2012/12/24|Restore the :any validator|18265|
173 |2012/12/19|Do not fail when packaging non-agent packages using custom paths|17281|
174 |2012/12/19|Require Ruby > 1.8 in the RPM specs for Ruby 1.9|17149|
175 |2012/11/08|Define a specific buildroot to support RHEL5 systems correctly|17516|
176 |2012/11/08|Use the correct rpmbuild commands on systems with rpmbuild-md5|17515|
177 |2012/10/22|Correctly show help for data plugins without any input queries|17137|
178 |2012/10/22|Allow the rpcutil#get_data action to work with data queries that takes no input|17138|
179
180 <a name="2_3_0">&nbsp;</a>
181
182 ## 2.3.0 - 2012/01/10
183
184 This is the first release in the new development series of MCollective.  This
185 release features small enhancements and bug fixes.
186
187 This release is for early adopters, production users should consider the 2.2.x
188 series.
189
190 ### Enhancements and behaviour changes
191
192  * Data queries can be written without any input queries
193  * Required inputs can now supply default values in their DDLs
194  * Support for Ruby 1.9 was improved in the packages
195  * The generated plugin documentation has been updated to show defaults and optional items
196  * Errors in agents will now log backtraces on the servers to assist with debugging
197  * libdirs will now be expanded to absolute paths and using relative ones will raise an error
198  * Various error and logging improvements
199  * Various improvements to the plugin packager
200
201 ### Bug fixes
202
203  * Packaging non-agent plugins with custom paths caused an unexpected failure
204  * The plugin packager works correctly on RHEL5 now after previously using an incorrect buildroot
205  * Correctly handle custom formats passed to the aggregation plugins from the DDL
206  * Failure in one aggregate plugin does not impact other aggregate functions
207  * The chosen timeout for agents when using direct addressing could be wrong in some cases
208  * Data plugins can now return BigNum data like those found in timestamps
209  * Aggregate functions support non string data
210  * Boolean flags in applications can now support --noop and --no-noop style flags
211  * Data results were not raising the correct exception, this was not causing problems in practice but caused the mcollective-test gem to fail
212
213 ### Input defaults in the DDL
214
215 You can now provide input defaults for required inputs in the DDL meaning if not
216 supplied they will default to the supplied format.
217
218 {% highlight ruby %}
219 action "get_fact", :description => "Retrieve a single fact from the fact store" do
220      input :fact,
221            :prompt      => "The name of the fact",
222            :description => "The fact to retrieve",
223            :type        => :string,
224            :validation  => '^[\w\-\.]+$',
225            :optional    => false,
226            :maxlength   => 40,
227            :default     => "operatingsystems"
228 end
229 {% endhighlight %}
230
231 The DDL file above defines a input *fact* that is required and sets a default value to
232 *operatingsystem*.
233
234 Previously the following command would have failed stating the input is required, now it
235 will default to the supplied value and continue without error:
236
237 {% highlight ruby %}
238 $ mco rpc rpcutil get_fact
239 {% endhighlight %}
240
241 The defaults processing is done on the client side and not on the servers meaning at no
242 point does a non compliant request get published by the clients and older MCollective servers
243 will process these requests correctly.
244
245 ### Backwards Compatibility and Upgrading
246
247 This release can cohabit with older versions with the only potential upgrade problem being
248 the changes to how the libdir variable is handled.
249
250 In the past a libdir could be:
251
252 {% highlight ini %}
253 libdir = /usr/libexec/mcollective:.mcollective.d
254 {% endhighlight %}
255
256 This would have the effect of looking for *.mcollective.d* in the current directory.
257
258 This represented a security risk and would fail on the server side when daemonizing.
259 We now force all libdir paths to be fully qualified and raises an error at start should
260 you have relative paths.
261
262 ### Changes since 2.2.1
263
264 |Date|Description|Ticket|
265 |----|-----------|------|
266 |2012/01/10|Raise the correct exception when trying to access unknown data items in a Data results|18466|
267 |2013/01/10|Fix failing documentation generation for data plugins|18437|
268 |2013/01/09|Correctly support negative boolean flags declared as --[no]-foo|18438|
269 |2013/01/03|Add the package iteration number as a dependency for the common packages|18273|
270 |2012/12/21|The libdirs supplied in the config file now has to be absolute paths to avoid issues when daemonising|16018|
271 |2012/12/20|Logs the error and backtrace when an action fails|16414|
272 |2012/12/20|Display the values of :optional and :default in DDL generated help|16616|
273 |2012/12/20|Allow the query string for the get_data action in rpcutil to be 200 chars|18200|
274 |2012/12/19|Do not fail when packaging non-agent packages using custom paths|17281|
275 |2012/12/19|Require Ruby > 1.8 in the RPM specs for Ruby 1.9|17149|
276 |2012/12/18|Allow required inputs to specify default data in DDLs|17615|
277 |2012/11/12|When disconnecting set the connection to nil|17384|
278 |2012/11/08|Define a specific buildroot to support RHEL5 systems correctly|17516|
279 |2012/11/08|Use the correct rpmbuild commands on systems with rpmbuild-md5|17515|
280 |2012/10/22|Correctly show help for data plugins without any input queries|17137|
281 |2012/10/22|Allow the rpcutil#get_data action to work with data queries that takes no input|17138|
282 |2012/10/03|Improve text output when providing custom formats for aggregations|16735|
283 |2012/10/03|Correctly process supplied formats when displaying aggregate results|16415|
284 |2012/10/03|Prevent one failing aggregate function from impacting others|16411|
285 |2012/10/03|When validation fails indicate which input key has the problem|16617|
286 |2012/09/26|Data queries can be written without any input queries meaning they take no input|16424|
287 |2012/09/26|Use correct timeout for agent requests when using direct addressing|16569|
288 |2012/09/26|Allow BigNum data to be used in data plugin replies|16503|
289 |2012/09/26|Support non string data in the summary aggregate function|16410|
290
291
292 <a name="2_2_1">&nbsp;</a>
293
294 ## 2.2.1 - 2012/10/17
295
296 This is a maintenance release to the current production version of MCollective.
297 This release is a bug fix only release.
298
299 ### Bug Fixes
300
301  * Various display and stability improvements with aggregate plugins
302  * Improve error messages
303  * Data queries that does not take an input still had to provide a bogus query input, now not needed
304  * When using direct addressing and identity filter the client timeout was incorrect
305  * BigNum type data can now be used in data plugin replies
306
307 ### Backwards Compatibility and Upgrading
308
309 This release should be 100% backwards compatible with 2.2.0, when upgrading from earlier releases
310 pleas reivew the Release notes for 2.0.0.
311
312 ### Changes since 2.1.0
313
314 |Date|Description|Ticket|
315 |----|-----------|------|
316 |*2012/10/17*|*Release 2.2.1*|16965|
317 |2012/10/03|Improve text output when providing custom formats for aggregations|16735|
318 |2012/10/03|Correctly process supplied formats when displaying aggregate results|16415|
319 |2012/10/03|Prevent one failing aggregate function from impacting others|16411|
320 |2012/10/03|When validation fails indicate which input key has the problem|16617|
321 |2012/09/26|Data queries can be written without any input queries meaning they take no input|16424|
322 |2012/09/26|Use correct timeout for agent requests when using direct addressing|16569|
323 |2012/09/26|Allow BigNum data to be used in data plugin replies|16503|
324 |2012/09/26|Support non string data in the summary aggregate function|16410|
325 |2012/09/14|Package discovery plugins that was left out for debian|16413|
326
327 <a name="2_2_0">&nbsp;</a>
328
329 ## 2.2.0 - 2012/09/13
330
331 This is the next production release of MCollective. It brings to an end active
332 support for versions 2.1.1 and older.
333
334 ### Major Enhancements
335
336  * A new plugin type called data plugins were added making network discovery extendible by users
337  * Discovery is now pluggable allowing network based, database based, file based or any other data source to be used as a source of truth
338  * Automatic result summarization methods can be declared in the DDL and users can write their own
339  * A RabbitMQ specific Direct Addressing capable connector was added
340  * Agent DDLs must be present on the servers, input validation is done against the DDL and prior to running user code
341  * DDL files can define default values for returned data - all declared data fields are pre-populated by agents
342  * DDL files can store general usage information that gets rendered via the help application
343  * DDL files can declare the minimum version mcollective they need to be functional and loading plugins on older mcollective versions will fail
344  * New validation logic in DDL files and Agents can now be delivered using plugins
345  * A thread safe caching system was added that users can use in their Agents to store information between invocations
346  * Code generators to assist writing agents
347  * Support deterministic random node selection
348  * Display mode can be overriden on the CLI using the new *--display* option
349  * The plugin packager will now keep source debs and rpms and has had major improvements done
350  * A new application called *completion* was added to assist in writing shell completion systems. ZSH and Bash examples are in *ext/*
351  * Various improvements to documentation was made especially around using the CLI tools and discovery available plugins
352
353 ### Bug Fixes
354
355  * The vendored systemu gem has been updated to remove a rude error message
356  * Improved error reporting in many areas
357  * Boolean and numeric data is correctly parsed on the RPC application command line
358  * Improved parsing of compound filters
359  * Batched requests will now all have the same request id thus improving consistency of auditing information
360
361 ### Deprecations
362
363  * Remove the traditional Client#discovered_req method
364  * The metadata section in the agent is being removed as the DDL is now present everywhere
365
366 ### Data Plugins
367
368 A new plugin type called _data plugins_ have been added, these plugins are
369 usable in discovery requests and in any agent code.
370
371 You can use these plugins to expose any node side data to your client discovery
372 command line, an example can be seen below, this will discover all nodes where
373 _/etc/syslog.conf_ has a md5 sum matching the regular expression _/19ff4997e/_:
374
375 {% highlight console %}
376 $ mco rpc rpcutil ping -S "fstat('/etc/rsyslog.conf').md5 = /19ff4997e/"
377 {% endhighlight %}
378
379 For full information see the plugins documentation on our website. The _fstat_
380 plugin seen above is included at the moment, more will be added in due course
381 but as always users can also write their own suitable to their needs.
382
383 ### Custom Discovery Sources
384
385 A new type of plugin that can be used as alternative data sources for discovery
386 data has been added. The traditional network broadcast mode is supported and
387 remains the default but a new flat file one was added.
388
389 Custom discovery sources can be made the default for a client using the
390 *default_discovery_method* configuration option but can be selected on the
391 command line using _--disc-method_.
392
393 All applications now have a _--nodes_ option that takes as an argument a flat
394 file full of mcollective identity names, one per line.
395
396 Users can write their own discovery plugins and distribute it using the normal
397 plugin packager. A complex example can be seen in the community plugin site
398 for the MongoDB registration plugin.
399
400 In the event that the _-S_ filter is used the network discovery mode will be
401 forced so that data source plugins in discovery queries will always work as
402 expected.
403
404 This feature requires Direct Addressing.
405
406 ### DDL files on the servers
407
408 The DDL files now have to be on the servers and the clients. On the servers the
409 results will be pre-populated with default data for all defined output values of
410 a specific action and you can now supply defaults.
411
412 Additionally input will be validated on each node prior to running the agent
413 code providing consistent input validation on client and server.  This should
414 remove the need to add *validate* statements to agents.
415
416 An example for a Nagios plugin can be seen below, here we default to *UNKNOWN*
417 so that even if the action fails to run we will still see valid data being
418 returned thats appropriate for the specific use case.
419
420 {% highlight ruby %}
421 action "runcommand", :description => "Run a NRPE command" do
422   output :exitcode,
423          :description  => "Exit Code from the Nagios plugin",
424          :display_as   => "Exit Code",
425          :default      => 3
426 end
427 {% endhighlight %}
428
429 ### Summarization Plugins
430
431 Often custom applications are written just to summarize data like the *facts*
432 application or *nrpe* ones.
433
434 We have added a new plugin type that allows you to define summarization logic
435 and included a few of our own.  These summaries are declared in the DDL, here is
436 a section from the new DDL for the *get_fact* action:
437
438 {% highlight ruby %}
439 action "get_fact", :description => "Retrieve a single fact from the fact store" do
440   output :value,
441           :description => "The value of the fact",
442           :display_as => "Value"
443
444   summarize do
445     aggregate summary(:value)
446   end
447 end
448 {% endhighlight %}
449
450 Here we are using the *summarize* block to say that we wish to summarize the
451 output *:value*.  The *summary(:value)* is the call to a custom plugin and you
452 can provide your own.
453
454 Now when interacting with this action you will see summaries produced
455 automatically:
456
457 {% highlight ruby %}
458 % mco rpc rpcutil get_fact fact=operatingsystemrelease
459 .
460 .
461 dev2
462     Fact: operatingsystemrelease
463    Value: 6.2
464
465
466 Summary of Value:
467
468     6.2 = 19
469     6.3 = 7
470
471 Finished processing 26 / 26 hosts in 294.97 ms
472 {% endhighlight %}
473
474 The last section of the rpc output shows the summarization in action.
475
476 The NRPE plugin on GitHub shows an example of a Nagios specific aggregation
477 function and the plugin packager supports distributing these plugins.
478
479 ### Validation Plugins
480
481 Users can now write their own plugins to perform input validation, these
482 validations are usable in DDL files and agents.
483
484 Below is a snippet from a DDL file using a custom *exim_msgid* validation
485 plugin:
486
487 {% highlight ruby %}
488     input :msgid,
489           :prompt      => "Message ID",
490           :description => "Valid message id currently in the mail queue",
491           :type        => :string,
492           :validation  => :exim_msgid,
493           :optional    => false,
494           :maxlength   => 16
495 {% endhighlight %}
496
497 And a snippet using the same plugin inside your agent:
498
499 {% highlight ruby %}
500 action "retrymsg" do
501   validate :msgid, :exim_msgid
502
503   # call out to exim to retry the message
504 end
505 {% endhighlight %}
506
507 The error messages shown when validation fails are more user friendly than
508 before, in this example the new error would be *Not a valid Exim Message ID*
509 where in the past it would have been *value should match ^(?:[+-]\d{4})?(?:\[\d+\] )?(\w{6}\-\w{6}\-\w{2})/*
510
511 ### Code generation
512
513 Code for agents and data sources can now be generated to assist development, you
514 can use the _plugin_ command to create a basic skeleton agent or data source
515 including the DDL files.
516
517 {% highlight console %}
518 $ mco plugin generate agent myagent actions=do_something,do_something_else
519 {% endhighlight %}
520
521 Defaults used in the metadata templates can be set in the config file:
522
523 {% highlight ini %}
524 plugin.metadata.url=http://devco.net
525 plugin.metadata.author=R.I.Pienaar <rip@devco.net>
526 plugin.metadata.license=ASL2.0
527 plugin.metadata.version=0.0.1
528 {% endhighlight %}
529
530 All generator produced output will have these settings set, the other fields are
531 constructed using a pattern convenient for using in your editor as a template.
532
533 ### Backwards Compatibility and Upgrading
534
535 As of this version every agent on every node and client must have a DDL file. If
536 the DDL file is not present or not valid the agent will not activate.  Further
537 input validation is done according to the content of the DDL prior to running
538 any actions.  You should therefore prepare for this upgrade by writing and
539 deploying DDL files for all your agents.
540
541 Version 2.0.0 and 2.2.0 can co-exist on the same network. If a new client uses
542 any of the new features added such as data plugins the older clients will simply
543 refuse to run the request but requests using features shared between versions
544 will continue to work.
545
546 When you first start this version of mcollectived you will see warnings logged
547 similar to the one below:
548
549 {% highlight ruby %}
550 puppetd.rb:26: setting meta data in agents have been deprecated, DDL files are now being used for this information.
551 {% endhighlight %}
552
553 This is only a warning and not a critical problem.  The next major release will
554 remove support for metadata in agents.
555
556 Upgrading from versions prior to 2.0.0 was not tested, please refer to the
557 release notes for 2.0.0.
558
559 <a name="2_1_1">&nbsp;</a>
560
561 ## 2.1.1 - 2012/07/12
562
563 This release features major new features, enhancements and bug fixes.
564
565 This release is for early adopters, production users should consider the 2.0.x
566 series.
567
568 ### Major Enhancements
569
570  * A new discovery source was added capable of querying agent properties
571  * When doing limited discovery you can now supply a random seed for deterministic random selection
572  * A *get_data* action has been added to the *rpcutil* agent to retrieve the result of a data plugin
573  * RPC Agents must have DDLs on the MCollective Servers, agents will not load without them
574  * Output values can now have defaults assigned in the DDL, the server will set those defaults before running an action
575  * A new plugin type used to summarize sets of replies has been added. Summarization is declared in the DDL for an Agent
576
577 ### Bug Fixes
578
579  * Correctly parse numeric and boolean input arguments in the RPC application
580
581 ### Deprecations
582
583  * The old *Client#discovered_req* is removed along with the *controller* application that used it
584  * Parsing compound filters were improved wrt complex regular expressions
585  * Metadata sections in agents are not needed anymore and deprecation notices are logged when they are found
586
587 ### Summarization Plugins
588
589 Often custom applications are written just to summarize data like the *facts*
590 application or *nrpe* ones.
591
592 We have added a new plugin type that allows you to define summarization logic
593 and included a few of our own.  These summaries are declared in the DDL, here is
594 a section from the new DDL for the *get_fact* action:
595
596 {% highlight ruby %}
597 action "get_fact", :description => "Retrieve a single fact from the fact store" do
598   output :value,
599           :description => "The value of the fact",
600           :display_as => "Value"
601
602   summarize do
603     aggregate summary(:value)
604   end
605 end
606 {% endhighlight %}
607
608 Here we are using the *summarize* block to say that we wish to summarize the
609 output *:value*.  The *summary(:value)* is the call to a custom plugin and you
610 can provide your own.
611
612 Now when interacting with this action you will see summaries produced
613 automatically:
614
615 {% highlight ruby %}
616 % mco rpc rpcutil get_fact fact=operatingsystemrelease
617 .
618 .
619 dev2
620     Fact: operatingsystemrelease
621    Value: 6.2
622
623
624 Summary of Value:
625
626     6.2 = 19
627     6.3 = 7
628
629 Finished processing 26 / 26 hosts in 294.97 ms
630 {% endhighlight %}
631
632 The last section of the rpc output shows the summarization in action.
633
634 The NRPE plugin on GitHub shows an example of a Nagios specific aggregation
635 function and the plugin packager supports distributing these plugins.
636
637 ### DDL files on the servers
638
639 The DDL files now have to be on the servers and the clients.  On the servers the
640 results will be pre-populated with default data for all defined output values of
641 a specific action and you can now supply defaults.
642
643 An example for a Nagios plugin can be seen below, here we default to *UNKNOWN*
644 so that even if the action fails to run we will still see valid data being
645 returned thats appropriate for the specific use case.
646
647 {% highlight ruby %}
648 action "runcommand", :description => "Run a NRPE command" do
649   output :exitcode,
650          :description  => "Exit Code from the Nagios plugin",
651          :display_as   => "Exit Code",
652          :default      => 3
653 end
654 {% endhighlight %}
655
656 As the servers now have the DDL the *metadata* section at the top of agents are
657 not needed anymore and deprecations will be logged when the mcollectived starts
658 up warning you of this.
659
660 ### Backwards Compatibility and Upgrading
661
662 As this release now requires DDL files to exist before an agent can be loaded in
663 the server you might have to adjust your deployment strategy and possibly write
664 some DDLs for your custom agents.  The DDL files have to be on both client and
665 servers.
666
667 The servers will now pre-populate the replies with all output defined in the DDL
668 and supply defaults if no default is provided in the DDL it will default to nil.
669 This might potentially change the behavior of custom applications that are
670 designed around the approach of checking if a field is included in the results
671 or not.
672
673 When you first start this version of mcollectived you will see warnings logged
674 similar to the one below:
675
676 {% highlight ruby %}
677 puppetd.rb:26: setting meta data in agents have been deprecated, DDL files are now being used for this information.
678 {% endhighlight %}
679
680 This is only a warning and not a critical problem.  Once 2.2.0 is out we will be
681 updating all the agents to remove metadata sections in favour of those in the DDL.
682 You should also remove metadata from your own agents.
683
684 ### Changes since 2.1.0
685
686 |Date|Description|Ticket|
687 |----|-----------|------|
688 |2012/07/11|Add a --display option to RPC clients that overrides the DDL display mode|15273|
689 |2012/07/10|Do not add a metadata to agents created with the generator as they are now deprecated|15445|
690 |2012/07/03|Correctly parse numeric and boolean data on the CLI in the rpc application|15344|
691 |2012/07/03|Fix a bug related to parsing regular expressions in compound statements|15323|
692 |2012/07/02|Update vim snippets in ext for new DDL features|15273|
693 |2012/06/29|Create a common package for agent packages containing the DDL for servers and clients|15268|
694 |2012/06/28|Improve parsing of compound filters where the first argument is a class|15271|
695 |2012/06/28|Add the ability to declare automatic result summarization in the DDL files for agents|15031|
696 |2012/06/26|Surpress subscribing to reply queues when no reply is expected|15226|
697 |2012/06/25|Batched RPC requests will now all have the same requestid|15195|
698 |2012/06/25|Record the request id on M::Client and in the RPC client stats|15194|
699 |2012/06/24|Use UUIDs for the request id rather than our own weak implementation|15191|
700 |2012/06/18|The DDL can now define defaults for outputs and the RPC replies are pre-populated|15087|
701 |2012/06/18|Remove unused agent help code|15084|
702 |2012/06/18|Remove unused code from the *discovery* agent related to inventory and facts|15083|
703 |2012/06/18|Nodes will now refuse to load RPC agents without DDL files|15082|
704 |2012/06/18|The Plugin Name and Type is now available to DDL objects|15076|
705 |2012/06/15|Add a get_data action to the rpcutil agent that can retrieve data from data plugins|15057|
706 |2012/06/14|Allow the random selection of nodes to be deterministic|14960|
707 |2012/06/12|Remove the Client#discovered_req method and add warnings to the documentation about its use|14777|
708 |2012/06/11|Add a discovery source capable of doing introspection on running agents|14945|
709 |2012/06/11|Only do identity filter optimisations for the *mc* discovery source|14942|
710
711 <a name="2_1_0">&nbsp;</a>
712
713 ## 2.1.0 - 2012/06/08
714
715 This is the first release in the new development series of MCollective.  This
716 releas features major new features and enhancements.
717
718 This release is for early adopters, production users should consider the 2.0.x
719 series.
720
721 ### Major Enhancements
722
723  * Discovery requests can now run custom data plugins on nodes to facilitate discovery against any node-side data
724  * Discovery sources are now pluggable, one supporting flat files are included in this release
725  * All applications now have a --nodes option to read a text file of identities to operate on
726  * A new _completion_ application was added to assist with shell completion systems, zsh and bash tab completion plugins are in ext
727  * Users can now use a generator to create skeleton agents and data sources
728
729 ### Changes in behavior
730
731  * The _mco controller_ application is being deprecated for the next major release and has now been removed from the development series
732  * The _mco find_ application is now a discovery client so it's output mode has changed slightly but the functionality stays the same
733
734 ### Bug Fixes
735
736  * Numerous small improvement to user facing errors and status outputs have been made
737  * Sub collectives combined with direct addressing has been fixed
738  * Various packaging issues were resolved
739  * The ActiveMQ and Stomp connectors will now by default handle dual homed IPv6 and IPv4 hosts better in cases where the IPv6 target isn't reachable
740
741 ### Data Plugins
742
743 A new plugin type called _data plugins_ have been added, these plugins are
744 usable in discovery requests and in any agent code.
745
746 You can use these plugins to expose any node side data to your client discovery
747 command line, an example can be seen below, this will discover all nodes where
748 _/etc/syslog.conf_ has a md5 sum matching the regular expression
749 _/19ff4997e/_:
750
751 {% highlight console %}
752 $ mco rpc rpcutil ping -S "fstat('/etc/rsyslog.conf').md5 = /19ff4997e/"
753 {% endhighlight %}
754
755 For full information see the plugins documentation on our website. The _fstat_
756 plugin seen above is included at the moment, more will be added in due course
757 but as always users can also write their own suitable to their needs.
758
759 ### Custom Discovery Sources
760
761 Since the introduction of direct addressing mode in 2.0.0 you've been able to
762 pragmatically specify arbitrary host lists as discovery data but this was never
763 exposed to the user interface.
764
765 We now introduce plugins that can be used as alternative data sources and
766 include the traditional network broadcast mode and a flat file one.  The hope
767 is that more will be added in future perhaps integrating with systems like
768 PuppetDB.  There is also one that uses the MongoDB Registration plugin to build
769 a local node cache.
770
771 Custom discovery sources can be made the default for a client using the
772 *default_discovery_method* configuration option but can be selected on the
773 command line using _--disc-method_.
774
775 All applications now have a _--nodes_ option that takes as an argument a flat
776 file full of mcollective identity names, one per line.
777
778 Users can write their own discovery plugins and distribute it using the normal
779 plugin packager.
780
781 In the event that the _-S_ filter is used the network discovery mode will be
782 forced so that data source plugins in discovery queries will always work as
783 expected.
784
785 ### Code generation
786
787 Code for agents and data sources can now be generated to assist development,
788 you can use the _plugin_ command to create a basic skeleton agent or data source
789 including the DDL files.
790
791 {% highlight console %}
792 $ mco plugin generate agent myagent actions=do_something,do_something_else
793 {% endhighlight %}
794
795 Defaults used in the metadata templates can be set in the config file:
796
797 {% highlight ini %}
798 plugin.metadata.url=http://devco.net
799 plugin.metadata.author=R.I.Pienaar <rip@devco.net>
800 plugin.metadata.license=ASL2.0
801 plugin.metadata.version=0.0.1
802 {% endhighlight %}
803
804 All generator produced output will have these settings set, the other fields
805 are constructed using a pattern convenient for using in your editor as a
806 template.
807
808 ### Backwards Compatibility and Upgrading
809
810 This release can co-exist with 2.0.0 but using the new discovery data plugins in a
811 mixed environment will result in the old nodes not being discovered and they will
812 log exceptions in their logs.  This was done by choice and ensures the safest
813 possible upgrade path.
814
815 When the 2.0.0 collective is running with directed mode enabled a client using the
816 new discovery plugins will be able to communicate wth the older nodes without
817 problem.
818
819 ### Changes since 2.0.0
820
821 |Date|Description|Ticket|
822 |----|-----------|------|
823 |2012/06/07|Force discovery state to be reset when changing collectives in the RPC client|14874|
824 |2012/06/07|Create code generators for agents and data plugins|14717|
825 |2012/06/07|Fix the _No response from_ report to be correctly formatted|14868|
826 |2012/06/07|Sub collectives and direct addressing mode now works correctly|14668|
827 |2012/06/07|The discovery method is now pluggable, included is one supporting flat files|14255|
828 |2012/05/28|Add an application to assist shell completion systems with bash and zsh completion plugins|14196|
829 |2012/05/22|Improve error messages from the packager when a DDL file cannot be found|14595|
830 |2012/05/17|Add a dependency on stomp to the rubygem|14300|
831 |2012/05/17|Adjust the ActiveMQ and Stomp connect_timeout to allow IPv4 fall back to happen in dual homed hosts|14496|
832 |2012/05/16|Add a plugable data source usable in discovery and other plugins|14254|
833 |2012/05/04|Improve version dependencies and upgrade experience of debian packages|14277|
834 |2012/05/03|Add the ability for the DDL to load DDL files from any plugin type|14293|
835 |2012/05/03|Rename the MCollective::RPC::DDL to MCollective::DDL to match its larger role in all plugins|14254|
836
837 <a name="2_0_0">&nbsp;</a>
838
839 ## 2.0.0 - 2012/04/30
840
841 This is the next production release of MCollective.  It brings to an
842 end active support for versions 1.3.3 and older.
843
844 This release brings to general availability all the features added in the
845 1.3.x development series.
846
847 ### Major Enhancements
848
849  * Complete messaging protocol rewrite to enable direct style connectivity that would allow programs to bypass normal discovery instead using their own data sources
850  * An additional more robust messaging paradigm supporting a more assured addressing and delivery scheme
851  * Batched mode allowing users to address machines in small groups thus avoiding thundering herd and enabling more granular changes
852  * A more complete language for expressing discovery that includes and/or/not style queries across the infrastructure
853  * Improved Stomp connection security using normal industry standard Certificate Authority validated TLS
854  * New connector that uses ActiveMQ specific features for better performance and scalability
855  * Security of the SSL and AES security plugins have been improved for tamper protection by middle men
856  * A message validity period has been introduced to lower the window of message replay attacks
857  * Better error handling and better logging for Stomp connections
858  * JSON output from the 'rpc' application
859  * Ability to pipe RPC requests into each other creating a chain of related RPC calls
860  * Better validations, better error handling and better documentation creation from the DDL
861  * Performance improvements in the CLI, more consistently formatted output of received data
862  * A Ruby GEM of the client is now made available on rubygems.org
863  * The rc script for Debian based systems have been improved to prevent duplicate daemons from running
864  * Built in packager for plugins into native OS packages - RedHat and Debian supported
865  * MS Windows Support
866
867 ### Point to Point comms
868
869 Previously MCollective could only broadcast messages and was tied to a discovery model.
870
871 The messaging layer now supports per node destinations that allows you to address a node, even if its down,
872 doesn't yet exist or if you cannot come up with a filter that would match a group of arbitrarily selected
873 nodes.
874
875 When this mode is in use the user configure which machine to communicate with using either text, arrays or
876 JSON data.  It will then communicate directly to those nodes via the middleware and if any of them are down
877 you will get the usual no responses report after DDL configured timeout, this is a smooth transparent to the
878 end user mix in communication modes.
879
880 It is ideal for building deployers, web apps and so forth where you know exactly which nodes should be there
881 and you'd like to influence the MCollective network addressing, perhaps from a CMDB you built yourself.
882
883 This is the start towards an assured style of delivery, you can consider it the TCP to MCollective's UDP.
884 Both modes of communication will be supported in the future and both will have access to all the same agents
885 and clients.
886
887 This is feature is enabled using the *direct_addressing* configuration option. At present only the new
888 ActiveMQ connector supports this at scale.  The ActiveMQ connector is now the recommended standard connector
889 combined with Apache ActiveMQ.  More brokers could be supported in future.
890
891 ### Pluggable / Optional Discovery
892
893 If the user did _mco rpc rpcutil ping -I box.example.com -I another.example.com_ mcollective will now just
894 assume you know what she wants, it won't do a discover to confirm those machines exist or not, it will just go
895 and communicate with them.  This is a big end user visible speed improvement.  If however you did a filter
896 like *-I /example.com/* mcollective cannot know which machines you want to reach and so a traditional
897 broadcast discovery is done first.
898
899 When the direct addressing mode is enabled various behind the scenes optimizations are being done:
900
901  * If a discovery is done and it finds you only want to address 10 or fewer nodes it will use direct mode for that
902    request.  This avoids a second needless broadcast.  This is less efficient to the middleware but does not send
903    needless messages to uninterested nodes that would then just ignore them.
904  * The _rpc_ application supports piping output from one to the next.  Example of this below.
905
906 {% highlight console %}
907 $ mco rpc package update package=foo -W customer=acme -j|mco rpc service restart service=bar
908 {% endhighlight %}
909
910 This will update a package on machines matching *customer=foo* and then restart the service *bar* on those
911 machines.
912
913 The first request is doing traditional discovery based on the fact while the 2nd request is not doing
914 discovery at all, it uses the JSON output enabled by -j as discovery data and then restart the service on only
915 those machines.
916
917 These abilities are exposed in the SimpleRPC client API and you can write your own schemes, query your own
918 databases etc
919
920 ### Batching
921
922 Often the speed of MCollective is a problem, you want to install a package on thousands of machines but your
923 APT or YUM server isn't up to the task.
924
925 You can now do batching of requests:
926
927 {% highlight console %}
928 $ mco package update myapp --batch 10 --batch-sleep 60
929 {% endhighlight %}
930
931 This performs the update as usual but only affecting machines in groups of 10 and sleeps for a minute between.
932
933 You can also access this functionality via the API please see the docs for usage.  Any existing script or
934 application should support this functionality without any code changes.
935
936 The results, error reporting, statistics reporting and so forth all stays consistent with non batched
937 behavior.
938
939 At any time you can interrupt the process and only the current group of machines will have been affected.
940
941 The batching requires a direct addressing capable collective as it is built using the new direct to node
942 communications and pluggable discovery features
943
944 ### ActiveMQ specific connector
945
946 A new connector plugin has been added that is specific to ActiveMQ and is compatible with the new direct
947 addressing communication system.
948
949 You will need to change your ActiveMQ configuration to support this plugin, see the documentation for this
950 plugin and the examples in _ext/activemq_ have also been updated for the new plugin.
951
952 Anyone who use ActiveMQ is strongly recommended to use this plugin as it uses a few ActiveMQ specific
953 optimizations that can have a big performance enhancing effect on your collective.
954
955 ### Packaging Agent plugins
956
957 Distributing agents has been a problem as they are just files that have limited meta data and attached.
958
959 We now support packaging agents into rpm or deb packages, your agent must have a DDL file for this to work:
960
961 {% highlight console %}
962 $ mco plugin package . --vendor "My Company"
963 Successfully built RPM 'mcollective-exim_ng-client-0.1-1.noarch.rpm'
964 Successfully built RPM 'mcollective-exim_ng-common-0.1-1.noarch.rpm'
965 Successfully built RPM 'mcollective-exim_ng-agent-0.1-1.noarch.rpm'
966 {% endhighlight %}
967
968 The packages will have meta data like Author, Version and so forth as per your DDL file.
969
970 Users can provide their own packaging implementations for other package managers or custom layouts using the
971 MCollective plugin system.
972
973 ### Full verified CA
974
975 When using the new ActiveMQ specific connector combined with Stomp version 1.2.2 or newer you can get full CA
976 verified connection handling ensuring that only clients using signed certificates can connect to ActiveMQ.
977
978 The documentation for the ActiveMQ SSL setup now includes instructions on setting up ActiveMQ and your clients
979 using the built in Puppet CA but any CA could be used to manage these certificates.
980
981 This feature will work best when ActiveMQ 5.6.0 is released in a few weeks since there will then be a NIO+SSL
982 Stomp connector. The current SNAPSHOT release of ActiveMQ has this feature as well as the most recent Service
983 Pack release of the Fuse Message Broker.
984
985 ### MS Windows Support
986
987 The MS Windows platform is now supported as both a client and a server.  The _ext/windows_ directory has some
988 helpers and read me documentation that has been confirmed to work but we have not yet completed packaging
989 ourselves so this is still a manual process.
990
991 Combined with Puppet 2.7.12 or newer the Package and Service agents can be used to manage Windows resources
992 using the same commands as those on Linux via mcollective.
993
994 ### New Discovery Language
995
996 Previously dicovery was very limited, filters were simply run one after the other and you could not do
997 anything complex like a mix of OR and AND boolean logic.
998
999 A new compact discovery language was introduced perfect for use on the command line, an example below:
1000
1001 {% highlight console %}
1002 $ mco find -S "((fqdn=/example.com/ or fqdn=/another.com/) or customer=acme) and apache and physicalprocessorcount>2"
1003 {% endhighlight %}
1004
1005 The EBNF for this language can be seen below, it's available on the command line and the API
1006
1007     compound = ["("] expression [")"] {["("] expression [")"]}
1008     expression = [!|not]statement ["and"|"or"] [!|not] statement
1009     char = A-Z | a-z | < | > | => | =< | _ | - |* | / { A-Z | a-z | < | > | => | =< | _ | - | * | / | }
1010     int = 0|1|2|3|4|5|6|7|8|9{|0|1|2|3|4|5|6|7|8|9|0}
1011
1012 ### Backwards Compatibility and Upgrading
1013
1014 This release is not compatible with older versions. Client scripts and agents written for older versions will
1015 continue to work but a network hosting both 2.0.0 clients and older one will effectively be split into 2
1016 networks.  While planning your upgrade you should plan to have machines running the client for both versions
1017 to retain full control during upgrade.  The upgrade is best done in an scheduled window where all machines are
1018 updated together.
1019
1020 While upgrading you must ensure that the plugins that come with the release are updated at the same time as
1021 the release.  Older security and connector plugins will not function with this release.  This also means if
1022 you wrote your own connector or security plugin you will need to port these prior to upgrading.
1023
1024 Past this it should be a simple matter of updating using your operating systems package manager.
1025
1026 We recommend you switch to the new ActiveMQ based connector plugin away from the previous generic Stomp one as
1027 this is the primary supported method of deployment and the generic Stomp one will be deprecated in future.
1028 Additionally the Stomp connector does not support the new direct messaging communications mode.
1029
1030 In order to upgrade to the new ActiveMQ connector you will need to change your broker setup including ACLs,
1031 transport connectors, message policies and inter broker connections.  Sample configuration files for single
1032 and multi broker setups can be found in the Git repository or the tar file in _ext/activemq_
1033
1034 <a name="1_3_3">&nbsp;</a>
1035
1036 ## 1.3.3 - 2012/04/05
1037
1038 This is a release in the development series of MCollective.  It feature major new features and bug fixes.
1039
1040 This release is for early adopters, production users should consider the 1.2.x series.
1041
1042 ### Major Enhancements
1043
1044  * The MS Windows platform is now supported, packaging is still outstanding
1045  * Agents can now be packaged to native OS packages using the new _mco plugin_ command
1046  * _mco help rpc_ now show the help for the rpc application, _mco plugin doc puppetd_ shows the help for the puppetd agent
1047  * Full CA verified Stomp is supported and documented between ActiveMQ and MCollective using Stomp > 1.2.2
1048  * Application exit codes have been standardized using a new _halt_ helper function
1049  * A new validator that allows users to check if a supplied value is one of a fixed list
1050  * The syslog facility can now be set in the configuration file
1051  * The client libraries are now available as a Ruby Gem
1052  * Batch mode can now be enabled and disabled at will in an application
1053  * The client config files now default to console based logging at warn level
1054
1055 ### Bug Fixes
1056
1057  * nil or empty results are correctly displayed by printrpc
1058  * Some exceptions under Ruby 1.9.3 when using run() related to nil exit code has been fixed
1059  * Various exceptions have been silence in inventory application, stomp plugin, rpc application and others
1060  * Previous SSL_read errors when using the Stomp+TLS configuration is now avoided on Ruby 1.8
1061
1062 ### Packaging Agent plugins
1063
1064 Distributing agents has been a problem as they are just files that have limited meta data and attached.
1065
1066 We now support packaging agents into rpm or deb packages, your agent must have a DDL file
1067 for this to work:
1068
1069 {% highlight console %}
1070 $ mco plugin package . --vendor "My Company"
1071 Successfully built RPM 'mcollective-exim_ng-client-0.1-1.noarch.rpm'
1072 Successfully built RPM 'mcollective-exim_ng-common-0.1-1.noarch.rpm'
1073 Successfully built RPM 'mcollective-exim_ng-agent-0.1-1.noarch.rpm'
1074 {% endhighlight %}
1075
1076 The packages will have meta data like Author, Version and so forth as per your DDL file.
1077
1078 We support building all the main plugin types in this manner but need to restructure the plugins
1079 repository to support this layout.
1080
1081 To use this you need to install the fpm gem, you must install 0.4.3 and not a newer version, we are
1082 currently working on removing the fpm dependency as it's proven to be too unreliable to use.
1083
1084 Users can provide their own packaging implementations for other package managers or custom layouts
1085 using the MCollective plugin system.
1086
1087 ### Full verified CA
1088
1089 When using the new ActiveMQ specific connector combined with Stomp version 1.2.2 or newer you can
1090 get full CA verified connection handling ensuring that only clients using signed certificates
1091 can connect to ActiveMQ.
1092
1093 The documentation for the ActiveMQ SSL setup now includes instructions on setting up ActiveMQ and your
1094 clients using the built in Puppet CA but any CA could be used to manage these certificates.
1095
1096 This feature will work best when ActiveMQ 5.6.0 is released in a few weeks since there will then be a NIO+SSL
1097 Stomp connector. The current SNAPSHOT release of ActiveMQ has this feature as well as the most recent Service
1098 Pack release of the Fuse Message Broker.
1099
1100 ### MS Windows Support
1101
1102 The MS Windows platform is now supported as both a client and a server.  The _ext/windows_ directory
1103 has some helpers and read me documentation that has been confirmed to work but we have not yet
1104 completed packaging ourselves so this is still a manual process.
1105
1106 Combined with Puppet 2.7.12 or newer the Package and Service agents can be used to manage Windows
1107 resources using the same commands as those on Linux via mcollective.
1108
1109 ### Backwards compatibility
1110
1111 This release is backwards compatible with version 1.3.2, if you are coming from an older version please
1112 review earlier release notes.
1113
1114 If you have been using the ActiveMQ specific plugin and its SSL settings you will now need to enable
1115 fallback mode as it will now only connect to ActiveMQ machines that present the correct CA certificate
1116 and will refuse to use anonymous certificates
1117
1118 {% highlight ini %}
1119 plugin.activemq.pool.1.ssl.fallback = 1
1120 {% endhighlight %}
1121
1122 ### Changes since 1.3.2
1123
1124 |Date|Description|Ticket|
1125 |----|-----------|------|
1126 |2012/04/04|Use the MCollective::SSL utility class for crypto functions in the SSL security plugin|13615|
1127 |2012/04/02|Support reading public keys from SSL Certificates as well as keys|13534|
1128 |2012/04/02|Move the help template to the common package for both Debian and RedHat|13434|
1129 |2012/03/30|Support Stomp 1.2.2 CA verified connection to ActiveMQ|10596|
1130 |2012/03/27|_mco help rpc_ now shows the help for the rpc application|13350|
1131 |2012/03/22|Add a mco command that creates native OS packaging for plugins|12597|
1132 |2012/03/21|Default to console based logging at warning level for clients|13285|
1133 |2012/03/20|Work around SSL_read errors when using SSL or AES plugins and Stomp+SSL in Ruby < 1.9.3|13207|
1134 |2012/03/16|Improve logging for SSL connections when using Stomp Gem newer than 1.2.0|13165|
1135 |2012/03/14|Simplify handling of signals like TERM and INT and remove pid file on exit|13105|
1136 |2012/03/13|Create a conventional place to store implemented_by scripts|13064|
1137 |2012/03/09|Handle exceptions added to the Stomp 1.1 compliant versions of the Stomp gem|13020|
1138 |2012/03/09|Specifically enable reliable communications while using the pool style syntax|13040|
1139 |2012/03/06|Initial support for the Windows Platform|12555|
1140 |2012/03/05|Application plugins can now disable any of 3 sections of the standard CLI argument parsers|12859|
1141 |2012/03/05|Fix base 64 encoding and decoding of message payloads that would previous raise unexpected exceptions|12950|
1142 |2012/03/02|Treat :hosts and :nodes as equivalents when supplying discovery data, be more strict about flags discover will accept|12852|
1143 |2012/03/02|Allow exit() to be used everywhere in application plugins, not just in the main method|12927|
1144 |2012/03/02|Allow batch mode to be enabled and disabled on demand during the life of a client|12854|
1145 |2012/02/29|Show the progress bar before sending any requests to give users feedback as soon as possible rather than after first result only|12865|
1146 |2012/02/23|Do not log exceptions in the RPC application when a non existing action is called with request parameters|12719|
1147 |2012/02/17|Log miscellaneous Stomp errors at error level rather than debug|12705|
1148 |2012/02/17|Improve subscription tracking by using the subID feature of the Stomp gem and handle duplicate exceptions|12703|
1149 |2012/02/15|Improve error handling in the inventory application for non responsive nodes|12638|
1150 |2012/02/14|Comply to Red Hat guideline by not setting mcollective to start by default after RPM install|9453|
1151 |2012/02/14|Allow building the client libraries as a gem|9383|
1152 |2012/02/13|On Red Hat like systems read /etc/sysconfig/mcollective in the init script to allow modification of the environment|7441|
1153 |2012/02/13|Make the handling of symlinks to the mco script more robust to handle directories with mc- in their name|6275|
1154 |2012/02/01|systemu and therefore MC::Shell can sometimes return nil exit code, the run() method now handles this better by returning -1 exit status|12082|
1155 |2012/01/27|Improve handling of discovery data on STDIN to avoid failures when run without a TTY and without supplying discovery data|12084|
1156 |2012/01/25|Allow the syslog facility to be configured|12109|
1157 |2012/01/13|Add a RPC agent validator to ensure input is one of list of known good values|11935|
1158 |2012/01/09|The printrpc helper did not correctly display empty strings in received output|11012|
1159 |2012/01/09|Add a halt method to the Application framework and standardize exit codes|11280|
1160 |2011/11/21|Remove unintended dependency on _pp_ in the ActiveMQ plugin|10992|
1161 |2011/11/17|Allow reply to destinations to be supplied on the command line or API|9847|
1162
1163
1164 <a name="1_3_2">&nbsp;</a>
1165
1166 ## 1.3.2 - 2011/11/17
1167
1168 This is a release in the development series of MCollective.  It feature major new features.
1169
1170 This release is for early adopters, production users should consider the 1.2.x series.
1171
1172 ### Enhancements
1173
1174  * Handling of syntax errors in Application plugins have been improved
1175  * The limit method can now be set per RPC Client instance
1176  * Optionally show response distribution in the _ping_ application with the _--graph_ option
1177  * Expose a statistic about expired messages via the _rpcutil_ agent and show them in the inventory application.
1178  * Remove all the _mc-_ scripts that has been ported to applications
1179  * AES and TTL security plugins prevent tampering with the TTL and Message Times
1180  * The RPC client can now raise an exception rather than exit on failure - ideal for use in web apps
1181  * Discovery during requests that has a specific limit count set have been sped up
1182  * Specific types for :number, :float and :integer has been aded to the DDL and the RPC application has special handling for them
1183  * Caller ID, Certificate Names and Identity Names can now only be word characters, full stop and dash
1184  * Security plugins are now quicker to ignore miss directed messages
1185  * The client now unsubscribes from topics it does not need anymore
1186  * SimpleRPC now supports performing actions in batches with a sleep between each batch
1187  * A direct request capable ActiveMQ specific plugin has been included
1188  * Message TTLs can be set globally in the config or in the API
1189
1190 ### ActiveMQ specific connector
1191
1192 A new connector plugin has been added that is specific to ActiveMQ and is compatible
1193 with the new direct addressing communication system.
1194
1195 You will need to change your ActiveMQ configuration to support this plugin, see the
1196 documentation for this plugin and the examples in _ext/activemq_ have also been
1197 updated for the new plugin.
1198
1199 Anyone who use ActiveMQ is strongly recommended to use this plugin as it uses a
1200 few ActiveMQ specific optimizations that can have a big performance enhancing effect
1201 on your collective.
1202
1203 ### Batching
1204
1205 Often the speed of MCollective is a problem, you want to install a package on thousands
1206 of machines but your APT or YUM server isn't up to the task.
1207
1208 You can now do batching of requests:
1209
1210 {% highlight console %}
1211 $ mco package update myapp --batch 10 --batch-sleep 60
1212 {% endhighlight %}
1213
1214 This performs the update as usual but only affecting machines in groups of 10 and
1215 sleeps for a minute between.
1216
1217 You can also access this functionality via the API please see the docs for usage.
1218 Any existing script or application should support this functionality without any
1219 code changes.
1220
1221 The results, error reporting, statistics reporting and so forth all stays consistant
1222 with non batched behavior.
1223
1224 The batching requires a direct addressing capable collective.
1225
1226 ### Backwards Compatibility
1227
1228 As this release does a few more tweaks to the security system it might not work with older
1229 versions of MCollective.
1230
1231 Hopefully this will be the last release in this dev cycle to break backwards compatibility
1232 as we're nearing the next major release.
1233
1234 #### Identities, Certificates and Caller ID names
1235
1236 These items have been tightened up to only match _\w\.-_.  Plugins like the registration
1237 ones might assume it is safe to just write files based on names contained in these fields
1238 so rather than expect everyone to write secure code the framework now just enforce
1239 a safe approach to these.
1240
1241 This means if you have cases that would violate this rule you would need to change that
1242 configuration prior to upgrading to 1.3.2
1243
1244 #### AES and SSL plugins are more secure
1245
1246 If you use the AES or SSL plugins you will need to plan your rollout carefully, these plugins
1247 are not capable of communicating with older versions of MCollective.
1248
1249 #### Changes since 1.3.1
1250
1251 |Date|Description|Ticket|
1252 |----|-----------|------|
1253 |2011/11/16|Imrpove error reporting for code errors in application plugins|10883|
1254 |2011/11/15|The limit method is now configurable on each RPC client as well as the config file|7772|
1255 |2011/11/15|Add a --graph option to the ping application that shows response distribution|10864|
1256 |2011/11/14|An ActiveMQ specific connector was added that supports direct connections|7899|
1257 |2011/11/11|SimpleRPC clients now support native batching with --batch|5939|
1258 |2011/11/11|The client now unsubscribes from topics when it's idle minimising the risk of receiving missdirected messages|10670|
1259 |2011/11/09|Security plugins now ignore miss directed messages early thus using fewer resources|10671|
1260 |2011/10/28|Support ruby-1.9.2-p290 and ruby-1.9.3-rc1|10352|
1261 |2011/10/27|callerid, certificate names, and identity names can now only have \w . and - in them|10327|
1262 |2011/10/25|When discovery information is provided always accept it without requiring reset first|10265|
1263 |2011/10/24|Add :number, :integer and :float to the DDL and rpc application|9902|
1264 |2011/10/22|Speed up discovery when limit targets are set|10133|
1265 |2011/10/22|Do not attempt to validate TTL and Message Times on replies in the SSL plugin|10226|
1266 |2011/10/03|Allow the RPC client to raise an exception rather than exit on failure|9360|
1267 |2011/10/03|Allow the TTL of requests to be set in the config file and the SimpleRPC API|9399|
1268 |2011/09/26|Cryptographically secure the TTL and Message Time of requests when using AES and SSL plugins|9400|
1269 |2011/09/20|Update default shipped configurations to provide a better out of the box experience|9452|
1270 |2011/09/20|Remove deprecated mc- scripts|9402|
1271 |2011/09/20|Keep track of messages that has expired and expose the stat in rpcutil and inventory application|9456|
1272
1273 <a name="1_3_1">&nbsp;</a>
1274
1275 ## 1.3.1 - 2011/09/16
1276
1277 This is a release in the development series of MCollective.  It feature major new features
1278 and bug fixes.
1279
1280 This release is for early adopters, production users should consider the 1.2.x series.
1281
1282 ### Enhancements
1283
1284  * Messaging has been completely reworked internally to be more generic and easier to integrate
1285    with other middleware
1286  * When using Stomp 1.1.9 detailed connection logs are kept showing connections, reconnections
1287    and communication errors
1288  * A new point to point - but still via the middleware - communications ability has been introduced
1289  * When point to point comms is enabled, favour this mode when small number of nodes are being addressed
1290  * Add -j to any SimpleRPC client. Clients using _printrpc_ will automatically support a new JSON output format
1291  * A new rich discovery language was added using the -S flag
1292  * SimpleRPC validators can now also validate boolean data
1293  * The default location of _classes.txt_ has changed to be in line with Puppet defaults.
1294  * A default TTL of 60 seconds are set on all messages.  This is a start towards replay protection and is needed
1295    for the new point to point comms style
1296  * Discovery is now optional.  If you supply an identity filter discovery will be bypassed.  Additionally discovery
1297    can be supplied in arrays, text or JSON formats.  This requires the new point to point comms model.
1298
1299 ### Bug Fixes
1300
1301  * Missing DDL files on the servers are now logged at debug level to minimise noise in the logs
1302  * The RC scripts set RUBYLIB, remove this and rely on the operating system to be set up correctly
1303  * Invalid fact filters supplied on the CLI now raises an error rather than create empty filters
1304
1305 ### New Discovery Language
1306
1307 Previously dicovery was very limited, filters were simply run one after the other and you could not do
1308 anything complex like a mix of OR and AND boolean logic.
1309
1310 A new compact discovery language was introduced perfect for use on the command line, an example below:
1311
1312 {% highlight console %}
1313 $ mco find -S "((fqdn=/example.com/ or fqdn=/another.com/) or customer=acme) and apache and physicalprocessorcount>2"
1314 {% endhighlight %}
1315
1316 The EBNF for this language can be seen below, it's available on the command line and the API
1317
1318     compound = ["("] expression [")"] {["("] expression [")"]}
1319     expression = [!|not]statement ["and"|"or"] [!|not] statement
1320     char = A-Z | a-z | < | > | => | =< | _ | - |* | / { A-Z | a-z | < | > | => | =< | _ | - | * | / | }
1321     int = 0|1|2|3|4|5|6|7|8|9{|0|1|2|3|4|5|6|7|8|9|0}
1322
1323 ### Point to Point comms
1324
1325 Previously MCollective could only broadcast messages and was tied to a discovery model.  This is in line
1326 with the initial goals of the project, having solved that we want to mix in a more traditional messaging
1327 style.
1328
1329 The messaging layer now supports per node destinations that allows you to address a node, even if its down,
1330 doesn't yet exist or if you cannot come up with a filter that would match a group of arbitrarily selected
1331 nodes.
1332
1333 When this mode is in use you tell it using either text, arrays or JSON data which machines to communicate with
1334 it will then talk directly to those nodes via the middleware and if any of them are down you will get the
1335 usual no responses report after DDL configured timeout, this is a smooth transparent to the end user mix
1336 in communication modes.
1337
1338 It is ideal for building deployers, web apps and so forth where you know exactly which nodes should be there
1339 and you'd like to influence the MCollective network addressing, perhaps from a CMDB you built yourself.
1340
1341 This is the start towards an assured style of delivery, you can consider it the TCP to MCollective's UDP.
1342 Both modes of communication will be supported in the future and both will have access to all the same agents
1343 clients etc.
1344
1345 This is feature is still maturing, you enable it using the _direct\_\addressing_ configuration option.  At
1346 present the STOMP connector supports it but it is not optimized for networks larger than 20 to 30 hosts.  A
1347 new connector is being developed that uses ActiveMQ features to achieve this efficiently.
1348
1349 ### Pluggable / Optional Discovery
1350
1351 If you did _mco rpc rpcutil ping -I box.example.com -I another.example.com_ mcollective will now just assume
1352 you know what you want, it won't do a discover to confirm those machines exist or not, it will just go and
1353 talk with them.  This is a big end user visible speed improvement.  If however you did a filter like _-I /example.com/_
1354 it cannot know which machines you want to reach and so a traditional broadcast discovery is done first.
1355
1356 When the direct addressing mode is enabled various behind the scenes optimizations are being done:
1357
1358  * If a discovery is done and it finds you only want to address 10 or fewer nodes it will use direct mode for that
1359    request.  This avoids a second needless broadcast.  This is less efficient to the middleware but does not send
1360    needless messages to uninterested nodes that would then just ignore them.
1361  * The _rpc_ application supports piping output from one to the next.  Example of this below.
1362
1363 {% highlight console %}
1364 $ mco rpc package update package=foo -W customer=acme -j|mco rpc service restart service=bar
1365 {% endhighlight %}
1366
1367 This will update a package on machines matching _customer=foo_ and then restart the service _bar_ on those machines.
1368
1369 The first request is doing traditional discovery based on the fact while the 2nd request is not doing discovery
1370 at all, it uses the JSON output enabled by -j as discovery data and then restart the service on only those machines.
1371
1372 These abilities are exposed in the SimpleRPC client API and you can write your own schemes, query your own databases etc
1373
1374 ### Backwards Compatibility
1375
1376 This is a big release and the entire messaging system has been redesigned, rewritten and has had features added.
1377 As such there might be problems running mixed 1.2.x and 1.3.1 networks, we'd ask users to test this in lab situations
1378 and provide us feedback to improve the eventual transition from 1.2.x to 1.4.x.  We did though aim to maintain backward
1379 compatibility and the intention is to fix any bugs reported where a default configured 1.3.x cannot co-habit with a
1380 previous 1.2.x build.
1381
1382 Enabling the new direct addressing mode is a big configuration change both in your collective and the middleware as such
1383 soon as you enable it there will be compatibility issues until all your nodes are up to the same level.  Specifically old
1384 nodes will just ignore your direct requests.
1385
1386 The default location for _classes.txt_ has changed to _/var/lib/puppet/state/classes.txt_ you need to ensure
1387 this file exists or configure either MCollective or Puppet accordingly else your classes filters will break
1388
1389 Messages are now valid for only 60 seconds, nodes will _ignore_ messages older than 60 seconds.  This means
1390 your clocks have to be in sync on your entire collective.  We use UTC time for the TTL check so your machines
1391 can be in different time zones.  At present the 60 second threshold is hard coded, it will become configurble on a
1392 per message basis in future.
1393
1394 #### Changes since 1.3.0
1395
1396 |Date|Description|Ticket|
1397 |----|-----------|------|
1398 |2011/09/9|Use direct messaging where possible for identity filters and make the rpc application direct aware|8466|
1399 |2011/08/29|Enforce a 60 second TTL on all messages by default|8325|
1400 |2011/08/29|Change the default classes.txt file to be in line with Puppet defaults|9133|
1401 |2011/08/06|Add reload-agents and reload-loglevel commands to the redhat RC script|7730|
1402 |2011/08/06|Avoid reloading the authorization class over and over from disk on each request|8703|
1403 |2011/08/06|Add a boolean validator to SimpleRPC agents|8799|
1404 |2011/08/06|Justify text results better when using printrpc|8807|
1405 |2011/07/22|Add --version to the mco utility|7822|
1406 |2011/07/22|Add missing meta data to the discovery agent|8497|
1407 |2011/07/18|Raise an error if invalid format fact filters are supplied|8419|
1408 |2011/07/14|Add a rich discovery query language|8181|
1409 |2011/07/08|Do not set RUBYLIB in the RC scripts, the OS should do the right thing|8063|
1410 |2011/07/07|Add a -j argument to all SimpleRPC clients that causes printrpc to produce JSON data|8280|
1411 |2011/06/30|Add the ability to do point to point comms for requests affecting small numbers of hosts|7988|
1412 |2011/06/21|Add support for Stomp Gem version 1.1.9 callback based logging|7960|
1413 |2011/06/21|On the server side log missing DDL files at debug and not warning level|7961|
1414 |2011/06/16|Add the ability for nodes to subscribe to per-node queues, off by default|7225|
1415 |2011/06/12|Remove assumptions about middleware structure from the core and move it to the connector plugins|7619|
1416
1417 <a name="1_2_1">&nbsp;</a>
1418
1419 ## 1.2.1 - 2011/06/30
1420
1421 This is a maintenance release in the production series of MCollective and is a recommended
1422 upgrade for all users of 1.2.0.
1423
1424 ### Bug Fixes
1425
1426  * Improve error handling in the inventory application
1427  * Fix compatablity problems with RedHat 4 init scripts
1428  * Allow . in Fact names
1429  * Allow applications to use the exit method
1430  * Correct parsing of the MCOLLECTIVE_EXTRA_OPTS environment variable
1431
1432 ### Backwards compatibility
1433
1434 This release should be 100% backward compatable with version 1.2.0
1435
1436 #### Changes since 1.2.0
1437
1438 |Date|Description|Ticket|
1439 |----|-----------|------|
1440 |2011/06/02|Correct parsing of MCOLLECTIVE_EXTRA_OPTS in cases where no config related settings were set|7755|
1441 |2011/05/23|Allow applications to use the exit method as would normally be expected|7626|
1442 |2011/05/16|Allow _._ in fact names|7532|
1443 |2011/05/16|Fix compatibility issues with RH4 init system|7448|
1444 |2011/05/15|Handle failures from remote nodes better in the inventory app|7524|
1445 |2011/05/06|Revert unintended changes to the Debian rc script|7420|
1446 |2011/05/06|Remove the _test_ agent that was accidentally checked in|7425|
1447
1448 <a name="1_3_0">&nbsp;</a>
1449
1450 ## 1.3.0 - 2011/06/08
1451
1452 This is a release in the development series of mcollective.  It features major
1453 new features, some bug fixes and internal structure refactoring.
1454
1455 This release is for early adopters, production users should consider the 1.2.x series.
1456
1457 ### Enhancements
1458
1459  * Agents can now programatically declare if they should work on a node
1460  * Applications can now use the exit method as normal and clean disconnects will be done
1461  * The target collective for registration messages is configurable.  In the past it defaulted to main_collective
1462
1463 ### Bug Fixes
1464
1465  * Error reporting in applications, agents and mcolletive core has been improved
1466  * The RC script works better on Red Hat 4 based systems
1467
1468 ### Other Changes
1469
1470  * The connector layer is being improved to make it easier to use other middleware.
1471    This release starts this process but it's far from complete.
1472  * The sshkey plugin was removed from core and moved to the plugins project
1473
1474 ### Backwards Compatibility
1475
1476 If you were using the sshkey plugin you need to ensure your CM system is copying it out prior to this
1477 upgrade as the packages will not contain it anymore.
1478
1479 If you have your own connectors other than the STOMP one we supply you should wait to upgrade till 1.3.1
1480 at which point you will need to make extensive changes to your plugins internals.  If your CM is copying
1481 out the connector you have to ensure that when this version of MCollective start that the new plugin is
1482 in place.
1483
1484 ### Changes
1485
1486 |Date|Description|Ticket|
1487 |----|-----------|------|
1488 |2011/06/07|Exceptions raised during option parsing were not handled and resulted in stack traces|7796|
1489 |2011/06/06|Remove the sshkey, it's being moved to the plugin repository|7794|
1490 |2011/06/02|Correct parsing of MCOLLECTIVE_EXTRA_OPTS in cases where no config related settings were set|7755|
1491 |2011/05/31|Disconnect from the middleware when an application calls exit|7712|
1492 |2011/05/29|Validations failure in RPC agents will now raise the correct exceptions as documented|7711|
1493 |2011/05/25|Make the target collective for registration messages configurable|7650|
1494 |2011/05/24|Rename the connector plugins send method to publish to avoid issues ruby Object#send|7623|
1495 |2011/05/23|Log a warning when the CF file parsing fails rather than raise a whole ruby exception|7627|
1496 |2011/05/23|Allow applications to use the exit method as would normally be expected|7626|
1497 |2011/05/22|Refactor subscribe and unsubscribe so that middleware structure is entirely contained in the connectors|7620|
1498 |2011/05/21|Add the ability for agents to programatically declare if they should work on a node|7583|
1499 |2011/05/20|Improve error reporting in the single application framework|7574|
1500 |2011/05/16|Allow _._ in fact names|7532|
1501 |2011/05/16|Fix compatibility issues with RH4 init system|7448|
1502 |2011/05/15|Handle failures from remote nodes better in the inventory app|7524|
1503 |2011/05/06|Revert unintended changes to the Debian rc script|7420|
1504 |2011/05/06|Remove the _test_ agent that was accidentally checked in|7425|
1505
1506 <a name="1_2_0">&nbsp;</a>
1507
1508 ## 1.2.0 - 2011/05/04
1509
1510 This is the next production release of MCollective.  It brings to an
1511 end active support for versions 1.1.4 and older.
1512
1513 This release brings to general availability all the features added in the
1514 1.1.x development series.
1515
1516 ### Enhancements
1517
1518  * The concept of sub-collectives were introduced that help you partition
1519    your MCollective traffic for network isolation, traffic management and security
1520  * The single executable framework has been introduced replacing the old
1521    _mc-\*_ commands
1522  * A new AES+RSA security plugin was added that provides strong encryption,
1523    client authentication and message security
1524  * New fact matching operators <=, >=, <, >, !=, == and =~.
1525  * Actions can be written in external scripts and therefore other languages
1526    than Ruby, wrappers exist for PHP, Perl and Python
1527  * Plugins can now be configured using the _plugins.d_ directory
1528  * A convenient and robust exec wrapper has been written to assist in calling
1529    external scripts
1530  * The _MCOLLECTIVE\_EXTRA\_OPTS_ environment variable has been added that will
1531    add options to all client scripts
1532  * Network timeout handling has been improved to better take account of latency
1533  * Registration plugins can elect to skip sending of registration data by
1534    returning _nil_, previously nil data would be published
1535  * Multiple libdirs are supported
1536  * The logging framework is pluggable and easier to use
1537  * Fact plugins can now force fact cache invalidation.  The YAML plugin will
1538    force a cache clear as soon as the source YAML file updates
1539  * The _ping_ application now supports filters
1540  * Network payload can now be Base64 encoded avoiding issues with Unicode characters
1541    in older Stomp gems
1542  * All fact plugins are now cached and only updated every 300 seconds
1543  * The progress bar now resizes based on terminal dimensions
1544  * DDL files with missing output blocks will not invalidate the whole DDL
1545  * Display of DDL assisted complex data has been improved to be more readable
1546  * Stomp messages can have a priority header added for use with recent versions
1547    of ActiveMQ
1548  * Almost 300 unit tests have been written, lots of old code and any new code being
1549    written is subject to continuos testing on Ruby 1.8.5, 1.8.6 and 1.9.2
1550  * Improved the Red Hat RC script to be more compliant with distribution policies
1551    and to reuse the builtin functions
1552
1553 ### Deprecations and removed functionality
1554
1555  * The old _mc-\*_ commands are being removed in favor for the new _mco_ command.
1556    The old style is still available and your existing scripts will keep working but
1557    porting to the new single executable system is very easy and encouraged.
1558  * _MCOLLECTIVE_TIMEOUT_ and _MCOLLECTIVE_DTIMEOUT_ were removed in favor of _MCOLLECTIVE\_EXTRA\_OPTS_
1559  * _mc-controller_ could exit all mcollectived instances, this feature was not ported
1560    to the new _mco controller_ application
1561
1562 ### Bug Fixes
1563
1564  * mcollectived and all of the standard supplied client scripts now disconnects
1565    cleanly from the middleware avoiding exceptions in the ActiveMQ logs
1566  * Communications with the middleware has been made robust by adding a timeout
1567    while sending
1568  * Machines that do not pass security validation are now handled as having not
1569    responded at all
1570  * When a fire and forget request was sent, replies were still sent, they are
1571    now suppressed
1572
1573 ### Backwards compatibility
1574
1575 This release can communicate with machines running older versions of mcollective
1576 there are though a few steps to take to ensure a smooth upgrade.
1577
1578 #### Backward compatible sub-collective setup
1579
1580 {% highlight ini %}
1581 topicprefix = /topic/mcollective
1582 {% endhighlight %}
1583
1584 This has to change to:
1585
1586 {% highlight ini %}
1587 topicprefix = /topic/
1588 main_collective = mcollective
1589 collectives = mcollective
1590 {% endhighlight %}
1591
1592 #### Security Plugins
1593
1594 The interface for the _encodereply_ method on the security plugins have changed
1595 if you are using any of the community plugins or wrote your own you should update
1596 them with the latest at the time you upgrade to 1.2.0
1597
1598 #### Fact Plugins
1599
1600 The interface to the fact plugins have been greatly simplified, this means you need to
1601 update to new plugins at the time you upgrade to 1.2.0
1602
1603 You can place these new plugins into the plugindir before upgrading. The old mcollective
1604 will not use these plugins and the new one will not touch the old ones. This will allow
1605 for a clean rollback.
1606
1607 Once the new version is deployed you will immediately have caching on all fact types
1608 at 300 seconds you can tune this using the fact_cache_time setting in the configuration file.
1609
1610 #### New fact selectors
1611
1612 The new fact selectors are only available on newer versions of mcollective.  If a client
1613 attempts to use them and an older version of the server is on the network those older
1614 servers will treat all fact lookups as ==
1615
1616 #### Changes since 1.1.4
1617
1618 |Date|Description|Ticket|
1619 |----|-----------|------|
1620 |2011/05/03|Improve Red Hat RC script by using distro builtin functions|7340|
1621 |2011/05/01|Support setting a priority on Stomp messages|7246|
1622 |2011/04/30|Handle broken and incomplete DDLs better and improve the format of DDL output|7191|
1623 |2011/04/23|Encode the target agent and collective in requests|7223|
1624 |2011/04/20|Make the SSL Cipher used a config option|7191|
1625 |2011/04/20|Add a clear method to the PluginManager that deletes all plugins, improve test isolation|7176|
1626 |2011/04/19|Abstract the creation of request and reply hashes to simplify connector plugin development|5701|
1627 |2011/04/15|Improve the shellsafe validator and add a Util method to do shell escaping|7066|
1628 |2011/04/14|Update Rakefile to have a mail_patches task|6874|
1629 |2011/04/13|Update vendored systemu library for Ruby 1.9.2 compatibility |7067|
1630 |2011/04/12|Fix failing tests on Ruby 1.9.2|7067|
1631 |2011/04/11|Update the DDL documentation to reflect the _mco help_ command|7042|
1632 |2011/04/11|Document the use filters on the CLI|5917|
1633 |2011/04/11|Improve handling of unknown facts in Util#has_fact? to avoid exceptions about nil#clone|6956|
1634 |2011/04/11|Correctly set timeout on the discovery agent to 5 seconds as default|7045|
1635 |2011/04/11|Let rpcutil#agent_inventory supply _unknown_ for missing values in agent meta data|7044|
1636
1637 <a name="1_1_4">&nbsp;</a>
1638
1639 ## 1.1.4 - 2011/04/07
1640
1641 This is a release in the development series of mcollective.  It features major
1642 new features and some bug fixes.
1643
1644 This release is for early adopters, production users should consider the 1.0.x series.
1645
1646 ### Actions in other languages
1647
1648 We have implemented the ability to write actions in languages other than Ruby.
1649 This is done via simple JSON API documented in [in our docs](simplerpc/agents.html#actions-in-external-scripts)
1650
1651 The _ext_ directory on [GitHub](https://github.com/puppetlabs/marionette-collective/tree/master/ext/action_helpers)
1652 hosts wrappers for PHP, Perl and Python that makes using this interface easier.
1653
1654 {% highlight ruby %}
1655 action "test" do
1656     implemented_by "/some/external/script"
1657 end
1658 {% endhighlight %}
1659
1660 Special thanks to the community members who contributed the wrappers.
1661
1662 ### Enhancements
1663
1664  * Actions can now be written in any language
1665  * Plugin configuration can be kept in _/etc/mcollective/plugin.d_
1666  * _mco inventory_ now shows collective and sub-collective membership
1667  * mc-controller has been deprecated for _mco controller_
1668  * Agents are now ran using new instances of the classes rather than reuse the exiting
1669    one to avoid concurrency related problems
1670
1671 ### Bug Fixes
1672
1673  * When mcollectived exits it now cleanly disconnects from the Middleware
1674  * The _rpcutil_ agent is less strict about valid Fact names
1675  * The default configuration files have been updated for sub-collectives
1676
1677 ### Backwards Compatibility
1678
1679 This release will be backward compatible with version _1.1.3_ for compatibility
1680 with earlier releases see the notes for _1.1.3_ and the sub collective related
1681 configuration changes.
1682
1683 ### Changes
1684
1685 |Date|Description|Ticket|
1686 |----|-----------|------|
1687 |2011/03/28|Correct loading of vendored JSON gem|6877|
1688 |2011/03/28|Show collective and sub collective info in the inventory application|6872|
1689 |2011/03/23|Disconnect from the middleware when mcollectived disconnects|6821|
1690 |2011/03/21|Update rpcutil ddl file to be less strict about valid fact names|6764|
1691 |2011/03/22|Support reading configuration from configfir/plugin.d for plugins|6623|
1692 |2011/03/21|Update default configuration files for sub-collectives|6741|
1693 |2011/03/16|Add the ability to implement actions using external scripts|6705|
1694 |2011/03/15|Port mc-controller to the Application framework and deprecate the exit command|6637|
1695 |2011/03/13|Only cache registration and discovery agents, handle the rest as new instances|6692|
1696 |2011/03/08|PluginManager can now create new instances on demand for a plugin type|6622|
1697
1698 <a name="1_1_3">&nbsp;</a>
1699
1700 ## 1.1.3 - 2011/03/07
1701
1702 This is a release in the development series of mcollective.  It features major
1703 new features and some bug fixes.
1704
1705 This release is for early adopters, production users should consider the 1.0.x series.
1706
1707 ### Enhancements
1708
1709  * Add the ability to partition collectives into sub-collectives for security and
1710    network traffic management
1711  * Add a exec wrapper for agents that provides unique environments and cwds in a
1712    thread safe manner as well as avoid zombie processes
1713  * Automatically pass Application options to rpcclient when options are not
1714    specifically provided
1715  * Rename _/usr/sbin/mc_ to _/usr/bin/mco_
1716
1717 ### Bug Fixes
1718
1719  * Missing _libdirs_ will not cause crashes anymore
1720  * Parse _MCOLLECTIVE\_EXTRA\_OPTS_ correctly with multiple options
1721  * _file`_`logger_ failures are handled better
1722  * Improve middleware communication in unreliable settings by adding timeouts
1723    around middleware operations
1724
1725 ### Backwards Compatibility
1726
1727 The configuration format has changed slightly to accomodate the concept of
1728 collective names and sub-collectives.
1729
1730 In older releases the configuration was:
1731
1732 {% highlight ini %}
1733 topicprefix = /topic/mcollective
1734 {% endhighlight %}
1735
1736 This has to change to:
1737
1738 {% highlight ini %}
1739 topicprefix = /topic/
1740 main_collective = mcollective
1741 collectives = mcollective
1742 {% endhighlight %}
1743
1744 When setup as above a old and new version will be compatible but as soon as you
1745 start configuring the new sub-collective feature you will loose compatiblity
1746 between versions.
1747
1748 Various defaults apply, if you configure it with these exactly topic and
1749 collective names you can leave off the _main`_`collective_ and _collectives_
1750 directives as the above settings would be their defaults
1751
1752 ### Changes
1753
1754 |Date|Description|Ticket|
1755 |----|-----------|------|
1756 |2011/03/04|Rename /usr/sbin/mc to /usr/bin/mco|6578|
1757 |2011/03/01|Wrap rpcclient in applications ensuring that options is always set|6308|
1758 |2011/02/28|Make communicating with the middleware more robust by including send calls in timeouts|6505|
1759 |2011/02/28|Create a wrapper to safely run shell commands avoiding zombies|6392|
1760 |2011/02/19|Introduce Sub-collectives for network partitioning|5967|
1761 |2011/02/19|Improve error handling when parsing arguments in the rpc application|6388|
1762 |2011/02/19|Fix error logging when file_logger creation fails|6387|
1763 |2011/02/17|Correctly parse MCOLLECTIVE\_EXTRA\_OPTS in the new unified binary framework|6354|
1764 |2011/02/15|Allow the signing key and Debian distribution to be customized|6321|
1765 |2011/02/14|Remove inadvertently included package.ddl|6313|
1766 |2011/02/14|Handle missing libdirs without crashing|6306|
1767
1768 <a name="1_0_1">&nbsp;</a>
1769
1770 ## 1.0.1 - 2011/02/16
1771
1772 ### Release Focus and Notes
1773
1774 This is a minor bug fix release.
1775
1776 ### Bugs Fixed
1777
1778  * The YAML fact plugin failed to remove deleted facts from memory
1779  * The _-_ character is now allowed in Fact names for the rpcutil agent
1780  * Machines that fali security validations were not reported correctly,
1781    they are now treated as having not responded at all
1782  * Timeouts on RPC requests were too aggressive and did not allow for slow networks
1783
1784 ### Backwards Compatibility
1785
1786 This release will be backward compatible with older releases.
1787
1788 ### Changes
1789
1790 |Date|Description|Ticket|
1791 |----|-----------|------|
1792 |2011/02/02|Include full Apache 2 license text|6113|
1793 |2011/01/29|The YAML fact plugin kept deleted facts in memory|6056|
1794 |2012/01/04|Use the LSB based init script on SUSE|5762|
1795 |2010/12/30|Allow - in fact names|5727|
1796 |2010/12/29|Treat machines that fail security validation like ones that did not respond|5700|
1797 |2010/12/25|Allow for network and fact source latency when calculating client timeout|5676|
1798 |2010/12/25|Increase the rpcutil timeout to allow for slow facts|5679|
1799
1800 ## 1.1.2 - 2011/02/14
1801
1802 This is a release in the development series of mcollective.  It features minor
1803 bug fixes and features.
1804
1805 This release is for early adopters, production users should consider the 1.0.x series.
1806
1807 ### Bug Fixes
1808
1809  * The main fix in this release is a packaging bug in Debian systems that prevented
1810    both client and server from being installed on the same machine.
1811  * Backwards compatibility fix for fact filters that are empty strings
1812
1813 ### Enhancement
1814
1815  * Registration plugins can now return nil which will skip that specific registration
1816    message.  This will enable plugins to decide based on some node state if a message
1817    should be sent or not.
1818
1819 ### Changes
1820
1821 |Date|Description|Ticket|
1822 |----|-----------|------|
1823 |2011/02/13|Surpress replies to SimpleRPC clients who did not request results|6305|
1824 |2011/02/11|Fix Debian packaging error due to the same file in multiple packages|6276|
1825 |2011/02/11|The application framework will now disconnect from the middleware for consistency|6292|
1826 |2011/02/11|Returning _nil_ from a registration plugin will skip registration|6289|
1827 |2011/02/11|Set loglevel to warn by default if not specified in the config file|6287|
1828 |2011/02/10|Fix backward compatibility with empty fact strings|6278|
1829
1830 ## 1.1.1 - 2011/02/02
1831
1832 This is a release in the development series of mcollective.  It features major new
1833 features and numerous bug fixes.  Please pay careful attention to the upgrading
1834 section as there is some changes that are not backward compatible.
1835
1836 This release is for early adopters, production users should consider the 1.0.x series.
1837
1838 ### AES+RSA Security Plugin
1839
1840 A new security plugin that encrypts the payloads, uniquely identify senders and secure
1841 replies from inspection by other people on the collective has been written.  The plugin
1842 can re-use Puppet certificates and supports distributing of public keys if you wish.
1843
1844 This plugin and its deployment is very complex and it has a visible performance impact
1845 but we felt it was a often requested feature and so decided to implement it.
1846
1847 Full documentation for this plugin can be found [in our docs](reference/plugins/security_aes.html), please read them very
1848 carefully should you choose to deploy this plugin.
1849
1850 ### Single Executable Framework
1851
1852 In the past a lot of the CLI tools have behaved inconsistently as the mc scripts were
1853 mostly just written to serve immediate needs, we are starting a process of improving
1854 these scripts and making them more robust.
1855
1856 The first step is to create a new framework for CLI commands, we call these Single Executable
1857 Applications.  A new executable called _mc_ is being distributed with this release:
1858
1859 {% highlight console %}
1860 $ mc
1861 The Marionette Collective version 1.1.1
1862
1863 /usr/sbin/mc: command (options)
1864
1865 Known commands: rpc filemgr inventory facts ping find help
1866 {% endhighlight %}
1867
1868 {% highlight console %}
1869 $ mc help
1870 The Marionette Collection version 1.1.1
1871
1872   facts           Reports on usage for a specific fact
1873   filemgr         Generic File Manager Client
1874   find            Find hosts matching criteria
1875   help            Application list and RPC agent help
1876   inventory       Shows an inventory for a given node
1877   ping            Ping all nodes
1878   rpc             Generic RPC agent client application
1879 {% endhighlight %}
1880
1881 {% highlight console %}
1882 $ mc rpc package status package=zsh
1883 Determining the amount of hosts matching filter for 2 seconds .... 51
1884
1885  * [ ============================================================> ] 51 / 51
1886
1887
1888  test.com:
1889     Properties:
1890        {:provider=>:yum,
1891         :release=>"3.el5",
1892         :arch=>"x86_64",
1893         :version=>"4.2.6",
1894         :epoch=>"0",
1895         :name=>"zsh",
1896         :ensure=>"4.2.6-3.el5"}
1897 {% endhighlight %}
1898
1899 You can see these commands behave just like their older counter parts but is more integrated
1900 and discovering available commands is much easier.
1901
1902 Agent help that was in the past available through _mc-rpc --ah agentname_ is now available through
1903 _mc help agentname_ and error reporting is short single line reports by default but by adding
1904 _-v_ to the command line you can get full Ruby backtraces.
1905
1906 We've maintained backward compatibility by creating wrappers for all the old mc scripts but these
1907 might be deprecated in future.
1908
1909 These application live in the normal plugin directories and should make it much easier to distribute
1910 plugins in future.
1911
1912 We will port the scripts for plugins to this framework and encourage you to do the same when writing
1913 new CLI tools.  An example of a ported CLI can be seen in the _filemgr_ agent.
1914
1915 Find the documentation for these plugins [here](reference/plugins/application.html).
1916
1917 ### Miscellaneous Improvements
1918
1919 The logging system has been ra-efactored to not use a Signleton, logging messages are now simply:
1920
1921 {% highlight ruby %}
1922 MCollective::Log.notice("hello world")
1923 {% endhighlight %}
1924
1925 A backwards compatible wrapper exist to prevent existing code from breaking.
1926
1927 In some cases - like when using MCollective from within Rails - the STOMP
1928 gem would fail to decode the payloads.  We've worked with the authors and
1929 a new release was made that makes this more robust but we've also enabled
1930 Base64 encoding on the Stomp connector for those who can't upgrade the Gem
1931 and who are running into this problem.
1932
1933 ### Bug Fixes
1934
1935
1936  * Machines that do not pass security checks are handled as having not responded
1937    so that these are listed in the usual stat for non responsive hosts
1938  * The - character is now allowed in Fact names by the DDL for rpcutil
1939  * Version 1.1.0 introduced a bug with reloading agents from disks using USR1 and mc-controller
1940
1941 ### Enhancements
1942
1943  * New AES+RSA based security plugin was added
1944  * Create a new single executable framework and port several mc scripts
1945  * Security plugins have access to the callerid they are responding to
1946  * The logging methods have been improved by removing the use of Singletons
1947  * The STOMP connector can now Base64 encode all sent data to deal with en/decoding issues by the gem
1948  * The rpcutil agent has a new _ping_ action
1949  * the _mc ping_ client now supports standard filters
1950  * DDL documentation has been updated to show you can disable type validations in the DDL
1951  * Fact plugins can now force fact cache invalidation, the YAML plugin will immediately load new facts when mtime on the file change
1952  * Improve _1.0.0_ compatibility for _foo=/bar/_ style fact matches at the expense of _1.1.0_ compatibility
1953
1954 ### Upgrading
1955
1956 Upgrading should be mostly painless as most things are backward compatible.
1957
1958 We discovered that we broke backward compatibility with _1.0.0_ and _0.4.x_ Fact filters.  A filter in the form
1959 _foo=/bar/_ would be treated as an equality filter and not a regular expression.
1960
1961 This releases fixes this compatibility with older versions at the expense of compatibility with _1.1.0_.  If you
1962 are upgrading from _1.1.0_ keep this in mind and plan accordingly, once you've upgraded a client its requests that
1963 contain these filters will not be correctly parsed on servers running _1.1.0_.
1964
1965 The security plugins have changed slightly, if you wrote your own security plugin the interface to _encodereply_
1966 has changed slightly.  All the bundled security plugins have been updated already and older ones will just
1967 keep working.
1968
1969 ### Changes
1970
1971 |Date|Description|Ticket|
1972 |----|-----------|------|
1973 |2011/02/02|Load the DDL from disk once per printrpc call and not for every result|5958|
1974 |2011/02/02|Include full Apache 2 license text|6113|
1975 |2011/01/31|Create a new single executable application framework|5897|
1976 |2011/01/30|Fix backward compatibility with old foo=/bar/ style fact searches|5985|
1977 |2011/01/30|Documentation update to reflect correct default identity behavior|6073|
1978 |2011/01/29|Let the YAML file force fact reloads when the files update|6057|
1979 |2011/01/29|Add the ability for fact plugins to force fact invalidation|6057|
1980 |2011/01/29|Document an approach to disable type validation in the DDL|6066|
1981 |2011/01/19|Add basic filters to the mc-ping command|5933|
1982 |2011/01/19|Add a ping action to the rpcutil agent|5937|
1983 |2011/01/17|Allow MC::RPC#printrpc to print single results|5918|
1984 |2011/01/16|Provide SimpleRPC style results when accessing the MC::Client results directly|5912|
1985 |2011/01/11|Add an option to Base64 encode the STOMP payload|5815|
1986 |2011/01/11|Fix a bug with forcing all facts to be strings|5832|
1987 |2011/01/08|When using reload_agents or USR1 signal no agents would be reloaded|5808|
1988 |2011/01/04|Use the LSB based init script on SUSE|5762|
1989 |2011/01/04|Remove the use of a Singleton in the logging class|5749|
1990 |2011/01/02|Add AES+RSA security plugin|5696|
1991 |2010/12/31|Security plugins now have access to the callerid of the message they are replying to|5745|
1992 |2010/12/30|Allow - in fact names|5727|
1993 |2010/12/29|Treat machines that fail security validation like ones that did not respond|5700|
1994
1995 ## 1.1.0 - 2010/12/29
1996
1997 This is the first in a new development series, as such there will be rapid changes
1998 and new features.  We cannot guarantee the changes will be backward compatible but
1999 we will as before try to keep these releases solid and production quality.
2000
2001 Production users who do not wish to have rapid change should use release 1.0.0.
2002
2003 This release focus mainly on getting all the community contributed code into a release
2004 and addressing some issues I had but wasn't comfortable fixing them late in the
2005 previous development series.
2006
2007 Please read these notes carefully we are **removing** some old functionality and changing
2008 some internals, you need to carefully review the text below.
2009
2010 ### Bug Fixes
2011
2012  * The progress bar will now try hard to detect screen size and adjust itself,
2013    failing back to a dumb mode if it can't work it out.
2014  * rpcutil timeout was too short when considering slow facts and network latency
2015
2016 ### Improvements
2017
2018  * libdir can now be multiple directories specified with : separation - Thanks to Richard Clamp
2019  * Logging is now pluggable, 3 logger types are supported - file, syslog and console.  Thanks to
2020    Nicolas Szalay for the initial Syslog code
2021  * A new experimental ssh agent based security system.  Thanks to Jordan Sissel
2022  * New fact matching operators <=, >=, <, >, !=, == and =~. Thanks to Mike Pountney
2023  * SimpleRPC fact_filter method can now take any valid fact string as input in addition to the old format
2024  * A message gets logged at startup showing mcollective version and logging level
2025  * The fact plugin format has been changed, simplified, made thread safe and global caching added.
2026    This breaks backward compatibility with old fact sources
2027  * Creating options hashes has been simplified by adding a helper that creates them for you
2028  * Calculating the client timeout has been improved by including for latency and fact source slowness
2029  * Audit log lines are now on one line and include a ISO 8601 format date
2030
2031 ### Removed Functionality
2032
2033  * The old MCOLLECTIVE_TIMEOUT and MCOLLECTIVE_DTIMEOUT were removed, a new MCOLLECTIVE_EXTRA_OPTS
2034    was added which should allow much more flexibility.  Supply any command line options in this var
2035
2036 ### Upgrading
2037
2038 Upgrading should be easy the only backward incompatible change is the Facts format.  If you only use
2039 the included YAML plugin the upgrade will just work if you use the packages.  If you use either the
2040 facter or ohai plugins you will need to download new plugins from the community plugin page.
2041
2042 If you wrote your own Facts plugin you will need to change it a bit:
2043
2044   * The old get_facts method should now be load_facts_from_source
2045   * The class for facts have to be in the form MCollective::Facts::Foo_facts and the filename should match
2046
2047 This is all, your facts can now be much simpler as threading and caching is handled in the base class.
2048
2049 You can place these new plugins into the plugindir before upgrading.  The old mcollective will not use
2050 these plugins and the new one will not touch the old ones.  This will allow for a clean rollback.
2051
2052 Once the new version is deployed you will immediately have caching on all fact types at 3000 seconds
2053 you can tune this using the fact_cache_time setting in the configuration file.
2054
2055 ### Changes
2056
2057 |Date|Description|Ticket|
2058 |----|-----------|------|
2059 |2010/12/28|Adjust the logfile audit format to include local time and all on one line|5694|
2060 |2010/12/26|Improve the SimpleRPC fact_filter helper to support new fact operators|5678|
2061 |2010/12/25|Increase the rpcutil timeout to allow for slow facts|5679|
2062 |2010/12/25|Allow for network and fact source latency when calculating client timeout|5676|
2063 |2010/12/25|Remove MCOLLECTIVE_TIMEOUT and MCOLLECTIVE_DTIMEOUT environment vars in favor of MCOLLECTIVE_EXTRA_OPTS|5675|
2064 |2010/12/25|Refactor the creation of the options hash so other tools don't need to know the internal formats|5672|
2065 |2010/12/21|The fact plugin format has been changed and simplified, the base now provides caching and thread safety|5083|
2066 |2010/12/20|Add parameters <=, >=, <, >, !=, == and =~ to fact selection|5084|
2067 |2010/12/14|Add experimental sshkey security plugin|5085|
2068 |2010/12/13|Log a startup message showing version and log level|5538|
2069 |2010/12/13|Add a console logger|5537|
2070 |2010/12/13|Logging is now pluggable and a syslog plugin was provided|5082|
2071 |2010/12/13|Allow libdir to be an array of directories for agents and ddl files|5253|
2072 |2010/12/13|The progress bar will now intelligently figure out the terminal dimensions|5524|
2073
2074 ## 1.0.0 - 2010/12/13
2075
2076 ### Release Focus and Notes
2077
2078 This is a bug fix and minor improvement release.
2079
2080 We will maintain the 1.0.x branch as a stable supported branch.  The features
2081 currently in the branch will be frozen and we'll only do bug fixes.
2082
2083 A new 1.1.x series of releases will be done where we will introduce new features.
2084 Once the 1.1.x code base reaches a mature point it will become the new stable
2085 release and so forth.
2086
2087 ### Bug Fixes
2088
2089  * Settings like retry times were ignored in the Stomp connector
2090  * The default init script had incorrect LSB comments
2091  * The rpcutil DDL has better validation and will now match all facts
2092
2093 ### New Features and Enhancements
2094
2095  * You can now send RPC requests to a subset of discovered nodes
2096  * SimpleRPC custom_request can now be used to create fire and forget requests
2097  * Clients can now cleanly disconnect from the middleware.  Bundled clients have been
2098    updated.  This should cause fewer exceptions in ActiveMQ logs
2099  * Rather than big exceptions many clients will now log errors only
2100  * mc-facts has been reworked to be a SimpleRPC client, this speeds it up significantly
2101  * Add get_config_item to rpcutil to retrieve a running config value from a server
2102  * YAML facts are now forced to be all strings and is thread safe
2103  * On RedHat based systems the requirement for the LSB packages has been removed
2104
2105 The first feature is a major new feature in SimpleRPC.  If you expose a service redundantly
2106 on your network using MCollective you wouldn't always want to send requests to all the
2107 nodes providing the service.  You can now limit the requests to an arbitrary amount
2108 using the new --limit-nodes option which will also take a percentage.  A shortcut -1 has
2109 been added that is the equivalent to --limit-nodes 1
2110
2111 ### Backwards Compatibility
2112
2113 This release will be backward compatible with older releases.
2114
2115 ### Changes
2116
2117 |Date|Description|Ticket|
2118 |----|-----------|------|
2119 |2010/12/04|Remove the LSB requirements for RedHat systems|5451|
2120 |2010/11/23|Make the YAML fact source thread safe and force all facts to strings|5377|
2121 |2010/11/23|Add get_config_item to rpcutil to retrieve a running config value from a server|5376|
2122 |2010/11/20|Convert mc-facts into a SimpleRPC client|5371|
2123 |2010/11/18|Added GPG signing to Rake packaging tasks (SIGNED=1)|5355|
2124 |2010/11/17|Improve error messages from clients in the case of failure|5329|
2125 |2010/11/17|Add helpers to disconnect from the middleware and update all bundled clients|5328|
2126 |2010/11/16|Correct LSB provides and requires in default init script|5222|
2127 |2010/11/16|Input validation on rpcutil has been improved to match all valid facts|5320|
2128 |2010/11/16|Add the ability to limit the results to a subset of hosts|5306|
2129 |2010/11/15|Add fire and forget mode to SimpleRPC custom_request|5305|
2130 |2010/11/09|General connection settings to the Stomp connector was ignored|5245|
2131
2132 ## 0.4.10 - 2010/10/18
2133
2134 ### Release Focus and Notes
2135
2136 This is a bug fix and minor improvement release.
2137
2138 ### Bug Fixes
2139
2140  * Multiple RPC proxy classes in the same script would not all share the same command line options
2141  * Ruby 1.9.x compatibility has been improved
2142  * A major bug in registration has been fixed, any exception in the registration logic would have
2143    resulted in a high CPU consuming loop
2144
2145 The last bug is a major issue it will result in the _mcollectived_ consuming lots of CPU, updating to
2146 this version of MCollective is strongly suggested.  Should you run into this problem on a large scale
2147 you can use _mc-controller exit_ to exit all your _mcollectived_ processes at the same time.
2148
2149 ### New Features and Enhancements
2150
2151  * The PSK security plugin can now be configured to set the callerid to a few different values
2152    useful for cases where you want to do group based RPC Authorization for example.
2153  * Info logging has been minimised by demoting the 'not targeted at us' message to debug
2154  * Document the 'exit' option to mc-controller
2155
2156 ### Backwards Compatibility
2157
2158 This release will be backward compatible with older releases.
2159
2160 ### Changes
2161
2162 |Date|Description|Ticket|
2163 |----|-----------|------|
2164 |2010/10/18|Document exit command to mc-controller|152|
2165 |2010/10/13|Log messages that don't pass the filters at debug level|149|
2166 |2010/10/03|Preserve options in cases where RPC::Client instances exist in the same program|148|
2167 |2010/09/30|Add the ability to set different types of callerid in the PSK plugin|145|
2168 |2010/09/30|Improve Ruby 1.9.x compatibility|142|
2169 |2010/09/29|Improve error handling in registration to avoid high CPU usage loops|143|
2170
2171
2172 ## 0.4.9 - 2010/09/21
2173
2174 ### Release Focus and Notes
2175
2176 This is a bug fix and minor improvement release.
2177
2178 ### Bug Fixes
2179
2180  * Internal data structure related to Agent meta data has been fixed, no user impact from this
2181  * When using per-user config files the _rpc-help.erb_ template could not be found
2182  * The log files will now rotate by default keeping 5 x 2MB files
2183  * The config were parsed multiple times in complex scripts, this has been eliminated
2184  * MCollective::RPC loaded a bunch of unneeded stuff into Object, this has been cleaned up
2185  * Various packaging related tweaks were done
2186
2187 ### New Features
2188
2189  * We ship a new agent called _rpcutil_ with the base system, you can use this agent to get inventory etc from your _mcollectived_.  _mc-inventory_ has been rewritten to use this agent and should serve as a good reference for what you can get from the agent.
2190  * The DDL now support :boolean style inputs, mc-rpc also turn true/false on the command line into booleans when needed
2191
2192 ### Backwards Compatibility
2193
2194 This release will be backward compatible with older releases.
2195
2196 ### Changes
2197
2198 |Date|Description|Ticket|
2199 |----|-----------|------|
2200 |2010/09/20|Improve Debian packaging task|140|
2201 |2010/09/20|Add :boolean type support to the DDL|138|
2202 |2010/09/19|Refactor MCollective::RPC to add less unneeded stuff to Object|137|
2203 |2010/09/18|Prevent duplicate config loading with multiple clients active|136|
2204 |2010/09/18|Rotate the log file by default, keeping 5 x 2MB files|135|
2205 |2010/09/18|Write a overview document detailing security of the collective|131|
2206 |2010/09/18|Add MCollective.version, set it during packaging and include it in the rpcutil agent|134|
2207 |2010/09/13|mc-inventory now use SimpleRPC and the rpcutil agent and display server stats|133|
2208 |2010/09/13|Make the path to the rpc-help.erb configurable and set sane default|130|
2209 |2010/09/13|Make the configfile used available in the Config class and add to rpcutil|132|
2210 |2010/09/12|Rework internal statistics and add a rpcutil agent|129|
2211 |2010/09/12|Fix internal memory structures related to agent meta data|128|
2212 |2010/08/24|Update the OpenBSD port for changes in 0.4.8 tarball|125|
2213 |2010/08/23|Fix indention/block error in M:R:Stats|124|
2214 |2010/08/23|Fix permissions in the RPM for files in /etc|123|
2215 |2010/08/23|Fix language in two error messages|122|
2216
2217 ## 0.4.8 - 2010/08/20
2218
2219 ### Release Focus and Notes
2220
2221 This is a bug fix and minor improvement release.
2222
2223 ### Bug Fixes
2224
2225  * The RPM packages now require redhat-lsb since our RC scripts need it
2226  * The rake tasks do not attempt to build rpms on all platforms
2227  * Some plugin missing related exceptions are now handled gracefully
2228  * The Rakefile had a few warnings cleaned up
2229
2230 ### Notable New Features
2231
2232  * Users can now have a _~/.mcollective_ file which will be preferred over over _/etc/mcollective/client.cfg_ if it exists.  You can still use _--config_ to override.
2233
2234  * The SSL Security plugin can now use "either YAML or Marshal for serialization":/reference/plugins/security_ssl.html#serialization_method, this means other programming languages can be used as clients.  A sample Perl client is included in the ext directory.  Marshal remains the default for backwards compatibility
2235
2236  * _mc-inventory_ can now be used to create "custom reports using a small reporting DSL":/reference/ui/nodereports.html, this enable you to build custom reports listing all your machines and gives you access to facts, agents and classes lists.
2237
2238  * The log level for the _mcollectived_ can be adjusted during run time using the _USR2_ unix process signal.
2239
2240 ### Backwards Compatibility
2241
2242 This release will be backward compatible with older releases.  If you choose to use YAML in the SSL plugin you need matching versions on the client.
2243
2244 ### Changes
2245
2246 |Date|Description|Ticket|
2247 |----|-----------|------|
2248 |2010/08/19|Fix missing help template in debian packages|90|
2249 |2010/08/18|Clean up some hardlink warnings in the Rakefile|117|
2250 |2010/08/18|Include the website in the main repo and add a simple Rake task|118|
2251 |2010/08/17|Handle exceptions for missing plugins better|115|
2252 |2010/08/17|Add support for ~/.mcollective as a config file|114|
2253 |2010/08/07|SSL security plugin can use either YAML or Marshal|94|
2254 |2010/08/06|Multiple YAML files can now be used as fact source|112|
2255 |2010/08/06|Allow log level to be adjusted at run time with USR2|113|
2256 |2010/07/31|Add basic report scripting support to mc-inventory|111|
2257 |2010/07/06|Removed 'rpm' from the default rake task|109|
2258 |2010/07/06|Add redhat-lsb to the server RPM dependencies|108|
2259
2260 ## 0.4.7 - 2010/06/29
2261
2262 ### Release Focus and Notes
2263
2264 This is a bug fix and incremental improvement release focusing on small improvements in the DDL mostly.
2265
2266 ### Data Definition Language
2267
2268 We've extended the use of the DDL in the RPC client.  We've integrated the DDL into _printrpc_ helper.  The output is dynamic showing field names in human readable format rather than hash dumps.
2269
2270 We're also using color to improve the display of the results, the color display can be disabled with the new _color_ configuration option.
2271
2272 A "screencast of the DDL integration":http://mcollective.blip.tv/file/3799653 and color usage has been recorded.
2273
2274 ### Bug Fixes
2275
2276 A serious issue has been fixed with regard to complex agents.  If you attempted to use multiple agents from the same script errors such as duplicate discovery results or simply not working.
2277
2278 The default fact source has been changed to YAML, it was inadvertently set to Facter in the past.
2279
2280 Some previously unhandled exceptions are now being handled correctly and passed onto the clients as failed requests rather than no responses at all.
2281
2282 ### Backwards Compatibility
2283
2284 This release will be backward compatible with older releases.  The change to YAML fact source by default might impact you if you did not previously specify a fact source in the configuration files.
2285
2286 ### Changes
2287
2288 |Date|Description|Ticket|
2289 |----|-----------|------|
2290 | 2010/06/27 | Change default factsource to YAML|106|
2291 | 2010/06/27 | Added VIM snippets to create DDLs and Agents|102|
2292 | 2010/06/26 | DDL based help now works better with Symbols in in/output|105|
2293 | 2010/06/23 | Whitespace at the end of config lines are now stripped|100|
2294 | 2010/06/22 | printrpc will now inject some colors into results|99|
2295 | 2010/06/22 | Recover from syntax and other errors in agents|98|
2296 | 2010/06/17 | The agent a MC::RPC::Client is working on is now available|97|
2297 | 2010/06/17 | Integrate the DDL with data display helpers like printrpc|92|
2298 | 2010/06/15 | Avoid duplicate topic subscribes in complex clients|95|
2299 | 2010/06/15 | Catch some unhandled exceptions in RPC Agents|96|
2300 | 2010/06/15 | Fix missing help template file from RPM|90|
2301
2302 ## 0.4.6 - 2010/06/14
2303
2304 ### Release Focus and Notes
2305
2306 This release is a major feature release.
2307
2308 We're focusing mainly on the Stomp connector and on the SimpleRPC agents in this release though a few smaller additions were made.
2309
2310 ### Stomp Connector
2311
2312 We've historically been stuck just using RubyGem Stomp 1.1 due to multi threading bugs in the newer releases.  All attempts to contact the authors failed.  Recently though I had some luck and these issues are resolved in the RubyGem Stomp 1.1.6 release.
2313
2314 This means we can take advantage of a lot of new features such as connection pooling for failover/ha and also SSL TLS between nodes and ActiveMQ server.
2315
2316 See "Stomp Connector":/reference/plugins/connector_stomp.html for details.
2317
2318 ### RPC Agent Data Description Language
2319
2320 I've been working since around February on building introspection, automatically generated documentation and the ability for user interfaces to be auto generated for agents, even ones you write your self.
2321
2322 This feature is documented in "DDL":/simplerpc/ddl.html but a quick example of a DDL document might help make it clear:
2323
2324 ### CLI Utilities changes
2325
2326   * _mc-facts_ now take all the standard filters so you can make reports for just subsets of machines
2327   * A new utility _mc-inventory_ has been added, it will show agents, facts and classes for a node
2328   * _mc-rpc_ has a new option _--agent-help_ that will use the DDL and display auto generated documentation for an agent.
2329   * _mc-facts_ output is sorted for better readability
2330
2331 ### Backwards Compatibility
2332
2333 This release will be backward compatible with older releases, the new Stomp features though require the newer Ruby Gem.
2334
2335 ### Changes
2336
2337 |Date|Description|Ticket|
2338 |----|-----------|------|
2339 | 2010/06/12 | Qualify the Process class to avoid clashes in the discovery agent|88|
2340 | 2010/06/12 | Add mc-inventory which shows agents, classes and facts for a node|87|
2341 | 2010/06/11 | mc-facts now supports standard filters|86|
2342 | 2010/06/11 | Add connection pool retry options and SSL for connection|85|
2343 | 2010/06/11 | Add support for specifying multiple stomp hosts for failover|84|
2344 | 2010/06/10 | Tighten up handling of filters to avoid nil's getting into them|83|
2345 | 2010/06/09 | Sort the mc-facts output to be more readable|82|
2346 | 2010/06/08 | Fix deprecation warnings in newer Stomp gems|81|
2347
2348 ## 0.4.5 - 2010/06/03
2349
2350 ### Release Focus and Notes
2351
2352 This release is a major feature release.
2353
2354 The focus of this release is to finish up some of the more enterprise like features, we now have fine grained Authorization and Authentication and a new security model that uses SSL keys.
2355
2356 ### Security Plugin
2357
2358 Vladimir Vuksan contributed the base code of a new "SSL based security plugin":/reference/plugins/security_ssl.html .  This plugin builds on the old PSK plugin but gives each client a unique certificate pair.  The nodes all share a certificate and only store client public keys.  This means that should one node be compromised it cannot be used to control the rest of the network.
2359
2360 ### Authorization Plugin
2361
2362 We've developed new hooks and plugins for SimpleRPC that enable you to write "fine grained authorization systems":/simplerpc/authorization.html .  You can do authorization on every aspect of the request and you'll have access to the caller userid as provided by the security plugin.  Combined with the above SSL plugin this can be used to build powerful and secure Authentication and Authorization systems.
2363
2364 A sample plugin can be found "here":http://code.google.com/p/mcollective-plugins/wiki/ActionPolicy
2365
2366 ### Enhancements for Web Development
2367
2368 Web apps doesn't tie in well with our discover, request, wait model.  We've made it easier for web apps to maintain their own cached discovery data using the "Registration:/reference/plugins/registration.html system and then based on that do requests that would not require any discovery.
2369
2370 ### Fire and Forget requests
2371
2372 It is often desirable to just send a request and not wait for any reply.  We've made it easy to do requests like this] with the addition of a new request parameter on the SimpleRPC client class.
2373
2374 Requests like this will not take any time to do discovery and you will not be able to get results back from the agents.
2375
2376 ### Reloading Agents
2377
2378 To make it a bit easier to manage daemons and agents you can now send the _mcollectived_ a _USR1_ signal and it will re-read all it's agents from disk.
2379
2380 ### Backwards Compatibility
2381
2382 This release when used with the old style PSK plugin should be perfectly backward compatible with your existing agents.  To use some of the newer features like authorization will require config and/or agent changes.
2383
2384 ### Changes
2385
2386 |Date|Description|Ticket|
2387 |----|-----------|------|
2388 | 2010/06/01 | Improve the main discovery agent by adding facts and classes to its inventory action|79|
2389 | 2010/05/30 | Add various helpers to get reports as text instead of printing them|43|
2390 | 2010/05/30 | Add a custom_request method to call SimpleRPC agents with your own discovery|75|
2391 | 2010/05/30 | Refactor RPC::Client to be more generic and easier to maintain|75|
2392 | 2010/05/29 | Fix a small scoping issue in Security::Base|76|
2393 | 2010/05/25 | Add option --no-progress to disable progress bar for SimpleRPC|74|
2394 | 2010/05/23 | Add some missing dependencies to the RPMs|72|
2395 | 2010/05/22 | Add an option _:process_results_ to the client|71|
2396 | 2010/05/13 | Fix help output that still shows old branding|70|
2397 | 2010/04/27 | The supplied generic stompclient now accepts STOMP_PORT in the environment|68|
2398 | 2010/04/26 | Add a SimpleRPC Client helper to reset filters|64|
2399 | 2010/04/26 | Listen for signal USR1 and reload all agents from disk|65|
2400 | 2010/04/12 | Add SimpleRPC Authorization support|63|
2401
2402
2403 ## 0.4.4 - 2010/04/03
2404
2405 ### Release Focus and Notes
2406
2407 This release is mostly a bug fix release.
2408
2409 We've cleaned up the logs a bit so you'll see fewer exceptions logged, also if you have Rails + Puppet on a node the logs will stay in the standard format.  We are handling some exceptions better which has improved stability of the registration system.
2410
2411 If you do some slow queries in your discovery agent you can bump the timeout up in the config using _plugin.discovery.timeout_.
2412
2413 All the scripts now use _/usr/bin/env ruby_ rather than hardcoded paths to deal better with Ruby's in weird places.
2414
2415 Several other small annoyances was fixed or improved.
2416
2417 ### mc-controller
2418
2419 We've always had a tool that let you control a network of mcollective instances remotely, it lagged behind a bit with the core, we've fixed it up and documented it "here":/reference/basic/daemon.html .  You can use it to reload agents from disk without restarting the daemon for example or get stats or shut down the entire mcollective network.
2420
2421 ### Backwards Compatibility
2422
2423 No changes that impacts backward compatibility has been made.
2424
2425 ### Changes
2426
2427 |Date|Description|Ticket|
2428 |----|-----------|------|
2429 | 2010/03/27 | Make it easier to construct SimpleRPC requests to use with the standard client library|60|
2430 | 2010/03/27 | Manipulating the filters via the helper methods will force rediscovery|59|
2431 | 2010/03/23 | Prevent Activesupport when brought in by Facter from breaking our logs|57|
2432 | 2010/03/23 | Clean up logging for messages not targeted at us|56|
2433 | 2010/03/19 | Add exception handling to the registration base class|55|
2434 | 2010/03/03 | Use /usr/bin/env ruby instead of hardcoded paths|54|
2435 | 2010/02/17 | Improve mc-controller and document it|46|
2436 | 2010/02/08 | Remove some close coupling with Stomp to easy creating of other connectors|49|
2437 | 2010/02/01 | Made the discovery agent timeout configurable using plugin.discovery.timeout|48|
2438 | 2010/01/25 | mc-controller now correctly loads/reloads agents.|45|
2439 | 2010/01/25 | Building packages has been improved to ensure rdocs are always included|44|
2440
2441
2442 ## 0.4.3 - 2010/01/24
2443
2444 ### Release Focus and Notes
2445
2446 This release fixes a few bugs and introduce a major new SimpleRPC feature for auditing requests.
2447
2448 ### Auditing
2449
2450 We've created an "auditing framework for SimpleRPC":/simplerpc/auditing.html, each request gets passed to an audit plugin for processing.  We ship one that simply logs to a file on each node and there's a "community plugin":http://code.google.com/p/mcollective-plugins/wiki/AuditCentralRPCLog that logs everything on a central logging host.
2451
2452 In future we might add auditing to the client libraries so requests will be logged where they are sent as well as auditing of replies being sent, this will be driven by requests from the community though.
2453
2454 ### New _fail!_ method for SimpleRPC
2455
2456 Till now while writing agents you can use the _fail_ method to set statuses in the reply, this however did not also raise exceptions and terminate execution of the agent immediately.
2457
2458 Often the existing behavior is required but it did lead to some awkward code when you did want to just exit the agent immediately as well as set a fail status.  We've added a _fail!_ method that works just like _fail_ except it stops execution of your agent immediately.
2459
2460 ### Backwards Compatibility
2461
2462 No changes that impacts backward compatibility has been made.
2463
2464 ### Changes
2465
2466 |Date|Description|Ticket|
2467 |----|-----------|------|
2468 | 2010/01/23 | Handle ctrl-c during discovery without showing exceptions to users|34|
2469 | 2010/01/21 | Force all facts in the YAML fact source to be strings|41|
2470 | 2010/01/19 | Add SimpleRPCAuditing audit logging to SimpleRPC clients and Agents| |
2471 | 2010/01/18 | The SRPM we provide will now build outside of the Rake environment|40|
2472 | 2010/01/18 | Add a _fail!_ method to RPC::Agent|37|
2473 | 2010/01/18 | mc-rpc can now be used without supplying arguments|38|
2474 | 2010/01/18 | Don't raise an error if no user/pass is given to the stomp connector, try unauthenticated mode|35|
2475 | 2010/01/17 | Improve error message when Regex validation failed on SimpleRPC input|36|
2476
2477
2478 ## 0.4.2 - 2010/01/14
2479
2480 ### Release Focus and Notes
2481
2482 This release fixes a few bugs, add some command line improvements and brings major changes to the Debian packaging.
2483
2484 ### Packaging
2485
2486 Firstly we've had some amazing work done by Riccardo Setti to make us Debian packages that complies with Debian and Ubuntu policy, this release use these new packages.  It has some unfortunate changes to file layout detailed below but overall I think it's a big win to get us in line with Distribution policies and standards.
2487
2488 The only major change is that in the past we used _/usr/libexec/mcollective_ as the libdir, but Debian does not have this directory and it is not in the LFHS anymore so we now use _/usr/share/mcollective/plugins_ as the lib dir.  You need to move your plugins there and update both client and server configs.
2489
2490 The RedHat packages will move to this convention too in the next release since I think it's the better location and complies with LFHS.
2491
2492 ### Command Line Improvements
2493
2494 We've streamlined the command line a bit, nothings changed we've just added some flags.
2495
2496 The _--with-class_, _--with-fact_, _--with-agent_ and _--with-identity_ now all have a short form _-C_, _-F_, _-A_ and _-I_ respectively.
2497
2498 We've added a new filter option _--with_ and a short form _-W_ that combines _--with-class_ and _--with-fact_ into one filter type, use case would be:
2499
2500 {% highlight console %}
2501   % mc-find-hosts -W "/centreon/ country=de roles::dev_server/"
2502 {% endhighlight %}
2503
2504 This would find hosts with class regex matched _/centreon/_, class _roles::dev_server_ and fact matching _country=de_.  Hopefully this saves on some typing.
2505
2506 You can also now set the environment variables _MCOLLECTIVE_TIMEOUT_ and _MCOLLECTIVE_DTIMEOUT_ which saves you from typing _--timeout_ and _--discovery-timeout_ often, especially useful on very fast networks.
2507
2508 ### Other fixes and improvements
2509
2510  * We've added the COPYING file to all the packages
2511  * We've made the init script more LSB compliant
2512  * A bug related to discovery in SimpleRPC was fixed
2513
2514 ### Backwards Compatibility
2515
2516 The only backwards issue is the Debian packages.  They've been tested to upgrade cleanly but you need to change the config as above.
2517
2518 ### Changes
2519
2520 |Date|Description|Ticket|
2521 |----|-----------|------|
2522 | 2010/01/13 | New packaging for Debian provided by Riccardo Setti|29|
2523 | 2010/01/07 | Improved LSB compliance of the init script - thanks Riccardo Setti|32|
2524 | 2010/01/07 | Multiple calls to SimpleRPC client would reset discovered hosts|31|
2525 | 2010/01/04 | Timeouts can now be changed with MCOLLECTIVE_TIMEOUT and MCOLLECTIVE_DTIMEOUT environment vars|25|
2526 | 2010/01/04 | Specify class and fact filters easier with the new -W or --with option|27 |
2527 | 2010/01/04 | Added COPYING file to RPMs and tarball|28|
2528 | 2010/01/04 | Make shorter filter options -C, -I, -A and -F|26|
2529
2530 ## 0.4.1 - 2010/01/02
2531
2532 ### Release Focus and Notes
2533
2534 This is a bug fix release to address some shortcomings and issues found in Simple RPC.
2535
2536 The main issue is around handling of meta data in agents, the documented approach did not work, we've now solved this by adding a number of hooks into the processing of Simple RPC agents.
2537
2538 We've also made logging and config retrieval a bit easier in agents - and documented this.
2539
2540 You can now call the _mc-rpc_ command a bit easier:
2541
2542 {% highlight console %}
2543   % mc-rpc --agent helloworld --action echo --argument msg="hello world"
2544   % mc-rpc helloworld echo msg="hello world"
2545 {% endhighlight %}
2546
2547 The 2 calls are the same, you can pass as many arguments in _key=val_ pairs as needed at the end.
2548
2549 ### Backwards Compatibility
2550
2551 No issues with backward compatibility, should be a simple upgrade.
2552
2553 ### Changes
2554
2555 |Date|Description|Ticket|
2556 |----|-----------|------|
2557 | 2010/01/02 | Added hooks to plug into the processing of requests, also enabled setting meta data and timeouts|14|
2558 | 2010/01/02 | Created readers for @config and @logger in the SimpleRPC agent|23|
2559 | 2009/12/30 | Don't send out any requests if no nodes were discovered|17|
2560 | 2009/12/30 | Added :discovered and :discovered_nodes to client stats|20|
2561 | 2009/12/30 | Add a empty_filter? helper to the RPC mixin|18|
2562 | 2009/12/30 | Fix formatting bug with progress bar|21|
2563 | 2009/12/29 | Simplify mc-rpc command line|16|
2564 | 2009/12/29 | Fix layout issue when printing hosts that did not respond|15|
2565
2566
2567 ## 0.4.0 - 2009/12/29
2568
2569 ### Release Focus and Notes
2570
2571 This release introduced a major new feature - Simple RPC - a framework for easily building clients and agents.  More than that it's a set of conventions and standards that will help us build generic clients like web based ones capable of talking to all agents.
2572
2573 We think this feature is ready for wide use, it's well documented and we've done extensive testing.  We'll be porting some of our own code over to it once this release is out and we do anticipate there might be some _0.4.x_ releases to round off a few issues that might remain.  We do not currently have any open tickets against Simple RPC.
2574
2575 We've also added the ability to create more complex queries such as:
2576
2577 {% highlight console %}
2578 --with-class /dev_server/ --with-class /rails/
2579 {% endhighlight %}
2580
2581 This does an _AND_ operation on the puppet classes on the node and finds only nodes with both _/dev_server/_ *AND* _/rails/_ classes.  This new functionality applies to all types of filter.
2582
2583 We've made the _--with-class_ filters more generic in comments, documentation etc with an eye to be more usable in Chef and other Configuration Management environments.
2584
2585 ### Backwards Compatibility
2586
2587 Unfortunately introducing the new filtering methods has some backward compatibility issues, if you had clients/agents with code like:
2588
2589 {% highlight ruby %}
2590    options[:filter]["agent"] = "some agent"
2591 {% endhighlight %}
2592
2593 You should now change that to:
2594
2595 {% highlight ruby %}
2596    options[:filter]["agent"] << "some agent"
2597 {% endhighlight %}
2598
2599 As each filter is an array now.  If you do not change the code it will still work as before but you will not be able to use the compound filtering feature on filter types that you've forced to be a string and there might be some other undesired side effects.  We've tried though to at least not break old code, they just can't use the new features.
2600
2601 You were also able to test easily in the past if you're running unfiltered using
2602 something like:
2603
2604 {% highlight ruby %}
2605    if options[:filter] == {}
2606 {% endhighlight %}
2607
2608 Now that's much harder and we've added a helper to make this easier:
2609
2610 {% highlight ruby %}
2611    if MCollective::Util.empty_filter?(options[:filter])
2612 {% endhighlight %}
2613
2614 This new method is compatible with both the old and new filter method so you can start using it before you finish the first issue mentioned here.
2615
2616 We've also made the class filter more generic, in the past you did class filters like this:
2617
2618 {% highlight ruby %}
2619    options[:filter]["puppet_class"] << /apache/
2620 {% endhighlight %}
2621
2622 Now you have to adjust it to:
2623
2624 {% highlight ruby %}
2625    options[:filter]["cf_class"] << /apache/
2626 {% endhighlight %}
2627
2628 Old code will keep working but you should change to this name for filters to be consistent with the rest of the code base.
2629
2630 ### Changes
2631
2632 |Date|Description|Ticket|
2633 |----|-----------|------|
2634 | 2009/12/28 | Add support for other configuration management systems like chef in the --with-class filters|13|
2635 | 2009/12/28 | Add a _Util.empty`_`filter?_ to test for an empty filter| |
2636 | 2009/12/27 | Create a new client framework SimpleRPCIntroduction|6|
2637 | 2009/12/27 | Add support for multiple filters of the same type|3|
2638
2639 ## 0.3.0 - 2009/12/17
2640
2641 ### Release Focus and Notes
2642
2643 Primarily a bug fix release.  Only new feature is to allow the user to create _MCollective::Util::`*`_ classes and put those in the plugins directory.  This is useful for more complex agents and clients.
2644
2645 ### Backwards Compatibility
2646
2647 This release should not break any older code, if it does it's a bug.
2648
2649 ### Changes
2650
2651 |Date|Description|Ticket|
2652 |----|-----------|------|
2653 |2009/12/16|Improvements for newer versions of Ruby where TERM signal was not handled|7|
2654 |2009/12/07|MCollective::Util is now a module and plugins can drop in util classes in the plugin dir| |
2655 |2009/12/07|The Rakefile now works with rake provided on Debian 4 systems|2|
2656 |2009/12/07|Improvements in the RC script for Debian and older Ubuntu systems|5|
2657
2658 ## 0.2.0 - 2009/12/02
2659
2660 ### Release Focus and Notes
2661
2662 First numbered release
2663
2664 ### Backwards Compatibility
2665
2666 n/a
2667
2668 ### Changes
2669
2670 n/a