Support EC2 facts on OpenStack

OpenStack exports an EC2 compatible API, so make the information
available via facts by knowing that OpenStack generates mac addresses
beginning with 02:16:3E
add a simple test for openstack ec2 facts
Merge pull request #139 from katzj/openstack-ec2-facts-1.6.x

Support EC2 facts on OpenStack
(#12079) Fix order-dependent test failure due to odd stubbing.

The submitted tests worked fine until the order they ran in was perturbed;
after that, bad expectations were shown.  This corrects that subtle failure.

Signed-off-by: Daniel Pittman <daniel@puppetlabs.com>
Merge pull request #154 from daniel-pittman/bug/1.6.x/12079-fix-ec2-test-order-dependency-in-stubs

Bug/1.6.x/12079 fix ec2 test order dependency in stubs
(#12170) Adds gem spec description
Without this patch, the gem spec file is missing a
description attribute, which causes a warning message
when generating the gem.  This patch adds a description
attribute to the spec with the facter tagline
'You can prove anything with facts!'

Signed-off-by: Moses Mendoza <moses@puppetlabs.com>
Merge pull request #160 from MosesMendoza/ticket/1.6.x/12170_add_gem_spec_description

Ticket/1.6.x/12170 add gem spec description
(#12362) Use Tempfile to generate temp files

Previously, facter used ENV['TMP'], ENV['TEMP'], /tmp, etc as it's
temp directory search path, using the first one that existed. It then
used constant file names within the temp directory to re-write the
files in ruby's bin directory, and bat wrappers on Windows.

First, it leads to predictable temp file names, which is bad. Second,
when installing facter via a non-interactive ssh shell, e.g.
  ssh <host> ruby install.rb

which is what the acceptance test harness does, the TMP and TEMP
environment variables are usually not defined. So facter was always
defaulting to /tmp, which doesn't work when installing facter on
Windows agents during acceptance tests.

This commit just changes the install script to use ruby's Tempfile to
generate secure temp files that works in non-interactive shells.
Merge pull request #163 from joshcooper/ticket/1.6.x/12362-use-tempfile

(#12362) Use Tempfile
Merge branch '1.6.x' into 1.6rc
Updated CHANGELOG and lib/facter.rb for 1.6.6rc1
Make ec2 facts work on CentOS again (#12666)

Refactoring the ec2 facts lost the support for CentOS where the
hardware address in arp -an is uppercased.  Fix and add a unit
test now that there are those
Merge pull request #172 from katzj/downcase-arp-again-1.6.x

Downcase arp again 1.6.x (#12666)
Merge branch 'downcase-arp-again-1.6.x' into 1.6rc

* downcase-arp-again-1.6.x:
  Make ec2 facts work on CentOS again (#12666)
Updated CHANGELOG for 1.6.6rc2
(#12669) Preserve timestamps when installing files

Without the preserve option, ruby's FileUtils.install method uses the
current time for all installed files.  For backup systems, package
installs, and general pedantic sysadmins, preserving timestamps makes a
small improvement in the world.
Merge branch 'preserve-timestamps' into 1.6.x

* preserve-timestamps:
  (#12669) Preserve timestamps when installing files
Update CHANGELOG for 1.6.6
(#11511) Split lsb facts into multiple files

If a fact is stored in a file that does not follow the convention
$factname.rb we may encounter ordering and recursion issues as seen in
bugreport #11511. The concrete example was

- flush clears all facts
- load_all is triggered to reload facts
- inside an .rb file we query the operatingsystem fact directly
  (say outside a Facter.add block)
- the operatingsystem fact has a suitable resolver for linux which
  wants to query the lsbdistid fact, which is (apperently) not yet
  loaded (this might not even be predictable)
- the loader doesnt find a lsbdistid.rb file so it triggers load_all
  (remember: we are still trying to get a value for operatingsystem)
- the load_all does load other files (like processor.rb) that want to
  query the architecture fact directly (outside a Facter.add block)
- the architecture fact is dependent on the operatingsystem fact, we are
  currently trying to resolve -> boom: recursion

This commit implements one possible fix: Split the lsb facts into
differnet files so the loader finds them. We therefore dont have to run
load_all in the middle of a fact resolution.
Merge branch '1.6rc' into 1.6.x