Hello community,

here is the log from the commit of package python-troveclient for 
openSUSE:Factory checked in at 2019-05-03 22:43:23
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/python-troveclient (Old)
 and      /work/SRC/openSUSE:Factory/.python-troveclient.new.5148 (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Package is "python-troveclient"

Fri May  3 22:43:23 2019 rev:12 rq:692882 version:2.17.0

Changes:
--------
--- /work/SRC/openSUSE:Factory/python-troveclient/python-troveclient.changes    
2018-09-07 15:39:41.570517544 +0200
+++ 
/work/SRC/openSUSE:Factory/.python-troveclient.new.5148/python-troveclient.changes
  2019-05-03 22:43:25.223367005 +0200
@@ -1,0 +2,21 @@
+Mon Apr  8 11:57:06 UTC 2019 - [email protected]
+
+- update to version 2.17.0
+  - Add detailed list for instances
+  - Support configuration groups for clusters
+  - switch documentation job to new PTI
+  - Cleanup zuul.yaml
+  - Add release note link in README
+  - Switch to stestr
+  - Fix wrong keyword arguments
+  - Add extended properties support for mongo cluster.
+  - Fix python3 compatibility issues
+  - Replace assertRaisesRegexp with assertRaisesRegex
+  - Update reno for stable/rocky
+  - Don't quote {posargs} in tox.ini
+  - Remove PyPI downloads
+  - Sync two parameters of cluster-create to OSC
+  - add python 3.6 unit test job
+  - import zuul job settings from project-config
+
+-------------------------------------------------------------------

Old:
----
  python-troveclient-2.16.0.tar.gz

New:
----
  python-troveclient-2.17.0.tar.gz

++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Other differences:
------------------
++++++ python-troveclient.spec ++++++
--- /var/tmp/diff_new_pack.jroLbs/_old  2019-05-03 22:43:25.751368117 +0200
+++ /var/tmp/diff_new_pack.jroLbs/_new  2019-05-03 22:43:25.751368117 +0200
@@ -1,7 +1,7 @@
 #
 # spec file for package python-troveclient
 #
-# Copyright (c) 2018 SUSE LINUX GmbH, Nuernberg, Germany.
+# Copyright (c) 2019 SUSE LINUX GmbH, Nuernberg, Germany.
 #
 # All modifications and additions to the file contributed by third parties
 # remain the property of their copyright owners, unless otherwise agreed
@@ -12,12 +12,12 @@
 # license that conforms to the Open Source Definition (Version 1.9)
 # published by the Open Source Initiative.
 
-# Please submit bugfixes or comments via http://bugs.opensuse.org/
+# Please submit bugfixes or comments via https://bugs.opensuse.org/
 #
 
 
 Name:           python-troveclient
-Version:        2.16.0
+Version:        2.17.0
 Release:        0
 Summary:        Client library for OpenStack DBaaS API
 License:        Apache-2.0
@@ -27,21 +27,19 @@
 BuildRequires:  openstack-macros
 BuildRequires:  python-PrettyTable >= 0.7.2
 BuildRequires:  python-Sphinx
-BuildRequires:  python-devel
 BuildRequires:  python-httplib2
 BuildRequires:  python-keystoneauth1 >= 3.4.0
 BuildRequires:  python-mistralclient >= 3.1.0
 BuildRequires:  python-mock
 BuildRequires:  python-oslo.utils >= 3.33.0
-BuildRequires:  python-oslosphinx
 BuildRequires:  python-pbr >= 2.0.0
 BuildRequires:  python-requests >= 2.14.2
 BuildRequires:  python-requests-mock
 BuildRequires:  python-setuptools
 BuildRequires:  python-simplejson >= 3.5.1
 BuildRequires:  python-sphinxcontrib-apidoc
+BuildRequires:  python-stestr
 BuildRequires:  python-swiftclient >= 3.2.0
-BuildRequires:  python-testrepository
 BuildRequires:  python-testscenarios
 BuildRequires:  python-testtools
 Requires:       python-Babel >= 2.3.4
@@ -82,16 +80,13 @@
 # Generate html docs
 PBR_VERSION=%version sphinx-build -b html doc/source doc/build/html
 # Remove the Sphinx-build leftovers
-rm -rf html/.{doctrees,buildinfo}
+rm -r doc/build/html/.{doctrees,buildinfo}
 
 %install
 %py2_install
 
 %check
-# Disable tests until 
https://bugs.launchpad.net/python-troveclient/+bug/1706538 got fixed
-%if "%{version}" != "2.11.0"
-PYTHONPATH=. %{__python2} setup.py testr
-%endif
+stestr run
 
 %files
 %doc README.rst

++++++ _service ++++++
--- /var/tmp/diff_new_pack.jroLbs/_old  2019-05-03 22:43:25.771368159 +0200
+++ /var/tmp/diff_new_pack.jroLbs/_new  2019-05-03 22:43:25.771368159 +0200
@@ -1,8 +1,8 @@
 <services>
   <service mode="disabled" name="renderspec">
-    <param 
name="input-template">https://raw.githubusercontent.com/openstack/rpm-packaging/stable/rocky/openstack/python-troveclient/python-troveclient.spec.j2</param>
+    <param 
name="input-template">https://raw.githubusercontent.com/openstack/rpm-packaging/stable/stein/openstack/python-troveclient/python-troveclient.spec.j2</param>
     <param name="output-name">python-troveclient.spec</param>
-    <param 
name="requirements">https://raw.githubusercontent.com/openstack/python-troveclient/stable/rocky/requirements.txt</param>
+    <param 
name="requirements">https://raw.githubusercontent.com/openstack/python-troveclient/stable/stein/requirements.txt</param>
     <param name="changelog-email">[email protected]</param>
     <param name="changelog-provider">gh,openstack,python-troveclient</param>
   </service>

++++++ python-troveclient-2.16.0.tar.gz -> python-troveclient-2.17.0.tar.gz 
++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/python-troveclient-2.16.0/.stestr.conf 
new/python-troveclient-2.17.0/.stestr.conf
--- old/python-troveclient-2.16.0/.stestr.conf  1970-01-01 01:00:00.000000000 
+0100
+++ new/python-troveclient-2.17.0/.stestr.conf  2018-10-31 15:05:42.000000000 
+0100
@@ -0,0 +1,3 @@
+[DEFAULT]
+test_path=./
+top_dir=./
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/python-troveclient-2.16.0/.testr.conf 
new/python-troveclient-2.17.0/.testr.conf
--- old/python-troveclient-2.16.0/.testr.conf   2018-07-26 16:04:48.000000000 
+0200
+++ new/python-troveclient-2.17.0/.testr.conf   1970-01-01 01:00:00.000000000 
+0100
@@ -1,8 +0,0 @@
-[DEFAULT]
-test_command=OS_STDOUT_CAPTURE=${OS_STDOUT_CAPTURE:-1} \
-             OS_STDERR_CAPTURE=${OS_STDERR_CAPTURE:-1} \
-             OS_TEST_TIMEOUT=${OS_TEST_TIMEOUT:-60} \
-             ${PYTHON:-python} -m subunit.run discover -t ./ ./ $LISTOPT 
$IDOPTION
-
-test_id_option=--load-list $IDFILE
-test_list_option=--list
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/python-troveclient-2.16.0/.zuul.yaml 
new/python-troveclient-2.17.0/.zuul.yaml
--- old/python-troveclient-2.16.0/.zuul.yaml    2018-07-26 16:04:48.000000000 
+0200
+++ new/python-troveclient-2.17.0/.zuul.yaml    2018-10-31 15:05:42.000000000 
+0100
@@ -1,16 +1,23 @@
 - project:
     templates:
+      - check-requirements
+      - openstack-lower-constraints-jobs
+      - openstack-python-jobs
+      - openstack-python35-jobs
+      - openstack-python36-jobs
       - openstackclient-plugin-jobs
+      - publish-openstack-docs-pti
+      - release-notes-jobs-python3
     check:
       jobs:
         - python-troveclient-tempest-neutron-src
-        - openstack-tox-lower-constraints
+        - trove-functional-mysql
     gate:
       queue: trove
       jobs:
         - python-troveclient-tempest-neutron-src
+        - trove-functional-mysql
 
-        - openstack-tox-lower-constraints
 - job:
     name: python-troveclient-tempest-neutron-src
     parent: devstack-tempest
@@ -26,9 +33,9 @@
       - openstack/tempest
       - openstack/trove-tempest-plugin
     vars:
-      tox_envlist: 'full'
+      tox_envlist: full
       devstack_localrc:
-        TEMPEST_PLUGINS: '/opt/stack/trove-tempest-plugin'
+        TEMPEST_PLUGINS: /opt/stack/trove-tempest-plugin
       devstack_plugins:
         trove: git://git.openstack.org/openstack/trove
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/python-troveclient-2.16.0/AUTHORS 
new/python-troveclient-2.17.0/AUTHORS
--- old/python-troveclient-2.16.0/AUTHORS       2018-07-26 16:09:16.000000000 
+0200
+++ new/python-troveclient-2.17.0/AUTHORS       2018-10-31 15:08:28.000000000 
+0100
@@ -12,11 +12,14 @@
 Anh Tran <[email protected]>
 Arata Notsu <[email protected]>
 Ashleigh Farnham <[email protected]>
+Bartosz Zurkowski <[email protected]>
 Bob Thyne <[email protected]>
 Cao Xuan Hoang <[email protected]>
 Chandan Kumar <[email protected]>
 Chaozhe.Chen <[email protected]>
+Chen <[email protected]>
 Christian Berendt <[email protected]>
+Chuck Short <[email protected]>
 Clare Springer <[email protected]>
 Craig Vyvial <[email protected]>
 Cyril Roelandt <[email protected]>
@@ -54,6 +57,7 @@
 Kui Shi <[email protected]>
 Lance Bragstad <[email protected]>
 LiuNanke <[email protected]>
+Marcin Piwowarczyk <[email protected]>
 Masaki Matsushita <[email protected]>
 Matt Fischer <[email protected]>
 Matt Riedemann <[email protected]>
@@ -101,12 +105,14 @@
 Tovin Seven <[email protected]>
 Trevor McCasland <[email protected]>
 Valencia Serrao <[email protected]>
+Vieri <[email protected]>
 Vipul Sabhaya <[email protected]>
+Vu Cong Tuan <[email protected]>
+Yotaro Konishi <[email protected]>
 Zhao Chao <[email protected]>
 Zhi Yan Liu <[email protected]>
 ZhiQiang Fan <[email protected]>
 Zhiqiang Fan <[email protected]>
-Zuul <[email protected]>
 amcrn <[email protected]>
 [email protected] <[email protected]>
 caishan <[email protected]>
@@ -133,5 +139,6 @@
 venkatamahesh <[email protected]>
 wangyao <[email protected]>
 wlhc <[email protected]>
+wu.chunyang <[email protected]>
 yangyapeng <[email protected]>
 zhanggang <[email protected]>
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/python-troveclient-2.16.0/ChangeLog 
new/python-troveclient-2.17.0/ChangeLog
--- old/python-troveclient-2.16.0/ChangeLog     2018-07-26 16:09:16.000000000 
+0200
+++ new/python-troveclient-2.17.0/ChangeLog     2018-10-31 15:08:28.000000000 
+0100
@@ -1,6 +1,24 @@
 CHANGES
 =======
 
+2.17.0
+------
+
+* Add detailed list for instances
+* Don't quote {posargs} in tox.ini
+* Fix wrong keyword arguments
+* Cleanup zuul.yaml
+* add python 3.6 unit test job
+* switch documentation job to new PTI
+* import zuul job settings from project-config
+* Fix python3 compatibility issues
+* Replace assertRaisesRegexp with assertRaisesRegex
+* Sync two parameters of cluster-create to OSC
+* Update reno for stable/rocky
+* Support configuration groups for clusters
+* Add extended properties support for mongo cluster
+* Switch to stestr
+
 2.16.0
 ------
 
@@ -14,8 +32,10 @@
 * fix tox python3 overrides
 * Correctly mocking builtin open in test\_v1\_shell
 * Replace 'raise StopIteration' with 'return'
+* Add release note link in README
 * Add cluster-modules to OSC
 * Update the troveclient's README
+* Remove PyPI downloads
 * Trivial: Update pypi url to new url
 * Follow the new PTI for document build
 * Migrate to Zuul v3 native job definitions
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/python-troveclient-2.16.0/PKG-INFO 
new/python-troveclient-2.17.0/PKG-INFO
--- old/python-troveclient-2.16.0/PKG-INFO      2018-07-26 16:09:17.000000000 
+0200
+++ new/python-troveclient-2.17.0/PKG-INFO      2018-10-31 15:08:28.000000000 
+0100
@@ -1,6 +1,6 @@
 Metadata-Version: 1.1
 Name: python-troveclient
-Version: 2.16.0
+Version: 2.17.0
 Summary: Client library for OpenStack DBaaS API
 Home-page: https://docs.openstack.org/python-troveclient/latest
 Author: OpenStack
@@ -16,10 +16,6 @@
             :target: https://pypi.org/project/python-troveclient/
             :alt: Latest Version
         
-        .. image:: https://img.shields.io/pypi/dm/python-troveclient.svg
-            :target: https://pypi.org/project/python-troveclient/
-            :alt: Downloads
-        
         This is a client for the OpenStack Trove API. There's a Python API (the
         ``troveclient`` module), and a command-line script (``trove``). Each
         implements 100% of the OpenStack Trove API.
