Commit Graph

788 Commits

Author SHA1 Message Date
Brian Rosmaita dc3ee4aedb Fix intermittent v2 shell unit test failures
The do_image_download code has a check to make sure that there's
a place to put the data (either filename or stdout redirect) before
initiating the download.  The location of this check was moved by
change I841bebeda38814235079429eca0b1e5fd2f04dae to happen at the
beginning of the function.  The two intermittently failing tests
do not explicitly address the check condition, and as a result the
tests do exit early, but before they can check what they're supposed
to be testing.

Closes-bug: #1759951

Change-Id: I3c85bb358f669504b364d55618c21382b7a2a66b
2018-03-29 17:28:44 -04:00
Zuul bf820a1896 Merge "Remove usage of ordereddict" 2018-03-26 16:10:27 +00:00
Zuul 3142c9ab14 Merge "Update properties URL" 2018-03-22 19:14:59 +00:00
Brian Rosmaita 6cd537e274 Check for container,disk_format on web-download
Fail image-create-via-import requests for the web-download import
method that don't include values for container_format or disk_format.

Closes-bug: #1757927

Change-Id: Ic5c81916823ff32f2dbddd32b40e825de0697dc9
2018-03-22 01:16:41 -04:00
Brian Rosmaita 0661da1ee9 Update properties URL
Help text for some image properties (architecture, os_distro) is
pulled from the glanceclient's local version of the image schema.
The URL for those property definitions has gotten out of sync with
Glance.  This patch updates the URL to be the same as that given
in the Glance image-schema response.

Change-Id: I4e46e78525fe5c00e031a98c47cacc17e5693d53
Closes-bug: #1757918
2018-03-21 22:30:29 -04:00
PranaliD aedabec9e4 Add support for web-download import method
This change adds support for 'web-download' import method
to 'image-import' and 'create-image-via-import' call.
To use this 'web-download' import method, user needs to pass
--uri option 'a valid uri to external image to import in glance'
to 'image-import' and 'create-image-via-imaport' calls.

Co-authored-by: Pranali Deore <pdeore@redhat.com>
Co-authored-by: Erno Kuvaja <jokke@usr.fi>

Change-Id: I0e1d18844f64723608288de473e97710798eb602
2018-03-21 15:09:13 +00:00
Dirk Mueller 5916702cb2 Remove usage of ordereddict
This was only needed for Python < 2.7, but glanceclient's setup.cfg
already declares compatibility only with 2.7.

Change-Id: I80d42abf5dd5565da424a90a93545ba82ef7a58d
2018-03-08 10:30:31 +01:00
Rui Yuan Dou 8e862b6018 Remove deprecated ssl options
Old deprecated ssl options block the new keystoneauth parser get the
correct value, should be removed.

Change-Id: Ie080f9a8fa7f4407b1fcbb7fb7c763152c5ec295
Closes-Bug: 1697163
2018-01-17 08:50:57 +08:00
Stephen Finucane 4dcbc30e31 Compare against 'RequestIdProxy.wrapped'
Due to the 'glanceclient.common.utils.add_req_id_to_object' decorator,
an instance of 'glanceclient.common.utils.RequestIdProxy' is returned
for most calls in glanceclient. If we wish to compare to None, we have
to compare the contents of this wrapper and not the wrapper itself.

Unit tests are updated to highlight this.

Change-Id: I7dadf32d37ac2bda33a92c71d5882e9f23e38a82
Closes-Bug: #1736759
2018-01-02 11:36:02 +00:00
Brian Rosmaita bb0911910e Revise functional testing README file
Clarifies the location of clouds.yaml for functional testing.

Change-Id: Ib0b8e84579bca72e791229752df14542358e21b7
2017-12-15 16:03:45 -05:00
Brian Rosmaita c0e63d977f Migrate dsvm functional test jobs to project repo
Migrate legacy dsvm functional test jobs for python-glanceclient
to the project repository as zuul3 jobs using the devstack
functional base job.

Co-authored-by: Monty Taylor <mordred@inaugust.com>
Co-authored-by: Brian Rosmaita <rosmaita.fossdev@gmail.com>

Needed-By: I0b974bf60da6bafabeb037a75ac10654e2a6406c
Needed-By: I0271a1430843ef546e991a7a3c4b572b3e404963
Depends-On: I84de60181cb88574e341ff83cd4857cce241f2dd
Change-Id: I1977ee0d348645987107c2efb5b454d7f8b81adf
2017-12-14 15:39:26 +00:00
Brian Rosmaita 79d0051655 Add domain info to functional test clients
Keystone wants domain info, so pass it on.

