Просмотр исходного кода

Fix create_keystone_session method

When using the `v3token` plugin, the `user_domain_name` or
`user_domain_id` must not be set, otherwise the following error
is thrown when creating the Keystone v3 session:

```
Exception during message handling:
TypeError: __init__() got an unexpected keyword argument 'user_domain_name'
```

However, `user_domain_name` or `user_domain_id` are required
when using the other plugins (for example, the `v3password` plugin).
Ionut Balutoiu 6 лет назад
Родитель
Сommit
7da69600b9
1 измененных файлов с 18 добавлено и 14 удалено
  1. 18 14
      coriolis/keystone.py

+ 18 - 14
coriolis/keystone.py

@@ -164,20 +164,24 @@ def create_keystone_session(ctxt, connection_info={}):
                     "Either 'project_domain_name' or 'project_domain_id' is "
                     "required for Keystone v3 Auth.")
 
-            user_domain_name = connection_info.get(
-                "user_domain_name", ctxt.user_domain_name)
-            if user_domain_name:
-                plugin_args["user_domain_name"] = user_domain_name
-
-            user_domain_id = connection_info.get(
-                "user_domain_id", ctxt.user_domain_id)
-            if user_domain_id:
-                plugin_args["user_domain_id"] = user_domain_id
-
-            if not user_domain_name and not user_domain_id:
-                raise exception.CoriolisException(
-                    "Either 'user_domain_name' or 'user_domain_id' is "
-                    "required for Keystone v3 Auth.")
+            # NOTE: The v3token plugin does not allow the user_domain_name
+            #       or user_domain_id options, while the v3password plugin
+            #       requires at least any of these.
+            if plugin_name != "v3token":
+                user_domain_name = connection_info.get(
+                    "user_domain_name", ctxt.user_domain_name)
+                if user_domain_name:
+                    plugin_args["user_domain_name"] = user_domain_name
+
+                user_domain_id = connection_info.get(
+                    "user_domain_id", ctxt.user_domain_id)
+                if user_domain_id:
+                    plugin_args["user_domain_id"] = user_domain_id
+
+                if not user_domain_name and not user_domain_id:
+                    raise exception.CoriolisException(
+                        "Either 'user_domain_name' or 'user_domain_id' is "
+                        "required for Keystone v3 Auth.")
 
         loader = loading.get_plugin_loader(plugin_name)
         auth = loader.load_from_options(**plugin_args)