@@ -42,6 +38,7 @@
         * `Github`_
         * `Specs`_
         * `How to Contribute`_
+        * `Release Notes`_
         
         .. _Online Documentation: 
https://docs.openstack.org/python-troveclient/latest
         .. _Bugs: https://bugs.launchpad.net/python-troveclient
@@ -51,6 +48,7 @@
         .. _Github: https://github.com/openstack/python-troveclient
         .. _Specs: https://specs.openstack.org/openstack/trove-specs/
         .. _How to Contribute: 
https://docs.openstack.org/infra/manual/developers.html
+        .. _Release Notes: 
https://docs.openstack.org/releasenotes/python-troveclient
         
         
 Platform: UNKNOWN
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/python-troveclient-2.16.0/README.rst 
new/python-troveclient-2.17.0/README.rst
--- old/python-troveclient-2.16.0/README.rst    2018-07-26 16:04:48.000000000 
+0200
+++ new/python-troveclient-2.17.0/README.rst    2018-10-31 15:05:42.000000000 
+0100
@@ -8,10 +8,6 @@
     :target: https://pypi.org/project/python-troveclient/
     :alt: Latest Version
 
-.. image:: https://img.shields.io/pypi/dm/python-troveclient.svg
-    :target: https://pypi.org/project/python-troveclient/
-    :alt: Downloads
-
 This is a client for the OpenStack Trove API. There's a Python API (the
 ``troveclient`` module), and a command-line script (``trove``). Each
 implements 100% of the OpenStack Trove API.
