)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":8313,"name":"Lajos Katona","display_name":"lajoskatona","email":"katonalala@gmail.com","username":"elajkat","status":"Ericsson Software Technology"},"change_message_id":"d9c810f8d54bd3e7fc3db2c0379cea6c4fe5fed6","unresolved":true,"context_lines":[{"line_number":8,"context_line":""},{"line_number":9,"context_line":"Story: 2009683"},{"line_number":10,"context_line":"Task: 43977"},{"line_number":11,"context_line":"TODO: open a launchpad bug report"},{"line_number":12,"context_line":""},{"line_number":13,"context_line":"Change-Id: I893665040d9e0977272c48e4d1d0f06163cb04be"},{"line_number":14,"context_line":"Signed-off-by: lajoskatona \u003clajos.katona@est.tech\u003e"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":14,"id":"76e9fe02_f998a7cc","line":11,"range":{"start_line":11,"start_character":0,"end_line":11,"end_character":33},"updated":"2026-03-31 12:45:04.000000000","message":"ok, it seems there is no heat launchpad bugs: https://bugs.launchpad.net/heat","commit_id":"e122865505ebcaef61c3cf56b4b0d3704b755d71"}],"/PATCHSET_LEVEL":[{"author":{"_account_id":30073,"name":"Brendan Shephard","email":"bshephar@bne-home.net","username":"bshephar"},"change_message_id":"c679fafe34f6b86191baa2ceea17010916946ae1","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":2,"id":"e5073b45_ba6a105e","updated":"2022-08-31 22:33:01.000000000","message":"Hey, we could do this is we want more granular interactions with the Network proxy specifically. So far, we have been using the \"openstack\" client plugin:\nhttps://github.com/openstack/heat/blob/master/heat/engine/resources/openstack/neutron/floatingip.py#L467\n\nSo, interfacing with the network proxy like so:\nhttps://github.com/openstack/heat/blob/master/heat/engine/resources/openstack/neutron/floatingip.py#L584\n\nThe openstack client can be found here:\nhttps://github.com/openstack/heat/blob/master/heat/engine/clients/os/openstacksdk.py\n\nSo it\u0027s really a question of design. If we want to replace the client interfaces and maintain the same design we have today with individual client_plugins within Heat for each proxy. \n\nIt would probably be better to do it this way tbh. Rather than having everything in the single client plugin like we\u0027re currently doing for the openstacksdk.\n\nTo fully replace our usage of the python-neutronclient library. We would also need to look through the existing implementation here:\nhttps://github.com/openstack/heat/blob/master/heat/engine/clients/os/neutron/__init__.py\n\nSee if we need to port over the interfaces we define there, or if they can be replaced by features afforded to us by the openstacksdk that weren\u0027t available in neutronclient.","commit_id":"5a5d8a22a614ea62065006e7bf27f78f16280afe"},{"author":{"_account_id":8833,"name":"Rabi Mishra","email":"ramishra@redhat.com","username":"rabi"},"change_message_id":"abed682217a008fc3b4f280d879a28e7a84e3844","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":2,"id":"ae0c4634_9ebf01f7","updated":"2022-09-01 04:27:03.000000000","message":"We already have one catering to both neutron and senlin atm[1]. We can just re-use that and split out per service constraints/finders maybe? \n\n\n[1] https://github.com/openstack/heat/blob/master/heat/engine/clients/os/openstacksdk.py","commit_id":"5a5d8a22a614ea62065006e7bf27f78f16280afe"},{"author":{"_account_id":8313,"name":"Lajos Katona","display_name":"lajoskatona","email":"katonalala@gmail.com","username":"elajkat","status":"Ericsson Software Technology"},"change_message_id":"1f1e37417ed3215a042531650e981c225f306a09","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":2,"id":"829c37d5_7204c5d4","in_reply_to":"55a88cba_53586622","updated":"2022-09-01 11:37:03.000000000","message":"I anyway added a line for the Neutron PTG pad (https://etherpad.opendev.org/p/neutron-antelope-ptg#L63 ) if you think you can join ( I have to work on the schedule) and we can have a chat during the PTG.\nNeutron team would like to get rid off python-neutronclient and I think if Heat as one of the big users of it moves we can have the will to do the same for others (like Horizon or Nova)","commit_id":"5a5d8a22a614ea62065006e7bf27f78f16280afe"},{"author":{"_account_id":30073,"name":"Brendan Shephard","email":"bshephar@bne-home.net","username":"bshephar"},"change_message_id":"eb3b615227a390d1170c5ed3dec2e3f6556bb461","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":2,"id":"48e55285_b6d2bd13","in_reply_to":"5a466644_c8da29eb","updated":"2022-09-25 22:27:10.000000000","message":"Yeah, let\u0027s discuss at PTG. I think implementing these separately like this aligns with the current implementation as well. Each of them can extend the base openstacksdk class as you have done here.\n\nJust one suggestion that maybe it would be better to name them after each of the openstacksdk proxy services so that we don\u0027t have two clients called \"neutron\", \"nova\", etc. That will make it easier to migrate over individual resources. We can just change the default_client_name per resource as we\u0027re ready to migrate them.","commit_id":"5a5d8a22a614ea62065006e7bf27f78f16280afe"},{"author":{"_account_id":8313,"name":"Lajos Katona","display_name":"lajoskatona","email":"katonalala@gmail.com","username":"elajkat","status":"Ericsson Software Technology"},"change_message_id":"5e75999626cebbaac7bbd9fa67a42dd8b19569ba","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":2,"id":"5a466644_c8da29eb","in_reply_to":"829c37d5_7204c5d4","updated":"2022-09-01 13:31:10.000000000","message":"One more sentence: I checked and played a little more. As in OpenStackSDKPlugin there is already some network related methods (find_network_port, find_network_segment...) my 2 cents is to keep these in separate module to keep this as base plugin as simple as possible, but that\u0027s just a quick opinion.\nI played for example with QoS and I had to add another helper method find_qos_policy_id....","commit_id":"5a5d8a22a614ea62065006e7bf27f78f16280afe"},{"author":{"_account_id":30073,"name":"Brendan Shephard","email":"bshephar@bne-home.net","username":"bshephar"},"change_message_id":"cceb927fee84ee2cba5b06376cfeb3257280a553","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":2,"id":"55a88cba_53586622","in_reply_to":"ae0c4634_9ebf01f7","updated":"2022-09-01 05:24:54.000000000","message":"Yeah, I think the question is, do we want to just use a single client for all resources. So all resources would use default_client_name \u003d openstack then we use the relevant service proxies based on that, like self.client().network. self.client().compute. self.client().object_store.  so using each service proxy off of the main underlying openstack client plugin. Or, would we rather implement individual service plugins like we have today, where we just return the connection for openstack.network as the client, or openstack.compute, openstack.object_store. \n\nThe latter I guess would require this type of individual implementation and declaration within the engine resources.","commit_id":"5a5d8a22a614ea62065006e7bf27f78f16280afe"},{"author":{"_account_id":30073,"name":"Brendan Shephard","email":"bshephar@bne-home.net","username":"bshephar"},"change_message_id":"94996ecd31c291aeec316e39114e84fdfbf8cbc0","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":7,"id":"82d80044_0d46a21e","updated":"2022-10-26 09:18:46.000000000","message":"I like it. We don\u0027t need to rename it to network if it doesn\u0027t work nicely. It was just an idea. I\u0027m happy to keep it this way. I would ask for Rabi and Takashi\u0027s feedback on this approach as well, as it will likely define the direction we take for other clients.","commit_id":"b0060f49efb07a77f50c7724c5b458451b0bf281"},{"author":{"_account_id":30073,"name":"Brendan Shephard","email":"bshephar@bne-home.net","username":"bshephar"},"change_message_id":"c6c434b06ea5ff6f47c003c319ca5cc70fbc1213","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":7,"id":"a3404279_d2de58db","updated":"2022-10-28 03:05:00.000000000","message":"I think Rabi added the OpenStackSDk one initially just to handle some obscure Neutron objects that weren\u0027t supported by neutronclient?\n\nBut using it as a general base class with the base exceptions as you suggested Takashi is probably a good idea. Let\u0027s see what ramishra has to say anyway. I wouldn\u0027t want to use that openstacksdk class for all methods of all objects though. I think it makes sense to split them like this, and implement the methods we use today for each python-*client library in their own dedicated classes.","commit_id":"b0060f49efb07a77f50c7724c5b458451b0bf281"},{"author":{"_account_id":9816,"name":"Takashi Kajinami","email":"kajinamit@oss.nttdata.com","username":"kajinamit"},"change_message_id":"60dc33da2413e7b64a5014a9b57f18a3e9e2e39c","unresolved":true,"context_lines":[],"source_content_type":"","patch_set":7,"id":"d69faea7_6ea98e21","updated":"2022-10-28 01:24:04.000000000","message":"Thank you for working on this !\n\nI\u0027ll leave a few comments inline. I\u0027d consult Rabi regarding the file structure because he initially introduced that OpenStackSDKPlugin class and might have some plan ","commit_id":"b0060f49efb07a77f50c7724c5b458451b0bf281"},{"author":{"_account_id":8313,"name":"Lajos Katona","display_name":"lajoskatona","email":"katonalala@gmail.com","username":"elajkat","status":"Ericsson Software Technology"},"change_message_id":"99b940799aa9616df79b2cf7149422da678e562e","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":7,"id":"d3509aca_8a97a1ac","in_reply_to":"355c50d4_7e6c859e","updated":"2022-11-17 15:36:35.000000000","message":"Thanks Rabi, I keep it then as separated plugin NeutronSdkClientPlugin and child of OpenStackSDKPlugin. At the end we can change it to neutron and remove the old one.","commit_id":"b0060f49efb07a77f50c7724c5b458451b0bf281"},{"author":{"_account_id":8833,"name":"Rabi Mishra","email":"ramishra@redhat.com","username":"rabi"},"change_message_id":"b6f90ef9c708f4b9372a78d11bd765530a1bbf4e","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":7,"id":"355c50d4_7e6c859e","in_reply_to":"a3404279_d2de58db","updated":"2022-11-16 08:47:16.000000000","message":"Historically we have one plugin per client library as they had different exception frameworks and features like extensions, microversions etc. We added some additional finder and other methods to those later. There is also caching of clients for name and version.\n\nI think we can go with the approach of having separate client plugins and clients as they talk to different endpoints, but keep the generic methods for exceptions and others etc in a mixin or base openstack plugin class.\n\nHowever, we\u0027ve to switch to the default plugin names like \u0027neutron\u0027 finally rather than changing them to neutron_sdk etc as resources use non default plugins like \u0027self.client_plugin(\u0027nova\u0027) for example. During transitioning it\u0027s fine to have both neutron and neutron_sdk.","commit_id":"b0060f49efb07a77f50c7724c5b458451b0bf281"},{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"f7f5214a17a9574bd52772c9dfa10dc61b5ffa7d","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":10,"id":"5f2a7626_bec8258c","updated":"2023-01-03 11:29:12.000000000","message":"Just asking, are we testing this client in the CI?","commit_id":"40797b16ce452cde727eae3bd4201506e5790673"},{"author":{"_account_id":8313,"name":"Lajos Katona","display_name":"lajoskatona","email":"katonalala@gmail.com","username":"elajkat","status":"Ericsson Software Technology"},"change_message_id":"267e5dc3d2da586e50c25f27ee5e9b05f8168f37","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":10,"id":"9993b439_838dd6ac","updated":"2022-11-30 13:52:16.000000000","message":"recheck\nAs I see these jobs (heat-functional \u0026 heat-functional-legacy) fails very often\nhttps://zuul.opendev.org/t/openstack/builds?job_name\u003dheat-functional-legacy\u0026branch\u003dmaster\u0026skip\u003d0\nhttps://zuul.opendev.org/t/openstack/builds?job_name\u003dheat-functional\u0026branch\u003dmaster\u0026skip\u003d0","commit_id":"40797b16ce452cde727eae3bd4201506e5790673"},{"author":{"_account_id":8313,"name":"Lajos Katona","display_name":"lajoskatona","email":"katonalala@gmail.com","username":"elajkat","status":"Ericsson Software Technology"},"change_message_id":"f1e31674e28b60cf05e3e9fb7c4583350f0cc981","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":10,"id":"af5acd2e_180825df","updated":"2022-11-29 16:29:51.000000000","message":"recheck\nThe errors in functional-legacy seems unrelated, at least I cant reproduce them","commit_id":"40797b16ce452cde727eae3bd4201506e5790673"},{"author":{"_account_id":8313,"name":"Lajos Katona","display_name":"lajoskatona","email":"katonalala@gmail.com","username":"elajkat","status":"Ericsson Software Technology"},"change_message_id":"7ce53df6aac2f69d6e7a2d5f4283bdd0c55e2b81","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":10,"id":"525ea2ba_30461fdb","updated":"2022-11-30 10:25:24.000000000","message":"recheck\nThe failures seems unrelated (at least I can\u0027t see anything in the logs related)","commit_id":"40797b16ce452cde727eae3bd4201506e5790673"},{"author":{"_account_id":8313,"name":"Lajos Katona","display_name":"lajoskatona","email":"katonalala@gmail.com","username":"elajkat","status":"Ericsson Software Technology"},"change_message_id":"70ae0a851541e005a60256ea2281f8620b74efe8","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":10,"id":"5c685a81_ee3d471e","updated":"2022-12-15 13:42:20.000000000","message":"recheck\nheat-functional-legacy failure is not related","commit_id":"40797b16ce452cde727eae3bd4201506e5790673"},{"author":{"_account_id":9816,"name":"Takashi Kajinami","email":"kajinamit@oss.nttdata.com","username":"kajinamit"},"change_message_id":"c0a44ced2af8218393d644c57a697cb856db8619","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":10,"id":"50d8901e_0968e79e","updated":"2022-12-07 09:35:15.000000000","message":"recheck https://review.opendev.org/c/openstack/heat/+/866545 would help us reduce failure rate.","commit_id":"40797b16ce452cde727eae3bd4201506e5790673"},{"author":{"_account_id":8313,"name":"Lajos Katona","display_name":"lajoskatona","email":"katonalala@gmail.com","username":"elajkat","status":"Ericsson Software Technology"},"change_message_id":"90b78704654a1df3b35eabb3b35a756a5e412252","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":10,"id":"45bdc2ee_a409655f","in_reply_to":"5f2a7626_bec8258c","updated":"2023-01-04 14:20:56.000000000","message":"I am not sure how heat CI is working but locally at the moment when I set a resource to use the new NeutronSdkClientPlugin this code path is used, so the next patches in the series are testing effectively.","commit_id":"40797b16ce452cde727eae3bd4201506e5790673"}],"heat/engine/clients/os/neutron/neutron_constraints.py":[{"author":{"_account_id":8313,"name":"Lajos Katona","display_name":"lajoskatona","email":"katonalala@gmail.com","username":"elajkat","status":"Ericsson Software Technology"},"change_message_id":"4bed171c1942b3441758edab0985562974aa46bf","unresolved":true,"context_lines":[{"line_number":22,"context_line":""},{"line_number":23,"context_line":"# TODO(lajoskatona): rename it to network at the end."},{"line_number":24,"context_line":"# network seems to be overlapping with the old client plugin."},{"line_number":25,"context_line":"CLIENT_NAME \u003d \u0027neutron\u0027"},{"line_number":26,"context_line":""},{"line_number":27,"context_line":""},{"line_number":28,"context_line":"class NeutronConstraint(constraints.BaseCustomConstraint):"}],"source_content_type":"text/x-python","patch_set":7,"id":"0b26b4e2_573db29a","line":25,"range":{"start_line":25,"start_character":15,"end_line":25,"end_character":22},"updated":"2022-10-26 10:57:58.000000000","message":"as I moving forward with the neutron resources it seems that this will be neutron_sdk (or what is in the setup.cfg for NeutronSdkClientPlugin) at the end","commit_id":"b0060f49efb07a77f50c7724c5b458451b0bf281"},{"author":{"_account_id":8833,"name":"Rabi Mishra","email":"ramishra@redhat.com","username":"rabi"},"change_message_id":"b6f90ef9c708f4b9372a78d11bd765530a1bbf4e","unresolved":true,"context_lines":[{"line_number":22,"context_line":""},{"line_number":23,"context_line":"# TODO(lajoskatona): rename it to network at the end."},{"line_number":24,"context_line":"# network seems to be overlapping with the old client plugin."},{"line_number":25,"context_line":"CLIENT_NAME \u003d \u0027neutron\u0027"},{"line_number":26,"context_line":""},{"line_number":27,"context_line":""},{"line_number":28,"context_line":"class NeutronConstraint(constraints.BaseCustomConstraint):"}],"source_content_type":"text/x-python","patch_set":7,"id":"3218b683_617d0abc","line":25,"range":{"start_line":25,"start_character":15,"end_line":25,"end_character":22},"in_reply_to":"0b26b4e2_573db29a","updated":"2022-11-16 08:47:16.000000000","message":"We would keep this as neutron and map NeutronSdkClientPlugin to it I think.","commit_id":"b0060f49efb07a77f50c7724c5b458451b0bf281"}],"heat/engine/clients/os/neutron/neutron_sdk.py":[{"author":{"_account_id":30073,"name":"Brendan Shephard","email":"bshephar@bne-home.net","username":"bshephar"},"change_message_id":"eb3b615227a390d1170c5ed3dec2e3f6556bb461","unresolved":true,"context_lines":[{"line_number":15,"context_line":"from heat.engine.clients import os as os_client"},{"line_number":16,"context_line":"from heat.engine.clients.os import openstacksdk as sdk_plugin"},{"line_number":17,"context_line":""},{"line_number":18,"context_line":"CLIENT_NAME \u003d \u0027neutron\u0027"},{"line_number":19,"context_line":""},{"line_number":20,"context_line":""},{"line_number":21,"context_line":"class NeutronSdkClientPlugin(os_client.ExtensionMixin,"}],"source_content_type":"text/x-python","patch_set":2,"id":"a1759a00_3e219651","line":18,"updated":"2022-09-25 22:27:10.000000000","message":"Maybe we should name these after each of the openstacksdk proxies they represent? This would avoid conflicts with the existing client libraries as well.\n\nSo we could call this one \"network\"\n\nhttps://docs.openstack.org/openstacksdk/latest/user/proxies/","commit_id":"5a5d8a22a614ea62065006e7bf27f78f16280afe"},{"author":{"_account_id":30073,"name":"Brendan Shephard","email":"bshephar@bne-home.net","username":"bshephar"},"change_message_id":"94996ecd31c291aeec316e39114e84fdfbf8cbc0","unresolved":false,"context_lines":[{"line_number":15,"context_line":"from heat.engine.clients import os as os_client"},{"line_number":16,"context_line":"from heat.engine.clients.os import openstacksdk as sdk_plugin"},{"line_number":17,"context_line":""},{"line_number":18,"context_line":"CLIENT_NAME \u003d \u0027neutron\u0027"},{"line_number":19,"context_line":""},{"line_number":20,"context_line":""},{"line_number":21,"context_line":"class NeutronSdkClientPlugin(os_client.ExtensionMixin,"}],"source_content_type":"text/x-python","patch_set":2,"id":"ee10b74f_c5e511e2","line":18,"in_reply_to":"09a6ab4c_96d3f06d","updated":"2022-10-26 09:18:46.000000000","message":"Done","commit_id":"5a5d8a22a614ea62065006e7bf27f78f16280afe"},{"author":{"_account_id":8313,"name":"Lajos Katona","display_name":"lajoskatona","email":"katonalala@gmail.com","username":"elajkat","status":"Ericsson Software Technology"},"change_message_id":"c06a17cb6f4f1eb7bc6bd61178872e3e7b404cb8","unresolved":true,"context_lines":[{"line_number":15,"context_line":"from heat.engine.clients import os as os_client"},{"line_number":16,"context_line":"from heat.engine.clients.os import openstacksdk as sdk_plugin"},{"line_number":17,"context_line":""},{"line_number":18,"context_line":"CLIENT_NAME \u003d \u0027neutron\u0027"},{"line_number":19,"context_line":""},{"line_number":20,"context_line":""},{"line_number":21,"context_line":"class NeutronSdkClientPlugin(os_client.ExtensionMixin,"}],"source_content_type":"text/x-python","patch_set":2,"id":"09a6ab4c_96d3f06d","line":18,"in_reply_to":"77ecd4a4_22972fe8","updated":"2022-10-25 13:02:31.000000000","message":"I played a few days with it and it seems overlapping with old client plugin, so added a todo here now, and plan to change it to network at the end of the series.","commit_id":"5a5d8a22a614ea62065006e7bf27f78f16280afe"},{"author":{"_account_id":8313,"name":"Lajos Katona","display_name":"lajoskatona","email":"katonalala@gmail.com","username":"elajkat","status":"Ericsson Software Technology"},"change_message_id":"b052fcbc1ae2cfdbe376029159ece90ddba12fc8","unresolved":true,"context_lines":[{"line_number":15,"context_line":"from heat.engine.clients import os as os_client"},{"line_number":16,"context_line":"from heat.engine.clients.os import openstacksdk as sdk_plugin"},{"line_number":17,"context_line":""},{"line_number":18,"context_line":"CLIENT_NAME \u003d \u0027neutron\u0027"},{"line_number":19,"context_line":""},{"line_number":20,"context_line":""},{"line_number":21,"context_line":"class NeutronSdkClientPlugin(os_client.ExtensionMixin,"}],"source_content_type":"text/x-python","patch_set":2,"id":"77ecd4a4_22972fe8","line":18,"in_reply_to":"a1759a00_3e219651","updated":"2022-09-26 07:54:32.000000000","message":"ack, I will check it.","commit_id":"5a5d8a22a614ea62065006e7bf27f78f16280afe"},{"author":{"_account_id":30073,"name":"Brendan Shephard","email":"bshephar@bne-home.net","username":"bshephar"},"change_message_id":"8f625ef8a6743df0526ceb5630df7fd6717141b0","unresolved":true,"context_lines":[{"line_number":55,"context_line":"        return isinstance(ex, exceptions.BadRequestException)"},{"line_number":56,"context_line":""},{"line_number":57,"context_line":"    @os_client.MEMOIZE_EXTENSIONS"},{"line_number":58,"context_line":"    def _list_extensions(self):"},{"line_number":59,"context_line":"        extensions \u003d self.client().extensions()"},{"line_number":60,"context_line":"        return set(extension.get(\u0027alias\u0027) for extension in extensions)"}],"source_content_type":"text/x-python","patch_set":2,"id":"f114f2d6_1d1b8f19","line":60,"range":{"start_line":58,"start_character":0,"end_line":60,"end_character":70},"updated":"2022-09-26 03:55:22.000000000","message":"This can be simplified as:\n```\nreturn { extension.alias for extension in self.client().extensions() }\n```\n\nExample:\n```\n\u003e\u003e\u003e { ext.alias for ext in conn.network.extensions() }\n{\u0027trunk-details\u0027, \u0027quotas\u0027, \u0027subnet-segmentid-writable\u0027, \u0027net-mtu-writable\u0027, \u0027qos-gateway-ip\u0027, \u0027provider\u0027, \u0027port-mac-address-regenerate\u0027, \u0027dns-integration\u0027, \u0027net-mtu\u0027, \u0027address-group\u0027, \u0027qos-fip\u0027, \u0027floating-ip-port-forwarding-description\u0027, \u0027address-scope\u0027, \u0027extra_dhcp_opt\u0027, \u0027stateful-security-group\u0027, \u0027dns-integration-domain-keywords\u0027, \u0027filter-validation\u0027, \u0027qos\u0027, \u0027binding\u0027, \u0027qos-pps-minimum-rule-alias\u0027, \u0027floating-ip-port-forwarding\u0027, \u0027fip-port-details\u0027, \u0027qos-rule-type-filter\u0027, \u0027logging\u0027, \u0027router_availability_zone\u0027, \u0027qos-pps-minimum\u0027, \u0027qos-bw-limit-direction\u0027, \u0027quota-check-limit\u0027, \u0027qos-default\u0027, \u0027binding-extended\u0027, \u0027qos-port-network-policy\u0027, \u0027flavors\u0027, \u0027subnet_allocation\u0027, \u0027rbac-policies\u0027, \u0027port-resource-request\u0027, \u0027qos-bw-minimum-ingress\u0027, \u0027qos-pps\u0027, \u0027revision-if-match\u0027, \u0027service-type\u0027, \u0027allowed-address-pairs\u0027, \u0027pagination\u0027, \u0027standard-attr-revisions\u0027, \u0027sorting\u0027, \u0027floating-ip-port-forwarding-detail\u0027, \u0027network_availability_zone\u0027, \u0027standard-attr-timestamp\u0027, \u0027trunk\u0027, \u0027segments-peer-subnet-host-routes\u0027, \u0027default-subnetpools\u0027, \u0027ext-gw-mode\u0027, \u0027rbac-address-scope\u0027, \u0027dns-domain-ports\u0027, \u0027auto-allocated-topology\u0027, \u0027segment\u0027, \u0027network-ip-availability\u0027, \u0027port-resource-request-groups\u0027, \u0027subnet-service-types\u0027, \u0027qos-rules-alias\u0027, \u0027standard-attr-description\u0027, \u0027qos-rule-type-details\u0027, \u0027floatingip-pools\u0027, \u0027port-device-profile\u0027, \u0027multi-provider\u0027, \u0027subnet-dns-publish-fixed-ip\u0027, \u0027port-security\u0027, \u0027standard-attr-tag\u0027, \u0027port-numa-affinity-policy\u0027, \u0027ip_allocation\u0027, \u0027rbac-security-groups\u0027, \u0027l2_adjacency\u0027, \u0027security-group\u0027, \u0027router\u0027, \u0027project-id\u0027, \u0027external-net\u0027, \u0027extraroute\u0027, \u0027quota_details\u0027, \u0027agent\u0027, \u0027standard-attr-segment\u0027, \u0027security-groups-shared-filtering\u0027, \u0027floating-ip-port-forwarding-port-ranges\u0027, \u0027expose-port-forwarding-in-fip\u0027, \u0027availability_zone\u0027, \u0027security-groups-normalized-cidr\u0027, \u0027security-groups-remote-address-group\u0027, \u0027vlan-transparent\u0027}\n```","commit_id":"5a5d8a22a614ea62065006e7bf27f78f16280afe"},{"author":{"_account_id":30073,"name":"Brendan Shephard","email":"bshephar@bne-home.net","username":"bshephar"},"change_message_id":"94996ecd31c291aeec316e39114e84fdfbf8cbc0","unresolved":false,"context_lines":[{"line_number":55,"context_line":"        return isinstance(ex, exceptions.BadRequestException)"},{"line_number":56,"context_line":""},{"line_number":57,"context_line":"    @os_client.MEMOIZE_EXTENSIONS"},{"line_number":58,"context_line":"    def _list_extensions(self):"},{"line_number":59,"context_line":"        extensions \u003d self.client().extensions()"},{"line_number":60,"context_line":"        return set(extension.get(\u0027alias\u0027) for extension in extensions)"}],"source_content_type":"text/x-python","patch_set":2,"id":"3458589b_2f897c0d","line":60,"range":{"start_line":58,"start_character":0,"end_line":60,"end_character":70},"in_reply_to":"20314600_6a1ba6d4","updated":"2022-10-26 09:18:46.000000000","message":"Done","commit_id":"5a5d8a22a614ea62065006e7bf27f78f16280afe"},{"author":{"_account_id":8313,"name":"Lajos Katona","display_name":"lajoskatona","email":"katonalala@gmail.com","username":"elajkat","status":"Ericsson Software Technology"},"change_message_id":"c06a17cb6f4f1eb7bc6bd61178872e3e7b404cb8","unresolved":true,"context_lines":[{"line_number":55,"context_line":"        return isinstance(ex, exceptions.BadRequestException)"},{"line_number":56,"context_line":""},{"line_number":57,"context_line":"    @os_client.MEMOIZE_EXTENSIONS"},{"line_number":58,"context_line":"    def _list_extensions(self):"},{"line_number":59,"context_line":"        extensions \u003d self.client().extensions()"},{"line_number":60,"context_line":"        return set(extension.get(\u0027alias\u0027) for extension in extensions)"}],"source_content_type":"text/x-python","patch_set":2,"id":"20314600_6a1ba6d4","line":60,"range":{"start_line":58,"start_character":0,"end_line":60,"end_character":70},"in_reply_to":"f114f2d6_1d1b8f19","updated":"2022-10-25 13:02:31.000000000","message":"Thanks, done","commit_id":"5a5d8a22a614ea62065006e7bf27f78f16280afe"},{"author":{"_account_id":9816,"name":"Takashi Kajinami","email":"kajinamit@oss.nttdata.com","username":"kajinamit"},"change_message_id":"60dc33da2413e7b64a5014a9b57f18a3e9e2e39c","unresolved":true,"context_lines":[{"line_number":17,"context_line":""},{"line_number":18,"context_line":"# TODO(lajoskatona): rename it to network at the end."},{"line_number":19,"context_line":"# network seems to be overlapping with the old client plugin."},{"line_number":20,"context_line":"CLIENT_NAME \u003d \u0027neutron\u0027"},{"line_number":21,"context_line":""},{"line_number":22,"context_line":""},{"line_number":23,"context_line":"class NeutronSdkClientPlugin(os_client.ExtensionMixin,"}],"source_content_type":"text/x-python","patch_set":7,"id":"d8b0e35e_e7f8b2f3","line":20,"range":{"start_line":20,"start_character":15,"end_line":20,"end_character":22},"updated":"2022-10-28 01:24:04.000000000","message":"This is not actually used and can be dropped.","commit_id":"b0060f49efb07a77f50c7724c5b458451b0bf281"},{"author":{"_account_id":8313,"name":"Lajos Katona","display_name":"lajoskatona","email":"katonalala@gmail.com","username":"elajkat","status":"Ericsson Software Technology"},"change_message_id":"99b940799aa9616df79b2cf7149422da678e562e","unresolved":false,"context_lines":[{"line_number":17,"context_line":""},{"line_number":18,"context_line":"# TODO(lajoskatona): rename it to network at the end."},{"line_number":19,"context_line":"# network seems to be overlapping with the old client plugin."},{"line_number":20,"context_line":"CLIENT_NAME \u003d \u0027neutron\u0027"},{"line_number":21,"context_line":""},{"line_number":22,"context_line":""},{"line_number":23,"context_line":"class NeutronSdkClientPlugin(os_client.ExtensionMixin,"}],"source_content_type":"text/x-python","patch_set":7,"id":"93920dc6_305459d7","line":20,"range":{"start_line":20,"start_character":15,"end_line":20,"end_character":22},"in_reply_to":"d8b0e35e_e7f8b2f3","updated":"2022-11-17 15:36:35.000000000","message":"Done","commit_id":"b0060f49efb07a77f50c7724c5b458451b0bf281"},{"author":{"_account_id":9816,"name":"Takashi Kajinami","email":"kajinamit@oss.nttdata.com","username":"kajinamit"},"change_message_id":"60dc33da2413e7b64a5014a9b57f18a3e9e2e39c","unresolved":true,"context_lines":[{"line_number":32,"context_line":"        RES_TYPE_SUBNET_POOL, RES_TYPE_ADDRESS_SCOPE,"},{"line_number":33,"context_line":"        RES_TYPE_SECURITY_GROUP,"},{"line_number":34,"context_line":"        RES_TYPE_QOS_POLICY,"},{"line_number":35,"context_line":"        RES_TYPE_LOADBALANCER,"},{"line_number":36,"context_line":"        RES_TYPE_LB_LISTENER, RES_TYPE_LB_POOL, RES_TYPE_LB_L7POLICY,"},{"line_number":37,"context_line":"    ) \u003d ("},{"line_number":38,"context_line":"        \u0027network\u0027, \u0027subnet\u0027, \u0027router\u0027, \u0027port\u0027,"},{"line_number":39,"context_line":"        \u0027subnetpool\u0027, \u0027address_scope\u0027,"}],"source_content_type":"text/x-python","patch_set":7,"id":"44f75dc1_0d08aee7","line":36,"range":{"start_line":35,"start_character":0,"end_line":36,"end_character":69},"updated":"2022-10-28 01:24:04.000000000","message":"Hmm.... we probably should remove resources for Neutron LBaaS. I\u0027d skip adding these items for neutron lbaas now.","commit_id":"b0060f49efb07a77f50c7724c5b458451b0bf281"},{"author":{"_account_id":8313,"name":"Lajos Katona","display_name":"lajoskatona","email":"katonalala@gmail.com","username":"elajkat","status":"Ericsson Software Technology"},"change_message_id":"99b940799aa9616df79b2cf7149422da678e562e","unresolved":false,"context_lines":[{"line_number":32,"context_line":"        RES_TYPE_SUBNET_POOL, RES_TYPE_ADDRESS_SCOPE,"},{"line_number":33,"context_line":"        RES_TYPE_SECURITY_GROUP,"},{"line_number":34,"context_line":"        RES_TYPE_QOS_POLICY,"},{"line_number":35,"context_line":"        RES_TYPE_LOADBALANCER,"},{"line_number":36,"context_line":"        RES_TYPE_LB_LISTENER, RES_TYPE_LB_POOL, RES_TYPE_LB_L7POLICY,"},{"line_number":37,"context_line":"    ) \u003d ("},{"line_number":38,"context_line":"        \u0027network\u0027, \u0027subnet\u0027, \u0027router\u0027, \u0027port\u0027,"},{"line_number":39,"context_line":"        \u0027subnetpool\u0027, \u0027address_scope\u0027,"}],"source_content_type":"text/x-python","patch_set":7,"id":"9c8ffda2_7b340fe7","line":36,"range":{"start_line":35,"start_character":0,"end_line":36,"end_character":69},"in_reply_to":"44f75dc1_0d08aee7","updated":"2022-11-17 15:36:35.000000000","message":"removed them, I was not sure if Heat uses lbaas keyword for Octavia resources also","commit_id":"b0060f49efb07a77f50c7724c5b458451b0bf281"},{"author":{"_account_id":9816,"name":"Takashi Kajinami","email":"kajinamit@oss.nttdata.com","username":"kajinamit"},"change_message_id":"60dc33da2413e7b64a5014a9b57f18a3e9e2e39c","unresolved":true,"context_lines":[{"line_number":67,"context_line":"    def is_not_found(self, ex):"},{"line_number":68,"context_line":"        if isinstance(ex, exceptions.NotFoundException):"},{"line_number":69,"context_line":"            return True"},{"line_number":70,"context_line":"        return (isinstance(ex, exceptions.ResourceNotFound) and"},{"line_number":71,"context_line":"                ex.status_code \u003d\u003d 404)"},{"line_number":72,"context_line":""},{"line_number":73,"context_line":"    def is_conflict(self, ex):"}],"source_content_type":"text/x-python","patch_set":7,"id":"9e33d56d_7aabb8be","line":70,"range":{"start_line":70,"start_character":31,"end_line":70,"end_character":58},"updated":"2022-10-28 01:24:04.000000000","message":"NotFoundException is aliased to ResourceNotFound[1] so I think this logic is never used.\n\n[1] http://github.com/openstack/openstacksdk/commit/4a34f8c6521d4fa55a182e154877a3b358107783","commit_id":"b0060f49efb07a77f50c7724c5b458451b0bf281"},{"author":{"_account_id":8313,"name":"Lajos Katona","display_name":"lajoskatona","email":"katonalala@gmail.com","username":"elajkat","status":"Ericsson Software Technology"},"change_message_id":"99b940799aa9616df79b2cf7149422da678e562e","unresolved":false,"context_lines":[{"line_number":67,"context_line":"    def is_not_found(self, ex):"},{"line_number":68,"context_line":"        if isinstance(ex, exceptions.NotFoundException):"},{"line_number":69,"context_line":"            return True"},{"line_number":70,"context_line":"        return (isinstance(ex, exceptions.ResourceNotFound) and"},{"line_number":71,"context_line":"                ex.status_code \u003d\u003d 404)"},{"line_number":72,"context_line":""},{"line_number":73,"context_line":"    def is_conflict(self, ex):"}],"source_content_type":"text/x-python","patch_set":7,"id":"f92caf1e_8e28b7c5","line":70,"range":{"start_line":70,"start_character":31,"end_line":70,"end_character":58},"in_reply_to":"9e33d56d_7aabb8be","updated":"2022-11-17 15:36:35.000000000","message":"actually is_not_found is also implemented in OpenStackSDKPlugin, so removed from here totally","commit_id":"b0060f49efb07a77f50c7724c5b458451b0bf281"},{"author":{"_account_id":9816,"name":"Takashi Kajinami","email":"kajinamit@oss.nttdata.com","username":"kajinamit"},"change_message_id":"60dc33da2413e7b64a5014a9b57f18a3e9e2e39c","unresolved":true,"context_lines":[{"line_number":70,"context_line":"        return (isinstance(ex, exceptions.ResourceNotFound) and"},{"line_number":71,"context_line":"                ex.status_code \u003d\u003d 404)"},{"line_number":72,"context_line":""},{"line_number":73,"context_line":"    def is_conflict(self, ex):"},{"line_number":74,"context_line":"        return isinstance(ex, exceptions.ConflictException)"},{"line_number":75,"context_line":""},{"line_number":76,"context_line":"    def is_over_limit(self, ex):"},{"line_number":77,"context_line":"        if not isinstance(ex, exceptions.ConflictException):"},{"line_number":78,"context_line":"            return False"},{"line_number":79,"context_line":"        return ex.status_code \u003d\u003d 413"},{"line_number":80,"context_line":""},{"line_number":81,"context_line":"    def is_invalid(self, ex):"},{"line_number":82,"context_line":"        return isinstance(ex, exceptions.BadRequestException)"},{"line_number":83,"context_line":""},{"line_number":84,"context_line":"    @os_client.MEMOIZE_EXTENSIONS"},{"line_number":85,"context_line":"    def _list_extensions(self):"}],"source_content_type":"text/x-python","patch_set":7,"id":"6238dcd7_9987c81b","line":82,"range":{"start_line":73,"start_character":0,"end_line":82,"end_character":61},"updated":"2022-10-28 01:24:04.000000000","message":"I\u0027d add these to the base OpenStackSDKPlugin class because these look generic.","commit_id":"b0060f49efb07a77f50c7724c5b458451b0bf281"},{"author":{"_account_id":8313,"name":"Lajos Katona","display_name":"lajoskatona","email":"katonalala@gmail.com","username":"elajkat","status":"Ericsson Software Technology"},"change_message_id":"99b940799aa9616df79b2cf7149422da678e562e","unresolved":false,"context_lines":[{"line_number":70,"context_line":"        return (isinstance(ex, exceptions.ResourceNotFound) and"},{"line_number":71,"context_line":"                ex.status_code \u003d\u003d 404)"},{"line_number":72,"context_line":""},{"line_number":73,"context_line":"    def is_conflict(self, ex):"},{"line_number":74,"context_line":"        return isinstance(ex, exceptions.ConflictException)"},{"line_number":75,"context_line":""},{"line_number":76,"context_line":"    def is_over_limit(self, ex):"},{"line_number":77,"context_line":"        if not isinstance(ex, exceptions.ConflictException):"},{"line_number":78,"context_line":"            return False"},{"line_number":79,"context_line":"        return ex.status_code \u003d\u003d 413"},{"line_number":80,"context_line":""},{"line_number":81,"context_line":"    def is_invalid(self, ex):"},{"line_number":82,"context_line":"        return isinstance(ex, exceptions.BadRequestException)"},{"line_number":83,"context_line":""},{"line_number":84,"context_line":"    @os_client.MEMOIZE_EXTENSIONS"},{"line_number":85,"context_line":"    def _list_extensions(self):"}],"source_content_type":"text/x-python","patch_set":7,"id":"e3d1d8e6_5506001b","line":82,"range":{"start_line":73,"start_character":0,"end_line":82,"end_character":61},"in_reply_to":"6238dcd7_9987c81b","updated":"2022-11-17 15:36:35.000000000","message":"Done","commit_id":"b0060f49efb07a77f50c7724c5b458451b0bf281"}]}
