Return the HTTP Location for newly created resources

To provide information about the location of a newly created resource
(201) the Ironic API now returns the URI for the new object in the HTTP
Location header.

A new function build_url() was created in the link.py by factoring out
part of the the Link.make_link() method so that we can reuse that part
of the code to build a URL without having to create a new Link object.

Partial-Bug: #1317044
Change-Id: I88b033d446aaed93fc90ab6497578d5cd729dea8
Return the HTTP Location for accepted requestes

After the server accepts a request (202) it now returns an URI in the
HTTP Location header so that clients will know how to track the status
of the request.

Closes-Bug: #1317044
Change-Id: I5286ed762426dea02a6513c0e31cbc9a8023f803
PXE driver to validate the requested image in Glance

This patch adds a check in the PXE driver validate() method to check if
the requested image exist in Glance and if it contains the 'kernel_id'
and 'ramdisk_id' properties set which are needed for the PXE boot.

Closes-Bug: #1324840
Change-Id: I42bf7fcb27286afb3db0fda2a3a09ea49c77496b
Fix concurrent deletes in virt driver

The _unprovision function used a class member to track the number
of calls to ironic to check the provision state. When more than one
delete is happening concurrently, the deletes will both add to the
same counter. This commit fixes this issue to use a local counter.

Partial-Bug: #1326364

Change-Id: I2552332445fe0e614970ec28eddf7c1ae94e34be
Fix the logging message to identify node by uuid

The logging message of _build_pxe_config method in
ironic/drivers/modules/pxe.py is like below:
Building PXE config for deployment 4.

"4" is a ID of the node, but users don't know ID of the node
even if using CLI or API.
Users can know only uuid of the node.
So that, uuid of the node should be written in the logging message.

This patch makes identify node by uuid not by id.

Change-Id: Ida220a97d5fc8f6c5adc5b5acf239bbee14ff847
Closes-bug: #1327085
Fix AttributeError when calling create_engine()

The module which contains the create_engine() method is the sqlalchemy,
not slqalchemy.api.

Change-Id: I0b9e2f5b25f0c8ea9f7e55d863fa170cc9c09564
Partial-Bug: #1327225
Skip migrations test_walk_versions instead of pass

When there is no db engine configured for the migration tests,
the test_walk_versions test was passing, rather than skipping,
because it contained a for-loop and no check for the length of the
sequence being iterated over.

This patch checks the length of the configured engines and
properly skips the test when there are no engines.

Change-Id: I8a5c0a66f65a99c5169b251be02a8fbe6c727641
Closes-bug: #1327397
Mock seamicroclient lib in unit tests if not present

Mock the python-seamicroclient library from within ironic/tests/drivers
so that test_seamicro.py can import ironic/drivers/modules/seamicro.py
and run the unit tests on it, even when the external library is not
present.

Change-Id: I4f2cd75b2c64a5a280a5d45d5cea058fd432815b
Closes-bug: #1312321
Work around iscsiadm delete failures

Attempting to delete an iSCSI target immediately after the initiator has
logged out of the session can sometimes cause iscsiadm's database update
to fail.  This allows the delete command to be retried up to 5 times on
failure.  We also accept exit code 21 (no records found) as success.

Closes-bug: #1324670
Change-Id: I064fcd01e3bd713b0ec19cc1fdb562ca7fd8b666
Update Nova driver's list_instance_uuids()

list_instance_uuid() was dependent on list_instances().  The latter
was fixed to return the correct results but the former was not,
causing nova-compute start up failures.  This updates it accordingly
to return the expected output via a client API call.

Change-Id: I27651ca01dbdcc95ca729da7dbbeafdc616eec4e
Closes-bug: #1326988
Merge "Fix concurrent deletes in virt driver"
Merge "PXE driver to validate the requested image in Glance"
Merge "Fix AttributeError when calling create_engine()"
Merge "Fix the logging message to identify node by uuid"
Rework make_partitions logic when preserve_ephemeral is set

This patch reworks the logic around make_partitions when rebuilding an
instance with preserve_ephemeral set to true. The reworked logic will
no longer wipe the current partitions when rebuilding an instance with
preserve_ephemeral set.

Partial-Bug: 1317647
Change-Id: I15fc0d6323698eaa4c30b8aaa7fb740f51c035bc
Merge "Return the HTTP Location for newly created resources"
Merge "Update Nova driver's list_instance_uuids()"
Add retry logic to iscsiadm commands

In order to avoid random iscsiadm errors this patch adds retry logic
to the iscsiadm commands. All iscsiadm commands will be attempted
5 times before failing.

Closes-Bug: #1327392

Change-Id: I971db541efbaaaf76bb6266570d7606d5b8285e7
Allow more time for API requests to be completed

We currently poll for success, but physical machines can take a while
to respond to IPMI etc. The current defaults reliably fail to complete
with 5 workers (which is the desired default). Until we have event
based logic from Ironic -> Nova we need to try harder, or be
unreliable. 60 retries of 2 seconds each means 2 minutes before a
truely hard fail (as opposed to queue backlog) is reported. Note that
deploys can starve deletes at the moment, so this fix is not enough to
stop spurious reports of problems.

Change-Id: I917a4430e5e77936deb82343ff057b9adc9822ec
Partial-Bug: #1319858
TaskManager: Only support single node locking

The multi-node locking is not used and there's no plan to use it.
Removing it allows us to clean up a lot of code.

The TaskManager tests are refactored to not use the DB.

Removed 'node' from get_node_mac_addresses() in driver/utils as it's
no longer needed.

Partial-Bug: 1312632

Change-Id: Ie3577ba150df6c84fc34a4b08775e5011f8925cb