)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":7725,"name":"David Stanek","email":"dstanek@dstanek.com","username":"dstanek"},"change_message_id":"7432edecbbb1372d95815d4b09f4b899d74f92cf","unresolved":false,"context_lines":[{"line_number":5,"context_line":"CommitDate: 2016-08-13 09:12:13 +0300"},{"line_number":6,"context_line":""},{"line_number":7,"context_line":"[wip] Add prepare_ldap command"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"bp ldap-preprocessing"},{"line_number":10,"context_line":"Partial-Bug: 1582585"},{"line_number":11,"context_line":"Change-Id: I98f795854aee26f9e7f668372c47572d2b6d4f0f"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":3,"id":"5ac665da_45730a4e","line":8,"updated":"2016-08-13 16:39:23.000000000","message":"I know you\u0027re not done yet, but you definitely what to put a little bit about why you are doing this or what benefit is has.","commit_id":"c4b7c880f51a3fd1c4350dfe82367a50ab7f3e90"},{"author":{"_account_id":13478,"name":"Boris Bobrov","email":"b.bobrov@sap.com","username":"bbobrov"},"change_message_id":"a54c4d1fded273a91a649036df530e9a34e365d2","unresolved":false,"context_lines":[{"line_number":5,"context_line":"CommitDate: 2016-08-13 09:12:13 +0300"},{"line_number":6,"context_line":""},{"line_number":7,"context_line":"[wip] Add prepare_ldap command"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"bp ldap-preprocessing"},{"line_number":10,"context_line":"Partial-Bug: 1582585"},{"line_number":11,"context_line":"Change-Id: I98f795854aee26f9e7f668372c47572d2b6d4f0f"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":3,"id":"3ac371cc_f60fec2b","line":8,"in_reply_to":"5ac665da_45730a4e","updated":"2016-08-16 13:22:13.000000000","message":"Done","commit_id":"c4b7c880f51a3fd1c4350dfe82367a50ab7f3e90"}],"doc/source/configuration.rst":[{"author":{"_account_id":6482,"name":"Steve Martinelli","email":"s.martinelli@gmail.com","username":"stevemar"},"change_message_id":"82e618c6472b0b15ae101bcdd98622d73b195f4f","unresolved":false,"context_lines":[{"line_number":1321,"context_line":"* ``pki_setup``: Initialize the certificates used to sign tokens."},{"line_number":1322,"context_line":"* ``saml_idp_metadata``: Generate identity provider metadata."},{"line_number":1323,"context_line":"* ``token_flush``: Purge expired tokens"},{"line_number":1324,"context_line":"* ``prepare_ldap``: Prepare domain-specific LDAP backend"},{"line_number":1325,"context_line":""},{"line_number":1326,"context_line":"Invoking ``keystone-manage`` by itself will give you additional usage"},{"line_number":1327,"context_line":"information."}],"source_content_type":"text/x-rst","patch_set":8,"id":"3ac371cc_b4e9d0e8","line":1324,"range":{"start_line":1324,"start_character":4,"end_line":1324,"end_character":16},"updated":"2016-08-16 22:57:19.000000000","message":"put this in alphabetical order too","commit_id":"948e354fef29a97b49eb58d4d33463063ec6a0a3"},{"author":{"_account_id":13478,"name":"Boris Bobrov","email":"b.bobrov@sap.com","username":"bbobrov"},"change_message_id":"9b2e6165de528f2e5ea85f16c6e492ccf2e60273","unresolved":false,"context_lines":[{"line_number":1321,"context_line":"* ``pki_setup``: Initialize the certificates used to sign tokens."},{"line_number":1322,"context_line":"* ``saml_idp_metadata``: Generate identity provider metadata."},{"line_number":1323,"context_line":"* ``token_flush``: Purge expired tokens"},{"line_number":1324,"context_line":"* ``prepare_ldap``: Prepare domain-specific LDAP backend"},{"line_number":1325,"context_line":""},{"line_number":1326,"context_line":"Invoking ``keystone-manage`` by itself will give you additional usage"},{"line_number":1327,"context_line":"information."}],"source_content_type":"text/x-rst","patch_set":8,"id":"3ac371cc_d92eb5f9","line":1324,"range":{"start_line":1324,"start_character":4,"end_line":1324,"end_character":16},"in_reply_to":"3ac371cc_b4e9d0e8","updated":"2016-08-18 22:48:15.000000000","message":"Done","commit_id":"948e354fef29a97b49eb58d4d33463063ec6a0a3"},{"author":{"_account_id":18338,"name":"Ron De Rose","email":"ronald.de.rose@intel.com","username":"derosenet"},"change_message_id":"a82e6dc7be48833eba7c7171d57f857a68829b6f","unresolved":false,"context_lines":[{"line_number":280,"context_line":""},{"line_number":281,"context_line":"    $ keystone-manage mapping_purge --all"},{"line_number":282,"context_line":""},{"line_number":283,"context_line":"Generating public IDs in the first run may take a while, and most probably"},{"line_number":284,"context_line":"first API requests to fetch user list will fail by timeout. To prevent this,"},{"line_number":285,"context_line":"``mapping_populate`` command should be executed. It should be executed right after"},{"line_number":286,"context_line":"LDAP has been configured or after ``mapping_purge``."},{"line_number":287,"context_line":""}],"source_content_type":"text/x-rst","patch_set":14,"id":"1ac06dbe_793a589a","line":284,"range":{"start_line":283,"start_character":0,"end_line":284,"end_character":60},"updated":"2016-08-23 21:11:26.000000000","message":"nit (suggestion): \"Populating the mapping table may perform slowly and could cause timeout errors when fetching the user list.\"","commit_id":"eb3962cebcb2104aa9012945fa34d93b6a2d67c6"},{"author":{"_account_id":18338,"name":"Ron De Rose","email":"ronald.de.rose@intel.com","username":"derosenet"},"change_message_id":"a82e6dc7be48833eba7c7171d57f857a68829b6f","unresolved":false,"context_lines":[{"line_number":1317,"context_line":"* ``fernet_rotate``: Rotate keys in the Fernet key repository."},{"line_number":1318,"context_line":"* ``fernet_setup``: Setup a Fernet key repository."},{"line_number":1319,"context_line":"* ``mapping_engine``: Test your federation mapping rules."},{"line_number":1320,"context_line":"* ``mapping_populate``: Prepare domain-specific LDAP backend"},{"line_number":1321,"context_line":"* ``mapping_purge``: Purge the identity mapping table."},{"line_number":1322,"context_line":"* ``pki_setup``: Initialize the certificates used to sign tokens."},{"line_number":1323,"context_line":"* ``saml_idp_metadata``: Generate identity provider metadata."}],"source_content_type":"text/x-rst","patch_set":14,"id":"1ac06dbe_560acb8a","line":1320,"range":{"start_line":1320,"start_character":24,"end_line":1320,"end_character":60},"updated":"2016-08-23 21:11:26.000000000","message":"I think this would be more descriptive: \"Populate the identity mapping table for domain-specific LDAP backend\"","commit_id":"eb3962cebcb2104aa9012945fa34d93b6a2d67c6"}],"doc/source/man/keystone-manage.rst":[{"author":{"_account_id":6482,"name":"Steve Martinelli","email":"s.martinelli@gmail.com","username":"stevemar"},"change_message_id":"82e618c6472b0b15ae101bcdd98622d73b195f4f","unresolved":false,"context_lines":[{"line_number":52,"context_line":"* ``pki_setup``: Initialize the certificates used to sign tokens. **deprecated**"},{"line_number":53,"context_line":"* ``saml_idp_metadata``: Generate identity provider metadata."},{"line_number":54,"context_line":"* ``token_flush``: Purge expired tokens."},{"line_number":55,"context_line":"* ``prepare_ldap``: Prepare domain-specific LDAP backend."},{"line_number":56,"context_line":""},{"line_number":57,"context_line":"OPTIONS"},{"line_number":58,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d"}],"source_content_type":"text/x-rst","patch_set":8,"id":"3ac371cc_94e65413","line":55,"range":{"start_line":55,"start_character":4,"end_line":55,"end_character":16},"updated":"2016-08-16 22:57:19.000000000","message":"alpha order","commit_id":"948e354fef29a97b49eb58d4d33463063ec6a0a3"},{"author":{"_account_id":13478,"name":"Boris Bobrov","email":"b.bobrov@sap.com","username":"bbobrov"},"change_message_id":"9b2e6165de528f2e5ea85f16c6e492ccf2e60273","unresolved":false,"context_lines":[{"line_number":52,"context_line":"* ``pki_setup``: Initialize the certificates used to sign tokens. **deprecated**"},{"line_number":53,"context_line":"* ``saml_idp_metadata``: Generate identity provider metadata."},{"line_number":54,"context_line":"* ``token_flush``: Purge expired tokens."},{"line_number":55,"context_line":"* ``prepare_ldap``: Prepare domain-specific LDAP backend."},{"line_number":56,"context_line":""},{"line_number":57,"context_line":"OPTIONS"},{"line_number":58,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d"}],"source_content_type":"text/x-rst","patch_set":8,"id":"3ac371cc_f929f1f3","line":55,"range":{"start_line":55,"start_character":4,"end_line":55,"end_character":16},"in_reply_to":"3ac371cc_94e65413","updated":"2016-08-18 22:48:15.000000000","message":"Done","commit_id":"948e354fef29a97b49eb58d4d33463063ec6a0a3"},{"author":{"_account_id":11022,"name":"Rodrigo Duarte Sousa","email":"rodrigodsousa@gmail.com","username":"rodrigods"},"change_message_id":"d79371bfb630559a4ac64324f0df53a8d7620c27","unresolved":false,"context_lines":[{"line_number":47,"context_line":"* ``domain_config_upload``: Upload domain configuration file."},{"line_number":48,"context_line":"* ``fernet_rotate``: Rotate keys in the Fernet key repository."},{"line_number":49,"context_line":"* ``fernet_setup``: Setup a Fernet key repository."},{"line_number":50,"context_line":"* ``mapping_populate``: Prepare domain-specific LDAP backend."},{"line_number":51,"context_line":"* ``mapping_purge``: Purge the identity mapping table."},{"line_number":52,"context_line":"* ``mapping_engine``: Test your federation mapping rules."},{"line_number":53,"context_line":"* ``pki_setup``: Initialize the certificates used to sign tokens. **deprecated**"}],"source_content_type":"text/x-rst","patch_set":12,"id":"1ac06dbe_4cc4ce91","line":50,"updated":"2016-08-19 12:19:29.000000000","message":"maybe:\n\n  Prepare domain-specific LDAP backend by pre populating the identity mapping table.","commit_id":"eb0b226a3ab80b9fc163640c084d8a0f2806dab4"},{"author":{"_account_id":11022,"name":"Rodrigo Duarte Sousa","email":"rodrigodsousa@gmail.com","username":"rodrigods"},"change_message_id":"497bb0f5400fd482cdf71d1ec04f92b1a10f6cc1","unresolved":false,"context_lines":[{"line_number":47,"context_line":"* ``domain_config_upload``: Upload domain configuration file."},{"line_number":48,"context_line":"* ``fernet_rotate``: Rotate keys in the Fernet key repository."},{"line_number":49,"context_line":"* ``fernet_setup``: Setup a Fernet key repository."},{"line_number":50,"context_line":"* ``mapping_populate``: Prepare domain-specific LDAP backend."},{"line_number":51,"context_line":"* ``mapping_purge``: Purge the identity mapping table."},{"line_number":52,"context_line":"* ``mapping_engine``: Test your federation mapping rules."},{"line_number":53,"context_line":"* ``pki_setup``: Initialize the certificates used to sign tokens. **deprecated**"}],"source_content_type":"text/x-rst","patch_set":12,"id":"1ac06dbe_05b0bb42","line":50,"in_reply_to":"1ac06dbe_188847e7","updated":"2016-08-20 12:55:38.000000000","message":"me too, the doc is to explain the command itself: mapping_populate. \n\n\"what means to populate a mapping for the domain-specific backends?\" would be my first doubt.","commit_id":"eb0b226a3ab80b9fc163640c084d8a0f2806dab4"},{"author":{"_account_id":4,"name":"Dolph Mathews","email":"dolph.mathews@gmail.com","username":"dolph"},"change_message_id":"72f5211588d3b5d6cc89fcd5245863081102f218","unresolved":false,"context_lines":[{"line_number":47,"context_line":"* ``domain_config_upload``: Upload domain configuration file."},{"line_number":48,"context_line":"* ``fernet_rotate``: Rotate keys in the Fernet key repository."},{"line_number":49,"context_line":"* ``fernet_setup``: Setup a Fernet key repository."},{"line_number":50,"context_line":"* ``mapping_populate``: Prepare domain-specific LDAP backend."},{"line_number":51,"context_line":"* ``mapping_purge``: Purge the identity mapping table."},{"line_number":52,"context_line":"* ``mapping_engine``: Test your federation mapping rules."},{"line_number":53,"context_line":"* ``pki_setup``: Initialize the certificates used to sign tokens. **deprecated**"}],"source_content_type":"text/x-rst","patch_set":12,"id":"1ac06dbe_188847e7","line":50,"in_reply_to":"1ac06dbe_4cc4ce91","updated":"2016-08-19 14:23:30.000000000","message":"I\u0027d rather not refer to specific implementation details in the docs.","commit_id":"eb0b226a3ab80b9fc163640c084d8a0f2806dab4"},{"author":{"_account_id":18338,"name":"Ron De Rose","email":"ronald.de.rose@intel.com","username":"derosenet"},"change_message_id":"a82e6dc7be48833eba7c7171d57f857a68829b6f","unresolved":false,"context_lines":[{"line_number":47,"context_line":"* ``domain_config_upload``: Upload domain configuration file."},{"line_number":48,"context_line":"* ``fernet_rotate``: Rotate keys in the Fernet key repository."},{"line_number":49,"context_line":"* ``fernet_setup``: Setup a Fernet key repository."},{"line_number":50,"context_line":"* ``mapping_populate``: Prepare domain-specific LDAP backend."},{"line_number":51,"context_line":"* ``mapping_purge``: Purge the identity mapping table."},{"line_number":52,"context_line":"* ``mapping_engine``: Test your federation mapping rules."},{"line_number":53,"context_line":"* ``pki_setup``: Initialize the certificates used to sign tokens. **deprecated**"}],"source_content_type":"text/x-rst","patch_set":14,"id":"1ac06dbe_995ab4f0","line":50,"range":{"start_line":50,"start_character":24,"end_line":50,"end_character":61},"updated":"2016-08-23 21:11:26.000000000","message":"same here: \"Populate the identity mapping table for domain-specific LDAP backend\"","commit_id":"eb3962cebcb2104aa9012945fa34d93b6a2d67c6"}],"keystone/cmd/cli.py":[{"author":{"_account_id":6482,"name":"Steve Martinelli","email":"s.martinelli@gmail.com","username":"stevemar"},"change_message_id":"f4f2ecd748ec621706883e6fcd862302e6017a3f","unresolved":false,"context_lines":[{"line_number":926,"context_line":"                                  \"engine.\"))"},{"line_number":927,"context_line":""},{"line_number":928,"context_line":""},{"line_number":929,"context_line":"class PrepareLdap(BaseApp):"},{"line_number":930,"context_line":"    \"\"\"Preprocess entries from LDAP."},{"line_number":931,"context_line":""},{"line_number":932,"context_line":"    This command should be run right after LDAP was configured in Keystone. It"}],"source_content_type":"text/x-python","patch_set":2,"id":"dada55a8_8b4ea4bf","line":929,"range":{"start_line":929,"start_character":6,"end_line":929,"end_character":17},"updated":"2016-07-18 05:57:22.000000000","message":"there\u0027s a keystone man page in the docs, update that file too","commit_id":"2e72735037cea3116eb5e8c5b1c8c352ad75d421"},{"author":{"_account_id":6482,"name":"Steve Martinelli","email":"s.martinelli@gmail.com","username":"stevemar"},"change_message_id":"f4f2ecd748ec621706883e6fcd862302e6017a3f","unresolved":false,"context_lines":[{"line_number":951,"context_line":"        parser \u003d super(PrepareLdap, cls).add_argument_parser("},{"line_number":952,"context_line":"            subparsers)"},{"line_number":953,"context_line":""},{"line_number":954,"context_line":"        parser.add_argument(\u0027--domain-id\u0027, default\u003dNone, required\u003dTrue,"},{"line_number":955,"context_line":"                            help\u003d(\"ID of the domain configured to use LDAP \""},{"line_number":956,"context_line":"                                  \"and that needs to be prepared\"))"},{"line_number":957,"context_line":"        return parser"},{"line_number":958,"context_line":""},{"line_number":959,"context_line":"    @classmethod"}],"source_content_type":"text/x-python","patch_set":2,"id":"dada55a8_ebec8091","line":956,"range":{"start_line":954,"start_character":8,"end_line":956,"end_character":67},"updated":"2016-07-18 05:57:22.000000000","message":"UX suggestion: i would think domain name is more user friendly, or you could do how OSC does it and accept both\n\n  --domain \u003cdomain\u003e\n\nand in the main() you can call get_domain(), and catch any exceptions that may occur, and get_domain_by_name() as a fallback -\u003e https://github.com/openstack/keystone/blob/master/keystone/resource/core.py#L706-L730\n\nI\u0027m OK with either approach or even this one, but I would think name is much better than ID. (especially since domain names are globally unique)","commit_id":"2e72735037cea3116eb5e8c5b1c8c352ad75d421"},{"author":{"_account_id":7725,"name":"David Stanek","email":"dstanek@dstanek.com","username":"dstanek"},"change_message_id":"7432edecbbb1372d95815d4b09f4b899d74f92cf","unresolved":false,"context_lines":[{"line_number":1001,"context_line":"    @classmethod"},{"line_number":1002,"context_line":"    def main(cls):"},{"line_number":1003,"context_line":"        domain_id \u003d CONF.command.domain_id"},{"line_number":1004,"context_line":"        klass \u003d cls()"},{"line_number":1005,"context_line":"        # the purpose of the command is to improve user experience when"},{"line_number":1006,"context_line":"        # keystone was just configured to use LDAP or many new users were"},{"line_number":1007,"context_line":"        # added to LDAP. Keystone needs to discover them and save to"}],"source_content_type":"text/x-python","patch_set":3,"id":"5ac665da_8593424f","line":1004,"updated":"2016-08-13 16:39:23.000000000","message":"The `klass` name is a little funny since you are actually creating an instance.","commit_id":"c4b7c880f51a3fd1c4350dfe82367a50ab7f3e90"},{"author":{"_account_id":13478,"name":"Boris Bobrov","email":"b.bobrov@sap.com","username":"bbobrov"},"change_message_id":"a54c4d1fded273a91a649036df530e9a34e365d2","unresolved":false,"context_lines":[{"line_number":1001,"context_line":"    @classmethod"},{"line_number":1002,"context_line":"    def main(cls):"},{"line_number":1003,"context_line":"        domain_id \u003d CONF.command.domain_id"},{"line_number":1004,"context_line":"        klass \u003d cls()"},{"line_number":1005,"context_line":"        # the purpose of the command is to improve user experience when"},{"line_number":1006,"context_line":"        # keystone was just configured to use LDAP or many new users were"},{"line_number":1007,"context_line":"        # added to LDAP. Keystone needs to discover them and save to"}],"source_content_type":"text/x-python","patch_set":3,"id":"3ac371cc_b60d7439","line":1004,"in_reply_to":"5ac665da_8593424f","updated":"2016-08-16 13:22:13.000000000","message":"Done","commit_id":"c4b7c880f51a3fd1c4350dfe82367a50ab7f3e90"},{"author":{"_account_id":7725,"name":"David Stanek","email":"dstanek@dstanek.com","username":"dstanek"},"change_message_id":"7432edecbbb1372d95815d4b09f4b899d74f92cf","unresolved":false,"context_lines":[{"line_number":1002,"context_line":"    def main(cls):"},{"line_number":1003,"context_line":"        domain_id \u003d CONF.command.domain_id"},{"line_number":1004,"context_line":"        klass \u003d cls()"},{"line_number":1005,"context_line":"        # the purpose of the command is to improve user experience when"},{"line_number":1006,"context_line":"        # keystone was just configured to use LDAP or many new users were"},{"line_number":1007,"context_line":"        # added to LDAP. Keystone needs to discover them and save to"},{"line_number":1008,"context_line":"        # id_mapping_api backend."}],"source_content_type":"text/x-python","patch_set":3,"id":"5ac665da_e598366d","line":1005,"updated":"2016-08-13 16:39:23.000000000","message":"This seems like some good documentation for the class docstring.","commit_id":"c4b7c880f51a3fd1c4350dfe82367a50ab7f3e90"},{"author":{"_account_id":13478,"name":"Boris Bobrov","email":"b.bobrov@sap.com","username":"bbobrov"},"change_message_id":"a54c4d1fded273a91a649036df530e9a34e365d2","unresolved":false,"context_lines":[{"line_number":1002,"context_line":"    def main(cls):"},{"line_number":1003,"context_line":"        domain_id \u003d CONF.command.domain_id"},{"line_number":1004,"context_line":"        klass \u003d cls()"},{"line_number":1005,"context_line":"        # the purpose of the command is to improve user experience when"},{"line_number":1006,"context_line":"        # keystone was just configured to use LDAP or many new users were"},{"line_number":1007,"context_line":"        # added to LDAP. Keystone needs to discover them and save to"},{"line_number":1008,"context_line":"        # id_mapping_api backend."}],"source_content_type":"text/x-python","patch_set":3,"id":"3ac371cc_1615683f","line":1005,"in_reply_to":"3ac371cc_763675e8","updated":"2016-08-16 13:22:13.000000000","message":"Done","commit_id":"c4b7c880f51a3fd1c4350dfe82367a50ab7f3e90"},{"author":{"_account_id":6482,"name":"Steve Martinelli","email":"s.martinelli@gmail.com","username":"stevemar"},"change_message_id":"370fc13db7501da807afc8d2a32712eb6145e44d","unresolved":false,"context_lines":[{"line_number":1002,"context_line":"    def main(cls):"},{"line_number":1003,"context_line":"        domain_id \u003d CONF.command.domain_id"},{"line_number":1004,"context_line":"        klass \u003d cls()"},{"line_number":1005,"context_line":"        # the purpose of the command is to improve user experience when"},{"line_number":1006,"context_line":"        # keystone was just configured to use LDAP or many new users were"},{"line_number":1007,"context_line":"        # added to LDAP. Keystone needs to discover them and save to"},{"line_number":1008,"context_line":"        # id_mapping_api backend."}],"source_content_type":"text/x-python","patch_set":3,"id":"3ac371cc_763675e8","line":1005,"in_reply_to":"5ac665da_e598366d","updated":"2016-08-16 04:01:21.000000000","message":"agreed, having this as a docstring would be good","commit_id":"c4b7c880f51a3fd1c4350dfe82367a50ab7f3e90"},{"author":{"_account_id":7725,"name":"David Stanek","email":"dstanek@dstanek.com","username":"dstanek"},"change_message_id":"7432edecbbb1372d95815d4b09f4b899d74f92cf","unresolved":false,"context_lines":[{"line_number":1009,"context_line":"        # We don\u0027t actually need to tackle id_mapping_api in order to get"},{"line_number":1010,"context_line":"        # entries there, because list_users does this anyway. That\u0027s why it"},{"line_number":1011,"context_line":"        # will be enough to just make the call below."},{"line_number":1012,"context_line":"        klass.identity_manager.list_users(domain_scope\u003ddomain_id)"},{"line_number":1013,"context_line":""},{"line_number":1014,"context_line":""},{"line_number":1015,"context_line":""}],"source_content_type":"text/x-python","patch_set":3,"id":"5ac665da_c59d3a5b","line":1012,"updated":"2016-08-13 16:39:23.000000000","message":"Is the point of this to fail if LDAP is not properly configured?","commit_id":"c4b7c880f51a3fd1c4350dfe82367a50ab7f3e90"},{"author":{"_account_id":6482,"name":"Steve Martinelli","email":"s.martinelli@gmail.com","username":"stevemar"},"change_message_id":"370fc13db7501da807afc8d2a32712eb6145e44d","unresolved":false,"context_lines":[{"line_number":1009,"context_line":"        # We don\u0027t actually need to tackle id_mapping_api in order to get"},{"line_number":1010,"context_line":"        # entries there, because list_users does this anyway. That\u0027s why it"},{"line_number":1011,"context_line":"        # will be enough to just make the call below."},{"line_number":1012,"context_line":"        klass.identity_manager.list_users(domain_scope\u003ddomain_id)"},{"line_number":1013,"context_line":""},{"line_number":1014,"context_line":""},{"line_number":1015,"context_line":""}],"source_content_type":"text/x-python","patch_set":3,"id":"3ac371cc_3624fdad","line":1012,"in_reply_to":"5ac665da_c59d3a5b","updated":"2016-08-16 04:01:21.000000000","message":"no, the point of this is to attempt to pre-populate / fill in the \"id_mapping\" database. \n\na good chunk of time spent with LDAP is creating entries in that database, and doing it once - for all users - when setting up an LDAP auth source initially is a nice speed up","commit_id":"c4b7c880f51a3fd1c4350dfe82367a50ab7f3e90"},{"author":{"_account_id":6482,"name":"Steve Martinelli","email":"s.martinelli@gmail.com","username":"stevemar"},"change_message_id":"073cdbf3e1c83aecd437e7910ff4a3f6c5521523","unresolved":false,"context_lines":[{"line_number":1005,"context_line":""},{"line_number":1006,"context_line":""},{"line_number":1007,"context_line":"class PrepareLdap(BaseApp):"},{"line_number":1008,"context_line":"    \"\"\"Preprocess entries from LDAP."},{"line_number":1009,"context_line":""},{"line_number":1010,"context_line":"    The purpose of the command is to improve user experience when"},{"line_number":1011,"context_line":"    Keystone has just been configured to use LDAP or many new users have been"},{"line_number":1012,"context_line":"    added to LDAP. Keystone needs to discover them and save to"},{"line_number":1013,"context_line":"    id_mapping_api backend."},{"line_number":1014,"context_line":""},{"line_number":1015,"context_line":"    This command should be run right after LDAP was configured in Keystone. It"},{"line_number":1016,"context_line":"    is not required to run it, though. It only improves the initial user"},{"line_number":1017,"context_line":"    experience."},{"line_number":1018,"context_line":""},{"line_number":1019,"context_line":"    Another case when it should be ran is when many new users were added to"},{"line_number":1020,"context_line":"    LDAP."},{"line_number":1021,"context_line":""},{"line_number":1022,"context_line":"    This command will take a while to run. It is perfectly fine for it to run"},{"line_number":1023,"context_line":"    more than several minutes."},{"line_number":1024,"context_line":"    \"\"\""},{"line_number":1025,"context_line":""},{"line_number":1026,"context_line":"    name \u003d \"prepare_ldap\""}],"source_content_type":"text/x-python","patch_set":8,"id":"3ac371cc_143384ac","line":1023,"range":{"start_line":1008,"start_character":0,"end_line":1023,"end_character":30},"updated":"2016-08-16 22:56:50.000000000","message":"so all of this is output when you run keystone-manage --help\n\nIf it\u0027s implementation related (and not user related) then maybe put it in the main()? and leave the class doscstring to be user related only\n\nFor user facing, what about leaving it to just:\n\n\"Pre-populate keystone with LDAP users.\n\nRunning this command is not required. It should only be run right after the LDAP was configured, when many new users were added, or when \"mapping_purge\" is run. This command will take a while to run. It is perfectly fine for it to run more than several minutes.\"\n\nand we can put some of the implementation stuff in the main()","commit_id":"948e354fef29a97b49eb58d4d33463063ec6a0a3"},{"author":{"_account_id":13478,"name":"Boris Bobrov","email":"b.bobrov@sap.com","username":"bbobrov"},"change_message_id":"9b2e6165de528f2e5ea85f16c6e492ccf2e60273","unresolved":false,"context_lines":[{"line_number":1005,"context_line":""},{"line_number":1006,"context_line":""},{"line_number":1007,"context_line":"class PrepareLdap(BaseApp):"},{"line_number":1008,"context_line":"    \"\"\"Preprocess entries from LDAP."},{"line_number":1009,"context_line":""},{"line_number":1010,"context_line":"    The purpose of the command is to improve user experience when"},{"line_number":1011,"context_line":"    Keystone has just been configured to use LDAP or many new users have been"},{"line_number":1012,"context_line":"    added to LDAP. Keystone needs to discover them and save to"},{"line_number":1013,"context_line":"    id_mapping_api backend."},{"line_number":1014,"context_line":""},{"line_number":1015,"context_line":"    This command should be run right after LDAP was configured in Keystone. It"},{"line_number":1016,"context_line":"    is not required to run it, though. It only improves the initial user"},{"line_number":1017,"context_line":"    experience."},{"line_number":1018,"context_line":""},{"line_number":1019,"context_line":"    Another case when it should be ran is when many new users were added to"},{"line_number":1020,"context_line":"    LDAP."},{"line_number":1021,"context_line":""},{"line_number":1022,"context_line":"    This command will take a while to run. It is perfectly fine for it to run"},{"line_number":1023,"context_line":"    more than several minutes."},{"line_number":1024,"context_line":"    \"\"\""},{"line_number":1025,"context_line":""},{"line_number":1026,"context_line":"    name \u003d \"prepare_ldap\""}],"source_content_type":"text/x-python","patch_set":8,"id":"3ac371cc_79718177","line":1023,"range":{"start_line":1008,"start_character":0,"end_line":1023,"end_character":30},"in_reply_to":"3ac371cc_143384ac","updated":"2016-08-18 22:48:15.000000000","message":"Done","commit_id":"948e354fef29a97b49eb58d4d33463063ec6a0a3"},{"author":{"_account_id":6482,"name":"Steve Martinelli","email":"s.martinelli@gmail.com","username":"stevemar"},"change_message_id":"073cdbf3e1c83aecd437e7910ff4a3f6c5521523","unresolved":false,"context_lines":[{"line_number":1048,"context_line":"        try:"},{"line_number":1049,"context_line":"            domain_id \u003d cls.resource_api.get_domain_by_name(domain_name)[\u0027id\u0027]"},{"line_number":1050,"context_line":"        except exception.DomainNotFound:"},{"line_number":1051,"context_line":"            domain_id \u003d domain_name"},{"line_number":1052,"context_line":"        # We don\u0027t actually need to tackle id_mapping_api in order to get"},{"line_number":1053,"context_line":"        # entries there, because list_users does this anyway. That\u0027s why it"},{"line_number":1054,"context_line":"        # will be enough to just make the call below."}],"source_content_type":"text/x-python","patch_set":8,"id":"3ac371cc_981ccc14","line":1051,"range":{"start_line":1051,"start_character":12,"end_line":1051,"end_character":35},"updated":"2016-08-16 22:56:50.000000000","message":"want to call get_domain() other whatever the function is called that calls it by ID?\n\nor leave a comment why you chose not to","commit_id":"948e354fef29a97b49eb58d4d33463063ec6a0a3"},{"author":{"_account_id":13478,"name":"Boris Bobrov","email":"b.bobrov@sap.com","username":"bbobrov"},"change_message_id":"9b2e6165de528f2e5ea85f16c6e492ccf2e60273","unresolved":false,"context_lines":[{"line_number":1048,"context_line":"        try:"},{"line_number":1049,"context_line":"            domain_id \u003d cls.resource_api.get_domain_by_name(domain_name)[\u0027id\u0027]"},{"line_number":1050,"context_line":"        except exception.DomainNotFound:"},{"line_number":1051,"context_line":"            domain_id \u003d domain_name"},{"line_number":1052,"context_line":"        # We don\u0027t actually need to tackle id_mapping_api in order to get"},{"line_number":1053,"context_line":"        # entries there, because list_users does this anyway. That\u0027s why it"},{"line_number":1054,"context_line":"        # will be enough to just make the call below."}],"source_content_type":"text/x-python","patch_set":8,"id":"3ac371cc_59f48586","line":1051,"range":{"start_line":1051,"start_character":12,"end_line":1051,"end_character":35},"in_reply_to":"3ac371cc_981ccc14","updated":"2016-08-18 22:48:15.000000000","message":"Done","commit_id":"948e354fef29a97b49eb58d4d33463063ec6a0a3"},{"author":{"_account_id":6482,"name":"Steve Martinelli","email":"s.martinelli@gmail.com","username":"stevemar"},"change_message_id":"073cdbf3e1c83aecd437e7910ff4a3f6c5521523","unresolved":false,"context_lines":[{"line_number":1068,"context_line":"    PKISetup,"},{"line_number":1069,"context_line":"    SamlIdentityProviderMetadata,"},{"line_number":1070,"context_line":"    TokenFlush,"},{"line_number":1071,"context_line":"    PrepareLdap"},{"line_number":1072,"context_line":"]"},{"line_number":1073,"context_line":""},{"line_number":1074,"context_line":""}],"source_content_type":"text/x-python","patch_set":8,"id":"3ac371cc_3d32ea10","line":1071,"range":{"start_line":1071,"start_character":4,"end_line":1071,"end_character":15},"updated":"2016-08-16 22:56:50.000000000","message":"put this on line 1069, they should be in order","commit_id":"948e354fef29a97b49eb58d4d33463063ec6a0a3"},{"author":{"_account_id":13478,"name":"Boris Bobrov","email":"b.bobrov@sap.com","username":"bbobrov"},"change_message_id":"9b2e6165de528f2e5ea85f16c6e492ccf2e60273","unresolved":false,"context_lines":[{"line_number":1068,"context_line":"    PKISetup,"},{"line_number":1069,"context_line":"    SamlIdentityProviderMetadata,"},{"line_number":1070,"context_line":"    TokenFlush,"},{"line_number":1071,"context_line":"    PrepareLdap"},{"line_number":1072,"context_line":"]"},{"line_number":1073,"context_line":""},{"line_number":1074,"context_line":""}],"source_content_type":"text/x-python","patch_set":8,"id":"3ac371cc_b9f13998","line":1071,"range":{"start_line":1071,"start_character":4,"end_line":1071,"end_character":15},"in_reply_to":"3ac371cc_3d32ea10","updated":"2016-08-18 22:48:15.000000000","message":"Done","commit_id":"948e354fef29a97b49eb58d4d33463063ec6a0a3"},{"author":{"_account_id":4,"name":"Dolph Mathews","email":"dolph.mathews@gmail.com","username":"dolph"},"change_message_id":"72f5211588d3b5d6cc89fcd5245863081102f218","unresolved":false,"context_lines":[{"line_number":1021,"context_line":"    def load_backends(cls):"},{"line_number":1022,"context_line":"        drivers \u003d backends.load_backends()"},{"line_number":1023,"context_line":"        cls.identity_api \u003d drivers[\u0027identity_api\u0027]"},{"line_number":1024,"context_line":"        cls.resource_api \u003d drivers[\u0027resource_api\u0027]"},{"line_number":1025,"context_line":""},{"line_number":1026,"context_line":"    @classmethod"},{"line_number":1027,"context_line":"    def add_argument_parser(cls, subparsers):"}],"source_content_type":"text/x-python","patch_set":12,"id":"1ac06dbe_98a7174f","line":1024,"updated":"2016-08-19 14:23:30.000000000","message":"Seems weird to set a class attribute with an instance of another class, but I don\u0027t think it\u0027ll actually break anything, as we should only ever have one instance of this class (outside of tests, anyway).","commit_id":"eb0b226a3ab80b9fc163640c084d8a0f2806dab4"},{"author":{"_account_id":4,"name":"Dolph Mathews","email":"dolph.mathews@gmail.com","username":"dolph"},"change_message_id":"72f5211588d3b5d6cc89fcd5245863081102f218","unresolved":false,"context_lines":[{"line_number":1030,"context_line":""},{"line_number":1031,"context_line":"        parser.add_argument(\u0027--domain\u0027, default\u003dNone, required\u003dTrue,"},{"line_number":1032,"context_line":"                            help\u003d(\"Name or ID of the domain configured to use\""},{"line_number":1033,"context_line":"                                  \"domain-specific backend\"))"},{"line_number":1034,"context_line":"        return parser"},{"line_number":1035,"context_line":""},{"line_number":1036,"context_line":"    @classmethod"}],"source_content_type":"text/x-python","patch_set":12,"id":"1ac06dbe_1b0e8134","line":1033,"updated":"2016-08-19 14:23:30.000000000","message":"I\u0027d rather not support ambiguous options like openstackclient does -- they tend to break. mapping_purge supports --domain-name, so this should, too.","commit_id":"eb0b226a3ab80b9fc163640c084d8a0f2806dab4"},{"author":{"_account_id":13478,"name":"Boris Bobrov","email":"b.bobrov@sap.com","username":"bbobrov"},"change_message_id":"8b5fe014b1ac2f982b60fd9b096424b76dda160d","unresolved":false,"context_lines":[{"line_number":1030,"context_line":""},{"line_number":1031,"context_line":"        parser.add_argument(\u0027--domain\u0027, default\u003dNone, required\u003dTrue,"},{"line_number":1032,"context_line":"                            help\u003d(\"Name or ID of the domain configured to use\""},{"line_number":1033,"context_line":"                                  \"domain-specific backend\"))"},{"line_number":1034,"context_line":"        return parser"},{"line_number":1035,"context_line":""},{"line_number":1036,"context_line":"    @classmethod"}],"source_content_type":"text/x-python","patch_set":12,"id":"1ac06dbe_7b77b5d4","line":1033,"in_reply_to":"1ac06dbe_1b0e8134","updated":"2016-08-19 15:00:43.000000000","message":"good point. Done.","commit_id":"eb0b226a3ab80b9fc163640c084d8a0f2806dab4"},{"author":{"_account_id":6482,"name":"Steve Martinelli","email":"s.martinelli@gmail.com","username":"stevemar"},"change_message_id":"37bfcccca900cdbfd8c314ee78eea7b16c30777b","unresolved":false,"context_lines":[{"line_number":1030,"context_line":""},{"line_number":1031,"context_line":"        parser.add_argument(\u0027--domain\u0027, default\u003dNone, required\u003dTrue,"},{"line_number":1032,"context_line":"                            help\u003d(\"Name or ID of the domain configured to use\""},{"line_number":1033,"context_line":"                                  \"domain-specific backend\"))"},{"line_number":1034,"context_line":"        return parser"},{"line_number":1035,"context_line":""},{"line_number":1036,"context_line":"    @classmethod"}],"source_content_type":"text/x-python","patch_set":12,"id":"1ac06dbe_8474d2fd","line":1033,"in_reply_to":"1ac06dbe_1b0e8134","updated":"2016-08-19 14:58:52.000000000","message":"haters gonna hate :]\n\ngood point about mapping_purge, lets stick with name only","commit_id":"eb0b226a3ab80b9fc163640c084d8a0f2806dab4"},{"author":{"_account_id":4,"name":"Dolph Mathews","email":"dolph.mathews@gmail.com","username":"dolph"},"change_message_id":"72f5211588d3b5d6cc89fcd5245863081102f218","unresolved":false,"context_lines":[{"line_number":1067,"context_line":"    MappingEngineTester,"},{"line_number":1068,"context_line":"    PKISetup,"},{"line_number":1069,"context_line":"    SamlIdentityProviderMetadata,"},{"line_number":1070,"context_line":"    TokenFlush"},{"line_number":1071,"context_line":"]"},{"line_number":1072,"context_line":""},{"line_number":1073,"context_line":""}],"source_content_type":"text/x-python","patch_set":12,"id":"1ac06dbe_dbd4e948","line":1070,"updated":"2016-08-19 14:23:30.000000000","message":"Undo this change - it\u0027s not relevant and it makes such lists easier to maintain.","commit_id":"eb0b226a3ab80b9fc163640c084d8a0f2806dab4"},{"author":{"_account_id":13478,"name":"Boris Bobrov","email":"b.bobrov@sap.com","username":"bbobrov"},"change_message_id":"8b5fe014b1ac2f982b60fd9b096424b76dda160d","unresolved":false,"context_lines":[{"line_number":1067,"context_line":"    MappingEngineTester,"},{"line_number":1068,"context_line":"    PKISetup,"},{"line_number":1069,"context_line":"    SamlIdentityProviderMetadata,"},{"line_number":1070,"context_line":"    TokenFlush"},{"line_number":1071,"context_line":"]"},{"line_number":1072,"context_line":""},{"line_number":1073,"context_line":""}],"source_content_type":"text/x-python","patch_set":12,"id":"1ac06dbe_dee177d2","line":1070,"in_reply_to":"1ac06dbe_dbd4e948","updated":"2016-08-19 15:00:43.000000000","message":"Done","commit_id":"eb0b226a3ab80b9fc163640c084d8a0f2806dab4"},{"author":{"_account_id":18338,"name":"Ron De Rose","email":"ronald.de.rose@intel.com","username":"derosenet"},"change_message_id":"a82e6dc7be48833eba7c7171d57f857a68829b6f","unresolved":false,"context_lines":[{"line_number":1036,"context_line":"    @classmethod"},{"line_number":1037,"context_line":"    def main(cls):"},{"line_number":1038,"context_line":"        \"\"\"Process entries for id_mapping_api.\"\"\""},{"line_number":1039,"context_line":"        cls.load_backends()"},{"line_number":1040,"context_line":"        domain_name \u003d CONF.command.domain_name"},{"line_number":1041,"context_line":"        try:"},{"line_number":1042,"context_line":"            domain_id \u003d cls.resource_api.get_domain_by_name(domain_name)[\u0027id\u0027]"}],"source_content_type":"text/x-python","patch_set":14,"id":"1ac06dbe_6cca981c","line":1039,"range":{"start_line":1039,"start_character":8,"end_line":1039,"end_character":27},"updated":"2016-08-23 21:11:26.000000000","message":"Should you check if domain-specific LDAP first?  If not, return.","commit_id":"eb3962cebcb2104aa9012945fa34d93b6a2d67c6"}],"keystone/tests/unit/test_cli.py":[{"author":{"_account_id":6482,"name":"Steve Martinelli","email":"s.martinelli@gmail.com","username":"stevemar"},"change_message_id":"f4f2ecd748ec621706883e6fcd862302e6017a3f","unresolved":false,"context_lines":[{"line_number":336,"context_line":"        self.domains[\u0027domain_default\u0027] \u003d create_domain(self.default_domain)"},{"line_number":337,"context_line":""},{"line_number":338,"context_line":""},{"line_number":339,"context_line":"class CliDomainConfigAllTestCase(MultidomainTestCase, unit.TestCase):"},{"line_number":340,"context_line":""},{"line_number":341,"context_line":"    def config(self, config_files):"},{"line_number":342,"context_line":"        CONF(args\u003d[\u0027domain_config_upload\u0027, \u0027--all\u0027], project\u003d\u0027keystone\u0027,"},{"line_number":343,"context_line":"             default_config_files\u003dconfig_files)"},{"line_number":344,"context_line":""},{"line_number":345,"context_line":"    def test_config_upload(self):"},{"line_number":346,"context_line":"        # The values below are the same as in the domain_configs_multi_ldap"}],"source_content_type":"text/x-python","patch_set":2,"id":"dada55a8_eba3e04d","line":343,"range":{"start_line":339,"start_character":0,"end_line":343,"end_character":47},"updated":"2016-07-18 05:57:22.000000000","message":"why move this around? the new tests don\u0027t appear to use any of these classes","commit_id":"2e72735037cea3116eb5e8c5b1c8c352ad75d421"},{"author":{"_account_id":6482,"name":"Steve Martinelli","email":"s.martinelli@gmail.com","username":"stevemar"},"change_message_id":"f4f2ecd748ec621706883e6fcd862302e6017a3f","unresolved":false,"context_lines":[{"line_number":541,"context_line":"             default_config_files\u003dconfig_files)"},{"line_number":542,"context_line":""},{"line_number":543,"context_line":"    def test_main(self):"},{"line_number":544,"context_line":"        cli.PrepareLdap.main()"}],"source_content_type":"text/x-python","patch_set":2,"id":"dada55a8_ab672824","line":544,"range":{"start_line":544,"start_character":8,"end_line":544,"end_character":30},"updated":"2016-07-18 05:57:22.000000000","message":"there\u0027s nothing asserted in this test :( \n\nI don\u0027t have a good suggestion on how to assert something happened, aside from a mock call","commit_id":"2e72735037cea3116eb5e8c5b1c8c352ad75d421"},{"author":{"_account_id":7725,"name":"David Stanek","email":"dstanek@dstanek.com","username":"dstanek"},"change_message_id":"7432edecbbb1372d95815d4b09f4b899d74f92cf","unresolved":false,"context_lines":[{"line_number":550,"context_line":"        return config_files"},{"line_number":551,"context_line":""},{"line_number":552,"context_line":"    def test_prepare_ldap(self):"},{"line_number":553,"context_line":"        cli.PrepareLdap.main()"}],"source_content_type":"text/x-python","patch_set":3,"id":"5ac665da_a58e3e25","line":553,"updated":"2016-08-13 16:39:23.000000000","message":"Is there a failure case to test?","commit_id":"c4b7c880f51a3fd1c4350dfe82367a50ab7f3e90"},{"author":{"_account_id":6482,"name":"Steve Martinelli","email":"s.martinelli@gmail.com","username":"stevemar"},"change_message_id":"370fc13db7501da807afc8d2a32712eb6145e44d","unresolved":false,"context_lines":[{"line_number":550,"context_line":"        return config_files"},{"line_number":551,"context_line":""},{"line_number":552,"context_line":"    def test_prepare_ldap(self):"},{"line_number":553,"context_line":"        cli.PrepareLdap.main()"}],"source_content_type":"text/x-python","patch_set":3,"id":"3ac371cc_f650a50c","line":553,"in_reply_to":"5ac665da_a58e3e25","updated":"2016-08-16 04:01:21.000000000","message":"not really","commit_id":"c4b7c880f51a3fd1c4350dfe82367a50ab7f3e90"},{"author":{"_account_id":6482,"name":"Steve Martinelli","email":"s.martinelli@gmail.com","username":"stevemar"},"change_message_id":"9635dd4ad80dd242404ee9abe1b1d6a09d67a824","unresolved":false,"context_lines":[{"line_number":96,"context_line":"        return config_files"},{"line_number":97,"context_line":""},{"line_number":98,"context_line":"    def config(self, config_files):"},{"line_number":99,"context_line":"        assert False"},{"line_number":100,"context_line":"        CONF(args\u003d[\u0027bootstrap\u0027, \u0027--bootstrap-password\u0027, uuid.uuid4().hex],"},{"line_number":101,"context_line":"             project\u003d\u0027keystone\u0027,"},{"line_number":102,"context_line":"             default_config_files\u003dconfig_files)"}],"source_content_type":"text/x-python","patch_set":4,"id":"3ac371cc_164e216f","line":99,"range":{"start_line":99,"start_character":8,"end_line":99,"end_character":20},"updated":"2016-08-16 04:01:18.000000000","message":"causing all sorts of failures","commit_id":"861f5491dcc78cc163c0d1514c5f60506ebd95cb"},{"author":{"_account_id":11022,"name":"Rodrigo Duarte Sousa","email":"rodrigodsousa@gmail.com","username":"rodrigods"},"change_message_id":"d79371bfb630559a4ac64324f0df53a8d7620c27","unresolved":false,"context_lines":[{"line_number":633,"context_line":"             default_config_files\u003dconfig_files)"},{"line_number":634,"context_line":""},{"line_number":635,"context_line":"    def test_mapping_populate(self):"},{"line_number":636,"context_line":"        # mapping_populate should create id mappings. Test plan:"},{"line_number":637,"context_line":"        # 0. Purge mappings"},{"line_number":638,"context_line":"        # 1. Fetch user list directly via backend. It will not create any"},{"line_number":639,"context_line":"        #    mappings because it bypasses identity manager"},{"line_number":640,"context_line":"        # 2. Verify that users have no public_id yet"},{"line_number":641,"context_line":"        # 3. Execute mapping_populate. It should create id mappings"},{"line_number":642,"context_line":"        # 4. For the same users verify that they have public_id now"},{"line_number":643,"context_line":"        self.id_mapping_api.purge_mappings({})  # {} for empty filter"},{"line_number":644,"context_line":"        users \u003d self.identity_api.driver.list_users(None)  # None for hints"},{"line_number":645,"context_line":"        for user in users:"}],"source_content_type":"text/x-python","patch_set":12,"id":"1ac06dbe_ec9dba5a","line":642,"range":{"start_line":636,"start_character":0,"end_line":642,"end_character":67},"updated":"2016-08-19 12:19:29.000000000","message":"suggest to use a docstring instead","commit_id":"eb0b226a3ab80b9fc163640c084d8a0f2806dab4"},{"author":{"_account_id":11022,"name":"Rodrigo Duarte Sousa","email":"rodrigodsousa@gmail.com","username":"rodrigods"},"change_message_id":"497bb0f5400fd482cdf71d1ec04f92b1a10f6cc1","unresolved":false,"context_lines":[{"line_number":633,"context_line":"             default_config_files\u003dconfig_files)"},{"line_number":634,"context_line":""},{"line_number":635,"context_line":"    def test_mapping_populate(self):"},{"line_number":636,"context_line":"        # mapping_populate should create id mappings. Test plan:"},{"line_number":637,"context_line":"        # 0. Purge mappings"},{"line_number":638,"context_line":"        # 1. Fetch user list directly via backend. It will not create any"},{"line_number":639,"context_line":"        #    mappings because it bypasses identity manager"},{"line_number":640,"context_line":"        # 2. Verify that users have no public_id yet"},{"line_number":641,"context_line":"        # 3. Execute mapping_populate. It should create id mappings"},{"line_number":642,"context_line":"        # 4. For the same users verify that they have public_id now"},{"line_number":643,"context_line":"        self.id_mapping_api.purge_mappings({})  # {} for empty filter"},{"line_number":644,"context_line":"        users \u003d self.identity_api.driver.list_users(None)  # None for hints"},{"line_number":645,"context_line":"        for user in users:"}],"source_content_type":"text/x-python","patch_set":12,"id":"1ac06dbe_4563d3dc","line":642,"range":{"start_line":636,"start_character":0,"end_line":642,"end_character":67},"in_reply_to":"1ac06dbe_1e5dcfe9","updated":"2016-08-20 12:55:38.000000000","message":"think that following the pattern in the file blindly (without good judgment) can ultimately spread bad patterns throughout the codebase. I generally prefer docstrings for this case because it appears in the module documentation and... that\u0027s how we document stuff in Python.","commit_id":"eb0b226a3ab80b9fc163640c084d8a0f2806dab4"},{"author":{"_account_id":13478,"name":"Boris Bobrov","email":"b.bobrov@sap.com","username":"bbobrov"},"change_message_id":"8b5fe014b1ac2f982b60fd9b096424b76dda160d","unresolved":false,"context_lines":[{"line_number":633,"context_line":"             default_config_files\u003dconfig_files)"},{"line_number":634,"context_line":""},{"line_number":635,"context_line":"    def test_mapping_populate(self):"},{"line_number":636,"context_line":"        # mapping_populate should create id mappings. Test plan:"},{"line_number":637,"context_line":"        # 0. Purge mappings"},{"line_number":638,"context_line":"        # 1. Fetch user list directly via backend. It will not create any"},{"line_number":639,"context_line":"        #    mappings because it bypasses identity manager"},{"line_number":640,"context_line":"        # 2. Verify that users have no public_id yet"},{"line_number":641,"context_line":"        # 3. Execute mapping_populate. It should create id mappings"},{"line_number":642,"context_line":"        # 4. For the same users verify that they have public_id now"},{"line_number":643,"context_line":"        self.id_mapping_api.purge_mappings({})  # {} for empty filter"},{"line_number":644,"context_line":"        users \u003d self.identity_api.driver.list_users(None)  # None for hints"},{"line_number":645,"context_line":"        for user in users:"}],"source_content_type":"text/x-python","patch_set":12,"id":"1ac06dbe_1e5dcfe9","line":642,"range":{"start_line":636,"start_character":0,"end_line":642,"end_character":67},"in_reply_to":"1ac06dbe_ec9dba5a","updated":"2016-08-19 15:00:43.000000000","message":"we don\u0027t use docstrings for tests usually, see tests above, for example. I don\u0027t have a strong opinion about it though.","commit_id":"eb0b226a3ab80b9fc163640c084d8a0f2806dab4"},{"author":{"_account_id":4,"name":"Dolph Mathews","email":"dolph.mathews@gmail.com","username":"dolph"},"change_message_id":"72f5211588d3b5d6cc89fcd5245863081102f218","unresolved":false,"context_lines":[{"line_number":641,"context_line":"        # 3. Execute mapping_populate. It should create id mappings"},{"line_number":642,"context_line":"        # 4. For the same users verify that they have public_id now"},{"line_number":643,"context_line":"        self.id_mapping_api.purge_mappings({})  # {} for empty filter"},{"line_number":644,"context_line":"        users \u003d self.identity_api.driver.list_users(None)  # None for hints"},{"line_number":645,"context_line":"        for user in users:"},{"line_number":646,"context_line":"            local_entity \u003d {"},{"line_number":647,"context_line":"                \u0027domain_id\u0027: CONF.identity.default_domain_id,"}],"source_content_type":"text/x-python","patch_set":12,"id":"1ac06dbe_5b92b958","line":644,"updated":"2016-08-19 14:23:30.000000000","message":"nit: I sort of prefer the pattern we use else for this case:\n\n  hints \u003d None\n  users \u003d self.identity_api.driver.list_users(hints)\n\nAlthough, passing an arg as a kwarg doesn\u0027t bother me at all, either.","commit_id":"eb0b226a3ab80b9fc163640c084d8a0f2806dab4"},{"author":{"_account_id":13478,"name":"Boris Bobrov","email":"b.bobrov@sap.com","username":"bbobrov"},"change_message_id":"8b5fe014b1ac2f982b60fd9b096424b76dda160d","unresolved":false,"context_lines":[{"line_number":641,"context_line":"        # 3. Execute mapping_populate. It should create id mappings"},{"line_number":642,"context_line":"        # 4. For the same users verify that they have public_id now"},{"line_number":643,"context_line":"        self.id_mapping_api.purge_mappings({})  # {} for empty filter"},{"line_number":644,"context_line":"        users \u003d self.identity_api.driver.list_users(None)  # None for hints"},{"line_number":645,"context_line":"        for user in users:"},{"line_number":646,"context_line":"            local_entity \u003d {"},{"line_number":647,"context_line":"                \u0027domain_id\u0027: CONF.identity.default_domain_id,"}],"source_content_type":"text/x-python","patch_set":12,"id":"1ac06dbe_7e72037e","line":644,"in_reply_to":"1ac06dbe_5b92b958","updated":"2016-08-19 15:00:43.000000000","message":"Done","commit_id":"eb0b226a3ab80b9fc163640c084d8a0f2806dab4"}],"releasenotes/notes/mapping_populate-521d92445505b8a3.yaml":[{"author":{"_account_id":10608,"name":"Matthew Edmonds","email":"edmondsw@us.ibm.com","username":"edmondsw"},"change_message_id":"0f497ca32485f6c95514bd85a2b01e4e32fe2fad","unresolved":false,"context_lines":[{"line_number":4,"context_line":"    should be used when domain-specific LDAP backend is"},{"line_number":5,"context_line":"    used."},{"line_number":6,"context_line":"features:"},{"line_number":7,"context_line":"  - Add ``keystone-manage mapping_populate`` command, which"},{"line_number":8,"context_line":"    should be used when domain-specific LDAP backend is"},{"line_number":9,"context_line":"    used. Add ``keystone-manage ldap_prepare`` command,"},{"line_number":10,"context_line":"    which is recommended to use when keystone is configured"},{"line_number":11,"context_line":"    with a domain-specific LDAP backend. This command will"},{"line_number":12,"context_line":"    populate a mapping table with all users from LDAP, it"}],"source_content_type":"text/x-yaml","patch_set":13,"id":"1ac06dbe_27df2dda","line":9,"range":{"start_line":7,"start_character":52,"end_line":9,"end_character":8},"updated":"2016-08-23 16:34:30.000000000","message":"I would drop this, and let the following sentences better explain what this is for.","commit_id":"6e6dc3853f808c3c23e35fb855583b7558a36b0c"},{"author":{"_account_id":10608,"name":"Matthew Edmonds","email":"edmondsw@us.ibm.com","username":"edmondsw"},"change_message_id":"0f497ca32485f6c95514bd85a2b01e4e32fe2fad","unresolved":false,"context_lines":[{"line_number":6,"context_line":"features:"},{"line_number":7,"context_line":"  - Add ``keystone-manage mapping_populate`` command, which"},{"line_number":8,"context_line":"    should be used when domain-specific LDAP backend is"},{"line_number":9,"context_line":"    used. Add ``keystone-manage ldap_prepare`` command,"},{"line_number":10,"context_line":"    which is recommended to use when keystone is configured"},{"line_number":11,"context_line":"    with a domain-specific LDAP backend. This command will"},{"line_number":12,"context_line":"    populate a mapping table with all users from LDAP, it"},{"line_number":13,"context_line":"    should be used when an LDAP is first configured,"},{"line_number":14,"context_line":"    before any queries related to the domain are made. For"}],"source_content_type":"text/x-yaml","patch_set":13,"id":"1ac06dbe_87954134","line":11,"range":{"start_line":9,"start_character":10,"end_line":11,"end_character":41},"updated":"2016-08-23 16:34:30.000000000","message":"this looks like it was mistakenly left behind when the previous sentence was added.","commit_id":"6e6dc3853f808c3c23e35fb855583b7558a36b0c"},{"author":{"_account_id":10608,"name":"Matthew Edmonds","email":"edmondsw@us.ibm.com","username":"edmondsw"},"change_message_id":"0f497ca32485f6c95514bd85a2b01e4e32fe2fad","unresolved":false,"context_lines":[{"line_number":9,"context_line":"    used. Add ``keystone-manage ldap_prepare`` command,"},{"line_number":10,"context_line":"    which is recommended to use when keystone is configured"},{"line_number":11,"context_line":"    with a domain-specific LDAP backend. This command will"},{"line_number":12,"context_line":"    populate a mapping table with all users from LDAP, it"},{"line_number":13,"context_line":"    should be used when an LDAP is first configured,"},{"line_number":14,"context_line":"    before any queries related to the domain are made. For"},{"line_number":15,"context_line":"    more information see ``keystone-manage prepare_ldap"}],"source_content_type":"text/x-yaml","patch_set":13,"id":"1ac06dbe_87f4215b","line":12,"range":{"start_line":12,"start_character":4,"end_line":12,"end_character":12},"updated":"2016-08-23 16:34:30.000000000","message":"pre-populate","commit_id":"6e6dc3853f808c3c23e35fb855583b7558a36b0c"},{"author":{"_account_id":10608,"name":"Matthew Edmonds","email":"edmondsw@us.ibm.com","username":"edmondsw"},"change_message_id":"0f497ca32485f6c95514bd85a2b01e4e32fe2fad","unresolved":false,"context_lines":[{"line_number":9,"context_line":"    used. Add ``keystone-manage ldap_prepare`` command,"},{"line_number":10,"context_line":"    which is recommended to use when keystone is configured"},{"line_number":11,"context_line":"    with a domain-specific LDAP backend. This command will"},{"line_number":12,"context_line":"    populate a mapping table with all users from LDAP, it"},{"line_number":13,"context_line":"    should be used when an LDAP is first configured,"},{"line_number":14,"context_line":"    before any queries related to the domain are made. For"},{"line_number":15,"context_line":"    more information see ``keystone-manage prepare_ldap"}],"source_content_type":"text/x-yaml","patch_set":13,"id":"1ac06dbe_478ea9d0","line":12,"range":{"start_line":12,"start_character":53,"end_line":12,"end_character":56},"updated":"2016-08-23 16:34:30.000000000","message":"s/, i/ in order to improve future query performance. I/","commit_id":"6e6dc3853f808c3c23e35fb855583b7558a36b0c"},{"author":{"_account_id":10608,"name":"Matthew Edmonds","email":"edmondsw@us.ibm.com","username":"edmondsw"},"change_message_id":"0f497ca32485f6c95514bd85a2b01e4e32fe2fad","unresolved":false,"context_lines":[{"line_number":10,"context_line":"    which is recommended to use when keystone is configured"},{"line_number":11,"context_line":"    with a domain-specific LDAP backend. This command will"},{"line_number":12,"context_line":"    populate a mapping table with all users from LDAP, it"},{"line_number":13,"context_line":"    should be used when an LDAP is first configured,"},{"line_number":14,"context_line":"    before any queries related to the domain are made. For"},{"line_number":15,"context_line":"    more information see ``keystone-manage prepare_ldap"},{"line_number":16,"context_line":"    --help``"}],"source_content_type":"text/x-yaml","patch_set":13,"id":"1ac06dbe_a715dd9c","line":13,"range":{"start_line":13,"start_character":51,"end_line":13,"end_character":52},"updated":"2016-08-23 16:34:30.000000000","message":"or after calling ``keystone-manage mapping_purge``","commit_id":"6e6dc3853f808c3c23e35fb855583b7558a36b0c"},{"author":{"_account_id":10608,"name":"Matthew Edmonds","email":"edmondsw@us.ibm.com","username":"edmondsw"},"change_message_id":"0f497ca32485f6c95514bd85a2b01e4e32fe2fad","unresolved":false,"context_lines":[{"line_number":12,"context_line":"    populate a mapping table with all users from LDAP, it"},{"line_number":13,"context_line":"    should be used when an LDAP is first configured,"},{"line_number":14,"context_line":"    before any queries related to the domain are made. For"},{"line_number":15,"context_line":"    more information see ``keystone-manage prepare_ldap"},{"line_number":16,"context_line":"    --help``"}],"source_content_type":"text/x-yaml","patch_set":13,"id":"1ac06dbe_67776502","line":15,"range":{"start_line":15,"start_character":43,"end_line":15,"end_character":55},"updated":"2016-08-23 16:34:30.000000000","message":"s/prepare_ldap/mapping_populate/","commit_id":"6e6dc3853f808c3c23e35fb855583b7558a36b0c"},{"author":{"_account_id":10608,"name":"Matthew Edmonds","email":"edmondsw@us.ibm.com","username":"edmondsw"},"change_message_id":"4a907ff7579a186135d15f9ddeb03aecd3def1b6","unresolved":false,"context_lines":[{"line_number":4,"context_line":"    should be used when domain-specific LDAP backend is"},{"line_number":5,"context_line":"    used."},{"line_number":6,"context_line":"features:"},{"line_number":7,"context_line":"  - Add ``keystone-manage mapping_populate`` command"},{"line_number":8,"context_line":"    This command will pre-populate a mapping table with all"},{"line_number":9,"context_line":"    users from LDAP, in order to improve future query"},{"line_number":10,"context_line":"    performance. It should be used when an LDAP is first"}],"source_content_type":"text/x-yaml","patch_set":14,"id":"1ac06dbe_dcfd3fb2","line":7,"updated":"2016-08-23 19:33:19.000000000","message":"should have a period at the end of this line.","commit_id":"eb3962cebcb2104aa9012945fa34d93b6a2d67c6"}],"releasenotes/notes/prepare_ldap-521d92445505b8a3.yaml":[{"author":{"_account_id":6482,"name":"Steve Martinelli","email":"s.martinelli@gmail.com","username":"stevemar"},"change_message_id":"073cdbf3e1c83aecd437e7910ff4a3f6c5521523","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":8,"id":"3ac371cc_14da644c","updated":"2016-08-16 22:56:50.000000000","message":"s/ldap_prepare/prepare_ldap \n\nfor this whole note. though... while we\u0027re at it, what do you think of \"ldap_populate\" ?","commit_id":"948e354fef29a97b49eb58d4d33463063ec6a0a3"},{"author":{"_account_id":13478,"name":"Boris Bobrov","email":"b.bobrov@sap.com","username":"bbobrov"},"change_message_id":"4d6b30025e3955a9c931b70d90ac8c57c67812ec","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":8,"id":"3ac371cc_e48ec477","in_reply_to":"3ac371cc_14da644c","updated":"2016-08-17 18:01:37.000000000","message":"what do you think of \"mapping_populate\"? We already have mapping_purge.","commit_id":"948e354fef29a97b49eb58d4d33463063ec6a0a3"},{"author":{"_account_id":13478,"name":"Boris Bobrov","email":"b.bobrov@sap.com","username":"bbobrov"},"change_message_id":"9b2e6165de528f2e5ea85f16c6e492ccf2e60273","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":8,"id":"3ac371cc_59d92583","in_reply_to":"3ac371cc_e48ec477","updated":"2016-08-18 22:48:15.000000000","message":"Done","commit_id":"948e354fef29a97b49eb58d4d33463063ec6a0a3"},{"author":{"_account_id":6482,"name":"Steve Martinelli","email":"s.martinelli@gmail.com","username":"stevemar"},"change_message_id":"073cdbf3e1c83aecd437e7910ff4a3f6c5521523","unresolved":false,"context_lines":[{"line_number":1,"context_line":"---"},{"line_number":2,"context_line":"prelude: \u003e"},{"line_number":3,"context_line":"    Add keystone-manage ldap_prepare command, which"},{"line_number":4,"context_line":"    should be used when domain-specific LDAP backend is"},{"line_number":5,"context_line":"    used."},{"line_number":6,"context_line":"features:"}],"source_content_type":"text/x-yaml","patch_set":8,"id":"3ac371cc_9d215eb7","line":3,"range":{"start_line":3,"start_character":8,"end_line":3,"end_character":36},"updated":"2016-08-16 22:56:50.000000000","message":"wrap this with ``\n\n  ``keystone-manage ldap_prepare``","commit_id":"948e354fef29a97b49eb58d4d33463063ec6a0a3"},{"author":{"_account_id":13478,"name":"Boris Bobrov","email":"b.bobrov@sap.com","username":"bbobrov"},"change_message_id":"9b2e6165de528f2e5ea85f16c6e492ccf2e60273","unresolved":false,"context_lines":[{"line_number":1,"context_line":"---"},{"line_number":2,"context_line":"prelude: \u003e"},{"line_number":3,"context_line":"    Add keystone-manage ldap_prepare command, which"},{"line_number":4,"context_line":"    should be used when domain-specific LDAP backend is"},{"line_number":5,"context_line":"    used."},{"line_number":6,"context_line":"features:"}],"source_content_type":"text/x-yaml","patch_set":8,"id":"3ac371cc_39f26907","line":3,"range":{"start_line":3,"start_character":8,"end_line":3,"end_character":36},"in_reply_to":"3ac371cc_9d215eb7","updated":"2016-08-18 22:48:15.000000000","message":"Done","commit_id":"948e354fef29a97b49eb58d4d33463063ec6a0a3"},{"author":{"_account_id":6482,"name":"Steve Martinelli","email":"s.martinelli@gmail.com","username":"stevemar"},"change_message_id":"073cdbf3e1c83aecd437e7910ff4a3f6c5521523","unresolved":false,"context_lines":[{"line_number":4,"context_line":"    should be used when domain-specific LDAP backend is"},{"line_number":5,"context_line":"    used."},{"line_number":6,"context_line":"features:"},{"line_number":7,"context_line":"  - Add keystone-manage ldap_prepare command, which"},{"line_number":8,"context_line":"    should be used when domain-specific LDAP backend is"},{"line_number":9,"context_line":"    used. It fixes an issue when queries like"},{"line_number":10,"context_line":"    \"list users\" fail by timeout."}],"source_content_type":"text/x-yaml","patch_set":8,"id":"3ac371cc_3d194a89","line":7,"range":{"start_line":7,"start_character":8,"end_line":7,"end_character":36},"updated":"2016-08-16 22:56:50.000000000","message":"same","commit_id":"948e354fef29a97b49eb58d4d33463063ec6a0a3"},{"author":{"_account_id":13478,"name":"Boris Bobrov","email":"b.bobrov@sap.com","username":"bbobrov"},"change_message_id":"9b2e6165de528f2e5ea85f16c6e492ccf2e60273","unresolved":false,"context_lines":[{"line_number":4,"context_line":"    should be used when domain-specific LDAP backend is"},{"line_number":5,"context_line":"    used."},{"line_number":6,"context_line":"features:"},{"line_number":7,"context_line":"  - Add keystone-manage ldap_prepare command, which"},{"line_number":8,"context_line":"    should be used when domain-specific LDAP backend is"},{"line_number":9,"context_line":"    used. It fixes an issue when queries like"},{"line_number":10,"context_line":"    \"list users\" fail by timeout."}],"source_content_type":"text/x-yaml","patch_set":8,"id":"3ac371cc_d9ecf52b","line":7,"range":{"start_line":7,"start_character":8,"end_line":7,"end_character":36},"in_reply_to":"3ac371cc_3d194a89","updated":"2016-08-18 22:48:15.000000000","message":"Done","commit_id":"948e354fef29a97b49eb58d4d33463063ec6a0a3"},{"author":{"_account_id":6482,"name":"Steve Martinelli","email":"s.martinelli@gmail.com","username":"stevemar"},"change_message_id":"073cdbf3e1c83aecd437e7910ff4a3f6c5521523","unresolved":false,"context_lines":[{"line_number":6,"context_line":"features:"},{"line_number":7,"context_line":"  - Add keystone-manage ldap_prepare command, which"},{"line_number":8,"context_line":"    should be used when domain-specific LDAP backend is"},{"line_number":9,"context_line":"    used. It fixes an issue when queries like"},{"line_number":10,"context_line":"    \"list users\" fail by timeout."}],"source_content_type":"text/x-yaml","patch_set":8,"id":"3ac371cc_98d96c86","line":10,"range":{"start_line":9,"start_character":10,"end_line":10,"end_character":33},"updated":"2016-08-16 22:56:50.000000000","message":"\"Add ``keystone-manage ldap_prepare`` command, which is recommended to use when keystone is configured with a domain-specific LDAP backend. This command will populate a mapping table with all users from LDAP, it should be used when an LDAP is first configured, before LDAP users have authenticated. For more information see ``keystone-manage prepare_ldap --help``","commit_id":"948e354fef29a97b49eb58d4d33463063ec6a0a3"},{"author":{"_account_id":13478,"name":"Boris Bobrov","email":"b.bobrov@sap.com","username":"bbobrov"},"change_message_id":"9b2e6165de528f2e5ea85f16c6e492ccf2e60273","unresolved":false,"context_lines":[{"line_number":6,"context_line":"features:"},{"line_number":7,"context_line":"  - Add keystone-manage ldap_prepare command, which"},{"line_number":8,"context_line":"    should be used when domain-specific LDAP backend is"},{"line_number":9,"context_line":"    used. It fixes an issue when queries like"},{"line_number":10,"context_line":"    \"list users\" fail by timeout."}],"source_content_type":"text/x-yaml","patch_set":8,"id":"3ac371cc_f9e73144","line":10,"range":{"start_line":9,"start_character":10,"end_line":10,"end_character":33},"in_reply_to":"3ac371cc_98d96c86","updated":"2016-08-18 22:48:15.000000000","message":"Done","commit_id":"948e354fef29a97b49eb58d4d33463063ec6a0a3"}]}