@@ -34,6 +30,7 @@
 * `Github`_
 * `Specs`_
 * `How to Contribute`_
+* `Release Notes`_
 
 .. _Online Documentation: https://docs.openstack.org/python-troveclient/latest
 .. _Bugs: https://bugs.launchpad.net/python-troveclient
@@ -43,3 +40,4 @@
 .. _Github: https://github.com/openstack/python-troveclient
 .. _Specs: https://specs.openstack.org/openstack/trove-specs/
 .. _How to Contribute: https://docs.openstack.org/infra/manual/developers.html
+.. _Release Notes: https://docs.openstack.org/releasenotes/python-troveclient
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/python-troveclient-2.16.0/lower-constraints.txt 
new/python-troveclient-2.17.0/lower-constraints.txt
--- old/python-troveclient-2.16.0/lower-constraints.txt 2018-07-26 
16:04:48.000000000 +0200
+++ new/python-troveclient-2.17.0/lower-constraints.txt 2018-10-31 
15:05:42.000000000 +0100
@@ -78,8 +78,8 @@
 snowballstemmer==1.2.1
 Sphinx==1.6.2
 sphinxcontrib-websupport==1.0.1
+stestr==2.0.0
 stevedore==1.20.0
-testrepository==0.0.18
 testscenarios==0.4
 testtools==2.2.0
 traceback2==1.4.0
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/python-troveclient-2.16.0/python_troveclient.egg-info/PKG-INFO 
new/python-troveclient-2.17.0/python_troveclient.egg-info/PKG-INFO
--- old/python-troveclient-2.16.0/python_troveclient.egg-info/PKG-INFO  
2018-07-26 16:09:16.000000000 +0200
+++ new/python-troveclient-2.17.0/python_troveclient.egg-info/PKG-INFO  
2018-10-31 15:08:28.000000000 +0100
@@ -1,6 +1,6 @@
 Metadata-Version: 1.1
 Name: python-troveclient
-Version: 2.16.0
+Version: 2.17.0
 Summary: Client library for OpenStack DBaaS API
 Home-page: https://docs.openstack.org/python-troveclient/latest
 Author: OpenStack
@@ -16,10 +16,6 @@
             :target: https://pypi.org/project/python-troveclient/
             :alt: Latest Version
         
-        .. image:: https://img.shields.io/pypi/dm/python-troveclient.svg
-            :target: https://pypi.org/project/python-troveclient/
-            :alt: Downloads
-        
         This is a client for the OpenStack Trove API. There's a Python API (the
         ``troveclient`` module), and a command-line script (``trove``). Each
         implements 100% of the OpenStack Trove API.
@@ -42,6 +38,7 @@
         * `Github`_
         * `Specs`_
         * `How to Contribute`_
+        * `Release Notes`_
         
         .. _Online Documentation: 
https://docs.openstack.org/python-troveclient/latest
         .. _Bugs: https://bugs.launchpad.net/python-troveclient
@@ -51,6 +48,7 @@
         .. _Github: https://github.com/openstack/python-troveclient
         .. _Specs: https://specs.openstack.org/openstack/trove-specs/
         .. _How to Contribute: 
https://docs.openstack.org/infra/manual/developers.html
+        .. _Release Notes: 
https://docs.openstack.org/releasenotes/python-troveclient
         
         
 Platform: UNKNOWN
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/python-troveclient-2.16.0/python_troveclient.egg-info/SOURCES.txt 
new/python-troveclient-2.17.0/python_troveclient.egg-info/SOURCES.txt
--- old/python-troveclient-2.16.0/python_troveclient.egg-info/SOURCES.txt       
2018-07-26 16:09:17.000000000 +0200
+++ new/python-troveclient-2.17.0/python_troveclient.egg-info/SOURCES.txt       
2018-10-31 15:08:28.000000000 +0100
@@ -1,5 +1,5 @@
 .coveragerc
-.testr.conf
+.stestr.conf
 .zuul.yaml
 AUTHORS
 CONTRIBUTING.rst
@@ -46,6 +46,7 @@
 releasenotes/notes/add-configuration-create-to-osc-fd556891b57cce05.yaml
 releasenotes/notes/add-configuration-default-to-osc-55867236d19d83c4.yaml
 releasenotes/notes/add-configuration-delete-to-osc-d52e6a2cc84994e5.yaml
+releasenotes/notes/add-configuration-groups-for-clusters-6183b0b7b4fb8c9e.yaml
 releasenotes/notes/add-configuration-instances-to-osc-80a7d7b9d0c79f62.yaml
 releasenotes/notes/add-configuration-list-to-osc-4a12d508f6bb5472.yaml
 
releasenotes/notes/add-configuration-parameter-list-to-osc-3d1a383999dd2d64.yaml
@@ -66,6 +67,7 @@
 releasenotes/notes/add-force-delete-to-osc-dfff1db4da937415.yaml
 releasenotes/notes/add-instance-create-to-osc-77484f1c477aa864.yaml
 releasenotes/notes/add-instance-delete-to-osc-bf8de501c8945d58.yaml
