Hello community,

here is the log from the commit of package python-os-client-config for 
openSUSE:Factory checked in at 2015-10-30 13:42:34
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/python-os-client-config (Old)
 and      /work/SRC/openSUSE:Factory/.python-os-client-config.new (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Package is "python-os-client-config"

Changes:
--------
--- 
/work/SRC/openSUSE:Factory/python-os-client-config/python-os-client-config.changes
  2015-09-02 07:54:09.000000000 +0200
+++ 
/work/SRC/openSUSE:Factory/.python-os-client-config.new/python-os-client-config.changes
     2015-10-30 13:42:35.000000000 +0100
@@ -1,0 +2,33 @@
+Sat Sep 26 17:52:40 UTC 2015 - [email protected]
+
+- update to 1.7.5:
+  * Fix a little error with the None auth type
+  * Change ignore-errors to ignore_errors
+  * Handle ksa opt with no deprecated field
+  * Fall back to keystoneclient arg processing
+  * Fix typo in ovh region names
+  * Move plugin loader creation to try block
+  * Convert auth kwargs '-' to '_'
+  * Properly handle os- prefixed args in fix_args
+  * Test kwargs passing not just argparse
+  * Allow configuring domain id once
+  * Add internap to the vendor list
+  * Fix typo in comment - we use ksa not ksc
+  * Defer plugin validation to keystoneauth
+  * Remove an extra line
+  * Add Datacentred to the vendor list
+  * Add ultimum to list of vendors
+  * Add Enter Cloud Suite to vendors list
+  * Add elastx to vendor support matrix
+  * Switch the image default to v2
+  * Update auro auth_url and region information
+  * Add citycloud to the vendors list
+  * Return keystoneauth plugins based on auth args
+  * Remove duplicate lines that are the same as default
+  * Add default version number for heat
+  * Update OVH public cloud information
+  * Handle empty defaults.yaml file
+  * Do not treat project_name and project_id the same
+  * Revert "Revert "Use the correct auth_plugin for token authentication""
+
+-------------------------------------------------------------------

Old:
----
  os-client-config-1.6.3.tar.gz

New:
----
  os-client-config-1.7.5.tar.gz

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

Other differences:
------------------
++++++ python-os-client-config.spec ++++++
--- /var/tmp/diff_new_pack.7ijSKu/_old  2015-10-30 13:42:36.000000000 +0100
+++ /var/tmp/diff_new_pack.7ijSKu/_new  2015-10-30 13:42:36.000000000 +0100
@@ -19,7 +19,7 @@
 %bcond_with test
 
 Name:           python-os-client-config
-Version:        1.6.3
+Version:        1.7.5
 Release:        0
 Summary:        OpenStack Client Configuation Library
 License:        Apache-2.0

++++++ os-client-config-1.6.3.tar.gz -> os-client-config-1.7.5.tar.gz ++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/os-client-config-1.6.3/.coveragerc 
new/os-client-config-1.7.5/.coveragerc
--- old/os-client-config-1.6.3/.coveragerc      2015-08-13 11:14:33.000000000 
+0200
+++ new/os-client-config-1.7.5/.coveragerc      2015-09-22 21:41:42.000000000 
+0200
@@ -4,4 +4,4 @@
 omit = os_client_config/tests/*,os_client_config/openstack/*
 
 [report]
-ignore-errors = True
\ No newline at end of file
+ignore_errors = True
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/os-client-config-1.6.3/AUTHORS 
new/os-client-config-1.7.5/AUTHORS
--- old/os-client-config-1.6.3/AUTHORS  2015-08-13 11:15:04.000000000 +0200
+++ new/os-client-config-1.7.5/AUTHORS  2015-09-22 21:42:24.000000000 +0200
@@ -1,12 +1,15 @@
 Alex Gaynor <[email protected]>
 Chris Church <[email protected]>
+Clark Boylan <[email protected]>
 Clint Byrum <[email protected]>
 David Shrewsbury <[email protected]>
 Davide Guerri <[email protected]>
 Dean Troyer <[email protected]>
 Dean Troyer <[email protected]>
+Eric Harney <[email protected]>
 Ghe Rivero <[email protected]>
 Gregory Haynes <[email protected]>
+James E. Blair <[email protected]>
 Jeremy Stanley <[email protected]>
 Julia Kreger <[email protected]>
 Monty Taylor <[email protected]>
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/os-client-config-1.6.3/ChangeLog 
new/os-client-config-1.7.5/ChangeLog
--- old/os-client-config-1.6.3/ChangeLog        2015-08-13 11:15:04.000000000 
+0200
+++ new/os-client-config-1.7.5/ChangeLog        2015-09-22 21:42:24.000000000 
+0200
@@ -1,6 +1,62 @@
 CHANGES
 =======
 
+1.7.5
+-----
+
+* Fix a little error with the None auth type
+* Change ignore-errors to ignore_errors
+
+1.7.4
+-----
+
+* Handle ksa opt with no deprecated field
+
+1.7.3
+-----
+
+* Fall back to keystoneclient arg processing
+* Fix typo in ovh region names
+
+1.7.2
+-----
+
+* Move plugin loader creation to try block
+
+1.7.1
+-----
+
+* Convert auth kwargs '-' to '_'
+* Properly handle os- prefixed args in fix_args
+* Test kwargs passing not just argparse
+
+1.7.0
+-----
+
+* Allow configuring domain id once
+* Add internap to the vendor list
+* Fix typo in comment - we use ksa not ksc
+* Defer plugin validation to keystoneauth
+
+1.6.4
+-----
+
+* Remove an extra line
+* Add Datacentred to the vendor list
+* Add ultimum to list of vendors
+* Add Enter Cloud Suite to vendors list
+* Add elastx to vendor support matrix
+* Switch the image default to v2
+* Update auro auth_url and region information
+* Add citycloud to the vendors list
+* Return keystoneauth plugins based on auth args
+* Remove duplicate lines that are the same as default
+* Add default version number for heat
+* Update OVH public cloud information
+* Handle empty defaults.yaml file
+* Do not treat project_name and project_id the same
+* Revert "Revert "Use the correct auth_plugin for token authentication""
+
 1.6.3
 -----
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/os-client-config-1.6.3/PKG-INFO 
new/os-client-config-1.7.5/PKG-INFO
--- old/os-client-config-1.6.3/PKG-INFO 2015-08-13 11:15:04.000000000 +0200
+++ new/os-client-config-1.7.5/PKG-INFO 2015-09-22 21:42:25.000000000 +0200
@@ -1,6 +1,6 @@
 Metadata-Version: 1.1
 Name: os-client-config
-Version: 1.6.3
+Version: 1.7.5
 Summary: OpenStack Client Configuation Library
 Home-page: http://www.openstack.org/
 Author: OpenStack
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/os-client-config-1.6.3/doc/source/vendor-support.rst 
new/os-client-config-1.7.5/doc/source/vendor-support.rst
--- old/os-client-config-1.6.3/doc/source/vendor-support.rst    2015-08-13 
11:14:33.000000000 +0200
+++ new/os-client-config-1.7.5/doc/source/vendor-support.rst    2015-09-22 
21:41:42.000000000 +0200
@@ -15,7 +15,7 @@
 
 * Identity uses `password` authentication
 * Identity API Version is 2
-* Image API Version is 1
+* Image API Version is 2
 * Images must be in `qcow2` format
 * Images are uploaded using PUT interface
 * Public IPv4 is directly routable via DHCP from Neutron
@@ -37,6 +37,7 @@
 ============== ================
 
 * DNS Service Type is `hpext:dns`
+* Image API Version is 1
 * Public IPv4 is provided via NAT with Neutron Floating IP
 
 rackspace
@@ -56,7 +57,6 @@
 
 * Database Service Type is `rax:database`
 * Compute Service Name is `cloudServersOpenStack`
-* Image API Version is 2
 * Images must be in `vhd` format
 * Images must be uploaded using the Glance Task Interface
 * Floating IPs are not needed
@@ -78,7 +78,6 @@
 RegionOne      Region One
 ============== ================
 
-* Image API Version is 2
 * Images must be in `raw` format
 * Public IPv4 is provided via NAT with Neutron Floating IP
 * IPv6 is provided to every server
@@ -94,8 +93,6 @@
 ca-ymq-1       Montreal
 ============== ================
 
-* Image API Version is 2
-
 runabove
 --------
 
@@ -108,8 +105,6 @@
 BHS-1          Beauharnois, QC
 ============== ================
 
-* Image API Version is 2
-* Images must be in `qcow2` format
 * Floating IPs are not supported
 
 unitedstack
@@ -125,7 +120,6 @@
 ============== ================
 
 * Identity API Version is 3
-* Image API Version is 2
 * Images must be in `raw` format
 
 auro
@@ -136,10 +130,9 @@
 ============== ================
 Region Name    Human Name
 ============== ================
-RegionOne      RegionOne
+van1           Vancouver, BC
 ============== ================
 
-* Identity API Version is 2
 * Public IPv4 is provided via NAT with Nova Floating IP
 * Floating IPs are provided by Nova
 * Security groups are provided by Nova
@@ -152,8 +145,91 @@
 ============== ================
 Region Name    Human Name
 ============== ================
-SBG-1          Strassbourg, FR
+SBG1           Strassbourg, FR
+GRA1           Gravelines, FR
 ============== ================
 
 * Images must be in `raw` format
 * Floating IPs are not supported
+
+citycloud
+---------
+
+https://identity1.citycloud.com:5000/v3/
+
+============== ================
+Region Name    Human Name
+============== ================
+Lon1           London, UK
+Sto2           Stockholm, SE
+Kna1           Karlskrona, SE
+============== ================
+
+* Identity API Version is 3
+* Public IPv4 is provided via NAT with Neutron Floating IP
+
+elastx
+------
+
+https://ops.elastx.net:5000/v2.0
+
+============== ================
+Region Name    Human Name
+============== ================
+regionOne      Region One
+============== ================
+
+* Public IPv4 is provided via NAT with Neutron Floating IP
+
+entercloudsuite
+---------------
+
+https://api.entercloudsuite.com/v2.0
+
+============== ================
+Region Name    Human Name
+============== ================
+nl-ams1        Amsterdam, NL
+it-mil1        Milan, IT
+de-fra1        Frankfurt, DE
+============== ================
+
+ultimum
+-------
+
+https://console.ultimum-cloud.com:5000/v2.0
+
+============== ================
+Region Name    Human Name
+============== ================
+RegionOne      Region One
+============== ================
+
+datacentred
+-----------
+
+https://compute.datacentred.io:5000/v2.0
+
+============== ================
+Region Name    Human Name
+============== ================
+sal01          Manchester, UK
+============== ================
+
+* Image API Version is 1
+
+internap
+--------
+
+https://identity.api.cloud.iweb.com/v2.0
+
+============== ================
+Region Name    Human Name
+============== ================
+ams01          Amsterdam, NL
+da01           Dallas, TX
+nyj01          New York, NY
+============== ================
+
+* Image API Version is 1
+* Floating IPs are not supported
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/os-client-config-1.6.3/os_client_config/cloud_config.py 
new/os-client-config-1.7.5/os_client_config/cloud_config.py
--- old/os-client-config-1.6.3/os_client_config/cloud_config.py 2015-08-13 
11:14:33.000000000 +0200
+++ new/os-client-config-1.7.5/os_client_config/cloud_config.py 2015-09-22 
21:41:42.000000000 +0200
@@ -16,11 +16,13 @@
 
 
 class CloudConfig(object):
-    def __init__(self, name, region, config, prefer_ipv6=False):
+    def __init__(self, name, region, config,
+                 prefer_ipv6=False, auth_plugin=None):
         self.name = name
         self.region = region
         self.config = config
         self._prefer_ipv6 = prefer_ipv6
+        self._auth = auth_plugin
 
     def __getattr__(self, key):
         """Return arbitrary attributes."""
@@ -106,3 +108,7 @@
     @property
     def prefer_ipv6(self):
         return self._prefer_ipv6
+
+    def get_auth(self):
+        """Return a keystoneauth plugin from the auth credentials."""
+        return self._auth
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/os-client-config-1.6.3/os_client_config/config.py 
new/os-client-config-1.7.5/os_client_config/config.py
--- old/os-client-config-1.6.3/os_client_config/config.py       2015-08-13 
11:14:34.000000000 +0200
+++ new/os-client-config-1.7.5/os_client_config/config.py       2015-09-22 
21:41:43.000000000 +0200
@@ -17,12 +17,11 @@
 import warnings
 
 import appdirs
-import yaml
-
 try:
-    import keystoneclient.auth as ksc_auth
+    from keystoneauth1 import loading
 except ImportError:
-    ksc_auth = None
+    loading = None
+import yaml
 
 from os_client_config import cloud_config
 from os_client_config import defaults
@@ -283,15 +282,38 @@
         cloud = self._fix_backwards_project(cloud)
         cloud = self._fix_backwards_auth_plugin(cloud)
         cloud = self._fix_backwards_interface(cloud)
+        cloud = self._handle_domain_id(cloud)
+        return cloud
+
+    def _handle_domain_id(self, cloud):
+        # Allow people to just specify domain once if it's the same
+        mappings = {
+            'domain_id': ('user_domain_id', 'project_domain_id'),
+            'domain_name': ('user_domain_name', 'project_domain_name'),
+        }
+        for target_key, possible_values in mappings.items():
+            for key in possible_values:
+                if target_key in cloud['auth'] and key not in cloud['auth']:
+                    cloud['auth'][key] = cloud['auth'][target_key]
+            cloud['auth'].pop(target_key, None)
         return cloud
 
     def _fix_backwards_project(self, cloud):
         # Do the lists backwards so that project_name is the ultimate winner
+        # Also handle moving domain names into auth so that domain mapping
+        # is easier
         mappings = {
-            'project_name': ('tenant_id', 'tenant-id',
-                             'project_id', 'project-id',
-                             'tenant_name', 'tenant-name',
+            'project_id': ('tenant_id', 'tenant-id',
+                           'project_id', 'project-id'),
+            'project_name': ('tenant_name', 'tenant-name',
                              'project_name', 'project-name'),
+            'domain_id': ('domain_id', 'domain-id'),
+            'domain_name': ('domain_name', 'domain-name'),
+            'user_domain_id': ('user_domain_id', 'user-domain-id'),
+            'user_domain_name': ('user_domain_name', 'user-domain-name'),
+            'project_domain_id': ('project_domain_id', 'project-domain-id'),
+            'project_domain_name': (
+                'project_domain_name', 'project-domain-name'),
         }
         for target_key, possible_values in mappings.items():
             target = None
@@ -363,8 +385,13 @@
         os_args = dict()
         new_args = dict()
         for (key, val) in iter(args.items()):
+            if type(args[key]) == dict:
+                # dive into the auth dict
+                new_args[key] = self._fix_args(args[key])
+                continue
+
             key = key.replace('-', '_')
-            if key.startswith('os'):
+            if key.startswith('os_'):
                 os_args[key[3:]] = val
             else:
                 new_args[key] = val
@@ -376,12 +403,33 @@
         if opt_name in config:
             return config[opt_name]
         else:
-            for d_opt in opt.deprecated_opts:
+            deprecated = getattr(opt, 'deprecated', getattr(
+                opt, 'deprecated_opts', []))
+            for d_opt in deprecated:
                 d_opt_name = d_opt.name.replace('-', '_')
                 if d_opt_name in config:
                     return config[d_opt_name]
 
-    def _validate_auth(self, config):
+    def _get_auth_loader(self, config):
+        # Re-use the admin_token plugin for the "None" plugin
+        # since it does not look up endpoints or tokens but rather
+        # does a passthrough. This is useful for things like Ironic
+        # that have a keystoneless operational mode, but means we're
+        # still dealing with a keystoneauth Session object, so all the
+        # _other_ things (SSL arg handling, timeout) all work consistently
+        if config['auth_type'] in (None, "None", ''):
+            config['auth_type'] = 'admin_token'
+            # Set to notused rather than None because validate_auth will
+            # strip the value if it's actually python None
+            config['auth']['token'] = 'notused'
+        return loading.get_plugin_loader(config['auth_type'])
+
+    def _validate_auth_ksc(self, config):
+        try:
+            import keystoneclient.auth as ksc_auth
+        except ImportError:
+            return config
+
         # May throw a keystoneclient.exceptions.NoMatchingPlugin
         plugin_options = ksc_auth.get_plugin_class(
             config['auth_type']).get_options()
@@ -424,6 +472,38 @@
 
         return config
 
+    def _validate_auth(self, config, loader):
+        # May throw a keystoneauth1.exceptions.NoMatchingPlugin
+
+        plugin_options = loader.get_options()
+
+        for p_opt in plugin_options:
+            # if it's in config.auth, win, kill it from config dict
+            # if it's in config and not in config.auth, move it
+            # deprecated loses to current
+            # provided beats default, deprecated or not
+            winning_value = self._find_winning_auth_value(
+                p_opt, config['auth'])
+            if not winning_value:
+                winning_value = self._find_winning_auth_value(p_opt, config)
+
+            # Clean up after ourselves
+            for opt in [p_opt.name] + [o.name for o in p_opt.deprecated]:
+                opt = opt.replace('-', '_')
+                config.pop(opt, None)
+                config['auth'].pop(opt, None)
+
+            if winning_value:
+                # Prefer the plugin configuration dest value if the value's key
+                # is marked as depreciated.
+                if p_opt.dest is None:
+                    config['auth'][p_opt.name.replace('-', '_')] = (
+                        winning_value)
+                else:
+                    config['auth'][p_opt.dest] = winning_value
+
+        return config
+
     def get_one_cloud(self, cloud=None, validate=True,
                       argparse=None, **kwargs):
         """Retrieve a single cloud configuration and merge additional options
@@ -431,13 +511,16 @@
         :param string cloud:
             The name of the configuration to load from clouds.yaml
         :param boolean validate:
-            Validate that required arguments are present and certain
-            argument combinations are valid
+            Validate the config. Setting this to False causes no auth plugin
+            to be created. It's really only useful for testing.
         :param Namespace argparse:
             An argparse Namespace object; allows direct passing in of
             argparse options to be added to the cloud config.  Values
             of None and '' will be removed.
         :param kwargs: Additional configuration options
+
+        :raises: keystoneauth1.exceptions.MissingRequiredOptions
+            on missing required auth parameters
         """
 
         if cloud is None and self.envvar_key in self.get_cloud_names():
@@ -467,12 +550,27 @@
                 if type(config[key]) is not bool:
                     config[key] = get_boolean(config[key])
 
-        if 'auth_type' in config:
-            if config['auth_type'] in ('', 'None', None):
-                validate = False
-
-        if validate and ksc_auth:
-            config = self._validate_auth(config)
+        if loading:
+            if validate:
+                try:
+                    loader = self._get_auth_loader(config)
+                    config = self._validate_auth(config, loader)
+                    auth_plugin = loader.load_from_options(**config['auth'])
+                except Exception as e:
+                    # We WANT the ksa exception normally
+                    # but OSC can't handle it right now, so we try deferring
+                    # to ksc. If that ALSO fails, it means there is likely
+                    # a deeper issue, so we assume the ksa error was correct
+                    auth_plugin = None
+                    try:
+                        config = self._validate_auth_ksc(config)
+                    except Exception:
+                        raise e
+            else:
+                auth_plugin = None
+        else:
+            auth_plugin = None
+            config = self._validate_auth_ksc(config)
 
         # If any of the defaults reference other values, we need to expand
         for (key, value) in config.items():
@@ -488,7 +586,8 @@
         return cloud_config.CloudConfig(
             name=cloud_name, region=config['region_name'],
             config=self._normalize_keys(config),
-            prefer_ipv6=prefer_ipv6)
+            prefer_ipv6=prefer_ipv6,
+            auth_plugin=auth_plugin)
 
     @staticmethod
     def set_one_cloud(config_file, cloud, set_config=None):
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/os-client-config-1.6.3/os_client_config/defaults.py 
new/os-client-config-1.7.5/os_client_config/defaults.py
--- old/os-client-config-1.6.3/os_client_config/defaults.py     2015-08-13 
11:14:33.000000000 +0200
+++ new/os-client-config-1.7.5/os_client_config/defaults.py     2015-09-22 
21:41:42.000000000 +0200
@@ -35,6 +35,8 @@
             key=None,
         )
         with open(_yaml_path, 'r') as yaml_file:
-            _defaults.update(yaml.load(yaml_file.read()))
+            updates = yaml.load(yaml_file.read())
+            if updates is not None:
+                _defaults.update(updates)
 
     return _defaults.copy()
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/os-client-config-1.6.3/os_client_config/defaults.yaml 
new/os-client-config-1.7.5/os_client_config/defaults.yaml
--- old/os-client-config-1.6.3/os_client_config/defaults.yaml   2015-08-13 
11:14:33.000000000 +0200
+++ new/os-client-config-1.7.5/os_client_config/defaults.yaml   2015-09-22 
21:41:42.000000000 +0200
@@ -8,9 +8,10 @@
 floating_ip_source: neutron
 identity_api_version: '2'
 image_api_use_tasks: false
-image_api_version: '1'
+image_api_version: '2'
 image_format: qcow2
 network_api_version: '2'
 object_api_version: '1'
+orchestration_api_version: '1'
 secgroup_source: neutron
 volume_api_version: '1'
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/os-client-config-1.6.3/os_client_config/tests/base.py 
new/os-client-config-1.7.5/os_client_config/tests/base.py
--- old/os-client-config-1.6.3/os_client_config/tests/base.py   2015-08-13 
11:14:33.000000000 +0200
+++ new/os-client-config-1.7.5/os_client_config/tests/base.py   2015-09-22 
21:41:42.000000000 +0200
@@ -31,6 +31,7 @@
     'public-clouds': {
         '_test_cloud_in_our_cloud': {
             'auth': {
+                'auth_url': 'http://example.com/v2',
                 'username': 'testotheruser',
                 'project_name': 'testproject',
             },
@@ -45,6 +46,7 @@
         '_test-cloud_': {
             'profile': '_test_cloud_in_our_cloud',
             'auth': {
+                'auth_url': 'http://example.com/v2',
                 'username': 'testuser',
                 'password': 'testpass',
             },
@@ -53,6 +55,7 @@
         '_test_cloud_no_vendor': {
             'profile': '_test_non_existant_cloud',
             'auth': {
+                'auth_url': 'http://example.com/v2',
                 'username': 'testuser',
                 'password': 'testpass',
                 'project_name': 'testproject',
@@ -64,6 +67,18 @@
                 'username': 'testuser',
                 'password': 'testpass',
                 'project_id': 12345,
+                'auth_url': 'http://example.com/v2',
+            },
+            'region_name': 'test-region',
+        },
+        '_test-cloud-domain-id_': {
+            'auth': {
+                'username': 'testuser',
+                'password': 'testpass',
+                'project_id': 12345,
+                'auth_url': 'http://example.com/v2',
+                'domain_id': '6789',
+                'project_domain_id': '123456789',
             },
             'region_name': 'test-region',
         },
@@ -72,6 +87,7 @@
                 'username': 'testuser',
                 'password': 'testpass',
                 'project-id': 'testproject',
+                'auth_url': 'http://example.com/v2',
             },
             'regions': [
                 'region1',
@@ -83,6 +99,7 @@
                 'username': 'testuser',
                 'password': 'testpass',
                 'project-id': '12345',
+                'auth_url': 'http://example.com/v2',
             },
             'region_name': 'test-region',
         }
@@ -132,4 +149,8 @@
         self.assertIsNone(cc.cloud)
         self.assertIn('username', cc.auth)
         self.assertEqual('testuser', cc.auth['username'])
-        self.assertEqual('testproject', cc.auth['project_name'])
+        self.assertTrue('project_name' in cc.auth or 'project_id' in cc.auth)
+        if 'project_name' in cc.auth:
+            self.assertEqual('testproject', cc.auth['project_name'])
+        elif 'project_id' in cc.auth:
+            self.assertEqual('testproject', cc.auth['project_id'])
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/os-client-config-1.6.3/os_client_config/tests/test_config.py 
new/os-client-config-1.7.5/os_client_config/tests/test_config.py
--- old/os-client-config-1.6.3/os_client_config/tests/test_config.py    
2015-08-13 11:14:33.000000000 +0200
+++ new/os-client-config-1.7.5/os_client_config/tests/test_config.py    
2015-09-22 21:41:42.000000000 +0200
@@ -43,7 +43,7 @@
     def test_get_one_cloud(self):
         c = config.OpenStackConfig(config_files=[self.cloud_yaml],
                                    vendor_files=[self.vendor_yaml])
-        cloud = c.get_one_cloud()
+        cloud = c.get_one_cloud(validate=False)
         self.assertIsInstance(cloud, cloud_config.CloudConfig)
         self.assertEqual(cloud.name, '')
 
@@ -61,12 +61,12 @@
         )
 
     def test_get_one_cloud_auth_override_defaults(self):
-        default_options = {'auth_type': 'token'}
+        default_options = {'compute_api_version': '4'}
         c = config.OpenStackConfig(config_files=[self.cloud_yaml],
                                    override_defaults=default_options)
         cc = c.get_one_cloud(cloud='_test-cloud_', auth={'username': 'user'})
         self.assertEqual('user', cc.auth['username'])
-        self.assertEqual('token', cc.auth_type)
+        self.assertEqual('4', cc.compute_api_version)
         self.assertEqual(
             defaults._defaults['identity_api_version'],
             cc.identity_api_version,
@@ -89,13 +89,37 @@
         c = config.OpenStackConfig(config_files=[self.cloud_yaml],
                                    vendor_files=[self.vendor_yaml])
         cc = c.get_one_cloud('_test-cloud-int-project_')
-        self.assertEqual('12345', cc.auth['project_name'])
+        self.assertEqual('12345', cc.auth['project_id'])
+
+    def test_get_one_cloud_with_domain_id(self):
+        c = config.OpenStackConfig(config_files=[self.cloud_yaml],
+                                   vendor_files=[self.vendor_yaml])
+        cc = c.get_one_cloud('_test-cloud-domain-id_')
+        self.assertEqual('6789', cc.auth['user_domain_id'])
+        self.assertEqual('123456789', cc.auth['project_domain_id'])
+        self.assertNotIn('domain_id', cc.auth)
+        self.assertNotIn('domain-id', cc.auth)
 
     def test_get_one_cloud_with_hyphenated_project_id(self):
         c = config.OpenStackConfig(config_files=[self.cloud_yaml],
                                    vendor_files=[self.vendor_yaml])
         cc = c.get_one_cloud('_test_cloud_hyphenated')
-        self.assertEqual('12345', cc.auth['project_name'])
+        self.assertEqual('12345', cc.auth['project_id'])
+
+    def test_get_one_cloud_with_hyphenated_kwargs(self):
+        c = config.OpenStackConfig(config_files=[self.cloud_yaml],
+                                   vendor_files=[self.vendor_yaml])
+        args = {
+            'auth': {
+                'username': 'testuser',
+                'password': 'testpass',
+                'project-id': '12345',
+                'auth-url': 'http://example.com/v2',
+            },
+            'region_name': 'test-region',
+        }
+        cc = c.get_one_cloud(**args)
+        self.assertEqual('http://example.com/v2', cc.auth['auth_url'])
 
     def test_no_environ(self):
         c = config.OpenStackConfig(config_files=[self.cloud_yaml],
@@ -109,7 +133,7 @@
         for k in os.environ.keys():
             if k.startswith('OS_'):
                 self.useFixture(fixtures.EnvironmentVariable(k))
-        c.get_one_cloud(cloud='defaults')
+        c.get_one_cloud(cloud='defaults', validate=False)
 
     def test_prefer_ipv6_true(self):
         c = config.OpenStackConfig(config_files=[self.cloud_yaml],
@@ -120,7 +144,7 @@
     def test_prefer_ipv6_false(self):
         c = config.OpenStackConfig(config_files=[self.no_yaml],
                                    vendor_files=[self.no_yaml])
-        cc = c.get_one_cloud(cloud='defaults')
+        cc = c.get_one_cloud(cloud='defaults', validate=False)
         self.assertFalse(cc.prefer_ipv6)
 
     def test_get_one_cloud_auth_merge(self):
@@ -132,7 +156,8 @@
     def test_get_cloud_names(self):
         c = config.OpenStackConfig(config_files=[self.cloud_yaml])
         self.assertEqual(
-            ['_test-cloud-int-project_',
+            ['_test-cloud-domain-id_',
+             '_test-cloud-int-project_',
              '_test-cloud_',
              '_test_cloud_hyphenated',
              '_test_cloud_no_vendor',
@@ -144,7 +169,7 @@
         for k in os.environ.keys():
             if k.startswith('OS_'):
                 self.useFixture(fixtures.EnvironmentVariable(k))
-        c.get_one_cloud(cloud='defaults')
+        c.get_one_cloud(cloud='defaults', validate=False)
         self.assertEqual(['defaults'], sorted(c.get_cloud_names()))
 
     def test_set_one_cloud_creates_file(self):
@@ -168,7 +193,8 @@
         resulting_cloud_config = {
             'auth': {
                 'password': 'newpass',
-                'username': 'testuser'
+                'username': 'testuser',
+                'auth_url': 'http://example.com/v2',
             },
             'cloud': 'new_cloud',
             'profile': '_test_cloud_in_our_cloud',
@@ -188,10 +214,15 @@
     def setUp(self):
         super(TestConfigArgparse, self).setUp()
 
-        self.options = argparse.Namespace(
+        self.args = dict(
+            auth_url='http://example.com/v2',
+            username='user',
+            password='password',
+            project_name='project',
             region_name='other-test-region',
             snack_type='cookie',
         )
+        self.options = argparse.Namespace(**self.args)
 
     def test_get_one_cloud_argparse(self):
         c = config.OpenStackConfig(config_files=[self.cloud_yaml],
@@ -206,9 +237,34 @@
         c = config.OpenStackConfig(config_files=[self.cloud_yaml],
                                    vendor_files=[self.vendor_yaml])
 
-        cc = c.get_one_cloud(cloud='', argparse=self.options)
+        cc = c.get_one_cloud(argparse=self.options)
+        self.assertIsNone(cc.cloud)
+        self.assertEqual(cc.region_name, 'other-test-region')
+        self.assertEqual(cc.snack_type, 'cookie')
+
+    def test_get_one_cloud_just_kwargs(self):
+        c = config.OpenStackConfig(config_files=[self.cloud_yaml],
+                                   vendor_files=[self.vendor_yaml])
+
+        cc = c.get_one_cloud(**self.args)
+        self.assertIsNone(cc.cloud)
+        self.assertEqual(cc.region_name, 'other-test-region')
+        self.assertEqual(cc.snack_type, 'cookie')
+
+    def test_get_one_cloud_dash_kwargs(self):
+        c = config.OpenStackConfig(config_files=[self.cloud_yaml],
+                                   vendor_files=[self.vendor_yaml])
+
+        args = {
+            'auth-url': 'http://example.com/v2',
+            'username': 'user',
+            'password': 'password',
+            'project_name': 'project',
+            'region_name': 'other-test-region',
+            'snack_type': 'cookie',
+        }
+        cc = c.get_one_cloud(**args)
         self.assertIsNone(cc.cloud)
-        self.assertNotIn('username', cc.auth)
         self.assertEqual(cc.region_name, 'other-test-region')
         self.assertEqual(cc.snack_type, 'cookie')
 
@@ -270,11 +326,11 @@
         self.assertEqual('password', cc.auth_type)
 
     def test_set_default_before_init(self):
-        config.set_default('auth_type', 'token')
+        config.set_default('identity_api_version', '4')
         c = config.OpenStackConfig(config_files=[self.cloud_yaml],
                                    vendor_files=[self.vendor_yaml])
         cc = c.get_one_cloud(cloud='_test-cloud_', argparse=None)
-        self.assertEqual('token', cc.auth_type)
+        self.assertEqual('4', cc.identity_api_version)
 
 
 class TestBackwardsCompatibility(base.TestCase):
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/os-client-config-1.6.3/os_client_config/vendors/auro.yaml 
new/os-client-config-1.7.5/os_client_config/vendors/auro.yaml
--- old/os-client-config-1.6.3/os_client_config/vendors/auro.yaml       
2015-08-13 11:14:33.000000000 +0200
+++ new/os-client-config-1.7.5/os_client_config/vendors/auro.yaml       
2015-09-22 21:41:42.000000000 +0200
@@ -1,7 +1,7 @@
 name: auro
 profile:
   auth:
-    auth_url: https://api.auro.io:5000/v2.0
-  region_name: RegionOne
+    auth_url: https://api.van1.auro.io:5000/v2.0
+  region_name: van1
   secgroup_source: nova
   floating_ip_source: nova
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/os-client-config-1.6.3/os_client_config/vendors/citycloud.yaml 
new/os-client-config-1.7.5/os_client_config/vendors/citycloud.yaml
--- old/os-client-config-1.6.3/os_client_config/vendors/citycloud.yaml  
1970-01-01 01:00:00.000000000 +0100
+++ new/os-client-config-1.7.5/os_client_config/vendors/citycloud.yaml  
2015-09-22 21:41:42.000000000 +0200
@@ -0,0 +1,9 @@
+name: citycloud
+profile:
+  auth:
+    auth_url: https://identity1.citycloud.com:5000/v3/
+  regions:
+  - Lon1
+  - Sto2
+  - Kna1
+  identity_api_version: '3'
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/os-client-config-1.6.3/os_client_config/vendors/datacentred.yaml 
new/os-client-config-1.7.5/os_client_config/vendors/datacentred.yaml
--- old/os-client-config-1.6.3/os_client_config/vendors/datacentred.yaml        
1970-01-01 01:00:00.000000000 +0100
+++ new/os-client-config-1.7.5/os_client_config/vendors/datacentred.yaml        
2015-09-22 21:41:42.000000000 +0200
@@ -0,0 +1,6 @@
+name: datacentred
+profile:
+  auth:
+    auth_url: https://compute.datacentred.io:5000/v2.0
+  region-name: sal01
+  image_api_version: '1'
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/os-client-config-1.6.3/os_client_config/vendors/dreamhost.yaml 
new/os-client-config-1.7.5/os_client_config/vendors/dreamhost.yaml
--- old/os-client-config-1.6.3/os_client_config/vendors/dreamhost.yaml  
2015-08-13 11:14:33.000000000 +0200
+++ new/os-client-config-1.7.5/os_client_config/vendors/dreamhost.yaml  
2015-09-22 21:41:42.000000000 +0200
@@ -3,5 +3,4 @@
   auth:
     auth_url: https://keystone.dream.io/v2.0
   region_name: RegionOne
-  image_api_version: '2'
   image_format: raw
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/os-client-config-1.6.3/os_client_config/vendors/elastx.yaml 
new/os-client-config-1.7.5/os_client_config/vendors/elastx.yaml
--- old/os-client-config-1.6.3/os_client_config/vendors/elastx.yaml     
1970-01-01 01:00:00.000000000 +0100
+++ new/os-client-config-1.7.5/os_client_config/vendors/elastx.yaml     
2015-09-22 21:41:42.000000000 +0200
@@ -0,0 +1,5 @@
+name: elastx
+profile:
+  auth:
+    auth_url: https://ops.elastx.net:5000/v2.0
+  region_name: regionOne
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/os-client-config-1.6.3/os_client_config/vendors/entercloudsuite.yaml 
new/os-client-config-1.7.5/os_client_config/vendors/entercloudsuite.yaml
--- old/os-client-config-1.6.3/os_client_config/vendors/entercloudsuite.yaml    
1970-01-01 01:00:00.000000000 +0100
+++ new/os-client-config-1.7.5/os_client_config/vendors/entercloudsuite.yaml    
2015-09-22 21:41:42.000000000 +0200
@@ -0,0 +1,8 @@
+name: entercloudsuite
+profile:
+  auth:
+    auth_url: https://api.entercloudsuite.com/v2.0
+  regions:
+  - it-mil1
+  - nl-ams1
+  - de-fra1
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/os-client-config-1.6.3/os_client_config/vendors/hp.yaml 
new/os-client-config-1.7.5/os_client_config/vendors/hp.yaml
--- old/os-client-config-1.6.3/os_client_config/vendors/hp.yaml 2015-08-13 
11:14:33.000000000 +0200
+++ new/os-client-config-1.7.5/os_client_config/vendors/hp.yaml 2015-09-22 
21:41:42.000000000 +0200
@@ -6,3 +6,4 @@
   - region-a.geo-1
   - region-b.geo-1
   dns_service_type: hpext:dns
+  image_api_version: '1'
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/os-client-config-1.6.3/os_client_config/vendors/internap.yaml 
new/os-client-config-1.7.5/os_client_config/vendors/internap.yaml
--- old/os-client-config-1.6.3/os_client_config/vendors/internap.yaml   
1970-01-01 01:00:00.000000000 +0100
+++ new/os-client-config-1.7.5/os_client_config/vendors/internap.yaml   
2015-09-22 21:41:42.000000000 +0200
@@ -0,0 +1,10 @@
+name: internap
+profile:
+  auth:
+    auth_url: https://identity.api.cloud.iweb.com/v2.0 
+  regions:
+  - ams01
+  - da01
+  - nyj01
+  image_api_version: '1'
+  floating_ip_source: None
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/os-client-config-1.6.3/os_client_config/vendors/ovh.yaml 
new/os-client-config-1.7.5/os_client_config/vendors/ovh.yaml
--- old/os-client-config-1.6.3/os_client_config/vendors/ovh.yaml        
2015-08-13 11:14:33.000000000 +0200
+++ new/os-client-config-1.7.5/os_client_config/vendors/ovh.yaml        
2015-09-22 21:41:42.000000000 +0200
@@ -2,5 +2,8 @@
 profile:
   auth:
     auth_url: https://auth.cloud.ovh.net/v2.0
-  region_name: SBG1
+  regions:
+  - GRA1
+  - SBG1
   image_format: raw
+  floating_ip_source: None
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/os-client-config-1.6.3/os_client_config/vendors/rackspace.yaml 
new/os-client-config-1.7.5/os_client_config/vendors/rackspace.yaml
--- old/os-client-config-1.6.3/os_client_config/vendors/rackspace.yaml  
2015-08-13 11:14:33.000000000 +0200
+++ new/os-client-config-1.7.5/os_client_config/vendors/rackspace.yaml  
2015-09-22 21:41:42.000000000 +0200
@@ -10,7 +10,6 @@
   - SYD
   database_service_type: rax:database
   compute_service_name: cloudServersOpenStack
-  image_api_version: '2'
   image_api_use_tasks: true
   image_format: vhd
   floating_ip_source: None
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/os-client-config-1.6.3/os_client_config/vendors/runabove.yaml 
new/os-client-config-1.7.5/os_client_config/vendors/runabove.yaml
--- old/os-client-config-1.6.3/os_client_config/vendors/runabove.yaml   
2015-08-13 11:14:33.000000000 +0200
+++ new/os-client-config-1.7.5/os_client_config/vendors/runabove.yaml   
2015-09-22 21:41:42.000000000 +0200
@@ -5,6 +5,5 @@
   regions:
   - BHS-1
   - SBG-1
-  image_api_version: '2'
   image_format: qcow2
   floating_ip_source: None
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/os-client-config-1.6.3/os_client_config/vendors/ultimum.yaml 
new/os-client-config-1.7.5/os_client_config/vendors/ultimum.yaml
--- old/os-client-config-1.6.3/os_client_config/vendors/ultimum.yaml    
1970-01-01 01:00:00.000000000 +0100
+++ new/os-client-config-1.7.5/os_client_config/vendors/ultimum.yaml    
2015-09-22 21:41:42.000000000 +0200
@@ -0,0 +1,5 @@
+name: ultimum
+profile:
+  auth:
+    auth_url: https://console.ultimum-cloud.com:5000/v2.0
+  region-name: RegionOne
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/os-client-config-1.6.3/os_client_config/vendors/unitedstack.yaml 
new/os-client-config-1.7.5/os_client_config/vendors/unitedstack.yaml
--- old/os-client-config-1.6.3/os_client_config/vendors/unitedstack.yaml        
2015-08-13 11:14:33.000000000 +0200
+++ new/os-client-config-1.7.5/os_client_config/vendors/unitedstack.yaml        
2015-09-22 21:41:42.000000000 +0200
@@ -6,6 +6,5 @@
   - bj1
   - gd1
   identity_api_version: '3'
-  image_api_version: '2'
   image_format: raw
   floating_ip_source: None
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/os-client-config-1.6.3/os_client_config/vendors/vexxhost.yaml 
new/os-client-config-1.7.5/os_client_config/vendors/vexxhost.yaml
--- old/os-client-config-1.6.3/os_client_config/vendors/vexxhost.yaml   
2015-08-13 11:14:33.000000000 +0200
+++ new/os-client-config-1.7.5/os_client_config/vendors/vexxhost.yaml   
2015-09-22 21:41:42.000000000 +0200
@@ -3,5 +3,4 @@
   auth:
     auth_url: http://auth.api.thenebulacloud.com:5000/v2.0/
   region_name: ca-ymq-1
-  image_api_version: '2'
   floating_ip_source: None
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/os-client-config-1.6.3/os_client_config.egg-info/PKG-INFO 
new/os-client-config-1.7.5/os_client_config.egg-info/PKG-INFO
--- old/os-client-config-1.6.3/os_client_config.egg-info/PKG-INFO       
2015-08-13 11:15:04.000000000 +0200
+++ new/os-client-config-1.7.5/os_client_config.egg-info/PKG-INFO       
2015-09-22 21:42:24.000000000 +0200
@@ -1,6 +1,6 @@
 Metadata-Version: 1.1
 Name: os-client-config
-Version: 1.6.3
+Version: 1.7.5
 Summary: OpenStack Client Configuation Library
 Home-page: http://www.openstack.org/
 Author: OpenStack
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/os-client-config-1.6.3/os_client_config.egg-info/SOURCES.txt 
new/os-client-config-1.7.5/os_client_config.egg-info/SOURCES.txt
--- old/os-client-config-1.6.3/os_client_config.egg-info/SOURCES.txt    
2015-08-13 11:15:04.000000000 +0200
+++ new/os-client-config-1.7.5/os_client_config.egg-info/SOURCES.txt    
2015-09-22 21:42:25.000000000 +0200
@@ -39,10 +39,16 @@
 os_client_config/tests/test_environ.py
 os_client_config/vendors/__init__.py
 os_client_config/vendors/auro.yaml
+os_client_config/vendors/citycloud.yaml
+os_client_config/vendors/datacentred.yaml
 os_client_config/vendors/dreamhost.yaml
+os_client_config/vendors/elastx.yaml
+os_client_config/vendors/entercloudsuite.yaml
 os_client_config/vendors/hp.yaml
+os_client_config/vendors/internap.yaml
 os_client_config/vendors/ovh.yaml
 os_client_config/vendors/rackspace.yaml
 os_client_config/vendors/runabove.yaml
+os_client_config/vendors/ultimum.yaml
 os_client_config/vendors/unitedstack.yaml
 os_client_config/vendors/vexxhost.yaml
\ No newline at end of file
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/os-client-config-1.6.3/os_client_config.egg-info/pbr.json 
new/os-client-config-1.7.5/os_client_config.egg-info/pbr.json
--- old/os-client-config-1.6.3/os_client_config.egg-info/pbr.json       
2015-08-13 11:15:04.000000000 +0200
+++ new/os-client-config-1.7.5/os_client_config.egg-info/pbr.json       
2015-09-22 21:42:24.000000000 +0200
@@ -1 +1 @@
-{"is_release": true, "git_version": "c422fe8"}
\ No newline at end of file
+{"git_version": "512d00e", "is_release": true}
\ No newline at end of file
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/os-client-config-1.6.3/os_client_config.egg-info/requires.txt 
new/os-client-config-1.7.5/os_client_config.egg-info/requires.txt
--- old/os-client-config-1.6.3/os_client_config.egg-info/requires.txt   
2015-08-13 11:15:04.000000000 +0200
+++ new/os-client-config-1.7.5/os_client_config.egg-info/requires.txt   
2015-09-22 21:42:24.000000000 +0200
@@ -1,2 +1,3 @@
 PyYAML>=3.1.0
 appdirs>=1.3.0
+keystoneauth1>=1.0.0
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/os-client-config-1.6.3/requirements.txt 
new/os-client-config-1.7.5/requirements.txt
--- old/os-client-config-1.6.3/requirements.txt 2015-08-13 11:14:33.000000000 
+0200
+++ new/os-client-config-1.7.5/requirements.txt 2015-09-22 21:41:42.000000000 
+0200
@@ -3,3 +3,4 @@
 # process, which may cause wedges in the gate later.
 PyYAML>=3.1.0
 appdirs>=1.3.0
+keystoneauth1>=1.0.0


Reply via email to