PE-1178: --security-group option handling improvements

This patch improves the handling of the --security-group option
of the
  puppet node_aws create
command.
Previously it was only possible to specify the security groups by
their names, newly it is possible to specify them by both IDs and
names interchangeably. Internally they are always converted to IDs
and as such passed to the Puppet::CloudPack.create_server method
in the :security_group_ids option. (Previously the names of the
groups were passed in the :security_group option to that method.)
PE-1178: updated tests for the --security-group option handling

This patch updates and adds tests for the --security-group option
of the
  puppet node_aws create
command.
While at it the tests for the entire 'create' action of the 'node_aws'
puppet face are cleaned up and modernized.
PE-1504: drop ruby 1.8.7 and add ruby 2.0.0 to the projects's travis-ci matrix

This patch updates the project's travis-ci matrix as stated in the title
to make the tests more useful. (As the tests didn't run with ruby 1.8.7
because the prerequisite nokogiri gem requires ruby version >= 1.9.2 and
ruby 2.0.0 was not covered at all.)
PE-838: default to installing PE during bootstrap

This patch changes the default value of the --install-script
option of the:
  puppet node_aws bootstrap
command to 'puppet-enterprise'.
While at it the option verification is improved so that missing
options are detected early rather than halfway through the
bootstrap process.
Further the vocabulary of options' help texts and related error
messages is unified.
PE-838: update tests for the change in the install script default

This patch updates tests for the change in the default value of the
--install-script option. While at it, some expectations are made more
specific and the test code is modernized.
PE-838: update rspec syntax to kill deprecation warnings

This changes rspec's
  expect { }.should
constructs, to:
  expect { }.to
to avoid deprecation warnings.
Merge pull request #117 from mruzicka/PE-838_default_to_PE_install

PE-838: default to installing PE during bootstrap
Merge pull request #119 from mruzicka/PE-1504_travis-ci_matrix_update

PE-1504: drop ruby 1.8.7 and add ruby 2.0.0 to the projects's travis-ci matrix
Merge pull request #118 from mruzicka/PE-1178_aws_security_groups_by_ID

PE-1178: --security-group option handling improvements
(packaging) Update Modulefile, CHANGELOG for 1.0.9
Add `google-api-client` to the Gemfile

Signed-off-by: Daniel Pittman <daniel@rimspace.net>
Add initial GCE support: Google API authentication

This implements the first phase of Google Compute Engine support to Cloud
Provisioner, by implementing authentication support.  This uses the OAuth2
installed application workflow, which seems to be the best match to what is
offered by the cloud console, and our local needs.

This implements token storage, refresh, and a web browser based access
request process.  This is initially entered by the user through the `register`
action on the `node_gce` face.

Signed-off-by: Daniel Pittman <daniel@rimspace.net>
Implement `list` operation for instances

This provides a read-only view of instances -- globally or restricted to a
single zone.

It also includes human focused rendering support; part of this is wired in by
adding a custom `to_s` method to the "instance" instances returned by the
Google API.

Signed-off-by: Daniel Pittman <daniel@rimspace.net>
Implement basic `create` operation for instances

This wires up enough logic to allow instances to be created by node_gce: while
slightly limited in capabilities, it is sufficient to create an instances from
a stock or custom image using non-persistent local disk.

There are limitations:
 * no persistent disk support is yet available
 * networking is hard-coded to the `default` network
 * networking is hard-coded to use an ephemeral external IP

For all that, it provides mediated instance creation.

Signed-off-by: Daniel Pittman <daniel@rimspace.net>
Implement `delete` operation for instances

This completes the basic set of functionality available to GCE instances: we
can now delete them, removing the associated data and virtual machine.

Signed-off-by: Daniel Pittman <daniel@rimspace.net>
Implement `user` action to manage ssh key metadata

The GCE supplied images allow use of "metadata" on the instance to manage user
accounts; the `sshKeys` field is used by on-node software supplied in the
Google instances to keep a set of user accounts and their SSH keys in sync.

This provides an interactive mechanism to manage that structured data, adding
and removing users and their keys from the list.

Signed-off-by: Daniel Pittman <daniel@rimspace.net>
Implement SSH key / account support at create time

This uses the `--login` and `--key` options that mirror those of the `puppet
node install` action to configure a single account at VM creation time.

As with other user management, this is implemented by setting the `sshKeys`
metadata item which is then used by software supplied by Google to create the
account and configure the SSH keys in place.

Signed-off-by: Daniel Pittman <daniel@rimspace.net>
Move create operation in the file

This moves the implementation of create to a location next to bootstrap -- the
better to make visible the commonalities between them.

Signed-off-by: Daniel Pittman <daniel@rimspace.net>
Extract common options into a procedural library

Because the design of faces makes it impossible to use conventional OO
solutions, such as inheritance or augmentation of classes, to solve the
problem of identical behaviour across disparate objects, we hit some
challenges when our actions share behaviours in the form of options.

This addresses that the same way the rest of the Cloud Provisioner code does,
by extracting the common options into a shared library of procedural code that
can be used to share execution and, by side effect, behaviour.

Signed-off-by: Daniel Pittman <daniel@rimspace.net>
Extract "payload" options from other CloudPack install options

The original CloudPack design mashed together a pile of things into what it
called the "install" options -- which, unfortunately, included both some of
the payload options for installation and some of the authentication options
for how to connect to the target system.

This made it impossible to use that single original set of options with GCE,
since the security model is different enough to pose an unsolvable conflict.

This splits out those options into two components, installation and payload;
we only use the later in GCE, and retain the original definition of install
options for other 'clients' of CloudPack.

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