)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":14525,"name":"Vasyl Saienko","email":"vsaienko@mirantis.com","username":"vsaienko"},"change_message_id":"042de34d19825ae6bc301d9ec3124ad2a7de2c13","unresolved":false,"context_lines":[{"line_number":6,"context_line":""},{"line_number":7,"context_line":"Rely on portgroup individual_mode_supported"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"When individual_mode_supported\u003dFalase it means that ports"},{"line_number":10,"context_line":"can\u0027t be used in single interface fashion, fallback is not"},{"line_number":11,"context_line":"allowed. When vif_port_id is updated on port it means that"},{"line_number":12,"context_line":"we using port as single interface port."}],"source_content_type":"text/x-gerrit-commit-message","patch_set":2,"id":"fa7ab95a_f9f1d4ce","line":9,"range":{"start_line":9,"start_character":31,"end_line":9,"end_character":37},"updated":"2016-08-26 12:56:31.000000000","message":"False","commit_id":"d8381c73597e4914a8c0d6f88b9e9d52dc243926"},{"author":{"_account_id":14525,"name":"Vasyl Saienko","email":"vsaienko@mirantis.com","username":"vsaienko"},"change_message_id":"4321ab66d1f2d4c184d0855adbb2603b8b4d8b52","unresolved":false,"context_lines":[{"line_number":6,"context_line":""},{"line_number":7,"context_line":"Rely on portgroup individual_mode_supported"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"When individual_mode_supported\u003dFalase it means that ports"},{"line_number":10,"context_line":"can\u0027t be used in single interface fashion, fallback is not"},{"line_number":11,"context_line":"allowed. When vif_port_id is updated on port it means that"},{"line_number":12,"context_line":"we using port as single interface port."}],"source_content_type":"text/x-gerrit-commit-message","patch_set":2,"id":"fa7ab95a_27ebb814","line":9,"range":{"start_line":9,"start_character":31,"end_line":9,"end_character":37},"in_reply_to":"fa7ab95a_f9f1d4ce","updated":"2016-08-29 12:06:55.000000000","message":"Done","commit_id":"d8381c73597e4914a8c0d6f88b9e9d52dc243926"},{"author":{"_account_id":14525,"name":"Vasyl Saienko","email":"vsaienko@mirantis.com","username":"vsaienko"},"change_message_id":"7fb91806b996d9ccb902c9f35c7759c3c8ac2749","unresolved":false,"context_lines":[{"line_number":11,"context_line":"allowed. When vif_port_id is updated on port it means that"},{"line_number":12,"context_line":"we using port as single interface port."},{"line_number":13,"context_line":"This patch prohibit using ports that are members of portgroup"},{"line_number":14,"context_line":"who doesn\u0027t support fallback to single interface fashion."},{"line_number":15,"context_line":""},{"line_number":16,"context_line":"Change-Id: I9b4682918725bed2da0b7c89666e2c37d8826290"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":2,"id":"fa7ab95a_52ab721d","line":14,"updated":"2016-08-26 14:14:22.000000000","message":"Partial-bug: #1526403","commit_id":"d8381c73597e4914a8c0d6f88b9e9d52dc243926"},{"author":{"_account_id":14525,"name":"Vasyl Saienko","email":"vsaienko@mirantis.com","username":"vsaienko"},"change_message_id":"4321ab66d1f2d4c184d0855adbb2603b8b4d8b52","unresolved":false,"context_lines":[{"line_number":11,"context_line":"allowed. When vif_port_id is updated on port it means that"},{"line_number":12,"context_line":"we using port as single interface port."},{"line_number":13,"context_line":"This patch prohibit using ports that are members of portgroup"},{"line_number":14,"context_line":"who doesn\u0027t support fallback to single interface fashion."},{"line_number":15,"context_line":""},{"line_number":16,"context_line":"Change-Id: I9b4682918725bed2da0b7c89666e2c37d8826290"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":2,"id":"fa7ab95a_c7dccc75","line":14,"in_reply_to":"fa7ab95a_52ab721d","updated":"2016-08-29 12:06:55.000000000","message":"Done","commit_id":"d8381c73597e4914a8c0d6f88b9e9d52dc243926"},{"author":{"_account_id":10342,"name":"Jay Faulkner","display_name":"JayF","email":"jay@jvf.cc","username":"JayF","status":"youtube.com/@oss-gr / podcast.gr-oss.io"},"change_message_id":"7f1e4562861d5d4bec74fa198734ed80f949caac","unresolved":false,"context_lines":[{"line_number":7,"context_line":"Rely on portgroup standalone_ports_supported"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"Some hardware doesn\u0027t support portgroup fallback to single interface"},{"line_number":10,"context_line":"fashion. This imposes aditional restrictions on ports, for example"},{"line_number":11,"context_line":"such ports will not support booting by PXE."},{"line_number":12,"context_line":"This patch adds restrictions setting pxe_enabled\u003dTrue on ports that"},{"line_number":13,"context_line":"are members of portgroups with standalone_ports_supported\u003dFalse. And"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":20,"id":"9a629dbe_6a44a71a","line":10,"updated":"2016-11-09 15:44:07.000000000","message":"nit: additional","commit_id":"284a4746083facbe38e0e6db70e3f37c5c987cd2"},{"author":{"_account_id":14525,"name":"Vasyl Saienko","email":"vsaienko@mirantis.com","username":"vsaienko"},"change_message_id":"2f3b5daefbaaaaead773f0c659cc81f5870fdb13","unresolved":false,"context_lines":[{"line_number":7,"context_line":"Rely on portgroup standalone_ports_supported"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"Some hardware doesn\u0027t support portgroup fallback to single interface"},{"line_number":10,"context_line":"fashion. This imposes aditional restrictions on ports, for example"},{"line_number":11,"context_line":"such ports will not support booting by PXE."},{"line_number":12,"context_line":"This patch adds restrictions setting pxe_enabled\u003dTrue on ports that"},{"line_number":13,"context_line":"are members of portgroups with standalone_ports_supported\u003dFalse. And"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":20,"id":"9a629dbe_b450abd5","line":10,"in_reply_to":"9a629dbe_6a44a71a","updated":"2016-11-10 16:09:46.000000000","message":"Done","commit_id":"284a4746083facbe38e0e6db70e3f37c5c987cd2"},{"author":{"_account_id":14760,"name":"John L. Villalovos","email":"openstack.org@sodarock.com","username":"jlvillal"},"change_message_id":"e83a4731a1a68c3ee7457eeaf3af02ccc6809b16","unresolved":false,"context_lines":[{"line_number":4,"context_line":"Commit:     Vasyl Saienko \u003cvsaienko@mirantis.com\u003e"},{"line_number":5,"context_line":"CommitDate: 2016-11-10 18:04:22 +0200"},{"line_number":6,"context_line":""},{"line_number":7,"context_line":"Rely on portgroup standalone_ports_supported"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"Some hardware doesn\u0027t support portgroup fallback to single interface"},{"line_number":10,"context_line":"fashion. This imposes additional restrictions on ports, for example"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":21,"id":"9a629dbe_d859c436","line":7,"updated":"2016-11-10 22:56:51.000000000","message":"I think it would sound better as:\n\n Enable usage of portgroup.standalone_ports_supported field.\n\nWould like to get other opinions on this wording. As it is also used in function names.","commit_id":"0f41b6005feaf0fabd978900285fbfba453533e5"},{"author":{"_account_id":14525,"name":"Vasyl Saienko","email":"vsaienko@mirantis.com","username":"vsaienko"},"change_message_id":"3b5fc578b94d72e38dc354658225141780eca0c4","unresolved":false,"context_lines":[{"line_number":4,"context_line":"Commit:     Vasyl Saienko \u003cvsaienko@mirantis.com\u003e"},{"line_number":5,"context_line":"CommitDate: 2016-11-10 18:04:22 +0200"},{"line_number":6,"context_line":""},{"line_number":7,"context_line":"Rely on portgroup standalone_ports_supported"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"Some hardware doesn\u0027t support portgroup fallback to single interface"},{"line_number":10,"context_line":"fashion. This imposes additional restrictions on ports, for example"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":21,"id":"9a629dbe_50402007","line":7,"in_reply_to":"9a629dbe_d859c436","updated":"2016-11-11 11:10:33.000000000","message":"It doesn\u0027t fit commit message line length requirement.\nbesides we using \"Rely on portgroup standalone_ports_supported\" in other places I want to keep single message among ironic code.","commit_id":"0f41b6005feaf0fabd978900285fbfba453533e5"}],"doc/source/dev/webapi-version-history.rst":[{"author":{"_account_id":14760,"name":"John L. Villalovos","email":"openstack.org@sodarock.com","username":"jlvillal"},"change_message_id":"e83a4731a1a68c3ee7457eeaf3af02ccc6809b16","unresolved":false,"context_lines":[{"line_number":4,"context_line":""},{"line_number":5,"context_line":"**1.25**"},{"line_number":6,"context_line":""},{"line_number":7,"context_line":"    Rely on portgroup.standalone_ports_supported field."},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"**1.24**"},{"line_number":10,"context_line":""}],"source_content_type":"text/x-rst","patch_set":21,"id":"9a629dbe_381d6066","line":7,"updated":"2016-11-10 22:56:51.000000000","message":"I think it would sound better as:\n\n Enable usage of portgroup.standalone_ports_supported field.","commit_id":"0f41b6005feaf0fabd978900285fbfba453533e5"},{"author":{"_account_id":14525,"name":"Vasyl Saienko","email":"vsaienko@mirantis.com","username":"vsaienko"},"change_message_id":"3b5fc578b94d72e38dc354658225141780eca0c4","unresolved":false,"context_lines":[{"line_number":4,"context_line":""},{"line_number":5,"context_line":"**1.25**"},{"line_number":6,"context_line":""},{"line_number":7,"context_line":"    Rely on portgroup.standalone_ports_supported field."},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"**1.24**"},{"line_number":10,"context_line":""}],"source_content_type":"text/x-rst","patch_set":21,"id":"9a629dbe_50dca045","line":7,"in_reply_to":"9a629dbe_381d6066","updated":"2016-11-11 11:10:33.000000000","message":"I\u0027m ok with updating it to \"Enable usage of portgroup.standalone_ports_supported field.\" other places should also be updated.\nLooking for other thought on this.","commit_id":"0f41b6005feaf0fabd978900285fbfba453533e5"},{"author":{"_account_id":6618,"name":"Ruby Loo","email":"opensrloo@gmail.com","username":"rloo"},"change_message_id":"d0153287f02dd0ef531cd2aedb11c9dfb7ba5697","unresolved":false,"context_lines":[{"line_number":4,"context_line":""},{"line_number":5,"context_line":"**1.26**"},{"line_number":6,"context_line":""},{"line_number":7,"context_line":"    Rely on portgroup.standalone_ports_supported field."},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"**1.25**"},{"line_number":10,"context_line":""}],"source_content_type":"text/x-rst","patch_set":22,"id":"7a77a97e_231e9b63","line":7,"updated":"2016-11-15 21:55:31.000000000","message":"I saw John \u0026 Vasyl\u0027s comments on this.\n\nWhat about \u0027Use portgroup.standalone_ports_supported field to maintain consistency between ports and portgroups\u0027.","commit_id":"a5f7c157d1fe0636c5f54dfbd5a9d9f381bd7544"},{"author":{"_account_id":14525,"name":"Vasyl Saienko","email":"vsaienko@mirantis.com","username":"vsaienko"},"change_message_id":"b6f752530fbf676aba8a597a7c78aa8a1155a49b","unresolved":false,"context_lines":[{"line_number":4,"context_line":""},{"line_number":5,"context_line":"**1.26**"},{"line_number":6,"context_line":""},{"line_number":7,"context_line":"    Rely on portgroup.standalone_ports_supported field."},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"**1.25**"},{"line_number":10,"context_line":""}],"source_content_type":"text/x-rst","patch_set":22,"id":"7a77a97e_76fe7739","line":7,"in_reply_to":"7a77a97e_231e9b63","updated":"2016-11-16 12:38:05.000000000","message":"We shouldn\u0027t bump API version, left comments in release notes.","commit_id":"a5f7c157d1fe0636c5f54dfbd5a9d9f381bd7544"}],"ironic/api/controllers/v1/port.py":[{"author":{"_account_id":14525,"name":"Vasyl Saienko","email":"vsaienko@mirantis.com","username":"vsaienko"},"change_message_id":"042de34d19825ae6bc301d9ec3124ad2a7de2c13","unresolved":false,"context_lines":[{"line_number":350,"context_line":"        except exception.PortNotFound:"},{"line_number":351,"context_line":"            return []"},{"line_number":352,"context_line":""},{"line_number":353,"context_line":"    def _check_using_port_in_single_nic_fashion(self, rpc_port):"},{"line_number":354,"context_line":"        \"\"\"Verify if we are allowed to use port in single nic fashion."},{"line_number":355,"context_line":""},{"line_number":356,"context_line":"        :param rpc_port: RPC port object."}],"source_content_type":"text/x-python","patch_set":2,"id":"fa7ab95a_1974b833","line":353,"range":{"start_line":353,"start_character":8,"end_line":353,"end_character":47},"updated":"2016-08-26 12:56:31.000000000","message":"might be _check_allowed_using_port_in_single_nic_fashion ?","commit_id":"d8381c73597e4914a8c0d6f88b9e9d52dc243926"},{"author":{"_account_id":14525,"name":"Vasyl Saienko","email":"vsaienko@mirantis.com","username":"vsaienko"},"change_message_id":"4321ab66d1f2d4c184d0855adbb2603b8b4d8b52","unresolved":false,"context_lines":[{"line_number":350,"context_line":"        except exception.PortNotFound:"},{"line_number":351,"context_line":"            return []"},{"line_number":352,"context_line":""},{"line_number":353,"context_line":"    def _check_using_port_in_single_nic_fashion(self, rpc_port):"},{"line_number":354,"context_line":"        \"\"\"Verify if we are allowed to use port in single nic fashion."},{"line_number":355,"context_line":""},{"line_number":356,"context_line":"        :param rpc_port: RPC port object."}],"source_content_type":"text/x-python","patch_set":2,"id":"fa7ab95a_c6ae92e5","line":353,"range":{"start_line":353,"start_character":8,"end_line":353,"end_character":47},"in_reply_to":"fa7ab95a_1974b833","updated":"2016-08-29 12:06:55.000000000","message":"Done","commit_id":"d8381c73597e4914a8c0d6f88b9e9d52dc243926"},{"author":{"_account_id":14525,"name":"Vasyl Saienko","email":"vsaienko@mirantis.com","username":"vsaienko"},"change_message_id":"ef324f38de7b7629ba981e50f5f01977b3bc3e73","unresolved":false,"context_lines":[{"line_number":565,"context_line":""},{"line_number":566,"context_line":"        # NOTE(vsaienko) Updating vif_port_id means that port is used in single"},{"line_number":567,"context_line":"        # interface fashion. This is not allowed when portgroup doesn\u0027t support"},{"line_number":568,"context_line":"        # fallback or port is not pxe_enabled."},{"line_number":569,"context_line":"        if api_utils.get_patch_values(patch, \u0027/extra/vif_port_id\u0027):"},{"line_number":570,"context_line":"            self._check_using_port_in_single_nic_fashion(rpc_port)"},{"line_number":571,"context_line":"        try:"}],"source_content_type":"text/x-python","patch_set":2,"id":"fa7ab95a_0316eca6","line":568,"updated":"2016-08-26 18:17:36.000000000","message":"It is fear only for flat network scenario. With multitenancy instance will never try to boot from interface in tenant network. We need correctly chose interfaces for provision and cleaning network only.","commit_id":"d8381c73597e4914a8c0d6f88b9e9d52dc243926"},{"author":{"_account_id":14525,"name":"Vasyl Saienko","email":"vsaienko@mirantis.com","username":"vsaienko"},"change_message_id":"4321ab66d1f2d4c184d0855adbb2603b8b4d8b52","unresolved":false,"context_lines":[{"line_number":565,"context_line":""},{"line_number":566,"context_line":"        # NOTE(vsaienko) Updating vif_port_id means that port is used in single"},{"line_number":567,"context_line":"        # interface fashion. This is not allowed when portgroup doesn\u0027t support"},{"line_number":568,"context_line":"        # fallback or port is not pxe_enabled."},{"line_number":569,"context_line":"        if api_utils.get_patch_values(patch, \u0027/extra/vif_port_id\u0027):"},{"line_number":570,"context_line":"            self._check_using_port_in_single_nic_fashion(rpc_port)"},{"line_number":571,"context_line":"        try:"}],"source_content_type":"text/x-python","patch_set":2,"id":"fa7ab95a_c64a1226","line":568,"in_reply_to":"fa7ab95a_0316eca6","updated":"2016-08-29 12:06:55.000000000","message":"Done","commit_id":"d8381c73597e4914a8c0d6f88b9e9d52dc243926"},{"author":{"_account_id":6637,"name":"Sam Betts","email":"sam@code-smash.net","username":"sambetts"},"change_message_id":"65b2c9e6fcd67dd4e68b5f161f37ea6e009fac1d","unresolved":false,"context_lines":[{"line_number":350,"context_line":"        except exception.PortNotFound:"},{"line_number":351,"context_line":"            return []"},{"line_number":352,"context_line":""},{"line_number":353,"context_line":"    def _check_allowed_using_port_in_single_nic_fashion(self, rpc_port):"},{"line_number":354,"context_line":"        \"\"\"Verify if we are allowed to use port in single nic fashion."},{"line_number":355,"context_line":""},{"line_number":356,"context_line":"        Setting \u0027vif_port_id\u0027 means that we are using this port as tenant port."}],"source_content_type":"text/x-python","patch_set":5,"id":"fa7ab95a_3be38dda","line":353,"range":{"start_line":353,"start_character":8,"end_line":353,"end_character":55},"updated":"2016-08-30 12:28:35.000000000","message":"_check_port_allowed_standalone(self, rpc_port):","commit_id":"71d49f708742da26e5cb46080230bd271af693e2"},{"author":{"_account_id":6637,"name":"Sam Betts","email":"sam@code-smash.net","username":"sambetts"},"change_message_id":"65b2c9e6fcd67dd4e68b5f161f37ea6e009fac1d","unresolved":false,"context_lines":[{"line_number":369,"context_line":""},{"line_number":370,"context_line":"        \"\"\""},{"line_number":371,"context_line":""},{"line_number":372,"context_line":"        if not rpc_port.pxe_enabled:"},{"line_number":373,"context_line":"            rpc_node \u003d objects.Node.get_by_id(pecan.request.context,"},{"line_number":374,"context_line":"                                              rpc_port.node_id)"},{"line_number":375,"context_line":"            if rpc_node.network_interface \u003d\u003d \u0027flat\u0027:"},{"line_number":376,"context_line":"                msg \u003d _(\"Can not update vif_port_id for non pxe_enabled \""},{"line_number":377,"context_line":"                        \"port when \u0027flat\u0027 network interface is used.\")"},{"line_number":378,"context_line":"                raise exception.Conflict(msg)"},{"line_number":379,"context_line":""},{"line_number":380,"context_line":"        if rpc_port.portgroup_id:"},{"line_number":381,"context_line":"            rpc_portgroup \u003d objects.Portgroup.get_by_id("}],"source_content_type":"text/x-python","patch_set":5,"id":"fa7ab95a_5b3a11e8","line":378,"range":{"start_line":372,"start_character":0,"end_line":378,"end_character":45},"updated":"2016-08-30 12:28:35.000000000","message":"This isn\u0027t necessarily true, there are cases where you might have a port which will work in a flat network but it doesn\u0027t or you don\u0027t want it to support PXE. For example if I had two network cards 1 is slow, 1 is fast, then I might set pxe_enabled on the fast one, but not the slow one to force provisioning to happen on the fast one but both work for tenant traffic.","commit_id":"71d49f708742da26e5cb46080230bd271af693e2"},{"author":{"_account_id":6637,"name":"Sam Betts","email":"sam@code-smash.net","username":"sambetts"},"change_message_id":"65b2c9e6fcd67dd4e68b5f161f37ea6e009fac1d","unresolved":false,"context_lines":[{"line_number":605,"context_line":"        # never booted by PXE from tenant port by design."},{"line_number":606,"context_line":"        if api_utils.get_patch_values(patch, \u0027/extra/vif_port_id\u0027):"},{"line_number":607,"context_line":"            self._check_allowed_using_port_in_single_nic_fashion(rpc_port)"},{"line_number":608,"context_line":""},{"line_number":609,"context_line":"        try:"},{"line_number":610,"context_line":"            port_dict \u003d rpc_port.as_dict()"},{"line_number":611,"context_line":"            # NOTE(lucasagomes):"}],"source_content_type":"text/x-python","patch_set":5,"id":"fa7ab95a_be930b5a","line":608,"updated":"2016-08-30 12:28:35.000000000","message":"I also think we should add:\n\nif api_utils.get_patch_values(patch, \u0027/pxe_enabled\u0027) is True:\n    self._check_port_allowed_standalone(rpc_port)\n\nand\n\nif api_utils.get_patch_values(patch, \u0027/portgroup_uuid\u0027) and rpc_port.pxe_enabled:\n    if not objects.Portgroup.get_by_id(uuid).individual_mode_supported:\n        raise Conflict(\"Can not add pxe_enabled port to portgroup that doesn\u0027t support standalone ports\")\n\nThis will prevent setting pxe_enabled on a port that we know can\u0027t be used for pxe, this means that we can safely rely on pxe_enabled in other parts of the Ironic code, like in common/neutron.py.\n\nWe also probably need to duplicate this logic in the post function, if its possible to set extra properties on creation.","commit_id":"71d49f708742da26e5cb46080230bd271af693e2"},{"author":{"_account_id":12356,"name":"Vladyslav Drok","email":"vdrok@mirantis.com","username":"vdrok"},"change_message_id":"32573ec517a44a1269bda222441e94730839e3da","unresolved":false,"context_lines":[{"line_number":524,"context_line":"                                                   pdict[\u0027portgroup_uuid\u0027])"},{"line_number":525,"context_line":"            if not rpc_pg.standalone_ports_supported:"},{"line_number":526,"context_line":"                if pdict.get(\u0027pxe_enabled\u0027):"},{"line_number":527,"context_line":"                    msg \u003d _(\"Port with pxe_enabled\u003dTrue can\u0027t be a member of \""},{"line_number":528,"context_line":"                            \"portgroup with standalone_ports_supported\u003dFalse\")"},{"line_number":529,"context_line":"                    raise exception.Conflict(msg)"},{"line_number":530,"context_line":"                if vif:"},{"line_number":531,"context_line":"                    msg \u003d _(\"Port which is member of portgroup that doesn\u0027t \""},{"line_number":532,"context_line":"                            \"support standalone ports mode can\u0027t have \""}],"source_content_type":"text/x-python","patch_set":12,"id":"fa6399be_3f48765b","line":529,"range":{"start_line":527,"start_character":20,"end_line":529,"end_character":49},"updated":"2016-10-18 17:53:12.000000000","message":"What if both pxe_enabled and vif_port_id are there? I think we can just have one message specifying all the constraints we have.","commit_id":"d386d67ae3276b9251957355f1cd146bc2e05ca2"},{"author":{"_account_id":14525,"name":"Vasyl Saienko","email":"vsaienko@mirantis.com","username":"vsaienko"},"change_message_id":"2646e7ed8b8eb296e4a83e98870c723c08c58ae4","unresolved":false,"context_lines":[{"line_number":524,"context_line":"                                                   pdict[\u0027portgroup_uuid\u0027])"},{"line_number":525,"context_line":"            if not rpc_pg.standalone_ports_supported:"},{"line_number":526,"context_line":"                if pdict.get(\u0027pxe_enabled\u0027):"},{"line_number":527,"context_line":"                    msg \u003d _(\"Port with pxe_enabled\u003dTrue can\u0027t be a member of \""},{"line_number":528,"context_line":"                            \"portgroup with standalone_ports_supported\u003dFalse\")"},{"line_number":529,"context_line":"                    raise exception.Conflict(msg)"},{"line_number":530,"context_line":"                if vif:"},{"line_number":531,"context_line":"                    msg \u003d _(\"Port which is member of portgroup that doesn\u0027t \""},{"line_number":532,"context_line":"                            \"support standalone ports mode can\u0027t have \""}],"source_content_type":"text/x-python","patch_set":12,"id":"ba5da102_6385d7ab","line":529,"range":{"start_line":527,"start_character":20,"end_line":529,"end_character":49},"in_reply_to":"fa6399be_3f48765b","updated":"2016-10-31 11:43:48.000000000","message":"Done","commit_id":"d386d67ae3276b9251957355f1cd146bc2e05ca2"},{"author":{"_account_id":12356,"name":"Vladyslav Drok","email":"vdrok@mirantis.com","username":"vdrok"},"change_message_id":"8ee22b53cfdfab194360f787f3a8e6fc133fc119","unresolved":false,"context_lines":[{"line_number":523,"context_line":"            rpc_pg \u003d objects.Portgroup.get_by_uuid(pecan.request.context,"},{"line_number":524,"context_line":"                                                   pdict[\u0027portgroup_uuid\u0027])"},{"line_number":525,"context_line":"            if not rpc_pg.standalone_ports_supported:"},{"line_number":526,"context_line":"                if pdict.get(\u0027pxe_enabled\u0027) or vif:"},{"line_number":527,"context_line":"                    msg \u003d _(\"Port which is member of portgroup that doesn\u0027t \""},{"line_number":528,"context_line":"                            \"support standalone ports mode can\u0027t have \""},{"line_number":529,"context_line":"                            \"extra/vif_port_id or pxe_enabled\u003dTrue\")"}],"source_content_type":"text/x-python","patch_set":17,"id":"9a629dbe_771e7e64","line":526,"range":{"start_line":526,"start_character":16,"end_line":526,"end_character":51},"updated":"2016-11-08 17:55:42.000000000","message":"We\u0027ve checked it already right? On L522.","commit_id":"d0e81bb5e011a1c1b35bc50c57687d56f41a3b47"},{"author":{"_account_id":14525,"name":"Vasyl Saienko","email":"vsaienko@mirantis.com","username":"vsaienko"},"change_message_id":"84dd62d2446ddca92b9ae2559c788ef9fb7d9441","unresolved":false,"context_lines":[{"line_number":523,"context_line":"            rpc_pg \u003d objects.Portgroup.get_by_uuid(pecan.request.context,"},{"line_number":524,"context_line":"                                                   pdict[\u0027portgroup_uuid\u0027])"},{"line_number":525,"context_line":"            if not rpc_pg.standalone_ports_supported:"},{"line_number":526,"context_line":"                if pdict.get(\u0027pxe_enabled\u0027) or vif:"},{"line_number":527,"context_line":"                    msg \u003d _(\"Port which is member of portgroup that doesn\u0027t \""},{"line_number":528,"context_line":"                            \"support standalone ports mode can\u0027t have \""},{"line_number":529,"context_line":"                            \"extra/vif_port_id or pxe_enabled\u003dTrue\")"}],"source_content_type":"text/x-python","patch_set":17,"id":"9a629dbe_819ad061","line":526,"range":{"start_line":526,"start_character":16,"end_line":526,"end_character":51},"in_reply_to":"9a629dbe_771e7e64","updated":"2016-11-09 11:39:41.000000000","message":"Done","commit_id":"d0e81bb5e011a1c1b35bc50c57687d56f41a3b47"},{"author":{"_account_id":6618,"name":"Ruby Loo","email":"opensrloo@gmail.com","username":"rloo"},"change_message_id":"fb9de204ac7d002d2c90922c4442fa837f1e9072","unresolved":false,"context_lines":[{"line_number":516,"context_line":"            if not rpc_pg.standalone_ports_supported:"},{"line_number":517,"context_line":"                msg \u003d _(\"Port which is member of portgroup that doesn\u0027t \""},{"line_number":518,"context_line":"                        \"support standalone ports mode can\u0027t have \""},{"line_number":519,"context_line":"                        \"extra/vif_port_id or pxe_enabled\u003dTrue\")"},{"line_number":520,"context_line":"                raise exception.Conflict(msg)"},{"line_number":521,"context_line":""},{"line_number":522,"context_line":"        new_port \u003d objects.Port(pecan.request.context,"}],"source_content_type":"text/x-python","patch_set":20,"id":"9a629dbe_8039e143","line":519,"updated":"2016-11-09 15:29:22.000000000","message":"How about:\n\nPort group %(portgroup_uuid)s doesn\u0027t support standalone ports. This port cannot be created as a member of that port group because either \"extra/vif_port_id\" was specified or \"pxe_enabled\" was set to True.\n\nIt would be even better if the msg specified exactly what was wrong, vif_port_id and/or pxe_enabled.","commit_id":"284a4746083facbe38e0e6db70e3f37c5c987cd2"},{"author":{"_account_id":14525,"name":"Vasyl Saienko","email":"vsaienko@mirantis.com","username":"vsaienko"},"change_message_id":"2f3b5daefbaaaaead773f0c659cc81f5870fdb13","unresolved":false,"context_lines":[{"line_number":516,"context_line":"            if not rpc_pg.standalone_ports_supported:"},{"line_number":517,"context_line":"                msg \u003d _(\"Port which is member of portgroup that doesn\u0027t \""},{"line_number":518,"context_line":"                        \"support standalone ports mode can\u0027t have \""},{"line_number":519,"context_line":"                        \"extra/vif_port_id or pxe_enabled\u003dTrue\")"},{"line_number":520,"context_line":"                raise exception.Conflict(msg)"},{"line_number":521,"context_line":""},{"line_number":522,"context_line":"        new_port \u003d objects.Port(pecan.request.context,"}],"source_content_type":"text/x-python","patch_set":20,"id":"9a629dbe_e0b18f02","line":519,"in_reply_to":"9a629dbe_8039e143","updated":"2016-11-10 16:09:46.000000000","message":"It was suggested earlier to have common error, as client already know what he is exactly changing.","commit_id":"284a4746083facbe38e0e6db70e3f37c5c987cd2"},{"author":{"_account_id":14760,"name":"John L. Villalovos","email":"openstack.org@sodarock.com","username":"jlvillal"},"change_message_id":"a1d47be4d9aba0e655d46417ad8422bf4bdd2537","unresolved":false,"context_lines":[{"line_number":492,"context_line":"        \"\"\"Create a new port."},{"line_number":493,"context_line":""},{"line_number":494,"context_line":"        :param port: a port within the request body."},{"line_number":495,"context_line":"        :raises: NotAcceptable, HTTPNotFound"},{"line_number":496,"context_line":"        \"\"\""},{"line_number":497,"context_line":"        cdict \u003d pecan.request.context.to_dict()"},{"line_number":498,"context_line":"        policy.authorize(\u0027baremetal:port:create\u0027, cdict, cdict)"}],"source_content_type":"text/x-python","patch_set":21,"id":"9a629dbe_246c609b","line":495,"updated":"2016-11-10 22:07:24.000000000","message":"Conflict can be raised on L523","commit_id":"0f41b6005feaf0fabd978900285fbfba453533e5"},{"author":{"_account_id":14525,"name":"Vasyl Saienko","email":"vsaienko@mirantis.com","username":"vsaienko"},"change_message_id":"3b5fc578b94d72e38dc354658225141780eca0c4","unresolved":false,"context_lines":[{"line_number":492,"context_line":"        \"\"\"Create a new port."},{"line_number":493,"context_line":""},{"line_number":494,"context_line":"        :param port: a port within the request body."},{"line_number":495,"context_line":"        :raises: NotAcceptable, HTTPNotFound"},{"line_number":496,"context_line":"        \"\"\""},{"line_number":497,"context_line":"        cdict \u003d pecan.request.context.to_dict()"},{"line_number":498,"context_line":"        policy.authorize(\u0027baremetal:port:create\u0027, cdict, cdict)"}],"source_content_type":"text/x-python","patch_set":21,"id":"9a629dbe_551f325a","line":495,"in_reply_to":"9a629dbe_246c609b","updated":"2016-11-11 11:10:33.000000000","message":"Done","commit_id":"0f41b6005feaf0fabd978900285fbfba453533e5"},{"author":{"_account_id":14760,"name":"John L. Villalovos","email":"openstack.org@sodarock.com","username":"jlvillal"},"change_message_id":"a1d47be4d9aba0e655d46417ad8422bf4bdd2537","unresolved":false,"context_lines":[{"line_number":517,"context_line":"                                                       pdict[\u0027portgroup_uuid\u0027])"},{"line_number":518,"context_line":"                if not rpc_pg.standalone_ports_supported:"},{"line_number":519,"context_line":"                    msg \u003d _(\"Port group %s doesn\u0027t support standalone ports. \""},{"line_number":520,"context_line":"                            \"This port cannot be created as a member of that \""},{"line_number":521,"context_line":"                            \"port group because either \u0027extra/vif_port_id\u0027 \""},{"line_number":522,"context_line":"                            \"was specified or \u0027pxe_enabled\u0027 was set to True.\")"},{"line_number":523,"context_line":"                    raise exception.Conflict("}],"source_content_type":"text/x-python","patch_set":21,"id":"9a629dbe_2490e094","line":520,"range":{"start_line":520,"start_character":29,"end_line":520,"end_character":38},"updated":"2016-11-10 22:07:24.000000000","message":"What is \u0027This port\u0027?  Should that be part of the message?\n\n port %(port)s cannot...","commit_id":"0f41b6005feaf0fabd978900285fbfba453533e5"},{"author":{"_account_id":14525,"name":"Vasyl Saienko","email":"vsaienko@mirantis.com","username":"vsaienko"},"change_message_id":"3b5fc578b94d72e38dc354658225141780eca0c4","unresolved":false,"context_lines":[{"line_number":517,"context_line":"                                                       pdict[\u0027portgroup_uuid\u0027])"},{"line_number":518,"context_line":"                if not rpc_pg.standalone_ports_supported:"},{"line_number":519,"context_line":"                    msg \u003d _(\"Port group %s doesn\u0027t support standalone ports. \""},{"line_number":520,"context_line":"                            \"This port cannot be created as a member of that \""},{"line_number":521,"context_line":"                            \"port group because either \u0027extra/vif_port_id\u0027 \""},{"line_number":522,"context_line":"                            \"was specified or \u0027pxe_enabled\u0027 was set to True.\")"},{"line_number":523,"context_line":"                    raise exception.Conflict("}],"source_content_type":"text/x-python","patch_set":21,"id":"9a629dbe_35539e18","line":520,"range":{"start_line":520,"start_character":29,"end_line":520,"end_character":38},"in_reply_to":"9a629dbe_2490e094","updated":"2016-11-11 11:10:33.000000000","message":"User just create a new port, creation failed so the port will not be in ironic.db after this error.","commit_id":"0f41b6005feaf0fabd978900285fbfba453533e5"},{"author":{"_account_id":7711,"name":"Yuriy Zveryanskyy","email":"yzveryanskyy@mirantis.com","username":"yuriyz"},"change_message_id":"074d48ba063cabeb787b233c3e61d08b20364999","unresolved":false,"context_lines":[{"line_number":510,"context_line":""},{"line_number":511,"context_line":"        if api_utils.rely_on_portgroups_standalone_ports_supported():"},{"line_number":512,"context_line":"            extra \u003d pdict.get(\u0027extra\u0027)"},{"line_number":513,"context_line":"            vif \u003d extra.get(\u0027vif_port_id\u0027) if extra else None"},{"line_number":514,"context_line":"            if (pdict.get(\u0027portgroup_uuid\u0027) and"},{"line_number":515,"context_line":"                    (pdict.get(\u0027pxe_enabled\u0027) or vif)):"},{"line_number":516,"context_line":"                rpc_pg \u003d objects.Portgroup.get_by_uuid(pecan.request.context,"}],"source_content_type":"text/x-python","patch_set":22,"id":"9a629dbe_cbf6395c","line":513,"updated":"2016-11-11 14:45:19.000000000","message":"nit: vif \u003d pdict.get(\u0027extra\u0027, {}).get(\u0027vif_port_id\u0027)","commit_id":"a5f7c157d1fe0636c5f54dfbd5a9d9f381bd7544"},{"author":{"_account_id":13295,"name":"Mario Villaplana","email":"mario.villaplana@gmail.com","username":"mariojv"},"change_message_id":"3fbae1598430f041fed4e7304b5dcc45dd87adf4","unresolved":false,"context_lines":[{"line_number":510,"context_line":""},{"line_number":511,"context_line":"        if api_utils.rely_on_portgroups_standalone_ports_supported():"},{"line_number":512,"context_line":"            extra \u003d pdict.get(\u0027extra\u0027)"},{"line_number":513,"context_line":"            vif \u003d extra.get(\u0027vif_port_id\u0027) if extra else None"},{"line_number":514,"context_line":"            if (pdict.get(\u0027portgroup_uuid\u0027) and"},{"line_number":515,"context_line":"                    (pdict.get(\u0027pxe_enabled\u0027) or vif)):"},{"line_number":516,"context_line":"                rpc_pg \u003d objects.Portgroup.get_by_uuid(pecan.request.context,"}],"source_content_type":"text/x-python","patch_set":22,"id":"9a629dbe_e21cbc15","line":513,"in_reply_to":"9a629dbe_cbf6395c","updated":"2016-11-14 16:01:38.000000000","message":"+1","commit_id":"a5f7c157d1fe0636c5f54dfbd5a9d9f381bd7544"},{"author":{"_account_id":6618,"name":"Ruby Loo","email":"opensrloo@gmail.com","username":"rloo"},"change_message_id":"d0153287f02dd0ef531cd2aedb11c9dfb7ba5697","unresolved":false,"context_lines":[{"line_number":510,"context_line":""},{"line_number":511,"context_line":"        if api_utils.rely_on_portgroups_standalone_ports_supported():"},{"line_number":512,"context_line":"            extra \u003d pdict.get(\u0027extra\u0027)"},{"line_number":513,"context_line":"            vif \u003d extra.get(\u0027vif_port_id\u0027) if extra else None"},{"line_number":514,"context_line":"            if (pdict.get(\u0027portgroup_uuid\u0027) and"},{"line_number":515,"context_line":"                    (pdict.get(\u0027pxe_enabled\u0027) or vif)):"},{"line_number":516,"context_line":"                rpc_pg \u003d objects.Portgroup.get_by_uuid(pecan.request.context,"}],"source_content_type":"text/x-python","patch_set":22,"id":"7a77a97e_033fdfb4","line":513,"in_reply_to":"9a629dbe_e21cbc15","updated":"2016-11-15 21:55:31.000000000","message":"I\u0027m an if.. else person, i can read/grok it easier :)","commit_id":"a5f7c157d1fe0636c5f54dfbd5a9d9f381bd7544"},{"author":{"_account_id":13295,"name":"Mario Villaplana","email":"mario.villaplana@gmail.com","username":"mariojv"},"change_message_id":"3fbae1598430f041fed4e7304b5dcc45dd87adf4","unresolved":false,"context_lines":[{"line_number":516,"context_line":"                rpc_pg \u003d objects.Portgroup.get_by_uuid(pecan.request.context,"},{"line_number":517,"context_line":"                                                       pdict[\u0027portgroup_uuid\u0027])"},{"line_number":518,"context_line":"                if not rpc_pg.standalone_ports_supported:"},{"line_number":519,"context_line":"                    msg \u003d _(\"Port group %s doesn\u0027t support standalone ports. \""},{"line_number":520,"context_line":"                            \"This port cannot be created as a member of that \""},{"line_number":521,"context_line":"                            \"port group because either \u0027extra/vif_port_id\u0027 \""},{"line_number":522,"context_line":"                            \"was specified or \u0027pxe_enabled\u0027 was set to True.\")"}],"source_content_type":"text/x-python","patch_set":22,"id":"9a629dbe_02db701c","line":519,"range":{"start_line":519,"start_character":40,"end_line":519,"end_character":42},"updated":"2016-11-14 16:01:38.000000000","message":"nit: I think it might be better to have a named string interpolation variable here","commit_id":"a5f7c157d1fe0636c5f54dfbd5a9d9f381bd7544"},{"author":{"_account_id":6618,"name":"Ruby Loo","email":"opensrloo@gmail.com","username":"rloo"},"change_message_id":"d0153287f02dd0ef531cd2aedb11c9dfb7ba5697","unresolved":false,"context_lines":[{"line_number":516,"context_line":"                rpc_pg \u003d objects.Portgroup.get_by_uuid(pecan.request.context,"},{"line_number":517,"context_line":"                                                       pdict[\u0027portgroup_uuid\u0027])"},{"line_number":518,"context_line":"                if not rpc_pg.standalone_ports_supported:"},{"line_number":519,"context_line":"                    msg \u003d _(\"Port group %s doesn\u0027t support standalone ports. \""},{"line_number":520,"context_line":"                            \"This port cannot be created as a member of that \""},{"line_number":521,"context_line":"                            \"port group because either \u0027extra/vif_port_id\u0027 \""},{"line_number":522,"context_line":"                            \"was specified or \u0027pxe_enabled\u0027 was set to True.\")"}],"source_content_type":"text/x-python","patch_set":22,"id":"7a77a97e_23569bd2","line":519,"range":{"start_line":519,"start_character":40,"end_line":519,"end_character":42},"in_reply_to":"7a77a97e_60519b62","updated":"2016-11-15 21:55:31.000000000","message":"I\u0027m fine with what is there.\n\nThe pdict -- for the port being created -- might be useful, but that involves changing more than what Mario mentioned. Also, the user should be able to get that info since it is in the request.","commit_id":"a5f7c157d1fe0636c5f54dfbd5a9d9f381bd7544"},{"author":{"_account_id":14760,"name":"John L. Villalovos","email":"openstack.org@sodarock.com","username":"jlvillal"},"change_message_id":"247b92c4d9986b1750ccc0a2f7f207b4f309fb89","unresolved":false,"context_lines":[{"line_number":516,"context_line":"                rpc_pg \u003d objects.Portgroup.get_by_uuid(pecan.request.context,"},{"line_number":517,"context_line":"                                                       pdict[\u0027portgroup_uuid\u0027])"},{"line_number":518,"context_line":"                if not rpc_pg.standalone_ports_supported:"},{"line_number":519,"context_line":"                    msg \u003d _(\"Port group %s doesn\u0027t support standalone ports. \""},{"line_number":520,"context_line":"                            \"This port cannot be created as a member of that \""},{"line_number":521,"context_line":"                            \"port group because either \u0027extra/vif_port_id\u0027 \""},{"line_number":522,"context_line":"                            \"was specified or \u0027pxe_enabled\u0027 was set to True.\")"}],"source_content_type":"text/x-python","patch_set":22,"id":"7a77a97e_60519b62","line":519,"range":{"start_line":519,"start_character":40,"end_line":519,"end_character":42},"in_reply_to":"9a629dbe_02db701c","updated":"2016-11-14 22:45:16.000000000","message":"I don\u0027t that is needed as there is only one variable. If more than one variable then yes.\n\nI guess could just pass the whole pdict if used named variable. Not sure if that is better or worse.","commit_id":"a5f7c157d1fe0636c5f54dfbd5a9d9f381bd7544"}],"ironic/api/controllers/v1/utils.py":[{"author":{"_account_id":6618,"name":"Ruby Loo","email":"opensrloo@gmail.com","username":"rloo"},"change_message_id":"6607c79dcffb6098fd050a2f58e3f2e7abcce5f4","unresolved":false,"context_lines":[{"line_number":435,"context_line":"def rely_on_portgroups_standalone_ports_supported():"},{"line_number":436,"context_line":"    \"\"\"Check if we should rely on portgroups standalone_ports_supported field."},{"line_number":437,"context_line":""},{"line_number":438,"context_line":"    Version 1.25 of the API we rely on Portgroups"},{"line_number":439,"context_line":"    standalone_ports_supported field."},{"line_number":440,"context_line":"    \"\"\""},{"line_number":441,"context_line":"    return (pecan.request.version.minor \u003e\u003d"}],"source_content_type":"text/x-python","patch_set":21,"id":"9a629dbe_e4a6e8ac","line":438,"updated":"2016-11-10 23:16:14.000000000","message":"nit s/we rely/added support for relying/ ?","commit_id":"0f41b6005feaf0fabd978900285fbfba453533e5"},{"author":{"_account_id":14525,"name":"Vasyl Saienko","email":"vsaienko@mirantis.com","username":"vsaienko"},"change_message_id":"3b5fc578b94d72e38dc354658225141780eca0c4","unresolved":false,"context_lines":[{"line_number":435,"context_line":"def rely_on_portgroups_standalone_ports_supported():"},{"line_number":436,"context_line":"    \"\"\"Check if we should rely on portgroups standalone_ports_supported field."},{"line_number":437,"context_line":""},{"line_number":438,"context_line":"    Version 1.25 of the API we rely on Portgroups"},{"line_number":439,"context_line":"    standalone_ports_supported field."},{"line_number":440,"context_line":"    \"\"\""},{"line_number":441,"context_line":"    return (pecan.request.version.minor \u003e\u003d"}],"source_content_type":"text/x-python","patch_set":21,"id":"9a629dbe_35a1def8","line":438,"in_reply_to":"9a629dbe_e4a6e8ac","updated":"2016-11-11 11:10:33.000000000","message":"Done","commit_id":"0f41b6005feaf0fabd978900285fbfba453533e5"}],"ironic/api/controllers/v1/versions.py":[{"author":{"_account_id":6618,"name":"Ruby Loo","email":"opensrloo@gmail.com","username":"rloo"},"change_message_id":"6607c79dcffb6098fd050a2f58e3f2e7abcce5f4","unresolved":false,"context_lines":[{"line_number":55,"context_line":"# v1.23: Add portgroup support."},{"line_number":56,"context_line":"# v1.24: Add subcontrollers: node.portgroup, portgroup.ports."},{"line_number":57,"context_line":"#        Add port.portgroup_uuid field."},{"line_number":58,"context_line":"# v1.25: Rely on portgroup standalone_ports_supported"},{"line_number":59,"context_line":""},{"line_number":60,"context_line":"MINOR_0_JUNO \u003d 0"},{"line_number":61,"context_line":"MINOR_1_INITIAL_VERSION \u003d 1"}],"source_content_type":"text/x-python","patch_set":21,"id":"9a629dbe_84bc4cbc","line":58,"updated":"2016-11-10 23:16:14.000000000","message":"maybe s/portgroup /portgroup./ (to make it more obvious it is a field)","commit_id":"0f41b6005feaf0fabd978900285fbfba453533e5"},{"author":{"_account_id":14525,"name":"Vasyl Saienko","email":"vsaienko@mirantis.com","username":"vsaienko"},"change_message_id":"3b5fc578b94d72e38dc354658225141780eca0c4","unresolved":false,"context_lines":[{"line_number":55,"context_line":"# v1.23: Add portgroup support."},{"line_number":56,"context_line":"# v1.24: Add subcontrollers: node.portgroup, portgroup.ports."},{"line_number":57,"context_line":"#        Add port.portgroup_uuid field."},{"line_number":58,"context_line":"# v1.25: Rely on portgroup standalone_ports_supported"},{"line_number":59,"context_line":""},{"line_number":60,"context_line":"MINOR_0_JUNO \u003d 0"},{"line_number":61,"context_line":"MINOR_1_INITIAL_VERSION \u003d 1"}],"source_content_type":"text/x-python","patch_set":21,"id":"9a629dbe_f5fda6b1","line":58,"in_reply_to":"9a629dbe_84bc4cbc","updated":"2016-11-11 11:10:33.000000000","message":"Done","commit_id":"0f41b6005feaf0fabd978900285fbfba453533e5"},{"author":{"_account_id":6618,"name":"Ruby Loo","email":"opensrloo@gmail.com","username":"rloo"},"change_message_id":"6607c79dcffb6098fd050a2f58e3f2e7abcce5f4","unresolved":false,"context_lines":[{"line_number":82,"context_line":"MINOR_22_LOOKUP_HEARTBEAT \u003d 22"},{"line_number":83,"context_line":"MINOR_23_PORTGROUPS \u003d 23"},{"line_number":84,"context_line":"MINOR_24_PORTGROUPS_SUBCONTROLLERS \u003d 24"},{"line_number":85,"context_line":"MINOR_25_PORTGROUPS_SPS \u003d 25"},{"line_number":86,"context_line":""},{"line_number":87,"context_line":"# When adding another version, update MINOR_MAX_VERSION and also update"},{"line_number":88,"context_line":"# doc/source/dev/webapi-version-history.rst with a detailed explanation of"}],"source_content_type":"text/x-python","patch_set":21,"id":"9a629dbe_44bf94a9","line":85,"updated":"2016-11-10 23:16:14.000000000","message":"maybe s/SPS/STANDALONE_PORTS/ ?","commit_id":"0f41b6005feaf0fabd978900285fbfba453533e5"},{"author":{"_account_id":14525,"name":"Vasyl Saienko","email":"vsaienko@mirantis.com","username":"vsaienko"},"change_message_id":"3b5fc578b94d72e38dc354658225141780eca0c4","unresolved":false,"context_lines":[{"line_number":82,"context_line":"MINOR_22_LOOKUP_HEARTBEAT \u003d 22"},{"line_number":83,"context_line":"MINOR_23_PORTGROUPS \u003d 23"},{"line_number":84,"context_line":"MINOR_24_PORTGROUPS_SUBCONTROLLERS \u003d 24"},{"line_number":85,"context_line":"MINOR_25_PORTGROUPS_SPS \u003d 25"},{"line_number":86,"context_line":""},{"line_number":87,"context_line":"# When adding another version, update MINOR_MAX_VERSION and also update"},{"line_number":88,"context_line":"# doc/source/dev/webapi-version-history.rst with a detailed explanation of"}],"source_content_type":"text/x-python","patch_set":21,"id":"9a629dbe_d5b8a22c","line":85,"in_reply_to":"9a629dbe_44bf94a9","updated":"2016-11-11 11:10:33.000000000","message":"Done","commit_id":"0f41b6005feaf0fabd978900285fbfba453533e5"}],"ironic/common/neutron.py":[{"author":{"_account_id":14525,"name":"Vasyl Saienko","email":"vsaienko@mirantis.com","username":"vsaienko"},"change_message_id":"042de34d19825ae6bc301d9ec3124ad2a7de2c13","unresolved":false,"context_lines":[{"line_number":113,"context_line":"    failures \u003d []"},{"line_number":114,"context_line":"    portmap \u003d get_node_portmap(task)"},{"line_number":115,"context_line":"    # NOTE(vsaienko) we can provision node only valid pxe_enabled ports"},{"line_number":116,"context_line":"    valid_ports \u003d get_valid_pxe_accessible_ports(task.ports, task.portgroups)"},{"line_number":117,"context_line":"    for ironic_port in valid_ports:"},{"line_number":118,"context_line":"        body[\u0027port\u0027][\u0027mac_address\u0027] \u003d ironic_port.address"},{"line_number":119,"context_line":"        binding_profile \u003d {\u0027local_link_information\u0027:"}],"source_content_type":"text/x-python","patch_set":2,"id":"fa7ab95a_39889c22","line":116,"range":{"start_line":116,"start_character":18,"end_line":116,"end_character":48},"updated":"2016-08-26 12:56:31.000000000","message":"might be use get_valid_pxe_enabled_ports() ?","commit_id":"d8381c73597e4914a8c0d6f88b9e9d52dc243926"},{"author":{"_account_id":12356,"name":"Vladyslav Drok","email":"vdrok@mirantis.com","username":"vdrok"},"change_message_id":"c5c4b730237be76419ef51a251f7ce2821c03fdb","unresolved":false,"context_lines":[{"line_number":286,"context_line":"        for pg in forced_portgroups:"},{"line_number":287,"context_line":"            if p.portgroup_id \u003d\u003d pg.id:"},{"line_number":288,"context_line":"                break"},{"line_number":289,"context_line":"            valid_ports.append(p)"},{"line_number":290,"context_line":""},{"line_number":291,"context_line":"    return valid_ports"}],"source_content_type":"text/x-python","patch_set":2,"id":"fa7ab95a_09a1b894","line":289,"range":{"start_line":289,"start_character":12,"end_line":289,"end_character":33},"updated":"2016-08-26 15:50:57.000000000","message":"This means you\u0027ll append p to valid ports the same amount of times as portgroups you have. it should be\n\n    for p in pxe_enabled_ports:\n        for pg in forced_portgroups:\n            if p.portgroup_id \u003d\u003d pg.id:\n                break\n        else:\n            valid_ports.append(p)\n\nelse here will mean that the inner for has finished normally without a break.","commit_id":"d8381c73597e4914a8c0d6f88b9e9d52dc243926"},{"author":{"_account_id":14525,"name":"Vasyl Saienko","email":"vsaienko@mirantis.com","username":"vsaienko"},"change_message_id":"4321ab66d1f2d4c184d0855adbb2603b8b4d8b52","unresolved":false,"context_lines":[{"line_number":286,"context_line":"        for pg in forced_portgroups:"},{"line_number":287,"context_line":"            if p.portgroup_id \u003d\u003d pg.id:"},{"line_number":288,"context_line":"                break"},{"line_number":289,"context_line":"            valid_ports.append(p)"},{"line_number":290,"context_line":""},{"line_number":291,"context_line":"    return valid_ports"}],"source_content_type":"text/x-python","patch_set":2,"id":"fa7ab95a_06687a86","line":289,"range":{"start_line":289,"start_character":12,"end_line":289,"end_character":33},"in_reply_to":"fa7ab95a_09a1b894","updated":"2016-08-29 12:06:55.000000000","message":"Done","commit_id":"d8381c73597e4914a8c0d6f88b9e9d52dc243926"}],"ironic/conductor/manager.py":[{"author":{"_account_id":12356,"name":"Vladyslav Drok","email":"vdrok@mirantis.com","username":"vdrok"},"change_message_id":"32573ec517a44a1269bda222441e94730839e3da","unresolved":false,"context_lines":[{"line_number":1652,"context_line":"            node.save()"},{"line_number":1653,"context_line":""},{"line_number":1654,"context_line":"    @METRICS.timer(\u0027ConductorManager.update_port\u0027)"},{"line_number":1655,"context_line":"    @messaging.expected_exceptions(exception.NodeLocked,"},{"line_number":1656,"context_line":"                                   exception.FailedToUpdateMacOnPort,"},{"line_number":1657,"context_line":"                                   exception.MACAlreadyExists,"},{"line_number":1658,"context_line":"                                   exception.InvalidState,"},{"line_number":1659,"context_line":"                                   exception.FailedToUpdateDHCPOptOnPort)"},{"line_number":1660,"context_line":"    def update_port(self, context, port_obj):"},{"line_number":1661,"context_line":"        \"\"\"Update a port."},{"line_number":1662,"context_line":""}],"source_content_type":"text/x-python","patch_set":12,"id":"fa6399be_1f76523e","line":1659,"range":{"start_line":1655,"start_character":35,"end_line":1659,"end_character":72},"updated":"2016-10-18 17:53:12.000000000","message":"Conflict is not in the list of expected exceptions, you might have to introduce a new exception class for this.","commit_id":"d386d67ae3276b9251957355f1cd146bc2e05ca2"},{"author":{"_account_id":14525,"name":"Vasyl Saienko","email":"vsaienko@mirantis.com","username":"vsaienko"},"change_message_id":"2646e7ed8b8eb296e4a83e98870c723c08c58ae4","unresolved":false,"context_lines":[{"line_number":1652,"context_line":"            node.save()"},{"line_number":1653,"context_line":""},{"line_number":1654,"context_line":"    @METRICS.timer(\u0027ConductorManager.update_port\u0027)"},{"line_number":1655,"context_line":"    @messaging.expected_exceptions(exception.NodeLocked,"},{"line_number":1656,"context_line":"                                   exception.FailedToUpdateMacOnPort,"},{"line_number":1657,"context_line":"                                   exception.MACAlreadyExists,"},{"line_number":1658,"context_line":"                                   exception.InvalidState,"},{"line_number":1659,"context_line":"                                   exception.FailedToUpdateDHCPOptOnPort)"},{"line_number":1660,"context_line":"    def update_port(self, context, port_obj):"},{"line_number":1661,"context_line":"        \"\"\"Update a port."},{"line_number":1662,"context_line":""}],"source_content_type":"text/x-python","patch_set":12,"id":"ba5da102_e8d3865d","line":1659,"range":{"start_line":1655,"start_character":35,"end_line":1659,"end_character":72},"in_reply_to":"fa6399be_1f76523e","updated":"2016-10-31 11:43:48.000000000","message":"Done","commit_id":"d386d67ae3276b9251957355f1cd146bc2e05ca2"},{"author":{"_account_id":12356,"name":"Vladyslav Drok","email":"vdrok@mirantis.com","username":"vdrok"},"change_message_id":"32573ec517a44a1269bda222441e94730839e3da","unresolved":false,"context_lines":[{"line_number":1679,"context_line":"            node \u003d task.node"},{"line_number":1680,"context_line":"            portgroup_obj \u003d None"},{"line_number":1681,"context_line":"            if port_obj.portgroup_id:"},{"line_number":1682,"context_line":"                portgroup_obj \u003d next((pg for pg in task.portgroups if"},{"line_number":1683,"context_line":"                                      pg.id \u003d\u003d port_obj.portgroup_id),"},{"line_number":1684,"context_line":"                                     None)"},{"line_number":1685,"context_line":""},{"line_number":1686,"context_line":"            # Only allow updating MAC addresses for active nodes if maintenance"},{"line_number":1687,"context_line":"            # mode is on."}],"source_content_type":"text/x-python","patch_set":12,"id":"fa6399be_9ff26205","line":1684,"range":{"start_line":1682,"start_character":32,"end_line":1684,"end_character":42},"updated":"2016-10-18 17:53:12.000000000","message":"Why not just [0] of the list comprehension? Also, isn\u0027t it a serious error if we don\u0027t have a portgroup associated with the port in the task?","commit_id":"d386d67ae3276b9251957355f1cd146bc2e05ca2"},{"author":{"_account_id":14525,"name":"Vasyl Saienko","email":"vsaienko@mirantis.com","username":"vsaienko"},"change_message_id":"2646e7ed8b8eb296e4a83e98870c723c08c58ae4","unresolved":false,"context_lines":[{"line_number":1679,"context_line":"            node \u003d task.node"},{"line_number":1680,"context_line":"            portgroup_obj \u003d None"},{"line_number":1681,"context_line":"            if port_obj.portgroup_id:"},{"line_number":1682,"context_line":"                portgroup_obj \u003d next((pg for pg in task.portgroups if"},{"line_number":1683,"context_line":"                                      pg.id \u003d\u003d port_obj.portgroup_id),"},{"line_number":1684,"context_line":"                                     None)"},{"line_number":1685,"context_line":""},{"line_number":1686,"context_line":"            # Only allow updating MAC addresses for active nodes if maintenance"},{"line_number":1687,"context_line":"            # mode is on."}],"source_content_type":"text/x-python","patch_set":12,"id":"ba5da102_c3ddc315","line":1684,"range":{"start_line":1682,"start_character":32,"end_line":1684,"end_character":42},"in_reply_to":"fa6399be_9ff26205","updated":"2016-10-31 11:43:48.000000000","message":"Done","commit_id":"d386d67ae3276b9251957355f1cd146bc2e05ca2"},{"author":{"_account_id":12356,"name":"Vladyslav Drok","email":"vdrok@mirantis.com","username":"vdrok"},"change_message_id":"32573ec517a44a1269bda222441e94730839e3da","unresolved":false,"context_lines":[{"line_number":1767,"context_line":"                             \u0027instance\u0027: node.instance_uuid})"},{"line_number":1768,"context_line":""},{"line_number":1769,"context_line":"            if portgroup_obj and (set(port_obj.obj_what_changed()) \u0026"},{"line_number":1770,"context_line":"                                  {\u0027pxe_enabled\u0027, \u0027portgroup_id\u0027}):"},{"line_number":1771,"context_line":"                if (port_obj.pxe_enabled and not"},{"line_number":1772,"context_line":"                    portgroup_obj.standalone_ports_supported):"},{"line_number":1773,"context_line":"                    msg \u003d _(\"Port with pxe_enabled\u003dTrue can\u0027t be a member \""}],"source_content_type":"text/x-python","patch_set":12,"id":"fa6399be_9fb3420a","line":1770,"range":{"start_line":1770,"start_character":50,"end_line":1770,"end_character":64},"updated":"2016-10-18 17:53:12.000000000","message":"do we care that portgroup_id has changed? As further we have \n\n if (port_obj.pxe_enabled and not\n     portgroup_obj.standalone_ports_supported):\n\nwhere portgroup_obj is the current portgroup, no matter if it was updated or not.","commit_id":"d386d67ae3276b9251957355f1cd146bc2e05ca2"},{"author":{"_account_id":14525,"name":"Vasyl Saienko","email":"vsaienko@mirantis.com","username":"vsaienko"},"change_message_id":"2646e7ed8b8eb296e4a83e98870c723c08c58ae4","unresolved":false,"context_lines":[{"line_number":1767,"context_line":"                             \u0027instance\u0027: node.instance_uuid})"},{"line_number":1768,"context_line":""},{"line_number":1769,"context_line":"            if portgroup_obj and (set(port_obj.obj_what_changed()) \u0026"},{"line_number":1770,"context_line":"                                  {\u0027pxe_enabled\u0027, \u0027portgroup_id\u0027}):"},{"line_number":1771,"context_line":"                if (port_obj.pxe_enabled and not"},{"line_number":1772,"context_line":"                    portgroup_obj.standalone_ports_supported):"},{"line_number":1773,"context_line":"                    msg \u003d _(\"Port with pxe_enabled\u003dTrue can\u0027t be a member \""}],"source_content_type":"text/x-python","patch_set":12,"id":"ba5da102_63c6b74a","line":1770,"range":{"start_line":1770,"start_character":50,"end_line":1770,"end_character":64},"in_reply_to":"fa6399be_9fb3420a","updated":"2016-10-31 11:43:48.000000000","message":"We need to check for compatibility of standalone_ports_supported and pxe_enabled only when one of/or both port.pxe_enabled and portgroup_id has been changed.","commit_id":"d386d67ae3276b9251957355f1cd146bc2e05ca2"},{"author":{"_account_id":13295,"name":"Mario Villaplana","email":"mario.villaplana@gmail.com","username":"mariojv"},"change_message_id":"6f67525b8d3bfc0171464f545917bf201a789267","unresolved":false,"context_lines":[{"line_number":1659,"context_line":"        :raises: InvalidState if port connectivity attributes"},{"line_number":1660,"context_line":"                 are updated while node not in a MANAGEABLE or ENROLL or"},{"line_number":1661,"context_line":"                 INSPECTING state or not in MAINTENANCE mode."},{"line_number":1662,"context_line":"        :raises: Conflict if trying to set extra/vif_port_id on port which is"},{"line_number":1663,"context_line":"                 a memeber of portgroup with standalone_ports_supported\u003dFalse."},{"line_number":1664,"context_line":"        \"\"\""},{"line_number":1665,"context_line":"        port_uuid \u003d port_obj.uuid"}],"source_content_type":"text/x-python","patch_set":14,"id":"ba5da102_a3ac45a1","line":1662,"updated":"2016-10-31 15:52:23.000000000","message":"I think you should also mention that this raises Conflict if you\u0027re trying to set pxe_enabled\u003dTrue on a port in a portgroup that doesn\u0027t support standalone ports.","commit_id":"2a27311a30cc09b7a6056e7ac09b5629cf964a1e"},{"author":{"_account_id":14525,"name":"Vasyl Saienko","email":"vsaienko@mirantis.com","username":"vsaienko"},"change_message_id":"bed9662b679ec35358c6172abc618a9d87d673c4","unresolved":false,"context_lines":[{"line_number":1659,"context_line":"        :raises: InvalidState if port connectivity attributes"},{"line_number":1660,"context_line":"                 are updated while node not in a MANAGEABLE or ENROLL or"},{"line_number":1661,"context_line":"                 INSPECTING state or not in MAINTENANCE mode."},{"line_number":1662,"context_line":"        :raises: Conflict if trying to set extra/vif_port_id on port which is"},{"line_number":1663,"context_line":"                 a memeber of portgroup with standalone_ports_supported\u003dFalse."},{"line_number":1664,"context_line":"        \"\"\""},{"line_number":1665,"context_line":"        port_uuid \u003d port_obj.uuid"}],"source_content_type":"text/x-python","patch_set":14,"id":"ba5da102_fd02e6b2","line":1662,"in_reply_to":"ba5da102_a3ac45a1","updated":"2016-11-03 11:49:52.000000000","message":"Will update in next patchset.","commit_id":"2a27311a30cc09b7a6056e7ac09b5629cf964a1e"},{"author":{"_account_id":14525,"name":"Vasyl Saienko","email":"vsaienko@mirantis.com","username":"vsaienko"},"change_message_id":"d7da21699e1e7c9f55c7f192d3956c54afeaec81","unresolved":false,"context_lines":[{"line_number":1659,"context_line":"        :raises: InvalidState if port connectivity attributes"},{"line_number":1660,"context_line":"                 are updated while node not in a MANAGEABLE or ENROLL or"},{"line_number":1661,"context_line":"                 INSPECTING state or not in MAINTENANCE mode."},{"line_number":1662,"context_line":"        :raises: Conflict if trying to set extra/vif_port_id on port which is"},{"line_number":1663,"context_line":"                 a memeber of portgroup with standalone_ports_supported\u003dFalse."},{"line_number":1664,"context_line":"        \"\"\""},{"line_number":1665,"context_line":"        port_uuid \u003d port_obj.uuid"}],"source_content_type":"text/x-python","patch_set":14,"id":"ba5da102_359e2e07","line":1662,"in_reply_to":"ba5da102_fd02e6b2","updated":"2016-11-03 14:11:14.000000000","message":"Done","commit_id":"2a27311a30cc09b7a6056e7ac09b5629cf964a1e"},{"author":{"_account_id":13295,"name":"Mario Villaplana","email":"mario.villaplana@gmail.com","username":"mariojv"},"change_message_id":"6f67525b8d3bfc0171464f545917bf201a789267","unresolved":false,"context_lines":[{"line_number":1660,"context_line":"                 are updated while node not in a MANAGEABLE or ENROLL or"},{"line_number":1661,"context_line":"                 INSPECTING state or not in MAINTENANCE mode."},{"line_number":1662,"context_line":"        :raises: Conflict if trying to set extra/vif_port_id on port which is"},{"line_number":1663,"context_line":"                 a memeber of portgroup with standalone_ports_supported\u003dFalse."},{"line_number":1664,"context_line":"        \"\"\""},{"line_number":1665,"context_line":"        port_uuid \u003d port_obj.uuid"},{"line_number":1666,"context_line":"        LOG.debug(\"RPC update_port called for port %s.\", port_uuid)"}],"source_content_type":"text/x-python","patch_set":14,"id":"ba5da102_230595bb","line":1663,"range":{"start_line":1663,"start_character":19,"end_line":1663,"end_character":26},"updated":"2016-10-31 15:52:23.000000000","message":"nit: s/memeber/member","commit_id":"2a27311a30cc09b7a6056e7ac09b5629cf964a1e"},{"author":{"_account_id":14525,"name":"Vasyl Saienko","email":"vsaienko@mirantis.com","username":"vsaienko"},"change_message_id":"bed9662b679ec35358c6172abc618a9d87d673c4","unresolved":false,"context_lines":[{"line_number":1660,"context_line":"                 are updated while node not in a MANAGEABLE or ENROLL or"},{"line_number":1661,"context_line":"                 INSPECTING state or not in MAINTENANCE mode."},{"line_number":1662,"context_line":"        :raises: Conflict if trying to set extra/vif_port_id on port which is"},{"line_number":1663,"context_line":"                 a memeber of portgroup with standalone_ports_supported\u003dFalse."},{"line_number":1664,"context_line":"        \"\"\""},{"line_number":1665,"context_line":"        port_uuid \u003d port_obj.uuid"},{"line_number":1666,"context_line":"        LOG.debug(\"RPC update_port called for port %s.\", port_uuid)"}],"source_content_type":"text/x-python","patch_set":14,"id":"ba5da102_5d32f2a7","line":1663,"range":{"start_line":1663,"start_character":19,"end_line":1663,"end_character":26},"in_reply_to":"ba5da102_230595bb","updated":"2016-11-03 11:49:52.000000000","message":"will update in next patchset.","commit_id":"2a27311a30cc09b7a6056e7ac09b5629cf964a1e"},{"author":{"_account_id":14525,"name":"Vasyl Saienko","email":"vsaienko@mirantis.com","username":"vsaienko"},"change_message_id":"d7da21699e1e7c9f55c7f192d3956c54afeaec81","unresolved":false,"context_lines":[{"line_number":1660,"context_line":"                 are updated while node not in a MANAGEABLE or ENROLL or"},{"line_number":1661,"context_line":"                 INSPECTING state or not in MAINTENANCE mode."},{"line_number":1662,"context_line":"        :raises: Conflict if trying to set extra/vif_port_id on port which is"},{"line_number":1663,"context_line":"                 a memeber of portgroup with standalone_ports_supported\u003dFalse."},{"line_number":1664,"context_line":"        \"\"\""},{"line_number":1665,"context_line":"        port_uuid \u003d port_obj.uuid"},{"line_number":1666,"context_line":"        LOG.debug(\"RPC update_port called for port %s.\", port_uuid)"}],"source_content_type":"text/x-python","patch_set":14,"id":"ba5da102_55a1e244","line":1663,"range":{"start_line":1663,"start_character":19,"end_line":1663,"end_character":26},"in_reply_to":"ba5da102_5d32f2a7","updated":"2016-11-03 14:11:14.000000000","message":"Done","commit_id":"2a27311a30cc09b7a6056e7ac09b5629cf964a1e"},{"author":{"_account_id":12356,"name":"Vladyslav Drok","email":"vdrok@mirantis.com","username":"vdrok"},"change_message_id":"8ee22b53cfdfab194360f787f3a8e6fc133fc119","unresolved":false,"context_lines":[{"line_number":1750,"context_line":"                            {\u0027port\u0027: port_uuid,"},{"line_number":1751,"context_line":"                             \u0027instance\u0027: node.instance_uuid})"},{"line_number":1752,"context_line":""},{"line_number":1753,"context_line":"                if vif and portgroup_obj:"},{"line_number":1754,"context_line":"                    msg \u003d _(\"Port which is member of portgroup \""},{"line_number":1755,"context_line":"                            \"that doesn\u0027t support standalone \""},{"line_number":1756,"context_line":"                            \"ports mode can\u0027t have \""}],"source_content_type":"text/x-python","patch_set":17,"id":"9a629dbe_17a9c2df","line":1753,"updated":"2016-11-08 17:55:42.000000000","message":"How do you know that portgroup_obj does not support standalone mode? You don\u0027t check it here. Seems like you intended to add \" and portgroup_obj.standalone_ports_supported\"","commit_id":"d0e81bb5e011a1c1b35bc50c57687d56f41a3b47"},{"author":{"_account_id":14525,"name":"Vasyl Saienko","email":"vsaienko@mirantis.com","username":"vsaienko"},"change_message_id":"84dd62d2446ddca92b9ae2559c788ef9fb7d9441","unresolved":false,"context_lines":[{"line_number":1750,"context_line":"                            {\u0027port\u0027: port_uuid,"},{"line_number":1751,"context_line":"                             \u0027instance\u0027: node.instance_uuid})"},{"line_number":1752,"context_line":""},{"line_number":1753,"context_line":"                if vif and portgroup_obj:"},{"line_number":1754,"context_line":"                    msg \u003d _(\"Port which is member of portgroup \""},{"line_number":1755,"context_line":"                            \"that doesn\u0027t support standalone \""},{"line_number":1756,"context_line":"                            \"ports mode can\u0027t have \""}],"source_content_type":"text/x-python","patch_set":17,"id":"9a629dbe_8113b065","line":1753,"in_reply_to":"9a629dbe_17a9c2df","updated":"2016-11-09 11:39:41.000000000","message":"Done","commit_id":"d0e81bb5e011a1c1b35bc50c57687d56f41a3b47"},{"author":{"_account_id":6618,"name":"Ruby Loo","email":"opensrloo@gmail.com","username":"rloo"},"change_message_id":"fb9de204ac7d002d2c90922c4442fa837f1e9072","unresolved":false,"context_lines":[{"line_number":1672,"context_line":"            portgroup_obj \u003d None"},{"line_number":1673,"context_line":"            if port_obj.portgroup_id:"},{"line_number":1674,"context_line":"                portgroup_obj \u003d [pg for pg in task.portgroups if"},{"line_number":1675,"context_line":"                                 pg.id \u003d\u003d port_obj.portgroup_id][0]"},{"line_number":1676,"context_line":""},{"line_number":1677,"context_line":"            # Only allow updating MAC addresses for active nodes if maintenance"},{"line_number":1678,"context_line":"            # mode is on."}],"source_content_type":"text/x-python","patch_set":20,"id":"9a629dbe_fbf88c4b","line":1675,"updated":"2016-11-09 15:29:22.000000000","message":"If, for whatever reason, the portgroup doesn\u0027t exist, this will cause an exception to be raised. I think we should check/handle that situation explicitly.","commit_id":"284a4746083facbe38e0e6db70e3f37c5c987cd2"},{"author":{"_account_id":14525,"name":"Vasyl Saienko","email":"vsaienko@mirantis.com","username":"vsaienko"},"change_message_id":"2f3b5daefbaaaaead773f0c659cc81f5870fdb13","unresolved":false,"context_lines":[{"line_number":1672,"context_line":"            portgroup_obj \u003d None"},{"line_number":1673,"context_line":"            if port_obj.portgroup_id:"},{"line_number":1674,"context_line":"                portgroup_obj \u003d [pg for pg in task.portgroups if"},{"line_number":1675,"context_line":"                                 pg.id \u003d\u003d port_obj.portgroup_id][0]"},{"line_number":1676,"context_line":""},{"line_number":1677,"context_line":"            # Only allow updating MAC addresses for active nodes if maintenance"},{"line_number":1678,"context_line":"            # mode is on."}],"source_content_type":"text/x-python","patch_set":20,"id":"9a629dbe_804453b7","line":1675,"in_reply_to":"9a629dbe_fbf88c4b","updated":"2016-11-10 16:09:46.000000000","message":"We can\u0027t delete portgroup if it contains ports[0] and we can\u0027t assign portgroup_uuid if it is dones\u0027t exist. So this situation is not possible.\n\n[0] https://github.com/openstack/ironic/blob/5603a215b726ca465eed2867d830821bb24b1a72/ironic/db/sqlalchemy/api.py#L613","commit_id":"284a4746083facbe38e0e6db70e3f37c5c987cd2"},{"author":{"_account_id":13295,"name":"Mario Villaplana","email":"mario.villaplana@gmail.com","username":"mariojv"},"change_message_id":"ee22d94e90cc844ae10ed8526c007f3ee494fefc","unresolved":false,"context_lines":[{"line_number":1752,"context_line":""},{"line_number":1753,"context_line":"            if portgroup_obj and ((set(port_obj.obj_what_changed()) \u0026"},{"line_number":1754,"context_line":"                                  {\u0027pxe_enabled\u0027, \u0027portgroup_id\u0027}) or vif):"},{"line_number":1755,"context_line":"                if (port_obj.pxe_enabled and not"},{"line_number":1756,"context_line":"                    portgroup_obj.standalone_ports_supported):"},{"line_number":1757,"context_line":"                    msg \u003d _(\"Port which is member of portgroup that doesn\u0027t\""},{"line_number":1758,"context_line":"                            \"support standalone ports mode can\u0027t have \""}],"source_content_type":"text/x-python","patch_set":20,"id":"9a629dbe_c59f6b4e","line":1755,"updated":"2016-11-09 14:34:12.000000000","message":"I believe you need to check for vif in this second condition as well. Please correct me if I\u0027m mistaken and that\u0027s not possible. Can you add a unit test for that case as well?\n\nif (port_obj.pxe_enabled or vif) and not portgroup_obj.standalone_ports_supported","commit_id":"284a4746083facbe38e0e6db70e3f37c5c987cd2"},{"author":{"_account_id":14525,"name":"Vasyl Saienko","email":"vsaienko@mirantis.com","username":"vsaienko"},"change_message_id":"2f3b5daefbaaaaead773f0c659cc81f5870fdb13","unresolved":false,"context_lines":[{"line_number":1752,"context_line":""},{"line_number":1753,"context_line":"            if portgroup_obj and ((set(port_obj.obj_what_changed()) \u0026"},{"line_number":1754,"context_line":"                                  {\u0027pxe_enabled\u0027, \u0027portgroup_id\u0027}) or vif):"},{"line_number":1755,"context_line":"                if (port_obj.pxe_enabled and not"},{"line_number":1756,"context_line":"                    portgroup_obj.standalone_ports_supported):"},{"line_number":1757,"context_line":"                    msg \u003d _(\"Port which is member of portgroup that doesn\u0027t\""},{"line_number":1758,"context_line":"                            \"support standalone ports mode can\u0027t have \""}],"source_content_type":"text/x-python","patch_set":20,"id":"9a629dbe_011f5b6c","line":1755,"in_reply_to":"9a629dbe_c59f6b4e","updated":"2016-11-10 16:09:46.000000000","message":"Done","commit_id":"284a4746083facbe38e0e6db70e3f37c5c987cd2"},{"author":{"_account_id":6618,"name":"Ruby Loo","email":"opensrloo@gmail.com","username":"rloo"},"change_message_id":"fb9de204ac7d002d2c90922c4442fa837f1e9072","unresolved":false,"context_lines":[{"line_number":1758,"context_line":"                            \"support standalone ports mode can\u0027t have \""},{"line_number":1759,"context_line":"                            \"extra/vif_port_id or pxe_enabled\u003dTrue\")"},{"line_number":1760,"context_line":"                    raise exception.Conflict(msg)"},{"line_number":1761,"context_line":""},{"line_number":1762,"context_line":"            port_obj.save()"},{"line_number":1763,"context_line":""},{"line_number":1764,"context_line":"            return port_obj"}],"source_content_type":"text/x-python","patch_set":20,"id":"9a629dbe_a7127a55","line":1761,"updated":"2016-11-09 15:29:22.000000000","message":"I\u0027m not sure you have captured all the cases.\n\n1. port is added to a portgroup (with or without standalone_ports). vif_port_id may already have been set or pxe_enabled\u003dTrue already.\n2. port is removed from a portgroup (this is covered)\n3. port is in a portgroup and a. extra/vif_port_id is being set OR b. pxe_enabled\u003dTrue (this is covered)\n4. port is changing to a different portgroup (I think this would be similar to 1)","commit_id":"284a4746083facbe38e0e6db70e3f37c5c987cd2"},{"author":{"_account_id":14525,"name":"Vasyl Saienko","email":"vsaienko@mirantis.com","username":"vsaienko"},"change_message_id":"2f3b5daefbaaaaead773f0c659cc81f5870fdb13","unresolved":false,"context_lines":[{"line_number":1758,"context_line":"                            \"support standalone ports mode can\u0027t have \""},{"line_number":1759,"context_line":"                            \"extra/vif_port_id or pxe_enabled\u003dTrue\")"},{"line_number":1760,"context_line":"                    raise exception.Conflict(msg)"},{"line_number":1761,"context_line":""},{"line_number":1762,"context_line":"            port_obj.save()"},{"line_number":1763,"context_line":""},{"line_number":1764,"context_line":"            return port_obj"}],"source_content_type":"text/x-python","patch_set":20,"id":"9a629dbe_941ba772","line":1761,"in_reply_to":"9a629dbe_a7127a55","updated":"2016-11-10 16:09:46.000000000","message":"I\u0027ve add more test cases to check all possible combinations of vif_port_id, pxe_enabled and standalone_ports_supported.","commit_id":"284a4746083facbe38e0e6db70e3f37c5c987cd2"},{"author":{"_account_id":6618,"name":"Ruby Loo","email":"opensrloo@gmail.com","username":"rloo"},"change_message_id":"fb9de204ac7d002d2c90922c4442fa837f1e9072","unresolved":false,"context_lines":[{"line_number":1860,"context_line":"                        vif \u003d extra.get(\u0027vif_port_id\u0027)"},{"line_number":1861,"context_line":"                        if vif or p.pxe_enabled:"},{"line_number":1862,"context_line":"                            msg \u003d _(\"standalone_ports_supported can not be \""},{"line_number":1863,"context_line":"                                    \"set to False, for portgroup that \""},{"line_number":1864,"context_line":"                                    \"contains ports with \u0027extra/vif_port_id\u0027 \""},{"line_number":1865,"context_line":"                                    \"or pxe_enabled\u003dTrue\")"},{"line_number":1866,"context_line":"                            raise exception.Conflict(msg)"}],"source_content_type":"text/x-python","patch_set":20,"id":"9a629dbe_4756fece","line":1863,"updated":"2016-11-09 15:29:22.000000000","message":"s/for portgroup that/because the portgroup/\n\nAre we using \u0027portgroup\u0027 or \u0027port group\u0027 in user-facing stuff?","commit_id":"284a4746083facbe38e0e6db70e3f37c5c987cd2"},{"author":{"_account_id":14525,"name":"Vasyl Saienko","email":"vsaienko@mirantis.com","username":"vsaienko"},"change_message_id":"2f3b5daefbaaaaead773f0c659cc81f5870fdb13","unresolved":false,"context_lines":[{"line_number":1860,"context_line":"                        vif \u003d extra.get(\u0027vif_port_id\u0027)"},{"line_number":1861,"context_line":"                        if vif or p.pxe_enabled:"},{"line_number":1862,"context_line":"                            msg \u003d _(\"standalone_ports_supported can not be \""},{"line_number":1863,"context_line":"                                    \"set to False, for portgroup that \""},{"line_number":1864,"context_line":"                                    \"contains ports with \u0027extra/vif_port_id\u0027 \""},{"line_number":1865,"context_line":"                                    \"or pxe_enabled\u003dTrue\")"},{"line_number":1866,"context_line":"                            raise exception.Conflict(msg)"}],"source_content_type":"text/x-python","patch_set":20,"id":"9a629dbe_a12dcfa9","line":1863,"in_reply_to":"9a629dbe_4756fece","updated":"2016-11-10 16:09:46.000000000","message":"We should use port group for user I think, as it is well known term.","commit_id":"284a4746083facbe38e0e6db70e3f37c5c987cd2"},{"author":{"_account_id":14760,"name":"John L. Villalovos","email":"openstack.org@sodarock.com","username":"jlvillal"},"change_message_id":"a1d47be4d9aba0e655d46417ad8422bf4bdd2537","unresolved":false,"context_lines":[{"line_number":1756,"context_line":"                if ((port_obj.pxe_enabled or vif) and not"},{"line_number":1757,"context_line":"                    portgroup_obj.standalone_ports_supported):"},{"line_number":1758,"context_line":"                    msg \u003d _(\"Port group %s doesn\u0027t support \""},{"line_number":1759,"context_line":"                            \"standalone ports. This port cannot be \""},{"line_number":1760,"context_line":"                            \" a member of that port group because either \""},{"line_number":1761,"context_line":"                            \"\u0027extra/vif_port_id\u0027 was specified or \""},{"line_number":1762,"context_line":"                            \"\u0027pxe_enabled\u0027 was set to True.\")"}],"source_content_type":"text/x-python","patch_set":21,"id":"9a629dbe_44ecf4f2","line":1759,"updated":"2016-11-10 22:07:24.000000000","message":"Should the UUID of the port also be printed?","commit_id":"0f41b6005feaf0fabd978900285fbfba453533e5"},{"author":{"_account_id":14525,"name":"Vasyl Saienko","email":"vsaienko@mirantis.com","username":"vsaienko"},"change_message_id":"3b5fc578b94d72e38dc354658225141780eca0c4","unresolved":false,"context_lines":[{"line_number":1756,"context_line":"                if ((port_obj.pxe_enabled or vif) and not"},{"line_number":1757,"context_line":"                    portgroup_obj.standalone_ports_supported):"},{"line_number":1758,"context_line":"                    msg \u003d _(\"Port group %s doesn\u0027t support \""},{"line_number":1759,"context_line":"                            \"standalone ports. This port cannot be \""},{"line_number":1760,"context_line":"                            \" a member of that port group because either \""},{"line_number":1761,"context_line":"                            \"\u0027extra/vif_port_id\u0027 was specified or \""},{"line_number":1762,"context_line":"                            \"\u0027pxe_enabled\u0027 was set to True.\")"}],"source_content_type":"text/x-python","patch_set":21,"id":"9a629dbe_f5c20652","line":1759,"in_reply_to":"9a629dbe_44ecf4f2","updated":"2016-11-11 11:10:33.000000000","message":"The user updates specific port so he already knows the UUID, but I think we can print uuid here.","commit_id":"0f41b6005feaf0fabd978900285fbfba453533e5"},{"author":{"_account_id":6618,"name":"Ruby Loo","email":"opensrloo@gmail.com","username":"rloo"},"change_message_id":"6607c79dcffb6098fd050a2f58e3f2e7abcce5f4","unresolved":false,"context_lines":[{"line_number":1760,"context_line":"                            \" a member of that port group because either \""},{"line_number":1761,"context_line":"                            \"\u0027extra/vif_port_id\u0027 was specified or \""},{"line_number":1762,"context_line":"                            \"\u0027pxe_enabled\u0027 was set to True.\")"},{"line_number":1763,"context_line":"                    raise exception.Conflict(msg % portgroup_obj.uuid)"},{"line_number":1764,"context_line":""},{"line_number":1765,"context_line":"            port_obj.save()"},{"line_number":1766,"context_line":""}],"source_content_type":"text/x-python","patch_set":21,"id":"9a629dbe_9853cc16","line":1763,"updated":"2016-11-10 23:16:14.000000000","message":"I still don\u0027t see where you handle the case of a port initially with pxe_enabled\u003dTrue and no portgroup, being updated here to add a portgroup-with-no-standalone.\n\nWouldn\u0027t portgroup_obj be set at line 1754, but the ((set...)) would be false?","commit_id":"0f41b6005feaf0fabd978900285fbfba453533e5"},{"author":{"_account_id":14525,"name":"Vasyl Saienko","email":"vsaienko@mirantis.com","username":"vsaienko"},"change_message_id":"3b5fc578b94d72e38dc354658225141780eca0c4","unresolved":false,"context_lines":[{"line_number":1760,"context_line":"                            \" a member of that port group because either \""},{"line_number":1761,"context_line":"                            \"\u0027extra/vif_port_id\u0027 was specified or \""},{"line_number":1762,"context_line":"                            \"\u0027pxe_enabled\u0027 was set to True.\")"},{"line_number":1763,"context_line":"                    raise exception.Conflict(msg % portgroup_obj.uuid)"},{"line_number":1764,"context_line":""},{"line_number":1765,"context_line":"            port_obj.save()"},{"line_number":1766,"context_line":""}],"source_content_type":"text/x-python","patch_set":21,"id":"9a629dbe_15e05acc","line":1763,"in_reply_to":"9a629dbe_9853cc16","updated":"2016-11-11 11:10:33.000000000","message":"I think test case you are asking for is [0]\nport is created with pxe_enabled\u003dTrue by default.\nThan we adding this port to portgroup with standalone_ports_supported\u003dFalse.\n\n[0] https://review.openstack.org/#/c/360647/21/ironic/tests/unit/conductor/test_manager.py@3174","commit_id":"0f41b6005feaf0fabd978900285fbfba453533e5"},{"author":{"_account_id":14760,"name":"John L. Villalovos","email":"openstack.org@sodarock.com","username":"jlvillal"},"change_message_id":"a1d47be4d9aba0e655d46417ad8422bf4bdd2537","unresolved":false,"context_lines":[{"line_number":1865,"context_line":"                            msg \u003d _(\"standalone_ports_supported can not be \""},{"line_number":1866,"context_line":"                                    \"set to False, because the port group \""},{"line_number":1867,"context_line":"                                    \"contains ports with \u0027extra/vif_port_id\u0027 \""},{"line_number":1868,"context_line":"                                    \"or pxe_enabled\u003dTrue\")"},{"line_number":1869,"context_line":"                            raise exception.Conflict(msg)"},{"line_number":1870,"context_line":""},{"line_number":1871,"context_line":"            portgroup_obj.save()"}],"source_content_type":"text/x-python","patch_set":21,"id":"9a629dbe_e4d428ed","line":1868,"updated":"2016-11-10 22:07:24.000000000","message":"Should the UUID of the portgroup be printed?","commit_id":"0f41b6005feaf0fabd978900285fbfba453533e5"},{"author":{"_account_id":14525,"name":"Vasyl Saienko","email":"vsaienko@mirantis.com","username":"vsaienko"},"change_message_id":"3b5fc578b94d72e38dc354658225141780eca0c4","unresolved":false,"context_lines":[{"line_number":1865,"context_line":"                            msg \u003d _(\"standalone_ports_supported can not be \""},{"line_number":1866,"context_line":"                                    \"set to False, because the port group \""},{"line_number":1867,"context_line":"                                    \"contains ports with \u0027extra/vif_port_id\u0027 \""},{"line_number":1868,"context_line":"                                    \"or pxe_enabled\u003dTrue\")"},{"line_number":1869,"context_line":"                            raise exception.Conflict(msg)"},{"line_number":1870,"context_line":""},{"line_number":1871,"context_line":"            portgroup_obj.save()"}],"source_content_type":"text/x-python","patch_set":21,"id":"9a629dbe_b5aece2b","line":1868,"in_reply_to":"9a629dbe_e4d428ed","updated":"2016-11-11 11:10:33.000000000","message":"Done","commit_id":"0f41b6005feaf0fabd978900285fbfba453533e5"},{"author":{"_account_id":7711,"name":"Yuriy Zveryanskyy","email":"yzveryanskyy@mirantis.com","username":"yuriyz"},"change_message_id":"074d48ba063cabeb787b233c3e61d08b20364999","unresolved":false,"context_lines":[{"line_number":1645,"context_line":"                                   exception.MACAlreadyExists,"},{"line_number":1646,"context_line":"                                   exception.InvalidState,"},{"line_number":1647,"context_line":"                                   exception.FailedToUpdateDHCPOptOnPort,"},{"line_number":1648,"context_line":"                                   exception.Conflict)"},{"line_number":1649,"context_line":"    def update_port(self, context, port_obj):"},{"line_number":1650,"context_line":"        \"\"\"Update a port."},{"line_number":1651,"context_line":""}],"source_content_type":"text/x-python","patch_set":22,"id":"9a629dbe_911e300a","line":1648,"range":{"start_line":1648,"start_character":35,"end_line":1648,"end_character":53},"updated":"2016-11-11 14:45:19.000000000","message":"I\u0027m not sure that \"Conflict\" is good for these cases because client does retrying by default on conflict.","commit_id":"a5f7c157d1fe0636c5f54dfbd5a9d9f381bd7544"},{"author":{"_account_id":14525,"name":"Vasyl Saienko","email":"vsaienko@mirantis.com","username":"vsaienko"},"change_message_id":"b6f752530fbf676aba8a597a7c78aa8a1155a49b","unresolved":false,"context_lines":[{"line_number":1645,"context_line":"                                   exception.MACAlreadyExists,"},{"line_number":1646,"context_line":"                                   exception.InvalidState,"},{"line_number":1647,"context_line":"                                   exception.FailedToUpdateDHCPOptOnPort,"},{"line_number":1648,"context_line":"                                   exception.Conflict)"},{"line_number":1649,"context_line":"    def update_port(self, context, port_obj):"},{"line_number":1650,"context_line":"        \"\"\"Update a port."},{"line_number":1651,"context_line":""}],"source_content_type":"text/x-python","patch_set":22,"id":"7a77a97e_4942bc3f","line":1648,"range":{"start_line":1648,"start_character":35,"end_line":1648,"end_character":53},"in_reply_to":"7a77a97e_1e4ad8c5","updated":"2016-11-16 12:38:05.000000000","message":"If user is able to resolve conflict without changing request params error should be 409 Conflict. If user is not able to resolve conflict without changing params error should be 400 BAD Request.\n\nFor DuplicateName(Conflict), MACAlreadyExists, ChassisAlreadyExists, PortAlreadyExists PortgroupAlreadyExists and more, they should be 303 SEE OTHER as user trying create resource that already exists. According to RFC [0] we should redirect user to existed resource:\n\n  \"If the result of processing a POST would be equivalent to a\n   representation of an existing resource, an origin server MAY redirect\n   the user agent to that resource by sending a 303 (See Other\"\n\n[0] https://tools.ietf.org/html/rfc7231#section-4.3.3","commit_id":"a5f7c157d1fe0636c5f54dfbd5a9d9f381bd7544"},{"author":{"_account_id":6618,"name":"Ruby Loo","email":"opensrloo@gmail.com","username":"rloo"},"change_message_id":"d0153287f02dd0ef531cd2aedb11c9dfb7ba5697","unresolved":false,"context_lines":[{"line_number":1645,"context_line":"                                   exception.MACAlreadyExists,"},{"line_number":1646,"context_line":"                                   exception.InvalidState,"},{"line_number":1647,"context_line":"                                   exception.FailedToUpdateDHCPOptOnPort,"},{"line_number":1648,"context_line":"                                   exception.Conflict)"},{"line_number":1649,"context_line":"    def update_port(self, context, port_obj):"},{"line_number":1650,"context_line":"        \"\"\"Update a port."},{"line_number":1651,"context_line":""}],"source_content_type":"text/x-python","patch_set":22,"id":"7a77a97e_1e4ad8c5","line":1648,"range":{"start_line":1648,"start_character":35,"end_line":1648,"end_character":53},"in_reply_to":"7a77a97e_201163ad","updated":"2016-11-15 21:55:31.000000000","message":"Looking at existing exceptions, I think we are using Conflict and BadRequest for similar things, eg InvalidStateRequested(Invalid), whereas DuplicateName(Conflict) seems different from NodeLocked(Conflict).\n\nThere is a bug about 409 too [1].\n\nTo avoid Conflict (cuz of what Yuriy said), maybe we should return Invalid (400). Although based on this description [2], Conflict looks like the right thing. So I\u0027m leaning towards Conflict now...\n\n[1] https://bugs.launchpad.net/ironic/+bug/1461140\n[2] https://httpstatuses.com/409","commit_id":"a5f7c157d1fe0636c5f54dfbd5a9d9f381bd7544"},{"author":{"_account_id":13295,"name":"Mario Villaplana","email":"mario.villaplana@gmail.com","username":"mariojv"},"change_message_id":"3fbae1598430f041fed4e7304b5dcc45dd87adf4","unresolved":false,"context_lines":[{"line_number":1645,"context_line":"                                   exception.MACAlreadyExists,"},{"line_number":1646,"context_line":"                                   exception.InvalidState,"},{"line_number":1647,"context_line":"                                   exception.FailedToUpdateDHCPOptOnPort,"},{"line_number":1648,"context_line":"                                   exception.Conflict)"},{"line_number":1649,"context_line":"    def update_port(self, context, port_obj):"},{"line_number":1650,"context_line":"        \"\"\"Update a port."},{"line_number":1651,"context_line":""}],"source_content_type":"text/x-python","patch_set":22,"id":"9a629dbe_a2b484d1","line":1648,"range":{"start_line":1648,"start_character":35,"end_line":1648,"end_character":53},"in_reply_to":"9a629dbe_911e300a","updated":"2016-11-14 16:01:38.000000000","message":"What other 4xx code do you think should go here?","commit_id":"a5f7c157d1fe0636c5f54dfbd5a9d9f381bd7544"},{"author":{"_account_id":14760,"name":"John L. Villalovos","email":"openstack.org@sodarock.com","username":"jlvillal"},"change_message_id":"247b92c4d9986b1750ccc0a2f7f207b4f309fb89","unresolved":false,"context_lines":[{"line_number":1645,"context_line":"                                   exception.MACAlreadyExists,"},{"line_number":1646,"context_line":"                                   exception.InvalidState,"},{"line_number":1647,"context_line":"                                   exception.FailedToUpdateDHCPOptOnPort,"},{"line_number":1648,"context_line":"                                   exception.Conflict)"},{"line_number":1649,"context_line":"    def update_port(self, context, port_obj):"},{"line_number":1650,"context_line":"        \"\"\"Update a port."},{"line_number":1651,"context_line":""}],"source_content_type":"text/x-python","patch_set":22,"id":"7a77a97e_201163ad","line":1648,"range":{"start_line":1648,"start_character":35,"end_line":1648,"end_character":53},"in_reply_to":"9a629dbe_a2b484d1","updated":"2016-11-14 22:45:16.000000000","message":"Most of these other exceptions return Conflict (409).\n\nMaybe should make a custom exception which does the same or does 500 (Internal Server Error) or something else???\n\n NodeLocked: Conflict\n FailedToUpdateMacOnPort: Internal Server Error\n MACAlreadyExists: Conflict\n InvalidState: Conflict\n FailedToUpdateDHCPOptOnPort: Internal Server Error","commit_id":"a5f7c157d1fe0636c5f54dfbd5a9d9f381bd7544"},{"author":{"_account_id":6618,"name":"Ruby Loo","email":"opensrloo@gmail.com","username":"rloo"},"change_message_id":"d0153287f02dd0ef531cd2aedb11c9dfb7ba5697","unresolved":false,"context_lines":[{"line_number":1751,"context_line":"                            {\u0027port\u0027: port_uuid,"},{"line_number":1752,"context_line":"                             \u0027instance\u0027: node.instance_uuid})"},{"line_number":1753,"context_line":""},{"line_number":1754,"context_line":"            if portgroup_obj and ((set(port_obj.obj_what_changed()) \u0026"},{"line_number":1755,"context_line":"                                  {\u0027pxe_enabled\u0027, \u0027portgroup_id\u0027}) or vif):"},{"line_number":1756,"context_line":"                if ((port_obj.pxe_enabled or vif) and not"},{"line_number":1757,"context_line":"                    portgroup_obj.standalone_ports_supported):"}],"source_content_type":"text/x-python","patch_set":22,"id":"7a77a97e_34c6d367","line":1754,"updated":"2016-11-15 21:55:31.000000000","message":"Maybe I\u0027m wrong, but I don\u0027t see any code at the API level that checks for version \u003e\u003d 1.26.\n\nIs it ONLY when we create a port, that we check for conflicting stuff if version \u003e\u003d 1.26. But that when updating a port, we check for these conflicts even if version is 1.25?\n\nPart of me is wondering whether this is a bug that doesn\u0027t need a bump in API version.","commit_id":"a5f7c157d1fe0636c5f54dfbd5a9d9f381bd7544"},{"author":{"_account_id":14525,"name":"Vasyl Saienko","email":"vsaienko@mirantis.com","username":"vsaienko"},"change_message_id":"b6f752530fbf676aba8a597a7c78aa8a1155a49b","unresolved":false,"context_lines":[{"line_number":1751,"context_line":"                            {\u0027port\u0027: port_uuid,"},{"line_number":1752,"context_line":"                             \u0027instance\u0027: node.instance_uuid})"},{"line_number":1753,"context_line":""},{"line_number":1754,"context_line":"            if portgroup_obj and ((set(port_obj.obj_what_changed()) \u0026"},{"line_number":1755,"context_line":"                                  {\u0027pxe_enabled\u0027, \u0027portgroup_id\u0027}) or vif):"},{"line_number":1756,"context_line":"                if ((port_obj.pxe_enabled or vif) and not"},{"line_number":1757,"context_line":"                    portgroup_obj.standalone_ports_supported):"}],"source_content_type":"text/x-python","patch_set":22,"id":"7a77a97e_096fe4c5","line":1754,"in_reply_to":"7a77a97e_34c6d367","updated":"2016-11-16 12:38:05.000000000","message":"we shouldn\u0027t bump API version according to openstack API guidelines, more detail is in release note comments.","commit_id":"a5f7c157d1fe0636c5f54dfbd5a9d9f381bd7544"},{"author":{"_account_id":6618,"name":"Ruby Loo","email":"opensrloo@gmail.com","username":"rloo"},"change_message_id":"9c5edf61d873c5807f756849efb95817e410e201","unresolved":false,"context_lines":[{"line_number":1711,"context_line":"                              \u0027allowed\u0027: \u0027, \u0027.join(allowed_update_states)})"},{"line_number":1712,"context_line":""},{"line_number":1713,"context_line":"            if \u0027address\u0027 in port_obj.obj_what_changed():"},{"line_number":1714,"context_line":"                vif \u003d port_obj.extra.get(\u0027vif_port_id\u0027)"},{"line_number":1715,"context_line":"                if vif:"},{"line_number":1716,"context_line":"                    api \u003d dhcp_factory.DHCPFactory()"},{"line_number":1717,"context_line":"                    api.provider.update_port_address(vif, port_obj.address,"}],"source_content_type":"text/x-python","patch_set":25,"id":"5a74a57a_db398bf4","line":1714,"updated":"2016-11-29 16:38:04.000000000","message":"wdyt about pulling this out and doing it before L1713. Then we wouldn\u0027t need L1728.","commit_id":"c8d518898e27951123ad7816337d2a0f862ea5b4"},{"author":{"_account_id":12356,"name":"Vladyslav Drok","email":"vdrok@mirantis.com","username":"vdrok"},"change_message_id":"680b76ea5d660a66372576b785c98b3657b26a12","unresolved":false,"context_lines":[{"line_number":1711,"context_line":"                              \u0027allowed\u0027: \u0027, \u0027.join(allowed_update_states)})"},{"line_number":1712,"context_line":""},{"line_number":1713,"context_line":"            if \u0027address\u0027 in port_obj.obj_what_changed():"},{"line_number":1714,"context_line":"                vif \u003d port_obj.extra.get(\u0027vif_port_id\u0027)"},{"line_number":1715,"context_line":"                if vif:"},{"line_number":1716,"context_line":"                    api \u003d dhcp_factory.DHCPFactory()"},{"line_number":1717,"context_line":"                    api.provider.update_port_address(vif, port_obj.address,"}],"source_content_type":"text/x-python","patch_set":25,"id":"5a74a57a_f1ac7f8e","line":1714,"in_reply_to":"5a74a57a_db398bf4","updated":"2016-11-30 14:07:14.000000000","message":"++","commit_id":"c8d518898e27951123ad7816337d2a0f862ea5b4"},{"author":{"_account_id":12356,"name":"Vladyslav Drok","email":"vdrok@mirantis.com","username":"vdrok"},"change_message_id":"680b76ea5d660a66372576b785c98b3657b26a12","unresolved":false,"context_lines":[{"line_number":1751,"context_line":"                             \u0027instance\u0027: node.instance_uuid})"},{"line_number":1752,"context_line":""},{"line_number":1753,"context_line":"            if portgroup_obj and ((set(port_obj.obj_what_changed()) \u0026"},{"line_number":1754,"context_line":"                                  {\u0027pxe_enabled\u0027, \u0027portgroup_id\u0027}) or vif):"},{"line_number":1755,"context_line":"                if ((port_obj.pxe_enabled or vif) and not"},{"line_number":1756,"context_line":"                    portgroup_obj.standalone_ports_supported):"},{"line_number":1757,"context_line":"                    msg \u003d (_(\"Port group %(portgroup)s doesn\u0027t support \""}],"source_content_type":"text/x-python","patch_set":25,"id":"5a74a57a_2c25baad","line":1754,"range":{"start_line":1754,"start_character":70,"end_line":1754,"end_character":73},"updated":"2016-11-30 14:07:14.000000000","message":"in theory, we\u0027d need to not only check that vif is in extra and extra was changed, but the fact that vif is being added to a port that did not have one previously. Meaning that here it should be something like L1730-1733. But as is, it won\u0027t break anything too, so I\u0027m OK with it.","commit_id":"c8d518898e27951123ad7816337d2a0f862ea5b4"}],"ironic/conductor/rpcapi.py":[{"author":{"_account_id":6618,"name":"Ruby Loo","email":"opensrloo@gmail.com","username":"rloo"},"change_message_id":"6607c79dcffb6098fd050a2f58e3f2e7abcce5f4","unresolved":false,"context_lines":[{"line_number":81,"context_line":"    |    1.32 - Add do_node_clean"},{"line_number":82,"context_line":"    |    1.33 - Added update and destroy portgroup."},{"line_number":83,"context_line":"    |    1.34 - Added heartbeat"},{"line_number":84,"context_line":"    |    1.35 - Rely on portgroup.standalone_ports_supported"},{"line_number":85,"context_line":""},{"line_number":86,"context_line":"    \"\"\""},{"line_number":87,"context_line":""}],"source_content_type":"text/x-python","patch_set":21,"id":"9a629dbe_441b14ca","line":84,"updated":"2016-11-10 23:16:14.000000000","message":"The RPC API didn\u0027t change because of this, so I don\u0027t think we need to change the version.","commit_id":"0f41b6005feaf0fabd978900285fbfba453533e5"},{"author":{"_account_id":14525,"name":"Vasyl Saienko","email":"vsaienko@mirantis.com","username":"vsaienko"},"change_message_id":"3b5fc578b94d72e38dc354658225141780eca0c4","unresolved":false,"context_lines":[{"line_number":81,"context_line":"    |    1.32 - Add do_node_clean"},{"line_number":82,"context_line":"    |    1.33 - Added update and destroy portgroup."},{"line_number":83,"context_line":"    |    1.34 - Added heartbeat"},{"line_number":84,"context_line":"    |    1.35 - Rely on portgroup.standalone_ports_supported"},{"line_number":85,"context_line":""},{"line_number":86,"context_line":"    \"\"\""},{"line_number":87,"context_line":""}],"source_content_type":"text/x-python","patch_set":21,"id":"9a629dbe_b07a5c22","line":84,"in_reply_to":"9a629dbe_441b14ca","updated":"2016-11-11 11:10:33.000000000","message":"We rising new exception Conflict, so we should bump RPC api version.","commit_id":"0f41b6005feaf0fabd978900285fbfba453533e5"},{"author":{"_account_id":6618,"name":"Ruby Loo","email":"opensrloo@gmail.com","username":"rloo"},"change_message_id":"d0153287f02dd0ef531cd2aedb11c9dfb7ba5697","unresolved":false,"context_lines":[{"line_number":81,"context_line":"    |    1.32 - Add do_node_clean"},{"line_number":82,"context_line":"    |    1.33 - Added update and destroy portgroup."},{"line_number":83,"context_line":"    |    1.34 - Added heartbeat"},{"line_number":84,"context_line":"    |    1.35 - Rely on portgroup.standalone_ports_supported"},{"line_number":85,"context_line":""},{"line_number":86,"context_line":"    \"\"\""},{"line_number":87,"context_line":""}],"source_content_type":"text/x-python","patch_set":22,"id":"7a77a97e_5988ea22","line":84,"updated":"2016-11-15 21:55:31.000000000","message":"I didn\u0027t realize that we needed to bump the version cuz of a new exception being raised. If that is the case though -- shouldn\u0027t that be reflected in a comment about Conflict being raised, at line 435 for update_port()?","commit_id":"a5f7c157d1fe0636c5f54dfbd5a9d9f381bd7544"},{"author":{"_account_id":14525,"name":"Vasyl Saienko","email":"vsaienko@mirantis.com","username":"vsaienko"},"change_message_id":"b6f752530fbf676aba8a597a7c78aa8a1155a49b","unresolved":false,"context_lines":[{"line_number":81,"context_line":"    |    1.32 - Add do_node_clean"},{"line_number":82,"context_line":"    |    1.33 - Added update and destroy portgroup."},{"line_number":83,"context_line":"    |    1.34 - Added heartbeat"},{"line_number":84,"context_line":"    |    1.35 - Rely on portgroup.standalone_ports_supported"},{"line_number":85,"context_line":""},{"line_number":86,"context_line":"    \"\"\""},{"line_number":87,"context_line":""}],"source_content_type":"text/x-python","patch_set":22,"id":"7a77a97e_f3bd39d8","line":84,"in_reply_to":"7a77a97e_5988ea22","updated":"2016-11-16 12:38:05.000000000","message":"Ruby you are right we shouldn\u0027t but RPC API version, as we raised 409 conflict before.","commit_id":"a5f7c157d1fe0636c5f54dfbd5a9d9f381bd7544"},{"author":{"_account_id":6618,"name":"Ruby Loo","email":"opensrloo@gmail.com","username":"rloo"},"change_message_id":"d0153287f02dd0ef531cd2aedb11c9dfb7ba5697","unresolved":false,"context_lines":[{"line_number":435,"context_line":"        :returns: updated port object, including all fields."},{"line_number":436,"context_line":""},{"line_number":437,"context_line":"        \"\"\""},{"line_number":438,"context_line":"        cctxt \u003d self.client.prepare(topic\u003dtopic or self.topic, version\u003d\u00271.13\u0027)"},{"line_number":439,"context_line":"        return cctxt.call(context, \u0027update_port\u0027, port_obj\u003dport_obj)"},{"line_number":440,"context_line":""},{"line_number":441,"context_line":"    def update_portgroup(self, context, portgroup_obj, topic\u003dNone):"}],"source_content_type":"text/x-python","patch_set":22,"id":"7a77a97e_99b0c2df","line":438,"updated":"2016-11-15 21:55:31.000000000","message":"I\u0027m not an expert on this code, but if you say that the RPC version has changed due to update_port(), doesn\u0027t this version need to change to 1.35?","commit_id":"a5f7c157d1fe0636c5f54dfbd5a9d9f381bd7544"},{"author":{"_account_id":14525,"name":"Vasyl Saienko","email":"vsaienko@mirantis.com","username":"vsaienko"},"change_message_id":"b6f752530fbf676aba8a597a7c78aa8a1155a49b","unresolved":false,"context_lines":[{"line_number":435,"context_line":"        :returns: updated port object, including all fields."},{"line_number":436,"context_line":""},{"line_number":437,"context_line":"        \"\"\""},{"line_number":438,"context_line":"        cctxt \u003d self.client.prepare(topic\u003dtopic or self.topic, version\u003d\u00271.13\u0027)"},{"line_number":439,"context_line":"        return cctxt.call(context, \u0027update_port\u0027, port_obj\u003dport_obj)"},{"line_number":440,"context_line":""},{"line_number":441,"context_line":"    def update_portgroup(self, context, portgroup_obj, topic\u003dNone):"}],"source_content_type":"text/x-python","patch_set":22,"id":"7a77a97e_9377a539","line":438,"in_reply_to":"7a77a97e_99b0c2df","updated":"2016-11-16 12:38:05.000000000","message":"rpc version was bumped wrongly, we shouldn\u0027t do it.","commit_id":"a5f7c157d1fe0636c5f54dfbd5a9d9f381bd7544"}],"ironic/tests/unit/api/v1/test_ports.py":[{"author":{"_account_id":13295,"name":"Mario Villaplana","email":"mario.villaplana@gmail.com","username":"mariojv"},"change_message_id":"3fbae1598430f041fed4e7304b5dcc45dd87adf4","unresolved":false,"context_lines":[{"line_number":1306,"context_line":"        self.assertEqual(http_client.CREATED, response.status_int)"},{"line_number":1307,"context_line":"        self.assertEqual(extra, response.json[\u0027extra\u0027])"},{"line_number":1308,"context_line":""},{"line_number":1309,"context_line":"    def test_create_port_vif_pxe_dis_pg_sps_dis(self):"},{"line_number":1310,"context_line":"        extra \u003d {\u0027vif_port_id\u0027: uuidutils.generate_uuid()}"},{"line_number":1311,"context_line":"        pdict \u003d post_get_test_port("},{"line_number":1312,"context_line":"            portgroup_uuid\u003dself.portgroup.uuid,"}],"source_content_type":"text/x-python","patch_set":22,"id":"9a629dbe_a239e443","line":1309,"range":{"start_line":1309,"start_character":8,"end_line":1309,"end_character":47},"updated":"2016-11-14 16:01:38.000000000","message":"nit: These method names are really difficult to understand","commit_id":"a5f7c157d1fe0636c5f54dfbd5a9d9f381bd7544"},{"author":{"_account_id":14525,"name":"Vasyl Saienko","email":"vsaienko@mirantis.com","username":"vsaienko"},"change_message_id":"b6f752530fbf676aba8a597a7c78aa8a1155a49b","unresolved":false,"context_lines":[{"line_number":1306,"context_line":"        self.assertEqual(http_client.CREATED, response.status_int)"},{"line_number":1307,"context_line":"        self.assertEqual(extra, response.json[\u0027extra\u0027])"},{"line_number":1308,"context_line":""},{"line_number":1309,"context_line":"    def test_create_port_vif_pxe_dis_pg_sps_dis(self):"},{"line_number":1310,"context_line":"        extra \u003d {\u0027vif_port_id\u0027: uuidutils.generate_uuid()}"},{"line_number":1311,"context_line":"        pdict \u003d post_get_test_port("},{"line_number":1312,"context_line":"            portgroup_uuid\u003dself.portgroup.uuid,"}],"source_content_type":"text/x-python","patch_set":22,"id":"7a77a97e_cc609a38","line":1309,"range":{"start_line":1309,"start_character":8,"end_line":1309,"end_character":47},"in_reply_to":"7a77a97e_bd20119d","updated":"2016-11-16 12:38:05.000000000","message":"add comment above.","commit_id":"a5f7c157d1fe0636c5f54dfbd5a9d9f381bd7544"},{"author":{"_account_id":10342,"name":"Jay Faulkner","display_name":"JayF","email":"jay@jvf.cc","username":"JayF","status":"youtube.com/@oss-gr / podcast.gr-oss.io"},"change_message_id":"5b008a70c070533d864a55fe96ced4f947385be7","unresolved":false,"context_lines":[{"line_number":1306,"context_line":"        self.assertEqual(http_client.CREATED, response.status_int)"},{"line_number":1307,"context_line":"        self.assertEqual(extra, response.json[\u0027extra\u0027])"},{"line_number":1308,"context_line":""},{"line_number":1309,"context_line":"    def test_create_port_vif_pxe_dis_pg_sps_dis(self):"},{"line_number":1310,"context_line":"        extra \u003d {\u0027vif_port_id\u0027: uuidutils.generate_uuid()}"},{"line_number":1311,"context_line":"        pdict \u003d post_get_test_port("},{"line_number":1312,"context_line":"            portgroup_uuid\u003dself.portgroup.uuid,"}],"source_content_type":"text/x-python","patch_set":22,"id":"7a77a97e_bd20119d","line":1309,"range":{"start_line":1309,"start_character":8,"end_line":1309,"end_character":47},"in_reply_to":"9a629dbe_a239e443","updated":"2016-11-15 18:16:09.000000000","message":"++ At a minimum, maybe add docstrings with the longer versions of what is being tested?","commit_id":"a5f7c157d1fe0636c5f54dfbd5a9d9f381bd7544"},{"author":{"_account_id":6618,"name":"Ruby Loo","email":"opensrloo@gmail.com","username":"rloo"},"change_message_id":"5c100233ef951c2caba7518c6175229210cbbe75","unresolved":false,"context_lines":[{"line_number":1200,"context_line":"    # no_vif: create port without port.extra vif_port_id key"},{"line_number":1201,"context_line":"    # vif: create port with port.extra vif_port_id key"},{"line_number":1202,"context_line":"    # pxe_en: create port with pxe_enabled \u003d True"},{"line_number":1203,"context_line":"    # pxe_dis: create port with pxe_enabled \u003d False"},{"line_number":1204,"context_line":"    # no_pg: create port that is not a member of any port group"},{"line_number":1205,"context_line":"    # pg: create port that is a member of port group"},{"line_number":1206,"context_line":"    # sps_en: create port that is a member of port group with"}],"source_content_type":"text/x-python","patch_set":23,"id":"7a77a97e_31c79e46","line":1203,"updated":"2016-11-16 15:49:38.000000000","message":"to be consistent with the others, i would have used \u0027pxe\u0027 and \u0027no_pxe\u0027","commit_id":"a839b83001abc510147cbdbf6caec8bf9d0078d1"},{"author":{"_account_id":14525,"name":"Vasyl Saienko","email":"vsaienko@mirantis.com","username":"vsaienko"},"change_message_id":"66dd506602978eb71494a3a77651af3977b9ab7b","unresolved":false,"context_lines":[{"line_number":1200,"context_line":"    # no_vif: create port without port.extra vif_port_id key"},{"line_number":1201,"context_line":"    # vif: create port with port.extra vif_port_id key"},{"line_number":1202,"context_line":"    # pxe_en: create port with pxe_enabled \u003d True"},{"line_number":1203,"context_line":"    # pxe_dis: create port with pxe_enabled \u003d False"},{"line_number":1204,"context_line":"    # no_pg: create port that is not a member of any port group"},{"line_number":1205,"context_line":"    # pg: create port that is a member of port group"},{"line_number":1206,"context_line":"    # sps_en: create port that is a member of port group with"}],"source_content_type":"text/x-python","patch_set":23,"id":"7a77a97e_4f1c3cc1","line":1203,"in_reply_to":"7a77a97e_31c79e46","updated":"2016-11-17 13:53:44.000000000","message":"Done","commit_id":"a839b83001abc510147cbdbf6caec8bf9d0078d1"},{"author":{"_account_id":6618,"name":"Ruby Loo","email":"opensrloo@gmail.com","username":"rloo"},"change_message_id":"5c100233ef951c2caba7518c6175229210cbbe75","unresolved":false,"context_lines":[{"line_number":1205,"context_line":"    # pg: create port that is a member of port group"},{"line_number":1206,"context_line":"    # sps_en: create port that is a member of port group with"},{"line_number":1207,"context_line":"    #         standalone_ports_supported \u003d True"},{"line_number":1208,"context_line":"    # sps_dis: create port that is a member of port group with"},{"line_number":1209,"context_line":"    #          standalone_ports_supported \u003d False"},{"line_number":1210,"context_line":""},{"line_number":1211,"context_line":"    def test_create_port_no_vif_pxe_en_no_pg(self):"}],"source_content_type":"text/x-python","patch_set":23,"id":"7a77a97e_51797af5","line":1208,"updated":"2016-11-16 15:49:38.000000000","message":"ditto here, \u0027sps\u0027, \u0027no_sps\u0027\n\nalthough i don\u0027t like \u0027pg\u0027 or \u0027sps.","commit_id":"a839b83001abc510147cbdbf6caec8bf9d0078d1"},{"author":{"_account_id":14525,"name":"Vasyl Saienko","email":"vsaienko@mirantis.com","username":"vsaienko"},"change_message_id":"66dd506602978eb71494a3a77651af3977b9ab7b","unresolved":false,"context_lines":[{"line_number":1205,"context_line":"    # pg: create port that is a member of port group"},{"line_number":1206,"context_line":"    # sps_en: create port that is a member of port group with"},{"line_number":1207,"context_line":"    #         standalone_ports_supported \u003d True"},{"line_number":1208,"context_line":"    # sps_dis: create port that is a member of port group with"},{"line_number":1209,"context_line":"    #          standalone_ports_supported \u003d False"},{"line_number":1210,"context_line":""},{"line_number":1211,"context_line":"    def test_create_port_no_vif_pxe_en_no_pg(self):"}],"source_content_type":"text/x-python","patch_set":23,"id":"7a77a97e_6f7bb8f5","line":1208,"in_reply_to":"7a77a97e_51797af5","updated":"2016-11-17 13:53:44.000000000","message":"Done","commit_id":"a839b83001abc510147cbdbf6caec8bf9d0078d1"},{"author":{"_account_id":6618,"name":"Ruby Loo","email":"opensrloo@gmail.com","username":"rloo"},"change_message_id":"5c100233ef951c2caba7518c6175229210cbbe75","unresolved":false,"context_lines":[{"line_number":1208,"context_line":"    # sps_dis: create port that is a member of port group with"},{"line_number":1209,"context_line":"    #          standalone_ports_supported \u003d False"},{"line_number":1210,"context_line":""},{"line_number":1211,"context_line":"    def test_create_port_no_vif_pxe_en_no_pg(self):"},{"line_number":1212,"context_line":"        pdict \u003d post_get_test_port("},{"line_number":1213,"context_line":"            node_uuid\u003dself.node.uuid,"},{"line_number":1214,"context_line":"            pxe_enabled\u003dTrue)"}],"source_content_type":"text/x-python","patch_set":23,"id":"7a77a97e_b762beab","line":1211,"updated":"2016-11-16 15:49:38.000000000","message":"after looking at the test names, i think i would have gone with \u0027novif\u0027 instead of \u0027no_vif\u0027\n\neg \u0027test_create_port_novif_pxe_nogroup\u0027","commit_id":"a839b83001abc510147cbdbf6caec8bf9d0078d1"},{"author":{"_account_id":14525,"name":"Vasyl Saienko","email":"vsaienko@mirantis.com","username":"vsaienko"},"change_message_id":"66dd506602978eb71494a3a77651af3977b9ab7b","unresolved":false,"context_lines":[{"line_number":1208,"context_line":"    # sps_dis: create port that is a member of port group with"},{"line_number":1209,"context_line":"    #          standalone_ports_supported \u003d False"},{"line_number":1210,"context_line":""},{"line_number":1211,"context_line":"    def test_create_port_no_vif_pxe_en_no_pg(self):"},{"line_number":1212,"context_line":"        pdict \u003d post_get_test_port("},{"line_number":1213,"context_line":"            node_uuid\u003dself.node.uuid,"},{"line_number":1214,"context_line":"            pxe_enabled\u003dTrue)"}],"source_content_type":"text/x-python","patch_set":23,"id":"7a77a97e_8f8014c2","line":1211,"in_reply_to":"7a77a97e_b762beab","updated":"2016-11-17 13:53:44.000000000","message":"Done","commit_id":"a839b83001abc510147cbdbf6caec8bf9d0078d1"},{"author":{"_account_id":6618,"name":"Ruby Loo","email":"opensrloo@gmail.com","username":"rloo"},"change_message_id":"5c100233ef951c2caba7518c6175229210cbbe75","unresolved":false,"context_lines":[{"line_number":1217,"context_line":"        self.assertEqual(\u0027application/json\u0027, response.content_type)"},{"line_number":1218,"context_line":"        self.assertEqual(http_client.CREATED, response.status_int)"},{"line_number":1219,"context_line":"        self.assertIsNone(response.json[\u0027portgroup_uuid\u0027])"},{"line_number":1220,"context_line":""},{"line_number":1221,"context_line":"    def test_create_port_no_vif_pxe_en_pg_sps_en(self):"},{"line_number":1222,"context_line":"        pdict \u003d post_get_test_port("},{"line_number":1223,"context_line":"            portgroup_uuid\u003dself.portgroup.uuid,"}],"source_content_type":"text/x-python","patch_set":23,"id":"7a77a97e_a9834203","line":1220,"updated":"2016-11-16 15:49:38.000000000","message":"Thinking about this a bit more. I think it might be clearer \u0026 easier to see if you got it all covered, if we used a helper function that would do most of the work. eg:\n  def _test_create_port_in_portgroups(self, has_vif\u003dTrue, pxe_enabled\u003dTrue, in_portgroup\u003dTrue, standalone_ports_supported\u003dFalse, http_status\u003dhttp_client.CREATED):\n    extra \u003d {}\n    if has_vif: extra \u003d ..\n    pdict \u003d post_get_test_port(node_uuid\u003d.., pxe_enabled\u003dpxe_enabled, ...\n    if not in_portgroup; pdict.pop(\u0027portgroup_uuid\u0027)\n    expect_errors \u003d http_status !\u003d http_client.CREATED\n   response \u003d self.post_json(..., expect_errors\u003dexpect_errors)\n   self.assertWhatever\n\nThe tests themselves would be something like\n\n  def test_create_port_nogroup_novif_pxe(self):\n         self._test_create_port_in_portgroups(has_vif\u003dFalse, pxe_enabled\u003dTrue, in_portgroup\u003dFalse)\n\n  def test_create_port_portgroup_novif_pxe(self):\n            self._test_create_port_in_portgroups(has_vif\u003dFalse, pxe_enabled\u003dTrue, in_portgroup\u003dTrue)\n\nhave one test that calls _test_create_port_in_portgroups() with each combination of values.\n\nit is too hard to go through all these tests here with their abbreviations etc, to see if you are missing any combination of values.","commit_id":"a839b83001abc510147cbdbf6caec8bf9d0078d1"},{"author":{"_account_id":14525,"name":"Vasyl Saienko","email":"vsaienko@mirantis.com","username":"vsaienko"},"change_message_id":"66dd506602978eb71494a3a77651af3977b9ab7b","unresolved":false,"context_lines":[{"line_number":1217,"context_line":"        self.assertEqual(\u0027application/json\u0027, response.content_type)"},{"line_number":1218,"context_line":"        self.assertEqual(http_client.CREATED, response.status_int)"},{"line_number":1219,"context_line":"        self.assertIsNone(response.json[\u0027portgroup_uuid\u0027])"},{"line_number":1220,"context_line":""},{"line_number":1221,"context_line":"    def test_create_port_no_vif_pxe_en_pg_sps_en(self):"},{"line_number":1222,"context_line":"        pdict \u003d post_get_test_port("},{"line_number":1223,"context_line":"            portgroup_uuid\u003dself.portgroup.uuid,"}],"source_content_type":"text/x-python","patch_set":23,"id":"7a77a97e_efdd08e1","line":1220,"in_reply_to":"7a77a97e_a9834203","updated":"2016-11-17 13:53:44.000000000","message":"I\u0027ve thought about similar, using helper function makes tests more readable and clear.","commit_id":"a839b83001abc510147cbdbf6caec8bf9d0078d1"},{"author":{"_account_id":6618,"name":"Ruby Loo","email":"opensrloo@gmail.com","username":"rloo"},"change_message_id":"5c100233ef951c2caba7518c6175229210cbbe75","unresolved":false,"context_lines":[{"line_number":1317,"context_line":"                                  expect_errors\u003dTrue)"},{"line_number":1318,"context_line":"        self.assertEqual(\u0027application/json\u0027, response.content_type)"},{"line_number":1319,"context_line":"        self.assertEqual(http_client.CONFLICT, response.status_int)"},{"line_number":1320,"context_line":""},{"line_number":1321,"context_line":"    def test_create_port_min_api_version(self):"},{"line_number":1322,"context_line":"        pdict \u003d post_get_test_port("},{"line_number":1323,"context_line":"            node_uuid\u003dself.node.uuid)"}],"source_content_type":"text/x-python","patch_set":23,"id":"7a77a97e_bc862563","line":1320,"updated":"2016-11-16 15:49:38.000000000","message":"The problem with the comment you put above (line 1197) is that it relies on the reader to know how far the comment applies. It doesn\u0027t apply to any tests after this. Don\u0027t know if we want to put a comment here indicating \u0027end of comment\u0027.","commit_id":"a839b83001abc510147cbdbf6caec8bf9d0078d1"},{"author":{"_account_id":6618,"name":"Ruby Loo","email":"opensrloo@gmail.com","username":"rloo"},"change_message_id":"5c100233ef951c2caba7518c6175229210cbbe75","unresolved":false,"context_lines":[{"line_number":1328,"context_line":"        response \u003d self.post_json(\u0027/ports\u0027, pdict, headers\u003dheaders)"},{"line_number":1329,"context_line":"        self.assertEqual(\u0027application/json\u0027, response.content_type)"},{"line_number":1330,"context_line":"        self.assertEqual(http_client.CREATED, response.status_int)"},{"line_number":1331,"context_line":"        self.assertEqual(self.node.uuid, response.json[\u0027node_uuid\u0027])"},{"line_number":1332,"context_line":""},{"line_number":1333,"context_line":""},{"line_number":1334,"context_line":"@mock.patch.object(rpcapi.ConductorAPI, \u0027destroy_port\u0027)"}],"source_content_type":"text/x-python","patch_set":23,"id":"7a77a97e_1cb1d947","line":1331,"updated":"2016-11-16 15:49:38.000000000","message":"I\u0027m wondering why you added this test, and why you added it here. Should it be moved to be eg the first test, or before local_link_connection was added to ports? or maybe around line 1169 with the other tests around API versions?\n\nOr do this in a separate patch?","commit_id":"a839b83001abc510147cbdbf6caec8bf9d0078d1"},{"author":{"_account_id":6618,"name":"Ruby Loo","email":"opensrloo@gmail.com","username":"rloo"},"change_message_id":"687b8db10d10076daa91df4b77cb4b72d4f14bd8","unresolved":false,"context_lines":[{"line_number":1194,"context_line":"        self.assertEqual(\u0027application/json\u0027, response.content_type)"},{"line_number":1195,"context_line":"        self.assertEqual(http_client.FORBIDDEN, response.status_int)"},{"line_number":1196,"context_line":""},{"line_number":1197,"context_line":"    # NOTE(vsaienko) the tests below test create_port() with different input"},{"line_number":1198,"context_line":"    # data. The name of the test uses following abbreviation to reflect input"},{"line_number":1199,"context_line":"    # data that is used:"},{"line_number":1200,"context_line":"    # novif: create port without port.extra vif_port_id key"}],"source_content_type":"text/x-python","patch_set":24,"id":"7a77a97e_80ec53f4","line":1197,"updated":"2016-11-17 19:21:56.000000000","message":"with the changes you just made, I don\u0027t think it is necessary to have these comments. The tests are somewhat self-explanatory now.","commit_id":"51fd72f7d8a1d9ea80fb97aa238ddb34adfed62d"},{"author":{"_account_id":14525,"name":"Vasyl Saienko","email":"vsaienko@mirantis.com","username":"vsaienko"},"change_message_id":"d74dace43ef0f4bb7d13c0d1e0ec8fa1f15216c8","unresolved":false,"context_lines":[{"line_number":1194,"context_line":"        self.assertEqual(\u0027application/json\u0027, response.content_type)"},{"line_number":1195,"context_line":"        self.assertEqual(http_client.FORBIDDEN, response.status_int)"},{"line_number":1196,"context_line":""},{"line_number":1197,"context_line":"    # NOTE(vsaienko) the tests below test create_port() with different input"},{"line_number":1198,"context_line":"    # data. The name of the test uses following abbreviation to reflect input"},{"line_number":1199,"context_line":"    # data that is used:"},{"line_number":1200,"context_line":"    # novif: create port without port.extra vif_port_id key"}],"source_content_type":"text/x-python","patch_set":24,"id":"7a77a97e_e870770d","line":1197,"in_reply_to":"7a77a97e_80ec53f4","updated":"2016-11-18 10:56:17.000000000","message":"Done","commit_id":"51fd72f7d8a1d9ea80fb97aa238ddb34adfed62d"},{"author":{"_account_id":6618,"name":"Ruby Loo","email":"opensrloo@gmail.com","username":"rloo"},"change_message_id":"687b8db10d10076daa91df4b77cb4b72d4f14bd8","unresolved":false,"context_lines":[{"line_number":1315,"context_line":"        response \u003d self.post_json(\u0027/ports\u0027, pdict, headers\u003dheaders)"},{"line_number":1316,"context_line":"        self.assertEqual(\u0027application/json\u0027, response.content_type)"},{"line_number":1317,"context_line":"        self.assertEqual(http_client.CREATED, response.status_int)"},{"line_number":1318,"context_line":"        self.assertEqual(self.node.uuid, response.json[\u0027node_uuid\u0027])"},{"line_number":1319,"context_line":""},{"line_number":1320,"context_line":""},{"line_number":1321,"context_line":"@mock.patch.object(rpcapi.ConductorAPI, \u0027destroy_port\u0027)"}],"source_content_type":"text/x-python","patch_set":24,"id":"7a77a97e_40aebbe6","line":1318,"updated":"2016-11-17 19:21:56.000000000","message":"I still think it is odd to have this test here, instead of with the other tests above related to the api version.","commit_id":"51fd72f7d8a1d9ea80fb97aa238ddb34adfed62d"},{"author":{"_account_id":14525,"name":"Vasyl Saienko","email":"vsaienko@mirantis.com","username":"vsaienko"},"change_message_id":"d74dace43ef0f4bb7d13c0d1e0ec8fa1f15216c8","unresolved":false,"context_lines":[{"line_number":1315,"context_line":"        response \u003d self.post_json(\u0027/ports\u0027, pdict, headers\u003dheaders)"},{"line_number":1316,"context_line":"        self.assertEqual(\u0027application/json\u0027, response.content_type)"},{"line_number":1317,"context_line":"        self.assertEqual(http_client.CREATED, response.status_int)"},{"line_number":1318,"context_line":"        self.assertEqual(self.node.uuid, response.json[\u0027node_uuid\u0027])"},{"line_number":1319,"context_line":""},{"line_number":1320,"context_line":""},{"line_number":1321,"context_line":"@mock.patch.object(rpcapi.ConductorAPI, \u0027destroy_port\u0027)"}],"source_content_type":"text/x-python","patch_set":24,"id":"7a77a97e_43b4ec33","line":1318,"in_reply_to":"7a77a97e_40aebbe6","updated":"2016-11-18 10:56:17.000000000","message":"Done","commit_id":"51fd72f7d8a1d9ea80fb97aa238ddb34adfed62d"},{"author":{"_account_id":12356,"name":"Vladyslav Drok","email":"vdrok@mirantis.com","username":"vdrok"},"change_message_id":"680b76ea5d660a66372576b785c98b3657b26a12","unresolved":false,"context_lines":[{"line_number":958,"context_line":"    def test_create_port_min_api_version(self):"},{"line_number":959,"context_line":"        pdict \u003d post_get_test_port("},{"line_number":960,"context_line":"            node_uuid\u003dself.node.uuid)"},{"line_number":961,"context_line":"        pdict.pop(\u0027local_link_connection\u0027)"},{"line_number":962,"context_line":"        pdict.pop(\u0027pxe_enabled\u0027)"},{"line_number":963,"context_line":"        pdict.pop(\u0027extra\u0027)"},{"line_number":964,"context_line":"        headers \u003d {api_base.Version.string: str(api_v1.MIN_VER)}"},{"line_number":965,"context_line":"        response \u003d self.post_json(\u0027/ports\u0027, pdict, headers\u003dheaders)"},{"line_number":966,"context_line":"        self.assertEqual(\u0027application/json\u0027, response.content_type)"}],"source_content_type":"text/x-python","patch_set":25,"id":"5a74a57a_2cb5bacf","line":963,"range":{"start_line":961,"start_character":8,"end_line":963,"end_character":26},"updated":"2016-11-30 14:07:14.000000000","message":"It\u0027s better to change port_post_data the same way as node_post_data, to avoid such things in future.\n\nAlso, you\u0027re not unsetting the pdict[portgroup_uuid], we have a bug in post method of port, will file it and fix separately.","commit_id":"c8d518898e27951123ad7816337d2a0f862ea5b4"}],"ironic/tests/unit/conductor/test_manager.py":[{"author":{"_account_id":10342,"name":"Jay Faulkner","display_name":"JayF","email":"jay@jvf.cc","username":"JayF","status":"youtube.com/@oss-gr / podcast.gr-oss.io"},"change_message_id":"5b008a70c070533d864a55fe96ced4f947385be7","unresolved":false,"context_lines":[{"line_number":3134,"context_line":""},{"line_number":3135,"context_line":"    @mock.patch(\u0027ironic.dhcp.neutron.NeutronDHCPApi.update_port_dhcp_opts\u0027)"},{"line_number":3136,"context_line":"    def test_update_port_vif_pxe_en_no_pg(self,"},{"line_number":3137,"context_line":"                                          dhcp_update_mock):"},{"line_number":3138,"context_line":"        node \u003d obj_utils.create_test_node(self.context, driver\u003d\u0027fake\u0027,"},{"line_number":3139,"context_line":"                                          provision_state\u003dstates.ENROLL)"},{"line_number":3140,"context_line":"        port \u003d obj_utils.create_test_port(self.context, node_id\u003dnode.id,"}],"source_content_type":"text/x-python","patch_set":22,"id":"7a77a97e_5de53d35","line":3137,"updated":"2016-11-15 18:16:09.000000000","message":"These names are hard to grok here, too.","commit_id":"a5f7c157d1fe0636c5f54dfbd5a9d9f381bd7544"},{"author":{"_account_id":14525,"name":"Vasyl Saienko","email":"vsaienko@mirantis.com","username":"vsaienko"},"change_message_id":"b6f752530fbf676aba8a597a7c78aa8a1155a49b","unresolved":false,"context_lines":[{"line_number":3134,"context_line":""},{"line_number":3135,"context_line":"    @mock.patch(\u0027ironic.dhcp.neutron.NeutronDHCPApi.update_port_dhcp_opts\u0027)"},{"line_number":3136,"context_line":"    def test_update_port_vif_pxe_en_no_pg(self,"},{"line_number":3137,"context_line":"                                          dhcp_update_mock):"},{"line_number":3138,"context_line":"        node \u003d obj_utils.create_test_node(self.context, driver\u003d\u0027fake\u0027,"},{"line_number":3139,"context_line":"                                          provision_state\u003dstates.ENROLL)"},{"line_number":3140,"context_line":"        port \u003d obj_utils.create_test_port(self.context, node_id\u003dnode.id,"}],"source_content_type":"text/x-python","patch_set":22,"id":"7a77a97e_470d433d","line":3137,"in_reply_to":"7a77a97e_5de53d35","updated":"2016-11-16 12:38:05.000000000","message":"Done","commit_id":"a5f7c157d1fe0636c5f54dfbd5a9d9f381bd7544"},{"author":{"_account_id":6618,"name":"Ruby Loo","email":"opensrloo@gmail.com","username":"rloo"},"change_message_id":"687b8db10d10076daa91df4b77cb4b72d4f14bd8","unresolved":false,"context_lines":[{"line_number":3110,"context_line":"        port.refresh()"},{"line_number":3111,"context_line":"        self.assertEqual(True, port.pxe_enabled)"},{"line_number":3112,"context_line":""},{"line_number":3113,"context_line":"    # NOTE(vsaienko) the tests below test update_port() with different input"},{"line_number":3114,"context_line":"    # data. The name of the test uses following abbreviation to reflect input"},{"line_number":3115,"context_line":"    # data that is used:"},{"line_number":3116,"context_line":"    # novif: update port without port.extra vif_port_id key set"}],"source_content_type":"text/x-python","patch_set":24,"id":"7a77a97e_3b12d457","line":3113,"updated":"2016-11-17 19:21:56.000000000","message":"This comment is probably not needed anymore, the tests seem self-explanatory now.","commit_id":"51fd72f7d8a1d9ea80fb97aa238ddb34adfed62d"},{"author":{"_account_id":14525,"name":"Vasyl Saienko","email":"vsaienko@mirantis.com","username":"vsaienko"},"change_message_id":"d74dace43ef0f4bb7d13c0d1e0ec8fa1f15216c8","unresolved":false,"context_lines":[{"line_number":3110,"context_line":"        port.refresh()"},{"line_number":3111,"context_line":"        self.assertEqual(True, port.pxe_enabled)"},{"line_number":3112,"context_line":""},{"line_number":3113,"context_line":"    # NOTE(vsaienko) the tests below test update_port() with different input"},{"line_number":3114,"context_line":"    # data. The name of the test uses following abbreviation to reflect input"},{"line_number":3115,"context_line":"    # data that is used:"},{"line_number":3116,"context_line":"    # novif: update port without port.extra vif_port_id key set"}],"source_content_type":"text/x-python","patch_set":24,"id":"7a77a97e_63e008ce","line":3113,"in_reply_to":"7a77a97e_3b12d457","updated":"2016-11-18 10:56:17.000000000","message":"Done","commit_id":"51fd72f7d8a1d9ea80fb97aa238ddb34adfed62d"},{"author":{"_account_id":6618,"name":"Ruby Loo","email":"opensrloo@gmail.com","username":"rloo"},"change_message_id":"687b8db10d10076daa91df4b77cb4b72d4f14bd8","unresolved":false,"context_lines":[{"line_number":3123,"context_line":"    #                   standalone_ports_supported \u003d True"},{"line_number":3124,"context_line":"    # nostandalone_ports: add port to port group with"},{"line_number":3125,"context_line":"    #                     standalone_ports_supported \u003d False"},{"line_number":3126,"context_line":"    def _test_update_port(self, has_vif\u003dFalse, in_portgroup\u003dFalse,"},{"line_number":3127,"context_line":"                          pxe_enabled\u003dTrue, standalone_ports\u003dTrue,"},{"line_number":3128,"context_line":"                          expect_errors\u003dFalse):"},{"line_number":3129,"context_line":"        node \u003d obj_utils.create_test_node(self.context, driver\u003d\u0027fake\u0027,"}],"source_content_type":"text/x-python","patch_set":24,"id":"7a77a97e_00ebe378","line":3126,"updated":"2016-11-17 19:21:56.000000000","message":"this is testing the update of a port that is initially not in a portgroup.\n\nDo we also want to test for the case of a port in a portgroup, updating it to ... ??\n\nI\u0027m also not sure that we always want to test a port with vif \u0026 pxe both being changed always. As opposed to eg, something else in port being changed but vif \u0026 pxe are both unchanged, or if only vif or if only pxe is changed.\n\nThere is a combination explosion here which may be overkill.","commit_id":"51fd72f7d8a1d9ea80fb97aa238ddb34adfed62d"},{"author":{"_account_id":14525,"name":"Vasyl Saienko","email":"vsaienko@mirantis.com","username":"vsaienko"},"change_message_id":"d74dace43ef0f4bb7d13c0d1e0ec8fa1f15216c8","unresolved":false,"context_lines":[{"line_number":3123,"context_line":"    #                   standalone_ports_supported \u003d True"},{"line_number":3124,"context_line":"    # nostandalone_ports: add port to port group with"},{"line_number":3125,"context_line":"    #                     standalone_ports_supported \u003d False"},{"line_number":3126,"context_line":"    def _test_update_port(self, has_vif\u003dFalse, in_portgroup\u003dFalse,"},{"line_number":3127,"context_line":"                          pxe_enabled\u003dTrue, standalone_ports\u003dTrue,"},{"line_number":3128,"context_line":"                          expect_errors\u003dFalse):"},{"line_number":3129,"context_line":"        node \u003d obj_utils.create_test_node(self.context, driver\u003d\u0027fake\u0027,"}],"source_content_type":"text/x-python","patch_set":24,"id":"7a77a97e_c3855ccf","line":3126,"in_reply_to":"7a77a97e_00ebe378","updated":"2016-11-18 10:56:17.000000000","message":"It is not important what was the settings of current port portgroup. It is important what settings are in new portgroup. As we compare new portgroup.standalone_ports_supported and port.pxe_enabled combination.\n\nI think we should cover more cases as we have.","commit_id":"51fd72f7d8a1d9ea80fb97aa238ddb34adfed62d"},{"author":{"_account_id":12356,"name":"Vladyslav Drok","email":"vdrok@mirantis.com","username":"vdrok"},"change_message_id":"680b76ea5d660a66372576b785c98b3657b26a12","unresolved":false,"context_lines":[{"line_number":3129,"context_line":"            opposite_extra \u003d extra_vif"},{"line_number":3130,"context_line":"        opposite_pxe_enabled \u003d not pxe_enabled"},{"line_number":3131,"context_line":""},{"line_number":3132,"context_line":"        pg_id \u003d None"},{"line_number":3133,"context_line":"        if in_portgroup:"},{"line_number":3134,"context_line":"            pg_id \u003d pg.id"},{"line_number":3135,"context_line":""}],"source_content_type":"text/x-python","patch_set":25,"id":"5a74a57a_0ab0dd8a","line":3132,"range":{"start_line":3132,"start_character":16,"end_line":3132,"end_character":20},"updated":"2016-11-30 14:07:14.000000000","message":"nit:\n\n\u003d pg.id if in_portgroup else None","commit_id":"c8d518898e27951123ad7816337d2a0f862ea5b4"},{"author":{"_account_id":12356,"name":"Vladyslav Drok","email":"vdrok@mirantis.com","username":"vdrok"},"change_message_id":"680b76ea5d660a66372576b785c98b3657b26a12","unresolved":false,"context_lines":[{"line_number":3613,"context_line":"                                          provision_state\u003dstates.ENROLL)"},{"line_number":3614,"context_line":""},{"line_number":3615,"context_line":"        # NOTE(vsaienko) make sure that old values are opposite to new,"},{"line_number":3616,"context_line":"        # to guarantee that object.what_changes() returns true."},{"line_number":3617,"context_line":"        old_standalone_ports_supported \u003d not standalone_ports"},{"line_number":3618,"context_line":""},{"line_number":3619,"context_line":"        pg \u003d obj_utils.create_test_portgroup("}],"source_content_type":"text/x-python","patch_set":25,"id":"5a74a57a_30cb4c74","line":3616,"range":{"start_line":3616,"start_character":35,"end_line":3616,"end_character":47},"updated":"2016-11-30 14:07:14.000000000","message":"what_changed","commit_id":"c8d518898e27951123ad7816337d2a0f862ea5b4"},{"author":{"_account_id":12356,"name":"Vladyslav Drok","email":"vdrok@mirantis.com","username":"vdrok"},"change_message_id":"680b76ea5d660a66372576b785c98b3657b26a12","unresolved":false,"context_lines":[{"line_number":3640,"context_line":"                              self.service.update_portgroup,"},{"line_number":3641,"context_line":"                              self.context, pg)"},{"line_number":3642,"context_line":""},{"line_number":3643,"context_line":"    def test_update_portgroup_standalone_ports_noports(self):"},{"line_number":3644,"context_line":"        self._test_update_portgroup(with_ports\u003dFalse, standalone_ports\u003dTrue,"},{"line_number":3645,"context_line":"                                    expect_errors\u003dFalse)"},{"line_number":3646,"context_line":""}],"source_content_type":"text/x-python","patch_set":25,"id":"5a74a57a_70d8641e","line":3643,"updated":"2016-11-30 14:07:14.000000000","message":"nostandalone + noports missing, but that case is kind of obvious :)","commit_id":"c8d518898e27951123ad7816337d2a0f862ea5b4"}],"releasenotes/notes/rely-on-standalone-ports-supported-8153e1135787828b.yaml":[{"author":{"_account_id":9542,"name":"Pavlo Shchelokovskyy","email":"pshchelokovskyy@mirantis.com","username":"pshchelo"},"change_message_id":"cf73cca96926c580af53a1e60d1cd81fe8f7ff84","unresolved":false,"context_lines":[{"line_number":1,"context_line":"---"},{"line_number":2,"context_line":"other:"},{"line_number":3,"context_line":"  - |"},{"line_number":4,"context_line":"    Some hardware doesn\u0027t support portgroup fallback to single interface"},{"line_number":5,"context_line":"    fashion. This imposes aditional restrictions on ports, for example"},{"line_number":6,"context_line":"    such ports will not support booting by PXE."},{"line_number":7,"context_line":"    Add restrictions setting ``pxe_enabled\u003dTrue`` on ports that are members"}],"source_content_type":"text/x-yaml","patch_set":20,"id":"9a629dbe_4186b3db","line":4,"updated":"2016-11-10 15:54:34.000000000","message":"Rewording suggestion:\n\nSome combinations of port channel protocols and hardware might not support falling back to single interface mode. If static portgroup was created under such circumstances, additional restrictions apply to such ports and portgroups, for example such ports will not support booting over PXE.\n\nStarting with Ironic API version 1.25 certain restrictions are imposed on values of port properties for ports belonging to a portgroup:\n\n* ``port.pxe_enabled\u003dTrue`` can not be set if ``portgroup.standalone_ports_supported\u003dFalse`` when port is a member of a portgroup\n* ``portgroup.standalone_ports_supported\u003dFalse`` can not be set on a portgroup if at least one port in a portgroup has ``port.pxe_enabled\u003dTrue``\n* ``port.extra.vif_port_id`` can not be set on port that is a member of a portgroup with ``portgroup.standalone_ports_supported\u003dFalse``\n* ``portgroup.standalone_ports_supported\u003dFalse`` can not be set on a portgroup if it has at least one port with ``port.extra.vif_port_id`` set","commit_id":"284a4746083facbe38e0e6db70e3f37c5c987cd2"},{"author":{"_account_id":14525,"name":"Vasyl Saienko","email":"vsaienko@mirantis.com","username":"vsaienko"},"change_message_id":"2f3b5daefbaaaaead773f0c659cc81f5870fdb13","unresolved":false,"context_lines":[{"line_number":1,"context_line":"---"},{"line_number":2,"context_line":"other:"},{"line_number":3,"context_line":"  - |"},{"line_number":4,"context_line":"    Some hardware doesn\u0027t support portgroup fallback to single interface"},{"line_number":5,"context_line":"    fashion. This imposes aditional restrictions on ports, for example"},{"line_number":6,"context_line":"    such ports will not support booting by PXE."},{"line_number":7,"context_line":"    Add restrictions setting ``pxe_enabled\u003dTrue`` on ports that are members"}],"source_content_type":"text/x-yaml","patch_set":20,"id":"9a629dbe_5474af66","line":4,"in_reply_to":"9a629dbe_4186b3db","updated":"2016-11-10 16:09:46.000000000","message":"Done","commit_id":"284a4746083facbe38e0e6db70e3f37c5c987cd2"},{"author":{"_account_id":10342,"name":"Jay Faulkner","display_name":"JayF","email":"jay@jvf.cc","username":"JayF","status":"youtube.com/@oss-gr / podcast.gr-oss.io"},"change_message_id":"7f1e4562861d5d4bec74fa198734ed80f949caac","unresolved":false,"context_lines":[{"line_number":2,"context_line":"other:"},{"line_number":3,"context_line":"  - |"},{"line_number":4,"context_line":"    Some hardware doesn\u0027t support portgroup fallback to single interface"},{"line_number":5,"context_line":"    fashion. This imposes aditional restrictions on ports, for example"},{"line_number":6,"context_line":"    such ports will not support booting by PXE."},{"line_number":7,"context_line":"    Add restrictions setting ``pxe_enabled\u003dTrue`` on ports that are members"},{"line_number":8,"context_line":"    of portgroups with ``standalone_ports_supported\u003dFalse``. And vice versa"}],"source_content_type":"text/x-yaml","patch_set":20,"id":"9a629dbe_2adaaf4c","line":5,"updated":"2016-11-09 15:44:07.000000000","message":"I\u0027m not 100% sure exactly what you\u0027re trying to say here? What do you mean by \"Some hardware doesn\u0027t support port group fallback to single interface fashion.\".\n\nI think this whole release note needs to be reworded to be more clear about what the actual change is, and if operators need to care about it.","commit_id":"284a4746083facbe38e0e6db70e3f37c5c987cd2"},{"author":{"_account_id":14525,"name":"Vasyl Saienko","email":"vsaienko@mirantis.com","username":"vsaienko"},"change_message_id":"2f3b5daefbaaaaead773f0c659cc81f5870fdb13","unresolved":false,"context_lines":[{"line_number":2,"context_line":"other:"},{"line_number":3,"context_line":"  - |"},{"line_number":4,"context_line":"    Some hardware doesn\u0027t support portgroup fallback to single interface"},{"line_number":5,"context_line":"    fashion. This imposes aditional restrictions on ports, for example"},{"line_number":6,"context_line":"    such ports will not support booting by PXE."},{"line_number":7,"context_line":"    Add restrictions setting ``pxe_enabled\u003dTrue`` on ports that are members"},{"line_number":8,"context_line":"    of portgroups with ``standalone_ports_supported\u003dFalse``. And vice versa"}],"source_content_type":"text/x-yaml","patch_set":20,"id":"9a629dbe_1456b7cd","line":5,"in_reply_to":"9a629dbe_2adaaf4c","updated":"2016-11-10 16:09:46.000000000","message":"rephrase as Pavlo suggested.","commit_id":"284a4746083facbe38e0e6db70e3f37c5c987cd2"},{"author":{"_account_id":6618,"name":"Ruby Loo","email":"opensrloo@gmail.com","username":"rloo"},"change_message_id":"6607c79dcffb6098fd050a2f58e3f2e7abcce5f4","unresolved":false,"context_lines":[{"line_number":9,"context_line":"    Starting with Ironic API version 1.25 certain restrictions are imposed on"},{"line_number":10,"context_line":"    values of port properties for ports belonging to a port group:"},{"line_number":11,"context_line":""},{"line_number":12,"context_line":"    * ``port.pxe_enabled\u003dTrue`` can not be set if"},{"line_number":13,"context_line":"      ``portgroup.standalone_ports_supported\u003dFalse`` when port is a member of"},{"line_number":14,"context_line":"      a port group."},{"line_number":15,"context_line":"    * ``portgroup.standalone_ports_supported\u003dFalse`` can not be set on a"}],"source_content_type":"text/x-yaml","patch_set":21,"id":"9a629dbe_78d6f828","line":12,"updated":"2016-11-10 23:16:14.000000000","message":"i don\u0027t know if we care, it is more English as \u0027port.pxe_enabled cannot be set to True if ...\u0027","commit_id":"0f41b6005feaf0fabd978900285fbfba453533e5"},{"author":{"_account_id":14525,"name":"Vasyl Saienko","email":"vsaienko@mirantis.com","username":"vsaienko"},"change_message_id":"3b5fc578b94d72e38dc354658225141780eca0c4","unresolved":false,"context_lines":[{"line_number":9,"context_line":"    Starting with Ironic API version 1.25 certain restrictions are imposed on"},{"line_number":10,"context_line":"    values of port properties for ports belonging to a port group:"},{"line_number":11,"context_line":""},{"line_number":12,"context_line":"    * ``port.pxe_enabled\u003dTrue`` can not be set if"},{"line_number":13,"context_line":"      ``portgroup.standalone_ports_supported\u003dFalse`` when port is a member of"},{"line_number":14,"context_line":"      a port group."},{"line_number":15,"context_line":"    * ``portgroup.standalone_ports_supported\u003dFalse`` can not be set on a"}],"source_content_type":"text/x-yaml","patch_set":21,"id":"9a629dbe_10b948cc","line":12,"in_reply_to":"9a629dbe_78d6f828","updated":"2016-11-11 11:10:33.000000000","message":"Done","commit_id":"0f41b6005feaf0fabd978900285fbfba453533e5"},{"author":{"_account_id":6618,"name":"Ruby Loo","email":"opensrloo@gmail.com","username":"rloo"},"change_message_id":"6607c79dcffb6098fd050a2f58e3f2e7abcce5f4","unresolved":false,"context_lines":[{"line_number":10,"context_line":"    values of port properties for ports belonging to a port group:"},{"line_number":11,"context_line":""},{"line_number":12,"context_line":"    * ``port.pxe_enabled\u003dTrue`` can not be set if"},{"line_number":13,"context_line":"      ``portgroup.standalone_ports_supported\u003dFalse`` when port is a member of"},{"line_number":14,"context_line":"      a port group."},{"line_number":15,"context_line":"    * ``portgroup.standalone_ports_supported\u003dFalse`` can not be set on a"},{"line_number":16,"context_line":"       portgroup if at least one port in a port group has"}],"source_content_type":"text/x-yaml","patch_set":21,"id":"9a629dbe_38c80074","line":13,"updated":"2016-11-10 23:16:14.000000000","message":"should we s/\u003d/\u003d\u003d/ or s/\u003d/ is / ?","commit_id":"0f41b6005feaf0fabd978900285fbfba453533e5"},{"author":{"_account_id":14525,"name":"Vasyl Saienko","email":"vsaienko@mirantis.com","username":"vsaienko"},"change_message_id":"3b5fc578b94d72e38dc354658225141780eca0c4","unresolved":false,"context_lines":[{"line_number":10,"context_line":"    values of port properties for ports belonging to a port group:"},{"line_number":11,"context_line":""},{"line_number":12,"context_line":"    * ``port.pxe_enabled\u003dTrue`` can not be set if"},{"line_number":13,"context_line":"      ``portgroup.standalone_ports_supported\u003dFalse`` when port is a member of"},{"line_number":14,"context_line":"      a port group."},{"line_number":15,"context_line":"    * ``portgroup.standalone_ports_supported\u003dFalse`` can not be set on a"},{"line_number":16,"context_line":"       portgroup if at least one port in a port group has"}],"source_content_type":"text/x-yaml","patch_set":21,"id":"9a629dbe_b0f6dc8c","line":13,"in_reply_to":"9a629dbe_38c80074","updated":"2016-11-11 11:10:33.000000000","message":"Done","commit_id":"0f41b6005feaf0fabd978900285fbfba453533e5"},{"author":{"_account_id":6618,"name":"Ruby Loo","email":"opensrloo@gmail.com","username":"rloo"},"change_message_id":"6607c79dcffb6098fd050a2f58e3f2e7abcce5f4","unresolved":false,"context_lines":[{"line_number":11,"context_line":""},{"line_number":12,"context_line":"    * ``port.pxe_enabled\u003dTrue`` can not be set if"},{"line_number":13,"context_line":"      ``portgroup.standalone_ports_supported\u003dFalse`` when port is a member of"},{"line_number":14,"context_line":"      a port group."},{"line_number":15,"context_line":"    * ``portgroup.standalone_ports_supported\u003dFalse`` can not be set on a"},{"line_number":16,"context_line":"       portgroup if at least one port in a port group has"},{"line_number":17,"context_line":"       ``port.pxe_enabled\u003dTrue``"}],"source_content_type":"text/x-yaml","patch_set":21,"id":"9a629dbe_d8ad449c","line":14,"updated":"2016-11-10 23:16:14.000000000","message":"s/a/that/\n\nOr something like \"port.pxe_enabled cannot be set to True if the port is a member of a port group with portgroup.standalone_ports_supported already set to False.\u0027\n\nWhich makes me wonder if we should be more English and describe it like \u0027If a portgroup doesn\u0027t support standalone ports, the ports of that portgroup cannot have pxe_enabled set to True OR specify their extra.vif_port_id.\u0027","commit_id":"0f41b6005feaf0fabd978900285fbfba453533e5"},{"author":{"_account_id":14525,"name":"Vasyl Saienko","email":"vsaienko@mirantis.com","username":"vsaienko"},"change_message_id":"3b5fc578b94d72e38dc354658225141780eca0c4","unresolved":false,"context_lines":[{"line_number":11,"context_line":""},{"line_number":12,"context_line":"    * ``port.pxe_enabled\u003dTrue`` can not be set if"},{"line_number":13,"context_line":"      ``portgroup.standalone_ports_supported\u003dFalse`` when port is a member of"},{"line_number":14,"context_line":"      a port group."},{"line_number":15,"context_line":"    * ``portgroup.standalone_ports_supported\u003dFalse`` can not be set on a"},{"line_number":16,"context_line":"       portgroup if at least one port in a port group has"},{"line_number":17,"context_line":"       ``port.pxe_enabled\u003dTrue``"}],"source_content_type":"text/x-yaml","patch_set":21,"id":"9a629dbe_b0d97cf5","line":14,"in_reply_to":"9a629dbe_d8ad449c","updated":"2016-11-11 11:10:33.000000000","message":"Done","commit_id":"0f41b6005feaf0fabd978900285fbfba453533e5"},{"author":{"_account_id":14760,"name":"John L. Villalovos","email":"openstack.org@sodarock.com","username":"jlvillal"},"change_message_id":"247b92c4d9986b1750ccc0a2f7f207b4f309fb89","unresolved":false,"context_lines":[{"line_number":2,"context_line":"other:"},{"line_number":3,"context_line":"  - |"},{"line_number":4,"context_line":"    Some combinations of port group protocols and hardware might not support"},{"line_number":5,"context_line":"    falling back to single interface mode. If static port group was created"},{"line_number":6,"context_line":"    under such circumstances, additional restrictions apply to such ports and"},{"line_number":7,"context_line":"    port groups, for example such ports will not support booting over PXE."},{"line_number":8,"context_line":""}],"source_content_type":"text/x-yaml","patch_set":22,"id":"7a77a97e_800317b8","line":5,"range":{"start_line":5,"start_character":43,"end_line":5,"end_character":52},"updated":"2016-11-14 22:45:16.000000000","message":"If a static","commit_id":"a5f7c157d1fe0636c5f54dfbd5a9d9f381bd7544"},{"author":{"_account_id":14525,"name":"Vasyl Saienko","email":"vsaienko@mirantis.com","username":"vsaienko"},"change_message_id":"b6f752530fbf676aba8a597a7c78aa8a1155a49b","unresolved":false,"context_lines":[{"line_number":2,"context_line":"other:"},{"line_number":3,"context_line":"  - |"},{"line_number":4,"context_line":"    Some combinations of port group protocols and hardware might not support"},{"line_number":5,"context_line":"    falling back to single interface mode. If static port group was created"},{"line_number":6,"context_line":"    under such circumstances, additional restrictions apply to such ports and"},{"line_number":7,"context_line":"    port groups, for example such ports will not support booting over PXE."},{"line_number":8,"context_line":""}],"source_content_type":"text/x-yaml","patch_set":22,"id":"7a77a97e_13363552","line":5,"range":{"start_line":5,"start_character":43,"end_line":5,"end_character":52},"in_reply_to":"7a77a97e_800317b8","updated":"2016-11-16 12:38:05.000000000","message":"Done","commit_id":"a5f7c157d1fe0636c5f54dfbd5a9d9f381bd7544"},{"author":{"_account_id":6618,"name":"Ruby Loo","email":"opensrloo@gmail.com","username":"rloo"},"change_message_id":"d0153287f02dd0ef531cd2aedb11c9dfb7ba5697","unresolved":false,"context_lines":[{"line_number":3,"context_line":"  - |"},{"line_number":4,"context_line":"    Some combinations of port group protocols and hardware might not support"},{"line_number":5,"context_line":"    falling back to single interface mode. If static port group was created"},{"line_number":6,"context_line":"    under such circumstances, additional restrictions apply to such ports and"},{"line_number":7,"context_line":"    port groups, for example such ports will not support booting over PXE."},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"    Starting with Ironic API version 1.25 certain restrictions are imposed on"}],"source_content_type":"text/x-yaml","patch_set":22,"id":"7a77a97e_28fd9a3a","line":6,"updated":"2016-11-15 21:55:31.000000000","message":"Given how detailed this release note is, maybe tie in the general description with the detailed portgroup stuff below via\n\ns/circumstances/circumstances (where portgroup.standalone_ports_supported \u003d False)/","commit_id":"a5f7c157d1fe0636c5f54dfbd5a9d9f381bd7544"},{"author":{"_account_id":14525,"name":"Vasyl Saienko","email":"vsaienko@mirantis.com","username":"vsaienko"},"change_message_id":"b6f752530fbf676aba8a597a7c78aa8a1155a49b","unresolved":false,"context_lines":[{"line_number":3,"context_line":"  - |"},{"line_number":4,"context_line":"    Some combinations of port group protocols and hardware might not support"},{"line_number":5,"context_line":"    falling back to single interface mode. If static port group was created"},{"line_number":6,"context_line":"    under such circumstances, additional restrictions apply to such ports and"},{"line_number":7,"context_line":"    port groups, for example such ports will not support booting over PXE."},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"    Starting with Ironic API version 1.25 certain restrictions are imposed on"}],"source_content_type":"text/x-yaml","patch_set":22,"id":"7a77a97e_f3ca9919","line":6,"in_reply_to":"7a77a97e_28fd9a3a","updated":"2016-11-16 12:38:05.000000000","message":"Done","commit_id":"a5f7c157d1fe0636c5f54dfbd5a9d9f381bd7544"},{"author":{"_account_id":14760,"name":"John L. Villalovos","email":"openstack.org@sodarock.com","username":"jlvillal"},"change_message_id":"247b92c4d9986b1750ccc0a2f7f207b4f309fb89","unresolved":false,"context_lines":[{"line_number":4,"context_line":"    Some combinations of port group protocols and hardware might not support"},{"line_number":5,"context_line":"    falling back to single interface mode. If static port group was created"},{"line_number":6,"context_line":"    under such circumstances, additional restrictions apply to such ports and"},{"line_number":7,"context_line":"    port groups, for example such ports will not support booting over PXE."},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"    Starting with Ironic API version 1.25 certain restrictions are imposed on"},{"line_number":10,"context_line":"    values of port properties for ports belonging to a port group:"}],"source_content_type":"text/x-yaml","patch_set":22,"id":"7a77a97e_c087cf10","line":7,"updated":"2016-11-14 22:45:16.000000000","message":"I commented on L19 about this.\n\nBut I think maybe an explanation of what is not allowed, or a listing of what is not allowed would be useful.\n\n * PXE can not be enabled on a port group that has standalone_ports_supported set to False, as PXE only works on non-bonded ports   (or something like that)\n\n * VIF port ID can not be enabled on a port group that has standalone_ports_supported set to False, as ....","commit_id":"a5f7c157d1fe0636c5f54dfbd5a9d9f381bd7544"},{"author":{"_account_id":14525,"name":"Vasyl Saienko","email":"vsaienko@mirantis.com","username":"vsaienko"},"change_message_id":"b6f752530fbf676aba8a597a7c78aa8a1155a49b","unresolved":false,"context_lines":[{"line_number":4,"context_line":"    Some combinations of port group protocols and hardware might not support"},{"line_number":5,"context_line":"    falling back to single interface mode. If static port group was created"},{"line_number":6,"context_line":"    under such circumstances, additional restrictions apply to such ports and"},{"line_number":7,"context_line":"    port groups, for example such ports will not support booting over PXE."},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"    Starting with Ironic API version 1.25 certain restrictions are imposed on"},{"line_number":10,"context_line":"    values of port properties for ports belonging to a port group:"}],"source_content_type":"text/x-yaml","patch_set":22,"id":"7a77a97e_b673af14","line":7,"in_reply_to":"7a77a97e_c087cf10","updated":"2016-11-16 12:38:05.000000000","message":"added description on L19","commit_id":"a5f7c157d1fe0636c5f54dfbd5a9d9f381bd7544"},{"author":{"_account_id":14760,"name":"John L. Villalovos","email":"openstack.org@sodarock.com","username":"jlvillal"},"change_message_id":"247b92c4d9986b1750ccc0a2f7f207b4f309fb89","unresolved":false,"context_lines":[{"line_number":6,"context_line":"    under such circumstances, additional restrictions apply to such ports and"},{"line_number":7,"context_line":"    port groups, for example such ports will not support booting over PXE."},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"    Starting with Ironic API version 1.25 certain restrictions are imposed on"},{"line_number":10,"context_line":"    values of port properties for ports belonging to a port group:"},{"line_number":11,"context_line":""},{"line_number":12,"context_line":"    * ``port.pxe_enabled`` cannot be set to True if the port is a member of"}],"source_content_type":"text/x-yaml","patch_set":22,"id":"7a77a97e_202b2332","line":9,"range":{"start_line":9,"start_character":37,"end_line":9,"end_character":41},"updated":"2016-11-14 22:45:16.000000000","message":"Is it 1.25? Or 1.26 as I see in versions.py\n\nI think 1.26","commit_id":"a5f7c157d1fe0636c5f54dfbd5a9d9f381bd7544"},{"author":{"_account_id":6618,"name":"Ruby Loo","email":"opensrloo@gmail.com","username":"rloo"},"change_message_id":"d0153287f02dd0ef531cd2aedb11c9dfb7ba5697","unresolved":false,"context_lines":[{"line_number":6,"context_line":"    under such circumstances, additional restrictions apply to such ports and"},{"line_number":7,"context_line":"    port groups, for example such ports will not support booting over PXE."},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"    Starting with Ironic API version 1.25 certain restrictions are imposed on"},{"line_number":10,"context_line":"    values of port properties for ports belonging to a port group:"},{"line_number":11,"context_line":""},{"line_number":12,"context_line":"    * ``port.pxe_enabled`` cannot be set to True if the port is a member of"}],"source_content_type":"text/x-yaml","patch_set":22,"id":"7a77a97e_e8264215","line":9,"range":{"start_line":9,"start_character":37,"end_line":9,"end_character":41},"in_reply_to":"7a77a97e_202b2332","updated":"2016-11-15 21:55:31.000000000","message":"+ 1.26","commit_id":"a5f7c157d1fe0636c5f54dfbd5a9d9f381bd7544"},{"author":{"_account_id":14525,"name":"Vasyl Saienko","email":"vsaienko@mirantis.com","username":"vsaienko"},"change_message_id":"b6f752530fbf676aba8a597a7c78aa8a1155a49b","unresolved":false,"context_lines":[{"line_number":6,"context_line":"    under such circumstances, additional restrictions apply to such ports and"},{"line_number":7,"context_line":"    port groups, for example such ports will not support booting over PXE."},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"    Starting with Ironic API version 1.25 certain restrictions are imposed on"},{"line_number":10,"context_line":"    values of port properties for ports belonging to a port group:"},{"line_number":11,"context_line":""},{"line_number":12,"context_line":"    * ``port.pxe_enabled`` cannot be set to True if the port is a member of"}],"source_content_type":"text/x-yaml","patch_set":22,"id":"7a77a97e_73acc935","line":9,"range":{"start_line":9,"start_character":37,"end_line":9,"end_character":41},"in_reply_to":"7a77a97e_e8264215","updated":"2016-11-16 12:38:05.000000000","message":"We shouldn\u0027t bump API version. Explanation is below.","commit_id":"a5f7c157d1fe0636c5f54dfbd5a9d9f381bd7544"},{"author":{"_account_id":14760,"name":"John L. Villalovos","email":"openstack.org@sodarock.com","username":"jlvillal"},"change_message_id":"247b92c4d9986b1750ccc0a2f7f207b4f309fb89","unresolved":false,"context_lines":[{"line_number":15,"context_line":"    * ``portgroup.standalone_ports_supported`` cannot be set to False on a"},{"line_number":16,"context_line":"      portgroup if at least one port in that port group has"},{"line_number":17,"context_line":"      ``port.pxe_enabled\u003dTrue``"},{"line_number":18,"context_line":"    * ``port.extra.vif_port_id`` cannot be set on port that is a member of a"},{"line_number":19,"context_line":"      port group with ``portgroup.standalone_ports_supported\u003dFalse``"},{"line_number":20,"context_line":"    * ``portgroup.standalone_ports_supported`` cannot be set to False on a"},{"line_number":21,"context_line":"      port group if it has at least one port with ``port.extra.vif_port_id``"}],"source_content_type":"text/x-yaml","patch_set":22,"id":"7a77a97e_a01733ec","line":18,"range":{"start_line":18,"start_character":47,"end_line":18,"end_character":54},"updated":"2016-11-14 22:45:16.000000000","message":"on a port","commit_id":"a5f7c157d1fe0636c5f54dfbd5a9d9f381bd7544"},{"author":{"_account_id":14525,"name":"Vasyl Saienko","email":"vsaienko@mirantis.com","username":"vsaienko"},"change_message_id":"b6f752530fbf676aba8a597a7c78aa8a1155a49b","unresolved":false,"context_lines":[{"line_number":15,"context_line":"    * ``portgroup.standalone_ports_supported`` cannot be set to False on a"},{"line_number":16,"context_line":"      portgroup if at least one port in that port group has"},{"line_number":17,"context_line":"      ``port.pxe_enabled\u003dTrue``"},{"line_number":18,"context_line":"    * ``port.extra.vif_port_id`` cannot be set on port that is a member of a"},{"line_number":19,"context_line":"      port group with ``portgroup.standalone_ports_supported\u003dFalse``"},{"line_number":20,"context_line":"    * ``portgroup.standalone_ports_supported`` cannot be set to False on a"},{"line_number":21,"context_line":"      port group if it has at least one port with ``port.extra.vif_port_id``"}],"source_content_type":"text/x-yaml","patch_set":22,"id":"7a77a97e_b3a66151","line":18,"range":{"start_line":18,"start_character":47,"end_line":18,"end_character":54},"in_reply_to":"7a77a97e_a01733ec","updated":"2016-11-16 12:38:05.000000000","message":"Done","commit_id":"a5f7c157d1fe0636c5f54dfbd5a9d9f381bd7544"},{"author":{"_account_id":14760,"name":"John L. Villalovos","email":"openstack.org@sodarock.com","username":"jlvillal"},"change_message_id":"247b92c4d9986b1750ccc0a2f7f207b4f309fb89","unresolved":false,"context_lines":[{"line_number":16,"context_line":"      portgroup if at least one port in that port group has"},{"line_number":17,"context_line":"      ``port.pxe_enabled\u003dTrue``"},{"line_number":18,"context_line":"    * ``port.extra.vif_port_id`` cannot be set on port that is a member of a"},{"line_number":19,"context_line":"      port group with ``portgroup.standalone_ports_supported\u003dFalse``"},{"line_number":20,"context_line":"    * ``portgroup.standalone_ports_supported`` cannot be set to False on a"},{"line_number":21,"context_line":"      port group if it has at least one port with ``port.extra.vif_port_id``"},{"line_number":22,"context_line":"      set."}],"source_content_type":"text/x-yaml","patch_set":22,"id":"7a77a97e_60cb5b73","line":19,"updated":"2016-11-14 22:45:16.000000000","message":"I can understand PXE, an explanation of why VIF is not allowed would be good, in my opinion.","commit_id":"a5f7c157d1fe0636c5f54dfbd5a9d9f381bd7544"},{"author":{"_account_id":14525,"name":"Vasyl Saienko","email":"vsaienko@mirantis.com","username":"vsaienko"},"change_message_id":"b6f752530fbf676aba8a597a7c78aa8a1155a49b","unresolved":false,"context_lines":[{"line_number":16,"context_line":"      portgroup if at least one port in that port group has"},{"line_number":17,"context_line":"      ``port.pxe_enabled\u003dTrue``"},{"line_number":18,"context_line":"    * ``port.extra.vif_port_id`` cannot be set on port that is a member of a"},{"line_number":19,"context_line":"      port group with ``portgroup.standalone_ports_supported\u003dFalse``"},{"line_number":20,"context_line":"    * ``portgroup.standalone_ports_supported`` cannot be set to False on a"},{"line_number":21,"context_line":"      port group if it has at least one port with ``port.extra.vif_port_id``"},{"line_number":22,"context_line":"      set."}],"source_content_type":"text/x-yaml","patch_set":22,"id":"7a77a97e_732129b4","line":19,"in_reply_to":"7a77a97e_60cb5b73","updated":"2016-11-16 12:38:05.000000000","message":"Done","commit_id":"a5f7c157d1fe0636c5f54dfbd5a9d9f381bd7544"},{"author":{"_account_id":6618,"name":"Ruby Loo","email":"opensrloo@gmail.com","username":"rloo"},"change_message_id":"d0153287f02dd0ef531cd2aedb11c9dfb7ba5697","unresolved":false,"context_lines":[{"line_number":19,"context_line":"      port group with ``portgroup.standalone_ports_supported\u003dFalse``"},{"line_number":20,"context_line":"    * ``portgroup.standalone_ports_supported`` cannot be set to False on a"},{"line_number":21,"context_line":"      port group if it has at least one port with ``port.extra.vif_port_id``"},{"line_number":22,"context_line":"      set."}],"source_content_type":"text/x-yaml","patch_set":22,"id":"7a77a97e_c817c64f","line":22,"updated":"2016-11-15 21:55:31.000000000","message":"So what happens if the user doesn\u0027t specify version \u003e\u003d 1.26. They\u0027ll be able to create ports \u0026 portgroups and set any of the above. After they do that and then use version \u003e\u003d 1.26, what will happen?\n\nIf you\u0027ve already had this discussion, then ignore me. It seems to me that this is all part of the static portgroups \u0027feature\u0027. Maybe at the end, we should combine all these portgroup-related features into one release note.","commit_id":"a5f7c157d1fe0636c5f54dfbd5a9d9f381bd7544"},{"author":{"_account_id":14525,"name":"Vasyl Saienko","email":"vsaienko@mirantis.com","username":"vsaienko"},"change_message_id":"b6f752530fbf676aba8a597a7c78aa8a1155a49b","unresolved":false,"context_lines":[{"line_number":19,"context_line":"      port group with ``portgroup.standalone_ports_supported\u003dFalse``"},{"line_number":20,"context_line":"    * ``portgroup.standalone_ports_supported`` cannot be set to False on a"},{"line_number":21,"context_line":"      port group if it has at least one port with ``port.extra.vif_port_id``"},{"line_number":22,"context_line":"      set."}],"source_content_type":"text/x-yaml","patch_set":22,"id":"7a77a97e_763bd738","line":22,"in_reply_to":"7a77a97e_c817c64f","updated":"2016-11-16 12:38:05.000000000","message":"We shouldn\u0027t bump API version according to documentation [0]:\n\n // A change such that a request which was successful before now results in an error response (unless the success reported previously was hiding an existing error condition).\n\nIt is not possible to use port from portgroup in single interface mode by hardware/protocol limitation in some cases. Before this patch we didn\u0027t prevent user to set wrong combinations but it lead to deployment failures. With this patch we just avoid setting non-working combinations and prevent future problems.\n\n\nhttp://specs.openstack.org/openstack/api-wg/guidelines/evaluating_api_changes.html","commit_id":"a5f7c157d1fe0636c5f54dfbd5a9d9f381bd7544"},{"author":{"_account_id":6618,"name":"Ruby Loo","email":"opensrloo@gmail.com","username":"rloo"},"change_message_id":"5c100233ef951c2caba7518c6175229210cbbe75","unresolved":false,"context_lines":[{"line_number":15,"context_line":"      a port group with portgroup.standalone_ports_supported already"},{"line_number":16,"context_line":"      set to False."},{"line_number":17,"context_line":"    * ``portgroup.standalone_ports_supported`` cannot be set to False on a"},{"line_number":18,"context_line":"      portgroup if at least one a port in that port group has"},{"line_number":19,"context_line":"      ``port.pxe_enabled\u003dTrue``"},{"line_number":20,"context_line":"    * ``port.extra.vif_port_id`` cannot be set on port that is a member of a"},{"line_number":21,"context_line":"      port group with ``portgroup.standalone_ports_supported\u003dFalse`` as"}],"source_content_type":"text/x-yaml","patch_set":23,"id":"7a77a97e_d62100a1","line":18,"updated":"2016-11-16 15:49:38.000000000","message":"nit s/a port/port/","commit_id":"a839b83001abc510147cbdbf6caec8bf9d0078d1"},{"author":{"_account_id":14525,"name":"Vasyl Saienko","email":"vsaienko@mirantis.com","username":"vsaienko"},"change_message_id":"66dd506602978eb71494a3a77651af3977b9ab7b","unresolved":false,"context_lines":[{"line_number":15,"context_line":"      a port group with portgroup.standalone_ports_supported already"},{"line_number":16,"context_line":"      set to False."},{"line_number":17,"context_line":"    * ``portgroup.standalone_ports_supported`` cannot be set to False on a"},{"line_number":18,"context_line":"      portgroup if at least one a port in that port group has"},{"line_number":19,"context_line":"      ``port.pxe_enabled\u003dTrue``"},{"line_number":20,"context_line":"    * ``port.extra.vif_port_id`` cannot be set on port that is a member of a"},{"line_number":21,"context_line":"      port group with ``portgroup.standalone_ports_supported\u003dFalse`` as"}],"source_content_type":"text/x-yaml","patch_set":23,"id":"7a77a97e_52d7914a","line":18,"in_reply_to":"7a77a97e_d62100a1","updated":"2016-11-17 13:53:44.000000000","message":"Done","commit_id":"a839b83001abc510147cbdbf6caec8bf9d0078d1"},{"author":{"_account_id":6618,"name":"Ruby Loo","email":"opensrloo@gmail.com","username":"rloo"},"change_message_id":"5c100233ef951c2caba7518c6175229210cbbe75","unresolved":false,"context_lines":[{"line_number":17,"context_line":"    * ``portgroup.standalone_ports_supported`` cannot be set to False on a"},{"line_number":18,"context_line":"      portgroup if at least one a port in that port group has"},{"line_number":19,"context_line":"      ``port.pxe_enabled\u003dTrue``"},{"line_number":20,"context_line":"    * ``port.extra.vif_port_id`` cannot be set on port that is a member of a"},{"line_number":21,"context_line":"      port group with ``portgroup.standalone_ports_supported\u003dFalse`` as"},{"line_number":22,"context_line":"      setting it means that we using port in single interface mode."},{"line_number":23,"context_line":"    * ``portgroup.standalone_ports_supported`` cannot be set to False on a"}],"source_content_type":"text/x-yaml","patch_set":23,"id":"7a77a97e_d6582035","line":20,"updated":"2016-11-16 15:49:38.000000000","message":"i think you meant to do it here instead. s/on port/on a port/","commit_id":"a839b83001abc510147cbdbf6caec8bf9d0078d1"},{"author":{"_account_id":14525,"name":"Vasyl Saienko","email":"vsaienko@mirantis.com","username":"vsaienko"},"change_message_id":"66dd506602978eb71494a3a77651af3977b9ab7b","unresolved":false,"context_lines":[{"line_number":17,"context_line":"    * ``portgroup.standalone_ports_supported`` cannot be set to False on a"},{"line_number":18,"context_line":"      portgroup if at least one a port in that port group has"},{"line_number":19,"context_line":"      ``port.pxe_enabled\u003dTrue``"},{"line_number":20,"context_line":"    * ``port.extra.vif_port_id`` cannot be set on port that is a member of a"},{"line_number":21,"context_line":"      port group with ``portgroup.standalone_ports_supported\u003dFalse`` as"},{"line_number":22,"context_line":"      setting it means that we using port in single interface mode."},{"line_number":23,"context_line":"    * ``portgroup.standalone_ports_supported`` cannot be set to False on a"}],"source_content_type":"text/x-yaml","patch_set":23,"id":"7a77a97e_72c80da9","line":20,"in_reply_to":"7a77a97e_d6582035","updated":"2016-11-17 13:53:44.000000000","message":"Done","commit_id":"a839b83001abc510147cbdbf6caec8bf9d0078d1"}]}
