Implement the reboot command on the Ironic Driver

Closes-Bug: #1310137
Change-Id: I63266d73537573f132b4914d15a87a8ccfa732e6
Consider free disk space before downloading images into cache

This patch makes PXE driver ensure it has enough disk space
to actually download required images. If it does not, it tries
to make some space by starting cache clean up.

While it would be better to have this code in ImageCache itself,
by keeping it in PXE module we have the ability to clean up
both caches, not only current one, thus reclaiming more space.
We clean up instance image cache first, because:
1. It's probably larger
2. Instance images are not required for running instances,
   so they are more likely to be cleaned

In the follow-up patch I'll implement hints for clean_up()
call on how much space we need. Otherwise clean_up procedure
may think that nothing needs to be cleaned even though
we don't have enough space for new downloads.

This patch also adds ironic.common.images.download_size() helper
and makes master_dir attribute of ImageCache public.
One more side-effect on implementation is that values in pxe_info
dict are now tuples (as they are supposed to be), not lists.

Change-Id: I1e7294b6e7155d83e72cfd144abdca858cab0aae
Partial-Bug: #1316168
Merge "Consider free disk space before downloading images into cache"
Merge "Implement the reboot command on the Ironic Driver"
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 68f72b914f6b8ab6a1c525c0f611bbbf4e968168)
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 f7df4238d0e4440ccf8eb7eca17f03f3b96c4db1)
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 849036cd1df9cbcbd32bd7f8f96ec21e9035c99e)
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 327d32726dbc1d9a1ee97315a66210f76c8123f8)