)]}'
{"/PATCHSET_LEVEL":[{"author":{"_account_id":32962,"name":"Jakob Meng","email":"code@jakobmeng.de","username":"jakobmeng@web.de"},"change_message_id":"a0b932ededef67ed395c5e03d05154e9a87e2686","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":2,"id":"4481528e_afbeda1c","updated":"2022-04-20 12:10:03.000000000","message":"Thank you, Arx ^^","commit_id":"317580ac4ff3be17ef53982bf3798631b9728740"},{"author":{"_account_id":34208,"name":"Rafael Castillo","email":"rcastill@redhat.com","username":"rcastill"},"change_message_id":"58f302e4f9f34631fb74a507b940cbc7ccc916c7","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":4,"id":"42f76db2_19f05615","updated":"2022-04-25 15:25:05.000000000","message":"Looks good, just some small observations","commit_id":"fa7c03fc4591d8f0b589f3b066d34ffd4f016574"},{"author":{"_account_id":34208,"name":"Rafael Castillo","email":"rcastill@redhat.com","username":"rcastill"},"change_message_id":"c9a836c67beecbcc00ac8d8f9c8f088920ecf420","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":10,"id":"f812f055_977d9b01","updated":"2022-05-24 14:15:27.000000000","message":"Great job simplifying this module","commit_id":"d4db3a80d850952ff1ea6b46afe70fc3b659a591"},{"author":{"_account_id":34208,"name":"Rafael Castillo","email":"rcastill@redhat.com","username":"rcastill"},"change_message_id":"f869b86fc98e1077d687887c7d61e747a200bfac","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":12,"id":"87a7909a_3b33a461","updated":"2022-06-23 13:20:27.000000000","message":"Looks good, just one small thing.","commit_id":"bcca2efe1a7047168b9dc537b9f46271c4e37f9d"},{"author":{"_account_id":32962,"name":"Jakob Meng","email":"code@jakobmeng.de","username":"jakobmeng@web.de"},"change_message_id":"a1a721ec3396e8ae7fa8b68baabca9c6498661c5","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":12,"id":"efc2a0c9_269523d9","updated":"2022-06-23 13:13:04.000000000","message":"Readyyyyyyyyyyyyyyy 😊","commit_id":"bcca2efe1a7047168b9dc537b9f46271c4e37f9d"},{"author":{"_account_id":27900,"name":"Artem Goncharov","email":"artem.goncharov@gmail.com","username":"gtema"},"change_message_id":"4dbf5f6eb485265e211d918ce2a022e6ce5605a2","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":12,"id":"ead2a67e_92814814","updated":"2022-06-23 13:24:57.000000000","message":"maybe you join it with https://review.opendev.org/c/openstack/ansible-collections-openstack/+/845782 (as alternative implementation) to get rid of cloud layer completely?","commit_id":"bcca2efe1a7047168b9dc537b9f46271c4e37f9d"},{"author":{"_account_id":32962,"name":"Jakob Meng","email":"code@jakobmeng.de","username":"jakobmeng@web.de"},"change_message_id":"401871cf4b2e8ddf2713d15b774a942891448dfc","unresolved":true,"context_lines":[],"source_content_type":"","patch_set":12,"id":"28e49271_0e492f58","in_reply_to":"ead2a67e_92814814","updated":"2022-06-23 14:36:17.000000000","message":"Since SDK has this functionality in its cloud layer, why not (re)using it instead of reimplementing it here?","commit_id":"bcca2efe1a7047168b9dc537b9f46271c4e37f9d"}],"ci/roles/project_info/tasks/main.yml":[{"author":{"_account_id":10969,"name":"Shnaidman Sagi (Sergey)","display_name":"Shnaidman Sagi","email":"sshnaidm@redhat.com","username":"sergsh"},"change_message_id":"650efba3afb985e31e2b65e1f10e5054431a267f","unresolved":true,"context_lines":[{"line_number":1,"context_line":"---"},{"line_number":2,"context_line":"- name: List admin project"},{"line_number":3,"context_line":"  openstack.cloud.project_info:"},{"line_number":4,"context_line":"    cloud: \"{{ cloud }}\""}],"source_content_type":"text/x-yaml","patch_set":8,"id":"1a17cb2b_36a89609","line":1,"range":{"start_line":1,"start_character":1,"end_line":1,"end_character":3},"updated":"2022-05-18 16:26:58.000000000","message":"Please add here task with filters, it would discover the problem in the patch.","commit_id":"5943413cd622b5bdfd8a5e6a3ad29c5bf56cd4d1"},{"author":{"_account_id":32962,"name":"Jakob Meng","email":"code@jakobmeng.de","username":"jakobmeng@web.de"},"change_message_id":"077f22d07bbd6fa95d7887ce04f9692409f7cdd9","unresolved":false,"context_lines":[{"line_number":1,"context_line":"---"},{"line_number":2,"context_line":"- name: List admin project"},{"line_number":3,"context_line":"  openstack.cloud.project_info:"},{"line_number":4,"context_line":"    cloud: \"{{ cloud }}\""}],"source_content_type":"text/x-yaml","patch_set":8,"id":"3524d81e_a608ba91","line":1,"range":{"start_line":1,"start_character":1,"end_line":1,"end_character":3},"in_reply_to":"1a17cb2b_36a89609","updated":"2022-06-23 13:12:38.000000000","message":"Done","commit_id":"5943413cd622b5bdfd8a5e6a3ad29c5bf56cd4d1"},{"author":{"_account_id":10969,"name":"Shnaidman Sagi (Sergey)","display_name":"Shnaidman Sagi","email":"sshnaidm@redhat.com","username":"sergsh"},"change_message_id":"e7c37f697dea2be879422dbf0acff315530e5433","unresolved":true,"context_lines":[{"line_number":39,"context_line":"      - project_domain.openstack_projects | length \u003d\u003d 1"},{"line_number":40,"context_line":""},{"line_number":41,"context_line":"- name: Assert fields on SDK 1.*"},{"line_number":42,"context_line":"  when: sdk_version is version(1.0, \u0027\u003e\u003d\u0027)"},{"line_number":43,"context_line":"  assert:"},{"line_number":44,"context_line":"    that:"},{"line_number":45,"context_line":"      - \u0027[\"description\", \"domain_id\", \"is_domain\", \"is_enabled\", \"options\","}],"source_content_type":"text/x-yaml","patch_set":9,"id":"63544598_dd0e237f","line":42,"range":{"start_line":42,"start_character":0,"end_line":42,"end_character":41},"updated":"2022-05-20 10:47:43.000000000","message":"It won\u0027t work now, because master SDK is built as \"0.62\", not \"1.0.0\". We don\u0027t need to limit it in master branch.","commit_id":"6cf3399c140dc7fd5d6386d3962b8b53973b15a6"},{"author":{"_account_id":8367,"name":"Arx Cruz","email":"arxcruz@redhat.com","username":"arxcruz"},"change_message_id":"8e6867a92e7438b15d26e228abc94e025b73d824","unresolved":false,"context_lines":[{"line_number":39,"context_line":"      - project_domain.openstack_projects | length \u003d\u003d 1"},{"line_number":40,"context_line":""},{"line_number":41,"context_line":"- name: Assert fields on SDK 1.*"},{"line_number":42,"context_line":"  when: sdk_version is version(1.0, \u0027\u003e\u003d\u0027)"},{"line_number":43,"context_line":"  assert:"},{"line_number":44,"context_line":"    that:"},{"line_number":45,"context_line":"      - \u0027[\"description\", \"domain_id\", \"is_domain\", \"is_enabled\", \"options\","}],"source_content_type":"text/x-yaml","patch_set":9,"id":"15743ac9_a331bec3","line":42,"range":{"start_line":42,"start_character":0,"end_line":42,"end_character":41},"in_reply_to":"63544598_dd0e237f","updated":"2022-05-23 07:50:34.000000000","message":"Ack","commit_id":"6cf3399c140dc7fd5d6386d3962b8b53973b15a6"}],"plugins/modules/project_info.py":[{"author":{"_account_id":32962,"name":"Jakob Meng","email":"code@jakobmeng.de","username":"jakobmeng@web.de"},"change_message_id":"a0b932ededef67ed395c5e03d05154e9a87e2686","unresolved":true,"context_lines":[{"line_number":138,"context_line":""},{"line_number":139,"context_line":"        if domain:"},{"line_number":140,"context_line":"            try:"},{"line_number":141,"context_line":"                domains \u003d self.conn.identity.domains()"},{"line_number":142,"context_line":"                domains \u003d [d for d in domains"},{"line_number":143,"context_line":"                           if d[\u0027id\u0027] \u003d\u003d domain or d[\u0027name\u0027] \u003d\u003d domain]"},{"line_number":144,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"502e4f9f_2721656f","line":141,"updated":"2022-04-20 12:10:03.000000000","message":"How about find_domain instead of listing all domains?","commit_id":"317580ac4ff3be17ef53982bf3798631b9728740"},{"author":{"_account_id":32962,"name":"Jakob Meng","email":"code@jakobmeng.de","username":"jakobmeng@web.de"},"change_message_id":"6db535cfc8c335400b7e8070f62f3111cf58b1ee","unresolved":false,"context_lines":[{"line_number":138,"context_line":""},{"line_number":139,"context_line":"        if domain:"},{"line_number":140,"context_line":"            try:"},{"line_number":141,"context_line":"                domains \u003d self.conn.identity.domains()"},{"line_number":142,"context_line":"                domains \u003d [d for d in domains"},{"line_number":143,"context_line":"                           if d[\u0027id\u0027] \u003d\u003d domain or d[\u0027name\u0027] \u003d\u003d domain]"},{"line_number":144,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"9aedb681_8fc42b4c","line":141,"in_reply_to":"502e4f9f_2721656f","updated":"2022-05-04 09:08:53.000000000","message":"Done","commit_id":"317580ac4ff3be17ef53982bf3798631b9728740"},{"author":{"_account_id":32962,"name":"Jakob Meng","email":"code@jakobmeng.de","username":"jakobmeng@web.de"},"change_message_id":"a0b932ededef67ed395c5e03d05154e9a87e2686","unresolved":true,"context_lines":[{"line_number":147,"context_line":"                else:"},{"line_number":148,"context_line":"                    self.fail_json(msg\u003d\u0027Domain name or ID does not exist\u0027)"},{"line_number":149,"context_line":""},{"line_number":150,"context_line":"            except Exception:"},{"line_number":151,"context_line":"                # Probably user doesn\u0027t have authorization"},{"line_number":152,"context_line":"                self.fail_json("},{"line_number":153,"context_line":"                    msg\u003d\u0027You are not authorized to perform this request\u0027)"}],"source_content_type":"text/x-python","patch_set":2,"id":"d6cf031c_b502ec5f","line":150,"updated":"2022-04-20 12:10:03.000000000","message":"Not every exception might be caused by missing authorization, so failing with \"not authorized\" could be misleading.\n\nSince we dont want to make assumptions about user setups we should probably not try to catch exceptions here.","commit_id":"317580ac4ff3be17ef53982bf3798631b9728740"},{"author":{"_account_id":32962,"name":"Jakob Meng","email":"code@jakobmeng.de","username":"jakobmeng@web.de"},"change_message_id":"6db535cfc8c335400b7e8070f62f3111cf58b1ee","unresolved":false,"context_lines":[{"line_number":147,"context_line":"                else:"},{"line_number":148,"context_line":"                    self.fail_json(msg\u003d\u0027Domain name or ID does not exist\u0027)"},{"line_number":149,"context_line":""},{"line_number":150,"context_line":"            except Exception:"},{"line_number":151,"context_line":"                # Probably user doesn\u0027t have authorization"},{"line_number":152,"context_line":"                self.fail_json("},{"line_number":153,"context_line":"                    msg\u003d\u0027You are not authorized to perform this request\u0027)"}],"source_content_type":"text/x-python","patch_set":2,"id":"4f013e83_bd6ff03e","line":150,"in_reply_to":"d6cf031c_b502ec5f","updated":"2022-05-04 09:08:53.000000000","message":"Done","commit_id":"317580ac4ff3be17ef53982bf3798631b9728740"},{"author":{"_account_id":32962,"name":"Jakob Meng","email":"code@jakobmeng.de","username":"jakobmeng@web.de"},"change_message_id":"a0b932ededef67ed395c5e03d05154e9a87e2686","unresolved":true,"context_lines":[{"line_number":152,"context_line":"                self.fail_json("},{"line_number":153,"context_line":"                    msg\u003d\u0027You are not authorized to perform this request\u0027)"},{"line_number":154,"context_line":""},{"line_number":155,"context_line":"        projects \u003d self.identity.projects(**filters)"},{"line_number":156,"context_line":"        projects \u003d [p.to_dict(computed\u003dFalse) for p in projects]"},{"line_number":157,"context_line":"        if name:"},{"line_number":158,"context_line":"            projects \u003d [p for p in projects"}],"source_content_type":"text/x-python","patch_set":2,"id":"a6923c51_f626970d","line":155,"updated":"2022-04-20 12:10:03.000000000","message":"How about calling find_project(name_or_id\u003dname,...) if name is not None else returning projects(**filters)? Might be more efficient than retrieving all projects and then filtering locally.","commit_id":"317580ac4ff3be17ef53982bf3798631b9728740"},{"author":{"_account_id":32962,"name":"Jakob Meng","email":"code@jakobmeng.de","username":"jakobmeng@web.de"},"change_message_id":"6db535cfc8c335400b7e8070f62f3111cf58b1ee","unresolved":false,"context_lines":[{"line_number":152,"context_line":"                self.fail_json("},{"line_number":153,"context_line":"                    msg\u003d\u0027You are not authorized to perform this request\u0027)"},{"line_number":154,"context_line":""},{"line_number":155,"context_line":"        projects \u003d self.identity.projects(**filters)"},{"line_number":156,"context_line":"        projects \u003d [p.to_dict(computed\u003dFalse) for p in projects]"},{"line_number":157,"context_line":"        if name:"},{"line_number":158,"context_line":"            projects \u003d [p for p in projects"}],"source_content_type":"text/x-python","patch_set":2,"id":"fe10df06_16d9e392","line":155,"in_reply_to":"a6923c51_f626970d","updated":"2022-05-04 09:08:53.000000000","message":"Irrelevant since we stick to cloud layer.","commit_id":"317580ac4ff3be17ef53982bf3798631b9728740"},{"author":{"_account_id":34208,"name":"Rafael Castillo","email":"rcastill@redhat.com","username":"rcastill"},"change_message_id":"58f302e4f9f34631fb74a507b940cbc7ccc916c7","unresolved":true,"context_lines":[{"line_number":139,"context_line":"        if domain:"},{"line_number":140,"context_line":"            domain \u003d self.conn.identity.find_domain(domain)"},{"line_number":141,"context_line":""},{"line_number":142,"context_line":"            if(domain):"},{"line_number":143,"context_line":"                domain \u003d domain.to_dict(computed\u003dFalse)"},{"line_number":144,"context_line":"                filters[\u0027domain_id\u0027] \u003d domain[\u0027id\u0027]"},{"line_number":145,"context_line":"            else:"}],"source_content_type":"text/x-python","patch_set":4,"id":"9708e095_7025f036","line":142,"updated":"2022-04-25 15:25:05.000000000","message":"Don\u0027t need parens here","commit_id":"fa7c03fc4591d8f0b589f3b066d34ffd4f016574"},{"author":{"_account_id":32962,"name":"Jakob Meng","email":"code@jakobmeng.de","username":"jakobmeng@web.de"},"change_message_id":"7a81401b5c3d9028ceb7a10a277216844aef0c43","unresolved":false,"context_lines":[{"line_number":139,"context_line":"        if domain:"},{"line_number":140,"context_line":"            domain \u003d self.conn.identity.find_domain(domain)"},{"line_number":141,"context_line":""},{"line_number":142,"context_line":"            if(domain):"},{"line_number":143,"context_line":"                domain \u003d domain.to_dict(computed\u003dFalse)"},{"line_number":144,"context_line":"                filters[\u0027domain_id\u0027] \u003d domain[\u0027id\u0027]"},{"line_number":145,"context_line":"            else:"}],"source_content_type":"text/x-python","patch_set":4,"id":"bc325332_7c6939f7","line":142,"in_reply_to":"9708e095_7025f036","updated":"2022-04-27 10:14:10.000000000","message":"Ack","commit_id":"fa7c03fc4591d8f0b589f3b066d34ffd4f016574"},{"author":{"_account_id":34208,"name":"Rafael Castillo","email":"rcastill@redhat.com","username":"rcastill"},"change_message_id":"58f302e4f9f34631fb74a507b940cbc7ccc916c7","unresolved":true,"context_lines":[{"line_number":140,"context_line":"            domain \u003d self.conn.identity.find_domain(domain)"},{"line_number":141,"context_line":""},{"line_number":142,"context_line":"            if(domain):"},{"line_number":143,"context_line":"                domain \u003d domain.to_dict(computed\u003dFalse)"},{"line_number":144,"context_line":"                filters[\u0027domain_id\u0027] \u003d domain[\u0027id\u0027]"},{"line_number":145,"context_line":"            else:"},{"line_number":146,"context_line":"                self.fail_json(msg\u003d\u0027Domain name or ID does not exist\u0027)"}],"source_content_type":"text/x-python","patch_set":4,"id":"5bc10965_53ac4621","line":143,"updated":"2022-04-25 15:25:05.000000000","message":"Don\u0027t need to convert to dict here since we\u0027re not returning the domain.","commit_id":"fa7c03fc4591d8f0b589f3b066d34ffd4f016574"},{"author":{"_account_id":32962,"name":"Jakob Meng","email":"code@jakobmeng.de","username":"jakobmeng@web.de"},"change_message_id":"7a81401b5c3d9028ceb7a10a277216844aef0c43","unresolved":false,"context_lines":[{"line_number":140,"context_line":"            domain \u003d self.conn.identity.find_domain(domain)"},{"line_number":141,"context_line":""},{"line_number":142,"context_line":"            if(domain):"},{"line_number":143,"context_line":"                domain \u003d domain.to_dict(computed\u003dFalse)"},{"line_number":144,"context_line":"                filters[\u0027domain_id\u0027] \u003d domain[\u0027id\u0027]"},{"line_number":145,"context_line":"            else:"},{"line_number":146,"context_line":"                self.fail_json(msg\u003d\u0027Domain name or ID does not exist\u0027)"}],"source_content_type":"text/x-python","patch_set":4,"id":"29a0e9cd_3209c1b0","line":143,"in_reply_to":"5bc10965_53ac4621","updated":"2022-04-27 10:14:10.000000000","message":"Ack","commit_id":"fa7c03fc4591d8f0b589f3b066d34ffd4f016574"},{"author":{"_account_id":32962,"name":"Jakob Meng","email":"code@jakobmeng.de","username":"jakobmeng@web.de"},"change_message_id":"7a81401b5c3d9028ceb7a10a277216844aef0c43","unresolved":true,"context_lines":[{"line_number":20,"context_line":"     description:"},{"line_number":21,"context_line":"        - Name or ID of the domain containing the project if the cloud supports domains"},{"line_number":22,"context_line":"     type: str"},{"line_number":23,"context_line":"   filters:"},{"line_number":24,"context_line":"     description:"},{"line_number":25,"context_line":"        - A dictionary of meta data to use for further filtering.  Elements of"},{"line_number":26,"context_line":"          this dictionary may be additional dictionaries."}],"source_content_type":"text/x-python","patch_set":5,"id":"47eaf813_133df22b","line":23,"updated":"2022-04-27 10:14:10.000000000","message":"Previously, filters were applied after retrieving all projects. This patch turns filters into query parameters. This changes the behavior of the module.\n\nWe could also simply stick to the old functionality (self.conn.search_projects instead of self.conn.identity.projects) without loosing anything?!? \n\nWhat do we gain here?","commit_id":"186bf0e4636fbcea2c3d231c601378e7a23ccf2a"},{"author":{"_account_id":32962,"name":"Jakob Meng","email":"code@jakobmeng.de","username":"jakobmeng@web.de"},"change_message_id":"fb2fca63399eb09a596e7d1443e81d52f617bb8d","unresolved":true,"context_lines":[{"line_number":20,"context_line":"     description:"},{"line_number":21,"context_line":"        - Name or ID of the domain containing the project if the cloud supports domains"},{"line_number":22,"context_line":"     type: str"},{"line_number":23,"context_line":"   filters:"},{"line_number":24,"context_line":"     description:"},{"line_number":25,"context_line":"        - A dictionary of meta data to use for further filtering.  Elements of"},{"line_number":26,"context_line":"          this dictionary may be additional dictionaries."}],"source_content_type":"text/x-python","patch_set":5,"id":"e468dc37_1f3e21dd","line":23,"in_reply_to":"1b9fce7b_a08b2b66","updated":"2022-04-27 11:27:08.000000000","message":"The most user friendly decision would be to stick to the cloud layer function as before because search_projects() do the same as the proxy layer identity.projects() plus it implements filters.\n\nhttps://opendev.org/openstack/openstacksdk/src/branch/master/openstack/cloud/_identity.py#L63","commit_id":"186bf0e4636fbcea2c3d231c601378e7a23ccf2a"},{"author":{"_account_id":32962,"name":"Jakob Meng","email":"code@jakobmeng.de","username":"jakobmeng@web.de"},"change_message_id":"380449c7ce387fdc009525a264d8a9ca17696086","unresolved":true,"context_lines":[{"line_number":20,"context_line":"     description:"},{"line_number":21,"context_line":"        - Name or ID of the domain containing the project if the cloud supports domains"},{"line_number":22,"context_line":"     type: str"},{"line_number":23,"context_line":"   filters:"},{"line_number":24,"context_line":"     description:"},{"line_number":25,"context_line":"        - A dictionary of meta data to use for further filtering.  Elements of"},{"line_number":26,"context_line":"          this dictionary may be additional dictionaries."}],"source_content_type":"text/x-python","patch_set":5,"id":"1b9fce7b_a08b2b66","line":23,"in_reply_to":"47eaf813_133df22b","updated":"2022-04-27 10:14:21.000000000","message":"If we decide to use query params instead of filters then we should probably consider to update the module argument specs. For example, we could drop the filters argument and add a new arg which resembles query args. Doing so would cause the user code to break which is what we want because then its easier for users to see that they have to update their code.","commit_id":"186bf0e4636fbcea2c3d231c601378e7a23ccf2a"},{"author":{"_account_id":32962,"name":"Jakob Meng","email":"code@jakobmeng.de","username":"jakobmeng@web.de"},"change_message_id":"6db535cfc8c335400b7e8070f62f3111cf58b1ee","unresolved":false,"context_lines":[{"line_number":20,"context_line":"     description:"},{"line_number":21,"context_line":"        - Name or ID of the domain containing the project if the cloud supports domains"},{"line_number":22,"context_line":"     type: str"},{"line_number":23,"context_line":"   filters:"},{"line_number":24,"context_line":"     description:"},{"line_number":25,"context_line":"        - A dictionary of meta data to use for further filtering.  Elements of"},{"line_number":26,"context_line":"          this dictionary may be additional dictionaries."}],"source_content_type":"text/x-python","patch_set":5,"id":"72277195_b4565de7","line":23,"in_reply_to":"e468dc37_1f3e21dd","updated":"2022-05-04 09:08:53.000000000","message":"Done","commit_id":"186bf0e4636fbcea2c3d231c601378e7a23ccf2a"},{"author":{"_account_id":32962,"name":"Jakob Meng","email":"code@jakobmeng.de","username":"jakobmeng@web.de"},"change_message_id":"6db535cfc8c335400b7e8070f62f3111cf58b1ee","unresolved":false,"context_lines":[{"line_number":20,"context_line":"     description:"},{"line_number":21,"context_line":"        - Name or ID of the domain containing the project if the cloud supports domains"},{"line_number":22,"context_line":"     type: str"},{"line_number":23,"context_line":"   filters:"},{"line_number":24,"context_line":"     description:"},{"line_number":25,"context_line":"        - A dictionary of meta data to use for further filtering.  Elements of"},{"line_number":26,"context_line":"          this dictionary may be additional dictionaries."}],"source_content_type":"text/x-python","patch_set":5,"id":"91ba2ac4_2eb158ad","line":23,"in_reply_to":"e468dc37_1f3e21dd","updated":"2022-05-04 09:08:53.000000000","message":"Done","commit_id":"186bf0e4636fbcea2c3d231c601378e7a23ccf2a"},{"author":{"_account_id":32962,"name":"Jakob Meng","email":"code@jakobmeng.de","username":"jakobmeng@web.de"},"change_message_id":"7a81401b5c3d9028ceb7a10a277216844aef0c43","unresolved":true,"context_lines":[{"line_number":22,"context_line":"     type: str"},{"line_number":23,"context_line":"   filters:"},{"line_number":24,"context_line":"     description:"},{"line_number":25,"context_line":"        - A dictionary of meta data to use for further filtering.  Elements of"},{"line_number":26,"context_line":"          this dictionary may be additional dictionaries."},{"line_number":27,"context_line":"     type: dict"},{"line_number":28,"context_line":"requirements:"}],"source_content_type":"text/x-python","patch_set":5,"id":"eea02c9f_3003daee","line":25,"updated":"2022-04-27 10:14:10.000000000","message":"Please update description as it is no longer up to date.","commit_id":"186bf0e4636fbcea2c3d231c601378e7a23ccf2a"},{"author":{"_account_id":32962,"name":"Jakob Meng","email":"code@jakobmeng.de","username":"jakobmeng@web.de"},"change_message_id":"077f22d07bbd6fa95d7887ce04f9692409f7cdd9","unresolved":false,"context_lines":[{"line_number":22,"context_line":"     type: str"},{"line_number":23,"context_line":"   filters:"},{"line_number":24,"context_line":"     description:"},{"line_number":25,"context_line":"        - A dictionary of meta data to use for further filtering.  Elements of"},{"line_number":26,"context_line":"          this dictionary may be additional dictionaries."},{"line_number":27,"context_line":"     type: dict"},{"line_number":28,"context_line":"requirements:"}],"source_content_type":"text/x-python","patch_set":5,"id":"0e8e808b_ff5cf997","line":25,"in_reply_to":"5bf0341f_2782a342","updated":"2022-06-23 13:12:38.000000000","message":"Done","commit_id":"186bf0e4636fbcea2c3d231c601378e7a23ccf2a"},{"author":{"_account_id":32962,"name":"Jakob Meng","email":"code@jakobmeng.de","username":"jakobmeng@web.de"},"change_message_id":"6db535cfc8c335400b7e8070f62f3111cf58b1ee","unresolved":true,"context_lines":[{"line_number":22,"context_line":"     type: str"},{"line_number":23,"context_line":"   filters:"},{"line_number":24,"context_line":"     description:"},{"line_number":25,"context_line":"        - A dictionary of meta data to use for further filtering.  Elements of"},{"line_number":26,"context_line":"          this dictionary may be additional dictionaries."},{"line_number":27,"context_line":"     type: dict"},{"line_number":28,"context_line":"requirements:"}],"source_content_type":"text/x-python","patch_set":5,"id":"5bf0341f_2782a342","line":25,"in_reply_to":"eea02c9f_3003daee","updated":"2022-05-04 09:08:53.000000000","message":"Please remove the word \u0027further\u0027 and add that the new SDK passes items of this filters arg as query args to OpenStack\u0027s Identity API.","commit_id":"186bf0e4636fbcea2c3d231c601378e7a23ccf2a"},{"author":{"_account_id":32962,"name":"Jakob Meng","email":"code@jakobmeng.de","username":"jakobmeng@web.de"},"change_message_id":"6db535cfc8c335400b7e8070f62f3111cf58b1ee","unresolved":true,"context_lines":[{"line_number":64,"context_line":"    name: demoproject"},{"line_number":65,"context_line":"    domain: admindomain"},{"line_number":66,"context_line":"    filters:"},{"line_number":67,"context_line":"      enabled: False"},{"line_number":68,"context_line":"  register: result"},{"line_number":69,"context_line":"- debug:"},{"line_number":70,"context_line":"    msg: \"{{ result.openstack_projects }}\""}],"source_content_type":"text/x-python","patch_set":7,"id":"86df4e83_b66925ad","line":67,"updated":"2022-05-04 09:08:53.000000000","message":"Please change this example to is_enabled, because enabled does not work.","commit_id":"0ea53fbab75bf7a09b2c296f378017911f36f21a"},{"author":{"_account_id":32962,"name":"Jakob Meng","email":"code@jakobmeng.de","username":"jakobmeng@web.de"},"change_message_id":"a4d76c519dc6ff990a24043cbb01cbc584249d47","unresolved":false,"context_lines":[{"line_number":64,"context_line":"    name: demoproject"},{"line_number":65,"context_line":"    domain: admindomain"},{"line_number":66,"context_line":"    filters:"},{"line_number":67,"context_line":"      enabled: False"},{"line_number":68,"context_line":"  register: result"},{"line_number":69,"context_line":"- debug:"},{"line_number":70,"context_line":"    msg: \"{{ result.openstack_projects }}\""}],"source_content_type":"text/x-python","patch_set":7,"id":"0c4f0dee_81850f5e","line":67,"in_reply_to":"86df4e83_b66925ad","updated":"2022-06-23 13:05:29.000000000","message":"Done","commit_id":"0ea53fbab75bf7a09b2c296f378017911f36f21a"},{"author":{"_account_id":32962,"name":"Jakob Meng","email":"code@jakobmeng.de","username":"jakobmeng@web.de"},"change_message_id":"6db535cfc8c335400b7e8070f62f3111cf58b1ee","unresolved":true,"context_lines":[{"line_number":74,"context_line":"RETURN \u003d \u0027\u0027\u0027"},{"line_number":75,"context_line":"openstack_projects:"},{"line_number":76,"context_line":"    description: has all the OpenStack information about projects"},{"line_number":77,"context_line":"    returned: always, but can be null"},{"line_number":78,"context_line":"    type: complex"},{"line_number":79,"context_line":"    contains:"},{"line_number":80,"context_line":"        id:"}],"source_content_type":"text/x-python","patch_set":7,"id":"a75d04d0_47913eb9","line":77,"updated":"2022-05-04 09:08:53.000000000","message":"Cannot be null. But can be empty.","commit_id":"0ea53fbab75bf7a09b2c296f378017911f36f21a"},{"author":{"_account_id":32962,"name":"Jakob Meng","email":"code@jakobmeng.de","username":"jakobmeng@web.de"},"change_message_id":"a4d76c519dc6ff990a24043cbb01cbc584249d47","unresolved":false,"context_lines":[{"line_number":74,"context_line":"RETURN \u003d \u0027\u0027\u0027"},{"line_number":75,"context_line":"openstack_projects:"},{"line_number":76,"context_line":"    description: has all the OpenStack information about projects"},{"line_number":77,"context_line":"    returned: always, but can be null"},{"line_number":78,"context_line":"    type: complex"},{"line_number":79,"context_line":"    contains:"},{"line_number":80,"context_line":"        id:"}],"source_content_type":"text/x-python","patch_set":7,"id":"4813e2c6_fed71b4d","line":77,"in_reply_to":"a75d04d0_47913eb9","updated":"2022-06-23 13:05:29.000000000","message":"Done","commit_id":"0ea53fbab75bf7a09b2c296f378017911f36f21a"},{"author":{"_account_id":32962,"name":"Jakob Meng","email":"code@jakobmeng.de","username":"jakobmeng@web.de"},"change_message_id":"6db535cfc8c335400b7e8070f62f3111cf58b1ee","unresolved":true,"context_lines":[{"line_number":75,"context_line":"openstack_projects:"},{"line_number":76,"context_line":"    description: has all the OpenStack information about projects"},{"line_number":77,"context_line":"    returned: always, but can be null"},{"line_number":78,"context_line":"    type: complex"},{"line_number":79,"context_line":"    contains:"},{"line_number":80,"context_line":"        id:"},{"line_number":81,"context_line":"            description: Unique UUID."}],"source_content_type":"text/x-python","patch_set":7,"id":"e1f76bd3_5821770a","line":78,"updated":"2022-05-04 09:08:53.000000000","message":"type: list\nelements: dict","commit_id":"0ea53fbab75bf7a09b2c296f378017911f36f21a"},{"author":{"_account_id":32962,"name":"Jakob Meng","email":"code@jakobmeng.de","username":"jakobmeng@web.de"},"change_message_id":"a4d76c519dc6ff990a24043cbb01cbc584249d47","unresolved":false,"context_lines":[{"line_number":75,"context_line":"openstack_projects:"},{"line_number":76,"context_line":"    description: has all the OpenStack information about projects"},{"line_number":77,"context_line":"    returned: always, but can be null"},{"line_number":78,"context_line":"    type: complex"},{"line_number":79,"context_line":"    contains:"},{"line_number":80,"context_line":"        id:"},{"line_number":81,"context_line":"            description: Unique UUID."}],"source_content_type":"text/x-python","patch_set":7,"id":"2bfae4d2_339789cd","line":78,"in_reply_to":"e1f76bd3_5821770a","updated":"2022-06-23 13:05:29.000000000","message":"Done","commit_id":"0ea53fbab75bf7a09b2c296f378017911f36f21a"},{"author":{"_account_id":32962,"name":"Jakob Meng","email":"code@jakobmeng.de","username":"jakobmeng@web.de"},"change_message_id":"4a12ad1b6f080871d33d46ae0ec1d8a55278f89c","unresolved":true,"context_lines":[{"line_number":147,"context_line":"        projects \u003d self.conn.search_projects(name, **filters)"},{"line_number":148,"context_line":"        projects \u003d [p.to_dict(computed\u003dFalse) for p in projects]"},{"line_number":149,"context_line":""},{"line_number":150,"context_line":"        if is_old_facts:"},{"line_number":151,"context_line":"            self.exit_json(changed\u003dFalse, ansible_facts\u003ddict("},{"line_number":152,"context_line":"                openstack_projects\u003dprojects))"},{"line_number":153,"context_line":"        else:"}],"source_content_type":"text/x-python","patch_set":7,"id":"ea4e4fa9_4d034aa0","line":150,"updated":"2022-05-04 10:31:27.000000000","message":"Drop code and docs related to is_old_facts because other modules such as network already broke backward compatibility in the past and related Ansible versions are EOL anyway.","commit_id":"0ea53fbab75bf7a09b2c296f378017911f36f21a"},{"author":{"_account_id":32962,"name":"Jakob Meng","email":"code@jakobmeng.de","username":"jakobmeng@web.de"},"change_message_id":"a4d76c519dc6ff990a24043cbb01cbc584249d47","unresolved":false,"context_lines":[{"line_number":147,"context_line":"        projects \u003d self.conn.search_projects(name, **filters)"},{"line_number":148,"context_line":"        projects \u003d [p.to_dict(computed\u003dFalse) for p in projects]"},{"line_number":149,"context_line":""},{"line_number":150,"context_line":"        if is_old_facts:"},{"line_number":151,"context_line":"            self.exit_json(changed\u003dFalse, ansible_facts\u003ddict("},{"line_number":152,"context_line":"                openstack_projects\u003dprojects))"},{"line_number":153,"context_line":"        else:"}],"source_content_type":"text/x-python","patch_set":7,"id":"3e4b8137_79c25020","line":150,"in_reply_to":"e3140a6a_db862c36","updated":"2022-06-23 13:05:29.000000000","message":"Done","commit_id":"0ea53fbab75bf7a09b2c296f378017911f36f21a"},{"author":{"_account_id":32962,"name":"Jakob Meng","email":"code@jakobmeng.de","username":"jakobmeng@web.de"},"change_message_id":"4656f599b2f9e2182a93454c9b098ce2d7922d9a","unresolved":true,"context_lines":[{"line_number":147,"context_line":"        projects \u003d self.conn.search_projects(name, **filters)"},{"line_number":148,"context_line":"        projects \u003d [p.to_dict(computed\u003dFalse) for p in projects]"},{"line_number":149,"context_line":""},{"line_number":150,"context_line":"        if is_old_facts:"},{"line_number":151,"context_line":"            self.exit_json(changed\u003dFalse, ansible_facts\u003ddict("},{"line_number":152,"context_line":"                openstack_projects\u003dprojects))"},{"line_number":153,"context_line":"        else:"}],"source_content_type":"text/x-python","patch_set":7,"id":"e3140a6a_db862c36","line":150,"in_reply_to":"ea4e4fa9_4d034aa0","updated":"2022-05-04 10:32:13.000000000","message":"Network module has a doc string which you could add in a similar way:\n  Note that the M(openstack.cloud.networks_info) module no longer returns C(ansible_facts)!","commit_id":"0ea53fbab75bf7a09b2c296f378017911f36f21a"},{"author":{"_account_id":10969,"name":"Shnaidman Sagi (Sergey)","display_name":"Shnaidman Sagi","email":"sshnaidm@redhat.com","username":"sergsh"},"change_message_id":"650efba3afb985e31e2b65e1f10e5054431a267f","unresolved":true,"context_lines":[{"line_number":145,"context_line":"            else:"},{"line_number":146,"context_line":"                self.fail_json(msg\u003d\u0027Domain name or ID does not exist\u0027)"},{"line_number":147,"context_line":""},{"line_number":148,"context_line":"        projects \u003d self.conn.search_projects(name, **filters)"},{"line_number":149,"context_line":"        projects \u003d [p.to_dict(computed\u003dFalse) for p in projects]"},{"line_number":150,"context_line":""},{"line_number":151,"context_line":"        self.exit_json(changed\u003dFalse, openstack_projects\u003dprojects)"}],"source_content_type":"text/x-python","patch_set":8,"id":"7a271226_960a1820","line":148,"range":{"start_line":148,"start_character":0,"end_line":148,"end_character":61},"updated":"2022-05-18 16:26:58.000000000","message":"if we use cloud layer, it won\u0027t work because filters are passed as \"filters\u003dfilters\" here: https://github.com/openstack/openstacksdk/blob/master/openstack/cloud/_identity.py#L63\n\n\nEither need to use proxy layer and then:\n\n  filters[\u0027domain_id\u0027] \u003d domain.id\n  filters[\u0027name\u0027] \u003d name\n  self.conn.identity.projects(**filters)\n\nOr to use the old way like in line 142:\n\n  self.conn.search_projects(name, filters)","commit_id":"5943413cd622b5bdfd8a5e6a3ad29c5bf56cd4d1"},{"author":{"_account_id":32962,"name":"Jakob Meng","email":"code@jakobmeng.de","username":"jakobmeng@web.de"},"change_message_id":"a4d76c519dc6ff990a24043cbb01cbc584249d47","unresolved":false,"context_lines":[{"line_number":145,"context_line":"            else:"},{"line_number":146,"context_line":"                self.fail_json(msg\u003d\u0027Domain name or ID does not exist\u0027)"},{"line_number":147,"context_line":""},{"line_number":148,"context_line":"        projects \u003d self.conn.search_projects(name, **filters)"},{"line_number":149,"context_line":"        projects \u003d [p.to_dict(computed\u003dFalse) for p in projects]"},{"line_number":150,"context_line":""},{"line_number":151,"context_line":"        self.exit_json(changed\u003dFalse, openstack_projects\u003dprojects)"}],"source_content_type":"text/x-python","patch_set":8,"id":"01ef31d7_06772c23","line":148,"range":{"start_line":148,"start_character":0,"end_line":148,"end_character":61},"in_reply_to":"7a271226_960a1820","updated":"2022-06-23 13:05:29.000000000","message":"Done","commit_id":"5943413cd622b5bdfd8a5e6a3ad29c5bf56cd4d1"},{"author":{"_account_id":34208,"name":"Rafael Castillo","email":"rcastill@redhat.com","username":"rcastill"},"change_message_id":"c9a836c67beecbcc00ac8d8f9c8f088920ecf420","unresolved":true,"context_lines":[{"line_number":78,"context_line":"    returned: always, but can be empty"},{"line_number":79,"context_line":"    type: list"},{"line_number":80,"context_line":"    elements: dict"},{"line_number":81,"context_line":"    contains:"},{"line_number":82,"context_line":"        id:"},{"line_number":83,"context_line":"            description: Unique UUID."},{"line_number":84,"context_line":"            returned: success"}],"source_content_type":"text/x-python","patch_set":10,"id":"1f4955ed_69ae1463","line":81,"updated":"2022-05-24 14:15:27.000000000","message":"please sort these","commit_id":"d4db3a80d850952ff1ea6b46afe70fc3b659a591"},{"author":{"_account_id":34208,"name":"Rafael Castillo","email":"rcastill@redhat.com","username":"rcastill"},"change_message_id":"f869b86fc98e1077d687887c7d61e747a200bfac","unresolved":false,"context_lines":[{"line_number":78,"context_line":"    returned: always, but can be empty"},{"line_number":79,"context_line":"    type: list"},{"line_number":80,"context_line":"    elements: dict"},{"line_number":81,"context_line":"    contains:"},{"line_number":82,"context_line":"        id:"},{"line_number":83,"context_line":"            description: Unique UUID."},{"line_number":84,"context_line":"            returned: success"}],"source_content_type":"text/x-python","patch_set":10,"id":"a2ad303e_92182cd1","line":81,"in_reply_to":"1f4955ed_69ae1463","updated":"2022-06-23 13:20:27.000000000","message":"Done","commit_id":"d4db3a80d850952ff1ea6b46afe70fc3b659a591"},{"author":{"_account_id":34208,"name":"Rafael Castillo","email":"rcastill@redhat.com","username":"rcastill"},"change_message_id":"f869b86fc98e1077d687887c7d61e747a200bfac","unresolved":true,"context_lines":[{"line_number":138,"context_line":"        filters \u003d self.params[\u0027filters\u0027] or {}"},{"line_number":139,"context_line":""},{"line_number":140,"context_line":"        if domain:"},{"line_number":141,"context_line":"            filters[\u0027domain_id\u0027] \u003d self.conn.identity.find_domain("},{"line_number":142,"context_line":"                domain, ignore_missing\u003dFalse).id"},{"line_number":143,"context_line":""},{"line_number":144,"context_line":"        projects \u003d self.conn.search_projects(name, filters\u003dfilters)"}],"source_content_type":"text/x-python","patch_set":12,"id":"028118fa_aeea1061","line":141,"updated":"2022-06-23 13:20:27.000000000","message":"This will throw if the domain does not exist. We\u0027d usually check if the return value of find_domain is None and fail in that case.","commit_id":"bcca2efe1a7047168b9dc537b9f46271c4e37f9d"},{"author":{"_account_id":32962,"name":"Jakob Meng","email":"code@jakobmeng.de","username":"jakobmeng@web.de"},"change_message_id":"18ddb0d0fd285714177b1fd7b7e3fe7d7ef527fb","unresolved":true,"context_lines":[{"line_number":138,"context_line":"        filters \u003d self.params[\u0027filters\u0027] or {}"},{"line_number":139,"context_line":""},{"line_number":140,"context_line":"        if domain:"},{"line_number":141,"context_line":"            filters[\u0027domain_id\u0027] \u003d self.conn.identity.find_domain("},{"line_number":142,"context_line":"                domain, ignore_missing\u003dFalse).id"},{"line_number":143,"context_line":""},{"line_number":144,"context_line":"        projects \u003d self.conn.search_projects(name, filters\u003dfilters)"}],"source_content_type":"text/x-python","patch_set":12,"id":"ec6e714b_5ce785ad","line":141,"in_reply_to":"028118fa_aeea1061","updated":"2022-06-23 14:05:02.000000000","message":"Failing if domain could not be found is what we want, isn\u0027t it?","commit_id":"bcca2efe1a7047168b9dc537b9f46271c4e37f9d"},{"author":{"_account_id":32962,"name":"Jakob Meng","email":"code@jakobmeng.de","username":"jakobmeng@web.de"},"change_message_id":"88c02091c5becdbd43fde786d2627cc5e3f61e2f","unresolved":false,"context_lines":[{"line_number":138,"context_line":"        filters \u003d self.params[\u0027filters\u0027] or {}"},{"line_number":139,"context_line":""},{"line_number":140,"context_line":"        if domain:"},{"line_number":141,"context_line":"            filters[\u0027domain_id\u0027] \u003d self.conn.identity.find_domain("},{"line_number":142,"context_line":"                domain, ignore_missing\u003dFalse).id"},{"line_number":143,"context_line":""},{"line_number":144,"context_line":"        projects \u003d self.conn.search_projects(name, filters\u003dfilters)"}],"source_content_type":"text/x-python","patch_set":12,"id":"92310108_7c14396b","line":141,"in_reply_to":"8b69d7e1_c2689e4b","updated":"2022-06-27 19:18:02.000000000","message":"Error message from SDK is:\n\n  File lib/python3.8/site-packages/openstack/resource.py:2021, in Resource.find(cls, session, name_or_id, ignore_missing, list_base_path, **params)\n     2019 if ignore_missing:\n     2020     return None\n  -\u003e 2021 raise exceptions.ResourceNotFound(\n     2022     \"No %s found for %s\" % (cls.__name__, name_or_id))\n\n  ResourceNotFound: No Domain found for i-do-not-exist","commit_id":"bcca2efe1a7047168b9dc537b9f46271c4e37f9d"},{"author":{"_account_id":34208,"name":"Rafael Castillo","email":"rcastill@redhat.com","username":"rcastill"},"change_message_id":"460795f6157526ef8522bcc520b1e09e8423f0d5","unresolved":false,"context_lines":[{"line_number":138,"context_line":"        filters \u003d self.params[\u0027filters\u0027] or {}"},{"line_number":139,"context_line":""},{"line_number":140,"context_line":"        if domain:"},{"line_number":141,"context_line":"            filters[\u0027domain_id\u0027] \u003d self.conn.identity.find_domain("},{"line_number":142,"context_line":"                domain, ignore_missing\u003dFalse).id"},{"line_number":143,"context_line":""},{"line_number":144,"context_line":"        projects \u003d self.conn.search_projects(name, filters\u003dfilters)"}],"source_content_type":"text/x-python","patch_set":12,"id":"8b69d7e1_c2689e4b","line":141,"in_reply_to":"8f1b1c86_eb30a0d3","updated":"2022-06-27 16:34:52.000000000","message":"Ack. I\u0027d personally check the return value as I think the error would look cleaner. I won\u0027t block the patch on this.","commit_id":"bcca2efe1a7047168b9dc537b9f46271c4e37f9d"},{"author":{"_account_id":32962,"name":"Jakob Meng","email":"code@jakobmeng.de","username":"jakobmeng@web.de"},"change_message_id":"fb36483549cfb6a4cf18581d1a7a5a42224d9eca","unresolved":true,"context_lines":[{"line_number":138,"context_line":"        filters \u003d self.params[\u0027filters\u0027] or {}"},{"line_number":139,"context_line":""},{"line_number":140,"context_line":"        if domain:"},{"line_number":141,"context_line":"            filters[\u0027domain_id\u0027] \u003d self.conn.identity.find_domain("},{"line_number":142,"context_line":"                domain, ignore_missing\u003dFalse).id"},{"line_number":143,"context_line":""},{"line_number":144,"context_line":"        projects \u003d self.conn.search_projects(name, filters\u003dfilters)"}],"source_content_type":"text/x-python","patch_set":12,"id":"8f1b1c86_eb30a0d3","line":141,"in_reply_to":"a29afd68_4cb8b734","updated":"2022-06-24 06:47:39.000000000","message":"It will not fail with an AttributeError. If no domain can be found, then SDK will raise an ResourceNotFound exception because ignore_missing\u003dFalse:\n\nhttps://opendev.org/openstack/openstacksdk/src/commit/af86313c83f631d212ffc0a14e4bf00a6d058582/openstack/resource.py#L2129","commit_id":"bcca2efe1a7047168b9dc537b9f46271c4e37f9d"},{"author":{"_account_id":34208,"name":"Rafael Castillo","email":"rcastill@redhat.com","username":"rcastill"},"change_message_id":"40bba1862d9099304ab83b9488d340afe3607095","unresolved":true,"context_lines":[{"line_number":138,"context_line":"        filters \u003d self.params[\u0027filters\u0027] or {}"},{"line_number":139,"context_line":""},{"line_number":140,"context_line":"        if domain:"},{"line_number":141,"context_line":"            filters[\u0027domain_id\u0027] \u003d self.conn.identity.find_domain("},{"line_number":142,"context_line":"                domain, ignore_missing\u003dFalse).id"},{"line_number":143,"context_line":""},{"line_number":144,"context_line":"        projects \u003d self.conn.search_projects(name, filters\u003dfilters)"}],"source_content_type":"text/x-python","patch_set":12,"id":"a29afd68_4cb8b734","line":141,"in_reply_to":"ec6e714b_5ce785ad","updated":"2022-06-23 19:27:32.000000000","message":"Sure but we should fail with a descriptive error message instead of throwing an AttributeError","commit_id":"bcca2efe1a7047168b9dc537b9f46271c4e37f9d"}]}
