)]}'
{"/PATCHSET_LEVEL":[{"author":{"_account_id":34208,"name":"Rafael Castillo","email":"rcastill@redhat.com","username":"rcastill"},"change_message_id":"65ab628a52dec251e546bf78c543e246f4fc61f8","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":5,"id":"0c5dccfe_5ec573c6","updated":"2022-07-31 02:51:10.000000000","message":"recheck","commit_id":"c91875d43cd61d44f8cb022e65ea5bccae898703"},{"author":{"_account_id":34208,"name":"Rafael Castillo","email":"rcastill@redhat.com","username":"rcastill"},"change_message_id":"8d89b99592a9f963a8b735d5fba26268ebfc1b16","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":6,"id":"44736a17_f47b26fb","updated":"2022-08-04 07:15:41.000000000","message":"recheck","commit_id":"22b59caed43c8b829c323e4e627f5582d8683038"},{"author":{"_account_id":32962,"name":"Jakob Meng","email":"code@jakobmeng.de","username":"jakobmeng@web.de"},"change_message_id":"f1769a7b439c27fd9d968a948d4cabedd68a0293","unresolved":true,"context_lines":[],"source_content_type":"","patch_set":11,"id":"afbc8623_1a8288f0","updated":"2022-08-10 09:33:10.000000000","message":"Thank you Rafael, I really appreciate the effort you put into that module. Great tests and i like the idea how you take advantage of the fact that openstacksdk only sends known attributes to OpenStack API. \n\nMy main concern is that a single module to handle all quotas, for block_storage, compute and network. Wouldn\u0027t it be cleaner to split it into three modules?","commit_id":"80185160977f0a3c68713b449fb6a9add2b4fff6"},{"author":{"_account_id":34208,"name":"Rafael Castillo","email":"rcastill@redhat.com","username":"rcastill"},"change_message_id":"7abf530911a21d51013e2fa67c909b914603b783","unresolved":true,"context_lines":[],"source_content_type":"","patch_set":11,"id":"76d3c81a_9f49a1a6","in_reply_to":"242b09ff_e80814b9","updated":"2022-08-10 15:16:24.000000000","message":"\u003e My main concern is that a single module to handle all quotas, for block_storage, compute and network. Wouldn\u0027t it be cleaner to split it into three modules?\n\nAgreed. I kept it as is for backwards compatibility reasons, and because we\u0027re pressed for time.\n\nMy proposal would be to keep this as is, introduce simpler separate *_quota modules in a point release, and deleting this module in a (maybe not so distant?) 3.0.0 release.","commit_id":"80185160977f0a3c68713b449fb6a9add2b4fff6"},{"author":{"_account_id":32962,"name":"Jakob Meng","email":"code@jakobmeng.de","username":"jakobmeng@web.de"},"change_message_id":"37528915907834c491e6d1a684a20659798f69c9","unresolved":true,"context_lines":[],"source_content_type":"","patch_set":11,"id":"76fc84b8_05c33683","in_reply_to":"76d3c81a_9f49a1a6","updated":"2022-09-06 08:45:07.000000000","message":"Agree.","commit_id":"80185160977f0a3c68713b449fb6a9add2b4fff6"},{"author":{"_account_id":34208,"name":"Rafael Castillo","email":"rcastill@redhat.com","username":"rcastill"},"change_message_id":"d57069f78d0ca58785dae36893748e5d60c7d76a","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":11,"id":"abc855c2_97d30c40","in_reply_to":"76fc84b8_05c33683","updated":"2022-09-21 20:57:03.000000000","message":"Done","commit_id":"80185160977f0a3c68713b449fb6a9add2b4fff6"},{"author":{"_account_id":32962,"name":"Jakob Meng","email":"code@jakobmeng.de","username":"jakobmeng@web.de"},"change_message_id":"11b9e8ad1edc3ada0d2fa030a8421cca171ab6e9","unresolved":true,"context_lines":[],"source_content_type":"","patch_set":11,"id":"242b09ff_e80814b9","in_reply_to":"afbc8623_1a8288f0","updated":"2022-08-10 09:45:26.000000000","message":"fyi we have name conflicts but they only happen when openstacksdk is used with old openstack releases. Rafael\u0027s code handles these by filtering them.\n\n  compute_quota_set_keys \u003d sorted(openstack.compute.v2.quota_set.QuotaSet().to_dict(computed\u003dFalse).keys())\n  network_quota_keys \u003d sorted(openstack.network.v2.quota.Quota().to_dict(computed\u003dFalse).keys())\n  block_storage_quota_set_keys \u003d sorted(openstack.block_storage.v3.quota_set.QuotaSet().to_dict(computed\u003dFalse).keys())\n\n  set(compute_quota_set_keys) \u0026 set(network_quota_keys) - set([\"id\", \"name\"])\n  \u003e {\u0027floating_ips\u0027, \u0027networks\u0027, \u0027security_group_rules\u0027, \u0027security_groups\u0027}\n\n  set(network_quota_keys) \u0026 set(block_storage_quota_set_keys) - set([\"id\", \"name\"])\n  \u003e set()\n\n  set(compute_quota_set_keys) \u0026 set(block_storage_quota_set_keys) - set([\"id\", \"name\"])\n  \u003e {\u0027reservation\u0027, \u0027usage\u0027}","commit_id":"80185160977f0a3c68713b449fb6a9add2b4fff6"},{"author":{"_account_id":31503,"name":"Angelos Kolaitis","email":"angelos.kolaitis@canonical.com","username":"neoaggelos"},"change_message_id":"792e7dfa911bc5bde93668db1da5b9b4346beb32","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":18,"id":"709244fb_e9ec67ed","updated":"2022-10-03 14:52:29.000000000","message":"Thanks a lot for this work, I found some issues myself with the quota module after upgrading to Yoga, and this PR cleanly addresses them in a much better way than my own hacks.\n\nNot a maintainer, but giving a +1. I\u0027d love to see this merged soon.","commit_id":"8366d73acbc760923d59e72682037b7d0fb1b87d"},{"author":{"_account_id":32962,"name":"Jakob Meng","email":"code@jakobmeng.de","username":"jakobmeng@web.de"},"change_message_id":"27143da0f8a2dd14dfd7c61c7dbc290461b28be7","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":19,"id":"f889d67f_ca71e13c","updated":"2022-10-05 18:46:24.000000000","message":"Latest patchset drops changes to galaxy.yml, reworks DOCUMENTATION, EXAMPLES and RETURN docstrings and replaces exception handler with conditionals. The latter allows to drop the dependency on keystoneauth1 library.\n\nWhat do you think, Rafael?","commit_id":"af375e42c7ba7bd1f30e8ea6d99aa0a782f2d6de"},{"author":{"_account_id":34208,"name":"Rafael Castillo","email":"rcastill@redhat.com","username":"rcastill"},"change_message_id":"df59d27b75d767e7a6da5c977958e243849487e4","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":19,"id":"ac3de395_08157b2a","in_reply_to":"f889d67f_ca71e13c","updated":"2022-10-06 02:44:39.000000000","message":"This is a much simpler approach. Thanks Jakob.","commit_id":"af375e42c7ba7bd1f30e8ea6d99aa0a782f2d6de"}],"plugins/modules/quota.py":[{"author":{"_account_id":32962,"name":"Jakob Meng","email":"code@jakobmeng.de","username":"jakobmeng@web.de"},"change_message_id":"37528915907834c491e6d1a684a20659798f69c9","unresolved":true,"context_lines":[{"line_number":68,"context_line":"    key_pairs:"},{"line_number":69,"context_line":"        description: Number of key pairs to allow."},{"line_number":70,"context_line":"        type: int"},{"line_number":71,"context_line":"    loadbalancer:"},{"line_number":72,"context_line":"        description: Number of load balancers to allow."},{"line_number":73,"context_line":"        type: int"},{"line_number":74,"context_line":"    metadata_items:"}],"source_content_type":"text/x-python","patch_set":12,"id":"8ca87a31_702d9ac3","side":"PARENT","line":71,"updated":"2022-09-06 08:45:07.000000000","message":"Is loadbalancer (load_balancers in new sdk [1]) missing in new code?\n\n[1] https://opendev.org/openstack/openstacksdk/src/commit/9fa6603d4e5104fb33e3688967cd128c0b8ad019/openstack/network/v2/quota.py#L39","commit_id":"b99218c143fca541bfcd9b0ce026e0bb02913d82"},{"author":{"_account_id":34208,"name":"Rafael Castillo","email":"rcastill@redhat.com","username":"rcastill"},"change_message_id":"f925db30d48ba3553168f5a846d632fa081a4f67","unresolved":true,"context_lines":[{"line_number":68,"context_line":"    key_pairs:"},{"line_number":69,"context_line":"        description: Number of key pairs to allow."},{"line_number":70,"context_line":"        type: int"},{"line_number":71,"context_line":"    loadbalancer:"},{"line_number":72,"context_line":"        description: Number of load balancers to allow."},{"line_number":73,"context_line":"        type: int"},{"line_number":74,"context_line":"    metadata_items:"}],"source_content_type":"text/x-python","patch_set":12,"id":"adfa91aa_52ce41bc","side":"PARENT","line":71,"in_reply_to":"8ca87a31_702d9ac3","updated":"2022-09-15 16:57:52.000000000","message":"Missed this one since it\u0027s missing in api-ref. It might be from the octavia extension.","commit_id":"b99218c143fca541bfcd9b0ce026e0bb02913d82"},{"author":{"_account_id":34208,"name":"Rafael Castillo","email":"rcastill@redhat.com","username":"rcastill"},"change_message_id":"d57069f78d0ca58785dae36893748e5d60c7d76a","unresolved":false,"context_lines":[{"line_number":68,"context_line":"    key_pairs:"},{"line_number":69,"context_line":"        description: Number of key pairs to allow."},{"line_number":70,"context_line":"        type: int"},{"line_number":71,"context_line":"    loadbalancer:"},{"line_number":72,"context_line":"        description: Number of load balancers to allow."},{"line_number":73,"context_line":"        type: int"},{"line_number":74,"context_line":"    metadata_items:"}],"source_content_type":"text/x-python","patch_set":12,"id":"67caee45_e04ddd94","side":"PARENT","line":71,"in_reply_to":"adfa91aa_52ce41bc","updated":"2022-09-21 20:57:03.000000000","message":"Done","commit_id":"b99218c143fca541bfcd9b0ce026e0bb02913d82"},{"author":{"_account_id":32962,"name":"Jakob Meng","email":"code@jakobmeng.de","username":"jakobmeng@web.de"},"change_message_id":"37528915907834c491e6d1a684a20659798f69c9","unresolved":true,"context_lines":[{"line_number":86,"context_line":"    port:"},{"line_number":87,"context_line":"        description: Number of Network ports to allow, this needs to be greater than the instances limit."},{"line_number":88,"context_line":"        type: int"},{"line_number":89,"context_line":"    properties:"},{"line_number":90,"context_line":"        description: Number of properties to allow."},{"line_number":91,"context_line":"        type: int"},{"line_number":92,"context_line":"    ram:"}],"source_content_type":"text/x-python","patch_set":12,"id":"1926238b_5478ce48","side":"PARENT","line":89,"updated":"2022-09-06 08:45:07.000000000","message":"Where is properties nowadays? It has been added with the initial module code [1] when aoc was still part of ansible and was using shade [2]. But what could be the modern equivalent in openstacksdk?\n\n[1] https://github.com/ansible/ansible/commit/583136980da05ea80c424a255b09541279eba4ac\n[2] https://opendev.org/openstack/shade/src/branch/master/shade/openstackcloud.py","commit_id":"b99218c143fca541bfcd9b0ce026e0bb02913d82"},{"author":{"_account_id":34208,"name":"Rafael Castillo","email":"rcastill@redhat.com","username":"rcastill"},"change_message_id":"f925db30d48ba3553168f5a846d632fa081a4f67","unresolved":true,"context_lines":[{"line_number":86,"context_line":"    port:"},{"line_number":87,"context_line":"        description: Number of Network ports to allow, this needs to be greater than the instances limit."},{"line_number":88,"context_line":"        type: int"},{"line_number":89,"context_line":"    properties:"},{"line_number":90,"context_line":"        description: Number of properties to allow."},{"line_number":91,"context_line":"        type: int"},{"line_number":92,"context_line":"    ram:"}],"source_content_type":"text/x-python","patch_set":12,"id":"f6eff1aa_fb5d37fa","side":"PARENT","line":89,"in_reply_to":"1926238b_5478ce48","updated":"2022-09-15 16:57:52.000000000","message":"Good question. Seems missing from the sdk and from any api docs so we can get away with excluding it.","commit_id":"b99218c143fca541bfcd9b0ce026e0bb02913d82"},{"author":{"_account_id":34208,"name":"Rafael Castillo","email":"rcastill@redhat.com","username":"rcastill"},"change_message_id":"d57069f78d0ca58785dae36893748e5d60c7d76a","unresolved":false,"context_lines":[{"line_number":86,"context_line":"    port:"},{"line_number":87,"context_line":"        description: Number of Network ports to allow, this needs to be greater than the instances limit."},{"line_number":88,"context_line":"        type: int"},{"line_number":89,"context_line":"    properties:"},{"line_number":90,"context_line":"        description: Number of properties to allow."},{"line_number":91,"context_line":"        type: int"},{"line_number":92,"context_line":"    ram:"}],"source_content_type":"text/x-python","patch_set":12,"id":"2bb7c008_3c8d55cb","side":"PARENT","line":89,"in_reply_to":"f6eff1aa_fb5d37fa","updated":"2022-09-21 20:57:03.000000000","message":"Done","commit_id":"b99218c143fca541bfcd9b0ce026e0bb02913d82"},{"author":{"_account_id":32962,"name":"Jakob Meng","email":"code@jakobmeng.de","username":"jakobmeng@web.de"},"change_message_id":"37528915907834c491e6d1a684a20659798f69c9","unresolved":true,"context_lines":[{"line_number":200,"context_line":"    server_groups: \"{{ item.server_groups }}\""},{"line_number":201,"context_line":"    snapshots: \"{{ item.snapshots }}\""},{"line_number":202,"context_line":"    volumes: \"{{ item.volumes }}\""},{"line_number":203,"context_line":"    volumes_types:"},{"line_number":204,"context_line":"      volumes_lvm: \"{{ item.volumes_lvm }}\""},{"line_number":205,"context_line":"    snapshots_types:"},{"line_number":206,"context_line":"      snapshots_lvm: \"{{ item.snapshots_lvm }}\""}],"source_content_type":"text/x-python","patch_set":12,"id":"43c6b81a_16d2e6cc","side":"PARENT","line":203,"updated":"2022-09-06 08:45:07.000000000","message":"Readd those examples because the description of the module attributes can only be understood by reading the block storage API [1]. Maybe we should drop those _types attributes completely, refer to comments above.\n\n[1] https://docs.openstack.org/api-ref/block-storage/v3/index.html?expanded\u003dshow-quotas-for-a-project-detail#id755","commit_id":"b99218c143fca541bfcd9b0ce026e0bb02913d82"},{"author":{"_account_id":34208,"name":"Rafael Castillo","email":"rcastill@redhat.com","username":"rcastill"},"change_message_id":"be1fee4a7536ef524519122be3ac6fd5f175b1e0","unresolved":false,"context_lines":[{"line_number":200,"context_line":"    server_groups: \"{{ item.server_groups }}\""},{"line_number":201,"context_line":"    snapshots: \"{{ item.snapshots }}\""},{"line_number":202,"context_line":"    volumes: \"{{ item.volumes }}\""},{"line_number":203,"context_line":"    volumes_types:"},{"line_number":204,"context_line":"      volumes_lvm: \"{{ item.volumes_lvm }}\""},{"line_number":205,"context_line":"    snapshots_types:"},{"line_number":206,"context_line":"      snapshots_lvm: \"{{ item.snapshots_lvm }}\""}],"source_content_type":"text/x-python","patch_set":12,"id":"654274d2_4aff94d0","side":"PARENT","line":203,"in_reply_to":"0211f7ba_36ae9dd4","updated":"2022-09-21 20:57:10.000000000","message":"Done","commit_id":"b99218c143fca541bfcd9b0ce026e0bb02913d82"},{"author":{"_account_id":34208,"name":"Rafael Castillo","email":"rcastill@redhat.com","username":"rcastill"},"change_message_id":"d57069f78d0ca58785dae36893748e5d60c7d76a","unresolved":true,"context_lines":[{"line_number":200,"context_line":"    server_groups: \"{{ item.server_groups }}\""},{"line_number":201,"context_line":"    snapshots: \"{{ item.snapshots }}\""},{"line_number":202,"context_line":"    volumes: \"{{ item.volumes }}\""},{"line_number":203,"context_line":"    volumes_types:"},{"line_number":204,"context_line":"      volumes_lvm: \"{{ item.volumes_lvm }}\""},{"line_number":205,"context_line":"    snapshots_types:"},{"line_number":206,"context_line":"      snapshots_lvm: \"{{ item.snapshots_lvm }}\""}],"source_content_type":"text/x-python","patch_set":12,"id":"0211f7ba_36ae9dd4","side":"PARENT","line":203,"in_reply_to":"43c6b81a_16d2e6cc","updated":"2022-09-21 20:57:03.000000000","message":"I\u0027ve removed support for those attributes","commit_id":"b99218c143fca541bfcd9b0ce026e0bb02913d82"},{"author":{"_account_id":32962,"name":"Jakob Meng","email":"code@jakobmeng.de","username":"jakobmeng@web.de"},"change_message_id":"37528915907834c491e6d1a684a20659798f69c9","unresolved":true,"context_lines":[{"line_number":286,"context_line":"        metadata_items\u003ddict(type\u003d\u0027int\u0027),"},{"line_number":287,"context_line":"        network\u003ddict(type\u003d\u0027int\u0027),"},{"line_number":288,"context_line":"        per_volume_gigabytes\u003ddict(type\u003d\u0027int\u0027),"},{"line_number":289,"context_line":"        pool\u003ddict(type\u003d\u0027int\u0027),"},{"line_number":290,"context_line":"        port\u003ddict(type\u003d\u0027int\u0027),"},{"line_number":291,"context_line":"        project\u003ddict(type\u003d\u0027int\u0027),"},{"line_number":292,"context_line":"        properties\u003ddict(type\u003d\u0027int\u0027),"}],"source_content_type":"text/x-python","patch_set":12,"id":"f0c49b90_0ea28080","side":"PARENT","line":289,"updated":"2022-09-06 08:45:07.000000000","message":"Is pool (pools in new sdk [1]) missing in the new code?\n\n[1] https://opendev.org/openstack/openstacksdk/src/commit/9fa6603d4e5104fb33e3688967cd128c0b8ad019/openstack/network/v2/quota.py#L45","commit_id":"b99218c143fca541bfcd9b0ce026e0bb02913d82"},{"author":{"_account_id":34208,"name":"Rafael Castillo","email":"rcastill@redhat.com","username":"rcastill"},"change_message_id":"f925db30d48ba3553168f5a846d632fa081a4f67","unresolved":false,"context_lines":[{"line_number":286,"context_line":"        metadata_items\u003ddict(type\u003d\u0027int\u0027),"},{"line_number":287,"context_line":"        network\u003ddict(type\u003d\u0027int\u0027),"},{"line_number":288,"context_line":"        per_volume_gigabytes\u003ddict(type\u003d\u0027int\u0027),"},{"line_number":289,"context_line":"        pool\u003ddict(type\u003d\u0027int\u0027),"},{"line_number":290,"context_line":"        port\u003ddict(type\u003d\u0027int\u0027),"},{"line_number":291,"context_line":"        project\u003ddict(type\u003d\u0027int\u0027),"},{"line_number":292,"context_line":"        properties\u003ddict(type\u003d\u0027int\u0027),"}],"source_content_type":"text/x-python","patch_set":12,"id":"84cea902_5298bf6b","side":"PARENT","line":289,"in_reply_to":"f0c49b90_0ea28080","updated":"2022-09-15 16:57:52.000000000","message":"Done","commit_id":"b99218c143fca541bfcd9b0ce026e0bb02913d82"},{"author":{"_account_id":32962,"name":"Jakob Meng","email":"code@jakobmeng.de","username":"jakobmeng@web.de"},"change_message_id":"37528915907834c491e6d1a684a20659798f69c9","unresolved":true,"context_lines":[{"line_number":126,"context_line":"    volumes:"},{"line_number":127,"context_line":"        description: Number of volumes to allow."},{"line_number":128,"context_line":"        type: int"},{"line_number":129,"context_line":"    volumes_types:"},{"line_number":130,"context_line":"        description:"},{"line_number":131,"context_line":"            - Per-driver volume count quotas.  Keys should be"},{"line_number":132,"context_line":"              prefixed with C(volumes_) values should be ints."}],"source_content_type":"text/x-python","patch_set":12,"id":"37d9257f_56b5c4bc","line":129,"updated":"2022-09-06 08:45:07.000000000","message":"Maybe we should drop those *_types attributes completely because openstacksdk does not support them anymore [1]? imho we should not pretend doing so. What do you think?\n\n[1] https://opendev.org/openstack/openstacksdk/src/commit/9fa6603d4e5104fb33e3688967cd128c0b8ad019/openstack/block_storage/v3/quota_set.py","commit_id":"5f50cd37d6682581bc2f82bc37a5f481e7f657ac"},{"author":{"_account_id":34208,"name":"Rafael Castillo","email":"rcastill@redhat.com","username":"rcastill"},"change_message_id":"f925db30d48ba3553168f5a846d632fa081a4f67","unresolved":true,"context_lines":[{"line_number":126,"context_line":"    volumes:"},{"line_number":127,"context_line":"        description: Number of volumes to allow."},{"line_number":128,"context_line":"        type: int"},{"line_number":129,"context_line":"    volumes_types:"},{"line_number":130,"context_line":"        description:"},{"line_number":131,"context_line":"            - Per-driver volume count quotas.  Keys should be"},{"line_number":132,"context_line":"              prefixed with C(volumes_) values should be ints."}],"source_content_type":"text/x-python","patch_set":12,"id":"75432f20_676c66c2","line":129,"in_reply_to":"37d9257f_56b5c4bc","updated":"2022-09-15 16:57:52.000000000","message":"I agree. We can re-add if the sdk supports it in the future.","commit_id":"5f50cd37d6682581bc2f82bc37a5f481e7f657ac"},{"author":{"_account_id":34208,"name":"Rafael Castillo","email":"rcastill@redhat.com","username":"rcastill"},"change_message_id":"d57069f78d0ca58785dae36893748e5d60c7d76a","unresolved":false,"context_lines":[{"line_number":126,"context_line":"    volumes:"},{"line_number":127,"context_line":"        description: Number of volumes to allow."},{"line_number":128,"context_line":"        type: int"},{"line_number":129,"context_line":"    volumes_types:"},{"line_number":130,"context_line":"        description:"},{"line_number":131,"context_line":"            - Per-driver volume count quotas.  Keys should be"},{"line_number":132,"context_line":"              prefixed with C(volumes_) values should be ints."}],"source_content_type":"text/x-python","patch_set":12,"id":"88153d97_8919a91a","line":129,"in_reply_to":"75432f20_676c66c2","updated":"2022-09-21 20:57:03.000000000","message":"Done","commit_id":"5f50cd37d6682581bc2f82bc37a5f481e7f657ac"},{"author":{"_account_id":32962,"name":"Jakob Meng","email":"code@jakobmeng.de","username":"jakobmeng@web.de"},"change_message_id":"37528915907834c491e6d1a684a20659798f69c9","unresolved":true,"context_lines":[{"line_number":134,"context_line":""},{"line_number":135,"context_line":"requirements:"},{"line_number":136,"context_line":"    - \"python \u003e\u003d 3.6\""},{"line_number":137,"context_line":"    - \"openstacksdk \u003e\u003d 0.99.0\""},{"line_number":138,"context_line":"    - \"keystoneauth1 \u003e\u003d 3.4.0\""},{"line_number":139,"context_line":""},{"line_number":140,"context_line":"extends_documentation_fragment:"}],"source_content_type":"text/x-python","patch_set":12,"id":"e0f152e5_ffb5ee65","line":137,"updated":"2022-09-06 08:45:07.000000000","message":"check can be dropped since we require sdk\u003e\u003d 0.99.0 globally","commit_id":"5f50cd37d6682581bc2f82bc37a5f481e7f657ac"},{"author":{"_account_id":34208,"name":"Rafael Castillo","email":"rcastill@redhat.com","username":"rcastill"},"change_message_id":"f925db30d48ba3553168f5a846d632fa081a4f67","unresolved":false,"context_lines":[{"line_number":134,"context_line":""},{"line_number":135,"context_line":"requirements:"},{"line_number":136,"context_line":"    - \"python \u003e\u003d 3.6\""},{"line_number":137,"context_line":"    - \"openstacksdk \u003e\u003d 0.99.0\""},{"line_number":138,"context_line":"    - \"keystoneauth1 \u003e\u003d 3.4.0\""},{"line_number":139,"context_line":""},{"line_number":140,"context_line":"extends_documentation_fragment:"}],"source_content_type":"text/x-python","patch_set":12,"id":"dfe46e2c_b4313726","line":137,"in_reply_to":"e0f152e5_ffb5ee65","updated":"2022-09-15 16:57:52.000000000","message":"Done","commit_id":"5f50cd37d6682581bc2f82bc37a5f481e7f657ac"},{"author":{"_account_id":32962,"name":"Jakob Meng","email":"code@jakobmeng.de","username":"jakobmeng@web.de"},"change_message_id":"37528915907834c491e6d1a684a20659798f69c9","unresolved":true,"context_lines":[{"line_number":135,"context_line":"requirements:"},{"line_number":136,"context_line":"    - \"python \u003e\u003d 3.6\""},{"line_number":137,"context_line":"    - \"openstacksdk \u003e\u003d 0.99.0\""},{"line_number":138,"context_line":"    - \"keystoneauth1 \u003e\u003d 3.4.0\""},{"line_number":139,"context_line":""},{"line_number":140,"context_line":"extends_documentation_fragment:"},{"line_number":141,"context_line":"- openstack.cloud.openstack"}],"source_content_type":"text/x-python","patch_set":12,"id":"505325e8_423e4c1c","line":138,"updated":"2022-09-06 08:45:07.000000000","message":"Relic from the past which can be dropped. Or maybe it should not because we could use keystoneauth1 to increase our exception handling, see comment below.\n\nhttps://github.com/ansible/ansible/commit/1eb3fba51f38b2a34c2159ad7bbdf5ea3103b165","commit_id":"5f50cd37d6682581bc2f82bc37a5f481e7f657ac"},{"author":{"_account_id":34208,"name":"Rafael Castillo","email":"rcastill@redhat.com","username":"rcastill"},"change_message_id":"f925db30d48ba3553168f5a846d632fa081a4f67","unresolved":false,"context_lines":[{"line_number":135,"context_line":"requirements:"},{"line_number":136,"context_line":"    - \"python \u003e\u003d 3.6\""},{"line_number":137,"context_line":"    - \"openstacksdk \u003e\u003d 0.99.0\""},{"line_number":138,"context_line":"    - \"keystoneauth1 \u003e\u003d 3.4.0\""},{"line_number":139,"context_line":""},{"line_number":140,"context_line":"extends_documentation_fragment:"},{"line_number":141,"context_line":"- openstack.cloud.openstack"}],"source_content_type":"text/x-python","patch_set":12,"id":"42b177d6_95d9f911","line":138,"in_reply_to":"505325e8_423e4c1c","updated":"2022-09-15 16:57:52.000000000","message":"I\u0027ve gone ahead and changed the exceptioon handling back. So this stays for now.","commit_id":"5f50cd37d6682581bc2f82bc37a5f481e7f657ac"},{"author":{"_account_id":32962,"name":"Jakob Meng","email":"code@jakobmeng.de","username":"jakobmeng@web.de"},"change_message_id":"37528915907834c491e6d1a684a20659798f69c9","unresolved":true,"context_lines":[{"line_number":169,"context_line":""},{"line_number":170,"context_line":"# Complete example"},{"line_number":171,"context_line":"- name: Update quotas"},{"line_number":172,"context_line":"  openstack.cloud.quota:"},{"line_number":173,"context_line":"    name: demo_project"},{"line_number":174,"context_line":"    floating_ips: 5"},{"line_number":175,"context_line":"    networks: 50"}],"source_content_type":"text/x-python","patch_set":12,"id":"912696c2_a8062285","line":172,"updated":"2022-09-06 08:45:07.000000000","message":"Much better this way! The previous example was hard to understand. Please remember to update this example when readding pools ;)","commit_id":"5f50cd37d6682581bc2f82bc37a5f481e7f657ac"},{"author":{"_account_id":34208,"name":"Rafael Castillo","email":"rcastill@redhat.com","username":"rcastill"},"change_message_id":"f925db30d48ba3553168f5a846d632fa081a4f67","unresolved":false,"context_lines":[{"line_number":169,"context_line":""},{"line_number":170,"context_line":"# Complete example"},{"line_number":171,"context_line":"- name: Update quotas"},{"line_number":172,"context_line":"  openstack.cloud.quota:"},{"line_number":173,"context_line":"    name: demo_project"},{"line_number":174,"context_line":"    floating_ips: 5"},{"line_number":175,"context_line":"    networks: 50"}],"source_content_type":"text/x-python","patch_set":12,"id":"284bc433_575c338b","line":172,"in_reply_to":"912696c2_a8062285","updated":"2022-09-15 16:57:52.000000000","message":"Done","commit_id":"5f50cd37d6682581bc2f82bc37a5f481e7f657ac"},{"author":{"_account_id":32962,"name":"Jakob Meng","email":"code@jakobmeng.de","username":"jakobmeng@web.de"},"change_message_id":"37528915907834c491e6d1a684a20659798f69c9","unresolved":true,"context_lines":[{"line_number":202,"context_line":"    description: Dictionary describing the project quota."},{"line_number":203,"context_line":"    returned: Regardless if changes where made or not"},{"line_number":204,"context_line":"    type: dict"},{"line_number":205,"context_line":"    elements: dict"},{"line_number":206,"context_line":"    contains:"},{"line_number":207,"context_line":"        compute:"},{"line_number":208,"context_line":"            description: Compute service quotas"}],"source_content_type":"text/x-python","patch_set":12,"id":"7a321c38_26bc2988","line":205,"updated":"2022-09-06 08:45:07.000000000","message":"\"elements: dict\" can be dropped since you describe the datatypes of the dict values below. The former is meant to be used e.g. with \"type: list\" where all dict values have the same type.","commit_id":"5f50cd37d6682581bc2f82bc37a5f481e7f657ac"},{"author":{"_account_id":34208,"name":"Rafael Castillo","email":"rcastill@redhat.com","username":"rcastill"},"change_message_id":"f925db30d48ba3553168f5a846d632fa081a4f67","unresolved":false,"context_lines":[{"line_number":202,"context_line":"    description: Dictionary describing the project quota."},{"line_number":203,"context_line":"    returned: Regardless if changes where made or not"},{"line_number":204,"context_line":"    type: dict"},{"line_number":205,"context_line":"    elements: dict"},{"line_number":206,"context_line":"    contains:"},{"line_number":207,"context_line":"        compute:"},{"line_number":208,"context_line":"            description: Compute service quotas"}],"source_content_type":"text/x-python","patch_set":12,"id":"83494578_24421923","line":205,"in_reply_to":"7a321c38_26bc2988","updated":"2022-09-15 16:57:52.000000000","message":"Done","commit_id":"5f50cd37d6682581bc2f82bc37a5f481e7f657ac"},{"author":{"_account_id":32962,"name":"Jakob Meng","email":"code@jakobmeng.de","username":"jakobmeng@web.de"},"change_message_id":"37528915907834c491e6d1a684a20659798f69c9","unresolved":true,"context_lines":[{"line_number":412,"context_line":"        quota \u003d {}"},{"line_number":413,"context_line":"        try:"},{"line_number":414,"context_line":"            quota[\u0027volume\u0027] \u003d self.conn.block_storage.get_quota_set(project)"},{"line_number":415,"context_line":"        except Exception:"},{"line_number":416,"context_line":"            self.warn(\u0027No public endpoint for volumev2 service was found. \u0027"},{"line_number":417,"context_line":"                      \u0027Ignoring volume quotas.\u0027)"},{"line_number":418,"context_line":""}],"source_content_type":"text/x-python","patch_set":12,"id":"340e0699_7b1987fc","line":415,"updated":"2022-09-06 08:45:07.000000000","message":"Catching every exception is not a good idea. Actually this was only catching EndpointNotFound exceptions etc. is the past [1][2][3], but subsequent changes made this bad/worse [4]. How about catching the original exception again? It seems like openstacksdk is doing the same [5].\n\n[1] https://github.com/ansible/ansible/commit/1eb3fba51f38b2a34c2159ad7bbdf5ea3103b165\n[2] https://github.com/ansible/ansible/commit/0f893027c47560777f5295a338238a820c6c954b#diff-94c7ff2e17d89f0d85601dd628c9697bd683a2d57d0e8b6055af0280f0e8279eL325\n[3] https://github.com/ansible/ansible/commit/89ce826a9fb53c304238923a73667ab820711338#diff-94c7ff2e17d89f0d85601dd628c9697bd683a2d57d0e8b6055af0280f0e8279eL252\n[4] https://github.com/openstack/ansible-collections-openstack/commit/06115c77b7e4f8af462b71629a2f8f05d3df1a15\n[5] https://opendev.org/openstack/openstacksdk/src/commit/9fa6603d4e5104fb33e3688967cd128c0b8ad019/openstack/tests/unit/config/test_cloud_config.py#L388","commit_id":"5f50cd37d6682581bc2f82bc37a5f481e7f657ac"},{"author":{"_account_id":34208,"name":"Rafael Castillo","email":"rcastill@redhat.com","username":"rcastill"},"change_message_id":"f925db30d48ba3553168f5a846d632fa081a4f67","unresolved":false,"context_lines":[{"line_number":412,"context_line":"        quota \u003d {}"},{"line_number":413,"context_line":"        try:"},{"line_number":414,"context_line":"            quota[\u0027volume\u0027] \u003d self.conn.block_storage.get_quota_set(project)"},{"line_number":415,"context_line":"        except Exception:"},{"line_number":416,"context_line":"            self.warn(\u0027No public endpoint for volumev2 service was found. \u0027"},{"line_number":417,"context_line":"                      \u0027Ignoring volume quotas.\u0027)"},{"line_number":418,"context_line":""}],"source_content_type":"text/x-python","patch_set":12,"id":"2f6ffc3e_13ce3272","line":415,"in_reply_to":"340e0699_7b1987fc","updated":"2022-09-15 16:57:52.000000000","message":"Done","commit_id":"5f50cd37d6682581bc2f82bc37a5f481e7f657ac"},{"author":{"_account_id":32962,"name":"Jakob Meng","email":"code@jakobmeng.de","username":"jakobmeng@web.de"},"change_message_id":"37528915907834c491e6d1a684a20659798f69c9","unresolved":true,"context_lines":[{"line_number":418,"context_line":""},{"line_number":419,"context_line":"        try:"},{"line_number":420,"context_line":"            quota[\u0027network\u0027] \u003d self.conn.network.get_quota(project.id)"},{"line_number":421,"context_line":"        except Exception:"},{"line_number":422,"context_line":"            self.warn(\u0027No public endpoint for network service was found. \u0027"},{"line_number":423,"context_line":"                      \u0027Ignoring network quotas.\u0027)"},{"line_number":424,"context_line":""}],"source_content_type":"text/x-python","patch_set":12,"id":"5aac7bff_0f634309","line":421,"updated":"2022-09-06 08:45:07.000000000","message":"ditto.","commit_id":"5f50cd37d6682581bc2f82bc37a5f481e7f657ac"},{"author":{"_account_id":34208,"name":"Rafael Castillo","email":"rcastill@redhat.com","username":"rcastill"},"change_message_id":"f925db30d48ba3553168f5a846d632fa081a4f67","unresolved":false,"context_lines":[{"line_number":418,"context_line":""},{"line_number":419,"context_line":"        try:"},{"line_number":420,"context_line":"            quota[\u0027network\u0027] \u003d self.conn.network.get_quota(project.id)"},{"line_number":421,"context_line":"        except Exception:"},{"line_number":422,"context_line":"            self.warn(\u0027No public endpoint for network service was found. \u0027"},{"line_number":423,"context_line":"                      \u0027Ignoring network quotas.\u0027)"},{"line_number":424,"context_line":""}],"source_content_type":"text/x-python","patch_set":12,"id":"7a001216_3181bec4","line":421,"in_reply_to":"5aac7bff_0f634309","updated":"2022-09-15 16:57:52.000000000","message":"Done","commit_id":"5f50cd37d6682581bc2f82bc37a5f481e7f657ac"},{"author":{"_account_id":32962,"name":"Jakob Meng","email":"code@jakobmeng.de","username":"jakobmeng@web.de"},"change_message_id":"37528915907834c491e6d1a684a20659798f69c9","unresolved":true,"context_lines":[{"line_number":451,"context_line":"        if self.params[\u0027state\u0027] \u003d\u003d \u0027absent\u0027:"},{"line_number":452,"context_line":"            return True"},{"line_number":453,"context_line":""},{"line_number":454,"context_line":"        changes \u003d self._system_state_change_details("},{"line_number":455,"context_line":"            project_quota_output"},{"line_number":456,"context_line":"        )"},{"line_number":457,"context_line":""}],"source_content_type":"text/x-python","patch_set":12,"id":"c166835c_26835e0a","line":454,"updated":"2022-09-06 08:45:07.000000000","message":"nit: Replace with\n\n  return bool(self._system...)\n  \n?","commit_id":"5f50cd37d6682581bc2f82bc37a5f481e7f657ac"},{"author":{"_account_id":34208,"name":"Rafael Castillo","email":"rcastill@redhat.com","username":"rcastill"},"change_message_id":"f925db30d48ba3553168f5a846d632fa081a4f67","unresolved":false,"context_lines":[{"line_number":451,"context_line":"        if self.params[\u0027state\u0027] \u003d\u003d \u0027absent\u0027:"},{"line_number":452,"context_line":"            return True"},{"line_number":453,"context_line":""},{"line_number":454,"context_line":"        changes \u003d self._system_state_change_details("},{"line_number":455,"context_line":"            project_quota_output"},{"line_number":456,"context_line":"        )"},{"line_number":457,"context_line":""}],"source_content_type":"text/x-python","patch_set":12,"id":"7aaf6d54_e7b60505","line":454,"in_reply_to":"c166835c_26835e0a","updated":"2022-09-15 16:57:52.000000000","message":"Done","commit_id":"5f50cd37d6682581bc2f82bc37a5f481e7f657ac"},{"author":{"_account_id":32962,"name":"Jakob Meng","email":"code@jakobmeng.de","username":"jakobmeng@web.de"},"change_message_id":"5d9b6524ae5e9ab9fe2962a70cc607490a8e6321","unresolved":true,"context_lines":[{"line_number":290,"context_line":""},{"line_number":291,"context_line":""},{"line_number":292,"context_line":"    sample:"},{"line_number":293,"context_line":"        openstack_quotas: {"},{"line_number":294,"context_line":"            compute: {"},{"line_number":295,"context_line":"                cores: 150,"},{"line_number":296,"context_line":"                fixed_ips: -1,"}],"source_content_type":"text/x-python","patch_set":18,"id":"627c5102_fb5d086f","line":293,"updated":"2022-10-05 18:45:24.000000000","message":"Outdated name and content.","commit_id":"8366d73acbc760923d59e72682037b7d0fb1b87d"},{"author":{"_account_id":32962,"name":"Jakob Meng","email":"code@jakobmeng.de","username":"jakobmeng@web.de"},"change_message_id":"27143da0f8a2dd14dfd7c61c7dbc290461b28be7","unresolved":false,"context_lines":[{"line_number":290,"context_line":""},{"line_number":291,"context_line":""},{"line_number":292,"context_line":"    sample:"},{"line_number":293,"context_line":"        openstack_quotas: {"},{"line_number":294,"context_line":"            compute: {"},{"line_number":295,"context_line":"                cores: 150,"},{"line_number":296,"context_line":"                fixed_ips: -1,"}],"source_content_type":"text/x-python","patch_set":18,"id":"c6cda1c2_d65a95d5","line":293,"in_reply_to":"627c5102_fb5d086f","updated":"2022-10-05 18:46:24.000000000","message":"Done","commit_id":"8366d73acbc760923d59e72682037b7d0fb1b87d"},{"author":{"_account_id":32962,"name":"Jakob Meng","email":"code@jakobmeng.de","username":"jakobmeng@web.de"},"change_message_id":"5d9b6524ae5e9ab9fe2962a70cc607490a8e6321","unresolved":true,"context_lines":[{"line_number":401,"context_line":"    _endpoint_not_found_exc \u003d None"},{"line_number":402,"context_line":""},{"line_number":403,"context_line":"    @property"},{"line_number":404,"context_line":"    def _EndpointNotFound(self):"},{"line_number":405,"context_line":"        if not self._endpoint_exception:"},{"line_number":406,"context_line":"            try:"},{"line_number":407,"context_line":"                exc_module \u003d importlib.import_module("}],"source_content_type":"text/x-python","patch_set":18,"id":"86bef381_46609f75","line":404,"updated":"2022-10-05 18:45:24.000000000","message":"This does not work as expected. First, _endpoint_exception \u003d\u003e _endpoint_not_found_exc and return statement missing. Actually this introduces a lot of code for a simple check that services are available..","commit_id":"8366d73acbc760923d59e72682037b7d0fb1b87d"},{"author":{"_account_id":32962,"name":"Jakob Meng","email":"code@jakobmeng.de","username":"jakobmeng@web.de"},"change_message_id":"27143da0f8a2dd14dfd7c61c7dbc290461b28be7","unresolved":false,"context_lines":[{"line_number":401,"context_line":"    _endpoint_not_found_exc \u003d None"},{"line_number":402,"context_line":""},{"line_number":403,"context_line":"    @property"},{"line_number":404,"context_line":"    def _EndpointNotFound(self):"},{"line_number":405,"context_line":"        if not self._endpoint_exception:"},{"line_number":406,"context_line":"            try:"},{"line_number":407,"context_line":"                exc_module \u003d importlib.import_module("}],"source_content_type":"text/x-python","patch_set":18,"id":"abbb7786_5fae2c82","line":404,"in_reply_to":"86bef381_46609f75","updated":"2022-10-05 18:46:24.000000000","message":"Done","commit_id":"8366d73acbc760923d59e72682037b7d0fb1b87d"}]}