+releasenotes/notes/add-instance-detailed-list-23dc77ed898cc6db.yaml
 releasenotes/notes/add-instance-list-to-osc-05714dfce947a57e.yaml
 releasenotes/notes/add-instance-show-to-osc-d97cac1c697dcbdd.yaml
 releasenotes/notes/add-log-enable-to-osc-a97bbb3a7af7b80b.yaml
@@ -95,6 +97,7 @@
 releasenotes/notes/datastore-version-volume-types-62556ce5917195fd.yaml
 releasenotes/notes/fix-config-param-list-output-27bf30fce5388d4b.yaml
 releasenotes/notes/fix-output-of-cluster-create-584d85ffe1129d57.yaml
+releasenotes/notes/fix-wrong-datastore-flavors-args-in-osc-e0322cb5424f8c1b.yaml
 releasenotes/notes/fix_admin_keystoneauth1-ed534462434.yaml
 releasenotes/notes/flavor-list-disk-befd656f86592af1.yaml
 releasenotes/notes/flavor-list-ephemeral-de4eee3a30b09b64.yaml
@@ -107,6 +110,7 @@
 releasenotes/notes/module-ordering-2d1e1a3c37c30c71.yaml
 releasenotes/notes/module-support-for-clusters-87b41dd7648275bf.yaml
 releasenotes/notes/module_update_all_ds-f5cdbb71462e3de4.yaml
+releasenotes/notes/mongo-cluster-create-use-extended-perperties-be7c075585dc709a.yaml
 releasenotes/notes/multi-region-ec516da866def1ed.yaml
 releasenotes/notes/paginate-config-list-c311ce3c5394d437.yaml
 releasenotes/notes/persist-error-message-cda8dfe485fe92ba.yaml
@@ -123,6 +127,7 @@
 releasenotes/source/ocata.rst
 releasenotes/source/pike.rst
 releasenotes/source/queens.rst
+releasenotes/source/rocky.rst
 releasenotes/source/unreleased.rst
 releasenotes/source/_static/.placeholder
 releasenotes/source/_templates/.placeholder
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/python-troveclient-2.16.0/python_troveclient.egg-info/pbr.json 
new/python-troveclient-2.17.0/python_troveclient.egg-info/pbr.json
--- old/python-troveclient-2.16.0/python_troveclient.egg-info/pbr.json  
2018-07-26 16:09:16.000000000 +0200
+++ new/python-troveclient-2.17.0/python_troveclient.egg-info/pbr.json  
2018-10-31 15:08:28.000000000 +0100
@@ -1 +1 @@
-{"git_version": "3adf5fe", "is_release": true}
\ No newline at end of file
+{"git_version": "ba873ae", "is_release": true}
\ No newline at end of file
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/python-troveclient-2.16.0/releasenotes/notes/add-configuration-groups-for-clusters-6183b0b7b4fb8c9e.yaml
 
new/python-troveclient-2.17.0/releasenotes/notes/add-configuration-groups-for-clusters-6183b0b7b4fb8c9e.yaml
--- 
old/python-troveclient-2.16.0/releasenotes/notes/add-configuration-groups-for-clusters-6183b0b7b4fb8c9e.yaml
        1970-01-01 01:00:00.000000000 +0100
+++ 
new/python-troveclient-2.17.0/releasenotes/notes/add-configuration-groups-for-clusters-6183b0b7b4fb8c9e.yaml
        2018-10-31 15:05:42.000000000 +0100
@@ -0,0 +1,6 @@
+---
+features:
+  - |
+    A --configuration flag was added to the ``trove cluster-create``
+    command, in order to allow a user to attach specific configuration
+    for cluster.
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/python-troveclient-2.16.0/releasenotes/notes/add-instance-detailed-list-23dc77ed898cc6db.yaml
 
new/python-troveclient-2.17.0/releasenotes/notes/add-instance-detailed-list-23dc77ed898cc6db.yaml
--- 
old/python-troveclient-2.16.0/releasenotes/notes/add-instance-detailed-list-23dc77ed898cc6db.yaml
   1970-01-01 01:00:00.000000000 +0100
+++ 
new/python-troveclient-2.17.0/releasenotes/notes/add-instance-detailed-list-23dc77ed898cc6db.yaml
   2018-10-31 15:05:42.000000000 +0100
@@ -0,0 +1,7 @@
+---
+features:
+  - |
+    Added ``detailed`` option to instances client in ``instances.list``
+    command. Now, detailed instance list can be obtained by setting
+    ``detailed`` parameter to ``True``. Trove will then include more details
+    in the API response.
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/python-troveclient-2.16.0/releasenotes/notes/fix-wrong-datastore-flavors-args-in-osc-e0322cb5424f8c1b.yaml
 
new/python-troveclient-2.17.0/releasenotes/notes/fix-wrong-datastore-flavors-args-in-osc-e0322cb5424f8c1b.yaml
--- 
old/python-troveclient-2.16.0/releasenotes/notes/fix-wrong-datastore-flavors-args-in-osc-e0322cb5424f8c1b.yaml
      1970-01-01 01:00:00.000000000 +0100
+++ 
new/python-troveclient-2.17.0/releasenotes/notes/fix-wrong-datastore-flavors-args-in-osc-e0322cb5424f8c1b.yaml
      2018-10-31 15:05:42.000000000 +0100
@@ -0,0 +1,7 @@
+---
+fixes:
+  - |
+    [`bug 1794663 
<https://bugs.launchpad.net/python-troveclient/+bug/1794663>`_]
+    Fixed wrong keyword arguments to make ``openstack database flavor list``
+    command work properly with ``--datastore-type`` and
+    ``--datastore-version-id`` options.
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/python-troveclient-2.16.0/releasenotes/notes/mongo-cluster-create-use-extended-perperties-be7c075585dc709a.yaml
 
new/python-troveclient-2.17.0/releasenotes/notes/mongo-cluster-create-use-extended-perperties-be7c075585dc709a.yaml
--- 
old/python-troveclient-2.16.0/releasenotes/notes/mongo-cluster-create-use-extended-perperties-be7c075585dc709a.yaml
 1970-01-01 01:00:00.000000000 +0100
+++ 
new/python-troveclient-2.17.0/releasenotes/notes/mongo-cluster-create-use-extended-perperties-be7c075585dc709a.yaml
 2018-10-31 15:05:42.000000000 +0100
@@ -0,0 +1,8 @@
+---
+features:
+  - |
+    User can specify the number and volume of mongos/configserver by using
+    the extends argument when creating mongodb cluster. Currently,
+    the supported parameters are, num_configsvr, num_mongos,
+    configsvr_volume_size, configsvr_volume_type, mongos_volume_size
+    and mongos_volume_type.
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/python-troveclient-2.16.0/releasenotes/source/index.rst 
new/python-troveclient-2.17.0/releasenotes/source/index.rst
--- old/python-troveclient-2.16.0/releasenotes/source/index.rst 2018-07-26 
16:04:48.000000000 +0200
+++ new/python-troveclient-2.17.0/releasenotes/source/index.rst 2018-10-31 
15:05:42.000000000 +0100
@@ -8,6 +8,7 @@
    :maxdepth: 2
 
    unreleased