Change-Id: Ie99f79b61e5f8d469695fa19ad99d919fa23ae8e
Closes-bug: #1737583
2017-12-11 11:58:58 -05:00
Jenkins b90236eef8 Merge "image-create-via-import fails with ValueError" 2017-08-24 19:54:41 +00:00
Abhishek Kekane 335f1e9447 image-create-via-import fails with ValueError
CLI image-create-via-import fails with ValueError. The reason
is create command returns RequestIdWrapper object and not image
and response.

Further it fails with AttributeError: 'Namespace' object has
no attribute 'import_method'. The reason is do_import_image() call
requires 'import_method' as input which is not provided at the
moment.

Change-Id: Ic4c4d1f3c5d290b584840e8f9047fb53611a5748
Closes-bug: #1711511
2017-08-24 14:29:37 +00:00
Jenkins b956f48078 Merge "Fix image-import call" 2017-08-24 09:17:30 +00:00
Brian Rosmaita e5b69eff69 Fix image-import call
Change the request body sent from the client to be the format
that the API expects for the image-import call.

Depends-On:  I08783e28719e63b5a4b2115b8fce135e55be460a
Change-Id: I5e34d772d561306c6f103c859740658a825dd189
Closes-bug: #1711259
2017-08-18 15:12:04 +00:00
Abhishek Kekane 0e50837a37 stage call fails with TypeError
image-stage call fails with TypeError saying 'stage() takes exactly
3 arguments (4 given). The reason is stage() also accepts image_size
as a argument which is not provided.

Further it raises 'NoneType' object has no attribute 'headers'. The
reason is stage() internally calls upload method which
returns a object of RequestIdWrapper on body (which is None) and
response. In stage call it again tries to add request id which requires
response object but instead it has a RequestIdWrapper which fails to
retrieve headers.

Change-Id: I4de4be7a55f35c3533b53acd48042c7c95b4bdc0
Closes-bug: #1711090
2017-08-17 11:37:20 +05:30
Erno Kuvaja 52eb529b97 Add missing docstring
Adding missing docstring for image-import command.

Change-Id: Ide95056797230963e9ef63c1cb72d42e697023e7
2017-07-27 21:09:05 +00:00
Jenkins 083931f87f Merge "Add image import features to client" 2017-07-27 21:04:08 +00:00
Erno Kuvaja c0753bdde6 Add image import features to client
This change adds availability of the features introduced on Image
Import Refactoring work. Including:
Discovery call to discover what Import modes are available
Staging call to stage the image for import in 'glance-direct'
Import call to trigger the actual Image Import task
EXPERIMENTAL: Image creation with the new workflow

Change-Id: I2d10ac0cc951c933c3594837b490638e38ff0b12
2017-07-27 18:07:50 +00:00
Jenkins 982857abc8 Merge "Validate input args before trying image download" 2017-07-26 14:15:35 +00:00
Jenkins ca9ae01841 Merge "Make --profile load from environment variables" 2017-07-26 04:33:49 +00:00
Jenkins c9730bfcc6 Merge "help text for container_format, disk_format" 2017-07-25 18:06:19 +00:00
PranaliD 28c003dc11 Removed the --no-ssl-compression parameter which is deprecated
--no-ssl-compression is deprecated and no longer used. So, it is
removed from the help message.

Change-Id: I2b886671a568ed191ee380cf16335ccd9ae85062
Closes-Bug: #1583919
2017-07-25 18:51:38 +05:30
Jenkins 7ad13b648a Merge "Fix 'UnicodeEncodeError' for unicode values in url" 2017-07-24 14:36:17 +00:00
Ravi Shekhar Jethani 1df55dd952 Validate input args before trying image download
Currently client is contacting glance service even if the
caller has niether specified any redirection nor '--file'
option. This unnecessary request although isn't causing
any critical issues but can be avoided by simply doing
input validation first.

TrivialFix

Change-Id: I841bebeda38814235079429eca0b1e5fd2f04dae
2017-07-24 14:54:57 +05:30
Tovin Seven c0f88d5fc0 Make --profile load from environment variables
--profile argument can be loaded from OS_PROFILE environment variables
to avoid repeating --profile in client commands.

Correct/update help text.

Co-Authored-By: Hieu LE <hieulq@vn.fujitsu.com>
Change-Id: I67c1e4b859b972e380eb658c98ceae4fbef5c254
2017-07-24 13:30:29 +07:00
M V P Nitesh 4d0a3c309e help text for container_format, disk_format
Updated the container_format and disk_format in v1 help text.

Change-Id: I4ebe4982c179450defe8ad5703999f4074ae32f8
Closes-Bug: #1659010
2017-07-06 13:09:44 +05:30
Jenkins a53b302764 Merge "Replace assertTrue(isinstance()) with assertIsInstance()" 2017-06-30 21:03:45 +00:00
Doug Hellmann c859380718 turn on warning-is-error in sphinx build
Fix a formatting error in one docstring and turn on the flag to ensure
that future warnings in the doc build trigger a build failure.

