Also reset swift service object at upload time
Also reset swift service object at upload time

When you follow through swiftclient.service.SwiftService() it ends up
creating a swift swiftclient.connection.Connection() object within it
[1].

As noted in change Ib35dd49627bc2209060848e719e3cec40dbb4f2a ; the
swift client object does not support keystone sessions, so does not
handle having an expired token (tokens for RAX, the cloud we see this
issue with in nodepool, expire after 24 hours).

This leads to a very confusing exception about "No tenant specified"
[2] which I believe is actually somewhat of a red-herring; what has
happened is that the authentication failed, the client inside the
SwiftService object doing the upload hits its retry path and we end an
authentication failure path [3] that outputs this message.

The split between what happens in a swiftclient Connection() object
versus a SwiftService() object further suggests this is the failure
point -- you use the client object to do things list
list/create/delete containers, but the SwiftService object provides
the wrappers that handle the actual upload of the objects.  This
explains why we see the exception raised in the upload image path, but
not the creation of the containers to hold the image.

As with the swift client issue, the simplest way around this is to
always request a new SwiftService object when uploading a new image.

[1] http://git.openstack.org/cgit/openstack/python-swiftclient/tree/swiftclient/service.py#n226
[2] http://paste.openstack.org/show/488685/
[3] http://git.openstack.org/cgit/openstack/python-swiftclient/tree/swiftclient/client.py#n1544

Change-Id: I1c9d71ec828eb7d67045fb6bef468dc20e67292b

openstack/python-openstacksdk,openstack-infra/shade,stackforge/python-openstacksdk,stackforge/python-openstacksdk,openstack-infra/shade,openstack/python-openstacksdk,dtroyer/python-openstacksdk,dtroyer/python-openstacksdk