+   rocky
    queens
    pike
    ocata
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/python-troveclient-2.16.0/releasenotes/source/rocky.rst 
new/python-troveclient-2.17.0/releasenotes/source/rocky.rst
--- old/python-troveclient-2.16.0/releasenotes/source/rocky.rst 1970-01-01 
01:00:00.000000000 +0100
+++ new/python-troveclient-2.17.0/releasenotes/source/rocky.rst 2018-10-31 
15:05:42.000000000 +0100
@@ -0,0 +1,6 @@
+===================================
+ Rocky Series Release Notes
+===================================
+
+.. release-notes::
+   :branch: stable/rocky
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/python-troveclient-2.16.0/test-requirements.txt 
new/python-troveclient-2.17.0/test-requirements.txt
--- old/python-troveclient-2.16.0/test-requirements.txt 2018-07-26 
16:04:48.000000000 +0200
+++ new/python-troveclient-2.17.0/test-requirements.txt 2018-10-31 
15:05:42.000000000 +0100
@@ -7,7 +7,7 @@
 oslotest>=3.2.0 # Apache-2.0
 python-openstackclient>=3.12.0 # Apache-2.0
 requests-mock>=1.2.0 # Apache-2.0
-testrepository>=0.0.18 # Apache-2.0/BSD
+stestr>=2.0.0 # Apache-2.0
 testscenarios>=0.4 # Apache-2.0/BSD
 testtools>=2.2.0 # MIT
 mock>=2.0.0 # BSD
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/python-troveclient-2.16.0/tox.ini 
new/python-troveclient-2.17.0/tox.ini
--- old/python-troveclient-2.16.0/tox.ini       2018-07-26 16:04:48.000000000 
+0200
+++ new/python-troveclient-2.17.0/tox.ini       2018-10-31 15:05:51.000000000 
+0100
@@ -19,8 +19,7 @@
        -r{toxinidir}/requirements.txt
        -r{toxinidir}/test-requirements.txt
 commands = find . -type f -name "*.pyc" -delete
-           rm -f .testrepository/times.dbm
-           python setup.py testr --testr-args='{posargs}'
+           stestr run {posargs}
 whitelist_externals = find
                       rm
 
@@ -46,10 +45,14 @@
 
 [testenv:cover]
 basepython = python3
+setenv =
+    PYTHON=coverage run --source troveclient --parallel-mode
 commands =
     coverage erase
-    python setup.py testr --coverage --testr-args='{posargs}'
-    coverage html
+    stestr run {posargs}
+    coverage combine
+    coverage html -d cover
+    coverage xml -o cover/coverage.xml
     coverage report
 
 [testenv:docs]
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/python-troveclient-2.16.0/troveclient/apiclient/base.py 
new/python-troveclient-2.17.0/troveclient/apiclient/base.py
--- old/python-troveclient-2.16.0/troveclient/apiclient/base.py 2018-07-26 
16:04:48.000000000 +0200
+++ new/python-troveclient-2.17.0/troveclient/apiclient/base.py 2018-10-31 
15:05:42.000000000 +0100
@@ -458,6 +458,8 @@
                 pass
 
     def __getattr__(self, k):
+        if k == "__setstate__":
+            raise AttributeError(k)
         if k not in self.__dict__:
             # NOTE(bcwaldon): disallow lazy-loading if already loaded once
             if not self.is_loaded:
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/python-troveclient-2.16.0/troveclient/compat/base.py 
new/python-troveclient-2.17.0/troveclient/compat/base.py
--- old/python-troveclient-2.16.0/troveclient/compat/base.py    2018-07-26 
16:04:48.000000000 +0200
+++ new/python-troveclient-2.17.0/troveclient/compat/base.py    2018-10-31 
15:05:42.000000000 +0100
@@ -246,7 +246,7 @@
         return None
 
     def _add_details(self, info):
-        for (k, v) in info.iteritems():
+        for (k, v) in info.items():
             try:
                 setattr(self, k, v)
             except AttributeError:
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/python-troveclient-2.16.0/troveclient/compat/client.py 
new/python-troveclient-2.17.0/troveclient/compat/client.py
--- old/python-troveclient-2.16.0/troveclient/compat/client.py  2018-07-26 
16:04:48.000000000 +0200
+++ new/python-troveclient-2.17.0/troveclient/compat/client.py  2018-10-31 
15:05:42.000000000 +0100
@@ -200,9 +200,9 @@
         if 'body' in kwargs:
             kwargs['body'] = json.dumps(kwargs['body'])
 
-    def morph_response_body(self, body_string):
+    def morph_response_body(self, raw_body):
         try:
-            return json.loads(body_string)
+            return json.loads(raw_body.decode())
         except ValueError:
             raise exceptions.ResponseFormatError()
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/python-troveclient-2.16.0/troveclient/osc/v1/database_clusters.py 
new/python-troveclient-2.17.0/troveclient/osc/v1/database_clusters.py
--- old/python-troveclient-2.16.0/troveclient/osc/v1/database_clusters.py       
2018-07-26 16:04:48.000000000 +0200
+++ new/python-troveclient-2.17.0/troveclient/osc/v1/database_clusters.py       
2018-10-31 15:05:42.000000000 +0100
@@ -18,7 +18,10 @@
 import six
 
 from troveclient.i18n import _
+from troveclient.v1.shell import _parse_extended_properties
 from troveclient.v1.shell import _parse_instance_options
+from troveclient.v1.shell import EXT_PROPS_HELP
+from troveclient.v1.shell import EXT_PROPS_METAVAR
 from troveclient.v1.shell import INSTANCE_HELP
 from troveclient.v1.shell import INSTANCE_METAVAR
 
@@ -165,16 +168,37 @@
             help=_('Locality policy to use when creating cluster. '
                    'Choose one of %(choices)s.'),
         )
+        parser.add_argument(
+            '--extended-properties',
+            dest='extended_properties',
+            metavar=EXT_PROPS_METAVAR,
+            default=None,
+            help=EXT_PROPS_HELP,
+        )
+        parser.add_argument(
+            '--configuration',
+            metavar='<configuration>',
+            type=str,
+            default=None,
+            help=_('ID of the configuration group to attach to the cluster.'),
+        )
         return parser
 
     def take_action(self, parsed_args):
         database = self.app.client_manager.database
         instances = _parse_instance_options(database, parsed_args.instances)
