(#3757) re-introduce lockfile changes

This commit re-introduces the lockfile behavior changes that
were originally merged in to 2.7.x via this pull request:

https://github.com/puppetlabs/puppet/pull/216

It was reverted because of mcollective compatibility issues.
For more info see:

http://projects.puppetlabs.com/issues/12844

It is now being reintroduced for Telly, but with some minor
modifications.  See #3757, #12933 and #12934 for details on those.
(#3757, #12934) Minor test improvement for agent disable message
(#3757) separate settings for agent lockfile paths

There are now two different lockfiles for agents; one
for indicating that an agent is administratively
disabled, and one that indicates that an agent run
is already in progress.

In previous revisions, the paths for these lockfiles
was being built from a single puppet setting via
naming convention.  This commit does the following:

1. Creates two settings (:agent_running_lockfile and
:agent_disabled_lockfile) instead of the previously
existing one (:puppetdlock).
2. Removes the Configurer class from the chain of
command when the Agent class is determining the
lockfile path.
(#3757) move lockfile path logic into modules

The Puppet::Agent::Locker and Puppet::Agent::Disabler
had a weird dependency on the existence of some
lockfile methods in Agent, but Agent didn't use
those methods anywhere else.  This commit moves
all of the lockfile related stuff into the modules
in an attempt to improve encapsulation and clarify
the API of the modules.
(#3757) Remove 'anonymous' functionality from lockfiles

The agent lockfile mechanisms had a concept of "anonymous"
built-in to them.  This was necessary to help attempt to
disambiguate the meaning of the lockfile when we were
using it for two purposes (administrative-disabling vs.
run-in-progress).  Since we now have two separate lockfiles,
this is no longer necessary... and it makes the code
and API confusing.  This commit removes it, and the
resulting API feels much cleaner and more straightforward.

The "AnonymousFilelock" class needs to be renamed, but
I haven't done that yet.  My next commit is going to
transform it into a JSON-based lockfile class, so I'll
rename it as part of that commit.
(#3757) rename AnonymousFilelock to JsonFilelock

This commit simply renames AnonymousFilelock to
JsonFilelock.  The behavior hasn't changed at all
yet, so this is a bit of a suspect commit but
I wanted to make sure that the git history
was as clear as possible as to what happened
here.
(#3757) Implement json-based lockfiles

This commit does the following:

1. Refactors our main lockfile class to accept a data object
    as an argument to the #lock method.  This data can
    then be retrieved at any time while the lock is held;
    the implementation is to write the hash as JSON to
    the lockfile.  This will allow external tools to
    read it without calling into puppet code.
2. Refactor pidlock to use the above--but only serializing
    a String (the pid) to the file.
3. Refactor disabler to use the above, with a Hash containing
    a key/value pair identifying the "disabled" message.
4. Fix and clean up spec tests.
(#3757) cleanup and docs
(#3757) add acceptance test

This acceptance tests covers the cases around the agent
--disable/--enable options.  It doesn't cover the
pidfile case, which will be hard to test without
running the agent in daemon mode.
Add ability to log spec test order to a file

This commit tweaks the spec_helper to give it the
ability to log the spec test order to a file.  It
will only log the order if you have set the
environment variable "LOG_SPEC_ORDER", e.g.:

LOG_SPEC_ORDER=true rspec spec

This will be useful when using Nick L.'s bisect
script to identify order-dependent spec failures.
It should probably be enabled on all of our
Jenkins jobs, and would potentially allow us to
start running them with the random order flag
enabled.
(#13966) Fix default pidfile race condition

Commit 8b81794 introduced a race condition for the pidfile that
incorrectly defaulted all pidfiles to user.pid because of when in load
time defaults.rb was read.  Run_mode bootstraps as user and then
switches to [master|agent] if necessary. This change modifies the
default pidfile value to interpolate run_mode at time of pidfile use
rather than bootstrapped run_mode.  This commit restores proper
functionality for the pidfile names.
Merge pull request #712 from jeffweiss/ticket/master/13966_remove_name_option

(#13966) Fix default pidfile race condition
(maint) Fix acceptance test for Windows

Change acceptance tests to resolve issues around newlines not being properly matched with Windows and linux.
Mark topscope acceptance test as win32 pending.

Signed-off-by: Jeff Weiss <jeff.weiss@puppetlabs.com>
Merge pull request #711 from jeffweiss/maint/master/fix_acceptance_tests_for_windows

(maint) Fix acceptance tests for Windows
Merge 'puppet-feature/master/3757-agent-lockfiles' from cprice

This manually fixes the minor merge conflict by hand.

Signed-off-by: Daniel Pittman <daniel@puppetlabs.com>
Merge pull request #709 from cprice-puppet/feature/master/log_spec_order

Add ability to log spec test order to a file