)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":22873,"name":"Martin Kopec","email":"mkopec@redhat.com","username":"mkopec"},"change_message_id":"b1e84d5ae2c51d4046afb21a5507a811116220f8","unresolved":true,"context_lines":[{"line_number":6,"context_line":""},{"line_number":7,"context_line":"Add domain id related config options in auth"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"This patch adds support for using domain_id, user_domain_id, and project_domain_id"},{"line_number":10,"context_line":"to authenticate the client. The motivations of this patch are:"},{"line_number":11,"context_line":"1. aligning tempest authentication variables with the ones stated in the official"},{"line_number":12,"context_line":"documentation (https://docs.openstack.org/python-openstackclient/latest/cli/authentication.html)."},{"line_number":13,"context_line":"2. supporting test domain isolation. Domain id can be used in `/v3/domains/{domain_id}` API"},{"line_number":14,"context_line":"to get a domain object without the need of listing all domains (`/v3/domains/name\u003d{domain_name}`)."},{"line_number":15,"context_line":"According to the default keystone policy, the former API call requires only domain_admin privilege,"},{"line_number":16,"context_line":"whereas the latter requires cloud_admin priviledge."},{"line_number":17,"context_line":""},{"line_number":18,"context_line":"Closes-Bug: 2028409"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":4,"id":"e67c3b42_83c2c991","line":15,"range":{"start_line":9,"start_character":70,"end_line":15,"end_character":78},"updated":"2023-08-22 14:47:56.000000000","message":"nit: lines too long","commit_id":"8fdfe0dd0bcc0058fc66765f37080541bf4b07c7"},{"author":{"_account_id":34543,"name":"Tianqi Xiao","email":"tianqi.xiao@canonical.com","username":"txiao"},"change_message_id":"922f015ef1e510e09559c55e219b3f1bdbdbb26c","unresolved":true,"context_lines":[{"line_number":6,"context_line":""},{"line_number":7,"context_line":"Add domain id related config options in auth"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"This patch adds support for using domain_id, user_domain_id, and project_domain_id"},{"line_number":10,"context_line":"to authenticate the client. The motivations of this patch are:"},{"line_number":11,"context_line":"1. aligning tempest authentication variables with the ones stated in the official"},{"line_number":12,"context_line":"documentation (https://docs.openstack.org/python-openstackclient/latest/cli/authentication.html)."},{"line_number":13,"context_line":"2. supporting test domain isolation. Domain id can be used in `/v3/domains/{domain_id}` API"},{"line_number":14,"context_line":"to get a domain object without the need of listing all domains (`/v3/domains/name\u003d{domain_name}`)."},{"line_number":15,"context_line":"According to the default keystone policy, the former API call requires only domain_admin privilege,"},{"line_number":16,"context_line":"whereas the latter requires cloud_admin priviledge."},{"line_number":17,"context_line":""},{"line_number":18,"context_line":"Closes-Bug: 2028409"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":4,"id":"67d65529_b004fbff","line":15,"range":{"start_line":9,"start_character":70,"end_line":15,"end_character":78},"in_reply_to":"e67c3b42_83c2c991","updated":"2023-08-24 14:42:12.000000000","message":"Thanks :) It is now updated.","commit_id":"8fdfe0dd0bcc0058fc66765f37080541bf4b07c7"},{"author":{"_account_id":27944,"name":"Andrea Ieri","email":"andrea.ieri@canonical.com","username":"aieri"},"change_message_id":"da5c2d55a6c94adb80b9db1e74c1e446402684a3","unresolved":true,"context_lines":[{"line_number":16,"context_line":"need of listing all domains (`/v3/domains/name\u003d{domain_name}`)."},{"line_number":17,"context_line":"According to the default charm-keystone policy.json, the former API"},{"line_number":18,"context_line":"call requires only domain_admin privilege, whereas the latter"},{"line_number":19,"context_line":"requires cloud_admin priviledge."},{"line_number":20,"context_line":""},{"line_number":21,"context_line":"Closes-Bug: 2028409"},{"line_number":22,"context_line":"Change-Id: I7b31b2b75c9d025fea8269a584be042c0c164821"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":5,"id":"24d4c26b_7d451500","line":19,"updated":"2023-09-06 22:34:22.000000000","message":"This needs to be updated after the discussion about upstream default policy vs keystone charm default policy.\nI\u0027d suggest rephrasing with something more generic, for example \"Domain id can be used in the `/v3/domains/{domain_id}` API to get a domain object without needing to list all domains (`/v3/domains/name\u003d{domain_name}`). This can be useful whenever the two APIs are configured to require different privilege levels.\"","commit_id":"67857dbd9ea63be87bb90fc1d1f6a0ca0f2f754e"}],"/PATCHSET_LEVEL":[{"author":{"_account_id":34543,"name":"Tianqi Xiao","email":"tianqi.xiao@canonical.com","username":"txiao"},"change_message_id":"511c5ed76b008df4b7e23a28c8849d54afbed73f","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":4,"id":"801a52db_27dbc1c0","updated":"2023-08-10 16:39:55.000000000","message":"Thanks Brian for your review. I have addressed your comments and submitted a new patch.","commit_id":"8fdfe0dd0bcc0058fc66765f37080541bf4b07c7"},{"author":{"_account_id":30674,"name":"Lukas Piwowarski","email":"lpiwowar@redhat.com","username":"lukas-piwowarski"},"change_message_id":"bbc4214f6fa8f6f7d915ac9bbfe2c911e6759f1d","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":4,"id":"c323bd5e_ed7cc746","updated":"2023-08-22 14:21:46.000000000","message":"Thanks for the patch! \n\nOverall this patch makes sense to me. We will be using the show_domain API call only when the domain_id is specified by the user. Therefore this should not influence the behavior of tempest for the users who want to keep using tempest \"the old way\".\n\nI\u0027m not sure whether the current default policy for listing domains really forbids the domain listing for project admin [1]. Even if I\u0027m right and the listing of domains is not forbidden for project admin then I can still imagine that this change can be helpful in deployments where the policy.yaml differs from the current default values.\n\nAlso, I think that in the linked bug old policy for listing domains is mentioned [2]. \n\nProbably someone else\u0027s opinion would be good here:).\n\n[1] https://docs.openstack.org/keystone/latest/configuration/samples/policy-yaml.html\n[2] https://codesearch.opendev.org/?q\u003d%22identity%3Alist_domains%22%3A%20%22rule%3Acloud_admin%22\u0026i\u003dnope\u0026literal\u003dnope\u0026files\u003d\u0026excludeFiles\u003d\u0026repos\u003d","commit_id":"8fdfe0dd0bcc0058fc66765f37080541bf4b07c7"},{"author":{"_account_id":22873,"name":"Martin Kopec","email":"mkopec@redhat.com","username":"mkopec"},"change_message_id":"b1e84d5ae2c51d4046afb21a5507a811116220f8","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":4,"id":"53fe13fc_ebbb05c2","updated":"2023-08-22 14:47:56.000000000","message":"looks good, CI is happy with the changes too, however, I\u0027m not really sure how the creds work here, I\u0027ll wait with +2 on feedback from Ghanshyam","commit_id":"8fdfe0dd0bcc0058fc66765f37080541bf4b07c7"},{"author":{"_account_id":34543,"name":"Tianqi Xiao","email":"tianqi.xiao@canonical.com","username":"txiao"},"change_message_id":"4d44cf5ffa3ca6e5feeee8d613033898e44393b6","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":4,"id":"320f2bd6_4be9c7fd","updated":"2023-08-10 19:43:39.000000000","message":"recheck","commit_id":"8fdfe0dd0bcc0058fc66765f37080541bf4b07c7"},{"author":{"_account_id":34543,"name":"Tianqi Xiao","email":"tianqi.xiao@canonical.com","username":"txiao"},"change_message_id":"922f015ef1e510e09559c55e219b3f1bdbdbb26c","unresolved":true,"context_lines":[],"source_content_type":"","patch_set":4,"id":"a40ed4f0_d1551cbc","in_reply_to":"c323bd5e_ed7cc746","updated":"2023-08-24 14:42:12.000000000","message":"Thanks for your review!\n\nAbout the policy, for charm-keystone, newer releases are still rendering policy from old templates, so cloud_admin privilege is still the default for listing domains. Please see my comments in the linked bug for more details.\n\nI also updated the commit message to highlight that the second point is for charm-keystone specifically.","commit_id":"8fdfe0dd0bcc0058fc66765f37080541bf4b07c7"},{"author":{"_account_id":27944,"name":"Andrea Ieri","email":"andrea.ieri@canonical.com","username":"aieri"},"change_message_id":"da5c2d55a6c94adb80b9db1e74c1e446402684a3","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":5,"id":"0f898270_91b8fc56","updated":"2023-09-06 22:34:22.000000000","message":"I have a small nit about the commit message but I\u0027m otherwise +1 on this change.\nI think there is value in aligning with other OpenStack API clients by allowing the use of domain IDs, and this is orthogonal to the discussions around how policies may be configured in a specific deployment and the work needed to make the new Keystone policies work with Tempest","commit_id":"67857dbd9ea63be87bb90fc1d1f6a0ca0f2f754e"},{"author":{"_account_id":8556,"name":"Ghanshyam Maan","display_name":"Ghanshyam Maan","email":"gmaan.os14@gmail.com","username":"ghanshyam"},"change_message_id":"84988153907f2397bca15fb92526922b8f84e79b","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":5,"id":"8101d9cd_94d4f95b","updated":"2023-08-25 18:39:48.000000000","message":"Question inline. I think fix need to be done at charm-keystone in their policy file if it is overriden to something else. it is working fine for default policy where project admin should be able to list the domain and the tempest use it. I am not sure what is cloud_admin and what all permissions it has but Tempest meant to be working for default policy only.","commit_id":"67857dbd9ea63be87bb90fc1d1f6a0ca0f2f754e"},{"author":{"_account_id":34543,"name":"Tianqi Xiao","email":"tianqi.xiao@canonical.com","username":"txiao"},"change_message_id":"366dd6b879a9dbb50b1799d4887ada16b1aef043","unresolved":true,"context_lines":[],"source_content_type":"","patch_set":5,"id":"d4fe0b8b_0ed0c0be","in_reply_to":"8101d9cd_94d4f95b","updated":"2023-08-28 15:45:46.000000000","message":"Thanks for your review. \n\nI agree that charm-keystone needs to align with upstream default policy and there\u0027s in fact already a bug opened for it: https://bugs.launchpad.net/charm-keystone/+bug/1847490. But even with the upstream policy, I doubt a regular project admin (not in admin project) would be able to list domains because that operation requires a system-scoped token.\n\nBeyond the policy discussion, I think this patch is still valid because keystone authentication contains *_domain_id variables but tempest currently doesn\u0027t support them.","commit_id":"67857dbd9ea63be87bb90fc1d1f6a0ca0f2f754e"},{"author":{"_account_id":8556,"name":"Ghanshyam Maan","display_name":"Ghanshyam Maan","email":"gmaan.os14@gmail.com","username":"ghanshyam"},"change_message_id":"8841f6ccf56089bd37801ea86ea9e0b21f89eaba","unresolved":true,"context_lines":[],"source_content_type":"","patch_set":5,"id":"5a7f8603_7641b4b5","in_reply_to":"d4fe0b8b_0ed0c0be","updated":"2023-09-02 01:28:03.000000000","message":"Keystone new policy permission are not going to work for tempest anyways and I think I mentioned before we need to updaet the keystone plocies to allow project admin to do that. I am going to work on this part in keystone.\n\nKeystone new policy does not work with any services line nova, cinder (except ironic which has system scope) so once we correct the keystone policy to allow for project users then tempest also should work as it is (how it is working with their old policies.)\n\nI will say meanwhile let\u0027s deploy keystone old policy in charm project also. And once I am ready with keystone policy modification to allow project users (most probably next cycle) then we can use their new policy.","commit_id":"67857dbd9ea63be87bb90fc1d1f6a0ca0f2f754e"},{"author":{"_account_id":8556,"name":"Ghanshyam Maan","display_name":"Ghanshyam Maan","email":"gmaan.os14@gmail.com","username":"ghanshyam"},"change_message_id":"d412c2826c41f0d7e14559ca1746b2d6f3ec87df","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":6,"id":"1d26a474_432e88af","updated":"2023-09-15 18:10:21.000000000","message":"re-voting with the same concern I raised earlier. let me fix the keystone policy for that and see if that solve your issue","commit_id":"8324c221eeea1eedf6d02a5832f8c2e13819a40a"},{"author":{"_account_id":27944,"name":"Andrea Ieri","email":"andrea.ieri@canonical.com","username":"aieri"},"change_message_id":"588b585421715f4e152b93a012a0784761d57ee5","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":6,"id":"09bea919_abd6a7c0","in_reply_to":"1d26a474_432e88af","updated":"2023-09-20 00:25:10.000000000","message":"There\u0027s something I don\u0027t understand. Our use case is being able to run the largest number of tests without affecting existing workloads. We were planning to achieve this by segregating tempest to a specific domain. Will the keystone policy fixes you are working on allow tempest to run with domain-level admin (not cloud-level or project-level admin) privileges?","commit_id":"8324c221eeea1eedf6d02a5832f8c2e13819a40a"}],"tempest/cmd/account_generator.py":[{"author":{"_account_id":30674,"name":"Lukas Piwowarski","email":"lpiwowar@redhat.com","username":"lukas-piwowarski"},"change_message_id":"bbc4214f6fa8f6f7d915ac9bbfe2c911e6759f1d","unresolved":true,"context_lines":[{"line_number":146,"context_line":"    if opts.identity_version \u003d\u003d 3:"},{"line_number":147,"context_line":"        admin_creds_dict[\u0027project_name\u0027] \u003d _project_name"},{"line_number":148,"context_line":"        admin_creds_dict[\u0027domain_name\u0027] \u003d opts.os_domain_name or \u0027Default\u0027"},{"line_number":149,"context_line":"        admin_creds_dict[\u0027domain_id\u0027] \u003d opts.os_domain_id"},{"line_number":150,"context_line":"    elif opts.identity_version \u003d\u003d 2:"},{"line_number":151,"context_line":"        admin_creds_dict[\u0027tenant_name\u0027] \u003d _project_name"},{"line_number":152,"context_line":"    admin_creds \u003d credentials_factory.get_credentials("}],"source_content_type":"text/x-python","patch_set":4,"id":"fae2efef_b7b511b8","line":149,"range":{"start_line":149,"start_character":8,"end_line":149,"end_character":57},"updated":"2023-08-22 14:21:46.000000000","message":"Just an idea: \n```\nopts.os_domain_id or \u0027default\u0027\n```","commit_id":"8fdfe0dd0bcc0058fc66765f37080541bf4b07c7"},{"author":{"_account_id":34543,"name":"Tianqi Xiao","email":"tianqi.xiao@canonical.com","username":"txiao"},"change_message_id":"922f015ef1e510e09559c55e219b3f1bdbdbb26c","unresolved":true,"context_lines":[{"line_number":146,"context_line":"    if opts.identity_version \u003d\u003d 3:"},{"line_number":147,"context_line":"        admin_creds_dict[\u0027project_name\u0027] \u003d _project_name"},{"line_number":148,"context_line":"        admin_creds_dict[\u0027domain_name\u0027] \u003d opts.os_domain_name or \u0027Default\u0027"},{"line_number":149,"context_line":"        admin_creds_dict[\u0027domain_id\u0027] \u003d opts.os_domain_id"},{"line_number":150,"context_line":"    elif opts.identity_version \u003d\u003d 2:"},{"line_number":151,"context_line":"        admin_creds_dict[\u0027tenant_name\u0027] \u003d _project_name"},{"line_number":152,"context_line":"    admin_creds \u003d credentials_factory.get_credentials("}],"source_content_type":"text/x-python","patch_set":4,"id":"2fef74a1_bb882cbb","line":149,"range":{"start_line":149,"start_character":8,"end_line":149,"end_character":57},"in_reply_to":"8954f796_5436fe35","updated":"2023-08-24 14:42:12.000000000","message":"I\u0027m keeping domain_id as `None` through out the code to avoid disagreement between domain name and id. The logic goes:\n1. If domain_id is provided (not `None`), we always use domain_id\n2. If doamin_id is empty, then we look for domain names. \n\nIf we set domain_id as default and the user only provides domain name in the tempest conf, this user-set attribute will be ignored.","commit_id":"8fdfe0dd0bcc0058fc66765f37080541bf4b07c7"},{"author":{"_account_id":30674,"name":"Lukas Piwowarski","email":"lpiwowar@redhat.com","username":"lukas-piwowarski"},"change_message_id":"86548c792df083c65489ebbc39dbd82d62799315","unresolved":true,"context_lines":[{"line_number":146,"context_line":"    if opts.identity_version \u003d\u003d 3:"},{"line_number":147,"context_line":"        admin_creds_dict[\u0027project_name\u0027] \u003d _project_name"},{"line_number":148,"context_line":"        admin_creds_dict[\u0027domain_name\u0027] \u003d opts.os_domain_name or \u0027Default\u0027"},{"line_number":149,"context_line":"        admin_creds_dict[\u0027domain_id\u0027] \u003d opts.os_domain_id"},{"line_number":150,"context_line":"    elif opts.identity_version \u003d\u003d 2:"},{"line_number":151,"context_line":"        admin_creds_dict[\u0027tenant_name\u0027] \u003d _project_name"},{"line_number":152,"context_line":"    admin_creds \u003d credentials_factory.get_credentials("}],"source_content_type":"text/x-python","patch_set":4,"id":"8954f796_5436fe35","line":149,"range":{"start_line":149,"start_character":8,"end_line":149,"end_character":57},"in_reply_to":"cffbd464_9c1b25ad","updated":"2023-08-22 14:56:57.000000000","message":"I think that \u0027default\u0027 is usually ID of the domain and \u0027Default\u0027 is the name.","commit_id":"8fdfe0dd0bcc0058fc66765f37080541bf4b07c7"},{"author":{"_account_id":22873,"name":"Martin Kopec","email":"mkopec@redhat.com","username":"mkopec"},"change_message_id":"b1e84d5ae2c51d4046afb21a5507a811116220f8","unresolved":true,"context_lines":[{"line_number":146,"context_line":"    if opts.identity_version \u003d\u003d 3:"},{"line_number":147,"context_line":"        admin_creds_dict[\u0027project_name\u0027] \u003d _project_name"},{"line_number":148,"context_line":"        admin_creds_dict[\u0027domain_name\u0027] \u003d opts.os_domain_name or \u0027Default\u0027"},{"line_number":149,"context_line":"        admin_creds_dict[\u0027domain_id\u0027] \u003d opts.os_domain_id"},{"line_number":150,"context_line":"    elif opts.identity_version \u003d\u003d 2:"},{"line_number":151,"context_line":"        admin_creds_dict[\u0027tenant_name\u0027] \u003d _project_name"},{"line_number":152,"context_line":"    admin_creds \u003d credentials_factory.get_credentials("}],"source_content_type":"text/x-python","patch_set":4,"id":"cffbd464_9c1b25ad","line":149,"range":{"start_line":149,"start_character":8,"end_line":149,"end_character":57},"in_reply_to":"fae2efef_b7b511b8","updated":"2023-08-22 14:47:56.000000000","message":"\u0027default\u0027 or \u0027Default\u0027? How do we know which one?","commit_id":"8fdfe0dd0bcc0058fc66765f37080541bf4b07c7"}],"tempest/common/identity.py":[{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"change_message_id":"95a3673b9ca97f3c8ae1cda04a3c669ad9e3a0d3","unresolved":true,"context_lines":[{"line_number":83,"context_line":"    try:"},{"line_number":84,"context_line":"        domain_id \u003d client.auth_provider.credentials.project_domain_id"},{"line_number":85,"context_line":"    except AttributeError:"},{"line_number":86,"context_line":"        domain_id \u003d None"},{"line_number":87,"context_line":"    try:"},{"line_number":88,"context_line":"        domain_name \u003d client.auth_provider.credentials.project_domain_name"},{"line_number":89,"context_line":"    except AttributeError:"}],"source_content_type":"text/x-python","patch_set":3,"id":"10dbfe3a_c1b196d0","line":86,"updated":"2023-08-10 14:53:47.000000000","message":"nit: if you put this try/except block after the domain_name one the change will seem smaller since it shows both blocks changing now","commit_id":"5b48230e41a9dc19a9a55cd3c0cf9e91a21c0b97"},{"author":{"_account_id":34543,"name":"Tianqi Xiao","email":"tianqi.xiao@canonical.com","username":"txiao"},"change_message_id":"511c5ed76b008df4b7e23a28c8849d54afbed73f","unresolved":true,"context_lines":[{"line_number":83,"context_line":"    try:"},{"line_number":84,"context_line":"        domain_id \u003d client.auth_provider.credentials.project_domain_id"},{"line_number":85,"context_line":"    except AttributeError:"},{"line_number":86,"context_line":"        domain_id \u003d None"},{"line_number":87,"context_line":"    try:"},{"line_number":88,"context_line":"        domain_name \u003d client.auth_provider.credentials.project_domain_name"},{"line_number":89,"context_line":"    except AttributeError:"}],"source_content_type":"text/x-python","patch_set":3,"id":"1390b21f_e8f8dcdc","line":86,"in_reply_to":"10dbfe3a_c1b196d0","updated":"2023-08-10 16:39:55.000000000","message":"Addressed.","commit_id":"5b48230e41a9dc19a9a55cd3c0cf9e91a21c0b97"},{"author":{"_account_id":34543,"name":"Tianqi Xiao","email":"tianqi.xiao@canonical.com","username":"txiao"},"change_message_id":"0bfd4d6848e72911351db044432b2fa2dcf0276c","unresolved":false,"context_lines":[{"line_number":83,"context_line":"    try:"},{"line_number":84,"context_line":"        domain_id \u003d client.auth_provider.credentials.project_domain_id"},{"line_number":85,"context_line":"    except AttributeError:"},{"line_number":86,"context_line":"        domain_id \u003d None"},{"line_number":87,"context_line":"    try:"},{"line_number":88,"context_line":"        domain_name \u003d client.auth_provider.credentials.project_domain_name"},{"line_number":89,"context_line":"    except AttributeError:"}],"source_content_type":"text/x-python","patch_set":3,"id":"c169e712_c29da301","line":86,"in_reply_to":"1390b21f_e8f8dcdc","updated":"2023-08-15 13:56:02.000000000","message":"Done","commit_id":"5b48230e41a9dc19a9a55cd3c0cf9e91a21c0b97"}],"tempest/config.py":[{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"change_message_id":"95a3673b9ca97f3c8ae1cda04a3c669ad9e3a0d3","unresolved":true,"context_lines":[{"line_number":210,"context_line":"                    \"keystone config options \""},{"line_number":211,"context_line":"                    \"keystone.conf:security_compliance.lockout_duration. \""},{"line_number":212,"context_line":"                    \"Setting this option will have no effect unless you also \""},{"line_number":213,"context_line":"                    \"set identity.user_lockout_failure_attempts.\"),"},{"line_number":214,"context_line":"    cfg.IntOpt(\u0027user_unique_last_password_count\u0027,"},{"line_number":215,"context_line":"               default\u003d2,"},{"line_number":216,"context_line":"               help\u003d\"The number of passwords for a user that must be unique \""}],"source_content_type":"text/x-python","patch_set":3,"id":"11c2b9d4_ff30e07e","line":213,"updated":"2023-08-10 14:53:47.000000000","message":"Duplicate option?","commit_id":"5b48230e41a9dc19a9a55cd3c0cf9e91a21c0b97"},{"author":{"_account_id":34543,"name":"Tianqi Xiao","email":"tianqi.xiao@canonical.com","username":"txiao"},"change_message_id":"511c5ed76b008df4b7e23a28c8849d54afbed73f","unresolved":true,"context_lines":[{"line_number":210,"context_line":"                    \"keystone config options \""},{"line_number":211,"context_line":"                    \"keystone.conf:security_compliance.lockout_duration. \""},{"line_number":212,"context_line":"                    \"Setting this option will have no effect unless you also \""},{"line_number":213,"context_line":"                    \"set identity.user_lockout_failure_attempts.\"),"},{"line_number":214,"context_line":"    cfg.IntOpt(\u0027user_unique_last_password_count\u0027,"},{"line_number":215,"context_line":"               default\u003d2,"},{"line_number":216,"context_line":"               help\u003d\"The number of passwords for a user that must be unique \""}],"source_content_type":"text/x-python","patch_set":3,"id":"144d9234_1036894c","line":213,"in_reply_to":"11c2b9d4_ff30e07e","updated":"2023-08-10 16:39:55.000000000","message":"Removed. No sure how this was added","commit_id":"5b48230e41a9dc19a9a55cd3c0cf9e91a21c0b97"},{"author":{"_account_id":34543,"name":"Tianqi Xiao","email":"tianqi.xiao@canonical.com","username":"txiao"},"change_message_id":"0bfd4d6848e72911351db044432b2fa2dcf0276c","unresolved":false,"context_lines":[{"line_number":210,"context_line":"                    \"keystone config options \""},{"line_number":211,"context_line":"                    \"keystone.conf:security_compliance.lockout_duration. \""},{"line_number":212,"context_line":"                    \"Setting this option will have no effect unless you also \""},{"line_number":213,"context_line":"                    \"set identity.user_lockout_failure_attempts.\"),"},{"line_number":214,"context_line":"    cfg.IntOpt(\u0027user_unique_last_password_count\u0027,"},{"line_number":215,"context_line":"               default\u003d2,"},{"line_number":216,"context_line":"               help\u003d\"The number of passwords for a user that must be unique \""}],"source_content_type":"text/x-python","patch_set":3,"id":"42b0e422_a9d5f959","line":213,"in_reply_to":"144d9234_1036894c","updated":"2023-08-15 13:56:02.000000000","message":"Done","commit_id":"5b48230e41a9dc19a9a55cd3c0cf9e91a21c0b97"}],"tempest/lib/auth.py":[{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"change_message_id":"95a3673b9ca97f3c8ae1cda04a3c669ad9e3a0d3","unresolved":true,"context_lines":[{"line_number":818,"context_line":"            if self.user_domain_id is None:"},{"line_number":819,"context_line":"                parent.__setattr__(\u0027user_domain_id\u0027, value)"},{"line_number":820,"context_line":"            if self.project_domain_id is None:"},{"line_number":821,"context_line":"                parent.__setattr__(\u0027project_domain_id\u0027, value)"},{"line_number":822,"context_line":"        if key \u003d\u003d \u0027domain_name\u0027:"},{"line_number":823,"context_line":"            if self.user_domain_name is None:"},{"line_number":824,"context_line":"                parent.__setattr__(\u0027user_domain_name\u0027, value)"}],"source_content_type":"text/x-python","patch_set":3,"id":"c07e46dd_9ee5dbe4","line":821,"updated":"2023-08-10 14:53:47.000000000","message":"This should go after the domain_name block as the comment above refers to that code","commit_id":"5b48230e41a9dc19a9a55cd3c0cf9e91a21c0b97"},{"author":{"_account_id":34543,"name":"Tianqi Xiao","email":"tianqi.xiao@canonical.com","username":"txiao"},"change_message_id":"0bfd4d6848e72911351db044432b2fa2dcf0276c","unresolved":false,"context_lines":[{"line_number":818,"context_line":"            if self.user_domain_id is None:"},{"line_number":819,"context_line":"                parent.__setattr__(\u0027user_domain_id\u0027, value)"},{"line_number":820,"context_line":"            if self.project_domain_id is None:"},{"line_number":821,"context_line":"                parent.__setattr__(\u0027project_domain_id\u0027, value)"},{"line_number":822,"context_line":"        if key \u003d\u003d \u0027domain_name\u0027:"},{"line_number":823,"context_line":"            if self.user_domain_name is None:"},{"line_number":824,"context_line":"                parent.__setattr__(\u0027user_domain_name\u0027, value)"}],"source_content_type":"text/x-python","patch_set":3,"id":"dafa9322_db6365be","line":821,"in_reply_to":"519407ba_4dba4ecc","updated":"2023-08-15 13:56:02.000000000","message":"Done","commit_id":"5b48230e41a9dc19a9a55cd3c0cf9e91a21c0b97"},{"author":{"_account_id":34543,"name":"Tianqi Xiao","email":"tianqi.xiao@canonical.com","username":"txiao"},"change_message_id":"511c5ed76b008df4b7e23a28c8849d54afbed73f","unresolved":true,"context_lines":[{"line_number":818,"context_line":"            if self.user_domain_id is None:"},{"line_number":819,"context_line":"                parent.__setattr__(\u0027user_domain_id\u0027, value)"},{"line_number":820,"context_line":"            if self.project_domain_id is None:"},{"line_number":821,"context_line":"                parent.__setattr__(\u0027project_domain_id\u0027, value)"},{"line_number":822,"context_line":"        if key \u003d\u003d \u0027domain_name\u0027:"},{"line_number":823,"context_line":"            if self.user_domain_name is None:"},{"line_number":824,"context_line":"                parent.__setattr__(\u0027user_domain_name\u0027, value)"}],"source_content_type":"text/x-python","patch_set":3,"id":"519407ba_4dba4ecc","line":821,"in_reply_to":"c07e46dd_9ee5dbe4","updated":"2023-08-10 16:39:55.000000000","message":"Edited comment to include domain_id","commit_id":"5b48230e41a9dc19a9a55cd3c0cf9e91a21c0b97"},{"author":{"_account_id":8556,"name":"Ghanshyam Maan","display_name":"Ghanshyam Maan","email":"gmaan.os14@gmail.com","username":"ghanshyam"},"change_message_id":"84988153907f2397bca15fb92526922b8f84e79b","unresolved":true,"context_lines":[{"line_number":814,"context_line":"            if self.user_domain_name is None:"},{"line_number":815,"context_line":"                parent.__setattr__(\u0027user_domain_name\u0027, value)"},{"line_number":816,"context_line":"        # support domain_id and domain_name coming from config"},{"line_number":817,"context_line":"        if key \u003d\u003d \u0027domain_id\u0027:"},{"line_number":818,"context_line":"            if self.user_domain_id is None:"},{"line_number":819,"context_line":"                parent.__setattr__(\u0027user_domain_id\u0027, value)"},{"line_number":820,"context_line":"            if self.project_domain_id is None:"},{"line_number":821,"context_line":"                parent.__setattr__(\u0027project_domain_id\u0027, value)"},{"line_number":822,"context_line":"        if key \u003d\u003d \u0027domain_name\u0027:"},{"line_number":823,"context_line":"            if self.user_domain_name is None:"},{"line_number":824,"context_line":"                parent.__setattr__(\u0027user_domain_name\u0027, value)"}],"source_content_type":"text/x-python","patch_set":5,"id":"14b96936_51fc3103","line":821,"range":{"start_line":817,"start_character":0,"end_line":821,"end_character":62},"updated":"2023-08-25 18:39:48.000000000","message":"we are setting these at L804/807 right?","commit_id":"67857dbd9ea63be87bb90fc1d1f6a0ca0f2f754e"},{"author":{"_account_id":34543,"name":"Tianqi Xiao","email":"tianqi.xiao@canonical.com","username":"txiao"},"change_message_id":"366dd6b879a9dbb50b1799d4887ada16b1aef043","unresolved":true,"context_lines":[{"line_number":814,"context_line":"            if self.user_domain_name is None:"},{"line_number":815,"context_line":"                parent.__setattr__(\u0027user_domain_name\u0027, value)"},{"line_number":816,"context_line":"        # support domain_id and domain_name coming from config"},{"line_number":817,"context_line":"        if key \u003d\u003d \u0027domain_id\u0027:"},{"line_number":818,"context_line":"            if self.user_domain_id is None:"},{"line_number":819,"context_line":"                parent.__setattr__(\u0027user_domain_id\u0027, value)"},{"line_number":820,"context_line":"            if self.project_domain_id is None:"},{"line_number":821,"context_line":"                parent.__setattr__(\u0027project_domain_id\u0027, value)"},{"line_number":822,"context_line":"        if key \u003d\u003d \u0027domain_name\u0027:"},{"line_number":823,"context_line":"            if self.user_domain_name is None:"},{"line_number":824,"context_line":"                parent.__setattr__(\u0027user_domain_name\u0027, value)"}],"source_content_type":"text/x-python","patch_set":5,"id":"f7608f9e_a3373136","line":821,"range":{"start_line":817,"start_character":0,"end_line":821,"end_character":62},"in_reply_to":"14b96936_51fc3103","updated":"2023-08-28 15:45:46.000000000","message":"I\u0027m not sure if I understand your question, but the chain of setting \\*_domain_id is the same as \\*_domain_name when some of them are not explicitly provided by the user. Explicit inputs from user is set at tempest/common/credentials_factory.py L#247/#250/#252","commit_id":"67857dbd9ea63be87bb90fc1d1f6a0ca0f2f754e"}],"tempest/lib/common/cred_client.py":[{"author":{"_account_id":30674,"name":"Lukas Piwowarski","email":"lpiwowar@redhat.com","username":"lukas-piwowarski"},"change_message_id":"bbc4214f6fa8f6f7d915ac9bbfe2c911e6759f1d","unresolved":true,"context_lines":[{"line_number":151,"context_line":"        self.domains_client \u003d domains_client"},{"line_number":152,"context_line":""},{"line_number":153,"context_line":"        try:"},{"line_number":154,"context_line":"            if domain_id:"},{"line_number":155,"context_line":"                # If domain_id is specified, get the domain object with the id"},{"line_number":156,"context_line":"                self.creds_domain \u003d self.domains_client.show_domain("},{"line_number":157,"context_line":"                    domain_id\u003ddomain_id)[\u0027domain\u0027]"},{"line_number":158,"context_line":"            else:"},{"line_number":159,"context_line":"                # Otherwise, list domains and filter them by the name."},{"line_number":160,"context_line":"                # Domain names must be unique, in any case a list is returned,"}],"source_content_type":"text/x-python","patch_set":4,"id":"b395eee6_575ef6af","line":157,"range":{"start_line":154,"start_character":12,"end_line":157,"end_character":50},"updated":"2023-08-22 14:21:46.000000000","message":"This makes sense. We will switch to listing the domain only when domain_id is not provided.","commit_id":"8fdfe0dd0bcc0058fc66765f37080541bf4b07c7"},{"author":{"_account_id":34543,"name":"Tianqi Xiao","email":"tianqi.xiao@canonical.com","username":"txiao"},"change_message_id":"922f015ef1e510e09559c55e219b3f1bdbdbb26c","unresolved":true,"context_lines":[{"line_number":151,"context_line":"        self.domains_client \u003d domains_client"},{"line_number":152,"context_line":""},{"line_number":153,"context_line":"        try:"},{"line_number":154,"context_line":"            if domain_id:"},{"line_number":155,"context_line":"                # If domain_id is specified, get the domain object with the id"},{"line_number":156,"context_line":"                self.creds_domain \u003d self.domains_client.show_domain("},{"line_number":157,"context_line":"                    domain_id\u003ddomain_id)[\u0027domain\u0027]"},{"line_number":158,"context_line":"            else:"},{"line_number":159,"context_line":"                # Otherwise, list domains and filter them by the name."},{"line_number":160,"context_line":"                # Domain names must be unique, in any case a list is returned,"}],"source_content_type":"text/x-python","patch_set":4,"id":"76059099_fb7743d6","line":157,"range":{"start_line":154,"start_character":12,"end_line":157,"end_character":50},"in_reply_to":"b395eee6_575ef6af","updated":"2023-08-24 14:42:12.000000000","message":"Yes, indeed. And if we set `default` as domain_id\u0027s default value, we will never enter the `else` condition block.","commit_id":"8fdfe0dd0bcc0058fc66765f37080541bf4b07c7"},{"author":{"_account_id":8556,"name":"Ghanshyam Maan","display_name":"Ghanshyam Maan","email":"gmaan.os14@gmail.com","username":"ghanshyam"},"change_message_id":"84988153907f2397bca15fb92526922b8f84e79b","unresolved":true,"context_lines":[{"line_number":150,"context_line":"                                            users_client, roles_client)"},{"line_number":151,"context_line":"        self.domains_client \u003d domains_client"},{"line_number":152,"context_line":""},{"line_number":153,"context_line":"        try:"},{"line_number":154,"context_line":"            if domain_id:"},{"line_number":155,"context_line":"                # If domain_id is specified, get the domain object with the id"},{"line_number":156,"context_line":"                self.creds_domain \u003d self.domains_client.show_domain("},{"line_number":157,"context_line":"                    domain_id\u003ddomain_id)[\u0027domain\u0027]"},{"line_number":158,"context_line":"            else:"},{"line_number":159,"context_line":"                # Otherwise, list domains and filter them by the name."},{"line_number":160,"context_line":"                # Domain names must be unique, in any case a list is returned,"},{"line_number":161,"context_line":"                # selecting the first (and only) element"},{"line_number":162,"context_line":"                self.creds_domain \u003d self.domains_client.list_domains("},{"line_number":163,"context_line":"                    name\u003ddomain_name)[\u0027domains\u0027][0]"},{"line_number":164,"context_line":"        except lib_exc.NotFound:"},{"line_number":165,"context_line":"            # TODO(andrea) we could probably create the domain on the fly"},{"line_number":166,"context_line":"            msg \u003d \"Requested domain %s could not be found\" % domain_name"}],"source_content_type":"text/x-python","patch_set":5,"id":"21040c8e_46e19505","line":163,"range":{"start_line":153,"start_character":0,"end_line":163,"end_character":51},"updated":"2023-08-25 18:39:48.000000000","message":"I am not sure if I am getting the problem and solution here. if domain_name is configured then it list domain and choose the first one (and domain name are unique). it is just you are calling show or list API. what problem it is solving?","commit_id":"67857dbd9ea63be87bb90fc1d1f6a0ca0f2f754e"},{"author":{"_account_id":34543,"name":"Tianqi Xiao","email":"tianqi.xiao@canonical.com","username":"txiao"},"change_message_id":"366dd6b879a9dbb50b1799d4887ada16b1aef043","unresolved":true,"context_lines":[{"line_number":150,"context_line":"                                            users_client, roles_client)"},{"line_number":151,"context_line":"        self.domains_client \u003d domains_client"},{"line_number":152,"context_line":""},{"line_number":153,"context_line":"        try:"},{"line_number":154,"context_line":"            if domain_id:"},{"line_number":155,"context_line":"                # If domain_id is specified, get the domain object with the id"},{"line_number":156,"context_line":"                self.creds_domain \u003d self.domains_client.show_domain("},{"line_number":157,"context_line":"                    domain_id\u003ddomain_id)[\u0027domain\u0027]"},{"line_number":158,"context_line":"            else:"},{"line_number":159,"context_line":"                # Otherwise, list domains and filter them by the name."},{"line_number":160,"context_line":"                # Domain names must be unique, in any case a list is returned,"},{"line_number":161,"context_line":"                # selecting the first (and only) element"},{"line_number":162,"context_line":"                self.creds_domain \u003d self.domains_client.list_domains("},{"line_number":163,"context_line":"                    name\u003ddomain_name)[\u0027domains\u0027][0]"},{"line_number":164,"context_line":"        except lib_exc.NotFound:"},{"line_number":165,"context_line":"            # TODO(andrea) we could probably create the domain on the fly"},{"line_number":166,"context_line":"            msg \u003d \"Requested domain %s could not be found\" % domain_name"}],"source_content_type":"text/x-python","patch_set":5,"id":"a3ab6892_e38aa351","line":163,"range":{"start_line":153,"start_character":0,"end_line":163,"end_character":51},"in_reply_to":"21040c8e_46e19505","updated":"2023-08-28 15:45:46.000000000","message":"This is to address the different permission level required to perform show_domain and list_domain (system vs {system or domain or project}):\n```\n# Show domain details.\n# GET  /v3/domains/{domain_id}\n# Intended scope(s): system, domain, project\n#\"identity:get_domain\": \"(role:reader and system_scope:all) or token.domain.id:%(target.domain.id)s or token.project.domain.id:%(target.domain.id)s\"\n\n# List domains.\n# GET  /v3/domains\n# Intended scope(s): system\n#\"identity:list_domains\": \"role:reader and system_scope:all\"\n```\n\nTempest should use minimal permission level where possible so the user can choose to better isolate the testing env from other parts of the cloud","commit_id":"67857dbd9ea63be87bb90fc1d1f6a0ca0f2f754e"},{"author":{"_account_id":8556,"name":"Ghanshyam Maan","display_name":"Ghanshyam Maan","email":"gmaan.os14@gmail.com","username":"ghanshyam"},"change_message_id":"8841f6ccf56089bd37801ea86ea9e0b21f89eaba","unresolved":true,"context_lines":[{"line_number":150,"context_line":"                                            users_client, roles_client)"},{"line_number":151,"context_line":"        self.domains_client \u003d domains_client"},{"line_number":152,"context_line":""},{"line_number":153,"context_line":"        try:"},{"line_number":154,"context_line":"            if domain_id:"},{"line_number":155,"context_line":"                # If domain_id is specified, get the domain object with the id"},{"line_number":156,"context_line":"                self.creds_domain \u003d self.domains_client.show_domain("},{"line_number":157,"context_line":"                    domain_id\u003ddomain_id)[\u0027domain\u0027]"},{"line_number":158,"context_line":"            else:"},{"line_number":159,"context_line":"                # Otherwise, list domains and filter them by the name."},{"line_number":160,"context_line":"                # Domain names must be unique, in any case a list is returned,"},{"line_number":161,"context_line":"                # selecting the first (and only) element"},{"line_number":162,"context_line":"                self.creds_domain \u003d self.domains_client.list_domains("},{"line_number":163,"context_line":"                    name\u003ddomain_name)[\u0027domains\u0027][0]"},{"line_number":164,"context_line":"        except lib_exc.NotFound:"},{"line_number":165,"context_line":"            # TODO(andrea) we could probably create the domain on the fly"},{"line_number":166,"context_line":"            msg \u003d \"Requested domain %s could not be found\" % domain_name"}],"source_content_type":"text/x-python","patch_set":5,"id":"f70227ca_29d0cecd","line":163,"range":{"start_line":153,"start_character":0,"end_line":163,"end_character":51},"in_reply_to":"a3ab6892_e38aa351","updated":"2023-09-02 01:28:03.000000000","message":"well keystone new policy permission are not going to work for tempest anyways and I think I mentioned before we need to updaet the keystone plocies to allow project admin to do that. I am going to work on this part in keystone.","commit_id":"67857dbd9ea63be87bb90fc1d1f6a0ca0f2f754e"}],"tempest/lib/common/dynamic_creds.py":[{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"change_message_id":"95a3673b9ca97f3c8ae1cda04a3c669ad9e3a0d3","unresolved":true,"context_lines":[{"line_number":68,"context_line":""},{"line_number":69,"context_line":"    def __init__(self, identity_version, name\u003dNone, network_resources\u003dNone,"},{"line_number":70,"context_line":"                 credentials_domain\u003dNone,"},{"line_number":71,"context_line":"                 admin_role\u003dNone, admin_creds\u003dNone,"},{"line_number":72,"context_line":"                 identity_admin_domain_scope\u003dFalse,"},{"line_number":73,"context_line":"                 identity_admin_role\u003d\u0027admin\u0027, extra_roles\u003dNone,"},{"line_number":74,"context_line":"                 neutron_available\u003dFalse, create_networks\u003dTrue,"}],"source_content_type":"text/x-python","patch_set":3,"id":"3c333900_daf2da70","line":71,"updated":"2023-08-10 14:53:47.000000000","message":"Seems like an unrelated change","commit_id":"5b48230e41a9dc19a9a55cd3c0cf9e91a21c0b97"},{"author":{"_account_id":34543,"name":"Tianqi Xiao","email":"tianqi.xiao@canonical.com","username":"txiao"},"change_message_id":"511c5ed76b008df4b7e23a28c8849d54afbed73f","unresolved":true,"context_lines":[{"line_number":68,"context_line":""},{"line_number":69,"context_line":"    def __init__(self, identity_version, name\u003dNone, network_resources\u003dNone,"},{"line_number":70,"context_line":"                 credentials_domain\u003dNone,"},{"line_number":71,"context_line":"                 admin_role\u003dNone, admin_creds\u003dNone,"},{"line_number":72,"context_line":"                 identity_admin_domain_scope\u003dFalse,"},{"line_number":73,"context_line":"                 identity_admin_role\u003d\u0027admin\u0027, extra_roles\u003dNone,"},{"line_number":74,"context_line":"                 neutron_available\u003dFalse, create_networks\u003dTrue,"}],"source_content_type":"text/x-python","patch_set":3,"id":"da7f5b3d_4b245a63","line":71,"in_reply_to":"3c333900_daf2da70","updated":"2023-08-10 16:39:55.000000000","message":"Change reverted","commit_id":"5b48230e41a9dc19a9a55cd3c0cf9e91a21c0b97"},{"author":{"_account_id":34543,"name":"Tianqi Xiao","email":"tianqi.xiao@canonical.com","username":"txiao"},"change_message_id":"0bfd4d6848e72911351db044432b2fa2dcf0276c","unresolved":false,"context_lines":[{"line_number":68,"context_line":""},{"line_number":69,"context_line":"    def __init__(self, identity_version, name\u003dNone, network_resources\u003dNone,"},{"line_number":70,"context_line":"                 credentials_domain\u003dNone,"},{"line_number":71,"context_line":"                 admin_role\u003dNone, admin_creds\u003dNone,"},{"line_number":72,"context_line":"                 identity_admin_domain_scope\u003dFalse,"},{"line_number":73,"context_line":"                 identity_admin_role\u003d\u0027admin\u0027, extra_roles\u003dNone,"},{"line_number":74,"context_line":"                 neutron_available\u003dFalse, create_networks\u003dTrue,"}],"source_content_type":"text/x-python","patch_set":3,"id":"02f4d8fb_4ae09daf","line":71,"in_reply_to":"da7f5b3d_4b245a63","updated":"2023-08-15 13:56:02.000000000","message":"Done","commit_id":"5b48230e41a9dc19a9a55cd3c0cf9e91a21c0b97"}],"tempest/lib/common/preprov_creds.py":[{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"change_message_id":"95a3673b9ca97f3c8ae1cda04a3c669ad9e3a0d3","unresolved":true,"context_lines":[{"line_number":78,"context_line":"    def __init__(self, identity_version, test_accounts_file,"},{"line_number":79,"context_line":"                 accounts_lock_dir, name\u003dNone,"},{"line_number":80,"context_line":"                 credentials_domain\u003dNone, admin_role\u003dNone,"},{"line_number":81,"context_line":"                 object_storage_operator_role\u003dNone,"},{"line_number":82,"context_line":"                 object_storage_reseller_admin_role\u003dNone, identity_uri\u003dNone):"},{"line_number":83,"context_line":"        super(PreProvisionedCredentialProvider, self).__init__("},{"line_number":84,"context_line":"            identity_version\u003didentity_version, name\u003dname,"}],"source_content_type":"text/x-python","patch_set":3,"id":"3d6b4fe2_d7dbaf01","line":81,"updated":"2023-08-10 14:53:47.000000000","message":"Seems like an unrelated change","commit_id":"5b48230e41a9dc19a9a55cd3c0cf9e91a21c0b97"},{"author":{"_account_id":34543,"name":"Tianqi Xiao","email":"tianqi.xiao@canonical.com","username":"txiao"},"change_message_id":"511c5ed76b008df4b7e23a28c8849d54afbed73f","unresolved":true,"context_lines":[{"line_number":78,"context_line":"    def __init__(self, identity_version, test_accounts_file,"},{"line_number":79,"context_line":"                 accounts_lock_dir, name\u003dNone,"},{"line_number":80,"context_line":"                 credentials_domain\u003dNone, admin_role\u003dNone,"},{"line_number":81,"context_line":"                 object_storage_operator_role\u003dNone,"},{"line_number":82,"context_line":"                 object_storage_reseller_admin_role\u003dNone, identity_uri\u003dNone):"},{"line_number":83,"context_line":"        super(PreProvisionedCredentialProvider, self).__init__("},{"line_number":84,"context_line":"            identity_version\u003didentity_version, name\u003dname,"}],"source_content_type":"text/x-python","patch_set":3,"id":"404f0f56_25dcc272","line":81,"in_reply_to":"3d6b4fe2_d7dbaf01","updated":"2023-08-10 16:39:55.000000000","message":"Change reverted","commit_id":"5b48230e41a9dc19a9a55cd3c0cf9e91a21c0b97"},{"author":{"_account_id":34543,"name":"Tianqi Xiao","email":"tianqi.xiao@canonical.com","username":"txiao"},"change_message_id":"0bfd4d6848e72911351db044432b2fa2dcf0276c","unresolved":false,"context_lines":[{"line_number":78,"context_line":"    def __init__(self, identity_version, test_accounts_file,"},{"line_number":79,"context_line":"                 accounts_lock_dir, name\u003dNone,"},{"line_number":80,"context_line":"                 credentials_domain\u003dNone, admin_role\u003dNone,"},{"line_number":81,"context_line":"                 object_storage_operator_role\u003dNone,"},{"line_number":82,"context_line":"                 object_storage_reseller_admin_role\u003dNone, identity_uri\u003dNone):"},{"line_number":83,"context_line":"        super(PreProvisionedCredentialProvider, self).__init__("},{"line_number":84,"context_line":"            identity_version\u003didentity_version, name\u003dname,"}],"source_content_type":"text/x-python","patch_set":3,"id":"59958ecc_9a8b0637","line":81,"in_reply_to":"404f0f56_25dcc272","updated":"2023-08-15 13:56:02.000000000","message":"Done","commit_id":"5b48230e41a9dc19a9a55cd3c0cf9e91a21c0b97"}]}
