)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":12394,"name":"David TARDIVEL","email":"David.TARDIVEL@b-com.com","username":"David.T"},"change_message_id":"1ffc8fedb7ae67bc27c4cd2b79f76e414a1baa9b","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":14,"id":"7a5de9d1_1826c0ce","line":25,"updated":"2016-01-28 10:53:52.000000000","message":"I think we can add DocImpact, to clarify keystone_authtoken configuration for watcher.","commit_id":"e003def30cfa8a303729188236e594adcbfd0b87"},{"author":{"_account_id":13289,"name":"Taylor Peoples","email":"tpeoples@us.ibm.com","username":"tpeoples"},"change_message_id":"91a52888ad5078335ad3cbc56051eac60e6e9373","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":14,"id":"7a5de9d1_94e1e2d2","line":25,"in_reply_to":"7a5de9d1_1826c0ce","updated":"2016-01-29 06:27:57.000000000","message":"Done","commit_id":"e003def30cfa8a303729188236e594adcbfd0b87"},{"author":{"_account_id":12394,"name":"David TARDIVEL","email":"David.TARDIVEL@b-com.com","username":"David.T"},"change_message_id":"803096604185a7bdf8c2af65dc370cbefe305eca","unresolved":false,"context_lines":[{"line_number":30,"context_line":"typical configuration using a password authentication scheme will look"},{"line_number":31,"context_line":"like:"},{"line_number":32,"context_line":"  [watcher_clients_auth]"},{"line_number":33,"context_line":"  auth_url \u003d http://\u003cserver-ip\u003e:\u003cport\u003e"},{"line_number":34,"context_line":"  username \u003d \u003cusername\u003e"},{"line_number":35,"context_line":"  password \u003d \u003cpassword\u003e"},{"line_number":36,"context_line":"  project_domain_id \u003d default"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":16,"id":"7a5de9d1_4dc4aa5e","line":33,"updated":"2016-02-02 11:27:34.000000000","message":"add this line:\n  auth_type \u003d password\n\nIt does not work without it.","commit_id":"e07f6775d4242407fca1e202784508a0c1ec963e"},{"author":{"_account_id":13289,"name":"Taylor Peoples","email":"tpeoples@us.ibm.com","username":"tpeoples"},"change_message_id":"ed4f162d70100b183feb0ff939bcd1a12d2251db","unresolved":false,"context_lines":[{"line_number":30,"context_line":"typical configuration using a password authentication scheme will look"},{"line_number":31,"context_line":"like:"},{"line_number":32,"context_line":"  [watcher_clients_auth]"},{"line_number":33,"context_line":"  auth_url \u003d http://\u003cserver-ip\u003e:\u003cport\u003e"},{"line_number":34,"context_line":"  username \u003d \u003cusername\u003e"},{"line_number":35,"context_line":"  password \u003d \u003cpassword\u003e"},{"line_number":36,"context_line":"  project_domain_id \u003d default"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":16,"id":"7a5de9d1_89da87e8","line":33,"in_reply_to":"7a5de9d1_4dc4aa5e","updated":"2016-02-03 06:18:34.000000000","message":"Done, sorry for missing this in the message.","commit_id":"e07f6775d4242407fca1e202784508a0c1ec963e"},{"author":{"_account_id":12394,"name":"David TARDIVEL","email":"David.TARDIVEL@b-com.com","username":"David.T"},"change_message_id":"d25292952680da084c406161a76c82e1c46526b6","unresolved":false,"context_lines":[{"line_number":41,"context_line":"DocImpact"},{"line_number":42,"context_line":"Change-Id: Iab9d0b304099686da2e9e2b19e8b1de4332ff378"},{"line_number":43,"context_line":"Implements: blueprint external-api-versioning"},{"line_number":44,"context_line":"Closes-Bug: #1530790"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":16,"id":"7a5de9d1_b476b7d6","line":44,"updated":"2016-02-02 16:23:27.000000000","message":"Please add also this line\n  Closes-Bug: #1539670","commit_id":"e07f6775d4242407fca1e202784508a0c1ec963e"},{"author":{"_account_id":13289,"name":"Taylor Peoples","email":"tpeoples@us.ibm.com","username":"tpeoples"},"change_message_id":"ed4f162d70100b183feb0ff939bcd1a12d2251db","unresolved":false,"context_lines":[{"line_number":41,"context_line":"DocImpact"},{"line_number":42,"context_line":"Change-Id: Iab9d0b304099686da2e9e2b19e8b1de4332ff378"},{"line_number":43,"context_line":"Implements: blueprint external-api-versioning"},{"line_number":44,"context_line":"Closes-Bug: #1530790"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":16,"id":"5a5ae5dd_8e6dbfce","line":44,"in_reply_to":"7a5de9d1_b476b7d6","updated":"2016-02-03 06:18:34.000000000","message":"Done","commit_id":"e07f6775d4242407fca1e202784508a0c1ec963e"},{"author":{"_account_id":12394,"name":"David TARDIVEL","email":"David.TARDIVEL@b-com.com","username":"David.T"},"change_message_id":"b0de4866bff607cdb17b827dc6974cebc1042059","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":16,"id":"7a5de9d1_4fc00ce1","line":45,"updated":"2016-02-02 16:38:20.000000000","message":"Can you add also this line\n  Closes-Bug: #1522774","commit_id":"e07f6775d4242407fca1e202784508a0c1ec963e"},{"author":{"_account_id":13289,"name":"Taylor Peoples","email":"tpeoples@us.ibm.com","username":"tpeoples"},"change_message_id":"ed4f162d70100b183feb0ff939bcd1a12d2251db","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":16,"id":"5a5ae5dd_2eb60b3e","line":45,"in_reply_to":"7a5de9d1_4fc00ce1","updated":"2016-02-03 06:18:34.000000000","message":"Done","commit_id":"e07f6775d4242407fca1e202784508a0c1ec963e"}],"watcher/common/clients.py":[{"author":{"_account_id":12394,"name":"David TARDIVEL","email":"David.TARDIVEL@b-com.com","username":"David.T"},"change_message_id":"ef71b99b83ebdfdd0e2d260a40071c43be13e3ed","unresolved":false,"context_lines":[{"line_number":97,"context_line":"        if \u0027v3\u0027 in auth_version:"},{"line_number":98,"context_line":"            creds[\u0027project_name\u0027] \u003d ("},{"line_number":99,"context_line":"                cfg.CONF.keystone_authtoken.admin_tenant_name)"},{"line_number":100,"context_line":"            creds[\u0027user_domain_name\u0027] \u003d \u0027default\u0027"},{"line_number":101,"context_line":"            creds[\u0027project_domain_name\u0027] \u003d \u0027default\u0027"},{"line_number":102,"context_line":"        elif \u0027v2\u0027 in auth_version:"},{"line_number":103,"context_line":"            creds[\u0027tenant_name\u0027] \u003d ("},{"line_number":104,"context_line":"                cfg.CONF.keystone_authtoken.admin_tenant_name)"}],"source_content_type":"text/x-python","patch_set":4,"id":"9a68dd71_039921c4","line":101,"range":{"start_line":100,"start_character":0,"end_line":101,"end_character":52},"updated":"2016-01-22 15:31:39.000000000","message":"There is a bug related to these static values: https://bugs.launchpad.net/watcher/+bug/1530790).\n\nPlease have a look on my last reply on this patchset (not merged) https://review.openstack.org/#/c/264285/\n\nIMHO, it would be fine to fix this bug #1530790 also in your patchset.","commit_id":"b8644b87bc77c8e7c238f4bbf48f88f469aab026"},{"author":{"_account_id":13289,"name":"Taylor Peoples","email":"tpeoples@us.ibm.com","username":"tpeoples"},"change_message_id":"291fa2bbefc0c671a75786563f798b855cd331f4","unresolved":false,"context_lines":[{"line_number":97,"context_line":"        if \u0027v3\u0027 in auth_version:"},{"line_number":98,"context_line":"            creds[\u0027project_name\u0027] \u003d ("},{"line_number":99,"context_line":"                cfg.CONF.keystone_authtoken.admin_tenant_name)"},{"line_number":100,"context_line":"            creds[\u0027user_domain_name\u0027] \u003d \u0027default\u0027"},{"line_number":101,"context_line":"            creds[\u0027project_domain_name\u0027] \u003d \u0027default\u0027"},{"line_number":102,"context_line":"        elif \u0027v2\u0027 in auth_version:"},{"line_number":103,"context_line":"            creds[\u0027tenant_name\u0027] \u003d ("},{"line_number":104,"context_line":"                cfg.CONF.keystone_authtoken.admin_tenant_name)"}],"source_content_type":"text/x-python","patch_set":4,"id":"9a68dd71_b915a79c","line":101,"range":{"start_line":100,"start_character":0,"end_line":101,"end_character":52},"in_reply_to":"9a68dd71_039921c4","updated":"2016-01-25 04:57:00.000000000","message":"I\u0027m not sure where we should be pulling the user domain id / project domain id other than the CONF file?  You suggest using the token, but we can\u0027t get the token until we have a keystoneclient, which requires passing it these args.","commit_id":"b8644b87bc77c8e7c238f4bbf48f88f469aab026"},{"author":{"_account_id":12394,"name":"David TARDIVEL","email":"David.TARDIVEL@b-com.com","username":"David.T"},"change_message_id":"55ffbd572770a7a263df762f4c0eff78c6daeafa","unresolved":false,"context_lines":[{"line_number":97,"context_line":"        if \u0027v3\u0027 in auth_version:"},{"line_number":98,"context_line":"            creds[\u0027project_name\u0027] \u003d ("},{"line_number":99,"context_line":"                cfg.CONF.keystone_authtoken.admin_tenant_name)"},{"line_number":100,"context_line":"            creds[\u0027user_domain_name\u0027] \u003d \u0027default\u0027"},{"line_number":101,"context_line":"            creds[\u0027project_domain_name\u0027] \u003d \u0027default\u0027"},{"line_number":102,"context_line":"        elif \u0027v2\u0027 in auth_version:"},{"line_number":103,"context_line":"            creds[\u0027tenant_name\u0027] \u003d ("},{"line_number":104,"context_line":"                cfg.CONF.keystone_authtoken.admin_tenant_name)"}],"source_content_type":"text/x-python","patch_set":4,"id":"9a68dd71_eeeca0bc","line":101,"range":{"start_line":100,"start_character":0,"end_line":101,"end_character":52},"in_reply_to":"9a68dd71_b915a79c","updated":"2016-01-25 14:09:34.000000000","message":"IMHO, user/project domain id can be got from HTTP request context received by the Watcher API. Indeed these information are set on client side (env OS_USER_DOMAIN_ID, OS_PROJECT_DOMAIN_ID) and are added into HTTP request, so we don\u0027t need to store them into configuration file. We can make a new patchset child-linked to yours in order to fix this bug #1530790","commit_id":"b8644b87bc77c8e7c238f4bbf48f88f469aab026"},{"author":{"_account_id":13289,"name":"Taylor Peoples","email":"tpeoples@us.ibm.com","username":"tpeoples"},"change_message_id":"c053c09cb41cd3e5dd6770a465166e8affd119d0","unresolved":false,"context_lines":[{"line_number":97,"context_line":"        if \u0027v3\u0027 in auth_version:"},{"line_number":98,"context_line":"            creds[\u0027project_name\u0027] \u003d ("},{"line_number":99,"context_line":"                cfg.CONF.keystone_authtoken.admin_tenant_name)"},{"line_number":100,"context_line":"            creds[\u0027user_domain_name\u0027] \u003d \u0027default\u0027"},{"line_number":101,"context_line":"            creds[\u0027project_domain_name\u0027] \u003d \u0027default\u0027"},{"line_number":102,"context_line":"        elif \u0027v2\u0027 in auth_version:"},{"line_number":103,"context_line":"            creds[\u0027tenant_name\u0027] \u003d ("},{"line_number":104,"context_line":"                cfg.CONF.keystone_authtoken.admin_tenant_name)"}],"source_content_type":"text/x-python","patch_set":4,"id":"9a68dd71_f0853659","line":101,"range":{"start_line":100,"start_character":0,"end_line":101,"end_character":52},"in_reply_to":"9a68dd71_eeeca0bc","updated":"2016-01-26 07:50:12.000000000","message":"Please see PS9.  I believe that will fix the bug mentioned.","commit_id":"b8644b87bc77c8e7c238f4bbf48f88f469aab026"},{"author":{"_account_id":12394,"name":"David TARDIVEL","email":"David.TARDIVEL@b-com.com","username":"David.T"},"change_message_id":"75aa1dedd098064aab3eb200953bc351499e382d","unresolved":false,"context_lines":[{"line_number":98,"context_line":"                 \u0027username\u0027: cfg.CONF.keystone_authtoken.admin_user,"},{"line_number":99,"context_line":"                 \u0027password\u0027: cfg.CONF.keystone_authtoken.admin_password}"},{"line_number":100,"context_line":""},{"line_number":101,"context_line":"        if \u0027v3\u0027 in auth_version:"},{"line_number":102,"context_line":"            creds[\u0027project_name\u0027] \u003d ("},{"line_number":103,"context_line":"                cfg.CONF.keystone_authtoken.admin_tenant_name)"},{"line_number":104,"context_line":""}],"source_content_type":"text/x-python","patch_set":11,"id":"7a5de9d1_5b30d656","line":101,"range":{"start_line":101,"start_character":19,"end_line":101,"end_character":31},"updated":"2016-01-27 17:57:41.000000000","message":"auth_version is, by default, set to None, meaning that the API version should be selected once the keystone client instanciated. \n\nIMHO, it is not the role of Watcher to validate auth parameters. It\u0027s the role of keystone-client. I tested the simplified code:\n\n    def _get_admin_credentials(self):\n        auth_uri \u003d cfg.CONF.keystone_authtoken.auth_uri\n        auth_version \u003d cfg.CONF.keystone_authtoken.auth_version\n        auth_url \u003d urljoin(auth_uri, auth_version)\n\n        creds \u003d {\u0027auth_url\u0027: auth_url,\n                 \u0027username\u0027: cfg.CONF.keystone_authtoken.admin_user,\n                 \u0027password\u0027: cfg.CONF.keystone_authtoken.admin_password}\n\n        user_domain_id \u003d \u0027default\u0027\n        project_domain_id \u003d \u0027default\u0027\n        creds[\u0027project_name\u0027] \u003d (\n            cfg.CONF.keystone_authtoken.admin_tenant_name)\n\n        if self._context:\n            token \u003d (self._context.auth_token_info or {}).get(\u0027token\u0027)\n            user_domain \u003d (token.get(\u0027user\u0027) or {}).get(\u0027domain\u0027) or {}\n            proj_domain \u003d (token.get(\u0027project\u0027) or {}).get(\u0027domain\u0027) or {}\n            if user_domain[\u0027id\u0027]:\n                user_domain_id \u003d user_domain[\u0027id\u0027]\n            if proj_domain[\u0027id\u0027]:\n                project_domain_id \u003d proj_domain[\u0027id\u0027]\n            creds[\u0027user_domain_id\u0027] \u003d user_domain_id\n            creds[\u0027project_domain_id\u0027] \u003d project_domain_id\n\n        return creds\n\n\nIt works in this simple use case (it should be the simple one documented):\n\nCLI side : \n  OS_REGION_NAME\u003dRegionOne\n  OS_PROJECT_DOMAIN_ID\u003ddefault\n  OS_USER_DOMAIN_ID\u003ddefault\n  OS_PASSWORD\u003dnomoresecrete\n  OS_AUTH_URL\u003dhttp://192.168.99.11:5000\n  OS_USERNAME\u003ddemo\n  OS_TENANT_NAME\u003ddemo\n\nWatcher side:\n[keystone_authtoken]\n#auth_version \u003d v2\nauth_uri \u003d http://192.168.99.11:5000\nproject_name \u003d service\npassword \u003d nomoresecrete\nusername \u003d watcher\nauth_url \u003d http://192.168.99.11:35357\nauth_plugin \u003d password\nadmin_tenant_name \u003d service\nadmin_password \u003d nomoresecrete\nadmin_user \u003d watcher\n\nIn this use case, v3 API version will be taken into account.\n\nIf creds are wrong, watcher CLI will rejected the command before to send the request to API. If on CLI side we are on v2.0 and on watcher side, we are on v3, an exception will raise from keystone client.","commit_id":"2851e5868477689dc8dfee1c0fe27f37b0760006"},{"author":{"_account_id":13289,"name":"Taylor Peoples","email":"tpeoples@us.ibm.com","username":"tpeoples"},"change_message_id":"e90dd9a9d24986414383ce4ed675eeca51f3adc3","unresolved":false,"context_lines":[{"line_number":98,"context_line":"                 \u0027username\u0027: cfg.CONF.keystone_authtoken.admin_user,"},{"line_number":99,"context_line":"                 \u0027password\u0027: cfg.CONF.keystone_authtoken.admin_password}"},{"line_number":100,"context_line":""},{"line_number":101,"context_line":"        if \u0027v3\u0027 in auth_version:"},{"line_number":102,"context_line":"            creds[\u0027project_name\u0027] \u003d ("},{"line_number":103,"context_line":"                cfg.CONF.keystone_authtoken.admin_tenant_name)"},{"line_number":104,"context_line":""}],"source_content_type":"text/x-python","patch_set":11,"id":"7a5de9d1_b049dcd2","line":101,"range":{"start_line":101,"start_character":19,"end_line":101,"end_character":31},"in_reply_to":"7a5de9d1_5b30d656","updated":"2016-01-27 21:18:36.000000000","message":"OK, I have gotten rid of all of the validation checking.  The only change is that user_domain_id and project_domain_id are only included in the admin credentials if they exist in the request context\u0027s token.  Passing them as \u0027default\u0027 when the auth_url points to v2.0 will not work.","commit_id":"2851e5868477689dc8dfee1c0fe27f37b0760006"},{"author":{"_account_id":12394,"name":"David TARDIVEL","email":"David.TARDIVEL@b-com.com","username":"David.T"},"change_message_id":"1ffc8fedb7ae67bc27c4cd2b79f76e414a1baa9b","unresolved":false,"context_lines":[{"line_number":99,"context_line":"                 \u0027password\u0027: cfg.CONF.keystone_authtoken.admin_password,"},{"line_number":100,"context_line":"                 \u0027project_name\u0027: cfg.CONF.keystone_authtoken.admin_tenant_name}"},{"line_number":101,"context_line":""},{"line_number":102,"context_line":"        if self._context:"},{"line_number":103,"context_line":"            token \u003d (self._context.auth_token_info or {}).get(\u0027token\u0027) or {}"},{"line_number":104,"context_line":"            user_domain \u003d (token.get(\u0027user\u0027) or {}).get(\u0027domain\u0027) or {}"},{"line_number":105,"context_line":"            proj_domain \u003d (token.get(\u0027project\u0027) or {}).get(\u0027domain\u0027) or {}"}],"source_content_type":"text/x-python","patch_set":14,"id":"7a5de9d1_4e7c6e72","line":102,"updated":"2016-01-28 10:53:52.000000000","message":"By removing default values for project and user domain id, Keystone authentication on Applier failed.\n\n2016-01-28 10:30:22.934 TRACE watcher.applier.workflow_engine.default     result \u003d self.action.execute()\n2016-01-28 10:30:22.934 TRACE watcher.applier.workflow_engine.default   File \"/opt/stack/watcher/watcher/applier/actions/change_nova_service_state.py\", line 44, in execute\n2016-01-28 10:30:22.934 TRACE watcher.applier.workflow_engine.default     return self.nova_manage_service(target_state)\n2016-01-28 10:30:22.934 TRACE watcher.applier.workflow_engine.default   File \"/opt/stack/watcher/watcher/applier/actions/change_nova_service_state.py\", line 59, in nova_manage_service\n2016-01-28 10:30:22.934 TRACE watcher.applier.workflow_engine.default     nova \u003d nova_helper.NovaHelper()\n2016-01-28 10:30:22.934 TRACE watcher.applier.workflow_engine.default   File \"/opt/stack/watcher/watcher/common/nova_helper.py\", line 38, in __init__\n2016-01-28 10:30:22.934 TRACE watcher.applier.workflow_engine.default     self.neutron \u003d self.osc.neutron()\n2016-01-28 10:30:22.934 TRACE watcher.applier.workflow_engine.default   File \"/opt/stack/watcher/watcher/common/exception.py\", line 52, in wrapped\n2016-01-28 10:30:22.934 TRACE watcher.applier.workflow_engine.default     return func(*args, **kw)\n2016-01-28 10:30:22.934 TRACE watcher.applier.workflow_engine.default   File \"/opt/stack/watcher/watcher/common/clients.py\", line 184, in neutron\n2016-01-28 10:30:22.934 TRACE watcher.applier.workflow_engine.default     session\u003dself.session)\n2016-01-28 10:30:22.934 TRACE watcher.applier.workflow_engine.default   File \"/opt/stack/watcher/watcher/common/clients.py\", line 120, in session\n2016-01-28 10:30:22.934 TRACE watcher.applier.workflow_engine.default     return self.keystone().session\n2016-01-28 10:30:22.934 TRACE watcher.applier.workflow_engine.default   File \"/opt/stack/watcher/watcher/common/exception.py\", line 60, in wrapped\n2016-01-28 10:30:22.934 TRACE watcher.applier.workflow_engine.default     % sys.exc_info()[1]))\n2016-01-28 10:30:22.934 TRACE watcher.applier.workflow_engine.default AuthorizationFailure: keystone connection failed. Reason: Unexpected keystone client error occurred: Expecting to find domain in project - the server could not comply with the request since it is either malformed or otherwise incorrect. The client is assumed to be in error. (HTTP 400) (Request-ID: req-a410637a-27b3-44d7-8cf9-94a8a91fde2e)\n\n\n\ncontext data is not available on Action level. And there is no more default values for project and user domain id.\n\n\nproposal: \n\nadd context class attribute in Action : https://github.com/openstack/watcher/blob/master/watcher/applier/actions/base.py#L27","commit_id":"e003def30cfa8a303729188236e594adcbfd0b87"},{"author":{"_account_id":13289,"name":"Taylor Peoples","email":"tpeoples@us.ibm.com","username":"tpeoples"},"change_message_id":"91a52888ad5078335ad3cbc56051eac60e6e9373","unresolved":false,"context_lines":[{"line_number":99,"context_line":"                 \u0027password\u0027: cfg.CONF.keystone_authtoken.admin_password,"},{"line_number":100,"context_line":"                 \u0027project_name\u0027: cfg.CONF.keystone_authtoken.admin_tenant_name}"},{"line_number":101,"context_line":""},{"line_number":102,"context_line":"        if self._context:"},{"line_number":103,"context_line":"            token \u003d (self._context.auth_token_info or {}).get(\u0027token\u0027) or {}"},{"line_number":104,"context_line":"            user_domain \u003d (token.get(\u0027user\u0027) or {}).get(\u0027domain\u0027) or {}"},{"line_number":105,"context_line":"            proj_domain \u003d (token.get(\u0027project\u0027) or {}).get(\u0027domain\u0027) or {}"}],"source_content_type":"text/x-python","patch_set":14,"id":"7a5de9d1_f427f60f","line":102,"in_reply_to":"7a5de9d1_4e7c6e72","updated":"2016-01-29 06:27:57.000000000","message":"Thanks for catching this.  I changed the applier around to instantiate and pass around an OSC instance.  I also changed most of the classes that take in an OSC instance to also accept a context.  This will allow someone to use the classes by passing a context instead of an OSC if they prefer that instead.\n\nI tested out creating a DUMMY audit and was able to apply the action plan successfully.","commit_id":"e003def30cfa8a303729188236e594adcbfd0b87"},{"author":{"_account_id":12394,"name":"David TARDIVEL","email":"David.TARDIVEL@b-com.com","username":"David.T"},"change_message_id":"ec3919cc7edfc0b558c66636802bf95c54513e16","unresolved":false,"context_lines":[{"line_number":57,"context_line":"cfg.CONF.register_opts(ceilometer_client_opts, group\u003d\u0027ceilometer_client\u0027)"},{"line_number":58,"context_line":"cfg.CONF.register_opts(neutron_client_opts, group\u003d\u0027neutron_client\u0027)"},{"line_number":59,"context_line":""},{"line_number":60,"context_line":"cfg.CONF.import_opt(\u0027admin_user\u0027, \u0027keystonemiddleware.auth_token\u0027,"},{"line_number":61,"context_line":"                    group\u003d\u0027keystone_authtoken\u0027)"},{"line_number":62,"context_line":"cfg.CONF.import_opt(\u0027admin_tenant_name\u0027, \u0027keystonemiddleware.auth_token\u0027,"},{"line_number":63,"context_line":"                    group\u003d\u0027keystone_authtoken\u0027)"},{"line_number":64,"context_line":"cfg.CONF.import_opt(\u0027admin_password\u0027, \u0027keystonemiddleware.auth_token\u0027,"},{"line_number":65,"context_line":"                    group\u003d\u0027keystone_authtoken\u0027)"},{"line_number":66,"context_line":"cfg.CONF.import_opt(\u0027auth_uri\u0027, \u0027keystonemiddleware.auth_token\u0027,"},{"line_number":67,"context_line":"                    group\u003d\u0027keystone_authtoken\u0027)"},{"line_number":68,"context_line":"cfg.CONF.import_opt(\u0027auth_version\u0027, \u0027keystonemiddleware.auth_token\u0027,"}],"source_content_type":"text/x-python","patch_set":15,"id":"7a5de9d1_475e3e45","line":65,"range":{"start_line":60,"start_character":0,"end_line":65,"end_character":47},"updated":"2016-01-29 16:34:33.000000000","message":"Taylor, with the latest keystone-middleware 4.2.0 lib, theses parameters have been removed. The ones we should used are the ones defined for \u0027password\u0027 auth_plugin.\n\nhttps://github.com/openstack/keystonemiddleware/blob/4.0.0/doc/source/middlewarearchitecture.rst#configuration-options\n\nnew \u0027keystone_authtoken\u0027 section should be something like that:\n\n\n[keystone_authtoken]\nauth_plugin \u003d password\nproject_name \u003d service\nusername \u003d watcher\npassword \u003d watcher\nauth_url \u003d http://keystone-internal-ip:35357\nauth_uri \u003d http://keystone-public-ip:5000\n\n\n\u003d\u003e DocImpact\n\u003d\u003e bug #1539670","commit_id":"c154ac8b557cef5a4d183b538f8d2a748b59a56c"},{"author":{"_account_id":13289,"name":"Taylor Peoples","email":"tpeoples@us.ibm.com","username":"tpeoples"},"change_message_id":"51f123d04c8ecddb32d29734f9bc1cc90c714436","unresolved":false,"context_lines":[{"line_number":57,"context_line":"cfg.CONF.register_opts(ceilometer_client_opts, group\u003d\u0027ceilometer_client\u0027)"},{"line_number":58,"context_line":"cfg.CONF.register_opts(neutron_client_opts, group\u003d\u0027neutron_client\u0027)"},{"line_number":59,"context_line":""},{"line_number":60,"context_line":"cfg.CONF.import_opt(\u0027admin_user\u0027, \u0027keystonemiddleware.auth_token\u0027,"},{"line_number":61,"context_line":"                    group\u003d\u0027keystone_authtoken\u0027)"},{"line_number":62,"context_line":"cfg.CONF.import_opt(\u0027admin_tenant_name\u0027, \u0027keystonemiddleware.auth_token\u0027,"},{"line_number":63,"context_line":"                    group\u003d\u0027keystone_authtoken\u0027)"},{"line_number":64,"context_line":"cfg.CONF.import_opt(\u0027admin_password\u0027, \u0027keystonemiddleware.auth_token\u0027,"},{"line_number":65,"context_line":"                    group\u003d\u0027keystone_authtoken\u0027)"},{"line_number":66,"context_line":"cfg.CONF.import_opt(\u0027auth_uri\u0027, \u0027keystonemiddleware.auth_token\u0027,"},{"line_number":67,"context_line":"                    group\u003d\u0027keystone_authtoken\u0027)"},{"line_number":68,"context_line":"cfg.CONF.import_opt(\u0027auth_version\u0027, \u0027keystonemiddleware.auth_token\u0027,"}],"source_content_type":"text/x-python","patch_set":15,"id":"7a5de9d1_cd8faf28","line":65,"range":{"start_line":60,"start_character":0,"end_line":65,"end_character":47},"in_reply_to":"7a5de9d1_475e3e45","updated":"2016-01-29 17:03:25.000000000","message":"It looks like admin_user, admin_passowrd, and admin_tenant_name are all still supported in 4.2.0?  I\u0027m not sure what you mean by they have been removed.  https://github.com/openstack/keystonemiddleware/blob/4.2.0/doc/source/middlewarearchitecture.rst#configuration-options and https://github.com/openstack/keystonemiddleware/blob/master/keystonemiddleware/auth_token/_auth.py#L179-L186\n\nI also am not sure if we should be allowing the auth_plugin to be configured for Watcher.  As is, the code only supports the password plugin, so if someone configures it to use token, it won\u0027t work.  If we want to support the token plugin, then I\u0027d like to handle that in a separate patch.","commit_id":"c154ac8b557cef5a4d183b538f8d2a748b59a56c"},{"author":{"_account_id":13289,"name":"Taylor Peoples","email":"tpeoples@us.ibm.com","username":"tpeoples"},"change_message_id":"79dd3cbfe82433089b47d89df034c9938c5bf43f","unresolved":false,"context_lines":[{"line_number":57,"context_line":"cfg.CONF.register_opts(ceilometer_client_opts, group\u003d\u0027ceilometer_client\u0027)"},{"line_number":58,"context_line":"cfg.CONF.register_opts(neutron_client_opts, group\u003d\u0027neutron_client\u0027)"},{"line_number":59,"context_line":""},{"line_number":60,"context_line":"cfg.CONF.import_opt(\u0027admin_user\u0027, \u0027keystonemiddleware.auth_token\u0027,"},{"line_number":61,"context_line":"                    group\u003d\u0027keystone_authtoken\u0027)"},{"line_number":62,"context_line":"cfg.CONF.import_opt(\u0027admin_tenant_name\u0027, \u0027keystonemiddleware.auth_token\u0027,"},{"line_number":63,"context_line":"                    group\u003d\u0027keystone_authtoken\u0027)"},{"line_number":64,"context_line":"cfg.CONF.import_opt(\u0027admin_password\u0027, \u0027keystonemiddleware.auth_token\u0027,"},{"line_number":65,"context_line":"                    group\u003d\u0027keystone_authtoken\u0027)"},{"line_number":66,"context_line":"cfg.CONF.import_opt(\u0027auth_uri\u0027, \u0027keystonemiddleware.auth_token\u0027,"},{"line_number":67,"context_line":"                    group\u003d\u0027keystone_authtoken\u0027)"},{"line_number":68,"context_line":"cfg.CONF.import_opt(\u0027auth_version\u0027, \u0027keystonemiddleware.auth_token\u0027,"}],"source_content_type":"text/x-python","patch_set":15,"id":"7a5de9d1_044d99c3","line":65,"range":{"start_line":60,"start_character":0,"end_line":65,"end_character":47},"in_reply_to":"7a5de9d1_cd8faf28","updated":"2016-01-29 20:36:03.000000000","message":"So I kind of understand what you mean now, David, but the keystone documentation seems to be all over the place and very inconsistent.  Simply changing the CONF file to user username/password instead of admin_user/admin_password does not work, as they are not defined in keystone_authtoken:\n\n  oslo_config.cfg.NoSuchOptError: no such option in group keystone_authtoken: username\n\nIf I try and register new options for these, I run into errors like:\n\n  *** DuplicateOptError: duplicate option: project-name (yes, even though the opt is named project_name)\n\nCan we chat on IRC about what is needed here?","commit_id":"c154ac8b557cef5a4d183b538f8d2a748b59a56c"},{"author":{"_account_id":12394,"name":"David TARDIVEL","email":"David.TARDIVEL@b-com.com","username":"David.T"},"change_message_id":"ec3919cc7edfc0b558c66636802bf95c54513e16","unresolved":false,"context_lines":[{"line_number":67,"context_line":"                    group\u003d\u0027keystone_authtoken\u0027)"},{"line_number":68,"context_line":"cfg.CONF.import_opt(\u0027auth_version\u0027, \u0027keystonemiddleware.auth_token\u0027,"},{"line_number":69,"context_line":"                    group\u003d\u0027keystone_authtoken\u0027)"},{"line_number":70,"context_line":"cfg.CONF.import_opt(\u0027insecure\u0027, \u0027keystonemiddleware.auth_token\u0027,"},{"line_number":71,"context_line":"                    group\u003d\u0027keystone_authtoken\u0027)"},{"line_number":72,"context_line":""},{"line_number":73,"context_line":"from oslo_log import log as logging"},{"line_number":74,"context_line":"LOG \u003d logging.getLogger(__name__)"}],"source_content_type":"text/x-python","patch_set":15,"id":"7a5de9d1_071cc6bf","line":71,"range":{"start_line":70,"start_character":0,"end_line":71,"end_character":47},"updated":"2016-01-29 16:34:33.000000000","message":"not used. We can remote it.","commit_id":"c154ac8b557cef5a4d183b538f8d2a748b59a56c"},{"author":{"_account_id":13289,"name":"Taylor Peoples","email":"tpeoples@us.ibm.com","username":"tpeoples"},"change_message_id":"51f123d04c8ecddb32d29734f9bc1cc90c714436","unresolved":false,"context_lines":[{"line_number":67,"context_line":"                    group\u003d\u0027keystone_authtoken\u0027)"},{"line_number":68,"context_line":"cfg.CONF.import_opt(\u0027auth_version\u0027, \u0027keystonemiddleware.auth_token\u0027,"},{"line_number":69,"context_line":"                    group\u003d\u0027keystone_authtoken\u0027)"},{"line_number":70,"context_line":"cfg.CONF.import_opt(\u0027insecure\u0027, \u0027keystonemiddleware.auth_token\u0027,"},{"line_number":71,"context_line":"                    group\u003d\u0027keystone_authtoken\u0027)"},{"line_number":72,"context_line":""},{"line_number":73,"context_line":"from oslo_log import log as logging"},{"line_number":74,"context_line":"LOG \u003d logging.getLogger(__name__)"}],"source_content_type":"text/x-python","patch_set":15,"id":"7a5de9d1_4da3bf9d","line":71,"range":{"start_line":70,"start_character":0,"end_line":71,"end_character":47},"in_reply_to":"7a5de9d1_071cc6bf","updated":"2016-01-29 17:03:25.000000000","message":"Will remove it in the next patchset once the above comment has been clarified.","commit_id":"c154ac8b557cef5a4d183b538f8d2a748b59a56c"},{"author":{"_account_id":18971,"name":"Vincent Françoise","email":"Vincent.FRANCOISE@b-com.com","username":"v-francoise"},"change_message_id":"1b7b2304cb6f08e9cc9c0432855ca70348e7463c","unresolved":false,"context_lines":[{"line_number":13,"context_line":"from ceilometerclient import client as ceclient"},{"line_number":14,"context_line":"from cinderclient import client as ciclient"},{"line_number":15,"context_line":"from glanceclient import client as glclient"},{"line_number":16,"context_line":"from keystoneauth1 import loading as ka_loading"},{"line_number":17,"context_line":"from keystoneclient import client as keyclient"},{"line_number":18,"context_line":"from neutronclient.neutron import client as netclient"},{"line_number":19,"context_line":"from novaclient import client as nvclient"}],"source_content_type":"text/x-python","patch_set":16,"id":"7a5de9d1_e9bd51d8","line":16,"range":{"start_line":16,"start_character":5,"end_line":16,"end_character":18},"updated":"2016-02-02 09:30:02.000000000","message":"This dependency is not in the requirements.txt though we have it installed through python-keystoneclient. So can you add it please?","commit_id":"e07f6775d4242407fca1e202784508a0c1ec963e"},{"author":{"_account_id":13289,"name":"Taylor Peoples","email":"tpeoples@us.ibm.com","username":"tpeoples"},"change_message_id":"ed4f162d70100b183feb0ff939bcd1a12d2251db","unresolved":false,"context_lines":[{"line_number":13,"context_line":"from ceilometerclient import client as ceclient"},{"line_number":14,"context_line":"from cinderclient import client as ciclient"},{"line_number":15,"context_line":"from glanceclient import client as glclient"},{"line_number":16,"context_line":"from keystoneauth1 import loading as ka_loading"},{"line_number":17,"context_line":"from keystoneclient import client as keyclient"},{"line_number":18,"context_line":"from neutronclient.neutron import client as netclient"},{"line_number":19,"context_line":"from novaclient import client as nvclient"}],"source_content_type":"text/x-python","patch_set":16,"id":"7a5de9d1_7b4a7257","line":16,"range":{"start_line":16,"start_character":5,"end_line":16,"end_character":18},"in_reply_to":"7a5de9d1_e9bd51d8","updated":"2016-02-03 06:18:34.000000000","message":"Done","commit_id":"e07f6775d4242407fca1e202784508a0c1ec963e"}],"watcher/common/exception.py":[{"author":{"_account_id":12394,"name":"David TARDIVEL","email":"David.TARDIVEL@b-com.com","username":"David.T"},"change_message_id":"ef71b99b83ebdfdd0e2d260a40071c43be13e3ed","unresolved":false,"context_lines":[{"line_number":45,"context_line":""},{"line_number":46,"context_line":""},{"line_number":47,"context_line":"def wrap_keystone_exception(func):"},{"line_number":48,"context_line":"    \"\"\"Wrap keystone exceptions and throw Magnum specific exceptions.\"\"\""},{"line_number":49,"context_line":"    @functools.wraps(func)"},{"line_number":50,"context_line":"    def wrapped(*args, **kw):"},{"line_number":51,"context_line":"        try:"}],"source_content_type":"text/x-python","patch_set":4,"id":"9a68dd71_8365111f","line":48,"range":{"start_line":48,"start_character":42,"end_line":48,"end_character":48},"updated":"2016-01-22 15:31:39.000000000","message":"Watcher","commit_id":"b8644b87bc77c8e7c238f4bbf48f88f469aab026"},{"author":{"_account_id":13289,"name":"Taylor Peoples","email":"tpeoples@us.ibm.com","username":"tpeoples"},"change_message_id":"291fa2bbefc0c671a75786563f798b855cd331f4","unresolved":false,"context_lines":[{"line_number":45,"context_line":""},{"line_number":46,"context_line":""},{"line_number":47,"context_line":"def wrap_keystone_exception(func):"},{"line_number":48,"context_line":"    \"\"\"Wrap keystone exceptions and throw Magnum specific exceptions.\"\"\""},{"line_number":49,"context_line":"    @functools.wraps(func)"},{"line_number":50,"context_line":"    def wrapped(*args, **kw):"},{"line_number":51,"context_line":"        try:"}],"source_content_type":"text/x-python","patch_set":4,"id":"9a68dd71_935d4849","line":48,"range":{"start_line":48,"start_character":42,"end_line":48,"end_character":48},"in_reply_to":"9a68dd71_8365111f","updated":"2016-01-25 04:57:00.000000000","message":"Done","commit_id":"b8644b87bc77c8e7c238f4bbf48f88f469aab026"}],"watcher/common/nova_helper.py":[{"author":{"_account_id":12394,"name":"David TARDIVEL","email":"David.TARDIVEL@b-com.com","username":"David.T"},"change_message_id":"ef71b99b83ebdfdd0e2d260a40071c43be13e3ed","unresolved":false,"context_lines":[{"line_number":33,"context_line":"class NovaHelper(object):"},{"line_number":34,"context_line":""},{"line_number":35,"context_line":"    def __init__(self):"},{"line_number":36,"context_line":"        self.osc \u003d clients.OpenStackClients()"},{"line_number":37,"context_line":"        self.neutron \u003d self.osc.neutron()"},{"line_number":38,"context_line":"        self.cinder \u003d self.osc.cinder()"},{"line_number":39,"context_line":"        self.nova \u003d self.osc.nova()"}],"source_content_type":"text/x-python","patch_set":4,"id":"9a68dd71_d64425b8","line":36,"range":{"start_line":36,"start_character":0,"end_line":36,"end_character":45},"updated":"2016-01-22 15:31:39.000000000","message":"If, for a strategy implementation, we need to use several \u003cmodule\u003e_helpers, it will be nice to not instantiate many times OpenStackClients().\n\ndef _init__(self, osc):\n   self.osc \u003d clients.OpenStackClients() if osc is None else osc\n\ncan OpenStackClients() be a singleton ?","commit_id":"b8644b87bc77c8e7c238f4bbf48f88f469aab026"},{"author":{"_account_id":13289,"name":"Taylor Peoples","email":"tpeoples@us.ibm.com","username":"tpeoples"},"change_message_id":"291fa2bbefc0c671a75786563f798b855cd331f4","unresolved":false,"context_lines":[{"line_number":33,"context_line":"class NovaHelper(object):"},{"line_number":34,"context_line":""},{"line_number":35,"context_line":"    def __init__(self):"},{"line_number":36,"context_line":"        self.osc \u003d clients.OpenStackClients()"},{"line_number":37,"context_line":"        self.neutron \u003d self.osc.neutron()"},{"line_number":38,"context_line":"        self.cinder \u003d self.osc.cinder()"},{"line_number":39,"context_line":"        self.nova \u003d self.osc.nova()"}],"source_content_type":"text/x-python","patch_set":4,"id":"9a68dd71_b3416c65","line":36,"range":{"start_line":36,"start_character":0,"end_line":36,"end_character":45},"in_reply_to":"9a68dd71_d64425b8","updated":"2016-01-25 04:57:00.000000000","message":"Changed to:\n\n  def __init__(self, osc\u003dNone):\n     ...\n     self.osc \u003d osc if osc else clients.OpenStackClients()\n\nYes, I think we will get to a point where it makes sense to only instantiate a limited number of OpenStackClients\u0027s.  I was trying to minimize the size of this changeset instead of how the clients would be getting passed around.  The newest patchset should address that concern for now.","commit_id":"b8644b87bc77c8e7c238f4bbf48f88f469aab026"}],"watcher/metrics_engine/cluster_history/ceilometer.py":[{"author":{"_account_id":18971,"name":"Vincent Françoise","email":"Vincent.FRANCOISE@b-com.com","username":"v-francoise"},"change_message_id":"d67bd4691ed570a036ea76fb2c94ff8778355d80","unresolved":false,"context_lines":[{"line_number":29,"context_line":""},{"line_number":30,"context_line":""},{"line_number":31,"context_line":"class CeilometerClusterHistory(BaseClusterHistory):"},{"line_number":32,"context_line":"    def __init__(self):"},{"line_number":33,"context_line":"        self.ceilometer \u003d ceilometer_helper.CeilometerHelper()"},{"line_number":34,"context_line":""},{"line_number":35,"context_line":"    def statistic_list(self, meter_name, query\u003dNone, period\u003dNone):"}],"source_content_type":"text/x-python","patch_set":10,"id":"7a5de9d1_2c17f7ee","line":32,"range":{"start_line":32,"start_character":4,"end_line":32,"end_character":23},"updated":"2016-01-27 10:20:13.000000000","message":"nit: the super() call is missing here just in case we do some stuff into the base later on","commit_id":"33fd31e938df96c9c86f11753a2cd75003c03c64"},{"author":{"_account_id":13289,"name":"Taylor Peoples","email":"tpeoples@us.ibm.com","username":"tpeoples"},"change_message_id":"e0ed802f333bfc1a75bf45a7b6fa8838eb59aae6","unresolved":false,"context_lines":[{"line_number":29,"context_line":""},{"line_number":30,"context_line":""},{"line_number":31,"context_line":"class CeilometerClusterHistory(BaseClusterHistory):"},{"line_number":32,"context_line":"    def __init__(self):"},{"line_number":33,"context_line":"        self.ceilometer \u003d ceilometer_helper.CeilometerHelper()"},{"line_number":34,"context_line":""},{"line_number":35,"context_line":"    def statistic_list(self, meter_name, query\u003dNone, period\u003dNone):"}],"source_content_type":"text/x-python","patch_set":10,"id":"7a5de9d1_4877ad02","line":32,"range":{"start_line":32,"start_character":4,"end_line":32,"end_character":23},"in_reply_to":"7a5de9d1_2c17f7ee","updated":"2016-01-27 15:37:49.000000000","message":"Done.  I also added the ability to give CeilometerClusterHistory an instance of OpenStackClients so that the strategies can pass their osc instance to it instead of creating another connection to keystone / ceilometer.","commit_id":"33fd31e938df96c9c86f11753a2cd75003c03c64"}],"watcher/tests/common/test_ceilometer_helper.py":[{"author":{"_account_id":18971,"name":"Vincent Françoise","email":"Vincent.FRANCOISE@b-com.com","username":"v-francoise"},"change_message_id":"1b7b2304cb6f08e9cc9c0432855ca70348e7463c","unresolved":false,"context_lines":[{"line_number":18,"context_line":"from __future__ import unicode_literals"},{"line_number":19,"context_line":""},{"line_number":20,"context_line":"import mock"},{"line_number":21,"context_line":"from mock import MagicMock"},{"line_number":22,"context_line":"from oslo_config import cfg"},{"line_number":23,"context_line":""},{"line_number":24,"context_line":"from watcher.common import ceilometer_helper"}],"source_content_type":"text/x-python","patch_set":16,"id":"7a5de9d1_89e5bddd","line":21,"range":{"start_line":21,"start_character":0,"end_line":21,"end_character":26},"updated":"2016-02-02 09:30:02.000000000","message":"nit: can you import the module instead of the class?","commit_id":"e07f6775d4242407fca1e202784508a0c1ec963e"},{"author":{"_account_id":13289,"name":"Taylor Peoples","email":"tpeoples@us.ibm.com","username":"tpeoples"},"change_message_id":"ed4f162d70100b183feb0ff939bcd1a12d2251db","unresolved":false,"context_lines":[{"line_number":18,"context_line":"from __future__ import unicode_literals"},{"line_number":19,"context_line":""},{"line_number":20,"context_line":"import mock"},{"line_number":21,"context_line":"from mock import MagicMock"},{"line_number":22,"context_line":"from oslo_config import cfg"},{"line_number":23,"context_line":""},{"line_number":24,"context_line":"from watcher.common import ceilometer_helper"}],"source_content_type":"text/x-python","patch_set":16,"id":"5a5ae5dd_ce81774f","line":21,"range":{"start_line":21,"start_character":0,"end_line":21,"end_character":26},"in_reply_to":"7a5de9d1_89e5bddd","updated":"2016-02-03 06:18:34.000000000","message":"Done","commit_id":"e07f6775d4242407fca1e202784508a0c1ec963e"},{"author":{"_account_id":18971,"name":"Vincent Françoise","email":"Vincent.FRANCOISE@b-com.com","username":"v-francoise"},"change_message_id":"1b7b2304cb6f08e9cc9c0432855ca70348e7463c","unresolved":false,"context_lines":[{"line_number":23,"context_line":""},{"line_number":24,"context_line":"from watcher.common import ceilometer_helper"},{"line_number":25,"context_line":"from watcher.common import clients"},{"line_number":26,"context_line":"from watcher.tests.base import BaseTestCase"},{"line_number":27,"context_line":""},{"line_number":28,"context_line":"CONF \u003d cfg.CONF"},{"line_number":29,"context_line":""}],"source_content_type":"text/x-python","patch_set":16,"id":"7a5de9d1_a9eaf9aa","line":26,"range":{"start_line":26,"start_character":31,"end_line":26,"end_character":43},"updated":"2016-02-02 09:30:02.000000000","message":"ditto","commit_id":"e07f6775d4242407fca1e202784508a0c1ec963e"},{"author":{"_account_id":13289,"name":"Taylor Peoples","email":"tpeoples@us.ibm.com","username":"tpeoples"},"change_message_id":"ed4f162d70100b183feb0ff939bcd1a12d2251db","unresolved":false,"context_lines":[{"line_number":23,"context_line":""},{"line_number":24,"context_line":"from watcher.common import ceilometer_helper"},{"line_number":25,"context_line":"from watcher.common import clients"},{"line_number":26,"context_line":"from watcher.tests.base import BaseTestCase"},{"line_number":27,"context_line":""},{"line_number":28,"context_line":"CONF \u003d cfg.CONF"},{"line_number":29,"context_line":""}],"source_content_type":"text/x-python","patch_set":16,"id":"7a5de9d1_fb5662cd","line":26,"range":{"start_line":26,"start_character":31,"end_line":26,"end_character":43},"in_reply_to":"7a5de9d1_a9eaf9aa","updated":"2016-02-03 06:18:34.000000000","message":"Done","commit_id":"e07f6775d4242407fca1e202784508a0c1ec963e"}],"watcher/tests/common/test_clients.py":[{"author":{"_account_id":12394,"name":"David TARDIVEL","email":"David.TARDIVEL@b-com.com","username":"David.T"},"change_message_id":"ef71b99b83ebdfdd0e2d260a40071c43be13e3ed","unresolved":false,"context_lines":[{"line_number":53,"context_line":"                            group\u003d\u0027neutron_client\u0027)"},{"line_number":54,"context_line":""},{"line_number":55,"context_line":"    def test_get_admin_credentials_v2(self):"},{"line_number":56,"context_line":"        cfg.CONF.set_override(\u0027auth_version\u0027, \u0027v2.0\u0027,"},{"line_number":57,"context_line":"                              group\u003d\u0027keystone_authtoken\u0027)"},{"line_number":58,"context_line":"        osc \u003d clients.OpenStackClients()"},{"line_number":59,"context_line":"        creds \u003d osc._get_admin_credentials()"},{"line_number":60,"context_line":"        expected \u003d {\u0027auth_url\u0027: \u0027http://server.test:5000/v2.0\u0027,"}],"source_content_type":"text/x-python","patch_set":4,"id":"9a68dd71_8f1450a0","line":57,"range":{"start_line":56,"start_character":8,"end_line":57,"end_character":57},"updated":"2016-01-22 15:31:39.000000000","message":"v2.0 is already the value set in setup(). you don\u0027t need to override it.","commit_id":"b8644b87bc77c8e7c238f4bbf48f88f469aab026"},{"author":{"_account_id":13289,"name":"Taylor Peoples","email":"tpeoples@us.ibm.com","username":"tpeoples"},"change_message_id":"291fa2bbefc0c671a75786563f798b855cd331f4","unresolved":false,"context_lines":[{"line_number":53,"context_line":"                            group\u003d\u0027neutron_client\u0027)"},{"line_number":54,"context_line":""},{"line_number":55,"context_line":"    def test_get_admin_credentials_v2(self):"},{"line_number":56,"context_line":"        cfg.CONF.set_override(\u0027auth_version\u0027, \u0027v2.0\u0027,"},{"line_number":57,"context_line":"                              group\u003d\u0027keystone_authtoken\u0027)"},{"line_number":58,"context_line":"        osc \u003d clients.OpenStackClients()"},{"line_number":59,"context_line":"        creds \u003d osc._get_admin_credentials()"},{"line_number":60,"context_line":"        expected \u003d {\u0027auth_url\u0027: \u0027http://server.test:5000/v2.0\u0027,"}],"source_content_type":"text/x-python","patch_set":4,"id":"9a68dd71_53535039","line":57,"range":{"start_line":56,"start_character":8,"end_line":57,"end_character":57},"in_reply_to":"9a68dd71_8f1450a0","updated":"2016-01-25 04:57:00.000000000","message":"Done","commit_id":"b8644b87bc77c8e7c238f4bbf48f88f469aab026"}]}
