Simplify calls to ImageCache in PXE module

This is a simple refactoring to reduce amount of typing when
accessing two kinds of image caches: TFTP and instance images.
It will also make easier to have separate caching settings
for TFTP and instance images caches, if required in the future.

Change-Id: Id3ce989fceb2ee31a93a57d4bdfceaa946b66ff5
Pin RPC client version min == max

At the moment, ironic's rpcapi module is specifying a target (minimum)
RPC version of 1.0 -- however, none of the methods added after 1.0
indicate in which minor version they were added. Thus, this module
believes all methods are available in any version of the server greater
than 1.0, which is clearly untrue.

This change pins the target version to the current version,
effectively preventing rolling upgrades, which are not supported at the
moment anyway.

Change-Id: I031ccd13d1d140821daf8a0adf5913627064451c
Partial-Bug: #1317300
Merge "Simplify calls to ImageCache in PXE module"
Factoring out PXE and TFTP functions

Multiple drivers need to support neutron and Ironic's PXE and TFTP
server. Factoring them out into a common file will make that
transition possible. I've moved all the generic calls into neutron
and reconfigured the PXE driver to work with the new functions.

Change-Id: I181ffabe673636b628329592e623e6425da54d6d
(cherry picked from commit eb9f041353fc1913c13ec56eaf3f5b14fb0d1a29)
Adding a reference driver for the agent

This driver handles communication with the Ironic Python Agent's REST
API and controls the agent through the deploy and tear down process.
It utilizes the nodeless vendor driver passthru to communicate with
newly booted agents. Things not included yet are support for
Neutron, agent registration/discovery, and writing an image to the
drive before deploy is called.

The original source for this driver was on GitHub. For history,
check: https://github.com/rackerlabs/ironic-teeth-driver

Depends on:
https://review.openstack.org/#/c/81391/
https://review.openstack.org/#/c/81919/

Implements: blueprint agent-driver
Change-Id: Ic6ad8703304af3041c48e9ade32eccbffa78ec9c
(cherry picked from commit 9e7c15645d84a6cfd026cc98cfaf172e8db9e337)
Drivers determine acceptable power states

The list of acceptable power states for a Node to be in when Nova is
calling deploy, update, and destroy were set globally.
This patch allows the deploy drivers to determine
which states are acceptable for each. I added a new validate
method to the DeployInterface class that can be overriden if
a driver determines it needs different settings (such as the agent
driver). The current function provides sane defaults and the
same behavior as before for any driver not overriding the function.

Change-Id: Iefec4396c323d9746bb0ee84b015765a4adbb476
Closes-Bug: 1306202
(cherry picked from commit fae1c205b0e66fb28fdbe5c6d38c482cf6deb1b2)
Adding swift temp url support

This patch will allow properly configured Glance servers to return a temporary
URL for an object hosted on Swift. It will require Glance to use Swift
as its backend. A temporary URL will let the agent download an image from
Glance without requiring an auth_token, which gives access more than just
Glance. The easiest way to use it is to enable direct_url in Glance, but
you can set the appropriate config options to avoid needing to enable it.

We/I need to add a note in the docs about Swift being a possible dependency
for Ironic deploys using IPA, along with how to set the Temp URL key.

Swift perfomance concerns will be addressed in this blueprint:
https://blueprints.launchpad.net/ironic/+spec/improve-swift-agent-downloads

SecurityImpact
DocImpact

Implements: blueprint swift-temp-urls
Change-Id: I10e4784eee63e8edc9ba30a9c5004a08aa3a6d8e
(cherry picked from commit 7fb05fa546c2c51e70d50a54dfc0e1cfe9275d92)