15348 - aggregate functions should have access to the full reply not just the data section

While first designing the aggregate interface we thought aggregate
functions would only need access to the data and not information like
reply status or sender.

In exploring what kind of functions can be written we decided to write a
function that detects outliers in result sets and found we'd want to
report the outliers by name and data.

This commit makes the full reply available to the aggregate functions so
they can figure out hostnames and status etc as well
15348 - aggregate functions should have access to the full reply not just the data section

Correctly pass all the data to the aggregate functions
15366 - deterministic random selection only works with % choices

When the initial work was done to support deterministic random
selections of hosts we only supported this for percentages of hosts but
there is no reason we cant support the same behavior for fixed number of
hosts

This commit adds support to both types of limits
15348 - aggregate functions should have access to the full reply not just the data section

A further rework of the aggregate functions, passing in the full reply
is problematic as there are several representations of the full reply.

We now use the RPC representation of a full reply which should be least
surprising to the user

Add tests and fix some stats tracing during block mode for rpc results
maint: fix old google code urls
15421 - Update OpenBSD port files to current version of mcollective

Update OpenBSD port files for MCollective 2.1.0
15368 - Plugin Packager dependencies should include the correct version

In the past packages dependencies were defined by the package name only.

Dependencies are now created with the correct package version.
15445 - code generator should not put metadata in agents only ddls

In the past the agent code generator generated metadata in the agent
file.

Metadata is now limited to the ddl only.
15445 - code generator should not put metadata in agents only ddls

update changelog
15273 - add an option to force display => failed behavior to rpc app

Since introducing summaries in the DDL it seems it would be common to
only ever want to see the summaries for some sets of results.

A package status query for example might scroll for pages when really
all you want is the summary.

This patch adds a --display flag that takes ok, all or failed as options
which maps to :ok, :always and :failed in the DDL display field
15474 - when loading agents try to instantiate an instance of each and validate it works

Agents that fail to load like ones that gets a DDL failure from the RPC
system still showed up in the plugin list and could theoretically be
instantiated by things like rpcutil agent agent_inventory.

We now try to instantiate an instance of each agent at load time and if
we cant we kick it out of the agent list and log errors.  This is not a
perfect test but will catch any issues in the constructor which seems to
be the norm so far for big scale validations
15379 - release 2.1.1

Write release notes, update changelog and update version in Rakefile
15379 - release 2.1.1

Fix debian packaging
15473 - improve error handling in 'plugin generate'

Previously the generator would terminate with a ruby
exception if a plugin type wasn't specified.

The error has been cleaned up and now explains that the
generator didn't run because of an undefined plugin type.
15473 - improve error handling in 'plugin generate'

Update changelog
15506 - RPC::Client#discovery_method should be set to config default if not supplied

When initial options were not supplied or didnt contain discovery_method
we defaulted to nil.

During discovery we check for discovery method == 'mc' and then do some
optimization around direct requests to avoid doing discovery when its
not needed.

The combination meant that when discovery_method wasn't specifically set
in the config the default got ignored and these optimizations weren't
active.
15109 - Refactor DDL to be a class per type of DDL

The DDL for all different plugins used to be contained in one big class,
this splits that class out into a base and several sub classes that
captures the behavior for individual plugin types.

The base standardizes the metadata, input and output so that these stays
constant throughout the various types of DDL.

The old DDL class has been turned into a module instead of a class but
unfortunately no good way could be found to not require all existing DDL
related code to change other than providing a custom #new method on this
module that is a factory for the specific DDL classes.  While not ideal
the only improvement we'd have made would be to call this factory
something else, the basic behavior would have stayed the same.  With
this factory in place all existing DDL related code in applications,
sample web apps etc seem to Just Work.

Tests have also been similarly split.
15557 - input validation should be done on the server too

We recently started requiring the DDL on the agents but did not do much
past using their metadata.

On the clients requests are validated against the DDL prior to sending
it across the wire but no matching validation is done on the agents
unless users code specific validate logic into their agents.

Prior to doing authorization we now validate the incoming request
against the DDL, this will validate all the inputs against the
:validation clauses in the DDL files.

This means the validation is consistant on both the client and the
server and will make agents easier to write.  We will make the various
validation modes pluggable and expose those into the DDL soon thus
improving the quality and types of validation thats possible in the DDL.
15558 - update 'name' fields in shipped agent DDLs for better error messages

Change the name field in the rpcutil DDL to a single word
15602 - discovery timeout being incorrectly calculated

Prior to this commit the logic to calculate discovery timeout were
spread all over the code.  This is a legacy throwback from before any
one piece of code was responsible for discovery.

We recently added a discovery plugin subsystem that codifies discovery
behavior but the discovery timeout calculations were not completely
moved into this subsystem.

This commit moves all the discovery claculations into the M::Discovery
class and everywhere else that needs to show or calculate discovery time
is using this single piece of logic to calculate the timeouts needed for
any given request