Change-Id: I7159b985d1690a8ae61ff885408da4623c105952
Signed-off-by: Doug Hellmann <doug@doughellmann.com>
2017-06-28 12:25:32 -04:00
Doug Hellmann d6e936cd14 add explicit dependency on pyopenssl
The library is used in glanceclient/common/https.py and the
documentation build for the API fails without the dependency.

Update the error handling so that when OpenSSL reports an error it is
converted to a client communication error.

Change-Id: I0c0fb3139bb848d0cbaf88ae6a767a730bea74eb
Signed-off-by: Doug Hellmann <doug@doughellmann.com>
2017-06-28 12:24:48 -04:00
Jenkins 05453b19b2 Merge "Replace six.iteritems() with .items()" 2017-06-28 14:49:38 +00:00
Doug Hellmann c8a7a5d56d allow unhandled exceptions to cause test errors
Hiding the unhandled exception in the test with a failure makes it
harder to debug the problem. Let them pass unhandled so the test reports
an ERROR instead of FAILURE.

Change-Id: I4e435a6d276fdf161dac28f08c2c7efedd1d6385
Signed-off-by: Doug Hellmann <doug@doughellmann.com>
2017-06-26 10:59:29 -04:00
Jenkins 4682d403d2 Merge "Remove log translations" 2017-06-19 19:13:08 +00:00
Van Hung Pham 7791110b2f Replace assertTrue(isinstance()) with assertIsInstance()
Some of tests use different method of assertTrue(isinstance(A, B))
or assertEqual(type(A), B). The correct way is to use
assertIsInstance(A, B) provided by test tools.

Change-Id: Ibb5e5f848c5632f7c1895c47b8c1a938f2c746c3
2017-06-14 11:03:10 +07:00
Jenkins d67b33b2e5 Merge "Allow global_request_id in Client constructor" 2017-06-01 17:22:55 +00:00
Sean Dague ec76e254da Allow global_request_id in Client constructor
This allows us to pass in a global_request_id in the client
constructor so that subsequent calls with this client pass that to the
servers. This enables cross project request_id tracking.

oslo spec I65de8261746b25d45e105394f4eeb95b9cb3bd42

Change-Id: Iea1e754a263a01dae5ed598fdda134394aff54b0
2017-06-01 14:32:03 +00:00
Abhishek Kekane 60c06d526c Downloading image with --progress fails
Downloading image with --progress fails with "RequestIdProxy object is
not an iterator". This is because to display download progress
VerboseFileWrapper in progressbar requires object of IterableWithLength,
but after support of returning request-id [1] to caller it returns
RequestIdProxy object which is wrapped around IterableWithLength
and response.

To resolve this issue overridden next and __next__ methods in
RequestIdProxy so that it can act as iterator for python 2.x
and 3.x as well.

[1] 610177a779

Closes-Bug: #1670464
Change-Id: I188e67c2487b7e4178ea246f02154bbcbc35a2b1
2017-05-29 17:56:11 +05:30
Jenkins 3338ed91d4 Merge "Downloading image with --progress fails for python3" 2017-05-29 11:54:55 +00:00
ckonstanski 03900522d4 v2: Content-Type: application/octet-stream header always added
The bug: any existing Content-Type header cannot be found because the
call to headers.get() fails. Therefore we end up with two Content-Type
headers because a new one (applicaion/octet-stream) gets added
unconditionally. The cause: the strings (keys and values) in the headers
dict are converted from unicode sequences of type <str> to utf-8
sequences of type <bytes>. This happens in safe_encode()
(oslo_utils/encodeutils.py:66). <str> != <bytes> even if they appear to
have the same characters.

Hence, for python 3.x, _set_common_request_kwargs() adds content-type
to header even if custom content-type is set in the request.

This results in unsupported media type exception when glance client
is used with keystoneauth and python 3.x

The fix: follow the directions in encode_headers().
It says to do this just before sending the request. Honor this principle;
do not encode headers and then perform more business logic on them.

Change-Id: Idf6079b32f70bc171f5016467048e917d42f296d
Closes-bug: #1641239
Co-Authored-By: Pushkar Umaranikar <pushkar.umaranikar@intel.com>
2017-05-19 19:02:00 +00:00
Eric Fried 7df87fd4a2 Convert IOError from requests
This requests commit [1] changed the behavior when a nonexistent cacert
file is passed in: now it raises IOError.  This is getting through
glanceclient.common.http.HTTPClient._request, which used to raise
CommunicationError in this scenario.

Even though there is arguably a better exception than CommunicationError
to represent this condition (like maybe IOError), for backward
compatibility this change set converts IOError to CommunicationError.

We also improve the unit test to raise the original exception if the
expected conditions aren't met; this improves debugability.

