)]}'
{"/PATCHSET_LEVEL":[{"author":{"_account_id":32458,"name":"Ananya","display_name":"Ananya Banerjee","email":"anbanerj@redhat.com","username":"frenzyfriday"},"change_message_id":"b395f9f484f2c2af662b7cb2f926ae5a5e8656d1","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":4,"id":"30cac7fe_d6e73f20","updated":"2022-05-10 10:45:36.000000000","message":"This might need a rebase as I couldnt see tox_extra_args: \u0026skip_broken_ci_roles \u003e- in .zuul.yaml ","commit_id":"dd524ebad0c7aad07144a4c8ec5330566724e539"},{"author":{"_account_id":32962,"name":"Jakob Meng","email":"code@jakobmeng.de","username":"jakobmeng@web.de"},"change_message_id":"9936090d90f3bb1f2fcc70b9be9359be69180eba","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":7,"id":"48a814bd_6bcb3de2","updated":"2022-05-30 09:53:38.000000000","message":"Thank you, Rafael!\n\nLooks like you found a place where SDK 0.90.0/1.0.0 removed functionality without a proper replacement: We cannot define random project attributes/properties anymore 😞","commit_id":"32f488e8a56696cb260174c233cf62900bdf5764"},{"author":{"_account_id":32962,"name":"Jakob Meng","email":"code@jakobmeng.de","username":"jakobmeng@web.de"},"change_message_id":"193a7e42cae193163ec014dafa5392f8fd208a1f","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":10,"id":"1af15640_afa01a6b","updated":"2022-05-31 08:36:51.000000000","message":"Went ahead and implemented some fixes and ideas.\n\nI dont like my variable naming mess, maybe you know something better. But not important.\n\nMy biggest question is whether we should warn users when set properties which the SDK will ignore. We could go with a warning in the doc (which is what i did here) or we raise an error.","commit_id":"ba0baf71808e3d79e48ae21f2d0c4502ad52854b"},{"author":{"_account_id":32962,"name":"Jakob Meng","email":"code@jakobmeng.de","username":"jakobmeng@web.de"},"change_message_id":"0f6fdb2a6cc73489e29d5c9f9fedc4fae230cea5","unresolved":true,"context_lines":[],"source_content_type":"","patch_set":10,"id":"891f1d2f_df40c642","in_reply_to":"1af15640_afa01a6b","updated":"2022-05-31 08:37:36.000000000","message":"(Reopened for comment for discussion of question in last paragraph)","commit_id":"ba0baf71808e3d79e48ae21f2d0c4502ad52854b"},{"author":{"_account_id":34208,"name":"Rafael Castillo","email":"rcastill@redhat.com","username":"rcastill"},"change_message_id":"747ba0eb3c808fafc743f5fa2752fdcee9243969","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":11,"id":"438ea2af_18d0f8c9","updated":"2022-06-20 22:18:22.000000000","message":"recheck","commit_id":"361893374700b155c0d123f295f76d4816ef5b6c"},{"author":{"_account_id":32962,"name":"Jakob Meng","email":"code@jakobmeng.de","username":"jakobmeng@web.de"},"change_message_id":"e0330588fe6cc1a49084c4637002635383ed6fb1","unresolved":true,"context_lines":[],"source_content_type":"","patch_set":13,"id":"142ba631_86b00c37","updated":"2022-07-06 09:20:58.000000000","message":"Beware, this patch will break TripleO jobs:\n\n  https://3dadb63354fa88e9cb9c-08356d28b4709d82be0a11bac57a15f1.ssl.cf2.rackcdn.com/839640/13/check/tripleo-ci-centos-9-standalone-osa/7c6baca/logs/undercloud/home/zuul/standalone_deploy.log\n","commit_id":"23def42a1511965da0db28ea673c6cd286ec5c51"},{"author":{"_account_id":10969,"name":"Shnaidman Sagi (Sergey)","display_name":"Shnaidman Sagi","email":"sshnaidm@redhat.com","username":"sergsh"},"change_message_id":"e827ac599157e5c25fc5135455ff71c587debef6","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":13,"id":"84888b0b_83a7b67d","updated":"2022-07-06 09:45:23.000000000","message":"Tripleo jobs should take collection from @delorean-component-clients repo, which has 1.8.0 version even in consistent:  https://trunk.rdoproject.org/centos9-master/component/clients/consistent/\nIf this version will get there, it will be blocked by failing job.","commit_id":"23def42a1511965da0db28ea673c6cd286ec5c51"},{"author":{"_account_id":32962,"name":"Jakob Meng","email":"code@jakobmeng.de","username":"jakobmeng@web.de"},"change_message_id":"e23f4f6d769af29742c1f7fd28cd9a541393f677","unresolved":true,"context_lines":[],"source_content_type":"","patch_set":13,"id":"62a534c2_d9a51543","in_reply_to":"142ba631_86b00c37","updated":"2022-07-06 09:36:53.000000000","message":"Let us merge this one first to really make sure we are not using master branch of AOC in TripleO:\n\n  https://review.opendev.org/c/openstack/tripleo-quickstart/+/843497","commit_id":"23def42a1511965da0db28ea673c6cd286ec5c51"},{"author":{"_account_id":32962,"name":"Jakob Meng","email":"code@jakobmeng.de","username":"jakobmeng@web.de"},"change_message_id":"585d7272141a59da40d1d7260b287f22b97316d5","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":13,"id":"89184a6e_5962c93b","in_reply_to":"62a534c2_d9a51543","updated":"2022-07-06 09:49:16.000000000","message":"TripleO jobs should be fine, see Sagi\u0027s comment:\n\n https://review.opendev.org/c/openstack/ansible-collections-openstack/+/839640/comments/84888b0b_83a7b67d","commit_id":"23def42a1511965da0db28ea673c6cd286ec5c51"}],"ci/roles/project/tasks/main.yml":[{"author":{"_account_id":32962,"name":"Jakob Meng","email":"code@jakobmeng.de","username":"jakobmeng@web.de"},"change_message_id":"9936090d90f3bb1f2fcc70b9be9359be69180eba","unresolved":true,"context_lines":[{"line_number":5,"context_line":"    state: absent"},{"line_number":6,"context_line":"    name: ansible_project"},{"line_number":7,"context_line":""},{"line_number":8,"context_line":"- block:"},{"line_number":9,"context_line":"  - name: Create project"},{"line_number":10,"context_line":"    openstack.cloud.project:"},{"line_number":11,"context_line":"      cloud: \"{{ cloud }}\""}],"source_content_type":"text/x-yaml","patch_set":7,"id":"ef8e68ac_709b61e7","line":8,"updated":"2022-05-30 09:53:38.000000000","message":"Please add linebreaks between tasks, this is hard to read.","commit_id":"32f488e8a56696cb260174c233cf62900bdf5764"},{"author":{"_account_id":32962,"name":"Jakob Meng","email":"code@jakobmeng.de","username":"jakobmeng@web.de"},"change_message_id":"7d8c46f75fd441e36a0d94f16f37ac496fdc31d6","unresolved":false,"context_lines":[{"line_number":5,"context_line":"    state: absent"},{"line_number":6,"context_line":"    name: ansible_project"},{"line_number":7,"context_line":""},{"line_number":8,"context_line":"- block:"},{"line_number":9,"context_line":"  - name: Create project"},{"line_number":10,"context_line":"    openstack.cloud.project:"},{"line_number":11,"context_line":"      cloud: \"{{ cloud }}\""}],"source_content_type":"text/x-yaml","patch_set":7,"id":"36d36818_264b11cd","line":8,"in_reply_to":"ef8e68ac_709b61e7","updated":"2022-05-31 09:17:24.000000000","message":"Done","commit_id":"32f488e8a56696cb260174c233cf62900bdf5764"}],"plugins/modules/project.py":[{"author":{"_account_id":32458,"name":"Ananya","display_name":"Ananya Banerjee","email":"anbanerj@redhat.com","username":"frenzyfriday"},"change_message_id":"d476b70bb768693a6be4028479eff0aaf021ced7","unresolved":true,"context_lines":[{"line_number":78,"context_line":"\u0027\u0027\u0027"},{"line_number":79,"context_line":""},{"line_number":80,"context_line":""},{"line_number":81,"context_line":"RETURN \u003d \u0027\u0027\u0027"},{"line_number":82,"context_line":"project:"},{"line_number":83,"context_line":"    description: Dictionary describing the project."},{"line_number":84,"context_line":"    returned: On success when I(state) is \u0027present\u0027"}],"source_content_type":"text/x-python","patch_set":4,"id":"5305a608_2a712eae","line":81,"updated":"2022-05-11 16:02:15.000000000","message":"I can see more returned fields like domain_id, is_domain, options, parent_id, tags","commit_id":"dd524ebad0c7aad07144a4c8ec5330566724e539"},{"author":{"_account_id":34208,"name":"Rafael Castillo","email":"rcastill@redhat.com","username":"rcastill"},"change_message_id":"4a09ceedc68ab033374f99d841cba078d3fca121","unresolved":false,"context_lines":[{"line_number":78,"context_line":"\u0027\u0027\u0027"},{"line_number":79,"context_line":""},{"line_number":80,"context_line":""},{"line_number":81,"context_line":"RETURN \u003d \u0027\u0027\u0027"},{"line_number":82,"context_line":"project:"},{"line_number":83,"context_line":"    description: Dictionary describing the project."},{"line_number":84,"context_line":"    returned: On success when I(state) is \u0027present\u0027"}],"source_content_type":"text/x-python","patch_set":4,"id":"e5876f9e_63ceec29","line":81,"in_reply_to":"5305a608_2a712eae","updated":"2022-05-27 19:47:23.000000000","message":"Done","commit_id":"dd524ebad0c7aad07144a4c8ec5330566724e539"},{"author":{"_account_id":32458,"name":"Ananya","display_name":"Ananya Banerjee","email":"anbanerj@redhat.com","username":"frenzyfriday"},"change_message_id":"1dcda6b64d5f97aa1c3de79fea16fcccb2853650","unresolved":true,"context_lines":[{"line_number":82,"context_line":"project:"},{"line_number":83,"context_line":"    description: Dictionary describing the project."},{"line_number":84,"context_line":"    returned: On success when I(state) is \u0027present\u0027"},{"line_number":85,"context_line":"    type: complex"},{"line_number":86,"context_line":"    contains:"},{"line_number":87,"context_line":"        id:"},{"line_number":88,"context_line":"            description: Project ID"}],"source_content_type":"text/x-python","patch_set":4,"id":"e5413c14_1cfbb8c4","line":85,"updated":"2022-05-11 16:06:14.000000000","message":"type: dict\nelements: dict","commit_id":"dd524ebad0c7aad07144a4c8ec5330566724e539"},{"author":{"_account_id":34208,"name":"Rafael Castillo","email":"rcastill@redhat.com","username":"rcastill"},"change_message_id":"4a09ceedc68ab033374f99d841cba078d3fca121","unresolved":false,"context_lines":[{"line_number":82,"context_line":"project:"},{"line_number":83,"context_line":"    description: Dictionary describing the project."},{"line_number":84,"context_line":"    returned: On success when I(state) is \u0027present\u0027"},{"line_number":85,"context_line":"    type: complex"},{"line_number":86,"context_line":"    contains:"},{"line_number":87,"context_line":"        id:"},{"line_number":88,"context_line":"            description: Project ID"}],"source_content_type":"text/x-python","patch_set":4,"id":"a4006aa3_8a408b7b","line":85,"in_reply_to":"e5413c14_1cfbb8c4","updated":"2022-05-27 19:47:23.000000000","message":"Done","commit_id":"dd524ebad0c7aad07144a4c8ec5330566724e539"},{"author":{"_account_id":32458,"name":"Ananya","display_name":"Ananya Banerjee","email":"anbanerj@redhat.com","username":"frenzyfriday"},"change_message_id":"d476b70bb768693a6be4028479eff0aaf021ced7","unresolved":true,"context_lines":[{"line_number":96,"context_line":"            description: Project description"},{"line_number":97,"context_line":"            type: str"},{"line_number":98,"context_line":"            sample: \"demodescription\""},{"line_number":99,"context_line":"        enabled:"},{"line_number":100,"context_line":"            description: Boolean to indicate if project is enabled"},{"line_number":101,"context_line":"            type: bool"},{"line_number":102,"context_line":"            sample: True"}],"source_content_type":"text/x-python","patch_set":4,"id":"f09c048d_eb813cf0","line":99,"updated":"2022-05-11 16:02:15.000000000","message":"This will be is_enabled I think","commit_id":"dd524ebad0c7aad07144a4c8ec5330566724e539"},{"author":{"_account_id":34208,"name":"Rafael Castillo","email":"rcastill@redhat.com","username":"rcastill"},"change_message_id":"4a09ceedc68ab033374f99d841cba078d3fca121","unresolved":false,"context_lines":[{"line_number":96,"context_line":"            description: Project description"},{"line_number":97,"context_line":"            type: str"},{"line_number":98,"context_line":"            sample: \"demodescription\""},{"line_number":99,"context_line":"        enabled:"},{"line_number":100,"context_line":"            description: Boolean to indicate if project is enabled"},{"line_number":101,"context_line":"            type: bool"},{"line_number":102,"context_line":"            sample: True"}],"source_content_type":"text/x-python","patch_set":4,"id":"b7f7babe_84ae2bce","line":99,"in_reply_to":"f09c048d_eb813cf0","updated":"2022-05-27 19:47:23.000000000","message":"Done","commit_id":"dd524ebad0c7aad07144a4c8ec5330566724e539"},{"author":{"_account_id":32962,"name":"Jakob Meng","email":"code@jakobmeng.de","username":"jakobmeng@web.de"},"change_message_id":"9936090d90f3bb1f2fcc70b9be9359be69180eba","unresolved":true,"context_lines":[{"line_number":23,"context_line":"    description:"},{"line_number":24,"context_line":"      - Description for the project"},{"line_number":25,"context_line":"    type: str"},{"line_number":26,"context_line":"  domain_id:"},{"line_number":27,"context_line":"    description:"},{"line_number":28,"context_line":"       - Domain id to create the project in if the cloud supports domains."},{"line_number":29,"context_line":"    aliases: [\u0027domain\u0027]"}],"source_content_type":"text/x-python","patch_set":7,"id":"a89e8bb9_72375f6d","line":26,"updated":"2022-05-30 09:53:38.000000000","message":"Please switch \"domain_id\" and \"domain\" here and in aliases. This attribute is (and was) used for parameter name_or_id when searching for domains hence domain_id is misleading imho. What do you think?","commit_id":"32f488e8a56696cb260174c233cf62900bdf5764"},{"author":{"_account_id":32962,"name":"Jakob Meng","email":"code@jakobmeng.de","username":"jakobmeng@web.de"},"change_message_id":"a2b631c01a04ecb8ce55119920456b33616dd05b","unresolved":false,"context_lines":[{"line_number":23,"context_line":"    description:"},{"line_number":24,"context_line":"      - Description for the project"},{"line_number":25,"context_line":"    type: str"},{"line_number":26,"context_line":"  domain_id:"},{"line_number":27,"context_line":"    description:"},{"line_number":28,"context_line":"       - Domain id to create the project in if the cloud supports domains."},{"line_number":29,"context_line":"    aliases: [\u0027domain\u0027]"}],"source_content_type":"text/x-python","patch_set":7,"id":"43b90863_4890fc2b","line":26,"in_reply_to":"a89e8bb9_72375f6d","updated":"2022-05-31 08:01:29.000000000","message":"Done","commit_id":"32f488e8a56696cb260174c233cf62900bdf5764"},{"author":{"_account_id":32962,"name":"Jakob Meng","email":"code@jakobmeng.de","username":"jakobmeng@web.de"},"change_message_id":"9936090d90f3bb1f2fcc70b9be9359be69180eba","unresolved":true,"context_lines":[{"line_number":25,"context_line":"    type: str"},{"line_number":26,"context_line":"  domain_id:"},{"line_number":27,"context_line":"    description:"},{"line_number":28,"context_line":"       - Domain id to create the project in if the cloud supports domains."},{"line_number":29,"context_line":"    aliases: [\u0027domain\u0027]"},{"line_number":30,"context_line":"    type: str"},{"line_number":31,"context_line":"  is_enabled:"}],"source_content_type":"text/x-python","patch_set":7,"id":"177e613c_86185a38","line":28,"updated":"2022-05-30 09:53:38.000000000","message":"\"Domain name or id to\"","commit_id":"32f488e8a56696cb260174c233cf62900bdf5764"},{"author":{"_account_id":32962,"name":"Jakob Meng","email":"code@jakobmeng.de","username":"jakobmeng@web.de"},"change_message_id":"a2b631c01a04ecb8ce55119920456b33616dd05b","unresolved":false,"context_lines":[{"line_number":25,"context_line":"    type: str"},{"line_number":26,"context_line":"  domain_id:"},{"line_number":27,"context_line":"    description:"},{"line_number":28,"context_line":"       - Domain id to create the project in if the cloud supports domains."},{"line_number":29,"context_line":"    aliases: [\u0027domain\u0027]"},{"line_number":30,"context_line":"    type: str"},{"line_number":31,"context_line":"  is_enabled:"}],"source_content_type":"text/x-python","patch_set":7,"id":"773dfc93_c91af257","line":28,"in_reply_to":"177e613c_86185a38","updated":"2022-05-31 08:01:29.000000000","message":"Done","commit_id":"32f488e8a56696cb260174c233cf62900bdf5764"},{"author":{"_account_id":32962,"name":"Jakob Meng","email":"code@jakobmeng.de","username":"jakobmeng@web.de"},"change_message_id":"9936090d90f3bb1f2fcc70b9be9359be69180eba","unresolved":true,"context_lines":[{"line_number":31,"context_line":"  is_enabled:"},{"line_number":32,"context_line":"    description:"},{"line_number":33,"context_line":"      - Is the project enabled"},{"line_number":34,"context_line":"    aliases:"},{"line_number":35,"context_line":"      - enabled"},{"line_number":36,"context_line":"    type: bool"},{"line_number":37,"context_line":"    default: \u0027yes\u0027"}],"source_content_type":"text/x-python","patch_set":7,"id":"55f285f4_bb627b30","line":34,"updated":"2022-05-30 09:53:38.000000000","message":"For consistency:\n  aliases: [\u0027enabled\u0027]","commit_id":"32f488e8a56696cb260174c233cf62900bdf5764"},{"author":{"_account_id":32962,"name":"Jakob Meng","email":"code@jakobmeng.de","username":"jakobmeng@web.de"},"change_message_id":"a2b631c01a04ecb8ce55119920456b33616dd05b","unresolved":false,"context_lines":[{"line_number":31,"context_line":"  is_enabled:"},{"line_number":32,"context_line":"    description:"},{"line_number":33,"context_line":"      - Is the project enabled"},{"line_number":34,"context_line":"    aliases:"},{"line_number":35,"context_line":"      - enabled"},{"line_number":36,"context_line":"    type: bool"},{"line_number":37,"context_line":"    default: \u0027yes\u0027"}],"source_content_type":"text/x-python","patch_set":7,"id":"e5cc15fa_dabdc574","line":34,"in_reply_to":"55f285f4_bb627b30","updated":"2022-05-31 08:01:29.000000000","message":"Done","commit_id":"32f488e8a56696cb260174c233cf62900bdf5764"},{"author":{"_account_id":32962,"name":"Jakob Meng","email":"code@jakobmeng.de","username":"jakobmeng@web.de"},"change_message_id":"9936090d90f3bb1f2fcc70b9be9359be69180eba","unresolved":true,"context_lines":[{"line_number":35,"context_line":"      - enabled"},{"line_number":36,"context_line":"    type: bool"},{"line_number":37,"context_line":"    default: \u0027yes\u0027"},{"line_number":38,"context_line":"  id:"},{"line_number":39,"context_line":"    description: id of project, not updateable"},{"line_number":40,"context_line":"    type: str"},{"line_number":41,"context_line":"  properties:"}],"source_content_type":"text/x-python","patch_set":7,"id":"d2390557_9632750c","line":38,"updated":"2022-05-30 09:53:38.000000000","message":"So far, our Ansible modules do not support IDs. Lets introduce fundamentally new functionality like this in separate patches after some discussion?!?","commit_id":"32f488e8a56696cb260174c233cf62900bdf5764"},{"author":{"_account_id":32962,"name":"Jakob Meng","email":"code@jakobmeng.de","username":"jakobmeng@web.de"},"change_message_id":"a2b631c01a04ecb8ce55119920456b33616dd05b","unresolved":false,"context_lines":[{"line_number":35,"context_line":"      - enabled"},{"line_number":36,"context_line":"    type: bool"},{"line_number":37,"context_line":"    default: \u0027yes\u0027"},{"line_number":38,"context_line":"  id:"},{"line_number":39,"context_line":"    description: id of project, not updateable"},{"line_number":40,"context_line":"    type: str"},{"line_number":41,"context_line":"  properties:"}],"source_content_type":"text/x-python","patch_set":7,"id":"43914222_c93eb4bb","line":38,"in_reply_to":"d2390557_9632750c","updated":"2022-05-31 08:01:29.000000000","message":"Done","commit_id":"32f488e8a56696cb260174c233cf62900bdf5764"},{"author":{"_account_id":32962,"name":"Jakob Meng","email":"code@jakobmeng.de","username":"jakobmeng@web.de"},"change_message_id":"9936090d90f3bb1f2fcc70b9be9359be69180eba","unresolved":true,"context_lines":[{"line_number":38,"context_line":"  id:"},{"line_number":39,"context_line":"    description: id of project, not updateable"},{"line_number":40,"context_line":"    type: str"},{"line_number":41,"context_line":"  properties:"},{"line_number":42,"context_line":"    description:"},{"line_number":43,"context_line":"      - Additional properties to be associated with this project. Requires"},{"line_number":44,"context_line":"        openstacksdk\u003e0.45."}],"source_content_type":"text/x-python","patch_set":7,"id":"852a46bb_5ed108f7","line":41,"updated":"2022-05-30 09:53:38.000000000","message":"SDK\u0027s identity.project resource proxy does not support random properties as far as i see. For testing, I added a random property using an pre 0.90.0 SDK and tried to get the property back with SDK 0.90.0. It simply does not show up in the proxy object.\n\nI am inclined to keep this properties argument though because it allows to set projects parameters for which we dont have module arguments such as options or tags. But this is really only a very hacky workaround for an incomplete module argument_spec.\n\nOr we drop this functionality until SDK reintroduces it since SDK does not allow to specify unknown arguments anyway? We have to break backward compatibility anyway since this is missing functionality in the sdk and the user has to adapt this module anyway when updating to aoc 2.x.x as this module\u0027s return values have changed.\n\nOpinions?","commit_id":"32f488e8a56696cb260174c233cf62900bdf5764"},{"author":{"_account_id":32962,"name":"Jakob Meng","email":"code@jakobmeng.de","username":"jakobmeng@web.de"},"change_message_id":"ec7845646e34d459458a285f86c197d482a07536","unresolved":true,"context_lines":[{"line_number":38,"context_line":"  id:"},{"line_number":39,"context_line":"    description: id of project, not updateable"},{"line_number":40,"context_line":"    type: str"},{"line_number":41,"context_line":"  properties:"},{"line_number":42,"context_line":"    description:"},{"line_number":43,"context_line":"      - Additional properties to be associated with this project. Requires"},{"line_number":44,"context_line":"        openstacksdk\u003e0.45."}],"source_content_type":"text/x-python","patch_set":7,"id":"bcef420a_308a7551","line":41,"in_reply_to":"18636dfe_d72684c4","updated":"2022-07-06 08:05:09.000000000","message":"Opened a bug report for OpenStack SDK to continue tracking this feature after merging this patch here:\n\n  https://storyboard.openstack.org/#!/story/2010130","commit_id":"32f488e8a56696cb260174c233cf62900bdf5764"},{"author":{"_account_id":34208,"name":"Rafael Castillo","email":"rcastill@redhat.com","username":"rcastill"},"change_message_id":"73a09b8190dc5bee4c3ac011c906287cc9a37e32","unresolved":true,"context_lines":[{"line_number":38,"context_line":"  id:"},{"line_number":39,"context_line":"    description: id of project, not updateable"},{"line_number":40,"context_line":"    type: str"},{"line_number":41,"context_line":"  properties:"},{"line_number":42,"context_line":"    description:"},{"line_number":43,"context_line":"      - Additional properties to be associated with this project. Requires"},{"line_number":44,"context_line":"        openstacksdk\u003e0.45."}],"source_content_type":"text/x-python","patch_set":7,"id":"18636dfe_d72684c4","line":41,"in_reply_to":"852a46bb_5ed108f7","updated":"2022-05-31 22:07:46.000000000","message":"I\u0027ve opened two patches to restore this functionality to the sdk [0][1]. I\u0027d say we merge this current \"incomplete\" implementation and add the missing feature when sdk support is in. \n\n[0] https://review.opendev.org/c/openstack/openstacksdk/+/843963\n[1] https://review.opendev.org/c/openstack/openstacksdk/+/843964","commit_id":"32f488e8a56696cb260174c233cf62900bdf5764"},{"author":{"_account_id":32962,"name":"Jakob Meng","email":"code@jakobmeng.de","username":"jakobmeng@web.de"},"change_message_id":"73765444e797715a279a2d3b2e87627912576db3","unresolved":true,"context_lines":[{"line_number":38,"context_line":"  id:"},{"line_number":39,"context_line":"    description: id of project, not updateable"},{"line_number":40,"context_line":"    type: str"},{"line_number":41,"context_line":"  properties:"},{"line_number":42,"context_line":"    description:"},{"line_number":43,"context_line":"      - Additional properties to be associated with this project. Requires"},{"line_number":44,"context_line":"        openstacksdk\u003e0.45."}],"source_content_type":"text/x-python","patch_set":7,"id":"e282bdab_dfb0f96b","line":41,"in_reply_to":"95bd3b7f_1139d393","updated":"2022-07-06 09:48:07.000000000","message":"Dropped the warning in the latest patchset.","commit_id":"32f488e8a56696cb260174c233cf62900bdf5764"},{"author":{"_account_id":10969,"name":"Shnaidman Sagi (Sergey)","display_name":"Shnaidman Sagi","email":"sshnaidm@redhat.com","username":"sergsh"},"change_message_id":"fa649f3fa4ea0aeab34b7661603d7061a48945eb","unresolved":true,"context_lines":[{"line_number":38,"context_line":"  id:"},{"line_number":39,"context_line":"    description: id of project, not updateable"},{"line_number":40,"context_line":"    type: str"},{"line_number":41,"context_line":"  properties:"},{"line_number":42,"context_line":"    description:"},{"line_number":43,"context_line":"      - Additional properties to be associated with this project. Requires"},{"line_number":44,"context_line":"        openstacksdk\u003e0.45."}],"source_content_type":"text/x-python","patch_set":7,"id":"95bd3b7f_1139d393","line":41,"in_reply_to":"bcef420a_308a7551","updated":"2022-07-06 09:24:21.000000000","message":"I think we can proceed with SDK patches and skip the warning, since it\u0027s gonna be obsolete when SDK is fixed (hopefully soon!).","commit_id":"32f488e8a56696cb260174c233cf62900bdf5764"},{"author":{"_account_id":32962,"name":"Jakob Meng","email":"code@jakobmeng.de","username":"jakobmeng@web.de"},"change_message_id":"9936090d90f3bb1f2fcc70b9be9359be69180eba","unresolved":true,"context_lines":[{"line_number":127,"context_line":"    argument_spec \u003d dict("},{"line_number":128,"context_line":"        name\u003ddict(required\u003dTrue),"},{"line_number":129,"context_line":"        description\u003ddict(required\u003dFalse),"},{"line_number":130,"context_line":"        domain_id\u003ddict(required\u003dFalse, aliases\u003d[\u0027domain\u0027]),"},{"line_number":131,"context_line":"        is_enabled\u003ddict(default\u003dTrue, type\u003d\u0027bool\u0027, aliases\u003d[\u0027enabled\u0027]),"},{"line_number":132,"context_line":"        id\u003ddict(required\u003dFalse, type\u003d\u0027str\u0027),"},{"line_number":133,"context_line":"        properties\u003ddict(required\u003dFalse, type\u003d\u0027dict\u0027, min_ver\u003d\u00270.45.1\u0027),"}],"source_content_type":"text/x-python","patch_set":7,"id":"cbe175fb_fca04a66","line":130,"updated":"2022-05-30 09:53:38.000000000","message":"ditto.","commit_id":"32f488e8a56696cb260174c233cf62900bdf5764"},{"author":{"_account_id":32962,"name":"Jakob Meng","email":"code@jakobmeng.de","username":"jakobmeng@web.de"},"change_message_id":"a2b631c01a04ecb8ce55119920456b33616dd05b","unresolved":false,"context_lines":[{"line_number":127,"context_line":"    argument_spec \u003d dict("},{"line_number":128,"context_line":"        name\u003ddict(required\u003dTrue),"},{"line_number":129,"context_line":"        description\u003ddict(required\u003dFalse),"},{"line_number":130,"context_line":"        domain_id\u003ddict(required\u003dFalse, aliases\u003d[\u0027domain\u0027]),"},{"line_number":131,"context_line":"        is_enabled\u003ddict(default\u003dTrue, type\u003d\u0027bool\u0027, aliases\u003d[\u0027enabled\u0027]),"},{"line_number":132,"context_line":"        id\u003ddict(required\u003dFalse, type\u003d\u0027str\u0027),"},{"line_number":133,"context_line":"        properties\u003ddict(required\u003dFalse, type\u003d\u0027dict\u0027, min_ver\u003d\u00270.45.1\u0027),"}],"source_content_type":"text/x-python","patch_set":7,"id":"b2fa68aa_90bd6894","line":130,"in_reply_to":"cbe175fb_fca04a66","updated":"2022-05-31 08:01:29.000000000","message":"Done","commit_id":"32f488e8a56696cb260174c233cf62900bdf5764"},{"author":{"_account_id":32962,"name":"Jakob Meng","email":"code@jakobmeng.de","username":"jakobmeng@web.de"},"change_message_id":"9936090d90f3bb1f2fcc70b9be9359be69180eba","unresolved":false,"context_lines":[{"line_number":139,"context_line":""},{"line_number":140,"context_line":"    def _needs_update(self, project, update):"},{"line_number":141,"context_line":"        keys \u003d (\u0027description\u0027, \u0027is_enabled\u0027, \u0027name\u0027)"},{"line_number":142,"context_line":"        if any(update[k] !\u003d project[k] for k in keys):"},{"line_number":143,"context_line":"            return True"},{"line_number":144,"context_line":""},{"line_number":145,"context_line":"        # compare each key within properties separately"}],"source_content_type":"text/x-python","patch_set":7,"id":"16335636_6abbf0a1","line":142,"updated":"2022-05-30 09:53:38.000000000","message":"Nice 😊","commit_id":"32f488e8a56696cb260174c233cf62900bdf5764"},{"author":{"_account_id":32962,"name":"Jakob Meng","email":"code@jakobmeng.de","username":"jakobmeng@web.de"},"change_message_id":"9936090d90f3bb1f2fcc70b9be9359be69180eba","unresolved":true,"context_lines":[{"line_number":143,"context_line":"            return True"},{"line_number":144,"context_line":""},{"line_number":145,"context_line":"        # compare each key within properties separately"},{"line_number":146,"context_line":"        if \u0027properties\u0027 in update and \u0027properties\u0027 in project:"},{"line_number":147,"context_line":"            proj_props \u003d project[\u0027properties\u0027]"},{"line_number":148,"context_line":"            props \u003d update[\u0027properties\u0027]"},{"line_number":149,"context_line":"            if any(k not in proj_props or props[k] !\u003d proj_props[k]"}],"source_content_type":"text/x-python","patch_set":7,"id":"20a82b7a_a92e371f","line":146,"updated":"2022-05-30 09:53:38.000000000","message":"\u0027properties\u0027 is not part of project anymore. It used to be a copy of project [1], the functionality still is in the sdk [2] but it is unused. But this is easy to fix: Instead of iterating over project.properties, iterate over projects directly.\n\n[1] https://github.com/openstack/openstacksdk/blob/stable/train/openstack/cloud/_normalize.py#L716\n[2] https://github.com/openstack/openstacksdk/blob/master/openstack/cloud/_normalize.py#L728","commit_id":"32f488e8a56696cb260174c233cf62900bdf5764"},{"author":{"_account_id":32962,"name":"Jakob Meng","email":"code@jakobmeng.de","username":"jakobmeng@web.de"},"change_message_id":"25358d315b8fa1e8034814654ae9d4e534a3316f","unresolved":false,"context_lines":[{"line_number":143,"context_line":"            return True"},{"line_number":144,"context_line":""},{"line_number":145,"context_line":"        # compare each key within properties separately"},{"line_number":146,"context_line":"        if \u0027properties\u0027 in update and \u0027properties\u0027 in project:"},{"line_number":147,"context_line":"            proj_props \u003d project[\u0027properties\u0027]"},{"line_number":148,"context_line":"            props \u003d update[\u0027properties\u0027]"},{"line_number":149,"context_line":"            if any(k not in proj_props or props[k] !\u003d proj_props[k]"}],"source_content_type":"text/x-python","patch_set":7,"id":"83db04be_2b8f6a52","line":146,"in_reply_to":"20a82b7a_a92e371f","updated":"2022-05-31 08:27:52.000000000","message":"Done","commit_id":"32f488e8a56696cb260174c233cf62900bdf5764"},{"author":{"_account_id":32962,"name":"Jakob Meng","email":"code@jakobmeng.de","username":"jakobmeng@web.de"},"change_message_id":"9936090d90f3bb1f2fcc70b9be9359be69180eba","unresolved":true,"context_lines":[{"line_number":174,"context_line":"        # try to retrieve by id if provided"},{"line_number":175,"context_line":"        project \u003d None"},{"line_number":176,"context_line":"        if project_id:"},{"line_number":177,"context_line":"            # TODO(rcastillo): Should fail if lookup fails?"},{"line_number":178,"context_line":"            project \u003d self.conn.identity.find_project("},{"line_number":179,"context_line":"                project_id, **find_project_kwargs)"},{"line_number":180,"context_line":"        # try to retrieve by name if no project id found"}],"source_content_type":"text/x-python","patch_set":7,"id":"048842e3_5c1772dd","line":177,"updated":"2022-05-30 09:53:38.000000000","message":"This is why we probably should keep this kind of introducing new fundamental functionality like id parameters in a separate later patch. We need some discussion around this since we have to consider other modules as well to come up with a consistent solution for all modules.","commit_id":"32f488e8a56696cb260174c233cf62900bdf5764"},{"author":{"_account_id":32962,"name":"Jakob Meng","email":"code@jakobmeng.de","username":"jakobmeng@web.de"},"change_message_id":"25358d315b8fa1e8034814654ae9d4e534a3316f","unresolved":false,"context_lines":[{"line_number":174,"context_line":"        # try to retrieve by id if provided"},{"line_number":175,"context_line":"        project \u003d None"},{"line_number":176,"context_line":"        if project_id:"},{"line_number":177,"context_line":"            # TODO(rcastillo): Should fail if lookup fails?"},{"line_number":178,"context_line":"            project \u003d self.conn.identity.find_project("},{"line_number":179,"context_line":"                project_id, **find_project_kwargs)"},{"line_number":180,"context_line":"        # try to retrieve by name if no project id found"}],"source_content_type":"text/x-python","patch_set":7,"id":"36d0465c_25f9d560","line":177,"in_reply_to":"048842e3_5c1772dd","updated":"2022-05-31 08:27:52.000000000","message":"Done","commit_id":"32f488e8a56696cb260174c233cf62900bdf5764"},{"author":{"_account_id":32962,"name":"Jakob Meng","email":"code@jakobmeng.de","username":"jakobmeng@web.de"},"change_message_id":"9936090d90f3bb1f2fcc70b9be9359be69180eba","unresolved":true,"context_lines":[{"line_number":188,"context_line":"                \u0027name\u0027: name,"},{"line_number":189,"context_line":"                \u0027description\u0027: description,"},{"line_number":190,"context_line":"                \u0027is_enabled\u0027: enabled,"},{"line_number":191,"context_line":"                \u0027properties\u0027: properties,"},{"line_number":192,"context_line":"            }"},{"line_number":193,"context_line":"            project_attrs \u003d {k: v for k, v in project_attrs.items() if v is not None}"},{"line_number":194,"context_line":"            if project is None:"}],"source_content_type":"text/x-python","patch_set":7,"id":"5edf76c5_3a40eb27","line":191,"updated":"2022-05-30 09:53:38.000000000","message":"This is not how \u0027properties\u0027 argument is supposed to be used. Please check old code.","commit_id":"32f488e8a56696cb260174c233cf62900bdf5764"},{"author":{"_account_id":32962,"name":"Jakob Meng","email":"code@jakobmeng.de","username":"jakobmeng@web.de"},"change_message_id":"3bb556c3fe51bfdce92e40ac5af4ec942c8dd632","unresolved":true,"context_lines":[{"line_number":188,"context_line":"                \u0027name\u0027: name,"},{"line_number":189,"context_line":"                \u0027description\u0027: description,"},{"line_number":190,"context_line":"                \u0027is_enabled\u0027: enabled,"},{"line_number":191,"context_line":"                \u0027properties\u0027: properties,"},{"line_number":192,"context_line":"            }"},{"line_number":193,"context_line":"            project_attrs \u003d {k: v for k, v in project_attrs.items() if v is not None}"},{"line_number":194,"context_line":"            if project is None:"}],"source_content_type":"text/x-python","patch_set":7,"id":"ccc9342d_da3f98f2","line":191,"in_reply_to":"5edf76c5_3a40eb27","updated":"2022-05-30 10:01:06.000000000","message":"The original commit shows how it is supposed to work:\n\nhttps://github.com/openstack/ansible-collections-openstack/commit/c1a2496e0ff3e8b3d9b70cb8058834adb9b35099","commit_id":"32f488e8a56696cb260174c233cf62900bdf5764"},{"author":{"_account_id":32962,"name":"Jakob Meng","email":"code@jakobmeng.de","username":"jakobmeng@web.de"},"change_message_id":"25358d315b8fa1e8034814654ae9d4e534a3316f","unresolved":false,"context_lines":[{"line_number":188,"context_line":"                \u0027name\u0027: name,"},{"line_number":189,"context_line":"                \u0027description\u0027: description,"},{"line_number":190,"context_line":"                \u0027is_enabled\u0027: enabled,"},{"line_number":191,"context_line":"                \u0027properties\u0027: properties,"},{"line_number":192,"context_line":"            }"},{"line_number":193,"context_line":"            project_attrs \u003d {k: v for k, v in project_attrs.items() if v is not None}"},{"line_number":194,"context_line":"            if project is None:"}],"source_content_type":"text/x-python","patch_set":7,"id":"92a29f11_edfab1e2","line":191,"in_reply_to":"ccc9342d_da3f98f2","updated":"2022-05-31 08:27:52.000000000","message":"Done","commit_id":"32f488e8a56696cb260174c233cf62900bdf5764"},{"author":{"_account_id":32962,"name":"Jakob Meng","email":"code@jakobmeng.de","username":"jakobmeng@web.de"},"change_message_id":"9936090d90f3bb1f2fcc70b9be9359be69180eba","unresolved":true,"context_lines":[{"line_number":192,"context_line":"            }"},{"line_number":193,"context_line":"            project_attrs \u003d {k: v for k, v in project_attrs.items() if v is not None}"},{"line_number":194,"context_line":"            if project is None:"},{"line_number":195,"context_line":"                if not self.check_mode:"},{"line_number":196,"context_line":"                    project \u003d self.conn.identity.create_project(**project_attrs)"},{"line_number":197,"context_line":"                changed \u003d True"},{"line_number":198,"context_line":"            elif self._needs_update(project, project_attrs):"}],"source_content_type":"text/x-python","patch_set":7,"id":"e5e4fb95_e2470695","line":195,"updated":"2022-05-30 09:53:38.000000000","message":"In your recordset patch you moved the self.check_mode test upwards and out of the if-else-branches. Probably a good idea here as well to decrease level of indentations and improve code readability/visibility.","commit_id":"32f488e8a56696cb260174c233cf62900bdf5764"},{"author":{"_account_id":32962,"name":"Jakob Meng","email":"code@jakobmeng.de","username":"jakobmeng@web.de"},"change_message_id":"a2b631c01a04ecb8ce55119920456b33616dd05b","unresolved":false,"context_lines":[{"line_number":192,"context_line":"            }"},{"line_number":193,"context_line":"            project_attrs \u003d {k: v for k, v in project_attrs.items() if v is not None}"},{"line_number":194,"context_line":"            if project is None:"},{"line_number":195,"context_line":"                if not self.check_mode:"},{"line_number":196,"context_line":"                    project \u003d self.conn.identity.create_project(**project_attrs)"},{"line_number":197,"context_line":"                changed \u003d True"},{"line_number":198,"context_line":"            elif self._needs_update(project, project_attrs):"}],"source_content_type":"text/x-python","patch_set":7,"id":"d6695fbf_72322bef","line":195,"in_reply_to":"e5e4fb95_e2470695","updated":"2022-05-31 08:01:29.000000000","message":"Done","commit_id":"32f488e8a56696cb260174c233cf62900bdf5764"},{"author":{"_account_id":32962,"name":"Jakob Meng","email":"code@jakobmeng.de","username":"jakobmeng@web.de"},"change_message_id":"25358d315b8fa1e8034814654ae9d4e534a3316f","unresolved":true,"context_lines":[{"line_number":124,"context_line":"        description\u003ddict(required\u003dFalse),"},{"line_number":125,"context_line":"        domain\u003ddict(required\u003dFalse, aliases\u003d[\u0027domain_id\u0027]),"},{"line_number":126,"context_line":"        is_enabled\u003ddict(default\u003dTrue, type\u003d\u0027bool\u0027, aliases\u003d[\u0027enabled\u0027]),"},{"line_number":127,"context_line":"        id\u003ddict(required\u003dFalse, type\u003d\u0027str\u0027),"},{"line_number":128,"context_line":"        properties\u003ddict(required\u003dFalse, type\u003d\u0027dict\u0027, min_ver\u003d\u00270.45.1\u0027),"},{"line_number":129,"context_line":"        state\u003ddict(default\u003d\u0027present\u0027, choices\u003d[\u0027absent\u0027, \u0027present\u0027])"},{"line_number":130,"context_line":"    )"}],"source_content_type":"text/x-python","patch_set":8,"id":"41bb0e50_1ebc11f4","line":127,"updated":"2022-05-31 08:27:52.000000000","message":"leftover","commit_id":"9fcf840de3744bc46b4f1e1d005856b3ef0b08e7"},{"author":{"_account_id":32962,"name":"Jakob Meng","email":"code@jakobmeng.de","username":"jakobmeng@web.de"},"change_message_id":"193a7e42cae193163ec014dafa5392f8fd208a1f","unresolved":false,"context_lines":[{"line_number":124,"context_line":"        description\u003ddict(required\u003dFalse),"},{"line_number":125,"context_line":"        domain\u003ddict(required\u003dFalse, aliases\u003d[\u0027domain_id\u0027]),"},{"line_number":126,"context_line":"        is_enabled\u003ddict(default\u003dTrue, type\u003d\u0027bool\u0027, aliases\u003d[\u0027enabled\u0027]),"},{"line_number":127,"context_line":"        id\u003ddict(required\u003dFalse, type\u003d\u0027str\u0027),"},{"line_number":128,"context_line":"        properties\u003ddict(required\u003dFalse, type\u003d\u0027dict\u0027, min_ver\u003d\u00270.45.1\u0027),"},{"line_number":129,"context_line":"        state\u003ddict(default\u003d\u0027present\u0027, choices\u003d[\u0027absent\u0027, \u0027present\u0027])"},{"line_number":130,"context_line":"    )"}],"source_content_type":"text/x-python","patch_set":8,"id":"2cfac0fb_c1b19b5a","line":127,"in_reply_to":"41bb0e50_1ebc11f4","updated":"2022-05-31 08:36:51.000000000","message":"Done","commit_id":"9fcf840de3744bc46b4f1e1d005856b3ef0b08e7"},{"author":{"_account_id":32962,"name":"Jakob Meng","email":"code@jakobmeng.de","username":"jakobmeng@web.de"},"change_message_id":"25358d315b8fa1e8034814654ae9d4e534a3316f","unresolved":true,"context_lines":[{"line_number":139,"context_line":""},{"line_number":140,"context_line":"        # We\u0027re not getting project properties from the sdk, so assume we"},{"line_number":141,"context_line":"        # need to update if we have properties"},{"line_number":142,"context_line":"        return properties is not None"},{"line_number":143,"context_line":""},{"line_number":144,"context_line":"    def _get_domain_id(self, domain):"},{"line_number":145,"context_line":"        dom_obj \u003d self.conn.identity.find_domain(domain)"}],"source_content_type":"text/x-python","patch_set":8,"id":"658f7102_859d2ee6","line":142,"updated":"2022-05-31 08:27:52.000000000","message":"The SDK does not even send unknown resource attributes (what we call properties here) to OpenStack API when updating resources (projects). Hence we do not have to call update if properties is set because SDK wont do anything with them anyway.","commit_id":"9fcf840de3744bc46b4f1e1d005856b3ef0b08e7"},{"author":{"_account_id":34208,"name":"Rafael Castillo","email":"rcastill@redhat.com","username":"rcastill"},"change_message_id":"73a09b8190dc5bee4c3ac011c906287cc9a37e32","unresolved":true,"context_lines":[{"line_number":140,"context_line":"            return True"},{"line_number":141,"context_line":""},{"line_number":142,"context_line":"        # Additional keys passed by user will be checked completely"},{"line_number":143,"context_line":"        if extra and any(extra[k] !\u003d project[k] for k in extra.keys()):"},{"line_number":144,"context_line":"            return True"},{"line_number":145,"context_line":""},{"line_number":146,"context_line":"        return False"}],"source_content_type":"text/x-python","patch_set":10,"id":"18b761aa_a05dd691","line":143,"updated":"2022-05-31 22:07:46.000000000","message":"This will throw a KeyError when k isn\u0027t in project.","commit_id":"ba0baf71808e3d79e48ae21f2d0c4502ad52854b"},{"author":{"_account_id":34208,"name":"Rafael Castillo","email":"rcastill@redhat.com","username":"rcastill"},"change_message_id":"20864443f5c9cf8be1114ffcab0535a9f23d4e90","unresolved":false,"context_lines":[{"line_number":140,"context_line":"            return True"},{"line_number":141,"context_line":""},{"line_number":142,"context_line":"        # Additional keys passed by user will be checked completely"},{"line_number":143,"context_line":"        if extra and any(extra[k] !\u003d project[k] for k in extra.keys()):"},{"line_number":144,"context_line":"            return True"},{"line_number":145,"context_line":""},{"line_number":146,"context_line":"        return False"}],"source_content_type":"text/x-python","patch_set":10,"id":"0029fc70_54e685c8","line":143,"in_reply_to":"18b761aa_a05dd691","updated":"2022-05-31 22:09:34.000000000","message":"Done","commit_id":"ba0baf71808e3d79e48ae21f2d0c4502ad52854b"},{"author":{"_account_id":10969,"name":"Shnaidman Sagi (Sergey)","display_name":"Shnaidman Sagi","email":"sshnaidm@redhat.com","username":"sergsh"},"change_message_id":"4b4ad6263f3de1b0da5f38fbaa1c6a31331add86","unresolved":true,"context_lines":[{"line_number":134,"context_line":""},{"line_number":135,"context_line":"    def _needs_update(self, project, update, extra):"},{"line_number":136,"context_line":"        keys \u003d (\u0027description\u0027, \u0027is_enabled\u0027, \u0027name\u0027)"},{"line_number":137,"context_line":"        if any(update[k] !\u003d project[k] for k in keys):"},{"line_number":138,"context_line":"            return True"},{"line_number":139,"context_line":""},{"line_number":140,"context_line":"        # Additional keys passed by user will be checked completely"},{"line_number":141,"context_line":"        if extra and any(k not in project or extra[k] !\u003d project[k]"}],"source_content_type":"text/x-python","patch_set":14,"id":"d1479fd4_d6dd4fb4","line":138,"range":{"start_line":137,"start_character":8,"end_line":138,"end_character":23},"updated":"2022-07-09 12:56:27.000000000","message":"If we filtered out in line 192 \"description\" it will fail here (what actually happens in tripleo job)","commit_id":"982814a0b32711ff8e75edae4c832af64070f3c1"},{"author":{"_account_id":32962,"name":"Jakob Meng","email":"code@jakobmeng.de","username":"jakobmeng@web.de"},"change_message_id":"7e7ff17785b227029ad1ea45fa0adfae57f554ff","unresolved":false,"context_lines":[{"line_number":134,"context_line":""},{"line_number":135,"context_line":"    def _needs_update(self, project, update, extra):"},{"line_number":136,"context_line":"        keys \u003d (\u0027description\u0027, \u0027is_enabled\u0027, \u0027name\u0027)"},{"line_number":137,"context_line":"        if any(update[k] !\u003d project[k] for k in keys):"},{"line_number":138,"context_line":"            return True"},{"line_number":139,"context_line":""},{"line_number":140,"context_line":"        # Additional keys passed by user will be checked completely"},{"line_number":141,"context_line":"        if extra and any(k not in project or extra[k] !\u003d project[k]"}],"source_content_type":"text/x-python","patch_set":14,"id":"fbcbe031_a17fc5e9","line":138,"range":{"start_line":137,"start_character":8,"end_line":138,"end_character":23},"in_reply_to":"d1479fd4_d6dd4fb4","updated":"2022-07-11 07:27:28.000000000","message":"Done","commit_id":"982814a0b32711ff8e75edae4c832af64070f3c1"},{"author":{"_account_id":32962,"name":"Jakob Meng","email":"code@jakobmeng.de","username":"jakobmeng@web.de"},"change_message_id":"c323ac50f52057079223573bb759c3c72d24e9e1","unresolved":true,"context_lines":[{"line_number":179,"context_line":"                name, **find_project_kwargs)"},{"line_number":180,"context_line":""},{"line_number":181,"context_line":"        # Make sure name is not actually an ID"},{"line_number":182,"context_line":"        if project and name !\u003d project.name:"},{"line_number":183,"context_line":"            self.fail_json(\u0027Project {0} not found\u0027.format(name))"},{"line_number":184,"context_line":""},{"line_number":185,"context_line":"        project_attrs \u003d {"}],"source_content_type":"text/x-python","patch_set":14,"id":"8ff26f12_6d281d26","line":182,"updated":"2022-07-11 07:25:02.000000000","message":"When state is absent, then name is allowed to be an ID, because it will only be used to find the project above.\n\nWhen state is present and the project has to be created (which would require a name instead of an id), then project is none, so this conditional will not evaluate to true.\n\nWhen state is present and the project already exists and the name does not match, then the user must have given an ID in \u0027name\u0027 (because if the user had given a name instead of an id, then find_project would have returned a project with a matching name only). In this case (user gave an id) we do not know whether the user wanted to update the name or not, because we only got an id. The user might have given the new name in \u0027properties\u0027 in which case our update mechanism would work just fine.\n\nSo I would simply drop this whole branch.","commit_id":"982814a0b32711ff8e75edae4c832af64070f3c1"},{"author":{"_account_id":32962,"name":"Jakob Meng","email":"code@jakobmeng.de","username":"jakobmeng@web.de"},"change_message_id":"7e7ff17785b227029ad1ea45fa0adfae57f554ff","unresolved":false,"context_lines":[{"line_number":179,"context_line":"                name, **find_project_kwargs)"},{"line_number":180,"context_line":""},{"line_number":181,"context_line":"        # Make sure name is not actually an ID"},{"line_number":182,"context_line":"        if project and name !\u003d project.name:"},{"line_number":183,"context_line":"            self.fail_json(\u0027Project {0} not found\u0027.format(name))"},{"line_number":184,"context_line":""},{"line_number":185,"context_line":"        project_attrs \u003d {"}],"source_content_type":"text/x-python","patch_set":14,"id":"01e4ef14_329982e0","line":182,"in_reply_to":"8ff26f12_6d281d26","updated":"2022-07-11 07:27:28.000000000","message":"Done","commit_id":"982814a0b32711ff8e75edae4c832af64070f3c1"},{"author":{"_account_id":10969,"name":"Shnaidman Sagi (Sergey)","display_name":"Shnaidman Sagi","email":"sshnaidm@redhat.com","username":"sergsh"},"change_message_id":"4b4ad6263f3de1b0da5f38fbaa1c6a31331add86","unresolved":true,"context_lines":[{"line_number":188,"context_line":"            \u0027is_enabled\u0027: enabled,"},{"line_number":189,"context_line":"            \u0027domain_id\u0027: domain_id,"},{"line_number":190,"context_line":"        }"},{"line_number":191,"context_line":"        project_attrs \u003d {k: v for k, v in project_attrs.items()"},{"line_number":192,"context_line":"                         if v is not None}"},{"line_number":193,"context_line":"        # Add in arbitrary properties"},{"line_number":194,"context_line":"        if properties:"},{"line_number":195,"context_line":"            project_attrs.update(properties)"}],"source_content_type":"text/x-python","patch_set":14,"id":"f0f91125_798b69d7","line":192,"range":{"start_line":191,"start_character":0,"end_line":192,"end_character":42},"updated":"2022-07-09 12:56:27.000000000","message":"We filter out all non-set (None) values, should we?","commit_id":"982814a0b32711ff8e75edae4c832af64070f3c1"},{"author":{"_account_id":32962,"name":"Jakob Meng","email":"code@jakobmeng.de","username":"jakobmeng@web.de"},"change_message_id":"c323ac50f52057079223573bb759c3c72d24e9e1","unresolved":true,"context_lines":[{"line_number":188,"context_line":"            \u0027is_enabled\u0027: enabled,"},{"line_number":189,"context_line":"            \u0027domain_id\u0027: domain_id,"},{"line_number":190,"context_line":"        }"},{"line_number":191,"context_line":"        project_attrs \u003d {k: v for k, v in project_attrs.items()"},{"line_number":192,"context_line":"                         if v is not None}"},{"line_number":193,"context_line":"        # Add in arbitrary properties"},{"line_number":194,"context_line":"        if properties:"},{"line_number":195,"context_line":"            project_attrs.update(properties)"}],"source_content_type":"text/x-python","patch_set":14,"id":"fe4f702d_134abb86","line":192,"range":{"start_line":191,"start_character":0,"end_line":192,"end_character":42},"in_reply_to":"f0f91125_798b69d7","updated":"2022-07-11 07:25:02.000000000","message":"Most modules including this one use \u0027None\u0027 values as indicators for \u0027user does not want to change this value\u0027. This style might be debatable but that is how it was, so Rafael is being consistent here with the old behavior. If we want to change this, we should discuss and implement this across all modules imho.","commit_id":"982814a0b32711ff8e75edae4c832af64070f3c1"},{"author":{"_account_id":32962,"name":"Jakob Meng","email":"code@jakobmeng.de","username":"jakobmeng@web.de"},"change_message_id":"c323ac50f52057079223573bb759c3c72d24e9e1","unresolved":true,"context_lines":[{"line_number":214,"context_line":""},{"line_number":215,"context_line":"        if project:"},{"line_number":216,"context_line":"            project \u003d project.to_dict(computed\u003dFalse)"},{"line_number":217,"context_line":"        self.exit_json(changed\u003dchanged, project\u003dproject)"},{"line_number":218,"context_line":""},{"line_number":219,"context_line":""},{"line_number":220,"context_line":"def main():"}],"source_content_type":"text/x-python","patch_set":14,"id":"501e3b70_3a34acfd","line":217,"updated":"2022-07-11 07:25:02.000000000","message":"When a project has been deleted in the previous paragraph, then project would be non-null and thus would be returned by self.exit_json(). In other modules return only \u0027changed\u0027 on state\u003d\u003d\u0027absent\u0027, hence we should do the same here for consistency.","commit_id":"982814a0b32711ff8e75edae4c832af64070f3c1"},{"author":{"_account_id":32962,"name":"Jakob Meng","email":"code@jakobmeng.de","username":"jakobmeng@web.de"},"change_message_id":"7e7ff17785b227029ad1ea45fa0adfae57f554ff","unresolved":false,"context_lines":[{"line_number":214,"context_line":""},{"line_number":215,"context_line":"        if project:"},{"line_number":216,"context_line":"            project \u003d project.to_dict(computed\u003dFalse)"},{"line_number":217,"context_line":"        self.exit_json(changed\u003dchanged, project\u003dproject)"},{"line_number":218,"context_line":""},{"line_number":219,"context_line":""},{"line_number":220,"context_line":"def main():"}],"source_content_type":"text/x-python","patch_set":14,"id":"81de068b_83224313","line":217,"in_reply_to":"501e3b70_3a34acfd","updated":"2022-07-11 07:27:28.000000000","message":"Done","commit_id":"982814a0b32711ff8e75edae4c832af64070f3c1"}]}
