Find repo files case-insensitively

One of the fun quirks of the ESXi installer is that it uses a pure ISO9660
filesystem on the CD, rather than anything modern.  That actually supports
only upper-case characters in filenames.

Linux maps those to lowercase when mounted, but libarchive gives us the gory
truth -- and no easy way to detect that this is an ISO9660 only image.

So, because case is fun, and because many popular platforms are case
preserving but case insensitive, we treat repo files case insensitively.

This should, I think, match exact case first, then find alternate case sets,
but ultimately it makes it possible to get the expected file for ESXi.

Signed-off-by: Daniel Pittman <daniel@rimspace.net>
Support raw installer files, as well as templates

Unfortunately, booting the ESXi installer requires that we chain through
pxelinux -- it provides a support environment that allows the multi-boot
kernel that ESXi uses to be loaded correctly.  We can't just boot that,
though, because pxelinux without iPXE doesn't support loading data from
a URL.  (At least, in the versions we use.)

Consequently, we end up chaining iPXE => pxelinux => mboot.c32 and the rest of
the installer.  This requires that we serve pxelinux.0 -- a binary file --
from our installer.

That was previously somewhere between ugly and impossible: templates are
required to be valid UTF-8 text, which means that for this to work we needed a
base64 encoded version of the pxelinux.0 binary, wrapped in a template that
would decode and emit the binary version at runtime.  Ugh.

This implements serving raw files from installers.  You have to ask for them
explicitly, and cannot access raw templates using this; we blacklist those.

Signed-off-by: Daniel Pittman <daniel@rimspace.net>
ESXi 5.5 installer

This implements an ESXi 5.5 installer, capable of automatically installing to
the first local disk.  Roughly speaking, this is identical to the ESXi
installer in the older Razor.

Signed-off-by: Daniel Pittman <daniel@rimspace.net>
Improved logging to improve debugging

This adds and moves a handful of logging statements around the product, to
improve our logging.  These are probably not the most efficient possible
implementations, but they make it easier to identify what is going on with the
product at a glance.

Signed-off-by: Daniel Pittman <daniel@rimspace.net>
test for fixed case filenames first...

Signed-off-by: Daniel Pittman <daniel@rimspace.net>
Commands to enable/disable a policy
config.yaml.sample (facts.blacklist): suppress a few more facts

Suppress some more facts that are in reality useless; some of these come
from a newer facter version (1.7.3) and will only come into play when we
update the microkernel from facter-1.6.18 to the latest released facter.
Move Razor::Data::Node::HW_INFO_KEYS to Razor::Config
Introduce config setting 'match_nodes_on'

This patch does not use the config setting; it only verifies that it is
sensible.
Match nodes only on hw_info entries that are given in match_nodes_on

The matching code assumes that any criterion (mac, serial, asset, uuid) we
match on is either unique or empty. Some vendors very smartly fill in some
of these values, e.g. asset tag, with a nonsensical value like "no asset
tag" or "to be filled by O.E.M". If we match on such asset tags, Razor will
assume that all machines with that asset tag are in fact the same machine,
and people are just changing hardware, e.g. NICs, frantically.

With this patch, users can select what criteria are used for matching nodes
based on their hardware information: the more criteria we match on, the
more reliable the mathcing is in the face of hardware changing (e.g., to
replace a defective NIC) This is limited by the fact that each criterion
must be empty or unique.

We default the match criteria to 'mac', i.e. only match on the MAC
addresses of the NIC(s) in the nodes. This is reliable unless _all_ the
NIC's in a node have to be replaced.

Fixes https://github.com/puppetlabs/razor-server/issues/59