[1] https://github.com/kennethreitz/requests/commit/7d8b87c37f3a5fb993fd83eda6888ac217cd108e

Change-Id: I6a2cf4c6d041b67d3509153b4cef18b459263648
Closes-Bug: #1692085
2017-05-19 14:59:58 -04:00
Abhishek Kekane bb2a5e946f Downloading image with --progress fails for python3
Downloading image with --progress fails for python3 with,
TypeError: 'IterableWithLength' object is not an iterator. This
is because IterableWithLength class does not implemented python3
compatible __next__ method.

Added __next__ method for python3 compatibility.

Change-Id: Ic2114180fac26e9a60678f06612be733e8671bdb
Closes-Bug: #1671365
2017-05-18 11:42:35 +05:30
wangzhenyu 36d2358a9d Remove log translations
Log messages are no longer being translated. This removes all use of
the _LE, _LI, and _LW translation markers to simplify logging and to
avoid confusion with new contributions.

See:
http://lists.openstack.org/pipermail/openstack-i18n/2016-November/002574.html
http://lists.openstack.org/pipermail/openstack-dev/2017-March/113365.html

Change-Id: Icf6423763f2d535b2c85c067d6e4a5676914e2c3
2017-03-21 07:19:21 +08:00
Jenkins ba46e69eee Merge "Replace functions 'dict.get' and 'del' with 'dict.pop'" 2017-03-06 17:09:00 +00:00
Abhishek Kekane 87e4f7646f x-openstack-request-id logged twice in logs
In the recent release of keystoneauth1 2.18.0 provision is made to log
x-openstack-request-id for session client. Once this new library is synced
in openstack projects, the x-openstack-request-id will be logged twice
on the console if session client is used.

For example,
$ glance --debug image-list

DEBUG:keystoneauth.session:GET call to image for
http://10.232.48.204:9292/v2/schemas/image used request id
req-96a3f203-c605-4c96-a31d-f1199d41705c

DEBUG:glanceclient.common.http:GET call to glance-api for
http://10.232.48.204:9292/v2/schemas/image used request id
req-96a3f203-c605-4c96-a31d-f1199d41705c

Above log will be logged twice on the console.

Removed logging of x-openstack-request-id in case of SessionClient as it
is already logged in keystoneauth1. x-openstack-request-id will only be
logged once on console if HTTPClient is used.

Depends-On: I492b331ff3da8d0b91178bf0d5fe1d3702f15bd7
Closes-Bug: #1657351
Change-Id: I64258f997dc060113f53682aee74bdd40a346e54
2017-02-22 01:49:22 +05:30
ji-xuepeng 5fca39dbde Replace six.iteritems() with .items()
1.As mentioned in [1], we should avoid usingg
six.iteritems to achieve iterators. We can
use dict.items instead, as it will return
iterators in PY3 as well. And dict.items/keys
will more readable. 2.In py2, the performance
about list should be negligible, see the link [2].
[1] https://wiki.openstack.org/wiki/Python3
[2] http://lists.openstack.org/pipermail/openstack-dev/2015-June/066391.html

Change-Id: I71c13040318eca6e5ed993e8aa03f8003986a71c
2017-02-08 16:33:46 +08:00
bhagyashris 6740f57096 Replace functions 'dict.get' and 'del' with 'dict.pop'
Refactoring code: Making dict to use single instruction: pop()
rather than two instructions: get() and del, giving the codes a
format that carries through.

TrivialRefactoring

Change-Id: Idb21df37c287fdff24c29153676f82544f735297
2017-01-31 10:09:28 +05:30
Jenkins c1f54742f9 Merge "Replace dict.iteritems() with dict.items()" 2017-01-24 22:34:49 +00:00
bhagyashris a884becdd4 Fix 'UnicodeEncodeError' for unicode values in url
Used '%' instead of format() because format() function doesn't
support the parsing of unicode codec like u'\U0001f693' in Python 2.

Python3 parse unicode codec with .format() correctly.

For example:

openstack@openstack-VirtualBox:~$ python2
Python 2.7.6 (default, Oct 26 2016, 20:30:19)

>>> '{0}'.format(u'\U0001f693')
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
UnicodeEncodeError: 'ascii' codec can't encode character u'\U0001f693'
in position 0: ordinal not in range(128)

>>> '%s' % (u'\U0001f693')
u'\U0001f693'

NOTE: format() fuction will parse unicode codec in Python 2 after
prefixing 'u' like u'{0}.format(u'\U0001f693') but prfixing 'u'
at every place is not good, so it's better to use the '%' module.

Change-Id: I2fcca96a1356df08453e08487afb62dfec91ba9d
Closes-Bug: #1570766
2017-01-24 12:39:20 +05:30
Jenkins 99cbde26ac Merge "Add support for community images" 2017-01-23 22:19:37 +00:00