(#PUP-1046) Add spec test for skeleton for generated modules

This patch adds a simple spec test to ensure that by including the
class with default values for all the parameters, that the class is
contained within the catalog.
(#FORGE-38) Add Rakefile to skeleton for generated modules

This patch adds a simple Rakefile that provides rake tasks `lint` for
puppet-lint, `validate` for validation of manifests, templates, and ruby
files, and the tasks provided by the puppetlabs_spec_helper.
(PUP-1586) allow managing existing cronjobs without caring for command

When the catalog contains a cron resource that does not specify a value
for the command property, the transaction would fail with the cryptic
error message 'no command, somehow' under certain conditions.

This error is spurious. Generally, it's quite allowable to manage a subset
of cron properties that does not include the command. Fixed by removing
the devfail invocation. The command property is now handled just like
the 'special' property.
(PUP-1586) remove obsolete unit test

The cron type unit test titled "it should require a command when adding
a new entry" did not quite do what it said. What it actually tested was
that the type would raise an exception when an empty command should-value
was accessed.

This can be safely removed, as PUP-1587 will implement a more sensible
protection against the creation of cronjobs that lack a command, including
a working integration test.
(PUP-1587) crontab: make sure that invalid crontabs aren't written out

It is permissible to manage cron entries and not manage the command
property. However, if the entry doesn't exist on the target system yet,
puppet should not try to create it.

In other words, a cron resource without a should value for the command
property can only be synced to a valid state if the corresponding resource
on the target system has a valid command value already.

cron { "foo": minute => 1 }

is alright with an existing crontab of

 # Puppet Name: foo
 * * * * * /some/command

but not with a crontab not yet containing the entry named 'foo'.

This change prevents the sync operation in the error scenario.
(maint) Use git mirrors for puppet/hiera/facter installation

The git server and fork used to construct git urls for installation
projects via beaker was previously hard set to be github.com and
puppetlabs.  While we continue to default to these values, this commit
allows them to be set globally or per installed project via environment
variables so that we can take advantage of internal and local git
mirrors and daemons.
(PUP-1976) Use metadata.json as canonical metadata source.

Prior to this commit, the Modulefile was used as the primary source of user-facing metadata for modules.  This file was executable Ruby, which was intended to describe a simple data structure.  This causes a few problems for us in the long-term, including making automated module builds a significantly more difficult proposition, and making changes to acceptable metadata a slow process (requiring new releases of Puppet).  In addition, the only piece of Puppet code that interacted directly with the Module file was the `module build` action – anywhere we actually need to know something about the module, we look it up from the metadata.json file.

This commit removes this level of indirection between user input and module data, making the metadata.json file a first-class citizen in Puppet modules.  It similarly deprecates the Modulefile as a supported source of module data.  Checksums have also been moved into their own file (per PE-3124), and `puppet module changes` has been updated to leverage the new file when available (per PE-3120).

For users building a module containing only a Modulefile, this will issue a warning that the Modulefile is deprecated, and output the corresponding metadata.json file.

For users building a module containing both a Modulefile and a metadata.json file, this will issue a warning that the Modulefile is deprecated and is being ignored.
(PUP-1977) Update `puppet module generate` to create `metadata.json`

Prior to this commit, running `puppet module generate` would create a Modulefile with the appropriate metadata, from which a metadata.json file would be generated when you ran `puppet module build`.  Since we're migrating away from the Modulefile as the canonical source of metadata (as per PE-3117), this commit will instead generate an equivalent metadata.json file when the module is created.
(PUP-1932) Restrict systemd provider to manage file-based services

Prior to this commit, the systemd provider returned in-memory services.
This had a couple odd consequences, e.g. with 'puppet resource service':
1) short-lived services would come and go, though they are not actually
   managed directly
2) disabled and stopped services wouldn't be reported at all

This commit changes the systemd provider to return file-backed
services.
(PUP-1840) Add an sha256 checksum type to Puppet::Util::Checksums

Without this patch applied, Puppet doesn't know how to perform
checksums of files using the SHA-256 algorithm. This precludes Puppet
from being useful on hosts configured for compliance with U.S. Federal
Information Processing Standard (FIPS) 140-2.

The SHA-2 family of algorithms is recommended for use by the
U.S. National Institute of Standards and Technology (NIST) in FIPS
140-2; SHA-256 is the algorithm from this family having the shortest
output.

This patch makes SHA-256 available for use as a checksum algorithm by
other parts of Puppet, alongside MD5 and SHA-1.
Recent Debian's libruby doesn't provide libxmlrpc-ruby and libopenssl-ruby anymore

But as Ubuntu Lucid does, we still leave thoses as optionnals
(maint) Improve tests to check actual logging

The previous tests didn't actually make sure that the diff was logged.
This adds that coverage as well as checking that the log is at the
correct level.
(PUP-2033) Use loglevel for diff output

This brings the same changes made to the file type for PUP-1846 to the
augeas provider's diffing logic. If a loglevel is specified on the
resource then the diff will be logged at that level. If it is left off,
then the diff will be logged at the notice level.
Merge remote-tracking branch 'sathieu/patch-2'

Conflicts:
	ext/debian/control
(PUP-1433) Add example environment to deb packages

This adds an /etc/puppet/environments/example_env directory,
subdirectories, and a README about the environment. We can't remove the
existing /etc/puppet/manifests directory because it would destroy a
large number of deployments (anyone with automation depending on that
directory being created). We also can't create a production environment
because it would then shadow the /etc/puppet/manifests directory and
also end up breaking automation as well as any existing regular
installations. The example environment with a README seems to be the
best way to move forward and try to present the new system to users.
(PUP-1547) Undefined method for nil:NilClass when no providers found

When a puppet type has a list property and no providers are found for that type,
provider is nil and causes an "Undefined method 'property' for nil:NilClass" error.
ie. Undefined method 'groups' for nil:NilClass for the user type

Check if provider is nil before trying to access the property
Add docs badge to README
(PUP-1937) Calling 'ruby' on Windows Fails for PE

The 'ruby' executable does not exist on a PE installation. Instead, the
real name is 'ruby.exe' and it is located within the PE installation
directory. This commit includes a new method (ruby_cmd) in WindowsUtil
for finding the correct executable name and fixes three tests that call
'ruby' directly on Windows.
Merge branch 'stable'
Merge remote-tracking branch 'jaredjennings/fix/master/add-sha256-20140319'