)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":21672,"name":"Sundar Nadathur","email":"sundar.nadathur@intel.com","username":"nsundar"},"change_message_id":"9d0c8f8cabf634297c4e8a22849c9341d6de85b7","unresolved":false,"context_lines":[{"line_number":4,"context_line":"Commit:     chenke \u003cchen.ke14@zte.com.cn\u003e"},{"line_number":5,"context_line":"CommitDate: 2019-09-17 17:27:46 +0800"},{"line_number":6,"context_line":""},{"line_number":7,"context_line":"Mofity the create style for nova_client and placement_client"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"1. Refer to nova\u0027s latest code, use get_sdk to create the client[1]."},{"line_number":10,"context_line":""}],"source_content_type":"text/x-gerrit-commit-message","patch_set":2,"id":"3fa7e38b_1c6c1b35","line":7,"updated":"2019-09-17 12:07:26.000000000","message":"Suggest: \"Fix the hardcoding of user role using sdk_adapter approach\"","commit_id":"6d4f250babda2f63c698298d1810174a2ec0cf56"},{"author":{"_account_id":28748,"name":"chenker","email":"chen.ke14@zte.com.cn","username":"chenke"},"change_message_id":"f805ed18798e90e4a6660d8ae1fe5c32ea66a460","unresolved":false,"context_lines":[{"line_number":4,"context_line":"Commit:     chenke \u003cchen.ke14@zte.com.cn\u003e"},{"line_number":5,"context_line":"CommitDate: 2019-09-17 17:27:46 +0800"},{"line_number":6,"context_line":""},{"line_number":7,"context_line":"Mofity the create style for nova_client and placement_client"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"1. Refer to nova\u0027s latest code, use get_sdk to create the client[1]."},{"line_number":10,"context_line":""}],"source_content_type":"text/x-gerrit-commit-message","patch_set":2,"id":"3fa7e38b_2b2181fc","line":7,"in_reply_to":"3fa7e38b_1c6c1b35","updated":"2019-09-18 04:25:36.000000000","message":"Done","commit_id":"6d4f250babda2f63c698298d1810174a2ec0cf56"},{"author":{"_account_id":28748,"name":"chenker","email":"chen.ke14@zte.com.cn","username":"chenke"},"change_message_id":"558f93691f1b18b1abfd3ee83fcdc7550fba07dc","unresolved":false,"context_lines":[{"line_number":4,"context_line":"Commit:     chenke \u003cchen.ke14@zte.com.cn\u003e"},{"line_number":5,"context_line":"CommitDate: 2019-09-17 17:27:46 +0800"},{"line_number":6,"context_line":""},{"line_number":7,"context_line":"Mofity the create style for nova_client and placement_client"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"1. Refer to nova\u0027s latest code, use get_sdk to create the client[1]."},{"line_number":10,"context_line":""}],"source_content_type":"text/x-gerrit-commit-message","patch_set":2,"id":"3fa7e38b_5f0e05e6","line":7,"in_reply_to":"3fa7e38b_1c6c1b35","updated":"2019-09-17 12:40:18.000000000","message":"Ok. Thanks.","commit_id":"6d4f250babda2f63c698298d1810174a2ec0cf56"}],"cyborg/_i18n.py":[{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"dd357476390523c1684b36d7ab7ecce2722165c8","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":6,"id":"3fa7e38b_9298dd6a","updated":"2019-09-18 14:26:05.000000000","message":"[Later] Oh, I see you don\u0027t need this file at all. You already have cyborg/common/i18n.py, which already contains the only three lines you actually need.","commit_id":"74876cd4127bfecc6fa66791f6e41768d558f5a2"},{"author":{"_account_id":28748,"name":"chenker","email":"chen.ke14@zte.com.cn","username":"chenke"},"change_message_id":"44e2b970ef8d64d8dd61ecafbf6749e7569f9e1f","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":6,"id":"3fa7e38b_ac2b2b80","in_reply_to":"3fa7e38b_9298dd6a","updated":"2019-09-19 12:19:31.000000000","message":"Done","commit_id":"74876cd4127bfecc6fa66791f6e41768d558f5a2"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"dd357476390523c1684b36d7ab7ecce2722165c8","unresolved":false,"context_lines":[{"line_number":1,"context_line":"# Copyright 2014 IBM Corp."},{"line_number":2,"context_line":"#"},{"line_number":3,"context_line":"# Licensed under the Apache License, Version 2.0 (the \"License\"); you may"},{"line_number":4,"context_line":"# not use this file except in compliance with the License. You may obtain"},{"line_number":5,"context_line":"# a copy of the License at"}],"source_content_type":"text/x-python","patch_set":6,"id":"3fa7e38b_72e3e106","line":2,"range":{"start_line":1,"start_character":0,"end_line":2,"end_character":1},"updated":"2019-09-18 14:26:05.000000000","message":"I don\u0027t think you need this.","commit_id":"74876cd4127bfecc6fa66791f6e41768d558f5a2"},{"author":{"_account_id":28748,"name":"chenker","email":"chen.ke14@zte.com.cn","username":"chenke"},"change_message_id":"44e2b970ef8d64d8dd61ecafbf6749e7569f9e1f","unresolved":false,"context_lines":[{"line_number":1,"context_line":"# Copyright 2014 IBM Corp."},{"line_number":2,"context_line":"#"},{"line_number":3,"context_line":"# Licensed under the Apache License, Version 2.0 (the \"License\"); you may"},{"line_number":4,"context_line":"# not use this file except in compliance with the License. You may obtain"},{"line_number":5,"context_line":"# a copy of the License at"}],"source_content_type":"text/x-python","patch_set":6,"id":"3fa7e38b_4c22b7a6","line":2,"range":{"start_line":1,"start_character":0,"end_line":2,"end_character":1},"in_reply_to":"3fa7e38b_72e3e106","updated":"2019-09-19 12:19:31.000000000","message":"Done","commit_id":"74876cd4127bfecc6fa66791f6e41768d558f5a2"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"dd357476390523c1684b36d7ab7ecce2722165c8","unresolved":false,"context_lines":[{"line_number":25,"context_line":"# The primary translation function using the well-known name \"_\""},{"line_number":26,"context_line":"_ \u003d _translators.primary"},{"line_number":27,"context_line":""},{"line_number":28,"context_line":"# Translators for log levels."},{"line_number":29,"context_line":"#"},{"line_number":30,"context_line":"# The abbreviated names are meant to reflect the usual use of a short"},{"line_number":31,"context_line":"# name like \u0027_\u0027. The \"L\" is for \"log\" and the other letter comes from"},{"line_number":32,"context_line":"# the level."},{"line_number":33,"context_line":"_LI \u003d _translators.log_info"},{"line_number":34,"context_line":"_LW \u003d _translators.log_warning"},{"line_number":35,"context_line":"_LE \u003d _translators.log_error"},{"line_number":36,"context_line":"_LC \u003d _translators.log_critical"},{"line_number":37,"context_line":""},{"line_number":38,"context_line":""},{"line_number":39,"context_line":"def translate(value, user_locale):"}],"source_content_type":"text/x-python","patch_set":6,"id":"3fa7e38b_f2c03153","line":36,"range":{"start_line":28,"start_character":0,"end_line":36,"end_character":31},"updated":"2019-09-18 14:26:05.000000000","message":"We\u0027re not translating logs anymore, so you shouldn\u0027t need to add these.","commit_id":"74876cd4127bfecc6fa66791f6e41768d558f5a2"},{"author":{"_account_id":28748,"name":"chenker","email":"chen.ke14@zte.com.cn","username":"chenke"},"change_message_id":"44e2b970ef8d64d8dd61ecafbf6749e7569f9e1f","unresolved":false,"context_lines":[{"line_number":25,"context_line":"# The primary translation function using the well-known name \"_\""},{"line_number":26,"context_line":"_ \u003d _translators.primary"},{"line_number":27,"context_line":""},{"line_number":28,"context_line":"# Translators for log levels."},{"line_number":29,"context_line":"#"},{"line_number":30,"context_line":"# The abbreviated names are meant to reflect the usual use of a short"},{"line_number":31,"context_line":"# name like \u0027_\u0027. The \"L\" is for \"log\" and the other letter comes from"},{"line_number":32,"context_line":"# the level."},{"line_number":33,"context_line":"_LI \u003d _translators.log_info"},{"line_number":34,"context_line":"_LW \u003d _translators.log_warning"},{"line_number":35,"context_line":"_LE \u003d _translators.log_error"},{"line_number":36,"context_line":"_LC \u003d _translators.log_critical"},{"line_number":37,"context_line":""},{"line_number":38,"context_line":""},{"line_number":39,"context_line":"def translate(value, user_locale):"}],"source_content_type":"text/x-python","patch_set":6,"id":"3fa7e38b_2c3c1bbe","line":36,"range":{"start_line":28,"start_character":0,"end_line":36,"end_character":31},"in_reply_to":"3fa7e38b_f2c03153","updated":"2019-09-19 12:19:31.000000000","message":"Thanks.","commit_id":"74876cd4127bfecc6fa66791f6e41768d558f5a2"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"dd357476390523c1684b36d7ab7ecce2722165c8","unresolved":false,"context_lines":[{"line_number":36,"context_line":"_LC \u003d _translators.log_critical"},{"line_number":37,"context_line":""},{"line_number":38,"context_line":""},{"line_number":39,"context_line":"def translate(value, user_locale):"},{"line_number":40,"context_line":"    return oslo_i18n.translate(value, user_locale)"},{"line_number":41,"context_line":""},{"line_number":42,"context_line":""},{"line_number":43,"context_line":"def get_available_languages():"},{"line_number":44,"context_line":"    return oslo_i18n.get_available_languages(DOMAIN)"}],"source_content_type":"text/x-python","patch_set":6,"id":"3fa7e38b_b2af1993","line":44,"range":{"start_line":39,"start_character":0,"end_line":44,"end_character":52},"updated":"2019-09-18 14:26:05.000000000","message":"These aren\u0027t used, so you might as well get rid of them.","commit_id":"74876cd4127bfecc6fa66791f6e41768d558f5a2"},{"author":{"_account_id":28748,"name":"chenker","email":"chen.ke14@zte.com.cn","username":"chenke"},"change_message_id":"44e2b970ef8d64d8dd61ecafbf6749e7569f9e1f","unresolved":false,"context_lines":[{"line_number":36,"context_line":"_LC \u003d _translators.log_critical"},{"line_number":37,"context_line":""},{"line_number":38,"context_line":""},{"line_number":39,"context_line":"def translate(value, user_locale):"},{"line_number":40,"context_line":"    return oslo_i18n.translate(value, user_locale)"},{"line_number":41,"context_line":""},{"line_number":42,"context_line":""},{"line_number":43,"context_line":"def get_available_languages():"},{"line_number":44,"context_line":"    return oslo_i18n.get_available_languages(DOMAIN)"}],"source_content_type":"text/x-python","patch_set":6,"id":"3fa7e38b_0c411f3a","line":44,"range":{"start_line":39,"start_character":0,"end_line":44,"end_character":52},"in_reply_to":"3fa7e38b_b2af1993","updated":"2019-09-19 12:19:31.000000000","message":"Done","commit_id":"74876cd4127bfecc6fa66791f6e41768d558f5a2"}],"cyborg/common/nova_client.py":[{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"dd357476390523c1684b36d7ab7ecce2722165c8","unresolved":false,"context_lines":[{"line_number":21,"context_line":""},{"line_number":22,"context_line":"class NovaAPI(object):"},{"line_number":23,"context_line":"    def __init__(self):"},{"line_number":24,"context_line":"        default_user \u003d \"devstack-admin\""},{"line_number":25,"context_line":"        try:"},{"line_number":26,"context_line":"            auth_user \u003d CONF.compute.username"},{"line_number":27,"context_line":"        except Exception:"}],"source_content_type":"text/x-python","patch_set":6,"id":"3fa7e38b_c8dc681a","side":"PARENT","line":24,"range":{"start_line":24,"start_character":24,"end_line":24,"end_character":38},"updated":"2019-09-18 14:26:05.000000000","message":"Aha, so there\u0027s never been actual prod code to talk to nova yet. That\u0027s great. See other comment about using the service type ([compute]) rather than the project name ([nova]) for your conf section.","commit_id":"68dc701a4f7e6fda130348c0ff0f416dc5bcc62d"},{"author":{"_account_id":28748,"name":"chenker","email":"chen.ke14@zte.com.cn","username":"chenke"},"change_message_id":"44e2b970ef8d64d8dd61ecafbf6749e7569f9e1f","unresolved":false,"context_lines":[{"line_number":21,"context_line":""},{"line_number":22,"context_line":"class NovaAPI(object):"},{"line_number":23,"context_line":"    def __init__(self):"},{"line_number":24,"context_line":"        default_user \u003d \"devstack-admin\""},{"line_number":25,"context_line":"        try:"},{"line_number":26,"context_line":"            auth_user \u003d CONF.compute.username"},{"line_number":27,"context_line":"        except Exception:"}],"source_content_type":"text/x-python","patch_set":6,"id":"3fa7e38b_cc1c676c","side":"PARENT","line":24,"range":{"start_line":24,"start_character":24,"end_line":24,"end_character":38},"in_reply_to":"3fa7e38b_c8dc681a","updated":"2019-09-19 12:19:31.000000000","message":"Hi, please see the reply in utils.py, Thanks.","commit_id":"68dc701a4f7e6fda130348c0ff0f416dc5bcc62d"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"dd357476390523c1684b36d7ab7ecce2722165c8","unresolved":false,"context_lines":[{"line_number":51,"context_line":"            LOG.error(\"Failed to notify Nova service.\")"},{"line_number":52,"context_line":"        return result"},{"line_number":53,"context_line":""},{"line_number":54,"context_line":"    def _create_client(self):"},{"line_number":55,"context_line":"        \"\"\"Create the HTTP session accessing the compute service.\"\"\""},{"line_number":56,"context_line":"        return utils.get_sdk_adapter(\u0027compute\u0027)"}],"source_content_type":"text/x-python","patch_set":6,"id":"3fa7e38b_b2eb99ae","line":56,"range":{"start_line":54,"start_character":0,"end_line":56,"end_character":47},"updated":"2019-09-18 14:26:05.000000000","message":"This doesn\u0027t seem necessary; just inline the get_sdk_adapter call on L23.","commit_id":"74876cd4127bfecc6fa66791f6e41768d558f5a2"}],"cyborg/common/placement_client.py":[{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"dd357476390523c1684b36d7ab7ecce2722165c8","unresolved":false,"context_lines":[{"line_number":284,"context_line":"            raise exception.ResourceProviderInUse()"},{"line_number":285,"context_line":"        raise exception.ResourceProviderDeletionFailed(uuid\u003drp_uuid)"},{"line_number":286,"context_line":""},{"line_number":287,"context_line":"    def _create_client(self):"},{"line_number":288,"context_line":"        \"\"\"Create the HTTP session accessing the placement service.\"\"\""},{"line_number":289,"context_line":"        return utils.get_sdk_adapter(\u0027placement\u0027)"}],"source_content_type":"text/x-python","patch_set":6,"id":"3fa7e38b_52d025f8","line":289,"range":{"start_line":287,"start_character":0,"end_line":289,"end_character":49},"updated":"2019-09-18 14:26:05.000000000","message":"This doesn\u0027t seem necessary; just inline the get_sdk_adapter call on L32.","commit_id":"74876cd4127bfecc6fa66791f6e41768d558f5a2"},{"author":{"_account_id":28748,"name":"chenker","email":"chen.ke14@zte.com.cn","username":"chenke"},"change_message_id":"44e2b970ef8d64d8dd61ecafbf6749e7569f9e1f","unresolved":false,"context_lines":[{"line_number":284,"context_line":"            raise exception.ResourceProviderInUse()"},{"line_number":285,"context_line":"        raise exception.ResourceProviderDeletionFailed(uuid\u003drp_uuid)"},{"line_number":286,"context_line":""},{"line_number":287,"context_line":"    def _create_client(self):"},{"line_number":288,"context_line":"        \"\"\"Create the HTTP session accessing the placement service.\"\"\""},{"line_number":289,"context_line":"        return utils.get_sdk_adapter(\u0027placement\u0027)"}],"source_content_type":"text/x-python","patch_set":6,"id":"3fa7e38b_4607f51d","line":289,"range":{"start_line":287,"start_character":0,"end_line":289,"end_character":49},"in_reply_to":"3fa7e38b_52d025f8","updated":"2019-09-19 12:19:31.000000000","message":"Done","commit_id":"74876cd4127bfecc6fa66791f6e41768d558f5a2"}],"cyborg/common/utils.py":[{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"dd357476390523c1684b36d7ab7ecce2722165c8","unresolved":false,"context_lines":[{"line_number":54,"context_line":"    return value.rstrip(chars) or value"},{"line_number":55,"context_line":""},{"line_number":56,"context_line":""},{"line_number":57,"context_line":"def get_ksa_adapter(service_type, ksa_auth\u003dNone, ksa_session\u003dNone,"},{"line_number":58,"context_line":"                    min_version\u003dNone, max_version\u003dNone):"},{"line_number":59,"context_line":"    \"\"\"Construct a keystoneauth1 Adapter for a given service type."},{"line_number":60,"context_line":""}],"source_content_type":"text/x-python","patch_set":6,"id":"3fa7e38b_6800d435","line":57,"range":{"start_line":57,"start_character":4,"end_line":57,"end_character":19},"updated":"2019-09-18 14:26:05.000000000","message":"Ugh, this is still used for glance, and you\u0027re using glanceclient :(","commit_id":"74876cd4127bfecc6fa66791f6e41768d558f5a2"},{"author":{"_account_id":28748,"name":"chenker","email":"chen.ke14@zte.com.cn","username":"chenke"},"change_message_id":"44e2b970ef8d64d8dd61ecafbf6749e7569f9e1f","unresolved":false,"context_lines":[{"line_number":54,"context_line":"    return value.rstrip(chars) or value"},{"line_number":55,"context_line":""},{"line_number":56,"context_line":""},{"line_number":57,"context_line":"def get_ksa_adapter(service_type, ksa_auth\u003dNone, ksa_session\u003dNone,"},{"line_number":58,"context_line":"                    min_version\u003dNone, max_version\u003dNone):"},{"line_number":59,"context_line":"    \"\"\"Construct a keystoneauth1 Adapter for a given service type."},{"line_number":60,"context_line":""}],"source_content_type":"text/x-python","patch_set":6,"id":"3fa7e38b_261f596d","line":57,"range":{"start_line":57,"start_character":4,"end_line":57,"end_character":19},"in_reply_to":"3fa7e38b_63c5558e","updated":"2019-09-19 12:19:31.000000000","message":"Done","commit_id":"74876cd4127bfecc6fa66791f6e41768d558f5a2"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"04fa0942425775b3ed158b550b5ea1f98985fdb0","unresolved":false,"context_lines":[{"line_number":54,"context_line":"    return value.rstrip(chars) or value"},{"line_number":55,"context_line":""},{"line_number":56,"context_line":""},{"line_number":57,"context_line":"def get_ksa_adapter(service_type, ksa_auth\u003dNone, ksa_session\u003dNone,"},{"line_number":58,"context_line":"                    min_version\u003dNone, max_version\u003dNone):"},{"line_number":59,"context_line":"    \"\"\"Construct a keystoneauth1 Adapter for a given service type."},{"line_number":60,"context_line":""}],"source_content_type":"text/x-python","patch_set":6,"id":"3fa7e38b_63c5558e","line":57,"range":{"start_line":57,"start_character":4,"end_line":57,"end_character":19},"in_reply_to":"3fa7e38b_6800d435","updated":"2019-09-18 14:33:49.000000000","message":"It would be great if you could get rid of all the glanceclient gorp and use the SDK instead. It should support everything you need, including download [1].\n\nAnd when you do that, you should also make the conf section [image] (the service type) rather than [glance] (the project name).\n\nThen you can get rid of get_ksa_adapter and about a thousand lines of glanceclient tech debt you inherited when you copy/pasted from nova.\n\nOf course, all that should be done in a separate change.\n\n[1] https://docs.openstack.org/openstacksdk/latest/user/proxies/image_v2.html#openstack.image.v2._proxy.Proxy.download_image","commit_id":"74876cd4127bfecc6fa66791f6e41768d558f5a2"},{"author":{"_account_id":28748,"name":"chenker","email":"chen.ke14@zte.com.cn","username":"chenke"},"change_message_id":"44e2b970ef8d64d8dd61ecafbf6749e7569f9e1f","unresolved":false,"context_lines":[{"line_number":54,"context_line":"    return value.rstrip(chars) or value"},{"line_number":55,"context_line":""},{"line_number":56,"context_line":""},{"line_number":57,"context_line":"def get_ksa_adapter(service_type, ksa_auth\u003dNone, ksa_session\u003dNone,"},{"line_number":58,"context_line":"                    min_version\u003dNone, max_version\u003dNone):"},{"line_number":59,"context_line":"    \"\"\"Construct a keystoneauth1 Adapter for a given service type."},{"line_number":60,"context_line":""}],"source_content_type":"text/x-python","patch_set":6,"id":"3fa7e38b_061a5d7c","line":57,"range":{"start_line":57,"start_character":4,"end_line":57,"end_character":19},"in_reply_to":"3fa7e38b_6800d435","updated":"2019-09-19 12:19:31.000000000","message":"Right. Will fix glance in the future, Thanks.","commit_id":"74876cd4127bfecc6fa66791f6e41768d558f5a2"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"dd357476390523c1684b36d7ab7ecce2722165c8","unresolved":false,"context_lines":[{"line_number":117,"context_line":"    # Get the conf group corresponding to the service type."},{"line_number":118,"context_line":"    confgrp \u003d _SERVICE_TYPES.get_project_name(service_type)"},{"line_number":119,"context_line":"    if not confgrp or not hasattr(CONF, confgrp):"},{"line_number":120,"context_line":"        # Try the service type as the conf group.  This is necessary for e.g."},{"line_number":121,"context_line":"        # placement, while it\u0027s still part of the nova project."},{"line_number":122,"context_line":"        # Note that this might become the first thing we try if/as we move to"},{"line_number":123,"context_line":"        # using service types for conf group names in general."},{"line_number":124,"context_line":"        confgrp \u003d service_type"},{"line_number":125,"context_line":"        if not confgrp or not hasattr(CONF, confgrp):"},{"line_number":126,"context_line":"            raise exception.ConfGroupForServiceTypeNotFound(stype\u003dservice_type)"},{"line_number":127,"context_line":"    return confgrp"},{"line_number":128,"context_line":""}],"source_content_type":"text/x-python","patch_set":6,"id":"3fa7e38b_929e9d05","line":125,"range":{"start_line":120,"start_character":0,"end_line":125,"end_character":53},"updated":"2019-09-18 14:26:05.000000000","message":"You shouldn\u0027t need this fallback, since placement is no longer part of nova.\n\nIs it too late for you to use [compute] instead of [nova] as your conf section? That would be the more forward-looking way of doing things. If you did that, this whole method could go away and the caller could just use service_type.\n\n(Or if you really wanted, you could make it\n\n def _validate_conf_group_for_service_type(service_type):\n     if not hasattr(CONF, service_type):\n         raise exception.ConfGroupForServiceTypeNotFound(stype\u003dservice_type)\n\nbut this really only guards against programmer errors, since it just means you never registered a conf group with that name. So I wouldn\u0027t bother.)\n\nAnd if you did that, I don\u0027t even think you would need a dependency on os-service-types.\n\n[Later] Ah, I see from [1] that it\u0027s not too late. So yes, please use [compute], not [nova], for your conf section, and get rid of this method, and get rid of your dep on os-service-types. [Later later] Oh, you didn\u0027t have ost in your requirements anyway. I guess you were getting it by luck through a transitive dep.\n\n[1] https://review.opendev.org/#/c/682565/6/cyborg/common/nova_client.py@a24","commit_id":"74876cd4127bfecc6fa66791f6e41768d558f5a2"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"8aed41f23e75d1827b827c52ac9ac8d8d82c9db6","unresolved":false,"context_lines":[{"line_number":117,"context_line":"    # Get the conf group corresponding to the service type."},{"line_number":118,"context_line":"    confgrp \u003d _SERVICE_TYPES.get_project_name(service_type)"},{"line_number":119,"context_line":"    if not confgrp or not hasattr(CONF, confgrp):"},{"line_number":120,"context_line":"        # Try the service type as the conf group.  This is necessary for e.g."},{"line_number":121,"context_line":"        # placement, while it\u0027s still part of the nova project."},{"line_number":122,"context_line":"        # Note that this might become the first thing we try if/as we move to"},{"line_number":123,"context_line":"        # using service types for conf group names in general."},{"line_number":124,"context_line":"        confgrp \u003d service_type"},{"line_number":125,"context_line":"        if not confgrp or not hasattr(CONF, confgrp):"},{"line_number":126,"context_line":"            raise exception.ConfGroupForServiceTypeNotFound(stype\u003dservice_type)"},{"line_number":127,"context_line":"    return confgrp"},{"line_number":128,"context_line":""}],"source_content_type":"text/x-python","patch_set":6,"id":"3fa7e38b_ec280a87","line":125,"range":{"start_line":120,"start_character":0,"end_line":125,"end_character":53},"in_reply_to":"3fa7e38b_86240dc8","updated":"2019-09-23 14:20:48.000000000","message":"Yes, my mistake, the SDK code was written to use the project name so that nova could be backward compatible :(","commit_id":"74876cd4127bfecc6fa66791f6e41768d558f5a2"},{"author":{"_account_id":28748,"name":"chenker","email":"chen.ke14@zte.com.cn","username":"chenke"},"change_message_id":"44e2b970ef8d64d8dd61ecafbf6749e7569f9e1f","unresolved":false,"context_lines":[{"line_number":117,"context_line":"    # Get the conf group corresponding to the service type."},{"line_number":118,"context_line":"    confgrp \u003d _SERVICE_TYPES.get_project_name(service_type)"},{"line_number":119,"context_line":"    if not confgrp or not hasattr(CONF, confgrp):"},{"line_number":120,"context_line":"        # Try the service type as the conf group.  This is necessary for e.g."},{"line_number":121,"context_line":"        # placement, while it\u0027s still part of the nova project."},{"line_number":122,"context_line":"        # Note that this might become the first thing we try if/as we move to"},{"line_number":123,"context_line":"        # using service types for conf group names in general."},{"line_number":124,"context_line":"        confgrp \u003d service_type"},{"line_number":125,"context_line":"        if not confgrp or not hasattr(CONF, confgrp):"},{"line_number":126,"context_line":"            raise exception.ConfGroupForServiceTypeNotFound(stype\u003dservice_type)"},{"line_number":127,"context_line":"    return confgrp"},{"line_number":128,"context_line":""}],"source_content_type":"text/x-python","patch_set":6,"id":"3fa7e38b_86240dc8","line":125,"range":{"start_line":120,"start_character":0,"end_line":125,"end_character":53},"in_reply_to":"3fa7e38b_929e9d05","updated":"2019-09-19 12:19:31.000000000","message":"Hi, Eric Fried. Thank you very much for your help. I try your advice to _SERVICE_TYPES.get_project_name(service_type) and just use \u0027compute\u0027 group replace \u0027nova\u0027, please look patch set 7. But the result is error because openstacksdk[1,2] still use this module to get project name, and then find the \u0027nova\u0027 group in conf. So we can\u0027t use \u0027compute\u0027 section to replace \u0027nova\u0027.\n[1]. https://github.com/openstack/openstacksdk/blob/master/openstack/config/cloud_region.py#L162\n[2]. https://github.com/openstack/os-service-types/blob/fb33d01882517e6982463f100546e386660f0135/os_service_types/data/service-types.json#L387-L391","commit_id":"74876cd4127bfecc6fa66791f6e41768d558f5a2"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"dd357476390523c1684b36d7ab7ecce2722165c8","unresolved":false,"context_lines":[{"line_number":127,"context_line":"    return confgrp"},{"line_number":128,"context_line":""},{"line_number":129,"context_line":""},{"line_number":130,"context_line":"def _get_auth_and_session(confgrp, ksa_auth\u003dNone, ksa_session\u003dNone):"},{"line_number":131,"context_line":"    # Ensure we have an auth."},{"line_number":132,"context_line":"    # NOTE(efried): This could be None, and that could be okay - e.g. if the"},{"line_number":133,"context_line":"    # result is being used for get_endpoint() and the conf only contains"}],"source_content_type":"text/x-python","patch_set":6,"id":"3fa7e38b_b24ab97d","line":130,"range":{"start_line":130,"start_character":33,"end_line":130,"end_character":66},"updated":"2019-09-18 14:26:05.000000000","message":"Since you\u0027re not using these, you might as well get rid of them and simplify the code accordingly [1][2][3]","commit_id":"74876cd4127bfecc6fa66791f6e41768d558f5a2"},{"author":{"_account_id":28748,"name":"chenker","email":"chen.ke14@zte.com.cn","username":"chenke"},"change_message_id":"44e2b970ef8d64d8dd61ecafbf6749e7569f9e1f","unresolved":false,"context_lines":[{"line_number":127,"context_line":"    return confgrp"},{"line_number":128,"context_line":""},{"line_number":129,"context_line":""},{"line_number":130,"context_line":"def _get_auth_and_session(confgrp, ksa_auth\u003dNone, ksa_session\u003dNone):"},{"line_number":131,"context_line":"    # Ensure we have an auth."},{"line_number":132,"context_line":"    # NOTE(efried): This could be None, and that could be okay - e.g. if the"},{"line_number":133,"context_line":"    # result is being used for get_endpoint() and the conf only contains"}],"source_content_type":"text/x-python","patch_set":6,"id":"3fa7e38b_a68589af","line":130,"range":{"start_line":130,"start_character":33,"end_line":130,"end_character":66},"in_reply_to":"3fa7e38b_b24ab97d","updated":"2019-09-19 12:19:31.000000000","message":"Done","commit_id":"74876cd4127bfecc6fa66791f6e41768d558f5a2"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"dd357476390523c1684b36d7ab7ecce2722165c8","unresolved":false,"context_lines":[{"line_number":129,"context_line":""},{"line_number":130,"context_line":"def _get_auth_and_session(confgrp, ksa_auth\u003dNone, ksa_session\u003dNone):"},{"line_number":131,"context_line":"    # Ensure we have an auth."},{"line_number":132,"context_line":"    # NOTE(efried): This could be None, and that could be okay - e.g. if the"},{"line_number":133,"context_line":"    # result is being used for get_endpoint() and the conf only contains"},{"line_number":134,"context_line":"    # endpoint_override."},{"line_number":135,"context_line":"    if not ksa_auth:"},{"line_number":136,"context_line":"        if ksa_session and ksa_session.auth:"},{"line_number":137,"context_line":"            ksa_auth \u003d ksa_session.auth"}],"source_content_type":"text/x-python","patch_set":6,"id":"3fa7e38b_72ae812f","line":134,"range":{"start_line":132,"start_character":0,"end_line":134,"end_character":24},"updated":"2019-09-18 14:26:05.000000000","message":"I don\u0027t think this is true for cyborg.\n\n(Looking at the method, I\u0027m not sure it\u0027s true for *anybody* actually...)","commit_id":"74876cd4127bfecc6fa66791f6e41768d558f5a2"},{"author":{"_account_id":28748,"name":"chenker","email":"chen.ke14@zte.com.cn","username":"chenke"},"change_message_id":"44e2b970ef8d64d8dd61ecafbf6749e7569f9e1f","unresolved":false,"context_lines":[{"line_number":129,"context_line":""},{"line_number":130,"context_line":"def _get_auth_and_session(confgrp, ksa_auth\u003dNone, ksa_session\u003dNone):"},{"line_number":131,"context_line":"    # Ensure we have an auth."},{"line_number":132,"context_line":"    # NOTE(efried): This could be None, and that could be okay - e.g. if the"},{"line_number":133,"context_line":"    # result is being used for get_endpoint() and the conf only contains"},{"line_number":134,"context_line":"    # endpoint_override."},{"line_number":135,"context_line":"    if not ksa_auth:"},{"line_number":136,"context_line":"        if ksa_session and ksa_session.auth:"},{"line_number":137,"context_line":"            ksa_auth \u003d ksa_session.auth"}],"source_content_type":"text/x-python","patch_set":6,"id":"3fa7e38b_86888dc6","line":134,"range":{"start_line":132,"start_character":0,"end_line":134,"end_character":24},"in_reply_to":"3fa7e38b_72ae812f","updated":"2019-09-19 12:19:31.000000000","message":"Done","commit_id":"74876cd4127bfecc6fa66791f6e41768d558f5a2"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"dd357476390523c1684b36d7ab7ecce2722165c8","unresolved":false,"context_lines":[{"line_number":132,"context_line":"    # NOTE(efried): This could be None, and that could be okay - e.g. if the"},{"line_number":133,"context_line":"    # result is being used for get_endpoint() and the conf only contains"},{"line_number":134,"context_line":"    # endpoint_override."},{"line_number":135,"context_line":"    if not ksa_auth:"},{"line_number":136,"context_line":"        if ksa_session and ksa_session.auth:"},{"line_number":137,"context_line":"            ksa_auth \u003d ksa_session.auth"},{"line_number":138,"context_line":"        else:"},{"line_number":139,"context_line":"            ksa_auth \u003d ks_loading.load_auth_from_conf_options(CONF, confgrp)"},{"line_number":140,"context_line":""},{"line_number":141,"context_line":"    if not ksa_session:"}],"source_content_type":"text/x-python","patch_set":6,"id":"3fa7e38b_b23f19d5","line":138,"range":{"start_line":135,"start_character":0,"end_line":138,"end_character":13},"updated":"2019-09-18 14:26:05.000000000","message":"[1] so this can go away","commit_id":"74876cd4127bfecc6fa66791f6e41768d558f5a2"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"dd357476390523c1684b36d7ab7ecce2722165c8","unresolved":false,"context_lines":[{"line_number":138,"context_line":"        else:"},{"line_number":139,"context_line":"            ksa_auth \u003d ks_loading.load_auth_from_conf_options(CONF, confgrp)"},{"line_number":140,"context_line":""},{"line_number":141,"context_line":"    if not ksa_session:"},{"line_number":142,"context_line":"        ksa_session \u003d ks_loading.load_session_from_conf_options("},{"line_number":143,"context_line":"            CONF, confgrp, auth\u003dksa_auth)"},{"line_number":144,"context_line":""}],"source_content_type":"text/x-python","patch_set":6,"id":"3fa7e38b_720a0127","line":141,"range":{"start_line":141,"start_character":0,"end_line":141,"end_character":23},"updated":"2019-09-18 14:26:05.000000000","message":"[2] and so can this","commit_id":"74876cd4127bfecc6fa66791f6e41768d558f5a2"},{"author":{"_account_id":28748,"name":"chenker","email":"chen.ke14@zte.com.cn","username":"chenke"},"change_message_id":"44e2b970ef8d64d8dd61ecafbf6749e7569f9e1f","unresolved":false,"context_lines":[{"line_number":138,"context_line":"        else:"},{"line_number":139,"context_line":"            ksa_auth \u003d ks_loading.load_auth_from_conf_options(CONF, confgrp)"},{"line_number":140,"context_line":""},{"line_number":141,"context_line":"    if not ksa_session:"},{"line_number":142,"context_line":"        ksa_session \u003d ks_loading.load_session_from_conf_options("},{"line_number":143,"context_line":"            CONF, confgrp, auth\u003dksa_auth)"},{"line_number":144,"context_line":""}],"source_content_type":"text/x-python","patch_set":6,"id":"3fa7e38b_e6a3814e","line":141,"range":{"start_line":141,"start_character":0,"end_line":141,"end_character":23},"in_reply_to":"3fa7e38b_720a0127","updated":"2019-09-19 12:19:31.000000000","message":"Done","commit_id":"74876cd4127bfecc6fa66791f6e41768d558f5a2"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"dd357476390523c1684b36d7ab7ecce2722165c8","unresolved":false,"context_lines":[{"line_number":142,"context_line":"        ksa_session \u003d ks_loading.load_session_from_conf_options("},{"line_number":143,"context_line":"            CONF, confgrp, auth\u003dksa_auth)"},{"line_number":144,"context_line":""},{"line_number":145,"context_line":"    return ksa_auth, ksa_session"},{"line_number":146,"context_line":""},{"line_number":147,"context_line":""},{"line_number":148,"context_line":"def get_sdk_adapter(service_type, check_service\u003dFalse):"}],"source_content_type":"text/x-python","patch_set":6,"id":"3fa7e38b_c5fe9104","line":145,"range":{"start_line":145,"start_character":0,"end_line":145,"end_character":32},"updated":"2019-09-18 14:26:05.000000000","message":"[3] and this can just return ksa_session","commit_id":"74876cd4127bfecc6fa66791f6e41768d558f5a2"},{"author":{"_account_id":28748,"name":"chenker","email":"chen.ke14@zte.com.cn","username":"chenke"},"change_message_id":"44e2b970ef8d64d8dd61ecafbf6749e7569f9e1f","unresolved":false,"context_lines":[{"line_number":142,"context_line":"        ksa_session \u003d ks_loading.load_session_from_conf_options("},{"line_number":143,"context_line":"            CONF, confgrp, auth\u003dksa_auth)"},{"line_number":144,"context_line":""},{"line_number":145,"context_line":"    return ksa_auth, ksa_session"},{"line_number":146,"context_line":""},{"line_number":147,"context_line":""},{"line_number":148,"context_line":"def get_sdk_adapter(service_type, check_service\u003dFalse):"}],"source_content_type":"text/x-python","patch_set":6,"id":"3fa7e38b_06957de4","line":145,"range":{"start_line":145,"start_character":0,"end_line":145,"end_character":32},"in_reply_to":"3fa7e38b_c5fe9104","updated":"2019-09-19 12:19:31.000000000","message":"Done","commit_id":"74876cd4127bfecc6fa66791f6e41768d558f5a2"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"dd357476390523c1684b36d7ab7ecce2722165c8","unresolved":false,"context_lines":[{"line_number":164,"context_line":"    try:"},{"line_number":165,"context_line":"        conn \u003d connection.Connection("},{"line_number":166,"context_line":"            session\u003dsess, oslo_conf\u003dCONF, service_types\u003d{service_type},"},{"line_number":167,"context_line":"            strict_proxies\u003dcheck_service)"},{"line_number":168,"context_line":"    except sdk_exc.ServiceDiscoveryException as e:"},{"line_number":169,"context_line":"        raise exception.ServiceUnavailable("},{"line_number":170,"context_line":"            _(\"The %(service_type)s service is unavailable: %(error)s\") %"}],"source_content_type":"text/x-python","patch_set":6,"id":"3fa7e38b_6870d473","line":167,"range":{"start_line":167,"start_character":12,"end_line":167,"end_character":40},"updated":"2019-09-18 14:26:05.000000000","message":"Is cyborg dead in the water if it can\u0027t talk to Placement and/or Nova? Or will handle failures gracefully and keep trying to communicate?\n\n[Later] Quickly skimming through the code, I see zero exception handling, so I guess this is an open issue either way.\n\nThere are two ways API calls through an SDK Adapter can raise exceptions:\n- If the service responds with HTTP status \u003e\u003d400. You can switch these off by passing raise_exc\u003dFalse to the Adapter creation and/or individual requests, in which case you get back a Response object just like for successful calls, and you can manually check the Response.status_code. This is how we\u0027ve got Nova set up.\n- If communication with the service is broken. This can happen if SDK/KSA can\u0027t even figure out who to talk to (like if the service catalog is busted); or if the service is completely down. These should always be subclasses of keystoneauth1.exceptions.ClientException. You can\u0027t switch them off like you can with the above.\n\nNow, when you create a Connection, passing strict_proxies\u003dTrue causes SDK to poke at the service to make sure it\u0027s actually alive, and raise ServiceDiscoveryException if it\u0027s not. If you don\u0027t do this check, and the service is dead (second bullet above), you won\u0027t find out until the first time you try to issue an API request; and then you\u0027ll get a 5xx, either via exception or Response depending on raise_exc (first bullet above).\n\nSo for cyborg, you have to decide which approach you want to take. Given what I know about how cyborg works, I think you probably want to use strict_proxies\u003dTrue and make your client __init__s sleep and retry until the target service becomes active [1]. Otherwise, when a cloud is being brought up, if cyborg comes up first (before placement and/or nova), it will barf trying to perform API requests against those services.\n\n[1] Certain exceptions like bogus service catalog should cause you to fail right away, because they won\u0027t clear up by themselves. But that\u0027s a refinement you can iterate on later.","commit_id":"74876cd4127bfecc6fa66791f6e41768d558f5a2"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"32ff335c7119fc1111a07b45255893b88e576c74","unresolved":false,"context_lines":[{"line_number":164,"context_line":"    try:"},{"line_number":165,"context_line":"        conn \u003d connection.Connection("},{"line_number":166,"context_line":"            session\u003dsess, oslo_conf\u003dCONF, service_types\u003d{service_type},"},{"line_number":167,"context_line":"            strict_proxies\u003dcheck_service)"},{"line_number":168,"context_line":"    except sdk_exc.ServiceDiscoveryException as e:"},{"line_number":169,"context_line":"        raise exception.ServiceUnavailable("},{"line_number":170,"context_line":"            _(\"The %(service_type)s service is unavailable: %(error)s\") %"}],"source_content_type":"text/x-python","patch_set":6,"id":"3fa7e38b_feed5a25","line":167,"range":{"start_line":167,"start_character":12,"end_line":167,"end_character":40},"in_reply_to":"3fa7e38b_6870d473","updated":"2019-09-18 15:09:45.000000000","message":"\u003e - If the service responds with HTTP status \u003e\u003d400. You can switch\n \u003e these off by passing raise_exc\u003dFalse to the Adapter creation and/or\n \u003e individual requests, in which case you get back a Response object\n \u003e just like for successful calls, and you can manually check the\n \u003e Response.status_code. This is how we\u0027ve got Nova set up.\n\nI think I was wrong about the default -- when going through the SDK, raise_exc\u003dFalse is set by default [1].\n\n...um, and it looks like it doesn\u0027t honor an override [2]. That\u0027s a bug.\n\nSo if you wanted the raise-on-status\u003e\u003d400 behavior, you could use openstack.exceptions.raise_from_response() (note that you\u0027ll get subclasses of SDKException in that case); but I would still recommend just checking the status codes manually and reacting accordingly.\n\n[1] https://opendev.org/openstack/openstacksdk/src/branch/master/openstack/proxy.py#L87\n[2] https://opendev.org/openstack/openstacksdk/src/branch/master/openstack/proxy.py#L96","commit_id":"74876cd4127bfecc6fa66791f6e41768d558f5a2"},{"author":{"_account_id":28748,"name":"chenker","email":"chen.ke14@zte.com.cn","username":"chenke"},"change_message_id":"44e2b970ef8d64d8dd61ecafbf6749e7569f9e1f","unresolved":false,"context_lines":[{"line_number":164,"context_line":"    try:"},{"line_number":165,"context_line":"        conn \u003d connection.Connection("},{"line_number":166,"context_line":"            session\u003dsess, oslo_conf\u003dCONF, service_types\u003d{service_type},"},{"line_number":167,"context_line":"            strict_proxies\u003dcheck_service)"},{"line_number":168,"context_line":"    except sdk_exc.ServiceDiscoveryException as e:"},{"line_number":169,"context_line":"        raise exception.ServiceUnavailable("},{"line_number":170,"context_line":"            _(\"The %(service_type)s service is unavailable: %(error)s\") %"}],"source_content_type":"text/x-python","patch_set":6,"id":"3fa7e38b_66fa3143","line":167,"range":{"start_line":167,"start_character":12,"end_line":167,"end_character":40},"in_reply_to":"3fa7e38b_feed5a25","updated":"2019-09-19 12:19:31.000000000","message":"Done","commit_id":"74876cd4127bfecc6fa66791f6e41768d558f5a2"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"8aed41f23e75d1827b827c52ac9ac8d8d82c9db6","unresolved":false,"context_lines":[{"line_number":17,"context_line":""},{"line_number":18,"context_line":"import six"},{"line_number":19,"context_line":""},{"line_number":20,"context_line":"from keystoneauth1 import exceptions as ks_exc"},{"line_number":21,"context_line":"from keystoneauth1 import loading as ks_loading"},{"line_number":22,"context_line":"from openstack import connection"},{"line_number":23,"context_line":"from openstack import exceptions as sdk_exc"}],"source_content_type":"text/x-python","patch_set":9,"id":"3fa7e38b_8cd8767f","line":20,"range":{"start_line":20,"start_character":5,"end_line":20,"end_character":18},"updated":"2019-09-23 14:20:48.000000000","message":"This is latent, but you need keystoneauth1 in your requirements.txt and lower-constraints.txt.\n\nI\u0027m kind of surprised you\u0027re not getting failures from this. Must be a transitive dependency...","commit_id":"6f48e4643fe5cadb6fa488800ad661c0bfa01aee"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"8aed41f23e75d1827b827c52ac9ac8d8d82c9db6","unresolved":false,"context_lines":[{"line_number":19,"context_line":""},{"line_number":20,"context_line":"from keystoneauth1 import exceptions as ks_exc"},{"line_number":21,"context_line":"from keystoneauth1 import loading as ks_loading"},{"line_number":22,"context_line":"from openstack import connection"},{"line_number":23,"context_line":"from openstack import exceptions as sdk_exc"},{"line_number":24,"context_line":"from os_service_types import service_types"},{"line_number":25,"context_line":"from oslo_concurrency import lockutils"},{"line_number":26,"context_line":"from oslo_log import log"}],"source_content_type":"text/x-python","patch_set":9,"id":"3fa7e38b_4c8d9e79","line":23,"range":{"start_line":22,"start_character":0,"end_line":23,"end_character":43},"updated":"2019-09-23 14:20:48.000000000","message":"You need to add openstacksdk to your requirements.txt and lower-constraints.txt.","commit_id":"6f48e4643fe5cadb6fa488800ad661c0bfa01aee"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"8aed41f23e75d1827b827c52ac9ac8d8d82c9db6","unresolved":false,"context_lines":[{"line_number":21,"context_line":"from keystoneauth1 import loading as ks_loading"},{"line_number":22,"context_line":"from openstack import connection"},{"line_number":23,"context_line":"from openstack import exceptions as sdk_exc"},{"line_number":24,"context_line":"from os_service_types import service_types"},{"line_number":25,"context_line":"from oslo_concurrency import lockutils"},{"line_number":26,"context_line":"from oslo_log import log"},{"line_number":27,"context_line":""}],"source_content_type":"text/x-python","patch_set":9,"id":"3fa7e38b_8c9396a3","line":24,"range":{"start_line":24,"start_character":5,"end_line":24,"end_character":21},"updated":"2019-09-23 14:20:48.000000000","message":"This is latent, but you should add os-service-types to your requirements.txt and lower-constraints.txt.","commit_id":"6f48e4643fe5cadb6fa488800ad661c0bfa01aee"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"8aed41f23e75d1827b827c52ac9ac8d8d82c9db6","unresolved":false,"context_lines":[{"line_number":116,"context_line":"def _get_conf_group(service_type):"},{"line_number":117,"context_line":"    # Get the conf group corresponding to the service type."},{"line_number":118,"context_line":"    confgrp \u003d _SERVICE_TYPES.get_project_name(service_type)"},{"line_number":119,"context_line":"    if not confgrp or not hasattr(CONF, confgrp):"},{"line_number":120,"context_line":"        confgrp \u003d service_type"},{"line_number":121,"context_line":"        if not confgrp or not hasattr(CONF, confgrp):"},{"line_number":122,"context_line":"            raise exception.ConfGroupForServiceTypeNotFound(stype\u003dservice_type)"},{"line_number":123,"context_line":"    return confgrp"}],"source_content_type":"text/x-python","patch_set":9,"id":"3fa7e38b_4c311eec","line":120,"range":{"start_line":119,"start_character":0,"end_line":120,"end_character":30},"updated":"2019-09-23 14:20:48.000000000","message":"You still don\u0027t need this part.","commit_id":"6f48e4643fe5cadb6fa488800ad661c0bfa01aee"},{"author":{"_account_id":28748,"name":"chenker","email":"chen.ke14@zte.com.cn","username":"chenke"},"change_message_id":"c73e52250c0cbe40a57475f2773a80456cef577e","unresolved":false,"context_lines":[{"line_number":116,"context_line":"def _get_conf_group(service_type):"},{"line_number":117,"context_line":"    # Get the conf group corresponding to the service type."},{"line_number":118,"context_line":"    confgrp \u003d _SERVICE_TYPES.get_project_name(service_type)"},{"line_number":119,"context_line":"    if not confgrp or not hasattr(CONF, confgrp):"},{"line_number":120,"context_line":"        confgrp \u003d service_type"},{"line_number":121,"context_line":"        if not confgrp or not hasattr(CONF, confgrp):"},{"line_number":122,"context_line":"            raise exception.ConfGroupForServiceTypeNotFound(stype\u003dservice_type)"},{"line_number":123,"context_line":"    return confgrp"}],"source_content_type":"text/x-python","patch_set":9,"id":"3fa7e38b_9d3e5789","line":120,"range":{"start_line":119,"start_character":0,"end_line":120,"end_character":30},"in_reply_to":"3fa7e38b_4c311eec","updated":"2019-09-24 01:57:01.000000000","message":"Done","commit_id":"6f48e4643fe5cadb6fa488800ad661c0bfa01aee"},{"author":{"_account_id":28748,"name":"chenker","email":"chen.ke14@zte.com.cn","username":"chenke"},"change_message_id":"32e02986fc8aa54d9f8ae3e40484cf09ebbf18fa","unresolved":false,"context_lines":[{"line_number":116,"context_line":"def _get_conf_group(service_type):"},{"line_number":117,"context_line":"    # Get the conf group corresponding to the service type."},{"line_number":118,"context_line":"    confgrp \u003d _SERVICE_TYPES.get_project_name(service_type)"},{"line_number":119,"context_line":"    if not confgrp or not hasattr(CONF, confgrp):"},{"line_number":120,"context_line":"        confgrp \u003d service_type"},{"line_number":121,"context_line":"        if not confgrp or not hasattr(CONF, confgrp):"},{"line_number":122,"context_line":"            raise exception.ConfGroupForServiceTypeNotFound(stype\u003dservice_type)"},{"line_number":123,"context_line":"    return confgrp"}],"source_content_type":"text/x-python","patch_set":9,"id":"3fa7e38b_7d96fb95","line":120,"range":{"start_line":119,"start_character":0,"end_line":120,"end_character":30},"in_reply_to":"3fa7e38b_4c311eec","updated":"2019-09-24 01:48:42.000000000","message":"Yep. Thanks. will delete it.","commit_id":"6f48e4643fe5cadb6fa488800ad661c0bfa01aee"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"8aed41f23e75d1827b827c52ac9ac8d8d82c9db6","unresolved":false,"context_lines":[{"line_number":129,"context_line":"        CONF, confgrp, auth\u003dksa_auth)"},{"line_number":130,"context_line":""},{"line_number":131,"context_line":""},{"line_number":132,"context_line":"def get_sdk_adapter(service_type, check_service\u003dTrue):"},{"line_number":133,"context_line":"    \"\"\"Construct an openstacksdk-brokered Adapter for a given service type."},{"line_number":134,"context_line":"    We expect to find a conf group whose name corresponds to the service_type\u0027s"},{"line_number":135,"context_line":"    project according to the service-types-authority.  That conf group must"}],"source_content_type":"text/x-python","patch_set":9,"id":"3fa7e38b_2c4b8259","line":132,"range":{"start_line":132,"start_character":32,"end_line":132,"end_character":52},"updated":"2019-09-23 14:20:48.000000000","message":"Since no caller is changing this, you could get rid of the kwarg...","commit_id":"6f48e4643fe5cadb6fa488800ad661c0bfa01aee"},{"author":{"_account_id":28748,"name":"chenker","email":"chen.ke14@zte.com.cn","username":"chenke"},"change_message_id":"32e02986fc8aa54d9f8ae3e40484cf09ebbf18fa","unresolved":false,"context_lines":[{"line_number":129,"context_line":"        CONF, confgrp, auth\u003dksa_auth)"},{"line_number":130,"context_line":""},{"line_number":131,"context_line":""},{"line_number":132,"context_line":"def get_sdk_adapter(service_type, check_service\u003dTrue):"},{"line_number":133,"context_line":"    \"\"\"Construct an openstacksdk-brokered Adapter for a given service type."},{"line_number":134,"context_line":"    We expect to find a conf group whose name corresponds to the service_type\u0027s"},{"line_number":135,"context_line":"    project according to the service-types-authority.  That conf group must"}],"source_content_type":"text/x-python","patch_set":9,"id":"3fa7e38b_3db3a34f","line":132,"range":{"start_line":132,"start_character":32,"end_line":132,"end_character":52},"in_reply_to":"3fa7e38b_2c4b8259","updated":"2019-09-24 01:48:42.000000000","message":"Yes, it can be deleted here, but in order to keep the same with the nova, I think it is ok to add this default param, so that when the developers want to use it again, they can use the comment of this parameter to understand the usage.","commit_id":"6f48e4643fe5cadb6fa488800ad661c0bfa01aee"},{"author":{"_account_id":28748,"name":"chenker","email":"chen.ke14@zte.com.cn","username":"chenke"},"change_message_id":"c73e52250c0cbe40a57475f2773a80456cef577e","unresolved":false,"context_lines":[{"line_number":129,"context_line":"        CONF, confgrp, auth\u003dksa_auth)"},{"line_number":130,"context_line":""},{"line_number":131,"context_line":""},{"line_number":132,"context_line":"def get_sdk_adapter(service_type, check_service\u003dTrue):"},{"line_number":133,"context_line":"    \"\"\"Construct an openstacksdk-brokered Adapter for a given service type."},{"line_number":134,"context_line":"    We expect to find a conf group whose name corresponds to the service_type\u0027s"},{"line_number":135,"context_line":"    project according to the service-types-authority.  That conf group must"}],"source_content_type":"text/x-python","patch_set":9,"id":"3fa7e38b_1d5267df","line":132,"range":{"start_line":132,"start_character":32,"end_line":132,"end_character":52},"in_reply_to":"3fa7e38b_3db3a34f","updated":"2019-09-24 01:57:01.000000000","message":"Done","commit_id":"6f48e4643fe5cadb6fa488800ad661c0bfa01aee"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"8aed41f23e75d1827b827c52ac9ac8d8d82c9db6","unresolved":false,"context_lines":[{"line_number":148,"context_line":"    try:"},{"line_number":149,"context_line":"        conn \u003d connection.Connection("},{"line_number":150,"context_line":"            session\u003dsess, oslo_conf\u003dCONF, service_types\u003d{service_type},"},{"line_number":151,"context_line":"            strict_proxies\u003dcheck_service)"},{"line_number":152,"context_line":"    except sdk_exc.ServiceDiscoveryException as e:"},{"line_number":153,"context_line":"        raise exception.ServiceUnavailable("},{"line_number":154,"context_line":"            _(\"The %(service_type)s service is unavailable: %(error)s\") %"}],"source_content_type":"text/x-python","patch_set":9,"id":"3fa7e38b_ec76caa4","line":151,"range":{"start_line":151,"start_character":27,"end_line":151,"end_character":40},"updated":"2019-09-23 14:20:48.000000000","message":"...and just pass True explicitly here.","commit_id":"6f48e4643fe5cadb6fa488800ad661c0bfa01aee"},{"author":{"_account_id":28748,"name":"chenker","email":"chen.ke14@zte.com.cn","username":"chenke"},"change_message_id":"c73e52250c0cbe40a57475f2773a80456cef577e","unresolved":false,"context_lines":[{"line_number":148,"context_line":"    try:"},{"line_number":149,"context_line":"        conn \u003d connection.Connection("},{"line_number":150,"context_line":"            session\u003dsess, oslo_conf\u003dCONF, service_types\u003d{service_type},"},{"line_number":151,"context_line":"            strict_proxies\u003dcheck_service)"},{"line_number":152,"context_line":"    except sdk_exc.ServiceDiscoveryException as e:"},{"line_number":153,"context_line":"        raise exception.ServiceUnavailable("},{"line_number":154,"context_line":"            _(\"The %(service_type)s service is unavailable: %(error)s\") %"}],"source_content_type":"text/x-python","patch_set":9,"id":"3fa7e38b_7d491b2f","line":151,"range":{"start_line":151,"start_character":27,"end_line":151,"end_character":40},"in_reply_to":"3fa7e38b_ec76caa4","updated":"2019-09-24 01:57:01.000000000","message":"Done","commit_id":"6f48e4643fe5cadb6fa488800ad661c0bfa01aee"}],"cyborg/conf/nova.py":[{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"dd357476390523c1684b36d7ab7ecce2722165c8","unresolved":false,"context_lines":[{"line_number":36,"context_line":"            ks_loading.get_session_conf_options() +"},{"line_number":37,"context_line":"            ks_loading.get_auth_common_conf_options() +"},{"line_number":38,"context_line":"            ks_loading.get_auth_plugin_conf_options(\u0027password\u0027) +"},{"line_number":39,"context_line":"            ks_loading.get_auth_plugin_conf_options(\u0027v2password\u0027) +"},{"line_number":40,"context_line":"            ks_loading.get_auth_plugin_conf_options(\u0027v3password\u0027) +"},{"line_number":41,"context_line":"            confutils.get_ksa_adapter_opts(DEFAULT_SERVICE_TYPE))"},{"line_number":42,"context_line":"    }"}],"source_content_type":"text/x-python","patch_set":6,"id":"3fa7e38b_8898b06a","line":40,"range":{"start_line":39,"start_character":0,"end_line":40,"end_character":67},"updated":"2019-09-18 14:26:05.000000000","message":"I think these are unnecessary -- I\u0027m confirming...","commit_id":"74876cd4127bfecc6fa66791f6e41768d558f5a2"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"32ff335c7119fc1111a07b45255893b88e576c74","unresolved":false,"context_lines":[{"line_number":36,"context_line":"            ks_loading.get_session_conf_options() +"},{"line_number":37,"context_line":"            ks_loading.get_auth_common_conf_options() +"},{"line_number":38,"context_line":"            ks_loading.get_auth_plugin_conf_options(\u0027password\u0027) +"},{"line_number":39,"context_line":"            ks_loading.get_auth_plugin_conf_options(\u0027v2password\u0027) +"},{"line_number":40,"context_line":"            ks_loading.get_auth_plugin_conf_options(\u0027v3password\u0027) +"},{"line_number":41,"context_line":"            confutils.get_ksa_adapter_opts(DEFAULT_SERVICE_TYPE))"},{"line_number":42,"context_line":"    }"}],"source_content_type":"text/x-python","patch_set":6,"id":"3fa7e38b_fed6ba4f","line":40,"range":{"start_line":39,"start_character":0,"end_line":40,"end_character":67},"in_reply_to":"3fa7e38b_8898b06a","updated":"2019-09-18 15:09:45.000000000","message":"I wasn\u0027t able to get a definitive answer on this, so just leave it for now.","commit_id":"74876cd4127bfecc6fa66791f6e41768d558f5a2"}],"cyborg/conf/placement.py":[{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"dd357476390523c1684b36d7ab7ecce2722165c8","unresolved":false,"context_lines":[{"line_number":48,"context_line":"            ks_loading.get_session_conf_options() +"},{"line_number":49,"context_line":"            ks_loading.get_auth_common_conf_options() +"},{"line_number":50,"context_line":"            ks_loading.get_auth_plugin_conf_options(\u0027password\u0027) +"},{"line_number":51,"context_line":"            ks_loading.get_auth_plugin_conf_options(\u0027v2password\u0027) +"},{"line_number":52,"context_line":"            ks_loading.get_auth_plugin_conf_options(\u0027v3password\u0027) +"},{"line_number":53,"context_line":"            confutils.get_ksa_adapter_opts(DEFAULT_SERVICE_TYPE))"},{"line_number":54,"context_line":"    }"}],"source_content_type":"text/x-python","patch_set":6,"id":"3fa7e38b_48a2b89c","line":52,"range":{"start_line":51,"start_character":0,"end_line":52,"end_character":67},"updated":"2019-09-18 14:26:05.000000000","message":"ditto","commit_id":"74876cd4127bfecc6fa66791f6e41768d558f5a2"},{"author":{"_account_id":14107,"name":"zhurong","email":"aaronzhu1121@gmail.com","username":"zhurong"},"change_message_id":"638869ccca73834d6cac854ca97fdf76c7b1abc2","unresolved":false,"context_lines":[{"line_number":26,"context_line":"    help\u003d\"Configuration options for connecting to the placement API service\")"},{"line_number":27,"context_line":""},{"line_number":28,"context_line":"placement_opts \u003d ["},{"line_number":29,"context_line":"    cfg.StrOpt(\u0027endpoint_type\u0027,"},{"line_number":30,"context_line":"               default\u003d\u0027public\u0027,"},{"line_number":31,"context_line":"               choices\u003d[\u0027public\u0027, \u0027admin\u0027, \u0027internal\u0027],"},{"line_number":32,"context_line":"               help\u003d_(\u0027Type of the placement endpoint to use.  This endpoint \u0027"},{"line_number":33,"context_line":"                      \u0027will be looked up in the keystone catalog and should \u0027"},{"line_number":34,"context_line":"                      \u0027be one of public, internal or admin.\u0027))"},{"line_number":35,"context_line":"]"},{"line_number":36,"context_line":""},{"line_number":37,"context_line":""}],"source_content_type":"text/x-python","patch_set":8,"id":"3fa7e38b_387e8619","line":34,"range":{"start_line":29,"start_character":0,"end_line":34,"end_character":62},"updated":"2019-09-20 06:23:42.000000000","message":"This is not needed. already include in keystoneauth1\u0027s config. you can config this use valid_interfaces","commit_id":"8dc13647e2ad43b1ed735c9b5bfeed5333f20ea3"},{"author":{"_account_id":28748,"name":"chenker","email":"chen.ke14@zte.com.cn","username":"chenke"},"change_message_id":"c3a64bcfff15d7ad8f21827af64141454519b851","unresolved":false,"context_lines":[{"line_number":26,"context_line":"    help\u003d\"Configuration options for connecting to the placement API service\")"},{"line_number":27,"context_line":""},{"line_number":28,"context_line":"placement_opts \u003d ["},{"line_number":29,"context_line":"    cfg.StrOpt(\u0027endpoint_type\u0027,"},{"line_number":30,"context_line":"               default\u003d\u0027public\u0027,"},{"line_number":31,"context_line":"               choices\u003d[\u0027public\u0027, \u0027admin\u0027, \u0027internal\u0027],"},{"line_number":32,"context_line":"               help\u003d_(\u0027Type of the placement endpoint to use.  This endpoint \u0027"},{"line_number":33,"context_line":"                      \u0027will be looked up in the keystone catalog and should \u0027"},{"line_number":34,"context_line":"                      \u0027be one of public, internal or admin.\u0027))"},{"line_number":35,"context_line":"]"},{"line_number":36,"context_line":""},{"line_number":37,"context_line":""}],"source_content_type":"text/x-python","patch_set":8,"id":"3fa7e38b_e494c846","line":34,"range":{"start_line":29,"start_character":0,"end_line":34,"end_character":62},"in_reply_to":"3fa7e38b_387e8619","updated":"2019-09-20 09:44:13.000000000","message":"I test this in my env. You are right. Thanks Again.","commit_id":"8dc13647e2ad43b1ed735c9b5bfeed5333f20ea3"},{"author":{"_account_id":28748,"name":"chenker","email":"chen.ke14@zte.com.cn","username":"chenke"},"change_message_id":"2e420b7396f0801e402499a67c0ed21aebd6554a","unresolved":false,"context_lines":[{"line_number":26,"context_line":"    help\u003d\"Configuration options for connecting to the placement API service\")"},{"line_number":27,"context_line":""},{"line_number":28,"context_line":"placement_opts \u003d ["},{"line_number":29,"context_line":"    cfg.StrOpt(\u0027endpoint_type\u0027,"},{"line_number":30,"context_line":"               default\u003d\u0027public\u0027,"},{"line_number":31,"context_line":"               choices\u003d[\u0027public\u0027, \u0027admin\u0027, \u0027internal\u0027],"},{"line_number":32,"context_line":"               help\u003d_(\u0027Type of the placement endpoint to use.  This endpoint \u0027"},{"line_number":33,"context_line":"                      \u0027will be looked up in the keystone catalog and should \u0027"},{"line_number":34,"context_line":"                      \u0027be one of public, internal or admin.\u0027))"},{"line_number":35,"context_line":"]"},{"line_number":36,"context_line":""},{"line_number":37,"context_line":""}],"source_content_type":"text/x-python","patch_set":8,"id":"3fa7e38b_049324a5","line":34,"range":{"start_line":29,"start_character":0,"end_line":34,"end_character":62},"in_reply_to":"3fa7e38b_387e8619","updated":"2019-09-20 09:34:35.000000000","message":"Thanks zhurong.\nDone.","commit_id":"8dc13647e2ad43b1ed735c9b5bfeed5333f20ea3"}],"devstack/lib/cyborg":[{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"3e59313db4139e3e01df0fad9963990871aba545","unresolved":false,"context_lines":[{"line_number":199,"context_line":"    # Use the provided config file path or default to $CYBORG_CONF."},{"line_number":200,"context_line":"    local section\u003d${1:-placement}"},{"line_number":201,"context_line":"    local auth_section\u003d${2:-keystone_authtoken}"},{"line_number":202,"context_line":"    iniset $CYBORG_CONF_FILE $section auth_section $auth_section"},{"line_number":203,"context_line":"    iniset $CYBORG_CONF_FILE $section auth_type \"password\""},{"line_number":204,"context_line":"    iniset $CYBORG_CONF_FILE $section auth_url \"$KEYSTONE_SERVICE_URI\""},{"line_number":205,"context_line":"    iniset $CYBORG_CONF_FILE $section username $section"}],"source_content_type":"application/x-shellscript","patch_set":10,"id":"3fa7e38b_75dfe0d5","line":202,"range":{"start_line":202,"start_character":4,"end_line":202,"end_character":64},"updated":"2019-09-24 19:00:09.000000000","message":"So yeah, this...","commit_id":"ee80ff410278a4de8084700f0afe7566695d3171"},{"author":{"_account_id":28748,"name":"chenker","email":"chen.ke14@zte.com.cn","username":"chenke"},"change_message_id":"cb7b51a382aa7269b7fda9448efdad146288080e","unresolved":false,"context_lines":[{"line_number":199,"context_line":"    # Use the provided config file path or default to $CYBORG_CONF."},{"line_number":200,"context_line":"    local section\u003d${1:-placement}"},{"line_number":201,"context_line":"    local auth_section\u003d${2:-keystone_authtoken}"},{"line_number":202,"context_line":"    iniset $CYBORG_CONF_FILE $section auth_section $auth_section"},{"line_number":203,"context_line":"    iniset $CYBORG_CONF_FILE $section auth_type \"password\""},{"line_number":204,"context_line":"    iniset $CYBORG_CONF_FILE $section auth_url \"$KEYSTONE_SERVICE_URI\""},{"line_number":205,"context_line":"    iniset $CYBORG_CONF_FILE $section username $section"}],"source_content_type":"application/x-shellscript","patch_set":10,"id":"3fa7e38b_396b85b7","line":202,"range":{"start_line":202,"start_character":4,"end_line":202,"end_character":64},"in_reply_to":"3fa7e38b_75dfe0d5","updated":"2019-09-26 03:30:44.000000000","message":"Done","commit_id":"ee80ff410278a4de8084700f0afe7566695d3171"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"3e59313db4139e3e01df0fad9963990871aba545","unresolved":false,"context_lines":[{"line_number":218,"context_line":"function configure_cyborg_glance {"},{"line_number":219,"context_line":"    local section\u003d${1:-glance}"},{"line_number":220,"context_line":"    local auth_section\u003d${2:-keystone_authtoken}"},{"line_number":221,"context_line":"    iniset $CYBORG_CONF_FILE $section auth_section $auth_section"},{"line_number":222,"context_line":"    iniset $CYBORG_CONF_FILE $section auth_type \"password\""},{"line_number":223,"context_line":"    iniset $CYBORG_CONF_FILE $section auth_url \"$KEYSTONE_SERVICE_URI\""},{"line_number":224,"context_line":"    iniset $CYBORG_CONF_FILE $section username $section"}],"source_content_type":"application/x-shellscript","patch_set":10,"id":"3fa7e38b_15f22c71","line":221,"range":{"start_line":221,"start_character":4,"end_line":221,"end_character":64},"updated":"2019-09-24 19:00:09.000000000","message":"...and this...","commit_id":"ee80ff410278a4de8084700f0afe7566695d3171"},{"author":{"_account_id":28748,"name":"chenker","email":"chen.ke14@zte.com.cn","username":"chenke"},"change_message_id":"cb7b51a382aa7269b7fda9448efdad146288080e","unresolved":false,"context_lines":[{"line_number":218,"context_line":"function configure_cyborg_glance {"},{"line_number":219,"context_line":"    local section\u003d${1:-glance}"},{"line_number":220,"context_line":"    local auth_section\u003d${2:-keystone_authtoken}"},{"line_number":221,"context_line":"    iniset $CYBORG_CONF_FILE $section auth_section $auth_section"},{"line_number":222,"context_line":"    iniset $CYBORG_CONF_FILE $section auth_type \"password\""},{"line_number":223,"context_line":"    iniset $CYBORG_CONF_FILE $section auth_url \"$KEYSTONE_SERVICE_URI\""},{"line_number":224,"context_line":"    iniset $CYBORG_CONF_FILE $section username $section"}],"source_content_type":"application/x-shellscript","patch_set":10,"id":"3fa7e38b_5968c1b7","line":221,"range":{"start_line":221,"start_character":4,"end_line":221,"end_character":64},"in_reply_to":"3fa7e38b_15f22c71","updated":"2019-09-26 03:30:44.000000000","message":"Done","commit_id":"ee80ff410278a4de8084700f0afe7566695d3171"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"3e59313db4139e3e01df0fad9963990871aba545","unresolved":false,"context_lines":[{"line_number":232,"context_line":"function configure_cyborg_nova {"},{"line_number":233,"context_line":"    local section\u003d${1:-nova}"},{"line_number":234,"context_line":"    local auth_section\u003d${2:-keystone_authtoken}"},{"line_number":235,"context_line":"    iniset $CYBORG_CONF_FILE $section auth_section $auth_section"},{"line_number":236,"context_line":"    iniset $CYBORG_CONF_FILE $section auth_type \"password\""},{"line_number":237,"context_line":"    iniset $CYBORG_CONF_FILE $section auth_url \"$KEYSTONE_SERVICE_URI\""},{"line_number":238,"context_line":"    iniset $CYBORG_CONF_FILE $section username $section"}],"source_content_type":"application/x-shellscript","patch_set":10,"id":"3fa7e38b_f5a19047","line":235,"range":{"start_line":235,"start_character":4,"end_line":235,"end_character":64},"updated":"2019-09-24 19:00:09.000000000","message":"...and this\n\nare just plain wrong. They\u0027re causing ksa to ignore all the other auth opts in this group (i.e. all of them) and instead use what\u0027s set up in your [keystone_authtoken] group - i.e. your cyborg creds. I assume your cyborg user is set up as an admin [1] which is how you\u0027re getting away with it for placement (assuming you are).\n\nSee [2] for some chatter with keystone about this.\n\n[1] openstack role assignment list --names --user cyborg\nand look for a row where the Role (first column) is `admin`\n[2] http://eavesdrop.openstack.org/irclogs/%23openstack-keystone/%23openstack-keystone.2019-09-24.log.html#t2019-09-24T17:23:44","commit_id":"ee80ff410278a4de8084700f0afe7566695d3171"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"980e1e4b2a26bb5415f4d28d79a5a2d312e831af","unresolved":false,"context_lines":[{"line_number":232,"context_line":"function configure_cyborg_nova {"},{"line_number":233,"context_line":"    local section\u003d${1:-nova}"},{"line_number":234,"context_line":"    local auth_section\u003d${2:-keystone_authtoken}"},{"line_number":235,"context_line":"    iniset $CYBORG_CONF_FILE $section auth_section $auth_section"},{"line_number":236,"context_line":"    iniset $CYBORG_CONF_FILE $section auth_type \"password\""},{"line_number":237,"context_line":"    iniset $CYBORG_CONF_FILE $section auth_url \"$KEYSTONE_SERVICE_URI\""},{"line_number":238,"context_line":"    iniset $CYBORG_CONF_FILE $section username $section"}],"source_content_type":"application/x-shellscript","patch_set":10,"id":"3fa7e38b_d92ef190","line":235,"range":{"start_line":235,"start_character":4,"end_line":235,"end_character":64},"in_reply_to":"3fa7e38b_1ef8ef46","updated":"2019-09-26 03:21:29.000000000","message":"You should remove all three of the lines I marked. Technically the other two are latent and could be done in a separate patch, but this one is big and messy enough that it might as well happen here.","commit_id":"ee80ff410278a4de8084700f0afe7566695d3171"},{"author":{"_account_id":28748,"name":"chenker","email":"chen.ke14@zte.com.cn","username":"chenke"},"change_message_id":"cb7b51a382aa7269b7fda9448efdad146288080e","unresolved":false,"context_lines":[{"line_number":232,"context_line":"function configure_cyborg_nova {"},{"line_number":233,"context_line":"    local section\u003d${1:-nova}"},{"line_number":234,"context_line":"    local auth_section\u003d${2:-keystone_authtoken}"},{"line_number":235,"context_line":"    iniset $CYBORG_CONF_FILE $section auth_section $auth_section"},{"line_number":236,"context_line":"    iniset $CYBORG_CONF_FILE $section auth_type \"password\""},{"line_number":237,"context_line":"    iniset $CYBORG_CONF_FILE $section auth_url \"$KEYSTONE_SERVICE_URI\""},{"line_number":238,"context_line":"    iniset $CYBORG_CONF_FILE $section username $section"}],"source_content_type":"application/x-shellscript","patch_set":10,"id":"3fa7e38b_f9608dd1","line":235,"range":{"start_line":235,"start_character":4,"end_line":235,"end_character":64},"in_reply_to":"3fa7e38b_f5a19047","updated":"2019-09-26 03:30:44.000000000","message":"Done","commit_id":"ee80ff410278a4de8084700f0afe7566695d3171"},{"author":{"_account_id":28748,"name":"chenker","email":"chen.ke14@zte.com.cn","username":"chenke"},"change_message_id":"b5d9e1ad4f887acc7b28d9ef5f3056266e4525ed","unresolved":false,"context_lines":[{"line_number":232,"context_line":"function configure_cyborg_nova {"},{"line_number":233,"context_line":"    local section\u003d${1:-nova}"},{"line_number":234,"context_line":"    local auth_section\u003d${2:-keystone_authtoken}"},{"line_number":235,"context_line":"    iniset $CYBORG_CONF_FILE $section auth_section $auth_section"},{"line_number":236,"context_line":"    iniset $CYBORG_CONF_FILE $section auth_type \"password\""},{"line_number":237,"context_line":"    iniset $CYBORG_CONF_FILE $section auth_url \"$KEYSTONE_SERVICE_URI\""},{"line_number":238,"context_line":"    iniset $CYBORG_CONF_FILE $section username $section"}],"source_content_type":"application/x-shellscript","patch_set":10,"id":"3fa7e38b_1ef8ef46","line":235,"range":{"start_line":235,"start_character":4,"end_line":235,"end_character":64},"in_reply_to":"3fa7e38b_f5a19047","updated":"2019-09-26 02:59:10.000000000","message":"So We just need remove this line, right? Thanks.","commit_id":"ee80ff410278a4de8084700f0afe7566695d3171"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"37ca705befc1821d372e2fbf9f6af411c53f33f8","unresolved":false,"context_lines":[{"line_number":198,"context_line":"function configure_cyborg_placement {"},{"line_number":199,"context_line":"    # Use the provided config file path or default to $CYBORG_CONF."},{"line_number":200,"context_line":"    local section\u003d${1:-placement}"},{"line_number":201,"context_line":"    local auth_section\u003d${2:-keystone_authtoken}"},{"line_number":202,"context_line":"    iniset $CYBORG_CONF_FILE $section auth_type \"password\""},{"line_number":203,"context_line":"    iniset $CYBORG_CONF_FILE $section auth_url \"$KEYSTONE_SERVICE_URI\""},{"line_number":204,"context_line":"    iniset $CYBORG_CONF_FILE $section username $section"}],"source_content_type":"application/x-shellscript","patch_set":16,"id":"3fa7e38b_bc53d96a","line":201,"range":{"start_line":201,"start_character":4,"end_line":201,"end_character":47},"updated":"2019-09-26 14:40:01.000000000","message":"This is no longer needed","commit_id":"71df0a289d78019dc96168da719c940c9d62e735"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"37ca705befc1821d372e2fbf9f6af411c53f33f8","unresolved":false,"context_lines":[{"line_number":216,"context_line":""},{"line_number":217,"context_line":"function configure_cyborg_glance {"},{"line_number":218,"context_line":"    local section\u003d${1:-glance}"},{"line_number":219,"context_line":"    local auth_section\u003d${2:-keystone_authtoken}"},{"line_number":220,"context_line":"    iniset $CYBORG_CONF_FILE $section auth_type \"password\""},{"line_number":221,"context_line":"    iniset $CYBORG_CONF_FILE $section auth_url \"$KEYSTONE_SERVICE_URI\""},{"line_number":222,"context_line":"    iniset $CYBORG_CONF_FILE $section username $section"}],"source_content_type":"application/x-shellscript","patch_set":16,"id":"3fa7e38b_7c49e1b4","line":219,"range":{"start_line":219,"start_character":4,"end_line":219,"end_character":47},"updated":"2019-09-26 14:40:01.000000000","message":"ditto","commit_id":"71df0a289d78019dc96168da719c940c9d62e735"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"37ca705befc1821d372e2fbf9f6af411c53f33f8","unresolved":false,"context_lines":[{"line_number":229,"context_line":""},{"line_number":230,"context_line":"function configure_cyborg_nova {"},{"line_number":231,"context_line":"    local section\u003d${1:-nova}"},{"line_number":232,"context_line":"    local auth_section\u003d${2:-keystone_authtoken}"},{"line_number":233,"context_line":"    iniset $CYBORG_CONF_FILE $section auth_type \"password\""},{"line_number":234,"context_line":"    iniset $CYBORG_CONF_FILE $section auth_url \"$KEYSTONE_SERVICE_URI\""},{"line_number":235,"context_line":"    iniset $CYBORG_CONF_FILE $section username $section"}],"source_content_type":"application/x-shellscript","patch_set":16,"id":"3fa7e38b_1cca2d1a","line":232,"range":{"start_line":232,"start_character":4,"end_line":232,"end_character":47},"updated":"2019-09-26 14:40:01.000000000","message":"ditto","commit_id":"71df0a289d78019dc96168da719c940c9d62e735"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"37ca705befc1821d372e2fbf9f6af411c53f33f8","unresolved":false,"context_lines":[{"line_number":236,"context_line":"    iniset $CYBORG_CONF_FILE $section password \"$SERVICE_PASSWORD\""},{"line_number":237,"context_line":"    iniset $CYBORG_CONF_FILE $section user_domain_name \"$SERVICE_DOMAIN_NAME\""},{"line_number":238,"context_line":"    iniset $CYBORG_CONF_FILE $section project_name \"$SERVICE_TENANT_NAME\""},{"line_number":239,"context_line":"    iniset $CYBORG_CONF_FILE $section project_domain_name \"$SERVICE_DOMAIN_NAME\""},{"line_number":240,"context_line":"}"},{"line_number":241,"context_line":""},{"line_number":242,"context_line":"# configure_cyborg_conductor() - Is used by configure_cyborg()."}],"source_content_type":"application/x-shellscript","patch_set":16,"id":"3fa7e38b_1c98ed19","line":239,"updated":"2019-09-26 14:40:01.000000000","message":"All three of these methods (configure_cyborg_*) are effectively identical. You could just have one\n\n function configure_cyborg_for_service {\n     # $service is both the conf [section] and the keystone username\n     local service\u003d$1\n     iniset ...\n     ...\n }\n\nand then configure_cyborg_conductor can say\n\n configure_cyborg_for_service placement\n configure_cyborg_for_service glance\n configure_cyborg_for_service nova","commit_id":"71df0a289d78019dc96168da719c940c9d62e735"}]}