-        cluster = database.clusters.create(parsed_args.name,
-                                           parsed_args.datastore,
-                                           parsed_args.datastore_version,
-                                           instances=instances,
-                                           locality=parsed_args.locality)
+        extended_properties = {}
+        if parsed_args.extended_properties:
+            extended_properties = _parse_extended_properties(
+                parsed_args.extended_properties)
+        cluster = database.clusters.create(
+            parsed_args.name,
+            parsed_args.datastore,
+            parsed_args.datastore_version,
+            instances=instances,
+            locality=parsed_args.locality,
+            extended_properties=extended_properties,
+            configuration=parsed_args.configuration)
         cluster = set_attributes_for_print_detail(cluster)
         return zip(*sorted(six.iteritems(cluster)))
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/python-troveclient-2.16.0/troveclient/osc/v1/database_flavors.py 
new/python-troveclient-2.17.0/troveclient/osc/v1/database_flavors.py
--- old/python-troveclient-2.16.0/troveclient/osc/v1/database_flavors.py        
2018-07-26 16:04:48.000000000 +0200
+++ new/python-troveclient-2.17.0/troveclient/osc/v1/database_flavors.py        
2018-10-31 15:05:42.000000000 +0100
@@ -58,8 +58,8 @@
         db_flavors = self.app.client_manager.database.flavors
         if parsed_args.datastore_type and parsed_args.datastore_version_id:
             flavors = db_flavors.list_datastore_version_associated_flavors(
-                datastore_type=parsed_args.datastore_type,
-                datastore_version_id=parsed_args.datastore_version_id)
+                datastore=parsed_args.datastore_type,
+                version_id=parsed_args.datastore_version_id)
         elif (not parsed_args.datastore_type and not
               parsed_args.datastore_version_id):
             flavors = db_flavors.list()
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/python-troveclient-2.16.0/troveclient/tests/osc/v1/test_database_clusters.py
 
new/python-troveclient-2.17.0/troveclient/tests/osc/v1/test_database_clusters.py
--- 
old/python-troveclient-2.16.0/troveclient/tests/osc/v1/test_database_clusters.py
    2018-07-26 16:04:48.000000000 +0200
+++ 
new/python-troveclient-2.17.0/troveclient/tests/osc/v1/test_database_clusters.py
    2018-10-31 15:05:42.000000000 +0100
@@ -140,15 +140,21 @@
                      'flavor="03",volume=3']
         parsed_instances = [{'flavor': '02', 'volume': 2},
                             {'flavor': '03', 'volume': 3}]
+        extended_properties = "foo_properties=foo_value"
+        parsed_extended_properties = {'foo_properties': 'foo_value'}
         mock_parse_instance_opts.return_value = parsed_instances
         args = ['test-name', 'vertica', '7.1',
                 '--instance', instances[0],
-                '--instance', instances[1]]
+                '--instance', instances[1],
+                '--extended-properties', extended_properties,
+                '--configuration', 'config01']
         verifylist = [
             ('name', 'test-name'),
             ('datastore', 'vertica'),
             ('datastore_version', '7.1'),
             ('instances', instances),
+            ('extended_properties', extended_properties),
+            ('configuration', 'config01'),
         ]
         parsed_args = self.check_parser(self.cmd, args, verifylist)
         columns, data = self.cmd.take_action(parsed_args)
@@ -156,7 +162,9 @@
             parsed_args.name, parsed_args.datastore,
             parsed_args.datastore_version,
             instances=parsed_instances,
-            locality=parsed_args.locality)
+            locality=parsed_args.locality,
+            extended_properties=parsed_extended_properties,
+            configuration=parsed_args.configuration)
         self.assertEqual(self.columns, columns)
         self.assertEqual(self.values, data)
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/python-troveclient-2.16.0/troveclient/tests/osc/v1/test_database_flavors.py 
new/python-troveclient-2.17.0/troveclient/tests/osc/v1/test_database_flavors.py
--- 
old/python-troveclient-2.16.0/troveclient/tests/osc/v1/test_database_flavors.py 
    2018-07-26 16:04:48.000000000 +0200
+++ 
new/python-troveclient-2.17.0/troveclient/tests/osc/v1/test_database_flavors.py 
    2018-10-31 15:05:42.000000000 +0100
@@ -32,6 +32,8 @@
         self.cmd = database_flavors.ListDatabaseFlavors(self.app, None)
         self.data = [self.fake_flavors.get_flavors_1()]
         self.flavor_client.list.return_value = self.data
+        self.flavor_client.list_datastore_version_associated_flavors. \
+            return_value = self.data
 
     def test_flavor_list_defaults(self):
         parsed_args = self.check_parser(self.cmd, [], [])
@@ -40,6 +42,18 @@
         self.assertEqual(self.columns, columns)
         self.assertEqual([self.values], values)
 
+    def test_flavor_list_with_optional_args(self):
+        args = ['--datastore-type', 'mysql',
+                '--datastore-version-id', '5.6']
+        parsed_args = self.check_parser(self.cmd, args, [])
+        list_flavor_dict = {'datastore': 'mysql',
+                            'version_id': '5.6'}
+        columns, values = self.cmd.take_action(parsed_args)
+        self.flavor_client.list_datastore_version_associated_flavors. \
+            assert_called_once_with(**list_flavor_dict)
+        self.assertEqual(self.columns, columns)
+        self.assertEqual([self.values], values)
+
 
 class TestFlavorShow(TestFlavors):
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/python-troveclient-2.16.0/troveclient/tests/test_client.py 
new/python-troveclient-2.17.0/troveclient/tests/test_client.py
--- old/python-troveclient-2.16.0/troveclient/tests/test_client.py      
2018-07-26 16:04:48.000000000 +0200
+++ new/python-troveclient-2.17.0/troveclient/tests/test_client.py      
2018-10-31 15:05:42.000000000 +0100
@@ -44,7 +44,7 @@
                           '0', version_map)
 
     def test_client_with_auth_system_without_auth_plugin(self):
