)]}'
{"openstackclient/network/v2/address_group.py":[{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"245a646aa7d91de507029fa99d234886cc051602","unresolved":true,"context_lines":[{"line_number":45,"context_line":"def _get_attrs(client_manager, parsed_args):"},{"line_number":46,"context_line":"    attrs \u003d {}"},{"line_number":47,"context_line":"    attrs[\u0027name\u0027] \u003d parsed_args.name"},{"line_number":48,"context_line":"    attrs[\u0027description\u0027] \u003d parsed_args.description or attrs[\u0027name\u0027]"},{"line_number":49,"context_line":"    attrs[\u0027addresses\u0027] \u003d _format_addresses(parsed_args.address)"},{"line_number":50,"context_line":"    if \u0027project\u0027 in parsed_args and parsed_args.project is not None:"},{"line_number":51,"context_line":"        identity_client \u003d client_manager.identity"}],"source_content_type":"text/x-python","patch_set":7,"id":"128e0007_dd79bb92","line":48,"range":{"start_line":48,"start_character":50,"end_line":48,"end_character":67},"updated":"2020-12-22 17:39:31.000000000","message":"Is this necessary? Can\u0027t we leave the description empty?\n\nLater: it seems not as the below works as expected\n\n  $ openstack address group set --description \u0027\u0027 test","commit_id":"c17388528676cffc07d5eddc14e4a26d34d7e78d"},{"author":{"_account_id":28159,"name":"Hang Yang","email":"hangyang@yahooinc.com","username":"hangyang"},"change_message_id":"3bf99185599841f1c1ac1c03ad4cbcc26bb2bfc9","unresolved":true,"context_lines":[{"line_number":45,"context_line":"def _get_attrs(client_manager, parsed_args):"},{"line_number":46,"context_line":"    attrs \u003d {}"},{"line_number":47,"context_line":"    attrs[\u0027name\u0027] \u003d parsed_args.name"},{"line_number":48,"context_line":"    attrs[\u0027description\u0027] \u003d parsed_args.description or attrs[\u0027name\u0027]"},{"line_number":49,"context_line":"    attrs[\u0027addresses\u0027] \u003d _format_addresses(parsed_args.address)"},{"line_number":50,"context_line":"    if \u0027project\u0027 in parsed_args and parsed_args.project is not None:"},{"line_number":51,"context_line":"        identity_client \u003d client_manager.identity"}],"source_content_type":"text/x-python","patch_set":7,"id":"2b36d9b0_55d25c4f","line":48,"range":{"start_line":48,"start_character":50,"end_line":48,"end_character":67},"in_reply_to":"128e0007_dd79bb92","updated":"2020-12-22 19:47:07.000000000","message":"Yup after a second thought, I agree it\u0027d be better not to manipulate the description for users. I updated it in PS-8.","commit_id":"c17388528676cffc07d5eddc14e4a26d34d7e78d"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"73ae13afd2ba2ae2e33e87a15b6e38b7dfc006cb","unresolved":false,"context_lines":[{"line_number":45,"context_line":"def _get_attrs(client_manager, parsed_args):"},{"line_number":46,"context_line":"    attrs \u003d {}"},{"line_number":47,"context_line":"    attrs[\u0027name\u0027] \u003d parsed_args.name"},{"line_number":48,"context_line":"    attrs[\u0027description\u0027] \u003d parsed_args.description or attrs[\u0027name\u0027]"},{"line_number":49,"context_line":"    attrs[\u0027addresses\u0027] \u003d _format_addresses(parsed_args.address)"},{"line_number":50,"context_line":"    if \u0027project\u0027 in parsed_args and parsed_args.project is not None:"},{"line_number":51,"context_line":"        identity_client \u003d client_manager.identity"}],"source_content_type":"text/x-python","patch_set":7,"id":"d0bde2a9_1579d690","line":48,"range":{"start_line":48,"start_character":50,"end_line":48,"end_character":67},"in_reply_to":"2b36d9b0_55d25c4f","updated":"2020-12-23 11:14:29.000000000","message":"Ta","commit_id":"c17388528676cffc07d5eddc14e4a26d34d7e78d"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"245a646aa7d91de507029fa99d234886cc051602","unresolved":true,"context_lines":[{"line_number":56,"context_line":"        ).id"},{"line_number":57,"context_line":"        attrs[\u0027tenant_id\u0027] \u003d project_id"},{"line_number":58,"context_line":""},{"line_number":59,"context_line":"    return attrs"},{"line_number":60,"context_line":""},{"line_number":61,"context_line":""},{"line_number":62,"context_line":"class CreateAddressGroup(command.ShowOne):"}],"source_content_type":"text/x-python","patch_set":7,"id":"5e6d2959_8068e86c","line":59,"updated":"2020-12-22 17:39:31.000000000","message":"Could we fold this whole thing into its caller, since there is only the one?","commit_id":"c17388528676cffc07d5eddc14e4a26d34d7e78d"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"73ae13afd2ba2ae2e33e87a15b6e38b7dfc006cb","unresolved":false,"context_lines":[{"line_number":56,"context_line":"        ).id"},{"line_number":57,"context_line":"        attrs[\u0027tenant_id\u0027] \u003d project_id"},{"line_number":58,"context_line":""},{"line_number":59,"context_line":"    return attrs"},{"line_number":60,"context_line":""},{"line_number":61,"context_line":""},{"line_number":62,"context_line":"class CreateAddressGroup(command.ShowOne):"}],"source_content_type":"text/x-python","patch_set":7,"id":"e310782e_b4d810bc","line":59,"in_reply_to":"5bc6d19f_1f98739b","updated":"2020-12-23 11:14:29.000000000","message":"Ack","commit_id":"c17388528676cffc07d5eddc14e4a26d34d7e78d"},{"author":{"_account_id":28159,"name":"Hang Yang","email":"hangyang@yahooinc.com","username":"hangyang"},"change_message_id":"3bf99185599841f1c1ac1c03ad4cbcc26bb2bfc9","unresolved":true,"context_lines":[{"line_number":56,"context_line":"        ).id"},{"line_number":57,"context_line":"        attrs[\u0027tenant_id\u0027] \u003d project_id"},{"line_number":58,"context_line":""},{"line_number":59,"context_line":"    return attrs"},{"line_number":60,"context_line":""},{"line_number":61,"context_line":""},{"line_number":62,"context_line":"class CreateAddressGroup(command.ShowOne):"}],"source_content_type":"text/x-python","patch_set":7,"id":"5bc6d19f_1f98739b","line":59,"in_reply_to":"5e6d2959_8068e86c","updated":"2020-12-22 19:47:07.000000000","message":"I still prefer to have this in a separate method so tack_action() can be kept clean and simple.","commit_id":"c17388528676cffc07d5eddc14e4a26d34d7e78d"},{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"eeaf66b8f2c7aff181aa0ec9886453baf641e382","unresolved":true,"context_lines":[{"line_number":39,"context_line":"    ret \u003d []"},{"line_number":40,"context_line":"    for addr in addresses:"},{"line_number":41,"context_line":"        ret.append(str(netaddr.IPNetwork(addr)))"},{"line_number":42,"context_line":"    return ret"},{"line_number":43,"context_line":""},{"line_number":44,"context_line":""},{"line_number":45,"context_line":"def _get_attrs(client_manager, parsed_args):"}],"source_content_type":"text/x-python","patch_set":11,"id":"509fd3b8_7a056981","line":42,"updated":"2021-01-08 15:41:02.000000000","message":"small nit: that could be a generator, right?\n\nreturn [str(netaddr.IPNetwork(addr)) for addr in addresses]","commit_id":"f57e10b903fa71d02a6e104717824d004178bbf5"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"d061f70a9b5cf417a162ef5624ba1753c42cad63","unresolved":false,"context_lines":[{"line_number":39,"context_line":"    ret \u003d []"},{"line_number":40,"context_line":"    for addr in addresses:"},{"line_number":41,"context_line":"        ret.append(str(netaddr.IPNetwork(addr)))"},{"line_number":42,"context_line":"    return ret"},{"line_number":43,"context_line":""},{"line_number":44,"context_line":""},{"line_number":45,"context_line":"def _get_attrs(client_manager, parsed_args):"}],"source_content_type":"text/x-python","patch_set":11,"id":"3f87911e_f7fe49a4","line":42,"in_reply_to":"509fd3b8_7a056981","updated":"2021-01-11 14:30:25.000000000","message":"Done in follow-up https://review.opendev.org/c/openstack/python-openstackclient/+/770131","commit_id":"f57e10b903fa71d02a6e104717824d004178bbf5"},{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"eeaf66b8f2c7aff181aa0ec9886453baf641e382","unresolved":true,"context_lines":[{"line_number":185,"context_line":"                parsed_args.project,"},{"line_number":186,"context_line":"                parsed_args.project_domain,"},{"line_number":187,"context_line":"            ).id"},{"line_number":188,"context_line":"            attrs[\u0027tenant_id\u0027] \u003d project_id"},{"line_number":189,"context_line":"            attrs[\u0027project_id\u0027] \u003d project_id"},{"line_number":190,"context_line":"        data \u003d client.address_groups(**attrs)"},{"line_number":191,"context_line":""}],"source_content_type":"text/x-python","patch_set":11,"id":"4a4a8f0a_e8f6e70e","line":188,"range":{"start_line":188,"start_character":12,"end_line":188,"end_character":43},"updated":"2021-01-08 15:41:02.000000000","message":"nit: we should not use \"tenant_id\" anymore. This should work only with \"project_id\"","commit_id":"f57e10b903fa71d02a6e104717824d004178bbf5"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"d061f70a9b5cf417a162ef5624ba1753c42cad63","unresolved":false,"context_lines":[{"line_number":185,"context_line":"                parsed_args.project,"},{"line_number":186,"context_line":"                parsed_args.project_domain,"},{"line_number":187,"context_line":"            ).id"},{"line_number":188,"context_line":"            attrs[\u0027tenant_id\u0027] \u003d project_id"},{"line_number":189,"context_line":"            attrs[\u0027project_id\u0027] \u003d project_id"},{"line_number":190,"context_line":"        data \u003d client.address_groups(**attrs)"},{"line_number":191,"context_line":""}],"source_content_type":"text/x-python","patch_set":11,"id":"72e98eb8_24a814a2","line":188,"range":{"start_line":188,"start_character":12,"end_line":188,"end_character":43},"in_reply_to":"4a4a8f0a_e8f6e70e","updated":"2021-01-11 14:30:25.000000000","message":"Ditto","commit_id":"f57e10b903fa71d02a6e104717824d004178bbf5"}],"openstackclient/tests/functional/network/v2/test_address_group.py":[{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"eeaf66b8f2c7aff181aa0ec9886453baf641e382","unresolved":true,"context_lines":[{"line_number":174,"context_line":"            \u0027address group show -f json \u0027 +"},{"line_number":175,"context_line":"            newname,"},{"line_number":176,"context_line":"        ))"},{"line_number":177,"context_line":"        self.assertEqual(0, len(cmd_output[\u0027addresses\u0027]))"}],"source_content_type":"text/x-python","patch_set":11,"id":"25cde426_918eaf78","line":177,"updated":"2021-01-08 15:41:02.000000000","message":"cool! I was expecting this test","commit_id":"f57e10b903fa71d02a6e104717824d004178bbf5"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"d061f70a9b5cf417a162ef5624ba1753c42cad63","unresolved":false,"context_lines":[{"line_number":174,"context_line":"            \u0027address group show -f json \u0027 +"},{"line_number":175,"context_line":"            newname,"},{"line_number":176,"context_line":"        ))"},{"line_number":177,"context_line":"        self.assertEqual(0, len(cmd_output[\u0027addresses\u0027]))"}],"source_content_type":"text/x-python","patch_set":11,"id":"fb75969e_b823954a","line":177,"in_reply_to":"25cde426_918eaf78","updated":"2021-01-11 14:30:25.000000000","message":"Ack","commit_id":"f57e10b903fa71d02a6e104717824d004178bbf5"}],"setup.cfg":[{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"245a646aa7d91de507029fa99d234886cc051602","unresolved":true,"context_lines":[{"line_number":382,"context_line":"    address_group_list \u003d openstackclient.network.v2.address_group:ListAddressGroup"},{"line_number":383,"context_line":"    address_group_set \u003d openstackclient.network.v2.address_group:SetAddressGroup"},{"line_number":384,"context_line":"    address_group_show \u003d openstackclient.network.v2.address_group:ShowAddressGroup"},{"line_number":385,"context_line":"    address_group_add_addresses \u003d openstackclient.network.v2.address_group:AddAddressesToAddressGroup"},{"line_number":386,"context_line":"    address_group_remove_addresses \u003d openstackclient.network.v2.address_group:RemoveAddressesFromAddressGroup"},{"line_number":387,"context_line":""},{"line_number":388,"context_line":"    address_scope_create \u003d openstackclient.network.v2.address_scope:CreateAddressScope"},{"line_number":389,"context_line":"    address_scope_delete \u003d openstackclient.network.v2.address_scope:DeleteAddressScope"}],"source_content_type":"text/x-ttcn-cfg","patch_set":7,"id":"75a967d8_ec723998","line":386,"range":{"start_line":385,"start_character":0,"end_line":386,"end_character":109},"updated":"2020-12-22 17:39:31.000000000","message":"Any reason to make these separate commands rather than simply parameters of the \u0027address group set\u0027 command? e.g.\n\n  address group set --address ADDRESS --address ADDRESS ... ADDRESS-GROUP","commit_id":"c17388528676cffc07d5eddc14e4a26d34d7e78d"},{"author":{"_account_id":27900,"name":"Artem Goncharov","email":"artem.goncharov@gmail.com","username":"gtema"},"change_message_id":"1362ff19bf403743a4061e44475a2257b5731dec","unresolved":true,"context_lines":[{"line_number":382,"context_line":"    address_group_list \u003d openstackclient.network.v2.address_group:ListAddressGroup"},{"line_number":383,"context_line":"    address_group_set \u003d openstackclient.network.v2.address_group:SetAddressGroup"},{"line_number":384,"context_line":"    address_group_show \u003d openstackclient.network.v2.address_group:ShowAddressGroup"},{"line_number":385,"context_line":"    address_group_add_addresses \u003d openstackclient.network.v2.address_group:AddAddressesToAddressGroup"},{"line_number":386,"context_line":"    address_group_remove_addresses \u003d openstackclient.network.v2.address_group:RemoveAddressesFromAddressGroup"},{"line_number":387,"context_line":""},{"line_number":388,"context_line":"    address_scope_create \u003d openstackclient.network.v2.address_scope:CreateAddressScope"},{"line_number":389,"context_line":"    address_scope_delete \u003d openstackclient.network.v2.address_scope:DeleteAddressScope"}],"source_content_type":"text/x-ttcn-cfg","patch_set":7,"id":"f883281a_80b4a9cd","line":386,"range":{"start_line":385,"start_character":0,"end_line":386,"end_character":109},"in_reply_to":"0ce38705_0396ff57","updated":"2020-12-23 11:46:26.000000000","message":"I agree with Stephen, that in other cases those are standalone resources and thus treated separately. I.e. we do not have \"subnet add dns_nameserver 1.2.3.4\".\n\nIs there potential limit on addresses in the group? I agree management of 10+ entries via \"set/unset\" might be sub-optimal, but with chosen CRUD design it falls exactly here. Otherwise we need to start treating addresses as standalone meta entities (\"address group address list\", \"address group add address\"), since even listing 20 addresses as property of the group is also not optimal.","commit_id":"c17388528676cffc07d5eddc14e4a26d34d7e78d"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"edae21e306c1d445c75e3f4d318750c9e0a31ef2","unresolved":true,"context_lines":[{"line_number":382,"context_line":"    address_group_list \u003d openstackclient.network.v2.address_group:ListAddressGroup"},{"line_number":383,"context_line":"    address_group_set \u003d openstackclient.network.v2.address_group:SetAddressGroup"},{"line_number":384,"context_line":"    address_group_show \u003d openstackclient.network.v2.address_group:ShowAddressGroup"},{"line_number":385,"context_line":"    address_group_add_addresses \u003d openstackclient.network.v2.address_group:AddAddressesToAddressGroup"},{"line_number":386,"context_line":"    address_group_remove_addresses \u003d openstackclient.network.v2.address_group:RemoveAddressesFromAddressGroup"},{"line_number":387,"context_line":""},{"line_number":388,"context_line":"    address_scope_create \u003d openstackclient.network.v2.address_scope:CreateAddressScope"},{"line_number":389,"context_line":"    address_scope_delete \u003d openstackclient.network.v2.address_scope:DeleteAddressScope"}],"source_content_type":"text/x-ttcn-cfg","patch_set":7,"id":"c15c9f58_6cec9b88","line":386,"range":{"start_line":385,"start_character":0,"end_line":386,"end_character":109},"in_reply_to":"130888da_728ee2a1","updated":"2020-12-24 12:21:40.000000000","message":"I think adding separate \u0027router add/remove route\u0027 command was the wrong decision and should be fixed, to be honest. OSC\u0027s purpose is not to map to the APIs exactly. It\u0027s to provide a consistent interface to an OpenStack cloud. I noted that the address is not a standalone resource because this is the crucial distinction used to assess whether we can use this pattern or not [1].\n\nI don\u0027t think the fact that these are different APIs under the hood is an issue. A similar example would be the \u0027flavor set\u0027 command. This allows you to both set the flavor description and add the flavor to a project, and while the former uses the \u0027/flavors/{flavorID}\u0027 endpoint, the latter is done via a different \u0027/flavors/{flavorID}/os-flavor-access\u0027 endpoint. These are different APIs yet the same command is used for both: \u0027openstack flavor set\u0027. Similarly, consider the \u0027server set\u0027 command. This actually uses *five* different APIs under the hood, but it\u0027s all exposed via the same command.\n\nGiven Artem is in agreement here, I really do feel this is the way to go. While I don\u0027t think \u0027router add/remove route\u0027 is probably worth correcting now, if you\u0027d like to make that consistent (via \u0027router set --route\u0027) I\u0027d be happy to help.\n\n[1] https://docs.openstack.org/python-openstackclient/latest/contributor/humaninterfaceguide.html#command-structure","commit_id":"c17388528676cffc07d5eddc14e4a26d34d7e78d"},{"author":{"_account_id":28159,"name":"Hang Yang","email":"hangyang@yahooinc.com","username":"hangyang"},"change_message_id":"3bf99185599841f1c1ac1c03ad4cbcc26bb2bfc9","unresolved":true,"context_lines":[{"line_number":382,"context_line":"    address_group_list \u003d openstackclient.network.v2.address_group:ListAddressGroup"},{"line_number":383,"context_line":"    address_group_set \u003d openstackclient.network.v2.address_group:SetAddressGroup"},{"line_number":384,"context_line":"    address_group_show \u003d openstackclient.network.v2.address_group:ShowAddressGroup"},{"line_number":385,"context_line":"    address_group_add_addresses \u003d openstackclient.network.v2.address_group:AddAddressesToAddressGroup"},{"line_number":386,"context_line":"    address_group_remove_addresses \u003d openstackclient.network.v2.address_group:RemoveAddressesFromAddressGroup"},{"line_number":387,"context_line":""},{"line_number":388,"context_line":"    address_scope_create \u003d openstackclient.network.v2.address_scope:CreateAddressScope"},{"line_number":389,"context_line":"    address_scope_delete \u003d openstackclient.network.v2.address_scope:DeleteAddressScope"}],"source_content_type":"text/x-ttcn-cfg","patch_set":7,"id":"aa52c17c_d9199d42","line":386,"range":{"start_line":385,"start_character":0,"end_line":386,"end_character":109},"in_reply_to":"75a967d8_ec723998","updated":"2020-12-22 19:47:07.000000000","message":"My understanding for set command is it is more about specifying the state of a property like name and description. If using it for addresses then it\u0027d hard to provide the full address list  when it gets long. Technically I think we can still set/unset to specify the address delta, but using separate explicit add/remove commands should be better for the readability and that also follows Neutron\u0027s convention like network_agent_add/remove_router in L413 below.","commit_id":"c17388528676cffc07d5eddc14e4a26d34d7e78d"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"73ae13afd2ba2ae2e33e87a15b6e38b7dfc006cb","unresolved":true,"context_lines":[{"line_number":382,"context_line":"    address_group_list \u003d openstackclient.network.v2.address_group:ListAddressGroup"},{"line_number":383,"context_line":"    address_group_set \u003d openstackclient.network.v2.address_group:SetAddressGroup"},{"line_number":384,"context_line":"    address_group_show \u003d openstackclient.network.v2.address_group:ShowAddressGroup"},{"line_number":385,"context_line":"    address_group_add_addresses \u003d openstackclient.network.v2.address_group:AddAddressesToAddressGroup"},{"line_number":386,"context_line":"    address_group_remove_addresses \u003d openstackclient.network.v2.address_group:RemoveAddressesFromAddressGroup"},{"line_number":387,"context_line":""},{"line_number":388,"context_line":"    address_scope_create \u003d openstackclient.network.v2.address_scope:CreateAddressScope"},{"line_number":389,"context_line":"    address_scope_delete \u003d openstackclient.network.v2.address_scope:DeleteAddressScope"}],"source_content_type":"text/x-ttcn-cfg","patch_set":7,"id":"0ce38705_0396ff57","line":386,"range":{"start_line":385,"start_character":0,"end_line":386,"end_character":109},"in_reply_to":"aa52c17c_d9199d42","updated":"2020-12-23 11:14:29.000000000","message":"I\u0027ve thought on this more. While we do have examples of \u0027\u003cresource\u003e add \u003csubresource\u003e\u0027, such as \u0027network agent add router\u0027 and \u0027server add port\u0027, I don\u0027t think this is the same as what we\u0027re doing here. Those things are proper resources in their own right. They can exist without the parent resource, i.e. you can create a router separately from a network agent, or a port separately from an instance. Addresses, as used here, are not. They\u0027re attributes of the main \"address group\" resource, akin to a description or metadata properties. I think they should be set as such.\n\nAlso, all the other add/remove commands use singular, e.g. \u0027server add port\u0027 rather than \u0027server add ports\u0027 because you can only add one sub-resource at a time.\n\nCould we change this to remove the \u0027address group (add|remove) addresses\u0027 in favour of \u0027address group (set|unset) --address\u0027?","commit_id":"c17388528676cffc07d5eddc14e4a26d34d7e78d"},{"author":{"_account_id":28159,"name":"Hang Yang","email":"hangyang@yahooinc.com","username":"hangyang"},"change_message_id":"b035edcab5ea8e18a6c820f4519962129a889bc1","unresolved":true,"context_lines":[{"line_number":382,"context_line":"    address_group_list \u003d openstackclient.network.v2.address_group:ListAddressGroup"},{"line_number":383,"context_line":"    address_group_set \u003d openstackclient.network.v2.address_group:SetAddressGroup"},{"line_number":384,"context_line":"    address_group_show \u003d openstackclient.network.v2.address_group:ShowAddressGroup"},{"line_number":385,"context_line":"    address_group_add_addresses \u003d openstackclient.network.v2.address_group:AddAddressesToAddressGroup"},{"line_number":386,"context_line":"    address_group_remove_addresses \u003d openstackclient.network.v2.address_group:RemoveAddressesFromAddressGroup"},{"line_number":387,"context_line":""},{"line_number":388,"context_line":"    address_scope_create \u003d openstackclient.network.v2.address_scope:CreateAddressScope"},{"line_number":389,"context_line":"    address_scope_delete \u003d openstackclient.network.v2.address_scope:DeleteAddressScope"}],"source_content_type":"text/x-ttcn-cfg","patch_set":7,"id":"130888da_728ee2a1","line":386,"range":{"start_line":385,"start_character":0,"end_line":386,"end_character":109},"in_reply_to":"f883281a_80b4a9cd","updated":"2020-12-23 19:53:23.000000000","message":"I followed the example of neutron router add/remove route when designed the server API and CLI https://github.com/openstack/python-openstackclient/commit/dba57c85d5536369d600ae98599c08b921713bd5 So in that example, route is an attribute for router but also uses the action add/remove in API and CLI. The main reason was because set/unset to specify the whole route state was not convenient for users and error-prone at server side. Address group is similar to that case as it is designed to hold many addresses (no limit is set yet) and want to support atomic address change. Currently for Neutron server side and SDK we already set to use the action endpoints: https://github.com/openstack/neutron-lib/blob/master/neutron_lib/api/definitions/address_group.py#L70-L71 and https://github.com/openstack/openstacksdk/blob/master/openstack/network/v2/address_group.py#L54So I\u0027d really like to keep the CLI aline with that instead of changing to set/unset. I have changed the command to use singular \u0027add/remove address\u0027 as you suggested. Artem and Stephen please let me know what do you think. Thanks!","commit_id":"c17388528676cffc07d5eddc14e4a26d34d7e78d"}]}
