)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"53d54de570736ccc6bbcd391cfa0ba9d6d76043a","unresolved":false,"context_lines":[{"line_number":24,"context_line":""},{"line_number":25,"context_line":"[0] https://git.openstack.org/cgit/openstack/ironic/tree/setup.cfg#n90"},{"line_number":26,"context_line":""},{"line_number":27,"context_line":"Depends-On: I09a42c8e54d7782c591415e53fccade972ae8bdb"},{"line_number":28,"context_line":"Change-Id: I9d036fd5d209ccd321fbd28117660494a7bcb74d"},{"line_number":29,"context_line":"Implements: blueprint ironic-networks-support"},{"line_number":30,"context_line":"Co-Authored-By: Hironori Shiina \u003cshiina.hironori@jp.fujitsu.com\u003e"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":10,"id":"bacf61ea_d2869115","line":27,"updated":"2016-08-02 14:12:20.000000000","message":"Should also depend on this g-r bump for ironicclient:\n\nhttps://review.openstack.org/#/c/350040/","commit_id":"280af8c73b5f08daa7b1370c5d2cf90b3782d519"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"357a74dce58672243908bb28b33c71461ab93693","unresolved":false,"context_lines":[{"line_number":16,"context_line":"to 1.20, where this feature is introduced."},{"line_number":17,"context_line":""},{"line_number":18,"context_line":"The old code also assumed ironic would have only two network interfaces,"},{"line_number":19,"context_line":"\"neutron\" and \"none\". This became three - \"neutron\", \"flat\", and"},{"line_number":20,"context_line":"\"noop\".[0] \"neutron\" is the only interface that requires returning None"},{"line_number":21,"context_line":"from `network_binding_host_id`, while the others should match the old"},{"line_number":22,"context_line":"behavior. Change the code to only do this for the neutron network"},{"line_number":23,"context_line":"interface, instead of doing this for anything not called \u0027flat\u0027."}],"source_content_type":"text/x-gerrit-commit-message","patch_set":11,"id":"bacf61ea_da85035a","line":20,"range":{"start_line":19,"start_character":22,"end_line":20,"end_character":6},"updated":"2016-08-02 15:44:10.000000000","message":"Shouldn\u0027t this have \u0027neutron\u0027 in this list?\n\nhttp://git.openstack.org/cgit/openstack/ironic/tree/ironic/conf/default.py#n60","commit_id":"d9a40c0221632a63ff952bb2d3013b73f08aacfb"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"1610bfc0ad4f10be8ce1f045c8e05e9ad8289a07","unresolved":false,"context_lines":[{"line_number":16,"context_line":"to 1.20, where this feature is introduced."},{"line_number":17,"context_line":""},{"line_number":18,"context_line":"The old code also assumed ironic would have only two network interfaces,"},{"line_number":19,"context_line":"\"neutron\" and \"none\". This became three - \"neutron\", \"flat\", and"},{"line_number":20,"context_line":"\"noop\".[0] \"neutron\" is the only interface that requires returning None"},{"line_number":21,"context_line":"from `network_binding_host_id`, while the others should match the old"},{"line_number":22,"context_line":"behavior. Change the code to only do this for the neutron network"},{"line_number":23,"context_line":"interface, instead of doing this for anything not called \u0027flat\u0027."}],"source_content_type":"text/x-gerrit-commit-message","patch_set":11,"id":"bacf61ea_da6183aa","line":20,"range":{"start_line":19,"start_character":22,"end_line":20,"end_character":6},"in_reply_to":"bacf61ea_da85035a","updated":"2016-08-02 15:45:30.000000000","message":"Nevermind I thought those were \u0027choices\u0027, not defaults.","commit_id":"d9a40c0221632a63ff952bb2d3013b73f08aacfb"}],"nova/tests/unit/virt/ironic/test_driver.py":[{"author":{"_account_id":13689,"name":"Hironori Shiina","email":"Hironori.Shiina@fujitsu.com","username":"shiina"},"change_message_id":"4efba260d80a6987da7721f6fee89b46980de42a","unresolved":false,"context_lines":[{"line_number":1630,"context_line":"        else:"},{"line_number":1631,"context_line":"            interface \u003d \u0027flat\u0027"},{"line_number":1632,"context_line":"            expected \u003d hostname"},{"line_number":1633,"context_line":"        node \u003d ironic_utils.get_test_node(uuid\u003dnode_uuid,"},{"line_number":1634,"context_line":"                                          instance_uuid\u003dself.instance_uuid,"},{"line_number":1635,"context_line":"                                          instance_type_id\u003d5,"},{"line_number":1636,"context_line":"                                          network_interface\u003dinterface)"}],"source_content_type":"text/x-python","patch_set":1,"id":"da0c15f0_f1eef589","line":1633,"updated":"2016-03-28 05:03:47.000000000","message":"We also need to change \u0027network_provider\u0027 in get_test_node().","commit_id":"8bad49f762efba3a44eda025b2ffc94fc600a6ba"}],"nova/virt/ironic/client_wrapper.py":[{"author":{"_account_id":13689,"name":"Hironori Shiina","email":"Hironori.Shiina@fujitsu.com","username":"shiina"},"change_message_id":"958b95bd6633b469dd47598fc84673d9d0c66d56","unresolved":false,"context_lines":[{"line_number":29,"context_line":"ironic \u003d None"},{"line_number":30,"context_line":""},{"line_number":31,"context_line":"# The API version required by the Ironic driver"},{"line_number":32,"context_line":"IRONIC_API_VERSION \u003d (1, 18)"},{"line_number":33,"context_line":""},{"line_number":34,"context_line":""},{"line_number":35,"context_line":"class IronicClientWrapper(object):"}],"source_content_type":"text/x-python","patch_set":2,"id":"3aaa91ec_72535e6d","line":32,"updated":"2016-06-27 17:08:02.000000000","message":"The version should be synced with ironic patch[1].\nIt is necessary to update to 1.19.\n\n[1] https://review.openstack.org/#/c/317392/","commit_id":"d5532e62739bc9d887e00a36a912d38dbf6b8709"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"197459d9a173ec12651317abc2576583f136d10b","unresolved":false,"context_lines":[{"line_number":29,"context_line":"ironic \u003d None"},{"line_number":30,"context_line":""},{"line_number":31,"context_line":"# The API version required by the Ironic driver"},{"line_number":32,"context_line":"IRONIC_API_VERSION \u003d (1, 19)"},{"line_number":33,"context_line":""},{"line_number":34,"context_line":""},{"line_number":35,"context_line":"class IronicClientWrapper(object):"}],"source_content_type":"text/x-python","patch_set":3,"id":"fad55976_5e4bd5b0","line":32,"range":{"start_line":32,"start_character":25,"end_line":32,"end_character":27},"updated":"2016-07-15 15:24:23.000000000","message":"s/19/20/\n\nhttp://git.openstack.org/cgit/openstack/ironic/tree/ironic/api/controllers/v1/versions.py#n52","commit_id":"7c92aee74d209c33ee545a6977852fb35c5e867e"},{"author":{"_account_id":2271,"name":"Michael Still","email":"mikal@stillhq.com","username":"mikalstill"},"change_message_id":"d5613858eebff87934567ce9b2689bc94d30b51c","unresolved":false,"context_lines":[{"line_number":29,"context_line":"ironic \u003d None"},{"line_number":30,"context_line":""},{"line_number":31,"context_line":"# The API version required by the Ironic driver"},{"line_number":32,"context_line":"IRONIC_API_VERSION \u003d (1, 20)"},{"line_number":33,"context_line":""},{"line_number":34,"context_line":""},{"line_number":35,"context_line":"class IronicClientWrapper(object):"}],"source_content_type":"text/x-python","patch_set":6,"id":"dada55a8_3683459a","line":32,"updated":"2016-07-19 16:45:13.000000000","message":"When was this microversion released? Do we need a release note explaining that ironic needs to be upgraded before nova?","commit_id":"809b7482f95b751f13ef85f87eaf9df91cd7895e"},{"author":{"_account_id":10343,"name":"Jim Rollenhagen","email":"jim@jimrollenhagen.com","username":"jimrollenhagen"},"change_message_id":"ead16d2691e6f7846952561ba5d07002d78df137","unresolved":false,"context_lines":[{"line_number":29,"context_line":"ironic \u003d None"},{"line_number":30,"context_line":""},{"line_number":31,"context_line":"# The API version required by the Ironic driver"},{"line_number":32,"context_line":"IRONIC_API_VERSION \u003d (1, 20)"},{"line_number":33,"context_line":""},{"line_number":34,"context_line":""},{"line_number":35,"context_line":"class IronicClientWrapper(object):"}],"source_content_type":"text/x-python","patch_set":6,"id":"dada55a8_aaeb42af","line":32,"in_reply_to":"dada55a8_3683459a","updated":"2016-07-19 17:56:28.000000000","message":"It landed last week, not yet in a release yet. The ironic upgrade process has been \"upgrade ironic first\" for a few cycles now, so I don\u0027t think we need it in the release notes.","commit_id":"809b7482f95b751f13ef85f87eaf9df91cd7895e"},{"author":{"_account_id":10343,"name":"Jim Rollenhagen","email":"jim@jimrollenhagen.com","username":"jimrollenhagen"},"change_message_id":"c2baae02762e774cc53db9335176ce7469ea28cb","unresolved":false,"context_lines":[{"line_number":29,"context_line":"ironic \u003d None"},{"line_number":30,"context_line":""},{"line_number":31,"context_line":"# The API version required by the Ironic driver"},{"line_number":32,"context_line":"IRONIC_API_VERSION \u003d (1, 20)"},{"line_number":33,"context_line":""},{"line_number":34,"context_line":""},{"line_number":35,"context_line":"class IronicClientWrapper(object):"}],"source_content_type":"text/x-python","patch_set":6,"id":"dada55a8_3ebaf3c0","line":32,"in_reply_to":"dada55a8_aaeb42af","updated":"2016-07-19 19:47:51.000000000","message":"I also just noticed I forgot to add the reno I did make to the patch (which dictates which ironicclient release and what API version needs to be available), so hopefully that will address the concern. :)","commit_id":"809b7482f95b751f13ef85f87eaf9df91cd7895e"}],"nova/virt/ironic/driver.py":[{"author":{"_account_id":13689,"name":"Hironori Shiina","email":"Hironori.Shiina@fujitsu.com","username":"shiina"},"change_message_id":"4efba260d80a6987da7721f6fee89b46980de42a","unresolved":false,"context_lines":[{"line_number":1154,"context_line":"        :returns: a string representing the host ID"},{"line_number":1155,"context_line":"        \"\"\""},{"line_number":1156,"context_line":""},{"line_number":1157,"context_line":"        node \u003d self._get_node(instance.node)"},{"line_number":1158,"context_line":"        if getattr(node, \u0027network_interface\u0027, \u0027flat\u0027) \u003d\u003d \u0027flat\u0027:"},{"line_number":1159,"context_line":"            # flat network, go ahead and allow the port to be bound"},{"line_number":1160,"context_line":"            return super(IronicDriver, self).network_binding_host_id("}],"source_content_type":"text/x-python","patch_set":1,"id":"da0c15f0_71b1458f","line":1157,"updated":"2016-03-28 05:03:47.000000000","message":"We need to add \u0027network_interface\u0027 to _NODE_FIELDS in Line 77 for getting \u0027network_interface\u0027 by _get_node().","commit_id":"8bad49f762efba3a44eda025b2ffc94fc600a6ba"},{"author":{"_account_id":14525,"name":"Vasyl Saienko","email":"vsaienko@mirantis.com","username":"vsaienko"},"change_message_id":"8ae9d82f2cb7a4a108bddbd31b0a05c49e8f7981","unresolved":false,"context_lines":[{"line_number":1142,"context_line":"        This defines the binding:host_id parameter to the port-create calls for"},{"line_number":1143,"context_line":"        Neutron. If using the neutron network interface (separate networks for"},{"line_number":1144,"context_line":"        the control plane and tenants), return None here to indicate that the"},{"line_number":1145,"context_line":"        port should not yet be bound; Ironic will make a port-update call to"},{"line_number":1146,"context_line":"        Neutron later to tell Neutron to bind the port. Otherwise, use the"},{"line_number":1147,"context_line":"        default behavior and allow the port to be bound immediately."},{"line_number":1148,"context_line":""}],"source_content_type":"text/x-python","patch_set":7,"id":"dada55a8_1144d9b4","line":1145,"updated":"2016-07-21 14:30:12.000000000","message":"After IRC discussion, the case when this change is needed seems to be clear:\nIf agent cache binding_profile information, setting host_id here will instruct agent to bind port. As result server will be connected to tenant network before provisioning has been started, and stay there until ironic creates a provisioning port. Please add a comments about it here, since for me it was surprise that agents may cache binding_profile information.","commit_id":"1df4ce5572cdc554a4da3bba4e331d14f23d18de"},{"author":{"_account_id":10343,"name":"Jim Rollenhagen","email":"jim@jimrollenhagen.com","username":"jimrollenhagen"},"change_message_id":"2833dc012027aa343f76b681463d7767629aee52","unresolved":false,"context_lines":[{"line_number":1142,"context_line":"        This defines the binding:host_id parameter to the port-create calls for"},{"line_number":1143,"context_line":"        Neutron. If using the neutron network interface (separate networks for"},{"line_number":1144,"context_line":"        the control plane and tenants), return None here to indicate that the"},{"line_number":1145,"context_line":"        port should not yet be bound; Ironic will make a port-update call to"},{"line_number":1146,"context_line":"        Neutron later to tell Neutron to bind the port. Otherwise, use the"},{"line_number":1147,"context_line":"        default behavior and allow the port to be bound immediately."},{"line_number":1148,"context_line":""}],"source_content_type":"text/x-python","patch_set":7,"id":"dada55a8_023d1cbb","line":1145,"in_reply_to":"dada55a8_1144d9b4","updated":"2016-07-25 16:08:29.000000000","message":"Well, it isn\u0027t only if the ML2 plugin caches things, but for any case where the ML2 plugin doesn\u0027t need the physical switchport info from ironic in order to connect the port. It\u0027s more about being 100% sure that the port isn\u0027t connected, no matter the circumstances.\n\nWill add a comment :)","commit_id":"1df4ce5572cdc554a4da3bba4e331d14f23d18de"},{"author":{"_account_id":14525,"name":"Vasyl Saienko","email":"vsaienko@mirantis.com","username":"vsaienko"},"change_message_id":"06ff4c38bae57121b2e22848a03d3d2b50fc2d7e","unresolved":false,"context_lines":[{"line_number":1144,"context_line":"        the control plane and tenants), return None here to indicate that the"},{"line_number":1145,"context_line":"        port should not yet be bound; Ironic will make a port-update call to"},{"line_number":1146,"context_line":"        Neutron later to tell Neutron to bind the port. Otherwise, use the"},{"line_number":1147,"context_line":"        default behavior and allow the port to be bound immediately."},{"line_number":1148,"context_line":""},{"line_number":1149,"context_line":"        :param context:  request context"},{"line_number":1150,"context_line":"        :param instance: nova.objects.instance.Instance that the network"}],"source_content_type":"text/x-python","patch_set":7,"id":"dada55a8_8d6c81d1","line":1147,"updated":"2016-07-20 07:37:21.000000000","message":"The port in flat network remain unbound at the moment due to bug https://bugs.launchpad.net/neutron/+bug/1599836.\nAs result ironic ports are always remain in DOWN state, and we have a work-around in tempest, since we are using vxlan network at the gatges https://github.com/openstack/tempest/blob/f11e225b0c1f31e0c74d618af33ab80df6cb8ffb/tempest/scenario/manager.py#L836","commit_id":"1df4ce5572cdc554a4da3bba4e331d14f23d18de"},{"author":{"_account_id":14525,"name":"Vasyl Saienko","email":"vsaienko@mirantis.com","username":"vsaienko"},"change_message_id":"06ff4c38bae57121b2e22848a03d3d2b50fc2d7e","unresolved":false,"context_lines":[{"line_number":1153,"context_line":"        \"\"\""},{"line_number":1154,"context_line":""},{"line_number":1155,"context_line":"        node \u003d self.ironicclient.call(\u0027node.get\u0027, instance.node,"},{"line_number":1156,"context_line":"                                      fields\u003d[\u0027network_interface\u0027])"},{"line_number":1157,"context_line":"        if node.network_interface \u003d\u003d \u0027neutron\u0027:"},{"line_number":1158,"context_line":"            return None"},{"line_number":1159,"context_line":"        # flat network, go ahead and allow the port to be bound"}],"source_content_type":"text/x-python","patch_set":7,"id":"dada55a8_8d5641cc","line":1156,"updated":"2016-07-20 07:37:21.000000000","message":"When nova creates a port the binding profile is empty, Ironic will add this info [0] lather to tenant port and to provisioning port. Also Ironic will update host_id [1].\n[0]. Until binding_profile is specified port can\u0027t be bound. So I assume that this change is useless. https://github.com/openstack/ironic/blob/master/ironic/drivers/modules/network/neutron.py#L182\n[1] https://github.com/openstack/ironic/blob/master/ironic/drivers/modules/network/neutron.py#L180","commit_id":"1df4ce5572cdc554a4da3bba4e331d14f23d18de"},{"author":{"_account_id":6618,"name":"Ruby Loo","email":"opensrloo@gmail.com","username":"rloo"},"change_message_id":"58fc0b5c09d69ee2eaec0d30f16d7dd8ebcee0fe","unresolved":false,"context_lines":[{"line_number":1167,"context_line":"                                      fields\u003d[\u0027network_interface\u0027])"},{"line_number":1168,"context_line":"        if node.network_interface \u003d\u003d \u0027neutron\u0027:"},{"line_number":1169,"context_line":"            return None"},{"line_number":1170,"context_line":"        # flat network, go ahead and allow the port to be bound"},{"line_number":1171,"context_line":"        return super(IronicDriver, self).network_binding_host_id("},{"line_number":1172,"context_line":"            context, instance)"}],"source_content_type":"text/x-python","patch_set":9,"id":"dada55a8_1abf3261","line":1170,"updated":"2016-07-25 22:47:49.000000000","message":"I could be wrong (hopefully I am), but in the ironic code, node.network_interface could be None, in which case we use some shiny logic [1] and use one of noop, neutron, or flat network interface. How does that logic get incorporated here?\n\n[1] https://github.com/openstack/ironic/blob/master/ironic/common/driver_factory.py#L63","commit_id":"34ef20b4abeb8c6d91de4470fecc1ac8ef60d5c9"},{"author":{"_account_id":12356,"name":"Vladyslav Drok","email":"vdrok@mirantis.com","username":"vdrok"},"change_message_id":"aa841df7973d505e08a5cca961d533a2878ce995","unresolved":false,"context_lines":[{"line_number":1167,"context_line":"                                      fields\u003d[\u0027network_interface\u0027])"},{"line_number":1168,"context_line":"        if node.network_interface \u003d\u003d \u0027neutron\u0027:"},{"line_number":1169,"context_line":"            return None"},{"line_number":1170,"context_line":"        # flat network, go ahead and allow the port to be bound"},{"line_number":1171,"context_line":"        return super(IronicDriver, self).network_binding_host_id("},{"line_number":1172,"context_line":"            context, instance)"}],"source_content_type":"text/x-python","patch_set":9,"id":"dada55a8_ea3d152c","line":1170,"in_reply_to":"dada55a8_1abf3261","updated":"2016-07-26 10:08:27.000000000","message":"It seems that nothing should be changed here - if it\u0027s None, the interface used is either flat or noop.","commit_id":"34ef20b4abeb8c6d91de4470fecc1ac8ef60d5c9"},{"author":{"_account_id":10343,"name":"Jim Rollenhagen","email":"jim@jimrollenhagen.com","username":"jimrollenhagen"},"change_message_id":"b26cfb2107eb89e28f2e8ad8120b86b4cb14df0a","unresolved":false,"context_lines":[{"line_number":1167,"context_line":"                                      fields\u003d[\u0027network_interface\u0027])"},{"line_number":1168,"context_line":"        if node.network_interface \u003d\u003d \u0027neutron\u0027:"},{"line_number":1169,"context_line":"            return None"},{"line_number":1170,"context_line":"        # flat network, go ahead and allow the port to be bound"},{"line_number":1171,"context_line":"        return super(IronicDriver, self).network_binding_host_id("},{"line_number":1172,"context_line":"            context, instance)"}],"source_content_type":"text/x-python","patch_set":9,"id":"bacf61ea_8c3d5c91","line":1170,"in_reply_to":"dada55a8_35cf8457","updated":"2016-08-01 15:14:20.000000000","message":"As a note, we\u0027re fixing this in this ironic patch chain: https://review.openstack.org/#/q/topic:bug/1608511","commit_id":"34ef20b4abeb8c6d91de4470fecc1ac8ef60d5c9"},{"author":{"_account_id":6618,"name":"Ruby Loo","email":"opensrloo@gmail.com","username":"rloo"},"change_message_id":"1d60cbf36ca8ff05d17dd6a595ec0eecf5713133","unresolved":false,"context_lines":[{"line_number":1167,"context_line":"                                      fields\u003d[\u0027network_interface\u0027])"},{"line_number":1168,"context_line":"        if node.network_interface \u003d\u003d \u0027neutron\u0027:"},{"line_number":1169,"context_line":"            return None"},{"line_number":1170,"context_line":"        # flat network, go ahead and allow the port to be bound"},{"line_number":1171,"context_line":"        return super(IronicDriver, self).network_binding_host_id("},{"line_number":1172,"context_line":"            context, instance)"}],"source_content_type":"text/x-python","patch_set":9,"id":"dada55a8_35cf8457","line":1170,"in_reply_to":"dada55a8_ea3d152c","updated":"2016-07-26 13:56:32.000000000","message":"The problem is if the operator set ironic\u0027s config \u0027default_network_interface\u0027 to \u0027neutron\u0027 :-(\n\nWe need some way to get the actual network interface that is being used for the node.","commit_id":"34ef20b4abeb8c6d91de4470fecc1ac8ef60d5c9"},{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"753bfabec372ec36ef44cf7f37a50c0ff909dc7b","unresolved":false,"context_lines":[{"line_number":1151,"context_line":""},{"line_number":1152,"context_line":"        NOTE: the late binding is important for security. If an ML2 mechanism"},{"line_number":1153,"context_line":"        manages to connect the tenant network to the baremetal machine before"},{"line_number":1154,"context_line":"        deployment is done (e.g. port-create time), then the tenant potentially"},{"line_number":1155,"context_line":"        has access to the deploy agent, which may contain firmware blobs or"},{"line_number":1156,"context_line":"        secrets. ML2 mechanisms may be able to connect the port without the"},{"line_number":1157,"context_line":"        switchport info that comes from ironic, if they store that switchport"}],"source_content_type":"text/x-python","patch_set":10,"id":"bacf61ea_71dc2646","line":1154,"updated":"2016-08-02 00:29:32.000000000","message":"s/e.g./i.e./ I believe you meant \"in other words\" and not \"for example\"?","commit_id":"280af8c73b5f08daa7b1370c5d2cf90b3782d519"},{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"753bfabec372ec36ef44cf7f37a50c0ff909dc7b","unresolved":false,"context_lines":[{"line_number":1158,"context_line":"        info for some reason. As such, we should *never* pass binding:host_id"},{"line_number":1159,"context_line":"        in the port-create call when using the \u0027neutron\u0027 network_interface,"},{"line_number":1160,"context_line":"        because a null binding:host_id indicates to Neutron that it should"},{"line_number":1161,"context_line":"        not connect the port yet."},{"line_number":1162,"context_line":""},{"line_number":1163,"context_line":"        :param context:  request context"},{"line_number":1164,"context_line":"        :param instance: nova.objects.instance.Instance that the network"}],"source_content_type":"text/x-python","patch_set":10,"id":"bacf61ea_51df6239","line":1161,"updated":"2016-08-02 00:29:32.000000000","message":"Yet more mysteries in the Neutron port binding \"API\"... :( Oh I yearn for the halcyon days of APIs that were explicit, clear, and required no tribal knowledge in order to properly use...","commit_id":"280af8c73b5f08daa7b1370c5d2cf90b3782d519"},{"author":{"_account_id":14525,"name":"Vasyl Saienko","email":"vsaienko@mirantis.com","username":"vsaienko"},"change_message_id":"458425c6fe744d4d48ed2e25f797cb2f92020f4f","unresolved":false,"context_lines":[{"line_number":1172,"context_line":"            return None"},{"line_number":1173,"context_line":"        # flat network, go ahead and allow the port to be bound"},{"line_number":1174,"context_line":"        return super(IronicDriver, self).network_binding_host_id("},{"line_number":1175,"context_line":"            context, instance)"}],"source_content_type":"text/x-python","patch_set":10,"id":"bacf61ea_2e9ec506","line":1175,"updated":"2016-08-02 07:02:15.000000000","message":"For a longterm concept I think we should return None here always. Users should update binding_host_id when they set binding_profile field. Otherwise it leads to extra bind_port() call, which actually do nothing when binding_profile is empty.","commit_id":"280af8c73b5f08daa7b1370c5d2cf90b3782d519"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"e7921658ccb6f26234f8ec8cb894ae91fadb7557","unresolved":false,"context_lines":[{"line_number":1144,"context_line":""},{"line_number":1145,"context_line":"        This defines the binding:host_id parameter to the port-create calls for"},{"line_number":1146,"context_line":"        Neutron. If using the neutron network interface (separate networks for"},{"line_number":1147,"context_line":"        the control plane and tenants), return None here to indicate that the"},{"line_number":1148,"context_line":"        port should not yet be bound; Ironic will make a port-update call to"},{"line_number":1149,"context_line":"        Neutron later to tell Neutron to bind the port. Otherwise, use the"},{"line_number":1150,"context_line":"        default behavior and allow the port to be bound immediately."},{"line_number":1151,"context_line":""},{"line_number":1152,"context_line":"        NOTE: the late binding is important for security. If an ML2 mechanism"}],"source_content_type":"text/x-python","patch_set":11,"id":"bacf61ea_035e1d76","line":1149,"range":{"start_line":1147,"start_character":40,"end_line":1149,"end_character":55},"updated":"2016-08-02 15:00:33.000000000","message":"I think I asked about this in the spec, but at some point don\u0027t we want to hold up the spawn for the vif plugged event callback from neutron so that the server doesn\u0027t go ACTIVE until all of this behind the scenes handshaking has completed?","commit_id":"d9a40c0221632a63ff952bb2d3013b73f08aacfb"},{"author":{"_account_id":10343,"name":"Jim Rollenhagen","email":"jim@jimrollenhagen.com","username":"jimrollenhagen"},"change_message_id":"33432728feb9ca95a3d1054f667382b937cc2a50","unresolved":false,"context_lines":[{"line_number":1144,"context_line":""},{"line_number":1145,"context_line":"        This defines the binding:host_id parameter to the port-create calls for"},{"line_number":1146,"context_line":"        Neutron. If using the neutron network interface (separate networks for"},{"line_number":1147,"context_line":"        the control plane and tenants), return None here to indicate that the"},{"line_number":1148,"context_line":"        port should not yet be bound; Ironic will make a port-update call to"},{"line_number":1149,"context_line":"        Neutron later to tell Neutron to bind the port. Otherwise, use the"},{"line_number":1150,"context_line":"        default behavior and allow the port to be bound immediately."},{"line_number":1151,"context_line":""},{"line_number":1152,"context_line":"        NOTE: the late binding is important for security. If an ML2 mechanism"}],"source_content_type":"text/x-python","patch_set":11,"id":"bacf61ea_3e0ff62f","line":1149,"range":{"start_line":1147,"start_character":40,"end_line":1149,"end_character":55},"in_reply_to":"bacf61ea_035e1d76","updated":"2016-08-02 15:03:58.000000000","message":"We probably do, though I think ironic\u0027s port-update call might be synchronous?","commit_id":"d9a40c0221632a63ff952bb2d3013b73f08aacfb"}],"releasenotes/notes/ironic-multitenant-networking-6f124964831d4a6c.yaml":[{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"a68b1f167d6cc5f3f0f49014f539e707012c97e9","unresolved":false,"context_lines":[{"line_number":5,"context_line":"    network_interface."},{"line_number":6,"context_line":"upgrade:"},{"line_number":7,"context_line":"  - The ironic driver now requires python-ironicclient\u003e\u003d1.5.0,"},{"line_number":8,"context_line":"    and requires the iroinc service to support API version 1.20 or"},{"line_number":9,"context_line":"    higher."}],"source_content_type":"text/x-yaml","patch_set":8,"id":"dada55a8_2fc92479","line":8,"range":{"start_line":8,"start_character":21,"end_line":8,"end_character":27},"updated":"2016-07-25 17:16:13.000000000","message":"nit: s/iroinc/ironic/","commit_id":"357fa34260e3bfcdebfe17b5475c25943e72d681"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"3dde8f54216c5ccec87c522f87789dcc9b8cc0be","unresolved":false,"context_lines":[{"line_number":1,"context_line":"---"},{"line_number":2,"context_line":"features:"},{"line_number":3,"context_line":"  - This enables multitenant networking support for ironic. To"},{"line_number":4,"context_line":"    enable this feature, ironic nodes must be using the \u0027neutron\u0027"},{"line_number":5,"context_line":"    network_interface."},{"line_number":6,"context_line":"upgrade:"}],"source_content_type":"text/x-yaml","patch_set":10,"id":"bacf61ea_7df05bca","line":3,"range":{"start_line":3,"start_character":4,"end_line":3,"end_character":8},"updated":"2016-08-02 13:49:38.000000000","message":"Keep in mind that when you view the release notes, \u0027This\u0027 has no context. So you should probably be a bit more clear, i.e. it\u0027s not \u0027this\u0027 patch in the release note, it\u0027s whatever feature was added in this release. So maybe just reword as \"Multitenant networking for the Ironic compute driver is now supported.\"","commit_id":"280af8c73b5f08daa7b1370c5d2cf90b3782d519"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"3dde8f54216c5ccec87c522f87789dcc9b8cc0be","unresolved":false,"context_lines":[{"line_number":4,"context_line":"    enable this feature, ironic nodes must be using the \u0027neutron\u0027"},{"line_number":5,"context_line":"    network_interface."},{"line_number":6,"context_line":"upgrade:"},{"line_number":7,"context_line":"  - The ironic driver now requires python-ironicclient\u003e\u003d1.5.0,"},{"line_number":8,"context_line":"    and requires the ironic service to support API version 1.20 or"},{"line_number":9,"context_line":"    higher."}],"source_content_type":"text/x-yaml","patch_set":10,"id":"bacf61ea_fdae0b80","line":7,"range":{"start_line":7,"start_character":35,"end_line":7,"end_character":61},"updated":"2016-08-02 13:49:38.000000000","message":"If this is the case, why don\u0027t we bump the minimum in g-r?\n\nhttp://git.openstack.org/cgit/openstack/requirements/tree/global-requirements.txt#n191\n\nIsn\u0027t that needed to test this in the gate-tempest-dsvm-ironic-multitenant-network-nv job (I know that upper-constraints is using 1.6.0, but the g-r min should be updated).","commit_id":"280af8c73b5f08daa7b1370c5d2cf90b3782d519"},{"author":{"_account_id":5441,"name":"Andrew Laski","email":"andrew@lascii.com","username":"alaski"},"change_message_id":"614640b8a6aeb7841222dd0658980fa46c836553","unresolved":false,"context_lines":[{"line_number":4,"context_line":"    enable this feature, ironic nodes must be using the \u0027neutron\u0027"},{"line_number":5,"context_line":"    network_interface."},{"line_number":6,"context_line":"upgrade:"},{"line_number":7,"context_line":"  - The ironic driver now requires python-ironicclient\u003e\u003d1.5.0,"},{"line_number":8,"context_line":"    and requires the ironic service to support API version 1.20 or"},{"line_number":9,"context_line":"    higher."}],"source_content_type":"text/x-yaml","patch_set":10,"id":"bacf61ea_1c1cc512","line":7,"updated":"2016-08-02 13:11:19.000000000","message":"Small nit, but it would be nice if this message referenced the previous required version of python-ironicclient so it\u0027s more clear how much of a change this is.","commit_id":"280af8c73b5f08daa7b1370c5d2cf90b3782d519"},{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"753bfabec372ec36ef44cf7f37a50c0ff909dc7b","unresolved":false,"context_lines":[{"line_number":6,"context_line":"upgrade:"},{"line_number":7,"context_line":"  - The ironic driver now requires python-ironicclient\u003e\u003d1.5.0,"},{"line_number":8,"context_line":"    and requires the ironic service to support API version 1.20 or"},{"line_number":9,"context_line":"    higher."}],"source_content_type":"text/x-yaml","patch_set":10,"id":"bacf61ea_11d96a57","line":9,"updated":"2016-08-02 00:29:32.000000000","message":"I suppose if we let this go through, arguing that the 1.21 API and corresponding client bump for the node.resource_class thing is kinda moot :)","commit_id":"280af8c73b5f08daa7b1370c5d2cf90b3782d519"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"3dde8f54216c5ccec87c522f87789dcc9b8cc0be","unresolved":false,"context_lines":[{"line_number":6,"context_line":"upgrade:"},{"line_number":7,"context_line":"  - The ironic driver now requires python-ironicclient\u003e\u003d1.5.0,"},{"line_number":8,"context_line":"    and requires the ironic service to support API version 1.20 or"},{"line_number":9,"context_line":"    higher."}],"source_content_type":"text/x-yaml","patch_set":10,"id":"bacf61ea_fd0a8b78","line":9,"in_reply_to":"bacf61ea_11d96a57","updated":"2016-08-02 13:49:38.000000000","message":"It doesn\u0027t have to be in this change, but at some point we should probably explicitly say in some docs somewhere that you have to upgrade ironic before nova, e.g.:\n\nhttp://docs.openstack.org/ops-guide/ops_upgrades.html#update-services","commit_id":"280af8c73b5f08daa7b1370c5d2cf90b3782d519"},{"author":{"_account_id":10343,"name":"Jim Rollenhagen","email":"jim@jimrollenhagen.com","username":"jimrollenhagen"},"change_message_id":"bd89db970a76efc2b7da8004009b12f9399faaf4","unresolved":false,"context_lines":[{"line_number":6,"context_line":"upgrade:"},{"line_number":7,"context_line":"  - The ironic driver now requires python-ironicclient\u003e\u003d1.5.0,"},{"line_number":8,"context_line":"    and requires the ironic service to support API version 1.20 or"},{"line_number":9,"context_line":"    higher."}],"source_content_type":"text/x-yaml","patch_set":10,"id":"bacf61ea_afbd7ad9","line":9,"in_reply_to":"bacf61ea_afec5a2a","updated":"2016-08-02 15:03:10.000000000","message":"Yeah, that\u0027s high on my list to fix, I can look into updating the ops guide as well.","commit_id":"280af8c73b5f08daa7b1370c5d2cf90b3782d519"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"f1962fd43c857f1684724187c0e76faadace9919","unresolved":false,"context_lines":[{"line_number":6,"context_line":"upgrade:"},{"line_number":7,"context_line":"  - The ironic driver now requires python-ironicclient\u003e\u003d1.5.0,"},{"line_number":8,"context_line":"    and requires the ironic service to support API version 1.20 or"},{"line_number":9,"context_line":"    higher."}],"source_content_type":"text/x-yaml","patch_set":10,"id":"bacf61ea_afec5a2a","line":9,"in_reply_to":"bacf61ea_fd0a8b78","updated":"2016-08-02 13:56:17.000000000","message":"The ironic docs actually say to upgrade nova before ironic (at least for juno-\u003ekilo):\n\nhttp://docs.openstack.org/developer/ironic/deploy/upgrade-guide.html?highlight\u003dupgrade#upgrading-from-juno-to-kilo\n\nGiven there aren\u0027t any other upgrade docs after that though, if I were doing ops I\u0027d probably think I need to keep doing that, so we should get that story straight before the end of the release.","commit_id":"280af8c73b5f08daa7b1370c5d2cf90b3782d519"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"fa4fd6cc7216f039e22e3e0db17e75044c4b8e06","unresolved":false,"context_lines":[{"line_number":1,"context_line":"---"},{"line_number":2,"context_line":"features:"},{"line_number":3,"context_line":"  - Multitenant networking for the ironic compute driver is now supported."},{"line_number":4,"context_line":"    To enable this feature, ironic nodes must be using the \u0027neutron\u0027"},{"line_number":5,"context_line":"    network_interface."},{"line_number":6,"context_line":"upgrade:"},{"line_number":7,"context_line":"  - The ironic driver now requires python-ironicclient\u003e\u003d1.5.0 (previously"},{"line_number":8,"context_line":"    \u003e\u003d1.1.0), and requires the ironic service to support API version 1.20 or"}],"source_content_type":"text/x-yaml","patch_set":11,"id":"bacf61ea_14d011c9","line":5,"range":{"start_line":3,"start_character":4,"end_line":5,"end_character":22},"updated":"2016-08-02 15:38:43.000000000","message":"I won\u0027t block on this right now, but I do feel we need some ops guide type documentation either in nova or ironic (or the actual ops guide) for configuring this. For a major feature that operators have been waiting a long time for, we should be sure to document how to configure and use it and how it works. If any of that is already documented in Ironic (or a valid spec), then just point me there and I\u0027ll be happy.","commit_id":"d9a40c0221632a63ff952bb2d3013b73f08aacfb"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"1c2a0988fdc734c4c39c2db73f224fd2f18f7509","unresolved":false,"context_lines":[{"line_number":1,"context_line":"---"},{"line_number":2,"context_line":"features:"},{"line_number":3,"context_line":"  - Multitenant networking for the ironic compute driver is now supported."},{"line_number":4,"context_line":"    To enable this feature, ironic nodes must be using the \u0027neutron\u0027"},{"line_number":5,"context_line":"    network_interface."},{"line_number":6,"context_line":"upgrade:"},{"line_number":7,"context_line":"  - The ironic driver now requires python-ironicclient\u003e\u003d1.5.0 (previously"},{"line_number":8,"context_line":"    \u003e\u003d1.1.0), and requires the ironic service to support API version 1.20 or"}],"source_content_type":"text/x-yaml","patch_set":11,"id":"bacf61ea_748fcdcc","line":5,"range":{"start_line":3,"start_character":4,"end_line":5,"end_character":22},"in_reply_to":"bacf61ea_14d011c9","updated":"2016-08-02 15:40:26.000000000","message":"e.g. this is stale now:\n\nhttp://docs.openstack.org/releasenotes/ironic/newton.html#new-features\n\n\"Added network interface. Introduced two network interface implementations: flat, which replicates the flat network behavior present previously and noop when neutron is not used, which is basically a noop interface.\"","commit_id":"d9a40c0221632a63ff952bb2d3013b73f08aacfb"}]}