-        self.assertRaisesRegexp(
+        self.assertRaisesRegex(
             exceptions.AuthSystemNotFound, "AuthSystemNotFound: 'something'",
             other_client.HTTPClient, user='user', password='password',
             projectid='project', timeout=2, auth_url="http://www.blah.com";,
@@ -147,7 +147,7 @@
         mock_request.side_effect = requests.exceptions.ConnectionError(
             'connection refused')
         with mock.patch('requests.request', mock_request):
-            self.assertRaisesRegexp(
+            self.assertRaisesRegex(
                 exceptions.ClientException,
                 'Unable to establish connection: connection refused',
                 instance.get, '/instances')
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/python-troveclient-2.16.0/troveclient/tests/test_clusters.py 
new/python-troveclient-2.17.0/troveclient/tests/test_clusters.py
--- old/python-troveclient-2.16.0/troveclient/tests/test_clusters.py    
2018-07-26 16:04:48.000000000 +0200
+++ new/python-troveclient-2.17.0/troveclient/tests/test_clusters.py    
2018-10-31 15:05:42.000000000 +0100
@@ -72,9 +72,19 @@
         clusters_test._create = mock.Mock(side_effect=side_effect_func)
         instances = [{'flavor-id': 11, 'volume': 2}]
         locality = 'affinity'
+        extended_properties = {
+            'num_configsvr': 5,
+            'num_mongos': 7,
+            'configsvr_volume_size': 11,
+            'configsvr_volume_type': 'foo_type',
+            'mongos_volume_size': 12,
+            'mongos_volume_type': 'bar_type'}
+        configuration = 'test-config'
         path, body, resp_key = clusters_test.create("test-name", "datastore",
                                                     "datastore-version",
-                                                    instances, locality)
+                                                    instances, locality,
+                                                    extended_properties,
+                                                    configuration)
         self.assertEqual("/clusters", path)
         self.assertEqual("cluster", resp_key)
         self.assertEqual("test-name", body["cluster"]["name"])
@@ -83,6 +93,9 @@
                          body["cluster"]["datastore"]["version"])
         self.assertEqual(instances, body["cluster"]["instances"])
         self.assertEqual(locality, body["cluster"]["locality"])
+        self.assertEqual(extended_properties,
+                         body["cluster"]["extended_properties"])
+        self.assertEqual(configuration, body["cluster"]["configuration"])
 
     def test_list(self):
         page_mock = mock.Mock()
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/python-troveclient-2.16.0/troveclient/tests/test_instances.py 
new/python-troveclient-2.17.0/troveclient/tests/test_instances.py
--- old/python-troveclient-2.16.0/troveclient/tests/test_instances.py   
2018-07-26 16:04:48.000000000 +0200
+++ new/python-troveclient-2.17.0/troveclient/tests/test_instances.py   
2018-10-31 15:05:42.000000000 +0100
@@ -124,6 +124,16 @@
         page_mock.assert_called_with("/instances", "instances", limit, marker,
                                      include_clustered)
 
+    def test_detailed_list(self):
+        page_mock = mock.Mock()
+        self.instances._paginated = page_mock
+        limit = "test-limit"
+        marker = "test-marker"
+        include_clustered = {'include_clustered': False}
+        self.instances.list(limit, marker, detailed=True)
+        page_mock.assert_called_with("/instances/detail", "instances", limit,
+                                     marker, include_clustered)
+
     def test_get(self):
         def side_effect_func(path, inst):
             return path, inst
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/python-troveclient-2.16.0/troveclient/tests/test_v1_shell.py 
new/python-troveclient-2.17.0/troveclient/tests/test_v1_shell.py
--- old/python-troveclient-2.16.0/troveclient/tests/test_v1_shell.py    
2018-07-26 16:04:48.000000000 +0200
+++ new/python-troveclient-2.17.0/troveclient/tests/test_v1_shell.py    
2018-10-31 15:05:42.000000000 +0100
@@ -223,7 +223,7 @@
         cmd = 'flavor-list --datastore_type mysql'
         exepcted_error_msg = ('Missing argument\(s\): '
                               'datastore_type, datastore_version_id')
-        self.assertRaisesRegexp(
+        self.assertRaisesRegex(
             exceptions.MissingArgs, exepcted_error_msg, self.run_command,
             cmd)
 
@@ -258,7 +258,7 @@
         cmd = 'volume-type-list --datastore_type mysql'
         exepcted_error_msg = ('Missing argument\(s\): '
                               'datastore_type, datastore_version_id')
-        self.assertRaisesRegexp(
+        self.assertRaisesRegex(
             exceptions.MissingArgs, exepcted_error_msg, self.run_command,
             cmd)
 
@@ -390,7 +390,7 @@
     def test_boot_locality_error(self):
         cmd = ('create slave-1 1 --size 1 --locality=affinity '
                '--replica_of=master_1')
-        self.assertRaisesRegexp(
+        self.assertRaisesRegex(
             exceptions.ValidationError,
             'Cannot specify locality when adding replicas to existing '
             'master.',
@@ -399,7 +399,7 @@
     def test_boot_nic_error(self):
         cmd = ('create test-member-1 1 --size 1 --volume_type lvm '
                '--nic net-id=some-id,port-id=some-id')
-        self.assertRaisesRegexp(
+        self.assertRaisesRegex(
             exceptions.ValidationError,
             'Invalid NIC argument: nic=\'net-id=some-id,port-id=some-id\'',
             self.run_command, cmd)
@@ -474,7 +474,7 @@
     def test_cluster_create_error(self):
         cmd = ('cluster-create test-clstr vertica 7.1 --instance volume=2 '
                '--instance flavor=2,volume=1')
-        self.assertRaisesRegexp(
+        self.assertRaisesRegex(
             exceptions.MissingArgs, "Missing option 'flavor'",
             self.run_command, cmd)
 
@@ -516,6 +516,50 @@
                 'name': 'test-clstr2',
                 'locality': 'affinity'}})
 
+    def test_cluster_create_with_configuration(self):
+        cmd = ('cluster-create test-clstr2 redis 3.0 '
+               '--configuration=config01 '
+               '--instance flavor=2,volume=1 '
+               '--instance flavor=02,volume=1 '
+               '--instance flavor=2,volume=1 ')
+        self.run_command(cmd)
+        self.assert_called_anytime(
+            'POST', '/clusters',
+            {'cluster': {
+                'instances': [
+                    {'flavorRef': '2',
+                     'volume': {'size': '1'}},
+                    {'flavorRef': '02',
+                     'volume': {'size': '1'}},
+                    {'flavorRef': '2',
+                     'volume': {'size': '1'}},
+                ],
+                'datastore': {'version': '3.0', 'type': 'redis'},
+                'name': 'test-clstr2',
+                'configuration': 'config01'}})
+
+    def test_cluster_create_with_extended_properties(self):
+        cmd = ('cluster-create test-clstr3 mongodb 4.0 '
+               '--instance flavor=2,volume=1 '
+               '--instance flavor=02,volume=1 '
+               '--instance flavor=2,volume=1 '
+               '--extended_properties num_mongos=3')
+        self.run_command(cmd)
+        self.assert_called_anytime(
+            'POST', '/clusters',
+            {'cluster': {
+                'instances': [
+                    {'flavorRef': '2',
+                     'volume': {'size': '1'}},
+                    {'flavorRef': '02',
+                     'volume': {'size': '1'}},
+                    {'flavorRef': '2',
+                     'volume': {'size': '1'}},
+                ],
+                'datastore': {'version': '4.0', 'type': 'mongodb'},
+                'name': 'test-clstr3',
+                'extended_properties': {'num_mongos': '3'}}})
+
     def test_cluster_create_with_nic_az(self):
         cmd = ('cluster-create test-clstr1 vertica 7.1 '
                '--instance flavor=2,volume=2,nic=\'net-id=some-id\','
@@ -548,7 +592,7 @@
                'port-id=some-port-id,availability_zone=2 '
                '--instance flavor=2,volume=1,nic=net-id=some-id,'
                'port-id=some-port-id,availability_zone=2')
-        self.assertRaisesRegexp(
+        self.assertRaisesRegex(
             exceptions.ValidationError, "Invalid 'nic' option. "
             "The value must be quoted.",
             self.run_command, cmd)
@@ -559,7 +603,7 @@
                'availability_zone=2 '
                '--instance flavor=2,volume=1,nic=\'v4-fixed-ip=10.0.0.1\','
                'availability_zone=2')
-        self.assertRaisesRegexp(
+        self.assertRaisesRegex(
             exceptions.ValidationError, 'Invalid NIC argument',
             self.run_command, cmd)
 
@@ -582,9 +626,9 @@
     def test_datastore_version_show_error(self):
         expected_error_msg = ('The datastore name or id is required to '
                               'retrieve a datastore version by name.')
-        self.assertRaisesRegexp(exceptions.NoUniqueMatch, expected_error_msg,
-                                self.run_command,
-                                'datastore-version-show v-56')
+        self.assertRaisesRegex(exceptions.NoUniqueMatch, expected_error_msg,
+                               self.run_command,
+                               'datastore-version-show v-56')
 
     def test_configuration_list(self):
         self.run_command('configuration-list')
@@ -616,7 +660,7 @@
         expected_error_msg = ('The datastore name or id is required to '
                               'retrieve the parameters for the configuration '
                               'group by name')
-        self.assertRaisesRegexp(
+        self.assertRaisesRegex(
             exceptions.NoUniqueMatch, expected_error_msg,
             self.run_command, 'configuration-parameter-list v-156')
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/python-troveclient-2.16.0/troveclient/v1/clusters.py 
new/python-troveclient-2.17.0/troveclient/v1/clusters.py
--- old/python-troveclient-2.16.0/troveclient/v1/clusters.py    2018-07-26 
16:04:48.000000000 +0200
+++ new/python-troveclient-2.17.0/troveclient/v1/clusters.py    2018-10-31 
15:05:42.000000000 +0100
@@ -37,7 +37,7 @@
     resource_class = Cluster
 
     def create(self, name, datastore, datastore_version, instances=None,
-               locality=None):
+               locality=None, extended_properties=None, configuration=None):
         """Create (boot) a new cluster."""
         body = {"cluster": {
             "name": name
@@ -51,6 +51,10 @@
             body["cluster"]["instances"] = instances
         if locality:
             body["cluster"]["locality"] = locality
+        if extended_properties:
+            body["cluster"]["extended_properties"] = extended_properties
+        if configuration:
+            body["cluster"]["configuration"] = configuration
 
         return self._create("/clusters", body, "cluster")
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/python-troveclient-2.16.0/troveclient/v1/instances.py 
new/python-troveclient-2.17.0/troveclient/v1/instances.py
--- old/python-troveclient-2.16.0/troveclient/v1/instances.py   2018-07-26 
16:04:48.000000000 +0200
+++ new/python-troveclient-2.17.0/troveclient/v1/instances.py   2018-10-31 
15:05:42.000000000 +0100
@@ -179,12 +179,15 @@
         resp, body = self.api.client.patch(url, body=body)
         common.check_for_exceptions(resp, body, url)
 
-    def list(self, limit=None, marker=None, include_clustered=False):
+    def list(self, limit=None, marker=None, include_clustered=False,
+             detailed=False):
         """Get a list of all instances.
 
         :rtype: list of :class:`Instance`.
         """
-        return self._paginated("/instances", "instances", limit, marker,
+        detail = "/detail" if detailed else ""
+        url = "/instances%s" % detail
+        return self._paginated(url, "instances", limit, marker,
                                {"include_clustered": include_clustered})
 
     def get(self, instance):
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/python-troveclient-2.16.0/troveclient/v1/shell.py 
new/python-troveclient-2.17.0/troveclient/v1/shell.py
--- old/python-troveclient-2.16.0/troveclient/v1/shell.py       2018-07-26 
16:04:48.000000000 +0200
+++ new/python-troveclient-2.17.0/troveclient/v1/shell.py       2018-10-31 
15:05:42.000000000 +0100
@@ -41,6 +41,17 @@
 NO_LOG_FOUND_ERROR = _("ERROR: No published '%(log_name)s' log was found for "
                        "%(instance)s.")
 LOCALITY_DOMAIN = ['affinity', 'anti-affinity']
+EXT_PROPS_METAVAR = INSTANCE_METAVAR
+EXT_PROPS_HELP = _("Add extended properties for cluster create. "
+                   "Currently only support MongoDB options, other databases "
+                   "will be added in the future. "
+                   "MongoDB: "
+                   "  num_configsvr=<number_of_configsvr>, "
+                   "  num_mongos=<number_of_mongos>, "
+                   "  configsvr_volume_size=<disk_size_in_GB>, "
+                   "  configsvr_volume_type=<volume_type>, "
+                   "  mongos_volume_size=<disk_size_in_GB>, "
+                   "  mongos_volume_type=<volume_type>.")
 
 try:
     import simplejson as json
@@ -860,6 +871,11 @@
     return instances
 
 
+def _parse_extended_properties(extended_properties):
+    return dict([(k, v) for (k, v) in [kv.strip().split("=")
+                for kv in extended_properties.split(",")]])
+
+
 @utils.arg('name',
            metavar='<name>',
            type=str,
@@ -879,15 +895,30 @@
            choices=LOCALITY_DOMAIN,
            help=_('Locality policy to use when creating cluster. Choose '
                   'one of %(choices)s.'))
[email protected]('--extended_properties',
+           metavar=EXT_PROPS_METAVAR,
+           default=None,
+           help=EXT_PROPS_HELP)
[email protected]('--configuration',
+           metavar='<configuration>',
+           type=str,
+           default=None,
+           help=_('ID of the configuration group to attach to the cluster.'))
 @utils.service_type('database')
 def do_cluster_create(cs, args):
     """Creates a new cluster."""
     instances = _parse_instance_options(cs, args.instances)
+    extended_properties = {}
+    if args.extended_properties:
+        extended_properties = _parse_extended_properties(
+            args.extended_properties)
     cluster = cs.clusters.create(args.name,
                                  args.datastore,
                                  args.datastore_version,
                                  instances=instances,
-                                 locality=args.locality)
+                                 locality=args.locality,
+                                 extended_properties=extended_properties,
+                                 configuration=args.configuration)
     _print_cluster(cluster)
 
 


Reply via email to