Compare commits
6 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
37c6bb0c8b | ||
|
|
1e0ed2f044 | ||
|
|
c1596862ae | ||
|
|
56c5badada | ||
| 97e2a29496 | |||
| ce7aef7912 |
@@ -1,4 +1,5 @@
|
||||
[gerrit]
|
||||
host=review.openstack.org
|
||||
host=review.opendev.org
|
||||
port=29418
|
||||
project=openstack/python-cloudkittyclient.git
|
||||
defaultbranch=stable/rocky
|
||||
|
||||
11
.zuul.yaml
11
.zuul.yaml
@@ -18,23 +18,19 @@
|
||||
- ^releasenotes/.*$
|
||||
vars:
|
||||
devstack_plugins:
|
||||
cloudkitty: https://git.openstack.org/openstack/cloudkitty
|
||||
cloudkitty: https://opendev.org/openstack/cloudkitty
|
||||
devstack_services:
|
||||
ck-api: true
|
||||
horizon: false
|
||||
tox_install_siblings: false
|
||||
zuul_work_dir: src/git.openstack.org/openstack/python-cloudkittyclient
|
||||
zuul_work_dir: src/opendev.org/openstack/python-cloudkittyclient
|
||||
tox_envlist: functional
|
||||
|
||||
- project:
|
||||
templates:
|
||||
- check-requirements
|
||||
- openstack-cover-jobs
|
||||
- openstack-python-jobs
|
||||
- openstack-python35-jobs
|
||||
- openstack-python36-jobs
|
||||
- openstackclient-plugin-jobs
|
||||
- publish-openstack-docs-pti
|
||||
check:
|
||||
jobs:
|
||||
- cloudkittyclient-devstack-functional:
|
||||
@@ -43,3 +39,6 @@
|
||||
jobs:
|
||||
- cloudkittyclient-devstack-functional:
|
||||
voting: true
|
||||
post:
|
||||
jobs:
|
||||
- openstack-tox-cover
|
||||
|
||||
@@ -30,12 +30,7 @@ def make_client(instance):
|
||||
version,
|
||||
API_VERSIONS)
|
||||
instance.setup_auth()
|
||||
adapter_options = dict(
|
||||
interface=instance.interface,
|
||||
region_name=instance.region_name,
|
||||
)
|
||||
return ck_client(session=instance.session,
|
||||
adapter_options=adapter_options)
|
||||
return ck_client(session=instance.session)
|
||||
|
||||
|
||||
def build_option_parser(parser):
|
||||
|
||||
@@ -35,7 +35,7 @@ class BaseFunctionalTest(utils.BaseTestCase):
|
||||
if p.returncode != 0:
|
||||
raise RuntimeError('"{cmd}" returned {val}: {msg}'.format(
|
||||
cmd=' '.join(cmd), val=p.returncode, msg=stderr))
|
||||
return json.loads(stdout) if has_output else None
|
||||
return json.loads(stdout.decode('ascii')) if has_output else None
|
||||
|
||||
def openstack(self, action,
|
||||
flags='', params='', fmt='-f json', has_output=True):
|
||||
|
||||
48
cloudkittyclient/tests/unit/v1/test_rating.py
Normal file
48
cloudkittyclient/tests/unit/v1/test_rating.py
Normal file
@@ -0,0 +1,48 @@
|
||||
# Copyright 2019 Objectif Libre
|
||||
#
|
||||
# Licensed under the Apache License, Version 2.0 (the "License"); you may
|
||||
# not use this file except in compliance with the License. You may obtain
|
||||
# a copy of the License at
|
||||
#
|
||||
# http://www.apache.org/licenses/LICENSE-2.0
|
||||
#
|
||||
# Unless required by applicable law or agreed to in writing, software
|
||||
# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
|
||||
# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
|
||||
# License for the specific language governing permissions and limitations
|
||||
# under the License.
|
||||
#
|
||||
import decimal
|
||||
|
||||
from cloudkittyclient import exc
|
||||
from cloudkittyclient.tests.unit.v1 import base
|
||||
|
||||
|
||||
class TestRating(base.BaseAPIEndpointTestCase):
|
||||
|
||||
def test_quote_request(self):
|
||||
res_data = [{'usage': {
|
||||
'instance': [{
|
||||
'vol': {'unit': 'undef', 'qty': '1'},
|
||||
'rating': {'price': decimal.Decimal(1)},
|
||||
'desc': {
|
||||
'disk_total_display': 1,
|
||||
'image_id': 'c43a3e7d-c4e6-45d6-8c8d-e2832a45bc0a',
|
||||
'ram': 64,
|
||||
'ephemeral': 0,
|
||||
'vcpus': 1,
|
||||
'source_type': 'image',
|
||||
'disk_total': 1,
|
||||
'flavor_id': '42',
|
||||
'flavor': 'm1.nano',
|
||||
'disk': 1,
|
||||
'source_val': 'c43a3e7d-c4e6-45d6-8c8d-e2832a45bc0a'}
|
||||
}]
|
||||
}}]
|
||||
|
||||
self.rating.get_quotation(res_data=res_data)
|
||||
self.api_client.post.assert_called_once_with(
|
||||
'/v1/rating/quote/', json={'resources': res_data})
|
||||
|
||||
def test_get_quotation_no_res_data(self):
|
||||
self.assertRaises(exc.ArgumentRequired, self.rating.get_quotation)
|
||||
@@ -25,26 +25,12 @@ from cloudkittyclient.v1 import storage
|
||||
|
||||
class Client(object):
|
||||
|
||||
def __init__(self,
|
||||
session=None,
|
||||
adapter_options={},
|
||||
cacert=None,
|
||||
insecure=False,
|
||||
**kwargs):
|
||||
def __init__(self, session=None, adapter_options={}, **kwargs):
|
||||
adapter_options.setdefault('service_type', 'rating')
|
||||
|
||||
if insecure:
|
||||
verify_cert = False
|
||||
else:
|
||||
if cacert:
|
||||
verify_cert = cacert
|
||||
else:
|
||||
verify_cert = True
|
||||
|
||||
self.session = session
|
||||
if self.session is None:
|
||||
self.session = ks_session.Session(
|
||||
verify=verify_cert, **kwargs)
|
||||
self.session = ks_session.Session(**kwargs)
|
||||
|
||||
self.api_client = adapter.Adapter(
|
||||
session=self.session, **adapter_options)
|
||||
|
||||
@@ -78,8 +78,10 @@ class RatingManager(base.BaseManager):
|
||||
"""
|
||||
if not kwargs.get('res_data', None):
|
||||
raise exc.ArgumentRequired("'res_data' argument is required.")
|
||||
url = self.get_url('quote')
|
||||
return self.api_client.post(url, kwargs['res_data'])
|
||||
url = self.get_url('quote', {})
|
||||
|
||||
body = {'resources': kwargs['res_data']}
|
||||
return self.api_client.post(url, json=body).json()
|
||||
|
||||
|
||||
class CliModuleGet(lister.Lister):
|
||||
|
||||
@@ -3,5 +3,5 @@
|
||||
# process, which may cause wedges in the gate later.
|
||||
|
||||
openstackdocstheme>=1.18.1 # Apache-2.0
|
||||
sphinx>=1.6.2,!=1.6.6,!=1.6.7 # BSD
|
||||
reno>=2.5.0 # Apache-2.0
|
||||
sphinx!=1.6.6,!=1.6.7,>=1.6.2 # BSD
|
||||
reno>=2.5.0 # Apache2
|
||||
|
||||
@@ -49,16 +49,6 @@ Else, use it the same way as any other OpenStack client::
|
||||
u'res_type': u'ALL',
|
||||
u'tenant_id': u'bea6a24f77e946b0a92dca7c78b7870b'}]}
|
||||
|
||||
.. warning::
|
||||
|
||||
If you want to use SSL with the client as a python library, you need to
|
||||
provide a cert to keystone's session object. Else, two additional options
|
||||
are available if you provide an ``auth`` object to the client: ``insecure``
|
||||
and ``cacert``::
|
||||
|
||||
>>> client = ck_client.Client(
|
||||
'1', auth=auth, insecure=False, cacert='/path/to/ca')
|
||||
|
||||
When using the ``cloudkitty`` CLI client with keystone authentication, the
|
||||
auth plugin to use should automagically be detected. If not, you can specify
|
||||
the auth plugin to use with ``--os-auth-type/--os-auth-plugin``::
|
||||
|
||||
@@ -1,23 +0,0 @@
|
||||
# requirements
|
||||
pbr==2.0.0 # Apache-2.0
|
||||
cliff==2.11.0 # Apache-2.0
|
||||
keystoneauth1==3.4.0 # Apache-2.0
|
||||
oslo.utils==3.35 # Apache-2.0
|
||||
oslo.log==3.36 # Apache-2.0
|
||||
PyYAML==3.12 # MIT
|
||||
jsonpath-rw-ext==1.0 # Apache-2.0
|
||||
six==1.11 # MIT
|
||||
os-client-config==1.29.0 # Apache-2.0
|
||||
|
||||
# test-requirements.txt
|
||||
coverage==4.0 # Apache-2.0
|
||||
python-subunit==0.0.18 # Apache-2.0/BSD
|
||||
oslotest==1.10.0 # Apache-2.0
|
||||
stestr==2.0 # Apache-2.0
|
||||
mock==2.0 # BSD
|
||||
python-openstackclient==3.14 # Apache-2.0
|
||||
|
||||
# doc/requirements.txt
|
||||
openstackdocstheme==1.18.1 # Apache-2.0
|
||||
sphinx==1.6.2 # BSD
|
||||
reno==2.5.0 # Apache2
|
||||
@@ -0,0 +1,5 @@
|
||||
---
|
||||
fixes:
|
||||
- |
|
||||
The ``rating.get_quotation`` method of the client has been fixed: the json
|
||||
body has been updated to match the API reference.
|
||||
@@ -8,7 +8,6 @@ Contents
|
||||
:maxdepth: 2
|
||||
|
||||
unreleased
|
||||
rocky
|
||||
queens
|
||||
|
||||
Indices and tables
|
||||
|
||||
@@ -1,6 +0,0 @@
|
||||
===================================
|
||||
Rocky Series Release Notes
|
||||
===================================
|
||||
|
||||
.. release-notes::
|
||||
:branch: stable/rocky
|
||||
@@ -2,12 +2,12 @@
|
||||
# of appearance. Changing the order has an impact on the overall integration
|
||||
# process, which may cause wedges in the gate later.
|
||||
|
||||
pbr>=2.0.0,!=2.1.0 # Apache-2.0
|
||||
cliff>=2.11.0 # Apache-2.0
|
||||
keystoneauth1>=3.4.0 # Apache-2.0
|
||||
oslo.utils>=3.35 # Apache-2.0
|
||||
oslo.log>=3.36 # Apache-2.0
|
||||
PyYAML>=3.12 # MIT
|
||||
pbr!=2.1.0,>=2.0.0 # Apache-2.0
|
||||
cliff>=2.11.0,<3.0 # Apache-2.0
|
||||
keystoneauth1>=3.4.0,<4.0 # Apache-2.0
|
||||
oslo.utils>=3.35,<4.0 # Apache-2.0
|
||||
oslo.log>=3.36,<4.0 # Apache-2.0
|
||||
PyYAML>=3.12,<4.0 # MIT
|
||||
jsonpath-rw-ext>=1.0 # Apache-2.0
|
||||
six>=1.11 # MIT
|
||||
six>=1.11,<2.0 # MIT
|
||||
os-client-config>=1.29.0 # Apache-2.0
|
||||
|
||||
@@ -4,7 +4,7 @@
|
||||
|
||||
hacking!=0.13.0,<0.14,>=0.12.0 # Apache-2.0
|
||||
|
||||
coverage>=4.0,!=4.4 # Apache-2.0
|
||||
coverage!=4.4,>=4.0 # Apache-2.0
|
||||
python-subunit>=0.0.18 # Apache-2.0/BSD
|
||||
oslotest>=1.10.0 # Apache-2.0
|
||||
stestr>=2.0 # Apache-2.0
|
||||
|
||||
16
tox.ini
16
tox.ini
@@ -1,29 +1,17 @@
|
||||
[tox]
|
||||
minversion = 2.0
|
||||
minversion = 1.6
|
||||
envlist = py35,py27,pypy,pep8
|
||||
skipsdist = True
|
||||
|
||||
[testenv]
|
||||
usedevelop = True
|
||||
install_command = pip install -c{env:UPPER_CONSTRAINTS_FILE:https://git.openstack.org/cgit/openstack/requirements/plain/upper-constraints.txt} -U {opts} {packages}
|
||||
install_command = pip install -c{env:UPPER_CONSTRAINTS_FILE:https://git.openstack.org/cgit/openstack/requirements/plain/upper-constraints.txt?h=stable/rocky} -U {opts} {packages}
|
||||
setenv =
|
||||
VIRTUAL_ENV={envdir}
|
||||
deps = -r{toxinidir}/requirements.txt
|
||||
-r{toxinidir}/test-requirements.txt
|
||||
commands = stestr run {posargs}
|
||||
|
||||
[testenv:cover]
|
||||
basepython = python3
|
||||
setenv =
|
||||
VIRTUAL_ENV={envdir}
|
||||
PYTHON=coverage run --source cloudkittyclient --parallel-mode
|
||||
commands =
|
||||
stestr run {posargs}
|
||||
coverage combine
|
||||
coverage html -d cover
|
||||
coverage xml -o cover/coverage.xml
|
||||
coverage report
|
||||
|
||||
[testenv:debug]
|
||||
basepython = python3
|
||||
commands = oslo_debug_helper {posargs}
|
||||
|
||||
Reference in New Issue
Block a user