)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":8190,"name":"Drew Thorstensen (thorst)","email":"thorst@us.ibm.com","username":"thorst"},"change_message_id":"98828f799bdac2fe2bb03753796e89d587611ea2","unresolved":false,"context_lines":[{"line_number":6,"context_line":""},{"line_number":7,"context_line":"WIP(5): Introduce base PowerVM driver (ovs vif)"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"This change set adds Open vSwitch VIF support for the PowerVM nova driver."},{"line_number":10,"context_line":""},{"line_number":11,"context_line":"Change-Id: If23aeb890c4365014a9f1262647611162f981f12"},{"line_number":12,"context_line":"Partially-Implements: blueprint powervm-nova-compute-driver"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":7,"id":"3a461143_ea770b9d","line":9,"range":{"start_line":9,"start_character":66,"end_line":9,"end_character":74},"updated":"2017-01-26 16:18:06.000000000","message":"Commit message too wide.\n\nWrap this into a new line.","commit_id":"9bbfc0c6f7176599aea2b9b8071e9212630e11cf"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"2813ef1254e4f1929b570192640b7062bd4db903","unresolved":false,"context_lines":[{"line_number":6,"context_line":""},{"line_number":7,"context_line":"WIP(5): Introduce base PowerVM driver (ovs vif)"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"This change set adds Open vSwitch VIF support for the PowerVM nova driver."},{"line_number":10,"context_line":""},{"line_number":11,"context_line":"Change-Id: If23aeb890c4365014a9f1262647611162f981f12"},{"line_number":12,"context_line":"Partially-Implements: blueprint powervm-nova-compute-driver"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":7,"id":"3a461143_c2daf6e7","line":9,"range":{"start_line":9,"start_character":66,"end_line":9,"end_character":74},"in_reply_to":"3a461143_ea770b9d","updated":"2017-01-30 21:59:55.000000000","message":"Done","commit_id":"9bbfc0c6f7176599aea2b9b8071e9212630e11cf"},{"author":{"_account_id":10608,"name":"Matthew Edmonds","email":"edmondsw@us.ibm.com","username":"edmondsw"},"change_message_id":"f12ae7669f707f1646969cdc6f7c965f23f1f030","unresolved":false,"context_lines":[{"line_number":4,"context_line":"Commit:     esberglu \u003cesberglu@us.ibm.com\u003e"},{"line_number":5,"context_line":"CommitDate: 2017-11-21 13:30:46 -0600"},{"line_number":6,"context_line":""},{"line_number":7,"context_line":"WIP(5): PowerVM driver: ovs vif"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"This change set adds Open vSwitch VIF support for the PowerVM nova"},{"line_number":10,"context_line":"driver."}],"source_content_type":"text/x-gerrit-commit-message","patch_set":30,"id":"ff82abbf_6caec499","line":7,"range":{"start_line":7,"start_character":3,"end_line":7,"end_character":6},"updated":"2017-11-30 15:43:23.000000000","message":"what is this?","commit_id":"61d4b0f060fa3d19c7cacff71fe99027a04e8eba"},{"author":{"_account_id":16710,"name":"Eric Berglund","email":"esberglu@us.ibm.com","username":"esberglu"},"change_message_id":"c6068663d9b49b9d76a1fd7e799a58325f84f492","unresolved":false,"context_lines":[{"line_number":4,"context_line":"Commit:     esberglu \u003cesberglu@us.ibm.com\u003e"},{"line_number":5,"context_line":"CommitDate: 2017-11-21 13:30:46 -0600"},{"line_number":6,"context_line":""},{"line_number":7,"context_line":"WIP(5): PowerVM driver: ovs vif"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"This change set adds Open vSwitch VIF support for the PowerVM nova"},{"line_number":10,"context_line":"driver."}],"source_content_type":"text/x-gerrit-commit-message","patch_set":30,"id":"df87a7cf_8ea17f49","line":7,"range":{"start_line":7,"start_character":3,"end_line":7,"end_character":6},"in_reply_to":"ff82abbf_6caec499","updated":"2017-12-15 02:22:18.000000000","message":"Last release the PowerVM driver changes were being numbered. I didn\u0027t carry that forward, removing it.","commit_id":"61d4b0f060fa3d19c7cacff71fe99027a04e8eba"},{"author":{"_account_id":10608,"name":"Matthew Edmonds","email":"edmondsw@us.ibm.com","username":"edmondsw"},"change_message_id":"f12ae7669f707f1646969cdc6f7c965f23f1f030","unresolved":false,"context_lines":[{"line_number":6,"context_line":""},{"line_number":7,"context_line":"WIP(5): PowerVM driver: ovs vif"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"This change set adds Open vSwitch VIF support for the PowerVM nova"},{"line_number":10,"context_line":"driver."},{"line_number":11,"context_line":""},{"line_number":12,"context_line":"TODO: Live testing of OVS functionality"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":30,"id":"ff82abbf_ecc41462","line":9,"range":{"start_line":9,"start_character":62,"end_line":9,"end_character":66},"updated":"2017-11-30 15:43:23.000000000","message":"s/nova/virt/","commit_id":"61d4b0f060fa3d19c7cacff71fe99027a04e8eba"},{"author":{"_account_id":16710,"name":"Eric Berglund","email":"esberglu@us.ibm.com","username":"esberglu"},"change_message_id":"c6068663d9b49b9d76a1fd7e799a58325f84f492","unresolved":false,"context_lines":[{"line_number":6,"context_line":""},{"line_number":7,"context_line":"WIP(5): PowerVM driver: ovs vif"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"This change set adds Open vSwitch VIF support for the PowerVM nova"},{"line_number":10,"context_line":"driver."},{"line_number":11,"context_line":""},{"line_number":12,"context_line":"TODO: Live testing of OVS functionality"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":30,"id":"df87a7cf_2e8873c4","line":9,"range":{"start_line":9,"start_character":62,"end_line":9,"end_character":66},"in_reply_to":"ff82abbf_ecc41462","updated":"2017-12-15 02:22:18.000000000","message":"Done","commit_id":"61d4b0f060fa3d19c7cacff71fe99027a04e8eba"}],"doc/source/user/support-matrix.ini":[{"author":{"_account_id":10608,"name":"Matthew Edmonds","email":"edmondsw@us.ibm.com","username":"edmondsw"},"change_message_id":"ae63c19c8350b365ae0f1b92459ba9ff666bb7bb","unresolved":false,"context_lines":[{"line_number":1180,"context_line":"driver-impl-ironic\u003dmissing"},{"line_number":1181,"context_line":"driver-impl-libvirt-vz-vm\u003dcomplete"},{"line_number":1182,"context_line":"driver-impl-libvirt-vz-ct\u003dcomplete"},{"line_number":1183,"context_line":"driver-impl-powervm\u003dmissing"},{"line_number":1184,"context_line":""},{"line_number":1185,"context_line":"[networking.routing]"},{"line_number":1186,"context_line":"title\u003dNetwork routing"}],"source_content_type":"text/x-properties","patch_set":35,"id":"7f96bb07_1b94148b","line":1183,"updated":"2018-01-10 22:45:10.000000000","message":"I think this needs to stay consistent with networking.securitygroups","commit_id":"61a4492592c3c13418c1906c0a9e68fd9758d8c9"}],"nova/conf/powervm.py":[{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"78267b11844e0a1f7f3dc983a4ae864219c49790","unresolved":false,"context_lines":[{"line_number":127,"context_line":"]"},{"line_number":128,"context_line":""},{"line_number":129,"context_line":"vif_opts \u003d ["},{"line_number":130,"context_line":"    cfg.BoolOpt(\u0027use_rmc_mgmt_vif\u0027,"},{"line_number":131,"context_line":"                default\u003dTrue,"},{"line_number":132,"context_line":"                help\u003d\"\"\""},{"line_number":133,"context_line":"If enabled, tells the PowerVM Driver to create an RMC"}],"source_content_type":"text/x-python","patch_set":7,"id":"3a461143_5fa33f00","line":130,"range":{"start_line":130,"start_character":17,"end_line":130,"end_character":33},"updated":"2017-01-27 22:36:58.000000000","message":"Do we really need this option?  Is anyone going to need/want to turn off the mgmt vif?","commit_id":"9bbfc0c6f7176599aea2b9b8071e9212630e11cf"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"2813ef1254e4f1929b570192640b7062bd4db903","unresolved":false,"context_lines":[{"line_number":127,"context_line":"]"},{"line_number":128,"context_line":""},{"line_number":129,"context_line":"vif_opts \u003d ["},{"line_number":130,"context_line":"    cfg.BoolOpt(\u0027use_rmc_mgmt_vif\u0027,"},{"line_number":131,"context_line":"                default\u003dTrue,"},{"line_number":132,"context_line":"                help\u003d\"\"\""},{"line_number":133,"context_line":"If enabled, tells the PowerVM Driver to create an RMC"}],"source_content_type":"text/x-python","patch_set":7,"id":"3a461143_2f552cf9","line":130,"range":{"start_line":130,"start_character":17,"end_line":130,"end_character":33},"in_reply_to":"3a461143_5fa33f00","updated":"2017-01-30 21:59:55.000000000","message":"Per thorst feedback: keep this one.","commit_id":"9bbfc0c6f7176599aea2b9b8071e9212630e11cf"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"78267b11844e0a1f7f3dc983a4ae864219c49790","unresolved":false,"context_lines":[{"line_number":137,"context_line":""},{"line_number":138,"context_line":"Possible values:"},{"line_number":139,"context_line":""},{"line_number":140,"context_line":"  True"},{"line_number":141,"context_line":""},{"line_number":142,"context_line":"Related options:"},{"line_number":143,"context_line":""}],"source_content_type":"text/x-python","patch_set":7,"id":"3a461143_bf67c3e7","line":140,"range":{"start_line":140,"start_character":2,"end_line":140,"end_character":6},"updated":"2017-01-27 22:36:58.000000000","message":"or False, presumably.","commit_id":"9bbfc0c6f7176599aea2b9b8071e9212630e11cf"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"2813ef1254e4f1929b570192640b7062bd4db903","unresolved":false,"context_lines":[{"line_number":137,"context_line":""},{"line_number":138,"context_line":"Possible values:"},{"line_number":139,"context_line":""},{"line_number":140,"context_line":"  True"},{"line_number":141,"context_line":""},{"line_number":142,"context_line":"Related options:"},{"line_number":143,"context_line":""}],"source_content_type":"text/x-python","patch_set":7,"id":"3a461143_ef832454","line":140,"range":{"start_line":140,"start_character":2,"end_line":140,"end_character":6},"in_reply_to":"3a461143_bf67c3e7","updated":"2017-01-30 21:59:55.000000000","message":"Done","commit_id":"9bbfc0c6f7176599aea2b9b8071e9212630e11cf"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"78267b11844e0a1f7f3dc983a4ae864219c49790","unresolved":false,"context_lines":[{"line_number":143,"context_line":""},{"line_number":144,"context_line":"  None"},{"line_number":145,"context_line":"\"\"\"),"},{"line_number":146,"context_line":"    cfg.StrOpt(\u0027pvm_vswitch_for_novalink_io\u0027,"},{"line_number":147,"context_line":"               default\u003d\u0027NovaLinkVEABridge\u0027,"},{"line_number":148,"context_line":"               help\u003d\"\"\""},{"line_number":149,"context_line":"Name of the PowerVM virtual switch to be used when"}],"source_content_type":"text/x-python","patch_set":7,"id":"3a461143_5ff17f00","line":146,"range":{"start_line":146,"start_character":16,"end_line":146,"end_character":43},"updated":"2017-01-27 22:36:58.000000000","message":"Similar comment here.  I\u0027m looking at this from the perspective of trying to minimize config options.  Under what circumstances would someone need/want to control the name of this vswitch?","commit_id":"9bbfc0c6f7176599aea2b9b8071e9212630e11cf"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"2813ef1254e4f1929b570192640b7062bd4db903","unresolved":false,"context_lines":[{"line_number":143,"context_line":""},{"line_number":144,"context_line":"  None"},{"line_number":145,"context_line":"\"\"\"),"},{"line_number":146,"context_line":"    cfg.StrOpt(\u0027pvm_vswitch_for_novalink_io\u0027,"},{"line_number":147,"context_line":"               default\u003d\u0027NovaLinkVEABridge\u0027,"},{"line_number":148,"context_line":"               help\u003d\"\"\""},{"line_number":149,"context_line":"Name of the PowerVM virtual switch to be used when"}],"source_content_type":"text/x-python","patch_set":7,"id":"3a461143_4f5a782b","line":146,"range":{"start_line":146,"start_character":16,"end_line":146,"end_character":43},"in_reply_to":"3a461143_5ff17f00","updated":"2017-01-30 21:59:55.000000000","message":"Per thorst feedback: we can probably nix this one.","commit_id":"9bbfc0c6f7176599aea2b9b8071e9212630e11cf"}],"nova/exception.py":[{"author":{"_account_id":8190,"name":"Drew Thorstensen (thorst)","email":"thorst@us.ibm.com","username":"thorst"},"change_message_id":"98828f799bdac2fe2bb03753796e89d587611ea2","unresolved":false,"context_lines":[{"line_number":2191,"context_line":"class VGNotFound(NovaException):"},{"line_number":2192,"context_line":"    msg_fmt \u003d _(\"Unable to locate the volume group \u0027%(vg_name)s\u0027 for this \""},{"line_number":2193,"context_line":"                \"operation.\")"},{"line_number":2194,"context_line":""},{"line_number":2195,"context_line":""},{"line_number":2196,"context_line":"class InvalidRebuild(NovaException):"},{"line_number":2197,"context_line":"    msg_fmt \u003d _(\"Unable to rebuild virtual machine on new host.  Error is \""},{"line_number":2198,"context_line":"                \"%(error)s\")"}],"source_content_type":"text/x-python","patch_set":7,"id":"3a461143_6aab1bd7","line":2198,"range":{"start_line":2194,"start_character":0,"end_line":2198,"end_character":28},"updated":"2017-01-26 16:18:06.000000000","message":"Placeholder...do we need this?","commit_id":"9bbfc0c6f7176599aea2b9b8071e9212630e11cf"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"78267b11844e0a1f7f3dc983a4ae864219c49790","unresolved":false,"context_lines":[{"line_number":2191,"context_line":"class VGNotFound(NovaException):"},{"line_number":2192,"context_line":"    msg_fmt \u003d _(\"Unable to locate the volume group \u0027%(vg_name)s\u0027 for this \""},{"line_number":2193,"context_line":"                \"operation.\")"},{"line_number":2194,"context_line":""},{"line_number":2195,"context_line":""},{"line_number":2196,"context_line":"class InvalidRebuild(NovaException):"},{"line_number":2197,"context_line":"    msg_fmt \u003d _(\"Unable to rebuild virtual machine on new host.  Error is \""},{"line_number":2198,"context_line":"                \"%(error)s\")"}],"source_content_type":"text/x-python","patch_set":7,"id":"3a461143_ff678bb4","line":2198,"range":{"start_line":2194,"start_character":0,"end_line":2198,"end_character":28},"in_reply_to":"3a461143_6aab1bd7","updated":"2017-01-27 22:36:58.000000000","message":"I agree with this theme: the whole slot manager thing is there to support remote rebuild, which we should probably introduce in a later change set.","commit_id":"9bbfc0c6f7176599aea2b9b8071e9212630e11cf"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"2813ef1254e4f1929b570192640b7062bd4db903","unresolved":false,"context_lines":[{"line_number":2191,"context_line":"class VGNotFound(NovaException):"},{"line_number":2192,"context_line":"    msg_fmt \u003d _(\"Unable to locate the volume group \u0027%(vg_name)s\u0027 for this \""},{"line_number":2193,"context_line":"                \"operation.\")"},{"line_number":2194,"context_line":""},{"line_number":2195,"context_line":""},{"line_number":2196,"context_line":"class InvalidRebuild(NovaException):"},{"line_number":2197,"context_line":"    msg_fmt \u003d _(\"Unable to rebuild virtual machine on new host.  Error is \""},{"line_number":2198,"context_line":"                \"%(error)s\")"}],"source_content_type":"text/x-python","patch_set":7,"id":"3a461143_82b9ce7b","line":2198,"range":{"start_line":2194,"start_character":0,"end_line":2198,"end_character":28},"in_reply_to":"3a461143_ff678bb4","updated":"2017-01-30 21:59:55.000000000","message":"Done","commit_id":"9bbfc0c6f7176599aea2b9b8071e9212630e11cf"}],"nova/tests/unit/virt/powervm/tasks/test_network.py":[{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"341422a637f79441055575e15478732822a63a71","unresolved":false,"context_lines":[{"line_number":26,"context_line":""},{"line_number":27,"context_line":""},{"line_number":28,"context_line":"def cna(mac):"},{"line_number":29,"context_line":"    \"\"\"Builds a mock Client Network Adapter (or VNIC) for unit tests.\"\"\""},{"line_number":30,"context_line":"    nic \u003d mock.MagicMock()"},{"line_number":31,"context_line":"    nic.mac \u003d mac"},{"line_number":32,"context_line":"    nic.vswitch_uri \u003d \u0027fake_href\u0027"}],"source_content_type":"text/x-python","patch_set":26,"id":"1f485f77_88c38938","line":29,"range":{"start_line":29,"start_character":48,"end_line":29,"end_character":52},"updated":"2017-11-15 23:05:32.000000000","message":"Get rid of references to VNIC throughout.  I think some of the test cases might be able to be shortened or eliminated entirely.","commit_id":"363b7df3b9e6f00c6762f11f4a191f665b50f44f"},{"author":{"_account_id":16710,"name":"Eric Berglund","email":"esberglu@us.ibm.com","username":"esberglu"},"change_message_id":"1f62128fa43b1e28d3ac8b8a6e7077832dbc562c","unresolved":false,"context_lines":[{"line_number":26,"context_line":""},{"line_number":27,"context_line":""},{"line_number":28,"context_line":"def cna(mac):"},{"line_number":29,"context_line":"    \"\"\"Builds a mock Client Network Adapter (or VNIC) for unit tests.\"\"\""},{"line_number":30,"context_line":"    nic \u003d mock.MagicMock()"},{"line_number":31,"context_line":"    nic.mac \u003d mac"},{"line_number":32,"context_line":"    nic.vswitch_uri \u003d \u0027fake_href\u0027"}],"source_content_type":"text/x-python","patch_set":26,"id":"1f485f77_3db0318a","line":29,"range":{"start_line":29,"start_character":48,"end_line":29,"end_character":52},"in_reply_to":"1f485f77_88c38938","updated":"2017-11-16 22:02:01.000000000","message":"Done","commit_id":"363b7df3b9e6f00c6762f11f4a191f665b50f44f"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"341422a637f79441055575e15478732822a63a71","unresolved":false,"context_lines":[{"line_number":27,"context_line":""},{"line_number":28,"context_line":"def cna(mac):"},{"line_number":29,"context_line":"    \"\"\"Builds a mock Client Network Adapter (or VNIC) for unit tests.\"\"\""},{"line_number":30,"context_line":"    nic \u003d mock.MagicMock()"},{"line_number":31,"context_line":"    nic.mac \u003d mac"},{"line_number":32,"context_line":"    nic.vswitch_uri \u003d \u0027fake_href\u0027"},{"line_number":33,"context_line":"    return nic"},{"line_number":34,"context_line":""},{"line_number":35,"context_line":""},{"line_number":36,"context_line":"class TestNetwork(test.NoDBTestCase):"}],"source_content_type":"text/x-python","patch_set":26,"id":"1f485f77_889ca96a","line":33,"range":{"start_line":30,"start_character":0,"end_line":33,"end_character":14},"updated":"2017-11-15 23:05:32.000000000","message":"MagicMock isn\u0027t necessary - can use Mock.  Should consider autospeccing this (spec\u003dpvm_net.CNA).  Could also bum a couple lines here by doing the member inits inline.  So:\n\n return mock.Mock(spec\u003dpvm_net.CNA, mac\u003dmac, vswitch_uri\u003d\u0027fake_href\u0027)","commit_id":"363b7df3b9e6f00c6762f11f4a191f665b50f44f"},{"author":{"_account_id":16710,"name":"Eric Berglund","email":"esberglu@us.ibm.com","username":"esberglu"},"change_message_id":"1f62128fa43b1e28d3ac8b8a6e7077832dbc562c","unresolved":false,"context_lines":[{"line_number":27,"context_line":""},{"line_number":28,"context_line":"def cna(mac):"},{"line_number":29,"context_line":"    \"\"\"Builds a mock Client Network Adapter (or VNIC) for unit tests.\"\"\""},{"line_number":30,"context_line":"    nic \u003d mock.MagicMock()"},{"line_number":31,"context_line":"    nic.mac \u003d mac"},{"line_number":32,"context_line":"    nic.vswitch_uri \u003d \u0027fake_href\u0027"},{"line_number":33,"context_line":"    return nic"},{"line_number":34,"context_line":""},{"line_number":35,"context_line":""},{"line_number":36,"context_line":"class TestNetwork(test.NoDBTestCase):"}],"source_content_type":"text/x-python","patch_set":26,"id":"1f485f77_949ca9c0","line":33,"range":{"start_line":30,"start_character":0,"end_line":33,"end_character":14},"in_reply_to":"1f485f77_889ca96a","updated":"2017-11-16 22:02:01.000000000","message":"Done","commit_id":"363b7df3b9e6f00c6762f11f4a191f665b50f44f"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"9e2ed213f1795f1a73f5a0c0a1abcafe773ab3b0","unresolved":false,"context_lines":[{"line_number":23,"context_line":"from nova import exception"},{"line_number":24,"context_line":"from nova import test"},{"line_number":25,"context_line":"from nova.tests.unit.virt import powervm"},{"line_number":26,"context_line":"from nova.virt.powervm.tasks import network as tf_net"},{"line_number":27,"context_line":""},{"line_number":28,"context_line":""},{"line_number":29,"context_line":"def cna(mac):"}],"source_content_type":"text/x-python","patch_set":36,"id":"7f96bb07_81563f29","line":26,"range":{"start_line":26,"start_character":47,"end_line":26,"end_character":53},"updated":"2018-01-16 17:32:10.000000000","message":"out of curiosity, why \u0027tf_net\u0027 instead of, say, \u0027powervm_net\u0027","commit_id":"8a56694128c2f4d23c9650f6a25403d550d7d5af"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"e65b7052bf1e04261750f8fe92c0604c9561e8f9","unresolved":false,"context_lines":[{"line_number":23,"context_line":"from nova import exception"},{"line_number":24,"context_line":"from nova import test"},{"line_number":25,"context_line":"from nova.tests.unit.virt import powervm"},{"line_number":26,"context_line":"from nova.virt.powervm.tasks import network as tf_net"},{"line_number":27,"context_line":""},{"line_number":28,"context_line":""},{"line_number":29,"context_line":"def cna(mac):"}],"source_content_type":"text/x-python","patch_set":36,"id":"7f96bb07_d2d91bf3","line":26,"range":{"start_line":26,"start_character":47,"end_line":26,"end_character":53},"in_reply_to":"7f96bb07_57697d1e","updated":"2018-01-16 18:13:24.000000000","message":"The \u0027tf\u0027 stands for \u0027TaskFlow\u0027.  We sometimes have same-named modules in nova.virt.powervm and nova.virt.powervm.tasks (e.g. vm.py) so we use the prefixes to disambiguate, and also give the reader a hint that this one involves TaskFlow tasks specifically.","commit_id":"8a56694128c2f4d23c9650f6a25403d550d7d5af"},{"author":{"_account_id":16710,"name":"Eric Berglund","email":"esberglu@us.ibm.com","username":"esberglu"},"change_message_id":"5654ba4a73aef8207a069b75f68cb34bd6485d6a","unresolved":false,"context_lines":[{"line_number":23,"context_line":"from nova import exception"},{"line_number":24,"context_line":"from nova import test"},{"line_number":25,"context_line":"from nova.tests.unit.virt import powervm"},{"line_number":26,"context_line":"from nova.virt.powervm.tasks import network as tf_net"},{"line_number":27,"context_line":""},{"line_number":28,"context_line":""},{"line_number":29,"context_line":"def cna(mac):"}],"source_content_type":"text/x-python","patch_set":36,"id":"7f96bb07_57697d1e","line":26,"range":{"start_line":26,"start_character":47,"end_line":26,"end_character":53},"in_reply_to":"7f96bb07_81563f29","updated":"2018-01-16 17:56:49.000000000","message":"To keep it consistent with the other powervm.tasks imports throughout the powervm virt driver (tf_base, tf_stg, etc.) And those were based on the out-of-tree nova-powervm driver naming conventions which was before my time.","commit_id":"8a56694128c2f4d23c9650f6a25403d550d7d5af"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"696d73ce1967dc1eec2c7a708305de7ffe55f8e7","unresolved":false,"context_lines":[{"line_number":23,"context_line":"from nova import exception"},{"line_number":24,"context_line":"from nova import test"},{"line_number":25,"context_line":"from nova.tests.unit.virt import powervm"},{"line_number":26,"context_line":"from nova.virt.powervm.tasks import network as tf_net"},{"line_number":27,"context_line":""},{"line_number":28,"context_line":""},{"line_number":29,"context_line":"def cna(mac):"}],"source_content_type":"text/x-python","patch_set":36,"id":"7f96bb07_4f7c6b1e","line":26,"range":{"start_line":26,"start_character":47,"end_line":26,"end_character":53},"in_reply_to":"7f96bb07_d2d91bf3","updated":"2018-01-17 10:37:55.000000000","message":"Sounds fair","commit_id":"8a56694128c2f4d23c9650f6a25403d550d7d5af"}],"nova/tests/unit/virt/powervm/test_driver.py":[{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"78267b11844e0a1f7f3dc983a4ae864219c49790","unresolved":false,"context_lines":[{"line_number":93,"context_line":"        self.assertFalse(mock_crt_cfg_drv.called)"},{"line_number":94,"context_line":""},{"line_number":95,"context_line":"    @mock.patch(\u0027nova.virt.powervm.vm.get_pvm_uuid\u0027)"},{"line_number":96,"context_line":"    def test_destroy_pvm(self, mock_getuuid):"},{"line_number":97,"context_line":"        \"\"\"Validates the basic PowerVM destroy.\"\"\""},{"line_number":98,"context_line":"        with mock.patch.object(self.drv, \u0027_destroy\u0027) as mock_dst_int:"},{"line_number":99,"context_line":"            # Invoke the method."}],"source_content_type":"text/x-python","patch_set":7,"id":"3a461143_9f7e8717","line":96,"updated":"2017-01-27 22:36:58.000000000","message":"Need assertions for unplugs","commit_id":"9bbfc0c6f7176599aea2b9b8071e9212630e11cf"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"777a7e5c6bee19c760c8902f5db7ccacce0b9bf6","unresolved":false,"context_lines":[{"line_number":93,"context_line":"        self.assertFalse(mock_crt_cfg_drv.called)"},{"line_number":94,"context_line":""},{"line_number":95,"context_line":"    @mock.patch(\u0027nova.virt.powervm.vm.get_pvm_uuid\u0027)"},{"line_number":96,"context_line":"    def test_destroy_pvm(self, mock_getuuid):"},{"line_number":97,"context_line":"        \"\"\"Validates the basic PowerVM destroy.\"\"\""},{"line_number":98,"context_line":"        with mock.patch.object(self.drv, \u0027_destroy\u0027) as mock_dst_int:"},{"line_number":99,"context_line":"            # Invoke the method."}],"source_content_type":"text/x-python","patch_set":10,"id":"3a461143_880b7629","line":96,"updated":"2017-01-30 22:52:32.000000000","message":"Carry forward PS7 comment: Need assertions for unplugs.\n\nBut wait until the first change set gets tests for destroy internals and this one gets rebased accordingly.","commit_id":"6f8d6af61122edaa0e279c3f4bb69caca81f7bae"},{"author":{"_account_id":10347,"name":"Wang Qing wu","email":"wqw2700@sina.com","username":"cody"},"change_message_id":"f827385d4106b719a6b9c168607fc32e47a20184","unresolved":false,"context_lines":[{"line_number":93,"context_line":"        self.assertFalse(mock_crt_cfg_drv.called)"},{"line_number":94,"context_line":""},{"line_number":95,"context_line":"    @mock.patch(\u0027nova.virt.powervm.vm.get_pvm_uuid\u0027)"},{"line_number":96,"context_line":"    def test_destroy_pvm(self, mock_getuuid):"},{"line_number":97,"context_line":"        \"\"\"Validates the basic PowerVM destroy.\"\"\""},{"line_number":98,"context_line":"        with mock.patch.object(self.drv, \u0027_destroy\u0027) as mock_dst_int:"},{"line_number":99,"context_line":"            # Invoke the method."}],"source_content_type":"text/x-python","patch_set":10,"id":"1a430d35_80b27692","line":96,"in_reply_to":"3a461143_880b7629","updated":"2017-02-08 07:53:49.000000000","message":"It will be added in the later patch set","commit_id":"6f8d6af61122edaa0e279c3f4bb69caca81f7bae"}],"nova/tests/unit/virt/powervm/test_media.py":[{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"341422a637f79441055575e15478732822a63a71","unresolved":false,"context_lines":[{"line_number":189,"context_line":"        ftsk.add_post_execute.assert_called_once_with(\u0027functor_task\u0027)"},{"line_number":190,"context_line":""},{"line_number":191,"context_line":"    def test_mgmt_cna_to_vif(self):"},{"line_number":192,"context_line":"        mock_cna \u003d mock.MagicMock()"},{"line_number":193,"context_line":"        mock_cna.mac \u003d \"FAD4433ED120\""},{"line_number":194,"context_line":""},{"line_number":195,"context_line":"        # Run"},{"line_number":196,"context_line":"        cfg_dr_builder \u003d m.ConfigDrivePowerVM(self.apt)"}],"source_content_type":"text/x-python","patch_set":26,"id":"1f485f77_8874a9ff","line":193,"range":{"start_line":192,"start_character":8,"end_line":193,"end_character":37},"updated":"2017-11-15 23:05:32.000000000","message":"Again\n\n mock_cna \u003d mock.Mock(spec\u003dpvm_net.CNA, mac\u003d\"...\")\n\nHaving to import pvm_net you don\u0027t wind up saving a line, but the autospec is a good thing.","commit_id":"363b7df3b9e6f00c6762f11f4a191f665b50f44f"},{"author":{"_account_id":16710,"name":"Eric Berglund","email":"esberglu@us.ibm.com","username":"esberglu"},"change_message_id":"1f62128fa43b1e28d3ac8b8a6e7077832dbc562c","unresolved":false,"context_lines":[{"line_number":189,"context_line":"        ftsk.add_post_execute.assert_called_once_with(\u0027functor_task\u0027)"},{"line_number":190,"context_line":""},{"line_number":191,"context_line":"    def test_mgmt_cna_to_vif(self):"},{"line_number":192,"context_line":"        mock_cna \u003d mock.MagicMock()"},{"line_number":193,"context_line":"        mock_cna.mac \u003d \"FAD4433ED120\""},{"line_number":194,"context_line":""},{"line_number":195,"context_line":"        # Run"},{"line_number":196,"context_line":"        cfg_dr_builder \u003d m.ConfigDrivePowerVM(self.apt)"}],"source_content_type":"text/x-python","patch_set":26,"id":"1f485f77_94ea690c","line":193,"range":{"start_line":192,"start_character":8,"end_line":193,"end_character":37},"in_reply_to":"1f485f77_8874a9ff","updated":"2017-11-16 22:02:01.000000000","message":"Done","commit_id":"363b7df3b9e6f00c6762f11f4a191f665b50f44f"}],"nova/tests/unit/virt/powervm/test_vif.py":[{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"341422a637f79441055575e15478732822a63a71","unresolved":false,"context_lines":[{"line_number":29,"context_line":""},{"line_number":30,"context_line":"def cna(mac):"},{"line_number":31,"context_line":"    \"\"\"Builds a mock Client Network Adapter for unit tests.\"\"\""},{"line_number":32,"context_line":"    nic \u003d mock.MagicMock()"},{"line_number":33,"context_line":"    nic.mac \u003d mac"},{"line_number":34,"context_line":"    nic.vswitch_uri \u003d \u0027fake_href\u0027"},{"line_number":35,"context_line":"    return nic"},{"line_number":36,"context_line":""},{"line_number":37,"context_line":""},{"line_number":38,"context_line":"class TestVifFunctions(test.NoDBTestCase):"}],"source_content_type":"text/x-python","patch_set":26,"id":"1f485f77_e85e7d74","line":35,"range":{"start_line":32,"start_character":0,"end_line":35,"end_character":14},"updated":"2017-11-15 23:05:32.000000000","message":"ditto","commit_id":"363b7df3b9e6f00c6762f11f4a191f665b50f44f"},{"author":{"_account_id":16710,"name":"Eric Berglund","email":"esberglu@us.ibm.com","username":"esberglu"},"change_message_id":"1f62128fa43b1e28d3ac8b8a6e7077832dbc562c","unresolved":false,"context_lines":[{"line_number":29,"context_line":""},{"line_number":30,"context_line":"def cna(mac):"},{"line_number":31,"context_line":"    \"\"\"Builds a mock Client Network Adapter for unit tests.\"\"\""},{"line_number":32,"context_line":"    nic \u003d mock.MagicMock()"},{"line_number":33,"context_line":"    nic.mac \u003d mac"},{"line_number":34,"context_line":"    nic.vswitch_uri \u003d \u0027fake_href\u0027"},{"line_number":35,"context_line":"    return nic"},{"line_number":36,"context_line":""},{"line_number":37,"context_line":""},{"line_number":38,"context_line":"class TestVifFunctions(test.NoDBTestCase):"}],"source_content_type":"text/x-python","patch_set":26,"id":"1f485f77_b4b9e515","line":35,"range":{"start_line":32,"start_character":0,"end_line":35,"end_character":14},"in_reply_to":"1f485f77_e85e7d74","updated":"2017-11-16 22:02:01.000000000","message":"Done","commit_id":"363b7df3b9e6f00c6762f11f4a191f665b50f44f"}],"nova/virt/powervm/driver.py":[{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"78267b11844e0a1f7f3dc983a4ae864219c49790","unresolved":false,"context_lines":[{"line_number":114,"context_line":"                 {\u0027op\u0027: op, \u0027display_name\u0027: instance.display_name,"},{"line_number":115,"context_line":"                  \u0027name\u0027: instance.name},"},{"line_number":116,"context_line":"                 instance\u003dinstance)"},{"line_number":117,"context_line":""},{"line_number":118,"context_line":"    def _is_booted_from_volume(self, block_device_info):"},{"line_number":119,"context_line":"        \"\"\"Determine whether the root device is listed in block_device_info."},{"line_number":120,"context_line":""},{"line_number":121,"context_line":"        If it is, this can be considered a \u0027boot from Cinder Volume\u0027."},{"line_number":122,"context_line":""},{"line_number":123,"context_line":"        :param block_device_info: The block device info from the compute"},{"line_number":124,"context_line":"                                  manager."},{"line_number":125,"context_line":"        :return: True if the root device is in block_device_info and False if"},{"line_number":126,"context_line":"                 it is not."},{"line_number":127,"context_line":"        \"\"\""},{"line_number":128,"context_line":"        if block_device_info is None:"},{"line_number":129,"context_line":"            return False"},{"line_number":130,"context_line":""},{"line_number":131,"context_line":"        root_bdm \u003d block_device.get_root_bdm("},{"line_number":132,"context_line":"            driver.block_device_info_get_mapping(block_device_info))"},{"line_number":133,"context_line":"        return (root_bdm is not None)"},{"line_number":134,"context_line":""},{"line_number":135,"context_line":"    def get_info(self, instance):"},{"line_number":136,"context_line":"        \"\"\"Get the current status of an instance, by name (not ID!)"}],"source_content_type":"text/x-python","patch_set":7,"id":"3a461143_dfc64f67","line":133,"range":{"start_line":117,"start_character":0,"end_line":133,"end_character":37},"updated":"2017-01-27 22:36:58.000000000","message":"Why is this here?\n\n[Later] See comment on line 342 below.","commit_id":"9bbfc0c6f7176599aea2b9b8071e9212630e11cf"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"a2c8d196875aae246e5607a05dcc4e4664458a4a","unresolved":false,"context_lines":[{"line_number":114,"context_line":"                 {\u0027op\u0027: op, \u0027display_name\u0027: instance.display_name,"},{"line_number":115,"context_line":"                  \u0027name\u0027: instance.name},"},{"line_number":116,"context_line":"                 instance\u003dinstance)"},{"line_number":117,"context_line":""},{"line_number":118,"context_line":"    def _is_booted_from_volume(self, block_device_info):"},{"line_number":119,"context_line":"        \"\"\"Determine whether the root device is listed in block_device_info."},{"line_number":120,"context_line":""},{"line_number":121,"context_line":"        If it is, this can be considered a \u0027boot from Cinder Volume\u0027."},{"line_number":122,"context_line":""},{"line_number":123,"context_line":"        :param block_device_info: The block device info from the compute"},{"line_number":124,"context_line":"                                  manager."},{"line_number":125,"context_line":"        :return: True if the root device is in block_device_info and False if"},{"line_number":126,"context_line":"                 it is not."},{"line_number":127,"context_line":"        \"\"\""},{"line_number":128,"context_line":"        if block_device_info is None:"},{"line_number":129,"context_line":"            return False"},{"line_number":130,"context_line":""},{"line_number":131,"context_line":"        root_bdm \u003d block_device.get_root_bdm("},{"line_number":132,"context_line":"            driver.block_device_info_get_mapping(block_device_info))"},{"line_number":133,"context_line":"        return (root_bdm is not None)"},{"line_number":134,"context_line":""},{"line_number":135,"context_line":"    def get_info(self, instance):"},{"line_number":136,"context_line":"        \"\"\"Get the current status of an instance, by name (not ID!)"}],"source_content_type":"text/x-python","patch_set":7,"id":"3a461143_68272aca","line":133,"range":{"start_line":117,"start_character":0,"end_line":133,"end_character":37},"in_reply_to":"3a461143_dfc64f67","updated":"2017-01-30 22:52:55.000000000","message":"Done","commit_id":"9bbfc0c6f7176599aea2b9b8071e9212630e11cf"},{"author":{"_account_id":8190,"name":"Drew Thorstensen (thorst)","email":"thorst@us.ibm.com","username":"thorst"},"change_message_id":"98828f799bdac2fe2bb03753796e89d587611ea2","unresolved":false,"context_lines":[{"line_number":241,"context_line":"            self.adapter, self.host_wrapper, instance, flavor,"},{"line_number":242,"context_line":"            stg_ftsk\u003dstg_ftsk))"},{"line_number":243,"context_line":""},{"line_number":244,"context_line":"        # Build the PowerVM Slot lookup map."},{"line_number":245,"context_line":"        slot_mgr \u003d slot.build_slot_mgr("},{"line_number":246,"context_line":"            instance, self.store_api, adapter\u003dself.adapter,"},{"line_number":247,"context_line":"            vol_drv_iter\u003dNone)"},{"line_number":248,"context_line":""},{"line_number":249,"context_line":"        # Create a flow for the IO"},{"line_number":250,"context_line":"        flow_spawn.add(tf_net.PlugVifs("}],"source_content_type":"text/x-python","patch_set":7,"id":"3a461143_ead38b5d","line":247,"range":{"start_line":244,"start_character":0,"end_line":247,"end_character":30},"updated":"2017-01-26 16:18:06.000000000","message":"I don\u0027t know that we port over this slot manager thing at all.  I think it should be removed and we should work that as a blueprint in nova itself.","commit_id":"9bbfc0c6f7176599aea2b9b8071e9212630e11cf"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"2813ef1254e4f1929b570192640b7062bd4db903","unresolved":false,"context_lines":[{"line_number":241,"context_line":"            self.adapter, self.host_wrapper, instance, flavor,"},{"line_number":242,"context_line":"            stg_ftsk\u003dstg_ftsk))"},{"line_number":243,"context_line":""},{"line_number":244,"context_line":"        # Build the PowerVM Slot lookup map."},{"line_number":245,"context_line":"        slot_mgr \u003d slot.build_slot_mgr("},{"line_number":246,"context_line":"            instance, self.store_api, adapter\u003dself.adapter,"},{"line_number":247,"context_line":"            vol_drv_iter\u003dNone)"},{"line_number":248,"context_line":""},{"line_number":249,"context_line":"        # Create a flow for the IO"},{"line_number":250,"context_line":"        flow_spawn.add(tf_net.PlugVifs("}],"source_content_type":"text/x-python","patch_set":7,"id":"3a461143_8fc9c05b","line":247,"range":{"start_line":244,"start_character":0,"end_line":247,"end_character":30},"in_reply_to":"3a461143_ead38b5d","updated":"2017-01-30 21:59:55.000000000","message":"Done","commit_id":"9bbfc0c6f7176599aea2b9b8071e9212630e11cf"},{"author":{"_account_id":8190,"name":"Drew Thorstensen (thorst)","email":"thorst@us.ibm.com","username":"thorst"},"change_message_id":"98828f799bdac2fe2bb03753796e89d587611ea2","unresolved":false,"context_lines":[{"line_number":249,"context_line":"        # Create a flow for the IO"},{"line_number":250,"context_line":"        flow_spawn.add(tf_net.PlugVifs("},{"line_number":251,"context_line":"            self.virtapi, self.adapter, instance, network_info,"},{"line_number":252,"context_line":"            self.host_uuid, slot_mgr))"},{"line_number":253,"context_line":"        flow_spawn.add(tf_net.PlugMgmtVif("},{"line_number":254,"context_line":"            self.adapter, instance, self.host_uuid, slot_mgr))"},{"line_number":255,"context_line":""}],"source_content_type":"text/x-python","patch_set":7,"id":"3a461143_8abf67fa","line":252,"range":{"start_line":252,"start_character":28,"end_line":252,"end_character":36},"updated":"2017-01-26 16:18:06.000000000","message":"Per above comment, this would actually not be a parameter.  This applies throughout.","commit_id":"9bbfc0c6f7176599aea2b9b8071e9212630e11cf"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"2813ef1254e4f1929b570192640b7062bd4db903","unresolved":false,"context_lines":[{"line_number":249,"context_line":"        # Create a flow for the IO"},{"line_number":250,"context_line":"        flow_spawn.add(tf_net.PlugVifs("},{"line_number":251,"context_line":"            self.virtapi, self.adapter, instance, network_info,"},{"line_number":252,"context_line":"            self.host_uuid, slot_mgr))"},{"line_number":253,"context_line":"        flow_spawn.add(tf_net.PlugMgmtVif("},{"line_number":254,"context_line":"            self.adapter, instance, self.host_uuid, slot_mgr))"},{"line_number":255,"context_line":""}],"source_content_type":"text/x-python","patch_set":7,"id":"3a461143_afc2fc31","line":252,"range":{"start_line":252,"start_character":28,"end_line":252,"end_character":36},"in_reply_to":"3a461143_8abf67fa","updated":"2017-01-30 21:59:55.000000000","message":"Done","commit_id":"9bbfc0c6f7176599aea2b9b8071e9212630e11cf"},{"author":{"_account_id":8190,"name":"Drew Thorstensen (thorst)","email":"thorst@us.ibm.com","username":"thorst"},"change_message_id":"98828f799bdac2fe2bb03753796e89d587611ea2","unresolved":false,"context_lines":[{"line_number":318,"context_line":"            # directly on the destroy, this clears up the I/O Host side."},{"line_number":319,"context_line":"            flow.add(tf_vm.Get(self.adapter, self.host_uuid, instance))"},{"line_number":320,"context_line":""},{"line_number":321,"context_line":"            # Build the PowerVM Slot lookup map."},{"line_number":322,"context_line":"            slot_mgr \u003d slot.build_slot_mgr(instance, self.store_api)"},{"line_number":323,"context_line":""},{"line_number":324,"context_line":"            # Call the unplug VIFs task.  While CNAs get removed from the LPAR"},{"line_number":325,"context_line":"            # directly on the destroy, this clears up the I/O Host side."}],"source_content_type":"text/x-python","patch_set":7,"id":"3a461143_0a429710","line":322,"range":{"start_line":321,"start_character":0,"end_line":322,"end_character":68},"updated":"2017-01-26 16:18:06.000000000","message":"See above.","commit_id":"9bbfc0c6f7176599aea2b9b8071e9212630e11cf"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"2813ef1254e4f1929b570192640b7062bd4db903","unresolved":false,"context_lines":[{"line_number":318,"context_line":"            # directly on the destroy, this clears up the I/O Host side."},{"line_number":319,"context_line":"            flow.add(tf_vm.Get(self.adapter, self.host_uuid, instance))"},{"line_number":320,"context_line":""},{"line_number":321,"context_line":"            # Build the PowerVM Slot lookup map."},{"line_number":322,"context_line":"            slot_mgr \u003d slot.build_slot_mgr(instance, self.store_api)"},{"line_number":323,"context_line":""},{"line_number":324,"context_line":"            # Call the unplug VIFs task.  While CNAs get removed from the LPAR"},{"line_number":325,"context_line":"            # directly on the destroy, this clears up the I/O Host side."}],"source_content_type":"text/x-python","patch_set":7,"id":"3a461143_efdec40f","line":322,"range":{"start_line":321,"start_character":0,"end_line":322,"end_character":68},"in_reply_to":"3a461143_0a429710","updated":"2017-01-30 21:59:55.000000000","message":"Done","commit_id":"9bbfc0c6f7176599aea2b9b8071e9212630e11cf"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"78267b11844e0a1f7f3dc983a4ae864219c49790","unresolved":false,"context_lines":[{"line_number":339,"context_line":"            # Only detach the disk adapters if this is not a boot from volume"},{"line_number":340,"context_line":"            # since volumes are handled above.  This is only for disks."},{"line_number":341,"context_line":"            destroy_disk_task \u003d None"},{"line_number":342,"context_line":"            if not self._is_booted_from_volume(block_device_info):"},{"line_number":343,"context_line":"                # Detach the disk storage adapters (when the stg_ftsk runs)"},{"line_number":344,"context_line":"                flow.add(tf_stg.DetachDisk("},{"line_number":345,"context_line":"                    self.disk_dvr, context, instance, stg_ftsk))"}],"source_content_type":"text/x-python","patch_set":7,"id":"3a461143_3fa8338d","line":342,"range":{"start_line":342,"start_character":24,"end_line":342,"end_character":46},"updated":"2017-01-27 22:36:58.000000000","message":"Rebase on previous change sets and this goes away.","commit_id":"9bbfc0c6f7176599aea2b9b8071e9212630e11cf"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"a2c8d196875aae246e5607a05dcc4e4664458a4a","unresolved":false,"context_lines":[{"line_number":339,"context_line":"            # Only detach the disk adapters if this is not a boot from volume"},{"line_number":340,"context_line":"            # since volumes are handled above.  This is only for disks."},{"line_number":341,"context_line":"            destroy_disk_task \u003d None"},{"line_number":342,"context_line":"            if not self._is_booted_from_volume(block_device_info):"},{"line_number":343,"context_line":"                # Detach the disk storage adapters (when the stg_ftsk runs)"},{"line_number":344,"context_line":"                flow.add(tf_stg.DetachDisk("},{"line_number":345,"context_line":"                    self.disk_dvr, context, instance, stg_ftsk))"}],"source_content_type":"text/x-python","patch_set":7,"id":"3a461143_a82d92a9","line":342,"range":{"start_line":342,"start_character":24,"end_line":342,"end_character":46},"in_reply_to":"3a461143_3fa8338d","updated":"2017-01-30 22:52:55.000000000","message":"Done","commit_id":"9bbfc0c6f7176599aea2b9b8071e9212630e11cf"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"b0469a17547cefe2c4ba47a611b5da509e16a0bd","unresolved":false,"context_lines":[{"line_number":365,"context_line":"                    sare.reraise \u003d False"},{"line_number":366,"context_line":"                    raise exc.InstanceNotFound(instance_id\u003dinstance.uuid)"},{"line_number":367,"context_line":""},{"line_number":368,"context_line":"    def _get_host_uuid(self):"},{"line_number":369,"context_line":"        \"\"\"Get the System wrapper and its UUID for the (single) host.\"\"\""},{"line_number":370,"context_line":"        syswraps \u003d pvm_ms.System.get(self.adapter)"},{"line_number":371,"context_line":"        if len(syswraps) !\u003d 1:"},{"line_number":372,"context_line":"            raise Exception(\"Expected exactly one host; found %d\","},{"line_number":373,"context_line":"                            len(syswraps))"},{"line_number":374,"context_line":"        self.host_wrapper \u003d syswraps[0]"},{"line_number":375,"context_line":"        self.host_uuid \u003d self.host_wrapper.uuid"},{"line_number":376,"context_line":"        LOG.info(\"Host UUID is:%s\", self.host_uuid)"},{"line_number":377,"context_line":""},{"line_number":378,"context_line":"    def deallocate_networks_on_reschedule(self, instance):"},{"line_number":379,"context_line":"        \"\"\"Does the driver want networks deallocated on reschedule?"}],"source_content_type":"text/x-python","patch_set":25,"id":"3f4b6375_2ba328b4","line":376,"range":{"start_line":368,"start_character":0,"end_line":376,"end_character":51},"updated":"2017-11-06 17:05:43.000000000","message":"Let\u0027s see if we can get rid of this.","commit_id":"d17c318eb2b4a22961a929f53a94e85a087e2cf8"},{"author":{"_account_id":16710,"name":"Eric Berglund","email":"esberglu@us.ibm.com","username":"esberglu"},"change_message_id":"3ffa85f520a5ccd65c0cdc0bf45d067e9a9c6896","unresolved":false,"context_lines":[{"line_number":365,"context_line":"                    sare.reraise \u003d False"},{"line_number":366,"context_line":"                    raise exc.InstanceNotFound(instance_id\u003dinstance.uuid)"},{"line_number":367,"context_line":""},{"line_number":368,"context_line":"    def _get_host_uuid(self):"},{"line_number":369,"context_line":"        \"\"\"Get the System wrapper and its UUID for the (single) host.\"\"\""},{"line_number":370,"context_line":"        syswraps \u003d pvm_ms.System.get(self.adapter)"},{"line_number":371,"context_line":"        if len(syswraps) !\u003d 1:"},{"line_number":372,"context_line":"            raise Exception(\"Expected exactly one host; found %d\","},{"line_number":373,"context_line":"                            len(syswraps))"},{"line_number":374,"context_line":"        self.host_wrapper \u003d syswraps[0]"},{"line_number":375,"context_line":"        self.host_uuid \u003d self.host_wrapper.uuid"},{"line_number":376,"context_line":"        LOG.info(\"Host UUID is:%s\", self.host_uuid)"},{"line_number":377,"context_line":""},{"line_number":378,"context_line":"    def deallocate_networks_on_reschedule(self, instance):"},{"line_number":379,"context_line":"        \"\"\"Does the driver want networks deallocated on reschedule?"}],"source_content_type":"text/x-python","patch_set":25,"id":"1f485f77_729aaa6e","line":376,"range":{"start_line":368,"start_character":0,"end_line":376,"end_character":51},"in_reply_to":"3f4b6375_2ba328b4","updated":"2017-11-15 22:17:18.000000000","message":"Done","commit_id":"d17c318eb2b4a22961a929f53a94e85a087e2cf8"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"3950e915c8a1f9cca748108dcd9df60aa62e05b3","unresolved":false,"context_lines":[{"line_number":66,"context_line":"        self.adapter \u003d pvm_apt.Adapter("},{"line_number":67,"context_line":"            pvm_apt.Session(conn_tries\u003d60),"},{"line_number":68,"context_line":"            helpers\u003d[log_hlp.log_helper, vio_hlp.vios_busy_retry_helper])"},{"line_number":69,"context_line":""},{"line_number":70,"context_line":"        # Make sure the Virtual I/O Server(s) are available."},{"line_number":71,"context_line":"        pvm_par.validate_vios_ready(self.adapter)"},{"line_number":72,"context_line":"        self.host_wrapper \u003d pvm_ms.System.get(self.adapter)[0]"}],"source_content_type":"text/x-python","patch_set":36,"id":"7f96bb07_c6d9bd83","line":69,"updated":"2018-01-15 15:23:34.000000000","message":"nit: seems like an unrelated change","commit_id":"8a56694128c2f4d23c9650f6a25403d550d7d5af"},{"author":{"_account_id":16710,"name":"Eric Berglund","email":"esberglu@us.ibm.com","username":"esberglu"},"change_message_id":"5a27f6d4f9d767247ddfb656b68ba85cf98e9594","unresolved":false,"context_lines":[{"line_number":66,"context_line":"        self.adapter \u003d pvm_apt.Adapter("},{"line_number":67,"context_line":"            pvm_apt.Session(conn_tries\u003d60),"},{"line_number":68,"context_line":"            helpers\u003d[log_hlp.log_helper, vio_hlp.vios_busy_retry_helper])"},{"line_number":69,"context_line":""},{"line_number":70,"context_line":"        # Make sure the Virtual I/O Server(s) are available."},{"line_number":71,"context_line":"        pvm_par.validate_vios_ready(self.adapter)"},{"line_number":72,"context_line":"        self.host_wrapper \u003d pvm_ms.System.get(self.adapter)[0]"}],"source_content_type":"text/x-python","patch_set":36,"id":"7f96bb07_6650b75e","line":69,"in_reply_to":"7f96bb07_c6d9bd83","updated":"2018-01-15 17:24:27.000000000","message":"Done","commit_id":"8a56694128c2f4d23c9650f6a25403d550d7d5af"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"3950e915c8a1f9cca748108dcd9df60aa62e05b3","unresolved":false,"context_lines":[{"line_number":246,"context_line":""},{"line_number":247,"context_line":"            # Call the unplug VIFs task.  While CNAs get removed from the LPAR"},{"line_number":248,"context_line":"            # directly on the destroy, this clears up the I/O Host side."},{"line_number":249,"context_line":"            flow.add(tf_net.UnplugVifs(self.adapter, instance, network_info))"},{"line_number":250,"context_line":""},{"line_number":251,"context_line":"            # Add the disconnect/deletion of the vOpt to the transaction"},{"line_number":252,"context_line":"            # manager."}],"source_content_type":"text/x-python","patch_set":36,"id":"7f96bb07_c670dd75","line":249,"updated":"2018-01-15 15:23:34.000000000","message":"During spawn there is a separate plug for mgmt interface but no explicit unplug for that here in destroy. Is it intentionally non-symmetric?","commit_id":"8a56694128c2f4d23c9650f6a25403d550d7d5af"},{"author":{"_account_id":16710,"name":"Eric Berglund","email":"esberglu@us.ibm.com","username":"esberglu"},"change_message_id":"5a27f6d4f9d767247ddfb656b68ba85cf98e9594","unresolved":false,"context_lines":[{"line_number":246,"context_line":""},{"line_number":247,"context_line":"            # Call the unplug VIFs task.  While CNAs get removed from the LPAR"},{"line_number":248,"context_line":"            # directly on the destroy, this clears up the I/O Host side."},{"line_number":249,"context_line":"            flow.add(tf_net.UnplugVifs(self.adapter, instance, network_info))"},{"line_number":250,"context_line":""},{"line_number":251,"context_line":"            # Add the disconnect/deletion of the vOpt to the transaction"},{"line_number":252,"context_line":"            # manager."}],"source_content_type":"text/x-python","patch_set":36,"id":"7f96bb07_e65cc77f","line":249,"in_reply_to":"7f96bb07_c670dd75","updated":"2018-01-15 17:24:27.000000000","message":"Yep it\u0027s intentional. The UnplugVifs will handle the mgmt vif unplug.","commit_id":"8a56694128c2f4d23c9650f6a25403d550d7d5af"}],"nova/virt/powervm/media.py":[{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"b0469a17547cefe2c4ba47a611b5da509e16a0bd","unresolved":false,"context_lines":[{"line_number":42,"context_line":"_VOPT_VG \u003d \u0027rootvg\u0027"},{"line_number":43,"context_line":"_VOPT_SIZE_GB \u003d 1"},{"line_number":44,"context_line":"_VOPT_TMPDIR \u003d \u0027/tmp/cfgdrv/\u0027"},{"line_number":45,"context_line":"_USE_RMC_IPV6_SCHEME \u003d True"},{"line_number":46,"context_line":""},{"line_number":47,"context_line":""},{"line_number":48,"context_line":"class ConfigDrivePowerVM(object):"}],"source_content_type":"text/x-python","patch_set":25,"id":"3f4b6375_0bc18c54","line":45,"range":{"start_line":45,"start_character":0,"end_line":45,"end_character":27},"updated":"2017-11-06 17:05:43.000000000","message":"We can get rid of this.","commit_id":"d17c318eb2b4a22961a929f53a94e85a087e2cf8"},{"author":{"_account_id":16710,"name":"Eric Berglund","email":"esberglu@us.ibm.com","username":"esberglu"},"change_message_id":"3ffa85f520a5ccd65c0cdc0bf45d067e9a9c6896","unresolved":false,"context_lines":[{"line_number":42,"context_line":"_VOPT_VG \u003d \u0027rootvg\u0027"},{"line_number":43,"context_line":"_VOPT_SIZE_GB \u003d 1"},{"line_number":44,"context_line":"_VOPT_TMPDIR \u003d \u0027/tmp/cfgdrv/\u0027"},{"line_number":45,"context_line":"_USE_RMC_IPV6_SCHEME \u003d True"},{"line_number":46,"context_line":""},{"line_number":47,"context_line":""},{"line_number":48,"context_line":"class ConfigDrivePowerVM(object):"}],"source_content_type":"text/x-python","patch_set":25,"id":"1f485f77_cf2539c4","line":45,"range":{"start_line":45,"start_character":0,"end_line":45,"end_character":27},"in_reply_to":"3f4b6375_0bc18c54","updated":"2017-11-15 22:17:18.000000000","message":"Done","commit_id":"d17c318eb2b4a22961a929f53a94e85a087e2cf8"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"b0469a17547cefe2c4ba47a611b5da509e16a0bd","unresolved":false,"context_lines":[{"line_number":148,"context_line":"        \"\"\""},{"line_number":149,"context_line":"        # If there is a management client network adapter, then we should"},{"line_number":150,"context_line":"        # convert that to a VIF and add it to the network info"},{"line_number":151,"context_line":"        if mgmt_cna is not None and _USE_RMC_IPV6_SCHEME:"},{"line_number":152,"context_line":"            network_info \u003d copy.deepcopy(network_info)"},{"line_number":153,"context_line":"            network_info.append(self._mgmt_cna_to_vif(mgmt_cna))"},{"line_number":154,"context_line":""}],"source_content_type":"text/x-python","patch_set":25,"id":"3f4b6375_ebb3d008","line":151,"range":{"start_line":151,"start_character":32,"end_line":151,"end_character":56},"updated":"2017-11-06 17:05:43.000000000","message":"and this","commit_id":"d17c318eb2b4a22961a929f53a94e85a087e2cf8"},{"author":{"_account_id":16710,"name":"Eric Berglund","email":"esberglu@us.ibm.com","username":"esberglu"},"change_message_id":"3ffa85f520a5ccd65c0cdc0bf45d067e9a9c6896","unresolved":false,"context_lines":[{"line_number":148,"context_line":"        \"\"\""},{"line_number":149,"context_line":"        # If there is a management client network adapter, then we should"},{"line_number":150,"context_line":"        # convert that to a VIF and add it to the network info"},{"line_number":151,"context_line":"        if mgmt_cna is not None and _USE_RMC_IPV6_SCHEME:"},{"line_number":152,"context_line":"            network_info \u003d copy.deepcopy(network_info)"},{"line_number":153,"context_line":"            network_info.append(self._mgmt_cna_to_vif(mgmt_cna))"},{"line_number":154,"context_line":""}],"source_content_type":"text/x-python","patch_set":25,"id":"1f485f77_af20bdb1","line":151,"range":{"start_line":151,"start_character":32,"end_line":151,"end_character":56},"in_reply_to":"3f4b6375_ebb3d008","updated":"2017-11-15 22:17:18.000000000","message":"Done","commit_id":"d17c318eb2b4a22961a929f53a94e85a087e2cf8"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"3950e915c8a1f9cca748108dcd9df60aa62e05b3","unresolved":false,"context_lines":[{"line_number":178,"context_line":""},{"line_number":179,"context_line":"    def _mgmt_cna_to_vif(self, cna):"},{"line_number":180,"context_line":"        \"\"\"Converts the mgmt CNA to VIF format for network injection.\"\"\""},{"line_number":181,"context_line":"        # See IEFT RFC 4291 appendix A for information on this algorithm"},{"line_number":182,"context_line":"        mac \u003d vm.norm_mac(cna.mac)"},{"line_number":183,"context_line":"        ipv6_link_local \u003d self._mac_to_link_local(mac)"},{"line_number":184,"context_line":""}],"source_content_type":"text/x-python","patch_set":36,"id":"7f96bb07_46d84d52","line":181,"range":{"start_line":181,"start_character":14,"end_line":181,"end_character":18},"updated":"2018-01-15 15:23:34.000000000","message":"nit: IETF?\nAlso as far as I understand it is the \u0027IEEE 802 48-bit MACs\u0027 case of Appendix A","commit_id":"8a56694128c2f4d23c9650f6a25403d550d7d5af"},{"author":{"_account_id":16710,"name":"Eric Berglund","email":"esberglu@us.ibm.com","username":"esberglu"},"change_message_id":"5a27f6d4f9d767247ddfb656b68ba85cf98e9594","unresolved":false,"context_lines":[{"line_number":178,"context_line":""},{"line_number":179,"context_line":"    def _mgmt_cna_to_vif(self, cna):"},{"line_number":180,"context_line":"        \"\"\"Converts the mgmt CNA to VIF format for network injection.\"\"\""},{"line_number":181,"context_line":"        # See IEFT RFC 4291 appendix A for information on this algorithm"},{"line_number":182,"context_line":"        mac \u003d vm.norm_mac(cna.mac)"},{"line_number":183,"context_line":"        ipv6_link_local \u003d self._mac_to_link_local(mac)"},{"line_number":184,"context_line":""}],"source_content_type":"text/x-python","patch_set":36,"id":"7f96bb07_0e7789a2","line":181,"range":{"start_line":181,"start_character":14,"end_line":181,"end_character":18},"in_reply_to":"7f96bb07_46d84d52","updated":"2018-01-15 17:24:27.000000000","message":"Updated this comment and moved it down to _mac_link_to_local to make it clear why this is referenced.","commit_id":"8a56694128c2f4d23c9650f6a25403d550d7d5af"},{"author":{"_account_id":10608,"name":"Matthew Edmonds","email":"edmondsw@us.ibm.com","username":"edmondsw"},"change_message_id":"4fbd66f918f566347c6e950739896fd35216530f","unresolved":false,"context_lines":[{"line_number":195,"context_line":"        # mac address"},{"line_number":196,"context_line":"        splits \u003d mac.split(\u0027:\u0027)"},{"line_number":197,"context_line":""},{"line_number":198,"context_line":"        # # Create EUI-64 id per RFC 4291 Appendix A"},{"line_number":199,"context_line":"        splits.insert(3, \u0027ff\u0027)"},{"line_number":200,"context_line":"        splits.insert(4, \u0027fe\u0027)"},{"line_number":201,"context_line":""}],"source_content_type":"text/x-python","patch_set":38,"id":"7f96bb07_5c554b1c","line":198,"range":{"start_line":198,"start_character":8,"end_line":198,"end_character":12},"updated":"2018-01-15 18:59:51.000000000","message":"nit: duplicate #","commit_id":"564827e089fb0e6d4649ee87a4cf5c0f548d0d4d"},{"author":{"_account_id":16710,"name":"Eric Berglund","email":"esberglu@us.ibm.com","username":"esberglu"},"change_message_id":"9666e08d89436fdafb1bc741c53085cdf991f9ff","unresolved":false,"context_lines":[{"line_number":195,"context_line":"        # mac address"},{"line_number":196,"context_line":"        splits \u003d mac.split(\u0027:\u0027)"},{"line_number":197,"context_line":""},{"line_number":198,"context_line":"        # # Create EUI-64 id per RFC 4291 Appendix A"},{"line_number":199,"context_line":"        splits.insert(3, \u0027ff\u0027)"},{"line_number":200,"context_line":"        splits.insert(4, \u0027fe\u0027)"},{"line_number":201,"context_line":""}],"source_content_type":"text/x-python","patch_set":38,"id":"7f96bb07_77f940c6","line":198,"range":{"start_line":198,"start_character":8,"end_line":198,"end_character":12},"in_reply_to":"7f96bb07_5c554b1c","updated":"2018-01-15 20:32:32.000000000","message":"Done","commit_id":"564827e089fb0e6d4649ee87a4cf5c0f548d0d4d"}],"nova/virt/powervm/slot.py":[{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"78267b11844e0a1f7f3dc983a4ae864219c49790","unresolved":false,"context_lines":[{"line_number":1,"context_line":"# Copyright 2016 IBM Corp."},{"line_number":2,"context_line":"#"},{"line_number":3,"context_line":"# All Rights Reserved."},{"line_number":4,"context_line":"#"}],"source_content_type":"text/x-python","patch_set":7,"id":"3a461143_5fb25f07","line":1,"range":{"start_line":1,"start_character":12,"end_line":1,"end_character":16},"updated":"2017-01-27 22:36:58.000000000","message":"2017\n\n...but agree with thorst that this whole file should disappear.","commit_id":"9bbfc0c6f7176599aea2b9b8071e9212630e11cf"},{"author":{"_account_id":8190,"name":"Drew Thorstensen (thorst)","email":"thorst@us.ibm.com","username":"thorst"},"change_message_id":"98828f799bdac2fe2bb03753796e89d587611ea2","unresolved":false,"context_lines":[{"line_number":1,"context_line":"# Copyright 2016 IBM Corp."},{"line_number":2,"context_line":"#"},{"line_number":3,"context_line":"# All Rights Reserved."},{"line_number":4,"context_line":"#"},{"line_number":5,"context_line":"#    Licensed under the Apache License, Version 2.0 (the \"License\"); you may"},{"line_number":6,"context_line":"#    not use this file except in compliance with the License. You may obtain"},{"line_number":7,"context_line":"#    a copy of the License at"},{"line_number":8,"context_line":"#"},{"line_number":9,"context_line":"#         http://www.apache.org/licenses/LICENSE-2.0"},{"line_number":10,"context_line":"#"},{"line_number":11,"context_line":"#    Unless required by applicable law or agreed to in writing, software"},{"line_number":12,"context_line":"#    distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT"},{"line_number":13,"context_line":"#    WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the"},{"line_number":14,"context_line":"#    License for the specific language governing permissions and limitations"},{"line_number":15,"context_line":"#    under the License."},{"line_number":16,"context_line":""},{"line_number":17,"context_line":"import six"},{"line_number":18,"context_line":""}],"source_content_type":"text/x-python","patch_set":7,"id":"3a461143_ca5ecfe8","line":15,"range":{"start_line":1,"start_character":0,"end_line":15,"end_character":23},"updated":"2017-01-26 16:18:06.000000000","message":"None of this is related to VIF Plugging.\n\nI also don\u0027t think it should be in this patch set.  This concept needs to be brought forward as a blueprint.","commit_id":"9bbfc0c6f7176599aea2b9b8071e9212630e11cf"}],"nova/virt/powervm/tasks/network.py":[{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"78267b11844e0a1f7f3dc983a4ae864219c49790","unresolved":false,"context_lines":[{"line_number":1,"context_line":"# Copyright 2015, 2016 IBM Corp."},{"line_number":2,"context_line":"#"},{"line_number":3,"context_line":"# All Rights Reserved."},{"line_number":4,"context_line":"#"}],"source_content_type":"text/x-python","patch_set":7,"id":"3a461143_ffecebf4","line":1,"range":{"start_line":1,"start_character":18,"end_line":1,"end_character":22},"updated":"2017-01-27 22:36:58.000000000","message":"2017","commit_id":"9bbfc0c6f7176599aea2b9b8071e9212630e11cf"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"2813ef1254e4f1929b570192640b7062bd4db903","unresolved":false,"context_lines":[{"line_number":1,"context_line":"# Copyright 2015, 2016 IBM Corp."},{"line_number":2,"context_line":"#"},{"line_number":3,"context_line":"# All Rights Reserved."},{"line_number":4,"context_line":"#"}],"source_content_type":"text/x-python","patch_set":7,"id":"3a461143_afd91c24","line":1,"range":{"start_line":1,"start_character":18,"end_line":1,"end_character":22},"in_reply_to":"3a461143_ffecebf4","updated":"2017-01-30 21:59:55.000000000","message":"Done","commit_id":"9bbfc0c6f7176599aea2b9b8071e9212630e11cf"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"78267b11844e0a1f7f3dc983a4ae864219c49790","unresolved":false,"context_lines":[{"line_number":79,"context_line":"        return cna_w_list"},{"line_number":80,"context_line":""},{"line_number":81,"context_line":""},{"line_number":82,"context_line":"class PlugVifs(pvm_task.PowerVMTask):"},{"line_number":83,"context_line":""},{"line_number":84,"context_line":"    \"\"\"The task to plug the Virtual Network Interfaces to a VM.\"\"\""},{"line_number":85,"context_line":""}],"source_content_type":"text/x-python","patch_set":7,"id":"3a461143_7fe0fbfa","line":82,"range":{"start_line":82,"start_character":6,"end_line":82,"end_character":14},"updated":"2017-01-27 22:36:58.000000000","message":"Why didn\u0027t the revert_impl make it into this change set?","commit_id":"9bbfc0c6f7176599aea2b9b8071e9212630e11cf"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"2813ef1254e4f1929b570192640b7062bd4db903","unresolved":false,"context_lines":[{"line_number":79,"context_line":"        return cna_w_list"},{"line_number":80,"context_line":""},{"line_number":81,"context_line":""},{"line_number":82,"context_line":"class PlugVifs(pvm_task.PowerVMTask):"},{"line_number":83,"context_line":""},{"line_number":84,"context_line":"    \"\"\"The task to plug the Virtual Network Interfaces to a VM.\"\"\""},{"line_number":85,"context_line":""}],"source_content_type":"text/x-python","patch_set":7,"id":"3a461143_ef1324b6","line":82,"range":{"start_line":82,"start_character":6,"end_line":82,"end_character":14},"in_reply_to":"3a461143_7fe0fbfa","updated":"2017-01-30 21:59:55.000000000","message":"Done","commit_id":"9bbfc0c6f7176599aea2b9b8071e9212630e11cf"},{"author":{"_account_id":8190,"name":"Drew Thorstensen (thorst)","email":"thorst@us.ibm.com","username":"thorst"},"change_message_id":"98828f799bdac2fe2bb03753796e89d587611ea2","unresolved":false,"context_lines":[{"line_number":121,"context_line":"        :return: True if a CNA/VNIC (as appropriate) with the network_info\u0027s"},{"line_number":122,"context_line":"                 MAC address exists on the instance.  False otherwise."},{"line_number":123,"context_line":"        \"\"\""},{"line_number":124,"context_line":"        # Are we looking for a VNIC or a CNA?"},{"line_number":125,"context_line":"        if network_info[\u0027vnic_type\u0027] \u003d\u003d \u0027direct\u0027:"},{"line_number":126,"context_line":"            if self.vnics is None:"},{"line_number":127,"context_line":"                self.vnics \u003d vm.get_vnics(self.adapter, self.instance)"},{"line_number":128,"context_line":"            vifs \u003d self.vnics"}],"source_content_type":"text/x-python","patch_set":7,"id":"3a461143_0a10d700","line":125,"range":{"start_line":124,"start_character":0,"end_line":125,"end_character":49},"updated":"2017-01-26 16:18:06.000000000","message":"Hmm...technically we don\u0027t support vNIC (really SR-IOV) yet in tree.  But I don\u0027t see much harm putting this in for now.\n\nEric F. may have a conflicting view.","commit_id":"9bbfc0c6f7176599aea2b9b8071e9212630e11cf"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"78267b11844e0a1f7f3dc983a4ae864219c49790","unresolved":false,"context_lines":[{"line_number":121,"context_line":"        :return: True if a CNA/VNIC (as appropriate) with the network_info\u0027s"},{"line_number":122,"context_line":"                 MAC address exists on the instance.  False otherwise."},{"line_number":123,"context_line":"        \"\"\""},{"line_number":124,"context_line":"        # Are we looking for a VNIC or a CNA?"},{"line_number":125,"context_line":"        if network_info[\u0027vnic_type\u0027] \u003d\u003d \u0027direct\u0027:"},{"line_number":126,"context_line":"            if self.vnics is None:"},{"line_number":127,"context_line":"                self.vnics \u003d vm.get_vnics(self.adapter, self.instance)"},{"line_number":128,"context_line":"            vifs \u003d self.vnics"}],"source_content_type":"text/x-python","patch_set":7,"id":"3a461143_5f589f8a","line":125,"range":{"start_line":124,"start_character":0,"end_line":125,"end_character":49},"in_reply_to":"3a461143_0a10d700","updated":"2017-01-27 22:36:58.000000000","message":"I agree - let\u0027s remove this block and just have the `if self.cnas is None` bit.","commit_id":"9bbfc0c6f7176599aea2b9b8071e9212630e11cf"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"2813ef1254e4f1929b570192640b7062bd4db903","unresolved":false,"context_lines":[{"line_number":121,"context_line":"        :return: True if a CNA/VNIC (as appropriate) with the network_info\u0027s"},{"line_number":122,"context_line":"                 MAC address exists on the instance.  False otherwise."},{"line_number":123,"context_line":"        \"\"\""},{"line_number":124,"context_line":"        # Are we looking for a VNIC or a CNA?"},{"line_number":125,"context_line":"        if network_info[\u0027vnic_type\u0027] \u003d\u003d \u0027direct\u0027:"},{"line_number":126,"context_line":"            if self.vnics is None:"},{"line_number":127,"context_line":"                self.vnics \u003d vm.get_vnics(self.adapter, self.instance)"},{"line_number":128,"context_line":"            vifs \u003d self.vnics"}],"source_content_type":"text/x-python","patch_set":7,"id":"3a461143_6f2814e3","line":125,"range":{"start_line":124,"start_character":0,"end_line":125,"end_character":49},"in_reply_to":"3a461143_5f589f8a","updated":"2017-01-30 21:59:55.000000000","message":"Done","commit_id":"9bbfc0c6f7176599aea2b9b8071e9212630e11cf"},{"author":{"_account_id":8190,"name":"Drew Thorstensen (thorst)","email":"thorst@us.ibm.com","username":"thorst"},"change_message_id":"98828f799bdac2fe2bb03753796e89d587611ea2","unresolved":false,"context_lines":[{"line_number":285,"context_line":"        # be needed if there is not a VIF on the secure RMC vSwitch"},{"line_number":286,"context_line":"        vswitch \u003d vif.get_secure_rmc_vswitch(self.adapter, self.host_uuid)"},{"line_number":287,"context_line":"        if vswitch is None:"},{"line_number":288,"context_line":"            LOG.debug(\u0027No management VIF created for instance %s due to \u0027"},{"line_number":289,"context_line":"                      \u0027lack of Management Virtual Switch\u0027,"},{"line_number":290,"context_line":"                      self.instance.name)"},{"line_number":291,"context_line":"            return None"}],"source_content_type":"text/x-python","patch_set":7,"id":"3a461143_ea2f0b3c","line":288,"range":{"start_line":288,"start_character":16,"end_line":288,"end_character":21},"updated":"2017-01-26 16:18:06.000000000","message":"This should probably be a warning, and I think it should go back to the OOT driver too.","commit_id":"9bbfc0c6f7176599aea2b9b8071e9212630e11cf"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"2813ef1254e4f1929b570192640b7062bd4db903","unresolved":false,"context_lines":[{"line_number":285,"context_line":"        # be needed if there is not a VIF on the secure RMC vSwitch"},{"line_number":286,"context_line":"        vswitch \u003d vif.get_secure_rmc_vswitch(self.adapter, self.host_uuid)"},{"line_number":287,"context_line":"        if vswitch is None:"},{"line_number":288,"context_line":"            LOG.debug(\u0027No management VIF created for instance %s due to \u0027"},{"line_number":289,"context_line":"                      \u0027lack of Management Virtual Switch\u0027,"},{"line_number":290,"context_line":"                      self.instance.name)"},{"line_number":291,"context_line":"            return None"}],"source_content_type":"text/x-python","patch_set":7,"id":"3a461143_6f049449","line":288,"range":{"start_line":288,"start_character":16,"end_line":288,"end_character":21},"in_reply_to":"3a461143_ea2f0b3c","updated":"2017-01-30 21:59:55.000000000","message":"Done and done.","commit_id":"9bbfc0c6f7176599aea2b9b8071e9212630e11cf"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"b0469a17547cefe2c4ba47a611b5da509e16a0bd","unresolved":false,"context_lines":[{"line_number":290,"context_line":"        # be needed if there is not a VIF on the secure RMC vSwitch"},{"line_number":291,"context_line":"        vswitch \u003d vif.get_secure_rmc_vswitch(self.adapter, self.host_uuid)"},{"line_number":292,"context_line":"        if vswitch is None:"},{"line_number":293,"context_line":"            LOG.warning(\u0027No management VIF created for instance %s due to \u0027"},{"line_number":294,"context_line":"                        \u0027lack of Management Virtual Switch\u0027,"},{"line_number":295,"context_line":"                        self.instance.name)"},{"line_number":296,"context_line":"            return None"}],"source_content_type":"text/x-python","patch_set":8,"id":"3a461143_cdc3d055","line":293,"updated":"2017-11-06 17:05:43.000000000","message":"translate","commit_id":"44db9065b0cf9f10b8b49703acadf2e4f199cd6a"},{"author":{"_account_id":16710,"name":"Eric Berglund","email":"esberglu@us.ibm.com","username":"esberglu"},"change_message_id":"e125ed7342e466de3a2a83c5f5c62e684e3bd7d0","unresolved":false,"context_lines":[{"line_number":23,"context_line":"from pypowervm.wrappers import network as pvm_net"},{"line_number":24,"context_line":""},{"line_number":25,"context_line":"from nova import conf as cfg"},{"line_number":26,"context_line":"from nova.i18n import _LE, _LI, _LW"},{"line_number":27,"context_line":"from nova.virt.powervm.tasks import base as pvm_task"},{"line_number":28,"context_line":"from nova.virt.powervm import vif"},{"line_number":29,"context_line":"from nova.virt.powervm import vm"}],"source_content_type":"text/x-python","patch_set":14,"id":"7f515b1d_4d16bfaa","line":26,"range":{"start_line":26,"start_character":0,"end_line":26,"end_character":35},"updated":"2017-09-27 14:26:53.000000000","message":"Get rid of these","commit_id":"655ca898ceb70756650a2e54a026f93a771abbf9"},{"author":{"_account_id":16710,"name":"Eric Berglund","email":"esberglu@us.ibm.com","username":"esberglu"},"change_message_id":"b5ed0614ac86e3e16ef0fb4d02c6a7204bfdaa65","unresolved":false,"context_lines":[{"line_number":23,"context_line":"from pypowervm.wrappers import network as pvm_net"},{"line_number":24,"context_line":""},{"line_number":25,"context_line":"from nova import conf as cfg"},{"line_number":26,"context_line":"from nova.i18n import _LE, _LI, _LW"},{"line_number":27,"context_line":"from nova.virt.powervm.tasks import base as pvm_task"},{"line_number":28,"context_line":"from nova.virt.powervm import vif"},{"line_number":29,"context_line":"from nova.virt.powervm import vm"}],"source_content_type":"text/x-python","patch_set":14,"id":"7f515b1d_33df640e","line":26,"range":{"start_line":26,"start_character":0,"end_line":26,"end_character":35},"in_reply_to":"7f515b1d_4d16bfaa","updated":"2017-09-27 18:29:51.000000000","message":"Done","commit_id":"655ca898ceb70756650a2e54a026f93a771abbf9"},{"author":{"_account_id":16710,"name":"Eric Berglund","email":"esberglu@us.ibm.com","username":"esberglu"},"change_message_id":"e125ed7342e466de3a2a83c5f5c62e684e3bd7d0","unresolved":false,"context_lines":[{"line_number":32,"context_line":"CONF \u003d cfg.CONF"},{"line_number":33,"context_line":""},{"line_number":34,"context_line":""},{"line_number":35,"context_line":"class UnplugVifs(pvm_task.PowerVMTask):"},{"line_number":36,"context_line":""},{"line_number":37,"context_line":"    \"\"\"The task to unplug Virtual Network Interfaces from a VM.\"\"\""},{"line_number":38,"context_line":""}],"source_content_type":"text/x-python","patch_set":14,"id":"7f515b1d_cdfbcf76","line":35,"range":{"start_line":35,"start_character":17,"end_line":35,"end_character":37},"updated":"2017-09-27 14:26:53.000000000","message":"task.Task","commit_id":"655ca898ceb70756650a2e54a026f93a771abbf9"},{"author":{"_account_id":16710,"name":"Eric Berglund","email":"esberglu@us.ibm.com","username":"esberglu"},"change_message_id":"b5ed0614ac86e3e16ef0fb4d02c6a7204bfdaa65","unresolved":false,"context_lines":[{"line_number":32,"context_line":"CONF \u003d cfg.CONF"},{"line_number":33,"context_line":""},{"line_number":34,"context_line":""},{"line_number":35,"context_line":"class UnplugVifs(pvm_task.PowerVMTask):"},{"line_number":36,"context_line":""},{"line_number":37,"context_line":"    \"\"\"The task to unplug Virtual Network Interfaces from a VM.\"\"\""},{"line_number":38,"context_line":""}],"source_content_type":"text/x-python","patch_set":14,"id":"7f515b1d_4dc91f24","line":35,"range":{"start_line":35,"start_character":17,"end_line":35,"end_character":37},"in_reply_to":"7f515b1d_cdfbcf76","updated":"2017-09-27 18:29:51.000000000","message":"Done","commit_id":"655ca898ceb70756650a2e54a026f93a771abbf9"},{"author":{"_account_id":16710,"name":"Eric Berglund","email":"esberglu@us.ibm.com","username":"esberglu"},"change_message_id":"e125ed7342e466de3a2a83c5f5c62e684e3bd7d0","unresolved":false,"context_lines":[{"line_number":52,"context_line":"        super(UnplugVifs, self).__init__(instance, \u0027unplug_vifs\u0027,"},{"line_number":53,"context_line":"                                         requires\u003d[\u0027lpar_wrap\u0027])"},{"line_number":54,"context_line":""},{"line_number":55,"context_line":"    def execute_impl(self, lpar_wrap):"},{"line_number":56,"context_line":"        # If the state is not in an OK state for deleting, then throw an"},{"line_number":57,"context_line":"        # error up front."},{"line_number":58,"context_line":"        modifiable, reason \u003d lpar_wrap.can_modify_io()"}],"source_content_type":"text/x-python","patch_set":14,"id":"7f515b1d_ada1b396","line":55,"range":{"start_line":55,"start_character":8,"end_line":55,"end_character":20},"updated":"2017-09-27 14:26:53.000000000","message":"execute()","commit_id":"655ca898ceb70756650a2e54a026f93a771abbf9"},{"author":{"_account_id":16710,"name":"Eric Berglund","email":"esberglu@us.ibm.com","username":"esberglu"},"change_message_id":"b5ed0614ac86e3e16ef0fb4d02c6a7204bfdaa65","unresolved":false,"context_lines":[{"line_number":52,"context_line":"        super(UnplugVifs, self).__init__(instance, \u0027unplug_vifs\u0027,"},{"line_number":53,"context_line":"                                         requires\u003d[\u0027lpar_wrap\u0027])"},{"line_number":54,"context_line":""},{"line_number":55,"context_line":"    def execute_impl(self, lpar_wrap):"},{"line_number":56,"context_line":"        # If the state is not in an OK state for deleting, then throw an"},{"line_number":57,"context_line":"        # error up front."},{"line_number":58,"context_line":"        modifiable, reason \u003d lpar_wrap.can_modify_io()"}],"source_content_type":"text/x-python","patch_set":14,"id":"7f515b1d_0dcfa729","line":55,"range":{"start_line":55,"start_character":8,"end_line":55,"end_character":20},"in_reply_to":"7f515b1d_ada1b396","updated":"2017-09-27 18:29:51.000000000","message":"Done","commit_id":"655ca898ceb70756650a2e54a026f93a771abbf9"},{"author":{"_account_id":16710,"name":"Eric Berglund","email":"esberglu@us.ibm.com","username":"esberglu"},"change_message_id":"e125ed7342e466de3a2a83c5f5c62e684e3bd7d0","unresolved":false,"context_lines":[{"line_number":75,"context_line":"        return cna_w_list"},{"line_number":76,"context_line":""},{"line_number":77,"context_line":""},{"line_number":78,"context_line":"class PlugVifs(pvm_task.PowerVMTask):"},{"line_number":79,"context_line":""},{"line_number":80,"context_line":"    \"\"\"The task to plug the Virtual Network Interfaces to a VM.\"\"\""},{"line_number":81,"context_line":""}],"source_content_type":"text/x-python","patch_set":14,"id":"7f515b1d_6dee1bb5","line":78,"range":{"start_line":78,"start_character":15,"end_line":78,"end_character":35},"updated":"2017-09-27 14:26:53.000000000","message":"task.Task","commit_id":"655ca898ceb70756650a2e54a026f93a771abbf9"},{"author":{"_account_id":16710,"name":"Eric Berglund","email":"esberglu@us.ibm.com","username":"esberglu"},"change_message_id":"b5ed0614ac86e3e16ef0fb4d02c6a7204bfdaa65","unresolved":false,"context_lines":[{"line_number":75,"context_line":"        return cna_w_list"},{"line_number":76,"context_line":""},{"line_number":77,"context_line":""},{"line_number":78,"context_line":"class PlugVifs(pvm_task.PowerVMTask):"},{"line_number":79,"context_line":""},{"line_number":80,"context_line":"    \"\"\"The task to plug the Virtual Network Interfaces to a VM.\"\"\""},{"line_number":81,"context_line":""}],"source_content_type":"text/x-python","patch_set":14,"id":"7f515b1d_edd32bd4","line":78,"range":{"start_line":78,"start_character":15,"end_line":78,"end_character":35},"in_reply_to":"7f515b1d_6dee1bb5","updated":"2017-09-27 18:29:51.000000000","message":"Done","commit_id":"655ca898ceb70756650a2e54a026f93a771abbf9"},{"author":{"_account_id":16710,"name":"Eric Berglund","email":"esberglu@us.ibm.com","username":"esberglu"},"change_message_id":"e125ed7342e466de3a2a83c5f5c62e684e3bd7d0","unresolved":false,"context_lines":[{"line_number":119,"context_line":""},{"line_number":120,"context_line":"        return network_info[\u0027address\u0027] in [vm.norm_mac(v.mac) for v in vifs]"},{"line_number":121,"context_line":""},{"line_number":122,"context_line":"    def execute_impl(self, lpar_wrap):"},{"line_number":123,"context_line":"        # We will have two types of network infos.  One is for newly created"},{"line_number":124,"context_line":"        # vifs.  The others are those that exist, but should be re-\u0027treated\u0027"},{"line_number":125,"context_line":"        for network_info in self.network_infos:"}],"source_content_type":"text/x-python","patch_set":14,"id":"7f515b1d_2dbf03b1","line":122,"range":{"start_line":122,"start_character":8,"end_line":122,"end_character":20},"updated":"2017-09-27 14:26:53.000000000","message":"execute()","commit_id":"655ca898ceb70756650a2e54a026f93a771abbf9"},{"author":{"_account_id":16710,"name":"Eric Berglund","email":"esberglu@us.ibm.com","username":"esberglu"},"change_message_id":"b5ed0614ac86e3e16ef0fb4d02c6a7204bfdaa65","unresolved":false,"context_lines":[{"line_number":119,"context_line":""},{"line_number":120,"context_line":"        return network_info[\u0027address\u0027] in [vm.norm_mac(v.mac) for v in vifs]"},{"line_number":121,"context_line":""},{"line_number":122,"context_line":"    def execute_impl(self, lpar_wrap):"},{"line_number":123,"context_line":"        # We will have two types of network infos.  One is for newly created"},{"line_number":124,"context_line":"        # vifs.  The others are those that exist, but should be re-\u0027treated\u0027"},{"line_number":125,"context_line":"        for network_info in self.network_infos:"}],"source_content_type":"text/x-python","patch_set":14,"id":"7f515b1d_6d54db21","line":122,"range":{"start_line":122,"start_character":8,"end_line":122,"end_character":20},"in_reply_to":"7f515b1d_2dbf03b1","updated":"2017-09-27 18:29:51.000000000","message":"Done","commit_id":"655ca898ceb70756650a2e54a026f93a771abbf9"},{"author":{"_account_id":16710,"name":"Eric Berglund","email":"esberglu@us.ibm.com","username":"esberglu"},"change_message_id":"e125ed7342e466de3a2a83c5f5c62e684e3bd7d0","unresolved":false,"context_lines":[{"line_number":227,"context_line":"        else:"},{"line_number":228,"context_line":"            return []"},{"line_number":229,"context_line":""},{"line_number":230,"context_line":"    def revert_impl(self, lpar_wrap, result, flow_failures):"},{"line_number":231,"context_line":"        if not self.network_infos:"},{"line_number":232,"context_line":"            return"},{"line_number":233,"context_line":""}],"source_content_type":"text/x-python","patch_set":14,"id":"7f515b1d_4ddfdf0c","line":230,"range":{"start_line":230,"start_character":8,"end_line":230,"end_character":19},"updated":"2017-09-27 14:26:53.000000000","message":"revert()","commit_id":"655ca898ceb70756650a2e54a026f93a771abbf9"},{"author":{"_account_id":16710,"name":"Eric Berglund","email":"esberglu@us.ibm.com","username":"esberglu"},"change_message_id":"b5ed0614ac86e3e16ef0fb4d02c6a7204bfdaa65","unresolved":false,"context_lines":[{"line_number":227,"context_line":"        else:"},{"line_number":228,"context_line":"            return []"},{"line_number":229,"context_line":""},{"line_number":230,"context_line":"    def revert_impl(self, lpar_wrap, result, flow_failures):"},{"line_number":231,"context_line":"        if not self.network_infos:"},{"line_number":232,"context_line":"            return"},{"line_number":233,"context_line":""}],"source_content_type":"text/x-python","patch_set":14,"id":"7f515b1d_ed3d6bdd","line":230,"range":{"start_line":230,"start_character":8,"end_line":230,"end_character":19},"in_reply_to":"7f515b1d_4ddfdf0c","updated":"2017-09-27 18:29:51.000000000","message":"Done","commit_id":"655ca898ceb70756650a2e54a026f93a771abbf9"},{"author":{"_account_id":16710,"name":"Eric Berglund","email":"esberglu@us.ibm.com","username":"esberglu"},"change_message_id":"e125ed7342e466de3a2a83c5f5c62e684e3bd7d0","unresolved":false,"context_lines":[{"line_number":250,"context_line":"                            instance\u003dself.instance)"},{"line_number":251,"context_line":""},{"line_number":252,"context_line":""},{"line_number":253,"context_line":"class PlugMgmtVif(pvm_task.PowerVMTask):"},{"line_number":254,"context_line":""},{"line_number":255,"context_line":"    \"\"\"The task to plug the Management VIF into a VM.\"\"\""},{"line_number":256,"context_line":""}],"source_content_type":"text/x-python","patch_set":14,"id":"7f515b1d_0d332764","line":253,"range":{"start_line":253,"start_character":18,"end_line":253,"end_character":38},"updated":"2017-09-27 14:26:53.000000000","message":"task.Task","commit_id":"655ca898ceb70756650a2e54a026f93a771abbf9"},{"author":{"_account_id":16710,"name":"Eric Berglund","email":"esberglu@us.ibm.com","username":"esberglu"},"change_message_id":"b5ed0614ac86e3e16ef0fb4d02c6a7204bfdaa65","unresolved":false,"context_lines":[{"line_number":250,"context_line":"                            instance\u003dself.instance)"},{"line_number":251,"context_line":""},{"line_number":252,"context_line":""},{"line_number":253,"context_line":"class PlugMgmtVif(pvm_task.PowerVMTask):"},{"line_number":254,"context_line":""},{"line_number":255,"context_line":"    \"\"\"The task to plug the Management VIF into a VM.\"\"\""},{"line_number":256,"context_line":""}],"source_content_type":"text/x-python","patch_set":14,"id":"7f515b1d_cd262fcf","line":253,"range":{"start_line":253,"start_character":18,"end_line":253,"end_character":38},"in_reply_to":"7f515b1d_0d332764","updated":"2017-09-27 18:29:51.000000000","message":"Done","commit_id":"655ca898ceb70756650a2e54a026f93a771abbf9"},{"author":{"_account_id":16710,"name":"Eric Berglund","email":"esberglu@us.ibm.com","username":"esberglu"},"change_message_id":"e125ed7342e466de3a2a83c5f5c62e684e3bd7d0","unresolved":false,"context_lines":[{"line_number":274,"context_line":"            instance, \u0027plug_mgmt_vif\u0027, provides\u003d\u0027mgmt_cna\u0027,"},{"line_number":275,"context_line":"            requires\u003d[\u0027vm_cnas\u0027])"},{"line_number":276,"context_line":""},{"line_number":277,"context_line":"    def execute_impl(self, vm_cnas):"},{"line_number":278,"context_line":"        # If configured to not use RMC mgmt vifs, then return None.  Need to"},{"line_number":279,"context_line":"        # return None because the Config Drive step (which may be used...may"},{"line_number":280,"context_line":"        # not be) required the mgmt vif."}],"source_content_type":"text/x-python","patch_set":14,"id":"7f515b1d_cdd2af00","line":277,"range":{"start_line":277,"start_character":8,"end_line":277,"end_character":20},"updated":"2017-09-27 14:26:53.000000000","message":"execute()","commit_id":"655ca898ceb70756650a2e54a026f93a771abbf9"},{"author":{"_account_id":16710,"name":"Eric Berglund","email":"esberglu@us.ibm.com","username":"esberglu"},"change_message_id":"b5ed0614ac86e3e16ef0fb4d02c6a7204bfdaa65","unresolved":false,"context_lines":[{"line_number":274,"context_line":"            instance, \u0027plug_mgmt_vif\u0027, provides\u003d\u0027mgmt_cna\u0027,"},{"line_number":275,"context_line":"            requires\u003d[\u0027vm_cnas\u0027])"},{"line_number":276,"context_line":""},{"line_number":277,"context_line":"    def execute_impl(self, vm_cnas):"},{"line_number":278,"context_line":"        # If configured to not use RMC mgmt vifs, then return None.  Need to"},{"line_number":279,"context_line":"        # return None because the Config Drive step (which may be used...may"},{"line_number":280,"context_line":"        # not be) required the mgmt vif."}],"source_content_type":"text/x-python","patch_set":14,"id":"7f515b1d_8d2cb7ac","line":277,"range":{"start_line":277,"start_character":8,"end_line":277,"end_character":20},"in_reply_to":"7f515b1d_cdd2af00","updated":"2017-09-27 18:29:51.000000000","message":"Done","commit_id":"655ca898ceb70756650a2e54a026f93a771abbf9"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"b0469a17547cefe2c4ba47a611b5da509e16a0bd","unresolved":false,"context_lines":[{"line_number":29,"context_line":"LOG \u003d logging.getLogger(__name__)"},{"line_number":30,"context_line":"CONF \u003d cfg.CONF"},{"line_number":31,"context_line":""},{"line_number":32,"context_line":"_USE_RMC_MGMT_VIF \u003d True"},{"line_number":33,"context_line":""},{"line_number":34,"context_line":""},{"line_number":35,"context_line":"class UnplugVifs(task.Task):"}],"source_content_type":"text/x-python","patch_set":25,"id":"3f4b6375_8b1e9c09","line":32,"range":{"start_line":32,"start_character":0,"end_line":32,"end_character":24},"updated":"2017-11-06 17:05:43.000000000","message":"This is never changed; get rid of it.","commit_id":"d17c318eb2b4a22961a929f53a94e85a087e2cf8"},{"author":{"_account_id":16710,"name":"Eric Berglund","email":"esberglu@us.ibm.com","username":"esberglu"},"change_message_id":"3ffa85f520a5ccd65c0cdc0bf45d067e9a9c6896","unresolved":false,"context_lines":[{"line_number":29,"context_line":"LOG \u003d logging.getLogger(__name__)"},{"line_number":30,"context_line":"CONF \u003d cfg.CONF"},{"line_number":31,"context_line":""},{"line_number":32,"context_line":"_USE_RMC_MGMT_VIF \u003d True"},{"line_number":33,"context_line":""},{"line_number":34,"context_line":""},{"line_number":35,"context_line":"class UnplugVifs(task.Task):"}],"source_content_type":"text/x-python","patch_set":25,"id":"1f485f77_32031210","line":32,"range":{"start_line":32,"start_character":0,"end_line":32,"end_character":24},"in_reply_to":"3f4b6375_8b1e9c09","updated":"2017-11-15 22:17:18.000000000","message":"Done","commit_id":"d17c318eb2b4a22961a929f53a94e85a087e2cf8"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"b0469a17547cefe2c4ba47a611b5da509e16a0bd","unresolved":false,"context_lines":[{"line_number":32,"context_line":"_USE_RMC_MGMT_VIF \u003d True"},{"line_number":33,"context_line":""},{"line_number":34,"context_line":""},{"line_number":35,"context_line":"class UnplugVifs(task.Task):"},{"line_number":36,"context_line":""},{"line_number":37,"context_line":"    \"\"\"The task to unplug Virtual Network Interfaces from a VM.\"\"\""},{"line_number":38,"context_line":""}],"source_content_type":"text/x-python","patch_set":25,"id":"3f4b6375_eb06301c","line":35,"range":{"start_line":35,"start_character":6,"end_line":35,"end_character":16},"updated":"2017-11-06 17:05:43.000000000","message":"No big deal, but it seems a leetle odd to have unplug first.","commit_id":"d17c318eb2b4a22961a929f53a94e85a087e2cf8"},{"author":{"_account_id":16710,"name":"Eric Berglund","email":"esberglu@us.ibm.com","username":"esberglu"},"change_message_id":"3ffa85f520a5ccd65c0cdc0bf45d067e9a9c6896","unresolved":false,"context_lines":[{"line_number":32,"context_line":"_USE_RMC_MGMT_VIF \u003d True"},{"line_number":33,"context_line":""},{"line_number":34,"context_line":""},{"line_number":35,"context_line":"class UnplugVifs(task.Task):"},{"line_number":36,"context_line":""},{"line_number":37,"context_line":"    \"\"\"The task to unplug Virtual Network Interfaces from a VM.\"\"\""},{"line_number":38,"context_line":""}],"source_content_type":"text/x-python","patch_set":25,"id":"1f485f77_b23702e4","line":35,"range":{"start_line":35,"start_character":6,"end_line":35,"end_character":16},"in_reply_to":"3f4b6375_eb06301c","updated":"2017-11-15 22:17:18.000000000","message":"Done","commit_id":"d17c318eb2b4a22961a929f53a94e85a087e2cf8"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"b0469a17547cefe2c4ba47a611b5da509e16a0bd","unresolved":false,"context_lines":[{"line_number":53,"context_line":"        super(UnplugVifs, self).__init__(\u0027unplug_vifs\u0027, requires\u003d[\u0027lpar_wrap\u0027])"},{"line_number":54,"context_line":""},{"line_number":55,"context_line":"    def execute(self, lpar_wrap):"},{"line_number":56,"context_line":"        # If the state is not in an OK state for deleting, then throw an"},{"line_number":57,"context_line":"        # error up front."},{"line_number":58,"context_line":"        modifiable, reason \u003d lpar_wrap.can_modify_io()"},{"line_number":59,"context_line":"        if not modifiable:"}],"source_content_type":"text/x-python","patch_set":25,"id":"3f4b6375_d814684f","line":56,"range":{"start_line":56,"start_character":17,"end_line":56,"end_character":22},"updated":"2017-11-06 17:05:43.000000000","message":"LPAR","commit_id":"d17c318eb2b4a22961a929f53a94e85a087e2cf8"},{"author":{"_account_id":16710,"name":"Eric Berglund","email":"esberglu@us.ibm.com","username":"esberglu"},"change_message_id":"3ffa85f520a5ccd65c0cdc0bf45d067e9a9c6896","unresolved":false,"context_lines":[{"line_number":53,"context_line":"        super(UnplugVifs, self).__init__(\u0027unplug_vifs\u0027, requires\u003d[\u0027lpar_wrap\u0027])"},{"line_number":54,"context_line":""},{"line_number":55,"context_line":"    def execute(self, lpar_wrap):"},{"line_number":56,"context_line":"        # If the state is not in an OK state for deleting, then throw an"},{"line_number":57,"context_line":"        # error up front."},{"line_number":58,"context_line":"        modifiable, reason \u003d lpar_wrap.can_modify_io()"},{"line_number":59,"context_line":"        if not modifiable:"}],"source_content_type":"text/x-python","patch_set":25,"id":"1f485f77_923646e6","line":56,"range":{"start_line":56,"start_character":17,"end_line":56,"end_character":22},"in_reply_to":"3f4b6375_d814684f","updated":"2017-11-15 22:17:18.000000000","message":"Done","commit_id":"d17c318eb2b4a22961a929f53a94e85a087e2cf8"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"b0469a17547cefe2c4ba47a611b5da509e16a0bd","unresolved":false,"context_lines":[{"line_number":70,"context_line":"            vif.unplug(self.adapter, self.host_uuid, self.instance,"},{"line_number":71,"context_line":"                       network_info, cna_w_list\u003dcna_w_list)"},{"line_number":72,"context_line":""},{"line_number":73,"context_line":"        return cna_w_list"},{"line_number":74,"context_line":""},{"line_number":75,"context_line":""},{"line_number":76,"context_line":"class PlugVifs(task.Task):"}],"source_content_type":"text/x-python","patch_set":25,"id":"3f4b6375_2b4fa86b","line":73,"range":{"start_line":73,"start_character":8,"end_line":73,"end_character":25},"updated":"2017-11-06 17:05:43.000000000","message":"This is unnecessary.","commit_id":"d17c318eb2b4a22961a929f53a94e85a087e2cf8"},{"author":{"_account_id":16710,"name":"Eric Berglund","email":"esberglu@us.ibm.com","username":"esberglu"},"change_message_id":"3ffa85f520a5ccd65c0cdc0bf45d067e9a9c6896","unresolved":false,"context_lines":[{"line_number":70,"context_line":"            vif.unplug(self.adapter, self.host_uuid, self.instance,"},{"line_number":71,"context_line":"                       network_info, cna_w_list\u003dcna_w_list)"},{"line_number":72,"context_line":""},{"line_number":73,"context_line":"        return cna_w_list"},{"line_number":74,"context_line":""},{"line_number":75,"context_line":""},{"line_number":76,"context_line":"class PlugVifs(task.Task):"}],"source_content_type":"text/x-python","patch_set":25,"id":"1f485f77_524e8e6f","line":73,"range":{"start_line":73,"start_character":8,"end_line":73,"end_character":25},"in_reply_to":"3f4b6375_2b4fa86b","updated":"2017-11-15 22:17:18.000000000","message":"Done","commit_id":"d17c318eb2b4a22961a929f53a94e85a087e2cf8"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"b0469a17547cefe2c4ba47a611b5da509e16a0bd","unresolved":false,"context_lines":[{"line_number":103,"context_line":"            \u0027plug_vifs\u0027, provides\u003d\u0027vm_cnas\u0027, requires\u003d[\u0027lpar_wrap\u0027])"},{"line_number":104,"context_line":""},{"line_number":105,"context_line":"    def _vif_exists(self, network_info):"},{"line_number":106,"context_line":"        \"\"\"Does the instance have a CNA/VNIC (as appropriate) for a given net?"},{"line_number":107,"context_line":""},{"line_number":108,"context_line":"        :param network_info: A network information dict.  This method expects"},{"line_number":109,"context_line":"                             it to contain keys \u0027vnic_type\u0027 (value is \u0027direct\u0027"}],"source_content_type":"text/x-python","patch_set":25,"id":"3f4b6375_ab6b98b4","line":106,"range":{"start_line":106,"start_character":40,"end_line":106,"end_character":44},"updated":"2017-11-06 17:05:43.000000000","message":"References to VNIC can be removed from this change set.","commit_id":"d17c318eb2b4a22961a929f53a94e85a087e2cf8"},{"author":{"_account_id":16710,"name":"Eric Berglund","email":"esberglu@us.ibm.com","username":"esberglu"},"change_message_id":"3ffa85f520a5ccd65c0cdc0bf45d067e9a9c6896","unresolved":false,"context_lines":[{"line_number":103,"context_line":"            \u0027plug_vifs\u0027, provides\u003d\u0027vm_cnas\u0027, requires\u003d[\u0027lpar_wrap\u0027])"},{"line_number":104,"context_line":""},{"line_number":105,"context_line":"    def _vif_exists(self, network_info):"},{"line_number":106,"context_line":"        \"\"\"Does the instance have a CNA/VNIC (as appropriate) for a given net?"},{"line_number":107,"context_line":""},{"line_number":108,"context_line":"        :param network_info: A network information dict.  This method expects"},{"line_number":109,"context_line":"                             it to contain keys \u0027vnic_type\u0027 (value is \u0027direct\u0027"}],"source_content_type":"text/x-python","patch_set":25,"id":"1f485f77_7573b44e","line":106,"range":{"start_line":106,"start_character":40,"end_line":106,"end_character":44},"in_reply_to":"3f4b6375_ab6b98b4","updated":"2017-11-15 22:17:18.000000000","message":"Done","commit_id":"d17c318eb2b4a22961a929f53a94e85a087e2cf8"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"b0469a17547cefe2c4ba47a611b5da509e16a0bd","unresolved":false,"context_lines":[{"line_number":131,"context_line":"        if not self.crt_network_infos and not self.update_network_infos:"},{"line_number":132,"context_line":"            return []"},{"line_number":133,"context_line":""},{"line_number":134,"context_line":"        # Check to see if the LPAR is OK to add VIFs to."},{"line_number":135,"context_line":"        modifiable, reason \u003d lpar_wrap.can_modify_io()"},{"line_number":136,"context_line":"        if not modifiable and self.crt_network_infos:"},{"line_number":137,"context_line":"            LOG.error(\u0027Unable to create VIF(s) for instance. The VM was in a \u0027"},{"line_number":138,"context_line":"                      \u0027state where VIF plugging is not acceptable. The reason \u0027"},{"line_number":139,"context_line":"                      \u0027from the system is: %s\u0027, reason,"},{"line_number":140,"context_line":"                      instance\u003dself.instance)"},{"line_number":141,"context_line":"            raise exception.VirtualInterfaceCreateException()"},{"line_number":142,"context_line":""},{"line_number":143,"context_line":"        # TODO(KYLEH): We\u0027re setting up to wait for an instance event.  The"},{"line_number":144,"context_line":"        # event needs to come back to our compute manager so we need to ensure"}],"source_content_type":"text/x-python","patch_set":25,"id":"3f4b6375_abb03844","line":141,"range":{"start_line":134,"start_character":0,"end_line":141,"end_character":61},"updated":"2017-11-06 17:05:43.000000000","message":"Let\u0027s do this first.","commit_id":"d17c318eb2b4a22961a929f53a94e85a087e2cf8"},{"author":{"_account_id":16710,"name":"Eric Berglund","email":"esberglu@us.ibm.com","username":"esberglu"},"change_message_id":"3ffa85f520a5ccd65c0cdc0bf45d067e9a9c6896","unresolved":false,"context_lines":[{"line_number":131,"context_line":"        if not self.crt_network_infos and not self.update_network_infos:"},{"line_number":132,"context_line":"            return []"},{"line_number":133,"context_line":""},{"line_number":134,"context_line":"        # Check to see if the LPAR is OK to add VIFs to."},{"line_number":135,"context_line":"        modifiable, reason \u003d lpar_wrap.can_modify_io()"},{"line_number":136,"context_line":"        if not modifiable and self.crt_network_infos:"},{"line_number":137,"context_line":"            LOG.error(\u0027Unable to create VIF(s) for instance. The VM was in a \u0027"},{"line_number":138,"context_line":"                      \u0027state where VIF plugging is not acceptable. The reason \u0027"},{"line_number":139,"context_line":"                      \u0027from the system is: %s\u0027, reason,"},{"line_number":140,"context_line":"                      instance\u003dself.instance)"},{"line_number":141,"context_line":"            raise exception.VirtualInterfaceCreateException()"},{"line_number":142,"context_line":""},{"line_number":143,"context_line":"        # TODO(KYLEH): We\u0027re setting up to wait for an instance event.  The"},{"line_number":144,"context_line":"        # event needs to come back to our compute manager so we need to ensure"}],"source_content_type":"text/x-python","patch_set":25,"id":"1f485f77_92b9a62f","line":141,"range":{"start_line":134,"start_character":0,"end_line":141,"end_character":61},"in_reply_to":"3f4b6375_abb03844","updated":"2017-11-15 22:17:18.000000000","message":"Done","commit_id":"d17c318eb2b4a22961a929f53a94e85a087e2cf8"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"b0469a17547cefe2c4ba47a611b5da509e16a0bd","unresolved":false,"context_lines":[{"line_number":144,"context_line":"        # event needs to come back to our compute manager so we need to ensure"},{"line_number":145,"context_line":"        # the instance.host is set to our host.  We shouldn\u0027t need to do this"},{"line_number":146,"context_line":"        # but in the evacuate/recreate case it may reflect the old host."},{"line_number":147,"context_line":"        # See: https://bugs.launchpad.net/nova/+bug/1535918"},{"line_number":148,"context_line":"        undo_host_change \u003d False"},{"line_number":149,"context_line":"        if self.instance.host !\u003d CONF.host:"},{"line_number":150,"context_line":"            LOG.warning(\u0027Instance was not assigned to this host.\u0027,"}],"source_content_type":"text/x-python","patch_set":25,"id":"3f4b6375_8b945c8c","line":147,"range":{"start_line":147,"start_character":15,"end_line":147,"end_character":59},"updated":"2017-11-06 17:05:43.000000000","message":"This bug seems to be resolved now.  It would be nice to know whether we still need this code block.","commit_id":"d17c318eb2b4a22961a929f53a94e85a087e2cf8"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"b0469a17547cefe2c4ba47a611b5da509e16a0bd","unresolved":false,"context_lines":[{"line_number":176,"context_line":"                    new_vif \u003d vif.plug("},{"line_number":177,"context_line":"                        self.adapter, self.host_uuid, self.instance,"},{"line_number":178,"context_line":"                        network_info, new_vif\u003dTrue)"},{"line_number":179,"context_line":"                    if self.cnas is not None and isinstance(new_vif,"},{"line_number":180,"context_line":"                                                            pvm_net.CNA):"},{"line_number":181,"context_line":"                        self.cnas.append(new_vif)"},{"line_number":182,"context_line":"        except eventlet.timeout.Timeout:"},{"line_number":183,"context_line":"            LOG.error(\u0027Error waiting for VIF to be created for instance.\u0027,"}],"source_content_type":"text/x-python","patch_set":25,"id":"3f4b6375_cbf37408","line":180,"range":{"start_line":179,"start_character":45,"end_line":180,"end_character":72},"updated":"2017-11-06 17:05:43.000000000","message":"We should be able to get rid of this - always a CNA for now.","commit_id":"d17c318eb2b4a22961a929f53a94e85a087e2cf8"},{"author":{"_account_id":16710,"name":"Eric Berglund","email":"esberglu@us.ibm.com","username":"esberglu"},"change_message_id":"3ffa85f520a5ccd65c0cdc0bf45d067e9a9c6896","unresolved":false,"context_lines":[{"line_number":176,"context_line":"                    new_vif \u003d vif.plug("},{"line_number":177,"context_line":"                        self.adapter, self.host_uuid, self.instance,"},{"line_number":178,"context_line":"                        network_info, new_vif\u003dTrue)"},{"line_number":179,"context_line":"                    if self.cnas is not None and isinstance(new_vif,"},{"line_number":180,"context_line":"                                                            pvm_net.CNA):"},{"line_number":181,"context_line":"                        self.cnas.append(new_vif)"},{"line_number":182,"context_line":"        except eventlet.timeout.Timeout:"},{"line_number":183,"context_line":"            LOG.error(\u0027Error waiting for VIF to be created for instance.\u0027,"}],"source_content_type":"text/x-python","patch_set":25,"id":"1f485f77_12581630","line":180,"range":{"start_line":179,"start_character":45,"end_line":180,"end_character":72},"in_reply_to":"3f4b6375_cbf37408","updated":"2017-11-15 22:17:18.000000000","message":"Done","commit_id":"d17c318eb2b4a22961a929f53a94e85a087e2cf8"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"b0469a17547cefe2c4ba47a611b5da509e16a0bd","unresolved":false,"context_lines":[{"line_number":183,"context_line":"            LOG.error(\u0027Error waiting for VIF to be created for instance.\u0027,"},{"line_number":184,"context_line":"                      instance\u003dself.instance)"},{"line_number":185,"context_line":"            raise exception.VirtualInterfaceCreateException()"},{"line_number":186,"context_line":"        finally:"},{"line_number":187,"context_line":"            if undo_host_change:"},{"line_number":188,"context_line":"                LOG.info(\u0027Undoing temporary host assignment to instance.\u0027,"},{"line_number":189,"context_line":"                         instance\u003dself.instance)"},{"line_number":190,"context_line":"                self.instance.host \u003d old_host"},{"line_number":191,"context_line":"                self.instance.save()"},{"line_number":192,"context_line":""},{"line_number":193,"context_line":"        return self.cnas"},{"line_number":194,"context_line":""}],"source_content_type":"text/x-python","patch_set":25,"id":"3f4b6375_8bd9fc83","line":191,"range":{"start_line":186,"start_character":0,"end_line":191,"end_character":36},"updated":"2017-11-06 17:05:43.000000000","message":"This would also go away if the above bug is validated as resolved.","commit_id":"d17c318eb2b4a22961a929f53a94e85a087e2cf8"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"b0469a17547cefe2c4ba47a611b5da509e16a0bd","unresolved":false,"context_lines":[{"line_number":221,"context_line":"        if not self.network_infos:"},{"line_number":222,"context_line":"            return"},{"line_number":223,"context_line":""},{"line_number":224,"context_line":"        # The parameters have to match the execute method, plus the response +"},{"line_number":225,"context_line":"        # failures even if only a subset are used."},{"line_number":226,"context_line":"        LOG.warning(\u0027VIF creation being rolled back for instance.\u0027,"},{"line_number":227,"context_line":"                    instance\u003dself.instance)"},{"line_number":228,"context_line":""}],"source_content_type":"text/x-python","patch_set":25,"id":"3f4b6375_eb5750c9","line":225,"range":{"start_line":224,"start_character":0,"end_line":225,"end_character":50},"updated":"2017-11-06 17:05:43.000000000","message":"This comment is unnecessary.  But if you wanna keep it, it belongs with the method signature.","commit_id":"d17c318eb2b4a22961a929f53a94e85a087e2cf8"},{"author":{"_account_id":16710,"name":"Eric Berglund","email":"esberglu@us.ibm.com","username":"esberglu"},"change_message_id":"3ffa85f520a5ccd65c0cdc0bf45d067e9a9c6896","unresolved":false,"context_lines":[{"line_number":221,"context_line":"        if not self.network_infos:"},{"line_number":222,"context_line":"            return"},{"line_number":223,"context_line":""},{"line_number":224,"context_line":"        # The parameters have to match the execute method, plus the response +"},{"line_number":225,"context_line":"        # failures even if only a subset are used."},{"line_number":226,"context_line":"        LOG.warning(\u0027VIF creation being rolled back for instance.\u0027,"},{"line_number":227,"context_line":"                    instance\u003dself.instance)"},{"line_number":228,"context_line":""}],"source_content_type":"text/x-python","patch_set":25,"id":"1f485f77_329f92b5","line":225,"range":{"start_line":224,"start_character":0,"end_line":225,"end_character":50},"in_reply_to":"3f4b6375_eb5750c9","updated":"2017-11-15 22:17:18.000000000","message":"Done","commit_id":"d17c318eb2b4a22961a929f53a94e85a087e2cf8"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"b0469a17547cefe2c4ba47a611b5da509e16a0bd","unresolved":false,"context_lines":[{"line_number":234,"context_line":"                           network_info, cna_w_list\u003dcna_w_list)"},{"line_number":235,"context_line":"            except Exception as e:"},{"line_number":236,"context_line":"                LOG.exception(e)"},{"line_number":237,"context_line":"                LOG.warning(\"An exception occurred during an unplug in the \""},{"line_number":238,"context_line":"                            \"vif rollback.  Ignoring.\", instance\u003dself.instance)"},{"line_number":239,"context_line":""},{"line_number":240,"context_line":""},{"line_number":241,"context_line":"class PlugMgmtVif(task.Task):"}],"source_content_type":"text/x-python","patch_set":25,"id":"3f4b6375_ab75d865","line":238,"range":{"start_line":237,"start_character":28,"end_line":238,"end_character":54},"updated":"2017-11-06 17:05:43.000000000","message":"Consolidate (this message goes into the LOG.exception above, and this LOG.warning goes away).","commit_id":"d17c318eb2b4a22961a929f53a94e85a087e2cf8"},{"author":{"_account_id":16710,"name":"Eric Berglund","email":"esberglu@us.ibm.com","username":"esberglu"},"change_message_id":"3ffa85f520a5ccd65c0cdc0bf45d067e9a9c6896","unresolved":false,"context_lines":[{"line_number":234,"context_line":"                           network_info, cna_w_list\u003dcna_w_list)"},{"line_number":235,"context_line":"            except Exception as e:"},{"line_number":236,"context_line":"                LOG.exception(e)"},{"line_number":237,"context_line":"                LOG.warning(\"An exception occurred during an unplug in the \""},{"line_number":238,"context_line":"                            \"vif rollback.  Ignoring.\", instance\u003dself.instance)"},{"line_number":239,"context_line":""},{"line_number":240,"context_line":""},{"line_number":241,"context_line":"class PlugMgmtVif(task.Task):"}],"source_content_type":"text/x-python","patch_set":25,"id":"1f485f77_b23ca2bf","line":238,"range":{"start_line":237,"start_character":28,"end_line":238,"end_character":54},"in_reply_to":"3f4b6375_ab75d865","updated":"2017-11-15 22:17:18.000000000","message":"Done","commit_id":"d17c318eb2b4a22961a929f53a94e85a087e2cf8"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"b0469a17547cefe2c4ba47a611b5da509e16a0bd","unresolved":false,"context_lines":[{"line_number":248,"context_line":"        Requires \u0027vm_cnas\u0027 from PlugVifs.  If None, this Task will retrieve the"},{"line_number":249,"context_line":"        VM\u0027s list of CNAs."},{"line_number":250,"context_line":""},{"line_number":251,"context_line":"        Provides the mgmt_cna.  This may be none if no management device was"},{"line_number":252,"context_line":"        created.  This is the CNA of the mgmt vif for the VM."},{"line_number":253,"context_line":""},{"line_number":254,"context_line":"        :param adapter: The pypowervm adapter."}],"source_content_type":"text/x-python","patch_set":25,"id":"3f4b6375_0b0aacd0","line":251,"range":{"start_line":251,"start_character":44,"end_line":251,"end_character":48},"updated":"2017-11-06 17:05:43.000000000","message":"None","commit_id":"d17c318eb2b4a22961a929f53a94e85a087e2cf8"},{"author":{"_account_id":16710,"name":"Eric Berglund","email":"esberglu@us.ibm.com","username":"esberglu"},"change_message_id":"3ffa85f520a5ccd65c0cdc0bf45d067e9a9c6896","unresolved":false,"context_lines":[{"line_number":248,"context_line":"        Requires \u0027vm_cnas\u0027 from PlugVifs.  If None, this Task will retrieve the"},{"line_number":249,"context_line":"        VM\u0027s list of CNAs."},{"line_number":250,"context_line":""},{"line_number":251,"context_line":"        Provides the mgmt_cna.  This may be none if no management device was"},{"line_number":252,"context_line":"        created.  This is the CNA of the mgmt vif for the VM."},{"line_number":253,"context_line":""},{"line_number":254,"context_line":"        :param adapter: The pypowervm adapter."}],"source_content_type":"text/x-python","patch_set":25,"id":"1f485f77_327af287","line":251,"range":{"start_line":251,"start_character":44,"end_line":251,"end_character":48},"in_reply_to":"3f4b6375_0b0aacd0","updated":"2017-11-15 22:17:18.000000000","message":"Done","commit_id":"d17c318eb2b4a22961a929f53a94e85a087e2cf8"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"b0469a17547cefe2c4ba47a611b5da509e16a0bd","unresolved":false,"context_lines":[{"line_number":263,"context_line":"            \u0027plug_mgmt_vif\u0027, provides\u003d\u0027mgmt_cna\u0027, requires\u003d[\u0027vm_cnas\u0027])"},{"line_number":264,"context_line":""},{"line_number":265,"context_line":"    def execute(self, vm_cnas):"},{"line_number":266,"context_line":"        # If configured to not use RMC mgmt vifs, then return None.  Need to"},{"line_number":267,"context_line":"        # return None because the Config Drive step (which may be used...may"},{"line_number":268,"context_line":"        # not be) required the mgmt vif."},{"line_number":269,"context_line":"        if not _USE_RMC_MGMT_VIF:"},{"line_number":270,"context_line":"            LOG.debug(\u0027No management VIF created for instance as \u0027"},{"line_number":271,"context_line":"                      \u0027_USE_RMC_MGMT_VIF is set to False\u0027,"},{"line_number":272,"context_line":"                      instance\u003dself.instance)"},{"line_number":273,"context_line":"            return None"},{"line_number":274,"context_line":""},{"line_number":275,"context_line":"        LOG.info(\u0027Plugging the Management Network Interface to instance.\u0027,"},{"line_number":276,"context_line":"                 instance\u003dself.instance)"}],"source_content_type":"text/x-python","patch_set":25,"id":"3f4b6375_0bd86c50","line":273,"range":{"start_line":266,"start_character":0,"end_line":273,"end_character":23},"updated":"2017-11-06 17:05:43.000000000","message":"This can go away.","commit_id":"d17c318eb2b4a22961a929f53a94e85a087e2cf8"},{"author":{"_account_id":16710,"name":"Eric Berglund","email":"esberglu@us.ibm.com","username":"esberglu"},"change_message_id":"3ffa85f520a5ccd65c0cdc0bf45d067e9a9c6896","unresolved":false,"context_lines":[{"line_number":263,"context_line":"            \u0027plug_mgmt_vif\u0027, provides\u003d\u0027mgmt_cna\u0027, requires\u003d[\u0027vm_cnas\u0027])"},{"line_number":264,"context_line":""},{"line_number":265,"context_line":"    def execute(self, vm_cnas):"},{"line_number":266,"context_line":"        # If configured to not use RMC mgmt vifs, then return None.  Need to"},{"line_number":267,"context_line":"        # return None because the Config Drive step (which may be used...may"},{"line_number":268,"context_line":"        # not be) required the mgmt vif."},{"line_number":269,"context_line":"        if not _USE_RMC_MGMT_VIF:"},{"line_number":270,"context_line":"            LOG.debug(\u0027No management VIF created for instance as \u0027"},{"line_number":271,"context_line":"                      \u0027_USE_RMC_MGMT_VIF is set to False\u0027,"},{"line_number":272,"context_line":"                      instance\u003dself.instance)"},{"line_number":273,"context_line":"            return None"},{"line_number":274,"context_line":""},{"line_number":275,"context_line":"        LOG.info(\u0027Plugging the Management Network Interface to instance.\u0027,"},{"line_number":276,"context_line":"                 instance\u003dself.instance)"}],"source_content_type":"text/x-python","patch_set":25,"id":"1f485f77_921d2668","line":273,"range":{"start_line":266,"start_character":0,"end_line":273,"end_character":23},"in_reply_to":"3f4b6375_0bd86c50","updated":"2017-11-15 22:17:18.000000000","message":"Done","commit_id":"d17c318eb2b4a22961a929f53a94e85a087e2cf8"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"341422a637f79441055575e15478732822a63a71","unresolved":false,"context_lines":[{"line_number":102,"context_line":"        # event needs to come back to our compute manager so we need to ensure"},{"line_number":103,"context_line":"        # the instance.host is set to our host.  We shouldn\u0027t need to do this"},{"line_number":104,"context_line":"        # but in the evacuate/recreate case it may reflect the old host."},{"line_number":105,"context_line":"        # See: https://bugs.launchpad.net/nova/+bug/1535918"},{"line_number":106,"context_line":"        undo_host_change \u003d False"},{"line_number":107,"context_line":"        if self.instance.host !\u003d CONF.host:"},{"line_number":108,"context_line":"            LOG.warning(\u0027Instance was not assigned to this host.\u0027,"}],"source_content_type":"text/x-python","patch_set":26,"id":"1f485f77_e8d31dd4","line":105,"range":{"start_line":105,"start_character":15,"end_line":105,"end_character":59},"updated":"2017-11-15 23:05:32.000000000","message":"Did we figure out if this was resolved?","commit_id":"363b7df3b9e6f00c6762f11f4a191f665b50f44f"},{"author":{"_account_id":16710,"name":"Eric Berglund","email":"esberglu@us.ibm.com","username":"esberglu"},"change_message_id":"1f62128fa43b1e28d3ac8b8a6e7077832dbc562c","unresolved":false,"context_lines":[{"line_number":102,"context_line":"        # event needs to come back to our compute manager so we need to ensure"},{"line_number":103,"context_line":"        # the instance.host is set to our host.  We shouldn\u0027t need to do this"},{"line_number":104,"context_line":"        # but in the evacuate/recreate case it may reflect the old host."},{"line_number":105,"context_line":"        # See: https://bugs.launchpad.net/nova/+bug/1535918"},{"line_number":106,"context_line":"        undo_host_change \u003d False"},{"line_number":107,"context_line":"        if self.instance.host !\u003d CONF.host:"},{"line_number":108,"context_line":"            LOG.warning(\u0027Instance was not assigned to this host.\u0027,"}],"source_content_type":"text/x-python","patch_set":26,"id":"1f485f77_942f093e","line":105,"range":{"start_line":105,"start_character":15,"end_line":105,"end_character":59},"in_reply_to":"1f485f77_e8d31dd4","updated":"2017-11-16 22:02:01.000000000","message":"Got some more info from thorst. We aren\u0027t sure if it is resolved, it needs to be tested. However it isn\u0027t needed until we bring in LPM support, so it is being removed.","commit_id":"363b7df3b9e6f00c6762f11f4a191f665b50f44f"},{"author":{"_account_id":10608,"name":"Matthew Edmonds","email":"edmondsw@us.ibm.com","username":"edmondsw"},"change_message_id":"879af74c43dde7e3aeead5db992175a4a2499c28","unresolved":false,"context_lines":[{"line_number":79,"context_line":"        # Check to see if the LPAR is OK to add VIFs to."},{"line_number":80,"context_line":"        modifiable, reason \u003d lpar_wrap.can_modify_io()"},{"line_number":81,"context_line":"        if not modifiable:"},{"line_number":82,"context_line":"            LOG.error(\u0027Unable to create VIF(s) for instance. The VM was in a \u0027"},{"line_number":83,"context_line":"                      \u0027state where VIF plugging is not acceptable. The reason \u0027"},{"line_number":84,"context_line":"                      \u0027from the system is: %s\u0027, reason,"},{"line_number":85,"context_line":"                      instance\u003dself.instance)"},{"line_number":86,"context_line":"            raise exception.VirtualInterfaceCreateException()"}],"source_content_type":"text/x-python","patch_set":32,"id":"9f91af0f_b0b5d833","line":83,"range":{"start_line":82,"start_character":59,"end_line":83,"end_character":65},"updated":"2018-01-02 22:27:42.000000000","message":"nit: \"in the system\u0027s current state\"","commit_id":"6efbcee789b98ad58d667deead9f49e6a97e115d"},{"author":{"_account_id":16710,"name":"Eric Berglund","email":"esberglu@us.ibm.com","username":"esberglu"},"change_message_id":"68583dc9596f091e84691f34b700cf12a42178f8","unresolved":false,"context_lines":[{"line_number":79,"context_line":"        # Check to see if the LPAR is OK to add VIFs to."},{"line_number":80,"context_line":"        modifiable, reason \u003d lpar_wrap.can_modify_io()"},{"line_number":81,"context_line":"        if not modifiable:"},{"line_number":82,"context_line":"            LOG.error(\u0027Unable to create VIF(s) for instance. The VM was in a \u0027"},{"line_number":83,"context_line":"                      \u0027state where VIF plugging is not acceptable. The reason \u0027"},{"line_number":84,"context_line":"                      \u0027from the system is: %s\u0027, reason,"},{"line_number":85,"context_line":"                      instance\u003dself.instance)"},{"line_number":86,"context_line":"            raise exception.VirtualInterfaceCreateException()"}],"source_content_type":"text/x-python","patch_set":32,"id":"9f91af0f_360ea034","line":83,"range":{"start_line":82,"start_character":59,"end_line":83,"end_character":65},"in_reply_to":"9f91af0f_b0b5d833","updated":"2018-01-03 01:13:14.000000000","message":"Done","commit_id":"6efbcee789b98ad58d667deead9f49e6a97e115d"},{"author":{"_account_id":10608,"name":"Matthew Edmonds","email":"edmondsw@us.ibm.com","username":"edmondsw"},"change_message_id":"879af74c43dde7e3aeead5db992175a4a2499c28","unresolved":false,"context_lines":[{"line_number":105,"context_line":"                     network_info[\u0027address\u0027], instance\u003dself.instance)"},{"line_number":106,"context_line":"            vif.plug(self.adapter, self.instance, network_info, new_vif\u003dFalse)"},{"line_number":107,"context_line":""},{"line_number":108,"context_line":"        # For the VIFs, run the creates (and wait for the events back)"},{"line_number":109,"context_line":"        try:"},{"line_number":110,"context_line":"            with self.virt_api.wait_for_instance_event("},{"line_number":111,"context_line":"                    self.instance, self._get_vif_events(),"}],"source_content_type":"text/x-python","patch_set":32,"id":"9f91af0f_70043016","line":108,"range":{"start_line":108,"start_character":14,"end_line":108,"end_character":22},"updated":"2018-01-02 22:27:42.000000000","message":"nit: seem to be missing the word \"new\" or \"other\" or something.","commit_id":"6efbcee789b98ad58d667deead9f49e6a97e115d"},{"author":{"_account_id":16710,"name":"Eric Berglund","email":"esberglu@us.ibm.com","username":"esberglu"},"change_message_id":"68583dc9596f091e84691f34b700cf12a42178f8","unresolved":false,"context_lines":[{"line_number":105,"context_line":"                     network_info[\u0027address\u0027], instance\u003dself.instance)"},{"line_number":106,"context_line":"            vif.plug(self.adapter, self.instance, network_info, new_vif\u003dFalse)"},{"line_number":107,"context_line":""},{"line_number":108,"context_line":"        # For the VIFs, run the creates (and wait for the events back)"},{"line_number":109,"context_line":"        try:"},{"line_number":110,"context_line":"            with self.virt_api.wait_for_instance_event("},{"line_number":111,"context_line":"                    self.instance, self._get_vif_events(),"}],"source_content_type":"text/x-python","patch_set":32,"id":"9f91af0f_56280485","line":108,"range":{"start_line":108,"start_character":14,"end_line":108,"end_character":22},"in_reply_to":"9f91af0f_70043016","updated":"2018-01-03 01:13:14.000000000","message":"Done","commit_id":"6efbcee789b98ad58d667deead9f49e6a97e115d"},{"author":{"_account_id":10608,"name":"Matthew Edmonds","email":"edmondsw@us.ibm.com","username":"edmondsw"},"change_message_id":"879af74c43dde7e3aeead5db992175a4a2499c28","unresolved":false,"context_lines":[{"line_number":194,"context_line":"        lpar_wrap \u003d vm.get_instance_wrapper(self.adapter, self.instance)"},{"line_number":195,"context_line":"        modifiable, reason \u003d lpar_wrap.can_modify_io()"},{"line_number":196,"context_line":"        if not modifiable:"},{"line_number":197,"context_line":"            LOG.error(\u0027Unable to remove VIFs from instance because the system \u0027"},{"line_number":198,"context_line":"                      \u0027is not in a correct state. The reason reported by the \u0027"},{"line_number":199,"context_line":"                      \u0027system is: %s\u0027, reason, instance\u003dself.instance)"},{"line_number":200,"context_line":"            raise exception.VirtualInterfaceUnplugException(reason\u003dreason)"},{"line_number":201,"context_line":""}],"source_content_type":"text/x-python","patch_set":32,"id":"9f91af0f_30aa28d4","line":198,"range":{"start_line":197,"start_character":59,"end_line":198,"end_character":48},"updated":"2018-01-02 22:27:42.000000000","message":"nit: \"in the system\u0027s current state\"","commit_id":"6efbcee789b98ad58d667deead9f49e6a97e115d"},{"author":{"_account_id":16710,"name":"Eric Berglund","email":"esberglu@us.ibm.com","username":"esberglu"},"change_message_id":"68583dc9596f091e84691f34b700cf12a42178f8","unresolved":false,"context_lines":[{"line_number":194,"context_line":"        lpar_wrap \u003d vm.get_instance_wrapper(self.adapter, self.instance)"},{"line_number":195,"context_line":"        modifiable, reason \u003d lpar_wrap.can_modify_io()"},{"line_number":196,"context_line":"        if not modifiable:"},{"line_number":197,"context_line":"            LOG.error(\u0027Unable to remove VIFs from instance because the system \u0027"},{"line_number":198,"context_line":"                      \u0027is not in a correct state. The reason reported by the \u0027"},{"line_number":199,"context_line":"                      \u0027system is: %s\u0027, reason, instance\u003dself.instance)"},{"line_number":200,"context_line":"            raise exception.VirtualInterfaceUnplugException(reason\u003dreason)"},{"line_number":201,"context_line":""}],"source_content_type":"text/x-python","patch_set":32,"id":"9f91af0f_762d0894","line":198,"range":{"start_line":197,"start_character":59,"end_line":198,"end_character":48},"in_reply_to":"9f91af0f_30aa28d4","updated":"2018-01-03 01:13:14.000000000","message":"Done","commit_id":"6efbcee789b98ad58d667deead9f49e6a97e115d"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"3950e915c8a1f9cca748108dcd9df60aa62e05b3","unresolved":false,"context_lines":[{"line_number":56,"context_line":"        self.instance \u003d instance"},{"line_number":57,"context_line":"        self.network_infos \u003d network_infos or []"},{"line_number":58,"context_line":"        self.crt_network_infos, self.update_network_infos \u003d [], []"},{"line_number":59,"context_line":"        self.cnas \u003d None"},{"line_number":60,"context_line":""},{"line_number":61,"context_line":"        super(PlugVifs, self).__init__("},{"line_number":62,"context_line":"            \u0027plug_vifs\u0027, provides\u003d\u0027vm_cnas\u0027, requires\u003d[\u0027lpar_wrap\u0027])"}],"source_content_type":"text/x-python","patch_set":36,"id":"7f96bb07_0188efe4","line":59,"updated":"2018-01-15 15:23:34.000000000","message":"I would note here that self.cnas is basically a cache that is filled when _vif_exists() called in the first time. Or I would even call the vm.get_cnas(self.adapter, self.instance) here to avoid the side effect in _vif_exists()","commit_id":"8a56694128c2f4d23c9650f6a25403d550d7d5af"},{"author":{"_account_id":16710,"name":"Eric Berglund","email":"esberglu@us.ibm.com","username":"esberglu"},"change_message_id":"5a27f6d4f9d767247ddfb656b68ba85cf98e9594","unresolved":false,"context_lines":[{"line_number":56,"context_line":"        self.instance \u003d instance"},{"line_number":57,"context_line":"        self.network_infos \u003d network_infos or []"},{"line_number":58,"context_line":"        self.crt_network_infos, self.update_network_infos \u003d [], []"},{"line_number":59,"context_line":"        self.cnas \u003d None"},{"line_number":60,"context_line":""},{"line_number":61,"context_line":"        super(PlugVifs, self).__init__("},{"line_number":62,"context_line":"            \u0027plug_vifs\u0027, provides\u003d\u0027vm_cnas\u0027, requires\u003d[\u0027lpar_wrap\u0027])"}],"source_content_type":"text/x-python","patch_set":36,"id":"7f96bb07_2e660553","line":59,"in_reply_to":"7f96bb07_0188efe4","updated":"2018-01-15 17:24:27.000000000","message":"Done","commit_id":"8a56694128c2f4d23c9650f6a25403d550d7d5af"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"3950e915c8a1f9cca748108dcd9df60aa62e05b3","unresolved":false,"context_lines":[{"line_number":129,"context_line":"        LOG.error(\u0027VIF Plug failure for callback on event %s for instance.\u0027,"},{"line_number":130,"context_line":"                  event_name, instance\u003dself.instance)"},{"line_number":131,"context_line":"        if CONF.vif_plugging_is_fatal:"},{"line_number":132,"context_line":"            raise exception.VirtualInterfaceCreateException()"},{"line_number":133,"context_line":""},{"line_number":134,"context_line":"    def _get_vif_events(self):"},{"line_number":135,"context_line":"        \"\"\"Returns the VIF events that need to be received for a VIF plug."}],"source_content_type":"text/x-python","patch_set":36,"id":"7f96bb07_5c4a6055","line":132,"updated":"2018-01-15 15:23:34.000000000","message":"Does the cleanup of already plugged interfaces handled somewhere above the call stack?\n[...]\nNow I saw revert() so I guess that is called to do the cleanup.","commit_id":"8a56694128c2f4d23c9650f6a25403d550d7d5af"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"3950e915c8a1f9cca748108dcd9df60aa62e05b3","unresolved":false,"context_lines":[{"line_number":142,"context_line":"        \"\"\""},{"line_number":143,"context_line":"        # See libvirt\u0027s driver.py -\u003e _get_neutron_events method for"},{"line_number":144,"context_line":"        # more information."},{"line_number":145,"context_line":"        if (utils.is_neutron() and CONF.vif_plugging_is_fatal and"},{"line_number":146,"context_line":"                CONF.vif_plugging_timeout):"},{"line_number":147,"context_line":"            return [(\u0027network-vif-plugged\u0027, network_info[\u0027id\u0027])"},{"line_number":148,"context_line":"                    for network_info in self.crt_network_infos"}],"source_content_type":"text/x-python","patch_set":36,"id":"7f96bb07_3ca0b4f4","line":145,"range":{"start_line":145,"start_character":12,"end_line":145,"end_character":30},"updated":"2018-01-15 15:23:34.000000000","message":"Can it be something else than neutron in case of powervm?","commit_id":"8a56694128c2f4d23c9650f6a25403d550d7d5af"},{"author":{"_account_id":16710,"name":"Eric Berglund","email":"esberglu@us.ibm.com","username":"esberglu"},"change_message_id":"5a27f6d4f9d767247ddfb656b68ba85cf98e9594","unresolved":false,"context_lines":[{"line_number":142,"context_line":"        \"\"\""},{"line_number":143,"context_line":"        # See libvirt\u0027s driver.py -\u003e _get_neutron_events method for"},{"line_number":144,"context_line":"        # more information."},{"line_number":145,"context_line":"        if (utils.is_neutron() and CONF.vif_plugging_is_fatal and"},{"line_number":146,"context_line":"                CONF.vif_plugging_timeout):"},{"line_number":147,"context_line":"            return [(\u0027network-vif-plugged\u0027, network_info[\u0027id\u0027])"},{"line_number":148,"context_line":"                    for network_info in self.crt_network_infos"}],"source_content_type":"text/x-python","patch_set":36,"id":"7f96bb07_8e4b9929","line":145,"range":{"start_line":145,"start_character":12,"end_line":145,"end_character":30},"in_reply_to":"7f96bb07_3ca0b4f4","updated":"2018-01-15 17:24:27.000000000","message":"See comment above in L137-141","commit_id":"8a56694128c2f4d23c9650f6a25403d550d7d5af"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"8201b953fbce102dd96d08f22e670e11ee7d0981","unresolved":false,"context_lines":[{"line_number":142,"context_line":"        \"\"\""},{"line_number":143,"context_line":"        # See libvirt\u0027s driver.py -\u003e _get_neutron_events method for"},{"line_number":144,"context_line":"        # more information."},{"line_number":145,"context_line":"        if (utils.is_neutron() and CONF.vif_plugging_is_fatal and"},{"line_number":146,"context_line":"                CONF.vif_plugging_timeout):"},{"line_number":147,"context_line":"            return [(\u0027network-vif-plugged\u0027, network_info[\u0027id\u0027])"},{"line_number":148,"context_line":"                    for network_info in self.crt_network_infos"}],"source_content_type":"text/x-python","patch_set":36,"id":"7f96bb07_06a3c901","line":145,"range":{"start_line":145,"start_character":12,"end_line":145,"end_character":30},"in_reply_to":"7f96bb07_8e4b9929","updated":"2018-01-16 16:14:10.000000000","message":"If I were you I would state that powerVM is only supported with neutron and remove every nova networking related thing from the driver. But I accept that it is not so simple. :)","commit_id":"8a56694128c2f4d23c9650f6a25403d550d7d5af"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"9e2ed213f1795f1a73f5a0c0a1abcafe773ab3b0","unresolved":false,"context_lines":[{"line_number":148,"context_line":"            return [(\u0027network-vif-plugged\u0027, network_info[\u0027id\u0027])"},{"line_number":149,"context_line":"                    for network_info in self.crt_network_infos"},{"line_number":150,"context_line":"                    if not network_info.get(\u0027active\u0027, True)]"},{"line_number":151,"context_line":"        else:"},{"line_number":152,"context_line":"            return []"},{"line_number":153,"context_line":""},{"line_number":154,"context_line":"    def revert(self, lpar_wrap, result, flow_failures):"},{"line_number":155,"context_line":"        if not self.network_infos:"}],"source_content_type":"text/x-python","patch_set":39,"id":"7f96bb07_f725295d","line":152,"range":{"start_line":151,"start_character":0,"end_line":152,"end_character":21},"updated":"2018-01-16 17:32:10.000000000","message":"Is nova-network actually supported here?","commit_id":"5abd333a188b3f5410bff3a5a48c928c85de79c6"},{"author":{"_account_id":16710,"name":"Eric Berglund","email":"esberglu@us.ibm.com","username":"esberglu"},"change_message_id":"96fed1f2d52791ee900fa7629e80ffdb8906bd2f","unresolved":false,"context_lines":[{"line_number":148,"context_line":"            return [(\u0027network-vif-plugged\u0027, network_info[\u0027id\u0027])"},{"line_number":149,"context_line":"                    for network_info in self.crt_network_infos"},{"line_number":150,"context_line":"                    if not network_info.get(\u0027active\u0027, True)]"},{"line_number":151,"context_line":"        else:"},{"line_number":152,"context_line":"            return []"},{"line_number":153,"context_line":""},{"line_number":154,"context_line":"    def revert(self, lpar_wrap, result, flow_failures):"},{"line_number":155,"context_line":"        if not self.network_infos:"}],"source_content_type":"text/x-python","patch_set":39,"id":"7f96bb07_e8a226fc","line":152,"range":{"start_line":151,"start_character":0,"end_line":152,"end_character":21},"in_reply_to":"7f96bb07_4dda4c4c","updated":"2018-01-16 18:59:19.000000000","message":"Removed","commit_id":"5abd333a188b3f5410bff3a5a48c928c85de79c6"},{"author":{"_account_id":16710,"name":"Eric Berglund","email":"esberglu@us.ibm.com","username":"esberglu"},"change_message_id":"49680c56546378f61ed108c930b7f6cdf4fbd45e","unresolved":false,"context_lines":[{"line_number":148,"context_line":"            return [(\u0027network-vif-plugged\u0027, network_info[\u0027id\u0027])"},{"line_number":149,"context_line":"                    for network_info in self.crt_network_infos"},{"line_number":150,"context_line":"                    if not network_info.get(\u0027active\u0027, True)]"},{"line_number":151,"context_line":"        else:"},{"line_number":152,"context_line":"            return []"},{"line_number":153,"context_line":""},{"line_number":154,"context_line":"    def revert(self, lpar_wrap, result, flow_failures):"},{"line_number":155,"context_line":"        if not self.network_infos:"}],"source_content_type":"text/x-python","patch_set":39,"id":"7f96bb07_4dda4c4c","line":152,"range":{"start_line":151,"start_character":0,"end_line":152,"end_character":21},"in_reply_to":"7f96bb07_d2491b31","updated":"2018-01-16 18:29:20.000000000","message":"After some further input, nova-net is not actually supported, this is leftover from an attempt to get it working. I can either rip it out here or in a follow up.","commit_id":"5abd333a188b3f5410bff3a5a48c928c85de79c6"},{"author":{"_account_id":16710,"name":"Eric Berglund","email":"esberglu@us.ibm.com","username":"esberglu"},"change_message_id":"5654ba4a73aef8207a069b75f68cb34bd6485d6a","unresolved":false,"context_lines":[{"line_number":148,"context_line":"            return [(\u0027network-vif-plugged\u0027, network_info[\u0027id\u0027])"},{"line_number":149,"context_line":"                    for network_info in self.crt_network_infos"},{"line_number":150,"context_line":"                    if not network_info.get(\u0027active\u0027, True)]"},{"line_number":151,"context_line":"        else:"},{"line_number":152,"context_line":"            return []"},{"line_number":153,"context_line":""},{"line_number":154,"context_line":"    def revert(self, lpar_wrap, result, flow_failures):"},{"line_number":155,"context_line":"        if not self.network_infos:"}],"source_content_type":"text/x-python","patch_set":39,"id":"7f96bb07_d2491b31","line":152,"range":{"start_line":151,"start_character":0,"end_line":152,"end_character":21},"in_reply_to":"7f96bb07_f725295d","updated":"2018-01-16 17:56:49.000000000","message":"In a follow up we are planning on removing anything nova-net related from the driver and only claim neutron support.","commit_id":"5abd333a188b3f5410bff3a5a48c928c85de79c6"},{"author":{"_account_id":10608,"name":"Matthew Edmonds","email":"edmondsw@us.ibm.com","username":"edmondsw"},"change_message_id":"297fea4f137b041032439bb037fd818e8f34dfb4","unresolved":false,"context_lines":[{"line_number":137,"context_line":""},{"line_number":138,"context_line":"        In order for a VIF plug to be successful, certain events should be"},{"line_number":139,"context_line":"        received from other components within the OpenStack ecosystem. This"},{"line_number":140,"context_line":"        method returns the events needed for a given deploy."},{"line_number":141,"context_line":"        \"\"\""},{"line_number":142,"context_line":"        # See libvirt\u0027s driver.py -\u003e _get_neutron_events method for"},{"line_number":143,"context_line":"        # more information."}],"source_content_type":"text/x-python","patch_set":40,"id":"7f96bb07_55865215","line":140,"range":{"start_line":140,"start_character":27,"end_line":140,"end_character":40},"updated":"2018-01-16 20:43:58.000000000","message":"let\u0027s be explicit with \"events neutron needs\"","commit_id":"5cdf60db7ef5f90d90c70233bf23715b2e14be86"},{"author":{"_account_id":16710,"name":"Eric Berglund","email":"esberglu@us.ibm.com","username":"esberglu"},"change_message_id":"d33481931794381aee268b4a1aa84cb2e7b08403","unresolved":false,"context_lines":[{"line_number":137,"context_line":""},{"line_number":138,"context_line":"        In order for a VIF plug to be successful, certain events should be"},{"line_number":139,"context_line":"        received from other components within the OpenStack ecosystem. This"},{"line_number":140,"context_line":"        method returns the events needed for a given deploy."},{"line_number":141,"context_line":"        \"\"\""},{"line_number":142,"context_line":"        # See libvirt\u0027s driver.py -\u003e _get_neutron_events method for"},{"line_number":143,"context_line":"        # more information."}],"source_content_type":"text/x-python","patch_set":40,"id":"7f96bb07_f5d19efc","line":140,"range":{"start_line":140,"start_character":27,"end_line":140,"end_character":40},"in_reply_to":"7f96bb07_55865215","updated":"2018-01-16 20:46:08.000000000","message":"Done","commit_id":"5cdf60db7ef5f90d90c70233bf23715b2e14be86"},{"author":{"_account_id":10608,"name":"Matthew Edmonds","email":"edmondsw@us.ibm.com","username":"edmondsw"},"change_message_id":"297fea4f137b041032439bb037fd818e8f34dfb4","unresolved":false,"context_lines":[{"line_number":141,"context_line":"        \"\"\""},{"line_number":142,"context_line":"        # See libvirt\u0027s driver.py -\u003e _get_neutron_events method for"},{"line_number":143,"context_line":"        # more information."},{"line_number":144,"context_line":"        if (CONF.vif_plugging_is_fatal and CONF.vif_plugging_timeout):"},{"line_number":145,"context_line":"            return [(\u0027network-vif-plugged\u0027, network_info[\u0027id\u0027])"},{"line_number":146,"context_line":"                    for network_info in self.crt_network_infos"},{"line_number":147,"context_line":"                    if not network_info.get(\u0027active\u0027, True)]"}],"source_content_type":"text/x-python","patch_set":40,"id":"7f96bb07_d5710246","line":144,"updated":"2018-01-16 20:43:58.000000000","message":"can remove the () here","commit_id":"5cdf60db7ef5f90d90c70233bf23715b2e14be86"},{"author":{"_account_id":16710,"name":"Eric Berglund","email":"esberglu@us.ibm.com","username":"esberglu"},"change_message_id":"d33481931794381aee268b4a1aa84cb2e7b08403","unresolved":false,"context_lines":[{"line_number":141,"context_line":"        \"\"\""},{"line_number":142,"context_line":"        # See libvirt\u0027s driver.py -\u003e _get_neutron_events method for"},{"line_number":143,"context_line":"        # more information."},{"line_number":144,"context_line":"        if (CONF.vif_plugging_is_fatal and CONF.vif_plugging_timeout):"},{"line_number":145,"context_line":"            return [(\u0027network-vif-plugged\u0027, network_info[\u0027id\u0027])"},{"line_number":146,"context_line":"                    for network_info in self.crt_network_infos"},{"line_number":147,"context_line":"                    if not network_info.get(\u0027active\u0027, True)]"}],"source_content_type":"text/x-python","patch_set":40,"id":"7f96bb07_15cf6a56","line":144,"in_reply_to":"7f96bb07_d5710246","updated":"2018-01-16 20:46:08.000000000","message":"Done","commit_id":"5cdf60db7ef5f90d90c70233bf23715b2e14be86"}],"nova/virt/powervm/tasks/storage.py":[{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"b0469a17547cefe2c4ba47a611b5da509e16a0bd","unresolved":false,"context_lines":[{"line_number":147,"context_line":"        \"\"\"Create the Task that creates and connects the config drive."},{"line_number":148,"context_line":""},{"line_number":149,"context_line":"        Requires the \u0027mgmt_cna\u0027"},{"line_number":150,"context_line":"        Provides the \u0027cfg_drv_vscsi_map\u0027 which is an element to later map"},{"line_number":151,"context_line":"        the vscsi drive."},{"line_number":152,"context_line":""},{"line_number":153,"context_line":"        :param adapter: The adapter for the pypowervm API"},{"line_number":154,"context_line":"        :param instance: The nova instance"}],"source_content_type":"text/x-python","patch_set":25,"id":"3f4b6375_38337c16","line":151,"range":{"start_line":150,"start_character":8,"end_line":151,"end_character":24},"updated":"2017-11-06 17:05:43.000000000","message":"This doesn\u0027t seem to be true.  Is that a miss in the code, or can this sentence be deleted?","commit_id":"d17c318eb2b4a22961a929f53a94e85a087e2cf8"},{"author":{"_account_id":16710,"name":"Eric Berglund","email":"esberglu@us.ibm.com","username":"esberglu"},"change_message_id":"3ffa85f520a5ccd65c0cdc0bf45d067e9a9c6896","unresolved":false,"context_lines":[{"line_number":147,"context_line":"        \"\"\"Create the Task that creates and connects the config drive."},{"line_number":148,"context_line":""},{"line_number":149,"context_line":"        Requires the \u0027mgmt_cna\u0027"},{"line_number":150,"context_line":"        Provides the \u0027cfg_drv_vscsi_map\u0027 which is an element to later map"},{"line_number":151,"context_line":"        the vscsi drive."},{"line_number":152,"context_line":""},{"line_number":153,"context_line":"        :param adapter: The adapter for the pypowervm API"},{"line_number":154,"context_line":"        :param instance: The nova instance"}],"source_content_type":"text/x-python","patch_set":25,"id":"1f485f77_b2c14283","line":151,"range":{"start_line":150,"start_character":8,"end_line":151,"end_character":24},"in_reply_to":"3f4b6375_38337c16","updated":"2017-11-15 22:17:18.000000000","message":"Done","commit_id":"d17c318eb2b4a22961a929f53a94e85a087e2cf8"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"9e2ed213f1795f1a73f5a0c0a1abcafe773ab3b0","unresolved":false,"context_lines":[{"line_number":158,"context_line":"                                                    VM."},{"line_number":159,"context_line":"        \"\"\""},{"line_number":160,"context_line":"        super(CreateAndConnectCfgDrive, self).__init__("},{"line_number":161,"context_line":"            instance, \u0027cfg_drive\u0027, requires\u003d[\u0027mgmt_cna\u0027])"},{"line_number":162,"context_line":"        self.adapter \u003d adapter"},{"line_number":163,"context_line":"        self.instance \u003d instance"},{"line_number":164,"context_line":"        self.injected_files \u003d injected_files"}],"source_content_type":"text/x-python","patch_set":39,"id":"7f96bb07_17e0d5f9","line":161,"range":{"start_line":161,"start_character":35,"end_line":161,"end_character":56},"updated":"2018-01-16 17:32:10.000000000","message":"nit: Could have this as a class attribute and auto-document it...somehow","commit_id":"5abd333a188b3f5410bff3a5a48c928c85de79c6"}],"nova/virt/powervm/tasks/vm.py":[{"author":{"_account_id":16710,"name":"Eric Berglund","email":"esberglu@us.ibm.com","username":"esberglu"},"change_message_id":"e125ed7342e466de3a2a83c5f5c62e684e3bd7d0","unresolved":false,"context_lines":[{"line_number":40,"context_line":"        self.adapter \u003d adapter"},{"line_number":41,"context_line":"        self.host_uuid \u003d host_uuid"},{"line_number":42,"context_line":""},{"line_number":43,"context_line":"    def execute_impl(self):"},{"line_number":44,"context_line":"        return vm.get_instance_wrapper(self.adapter, self.instance)"},{"line_number":45,"context_line":""},{"line_number":46,"context_line":""}],"source_content_type":"text/x-python","patch_set":14,"id":"7f515b1d_cd298fe6","line":43,"range":{"start_line":43,"start_character":8,"end_line":43,"end_character":20},"updated":"2017-09-27 14:26:53.000000000","message":"execute()","commit_id":"655ca898ceb70756650a2e54a026f93a771abbf9"},{"author":{"_account_id":16710,"name":"Eric Berglund","email":"esberglu@us.ibm.com","username":"esberglu"},"change_message_id":"b5ed0614ac86e3e16ef0fb4d02c6a7204bfdaa65","unresolved":false,"context_lines":[{"line_number":40,"context_line":"        self.adapter \u003d adapter"},{"line_number":41,"context_line":"        self.host_uuid \u003d host_uuid"},{"line_number":42,"context_line":""},{"line_number":43,"context_line":"    def execute_impl(self):"},{"line_number":44,"context_line":"        return vm.get_instance_wrapper(self.adapter, self.instance)"},{"line_number":45,"context_line":""},{"line_number":46,"context_line":""}],"source_content_type":"text/x-python","patch_set":14,"id":"7f515b1d_3378848e","line":43,"range":{"start_line":43,"start_character":8,"end_line":43,"end_character":20},"in_reply_to":"7f515b1d_cd298fe6","updated":"2017-09-27 18:29:51.000000000","message":"Done","commit_id":"655ca898ceb70756650a2e54a026f93a771abbf9"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"b0469a17547cefe2c4ba47a611b5da509e16a0bd","unresolved":false,"context_lines":[{"line_number":24,"context_line":"LOG \u003d logging.getLogger(__name__)"},{"line_number":25,"context_line":""},{"line_number":26,"context_line":""},{"line_number":27,"context_line":"class Get(task.Task):"},{"line_number":28,"context_line":"    \"\"\"The task for getting a VM entry.\"\"\""},{"line_number":29,"context_line":""},{"line_number":30,"context_line":"    def __init__(self, adapter, host_uuid, instance):"}],"source_content_type":"text/x-python","patch_set":25,"id":"3f4b6375_d8b8e875","line":27,"updated":"2017-11-06 17:05:43.000000000","message":"This doesn\u0027t seem worth having yet.  Just inline the vm.get_instance_wrapper call in UnplugVifs.execute.","commit_id":"d17c318eb2b4a22961a929f53a94e85a087e2cf8"},{"author":{"_account_id":16710,"name":"Eric Berglund","email":"esberglu@us.ibm.com","username":"esberglu"},"change_message_id":"3ffa85f520a5ccd65c0cdc0bf45d067e9a9c6896","unresolved":false,"context_lines":[{"line_number":24,"context_line":"LOG \u003d logging.getLogger(__name__)"},{"line_number":25,"context_line":""},{"line_number":26,"context_line":""},{"line_number":27,"context_line":"class Get(task.Task):"},{"line_number":28,"context_line":"    \"\"\"The task for getting a VM entry.\"\"\""},{"line_number":29,"context_line":""},{"line_number":30,"context_line":"    def __init__(self, adapter, host_uuid, instance):"}],"source_content_type":"text/x-python","patch_set":25,"id":"1f485f77_44d7e824","line":27,"in_reply_to":"3f4b6375_d8b8e875","updated":"2017-11-15 22:17:18.000000000","message":"Done","commit_id":"d17c318eb2b4a22961a929f53a94e85a087e2cf8"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"b0469a17547cefe2c4ba47a611b5da509e16a0bd","unresolved":false,"context_lines":[{"line_number":69,"context_line":"        :param instance: The nova instance."},{"line_number":70,"context_line":"        :param stg_ftsk: FeedTask to defer storage connectivity operations."},{"line_number":71,"context_line":"        \"\"\""},{"line_number":72,"context_line":"        super(Create, self).__init__(\u0027crt_vm\u0027, provides\u003d\u0027lpar_wrap\u0027)"},{"line_number":73,"context_line":"        self.instance \u003d instance"},{"line_number":74,"context_line":"        self.adapter \u003d adapter"},{"line_number":75,"context_line":"        self.host_wrapper \u003d host_wrapper"}],"source_content_type":"text/x-python","patch_set":25,"id":"3f4b6375_b8788cc3","line":72,"range":{"start_line":72,"start_character":57,"end_line":72,"end_character":66},"updated":"2017-11-06 17:05:43.000000000","message":"This one stays, though.","commit_id":"d17c318eb2b4a22961a929f53a94e85a087e2cf8"},{"author":{"_account_id":16710,"name":"Eric Berglund","email":"esberglu@us.ibm.com","username":"esberglu"},"change_message_id":"3ffa85f520a5ccd65c0cdc0bf45d067e9a9c6896","unresolved":false,"context_lines":[{"line_number":69,"context_line":"        :param instance: The nova instance."},{"line_number":70,"context_line":"        :param stg_ftsk: FeedTask to defer storage connectivity operations."},{"line_number":71,"context_line":"        \"\"\""},{"line_number":72,"context_line":"        super(Create, self).__init__(\u0027crt_vm\u0027, provides\u003d\u0027lpar_wrap\u0027)"},{"line_number":73,"context_line":"        self.instance \u003d instance"},{"line_number":74,"context_line":"        self.adapter \u003d adapter"},{"line_number":75,"context_line":"        self.host_wrapper \u003d host_wrapper"}],"source_content_type":"text/x-python","patch_set":25,"id":"1f485f77_d2a39e9d","line":72,"range":{"start_line":72,"start_character":57,"end_line":72,"end_character":66},"in_reply_to":"3f4b6375_b8788cc3","updated":"2017-11-15 22:17:18.000000000","message":"Done","commit_id":"d17c318eb2b4a22961a929f53a94e85a087e2cf8"}],"nova/virt/powervm/vif.py":[{"author":{"_account_id":8190,"name":"Drew Thorstensen (thorst)","email":"thorst@us.ibm.com","username":"thorst"},"change_message_id":"98828f799bdac2fe2bb03753796e89d587611ea2","unresolved":false,"context_lines":[{"line_number":59,"context_line":"            _(\"vif_type parameter must be present for this vif_driver \""},{"line_number":60,"context_line":"              \"implementation\"))"},{"line_number":61,"context_line":""},{"line_number":62,"context_line":"    # Check the type to the implementations"},{"line_number":63,"context_line":"    if vif[\u0027type\u0027] \u003d\u003d \u0027ovs\u0027:"},{"line_number":64,"context_line":"        return PvmOvsVifDriver(adapter, host_uuid, instance)"},{"line_number":65,"context_line":""},{"line_number":66,"context_line":"    # No matching implementation, raise error."},{"line_number":67,"context_line":"    raise exception.VirtualInterfacePlugException("}],"source_content_type":"text/x-python","patch_set":7,"id":"3a461143_8aa047a1","line":64,"range":{"start_line":62,"start_character":0,"end_line":64,"end_character":60},"updated":"2017-01-26 16:18:06.000000000","message":"I thought the OOT driver had a dictionary where we could look up the VIF implementation based on type.  I\u0027d rather do that than a long if/else block.","commit_id":"9bbfc0c6f7176599aea2b9b8071e9212630e11cf"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"78267b11844e0a1f7f3dc983a4ae864219c49790","unresolved":false,"context_lines":[{"line_number":59,"context_line":"            _(\"vif_type parameter must be present for this vif_driver \""},{"line_number":60,"context_line":"              \"implementation\"))"},{"line_number":61,"context_line":""},{"line_number":62,"context_line":"    # Check the type to the implementations"},{"line_number":63,"context_line":"    if vif[\u0027type\u0027] \u003d\u003d \u0027ovs\u0027:"},{"line_number":64,"context_line":"        return PvmOvsVifDriver(adapter, host_uuid, instance)"},{"line_number":65,"context_line":""},{"line_number":66,"context_line":"    # No matching implementation, raise error."},{"line_number":67,"context_line":"    raise exception.VirtualInterfacePlugException("}],"source_content_type":"text/x-python","patch_set":7,"id":"3a461143_dffacf42","line":64,"range":{"start_line":62,"start_character":0,"end_line":64,"end_character":60},"in_reply_to":"3a461143_8aa047a1","updated":"2017-01-27 22:36:58.000000000","message":"Debatable whether we want to introduce the dict in this change set given it\u0027ll have just one item in it.  In the interest in reducing the LOC count (even by one), I\u0027m good with doing this for this change set, and then introducing the dict later.","commit_id":"9bbfc0c6f7176599aea2b9b8071e9212630e11cf"},{"author":{"_account_id":8190,"name":"Drew Thorstensen (thorst)","email":"thorst@us.ibm.com","username":"thorst"},"change_message_id":"98828f799bdac2fe2bb03753796e89d587611ea2","unresolved":false,"context_lines":[{"line_number":88,"context_line":"    event \u003d pvm_evt.Event.bld(adapter, data, detail)"},{"line_number":89,"context_line":"    try:"},{"line_number":90,"context_line":"        event \u003d event.create()"},{"line_number":91,"context_line":"        LOG.info(_LI(\u0027Custom event push: %s\u0027), str(event), instance\u003dinstance)"},{"line_number":92,"context_line":"    except Exception:"},{"line_number":93,"context_line":"        LOG.error(_LE(\u0027Custom VIF event push failed.  %s\u0027), str(event),"},{"line_number":94,"context_line":"                  instance\u003dinstance)"}],"source_content_type":"text/x-python","patch_set":7,"id":"3a461143_4acbbf53","line":91,"range":{"start_line":91,"start_character":22,"end_line":91,"end_character":39},"updated":"2017-01-26 16:18:06.000000000","message":"Hmm...I\u0027m not sure this should be info.  And this applies to OOT driver too.\n\nBut this message doesn\u0027t really tell the operator anything.  I think we need to tell them something valuable (or make this debug).\n\nSomething like \"Pushed VIF event to PowerVM REST API server for consumption by Neutron Agent\".\n\nThis isn\u0027t explicitly needed for OVS support, but is a good baseline add for SR-IOV and SEA.","commit_id":"9bbfc0c6f7176599aea2b9b8071e9212630e11cf"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"78267b11844e0a1f7f3dc983a4ae864219c49790","unresolved":false,"context_lines":[{"line_number":88,"context_line":"    event \u003d pvm_evt.Event.bld(adapter, data, detail)"},{"line_number":89,"context_line":"    try:"},{"line_number":90,"context_line":"        event \u003d event.create()"},{"line_number":91,"context_line":"        LOG.info(_LI(\u0027Custom event push: %s\u0027), str(event), instance\u003dinstance)"},{"line_number":92,"context_line":"    except Exception:"},{"line_number":93,"context_line":"        LOG.error(_LE(\u0027Custom VIF event push failed.  %s\u0027), str(event),"},{"line_number":94,"context_line":"                  instance\u003dinstance)"}],"source_content_type":"text/x-python","patch_set":7,"id":"3a461143_82eaaeaa","line":91,"range":{"start_line":91,"start_character":22,"end_line":91,"end_character":39},"in_reply_to":"3a461143_4acbbf53","updated":"2017-01-27 22:36:58.000000000","message":"1) Agree it should be debug.  Will push to OOT as well.\n\n2) If we\u0027re going to do that, it\u0027s not for the operator; it\u0027s for the developer.  And the developer knows what it\u0027s about, or they don\u0027t care.  I\u0027m just not a fan of specifying that it\u0027s for the neutron agent.  Though the reason I was going to cite is a bit silly.  Meh, we can change it.\n\n3) But I agree that it\u0027s not needed for OVS support, so it would be a good thing to rip out to reduce the LOC count.","commit_id":"9bbfc0c6f7176599aea2b9b8071e9212630e11cf"},{"author":{"_account_id":8190,"name":"Drew Thorstensen (thorst)","email":"thorst@us.ibm.com","username":"thorst"},"change_message_id":"98828f799bdac2fe2bb03753796e89d587611ea2","unresolved":false,"context_lines":[{"line_number":127,"context_line":"    # Other exceptions are (hopefully) custom VirtualInterfacePlugException"},{"line_number":128,"context_line":"    # generated lower in the call stack."},{"line_number":129,"context_line":""},{"line_number":130,"context_line":"    # If the slot number hadn\u0027t been provided initially, save it for the"},{"line_number":131,"context_line":"    # next rebuild"},{"line_number":132,"context_line":"    if not slot_num and new_vif:"},{"line_number":133,"context_line":"        slot_mgr.register_vnet(vnet_w)"},{"line_number":134,"context_line":""},{"line_number":135,"context_line":"    # Push a custom event if we really plugged the vif"},{"line_number":136,"context_line":"    if vnet_w is not None:"}],"source_content_type":"text/x-python","patch_set":7,"id":"3a461143_ca040f80","line":133,"range":{"start_line":130,"start_character":1,"end_line":133,"end_character":38},"updated":"2017-01-26 16:18:06.000000000","message":"Strike this out for now.","commit_id":"9bbfc0c6f7176599aea2b9b8071e9212630e11cf"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"2813ef1254e4f1929b570192640b7062bd4db903","unresolved":false,"context_lines":[{"line_number":127,"context_line":"    # Other exceptions are (hopefully) custom VirtualInterfacePlugException"},{"line_number":128,"context_line":"    # generated lower in the call stack."},{"line_number":129,"context_line":""},{"line_number":130,"context_line":"    # If the slot number hadn\u0027t been provided initially, save it for the"},{"line_number":131,"context_line":"    # next rebuild"},{"line_number":132,"context_line":"    if not slot_num and new_vif:"},{"line_number":133,"context_line":"        slot_mgr.register_vnet(vnet_w)"},{"line_number":134,"context_line":""},{"line_number":135,"context_line":"    # Push a custom event if we really plugged the vif"},{"line_number":136,"context_line":"    if vnet_w is not None:"}],"source_content_type":"text/x-python","patch_set":7,"id":"3a461143_f29ce7c1","line":133,"range":{"start_line":130,"start_character":1,"end_line":133,"end_character":38},"in_reply_to":"3a461143_ca040f80","updated":"2017-01-30 21:59:55.000000000","message":"Done","commit_id":"9bbfc0c6f7176599aea2b9b8071e9212630e11cf"},{"author":{"_account_id":8190,"name":"Drew Thorstensen (thorst)","email":"thorst@us.ibm.com","username":"thorst"},"change_message_id":"98828f799bdac2fe2bb03753796e89d587611ea2","unresolved":false,"context_lines":[{"line_number":163,"context_line":"        LOG.exception(he.args[0], instance\u003dinstance)"},{"line_number":164,"context_line":"        raise exception.VirtualInterfaceUnplugException(reason\u003dhe.args[0])"},{"line_number":165,"context_line":""},{"line_number":166,"context_line":"    if vnet_w:"},{"line_number":167,"context_line":"        slot_mgr.drop_vnet(vnet_w)"},{"line_number":168,"context_line":""},{"line_number":169,"context_line":""},{"line_number":170,"context_line":"def get_secure_rmc_vswitch(adapter, host_uuid):"}],"source_content_type":"text/x-python","patch_set":7,"id":"3a461143_2a02f36f","line":167,"range":{"start_line":166,"start_character":0,"end_line":167,"end_character":34},"updated":"2017-01-26 16:18:06.000000000","message":"This would get struck","commit_id":"9bbfc0c6f7176599aea2b9b8071e9212630e11cf"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"2813ef1254e4f1929b570192640b7062bd4db903","unresolved":false,"context_lines":[{"line_number":163,"context_line":"        LOG.exception(he.args[0], instance\u003dinstance)"},{"line_number":164,"context_line":"        raise exception.VirtualInterfaceUnplugException(reason\u003dhe.args[0])"},{"line_number":165,"context_line":""},{"line_number":166,"context_line":"    if vnet_w:"},{"line_number":167,"context_line":"        slot_mgr.drop_vnet(vnet_w)"},{"line_number":168,"context_line":""},{"line_number":169,"context_line":""},{"line_number":170,"context_line":"def get_secure_rmc_vswitch(adapter, host_uuid):"}],"source_content_type":"text/x-python","patch_set":7,"id":"3a461143_12a253fd","line":167,"range":{"start_line":166,"start_character":0,"end_line":167,"end_character":34},"in_reply_to":"3a461143_2a02f36f","updated":"2017-01-30 21:59:55.000000000","message":"Done","commit_id":"9bbfc0c6f7176599aea2b9b8071e9212630e11cf"},{"author":{"_account_id":8190,"name":"Drew Thorstensen (thorst)","email":"thorst@us.ibm.com","username":"thorst"},"change_message_id":"98828f799bdac2fe2bb03753796e89d587611ea2","unresolved":false,"context_lines":[{"line_number":202,"context_line":"                            vswitch\u003dSECURE_RMC_VSWITCH, crt_vswitch\u003dTrue,"},{"line_number":203,"context_line":"                            slot_num\u003dslot_num, mac_addr\u003dmac)"},{"line_number":204,"context_line":""},{"line_number":205,"context_line":"    # Save the mgmt vif to the slot map."},{"line_number":206,"context_line":"    if not mac:"},{"line_number":207,"context_line":"        slot_mgr.register_cna(cna_w)"},{"line_number":208,"context_line":""},{"line_number":209,"context_line":"    return cna_w"},{"line_number":210,"context_line":""}],"source_content_type":"text/x-python","patch_set":7,"id":"3a461143_8af3e79d","line":207,"range":{"start_line":205,"start_character":0,"end_line":207,"end_character":36},"updated":"2017-01-26 16:18:06.000000000","message":"Strike","commit_id":"9bbfc0c6f7176599aea2b9b8071e9212630e11cf"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"2813ef1254e4f1929b570192640b7062bd4db903","unresolved":false,"context_lines":[{"line_number":202,"context_line":"                            vswitch\u003dSECURE_RMC_VSWITCH, crt_vswitch\u003dTrue,"},{"line_number":203,"context_line":"                            slot_num\u003dslot_num, mac_addr\u003dmac)"},{"line_number":204,"context_line":""},{"line_number":205,"context_line":"    # Save the mgmt vif to the slot map."},{"line_number":206,"context_line":"    if not mac:"},{"line_number":207,"context_line":"        slot_mgr.register_cna(cna_w)"},{"line_number":208,"context_line":""},{"line_number":209,"context_line":"    return cna_w"},{"line_number":210,"context_line":""}],"source_content_type":"text/x-python","patch_set":7,"id":"3a461143_72b1d746","line":207,"range":{"start_line":205,"start_character":0,"end_line":207,"end_character":36},"in_reply_to":"3a461143_8af3e79d","updated":"2017-01-30 21:59:55.000000000","message":"Done","commit_id":"9bbfc0c6f7176599aea2b9b8071e9212630e11cf"},{"author":{"_account_id":8190,"name":"Drew Thorstensen (thorst)","email":"thorst@us.ibm.com","username":"thorst"},"change_message_id":"98828f799bdac2fe2bb03753796e89d587611ea2","unresolved":false,"context_lines":[{"line_number":301,"context_line":""},{"line_number":302,"context_line":""},{"line_number":303,"context_line":"@six.add_metaclass(abc.ABCMeta)"},{"line_number":304,"context_line":"class PvmLioVifDriver(PvmVifDriver):"},{"line_number":305,"context_line":"    \"\"\"An abstract VIF driver that uses Linux I/O to host.\"\"\""},{"line_number":306,"context_line":""},{"line_number":307,"context_line":"    def get_trunk_dev_name(self, vif):"}],"source_content_type":"text/x-python","patch_set":7,"id":"3a461143_eacaab19","line":304,"range":{"start_line":304,"start_character":0,"end_line":304,"end_character":36},"updated":"2017-01-26 16:18:06.000000000","message":"So to another reviewer from nova, they\u0027re going to look at this and ask, \"Why do they have three layers of abstraction here\".\n\nWe should do a better job explaining that this is the framework that we have so that we can support additional VIF types later.\n\nWe may want to consider changing our VIF implementation to be more like we\u0027re doing with our volumes.  Maybe a vif directory...but something to consider later.","commit_id":"9bbfc0c6f7176599aea2b9b8071e9212630e11cf"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"78267b11844e0a1f7f3dc983a4ae864219c49790","unresolved":false,"context_lines":[{"line_number":301,"context_line":""},{"line_number":302,"context_line":""},{"line_number":303,"context_line":"@six.add_metaclass(abc.ABCMeta)"},{"line_number":304,"context_line":"class PvmLioVifDriver(PvmVifDriver):"},{"line_number":305,"context_line":"    \"\"\"An abstract VIF driver that uses Linux I/O to host.\"\"\""},{"line_number":306,"context_line":""},{"line_number":307,"context_line":"    def get_trunk_dev_name(self, vif):"}],"source_content_type":"text/x-python","patch_set":7,"id":"3a461143_02731e16","line":304,"range":{"start_line":304,"start_character":0,"end_line":304,"end_character":36},"in_reply_to":"3a461143_eacaab19","updated":"2017-01-27 22:36:58.000000000","message":"Yeah, probably better for now to consolidate this with the PvmOvsVifDriver.  Reduce LOC, and avoid having to explain.","commit_id":"9bbfc0c6f7176599aea2b9b8071e9212630e11cf"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"78267b11844e0a1f7f3dc983a4ae864219c49790","unresolved":false,"context_lines":[{"line_number":304,"context_line":"class PvmLioVifDriver(PvmVifDriver):"},{"line_number":305,"context_line":"    \"\"\"An abstract VIF driver that uses Linux I/O to host.\"\"\""},{"line_number":306,"context_line":""},{"line_number":307,"context_line":"    def get_trunk_dev_name(self, vif):"},{"line_number":308,"context_line":"        \"\"\"Returns the device name for the trunk adapter."},{"line_number":309,"context_line":""},{"line_number":310,"context_line":"        A given VIF in the Linux I/O model will have a trunk adapter and a"}],"source_content_type":"text/x-python","patch_set":7,"id":"3a461143_620a227b","line":307,"range":{"start_line":307,"start_character":8,"end_line":307,"end_character":26},"updated":"2017-01-27 22:36:58.000000000","message":"Make this static.  (OOT too.)","commit_id":"9bbfc0c6f7176599aea2b9b8071e9212630e11cf"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"2813ef1254e4f1929b570192640b7062bd4db903","unresolved":false,"context_lines":[{"line_number":304,"context_line":"class PvmLioVifDriver(PvmVifDriver):"},{"line_number":305,"context_line":"    \"\"\"An abstract VIF driver that uses Linux I/O to host.\"\"\""},{"line_number":306,"context_line":""},{"line_number":307,"context_line":"    def get_trunk_dev_name(self, vif):"},{"line_number":308,"context_line":"        \"\"\"Returns the device name for the trunk adapter."},{"line_number":309,"context_line":""},{"line_number":310,"context_line":"        A given VIF in the Linux I/O model will have a trunk adapter and a"}],"source_content_type":"text/x-python","patch_set":7,"id":"3a461143_f296a7ee","line":307,"range":{"start_line":307,"start_character":8,"end_line":307,"end_character":26},"in_reply_to":"3a461143_620a227b","updated":"2017-01-30 21:59:55.000000000","message":"Done and done.","commit_id":"9bbfc0c6f7176599aea2b9b8071e9212630e11cf"},{"author":{"_account_id":16710,"name":"Eric Berglund","email":"esberglu@us.ibm.com","username":"esberglu"},"change_message_id":"e125ed7342e466de3a2a83c5f5c62e684e3bd7d0","unresolved":false,"context_lines":[{"line_number":29,"context_line":"from pypowervm.wrappers import managed_system as pvm_ms"},{"line_number":30,"context_line":"from pypowervm.wrappers import network as pvm_net"},{"line_number":31,"context_line":""},{"line_number":32,"context_line":"from nova.i18n import _, _LE, _LI, _LW"},{"line_number":33,"context_line":"from nova.virt.powervm import vm"},{"line_number":34,"context_line":""},{"line_number":35,"context_line":"LOG \u003d log.getLogger(__name__)"}],"source_content_type":"text/x-python","patch_set":14,"id":"7f515b1d_8d1f17b6","line":32,"range":{"start_line":32,"start_character":0,"end_line":32,"end_character":38},"updated":"2017-09-27 14:26:53.000000000","message":"Get rid of these","commit_id":"655ca898ceb70756650a2e54a026f93a771abbf9"},{"author":{"_account_id":16710,"name":"Eric Berglund","email":"esberglu@us.ibm.com","username":"esberglu"},"change_message_id":"b5ed0614ac86e3e16ef0fb4d02c6a7204bfdaa65","unresolved":false,"context_lines":[{"line_number":29,"context_line":"from pypowervm.wrappers import managed_system as pvm_ms"},{"line_number":30,"context_line":"from pypowervm.wrappers import network as pvm_net"},{"line_number":31,"context_line":""},{"line_number":32,"context_line":"from nova.i18n import _, _LE, _LI, _LW"},{"line_number":33,"context_line":"from nova.virt.powervm import vm"},{"line_number":34,"context_line":""},{"line_number":35,"context_line":"LOG \u003d log.getLogger(__name__)"}],"source_content_type":"text/x-python","patch_set":14,"id":"7f515b1d_9fb6163e","line":32,"range":{"start_line":32,"start_character":0,"end_line":32,"end_character":38},"in_reply_to":"7f515b1d_8d1f17b6","updated":"2017-09-27 18:29:51.000000000","message":"Done","commit_id":"655ca898ceb70756650a2e54a026f93a771abbf9"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"b0469a17547cefe2c4ba47a611b5da509e16a0bd","unresolved":false,"context_lines":[{"line_number":47,"context_line":"    :param adapter: The pypowervm adapter API interface."},{"line_number":48,"context_line":"    :param host_uuid: The host system UUID."},{"line_number":49,"context_line":"    :param instance: The nova instance."},{"line_number":50,"context_line":"    :param vif: The virtual interface to from Nova."},{"line_number":51,"context_line":"    :return: The appropriate PvmVifDriver for the VIF."},{"line_number":52,"context_line":"    \"\"\""},{"line_number":53,"context_line":"    if vif.get(\u0027type\u0027) is None:"}],"source_content_type":"text/x-python","patch_set":25,"id":"3f4b6375_752c5dab","line":50,"range":{"start_line":50,"start_character":38,"end_line":50,"end_character":45},"updated":"2017-11-06 17:05:43.000000000","message":"?","commit_id":"d17c318eb2b4a22961a929f53a94e85a087e2cf8"},{"author":{"_account_id":16710,"name":"Eric Berglund","email":"esberglu@us.ibm.com","username":"esberglu"},"change_message_id":"3ffa85f520a5ccd65c0cdc0bf45d067e9a9c6896","unresolved":false,"context_lines":[{"line_number":47,"context_line":"    :param adapter: The pypowervm adapter API interface."},{"line_number":48,"context_line":"    :param host_uuid: The host system UUID."},{"line_number":49,"context_line":"    :param instance: The nova instance."},{"line_number":50,"context_line":"    :param vif: The virtual interface to from Nova."},{"line_number":51,"context_line":"    :return: The appropriate PvmVifDriver for the VIF."},{"line_number":52,"context_line":"    \"\"\""},{"line_number":53,"context_line":"    if vif.get(\u0027type\u0027) is None:"}],"source_content_type":"text/x-python","patch_set":25,"id":"1f485f77_f8cf99ad","line":50,"range":{"start_line":50,"start_character":38,"end_line":50,"end_character":45},"in_reply_to":"3f4b6375_752c5dab","updated":"2017-11-15 22:17:18.000000000","message":"Done","commit_id":"d17c318eb2b4a22961a929f53a94e85a087e2cf8"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"b0469a17547cefe2c4ba47a611b5da509e16a0bd","unresolved":false,"context_lines":[{"line_number":50,"context_line":"    :param vif: The virtual interface to from Nova."},{"line_number":51,"context_line":"    :return: The appropriate PvmVifDriver for the VIF."},{"line_number":52,"context_line":"    \"\"\""},{"line_number":53,"context_line":"    if vif.get(\u0027type\u0027) is None:"},{"line_number":54,"context_line":"        raise exception.VirtualInterfacePlugException("},{"line_number":55,"context_line":"            \"vif_type parameter must be present for this vif_driver \""},{"line_number":56,"context_line":"            \"implementation.\")"}],"source_content_type":"text/x-python","patch_set":25,"id":"3f4b6375_b8c76c96","line":53,"updated":"2017-11-06 17:05:43.000000000","message":"Could consolidate this condition with the one at L63.\n\n if vif.get(\u0027type\u0027) !\u003d \u0027ovs\u0027:\n     raise exception.VirtualInterfacePlugException(\n         _(\"PowerVM only supports the OVS VIF type.\"))","commit_id":"d17c318eb2b4a22961a929f53a94e85a087e2cf8"},{"author":{"_account_id":16710,"name":"Eric Berglund","email":"esberglu@us.ibm.com","username":"esberglu"},"change_message_id":"3ffa85f520a5ccd65c0cdc0bf45d067e9a9c6896","unresolved":false,"context_lines":[{"line_number":50,"context_line":"    :param vif: The virtual interface to from Nova."},{"line_number":51,"context_line":"    :return: The appropriate PvmVifDriver for the VIF."},{"line_number":52,"context_line":"    \"\"\""},{"line_number":53,"context_line":"    if vif.get(\u0027type\u0027) is None:"},{"line_number":54,"context_line":"        raise exception.VirtualInterfacePlugException("},{"line_number":55,"context_line":"            \"vif_type parameter must be present for this vif_driver \""},{"line_number":56,"context_line":"            \"implementation.\")"}],"source_content_type":"text/x-python","patch_set":25,"id":"1f485f77_187155aa","line":53,"in_reply_to":"3f4b6375_b8c76c96","updated":"2017-11-15 22:17:18.000000000","message":"Done","commit_id":"d17c318eb2b4a22961a929f53a94e85a087e2cf8"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"b0469a17547cefe2c4ba47a611b5da509e16a0bd","unresolved":false,"context_lines":[{"line_number":52,"context_line":"    \"\"\""},{"line_number":53,"context_line":"    if vif.get(\u0027type\u0027) is None:"},{"line_number":54,"context_line":"        raise exception.VirtualInterfacePlugException("},{"line_number":55,"context_line":"            \"vif_type parameter must be present for this vif_driver \""},{"line_number":56,"context_line":"            \"implementation.\")"},{"line_number":57,"context_line":""},{"line_number":58,"context_line":"    # Check the type to the implementations"},{"line_number":59,"context_line":"    if vif[\u0027type\u0027] \u003d\u003d \u0027ovs\u0027:"}],"source_content_type":"text/x-python","patch_set":25,"id":"3f4b6375_d8a58804","line":56,"range":{"start_line":55,"start_character":12,"end_line":56,"end_character":29},"updated":"2017-11-06 17:05:43.000000000","message":"This needs to be translated.  It would also be appropriate to use the message\u003d key explicitly.","commit_id":"d17c318eb2b4a22961a929f53a94e85a087e2cf8"},{"author":{"_account_id":16710,"name":"Eric Berglund","email":"esberglu@us.ibm.com","username":"esberglu"},"change_message_id":"3ffa85f520a5ccd65c0cdc0bf45d067e9a9c6896","unresolved":false,"context_lines":[{"line_number":52,"context_line":"    \"\"\""},{"line_number":53,"context_line":"    if vif.get(\u0027type\u0027) is None:"},{"line_number":54,"context_line":"        raise exception.VirtualInterfacePlugException("},{"line_number":55,"context_line":"            \"vif_type parameter must be present for this vif_driver \""},{"line_number":56,"context_line":"            \"implementation.\")"},{"line_number":57,"context_line":""},{"line_number":58,"context_line":"    # Check the type to the implementations"},{"line_number":59,"context_line":"    if vif[\u0027type\u0027] \u003d\u003d \u0027ovs\u0027:"}],"source_content_type":"text/x-python","patch_set":25,"id":"1f485f77_f8a8b9db","line":56,"range":{"start_line":55,"start_character":12,"end_line":56,"end_character":29},"in_reply_to":"3f4b6375_d8a58804","updated":"2017-11-15 22:17:18.000000000","message":"Done","commit_id":"d17c318eb2b4a22961a929f53a94e85a087e2cf8"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"b0469a17547cefe2c4ba47a611b5da509e16a0bd","unresolved":false,"context_lines":[{"line_number":61,"context_line":""},{"line_number":62,"context_line":"    # No matching implementation, raise error."},{"line_number":63,"context_line":"    raise exception.VirtualInterfacePlugException("},{"line_number":64,"context_line":"        \"Unable to find appropriate PowerVM VIF Driver for VIF type %s on \""},{"line_number":65,"context_line":"        \"instance.\", vif[\u0027type\u0027], instance\u003dinstance)"},{"line_number":66,"context_line":""},{"line_number":67,"context_line":""},{"line_number":68,"context_line":"def plug(adapter, host_uuid, instance, vif, new_vif\u003dTrue):"}],"source_content_type":"text/x-python","patch_set":25,"id":"3f4b6375_389dbcbb","line":65,"range":{"start_line":64,"start_character":8,"end_line":65,"end_character":32},"updated":"2017-11-06 17:05:43.000000000","message":"This needs to be translated and pre-interpolated.  It would also be appropriate to use the message\u003d key explicitly.","commit_id":"d17c318eb2b4a22961a929f53a94e85a087e2cf8"},{"author":{"_account_id":16710,"name":"Eric Berglund","email":"esberglu@us.ibm.com","username":"esberglu"},"change_message_id":"3ffa85f520a5ccd65c0cdc0bf45d067e9a9c6896","unresolved":false,"context_lines":[{"line_number":61,"context_line":""},{"line_number":62,"context_line":"    # No matching implementation, raise error."},{"line_number":63,"context_line":"    raise exception.VirtualInterfacePlugException("},{"line_number":64,"context_line":"        \"Unable to find appropriate PowerVM VIF Driver for VIF type %s on \""},{"line_number":65,"context_line":"        \"instance.\", vif[\u0027type\u0027], instance\u003dinstance)"},{"line_number":66,"context_line":""},{"line_number":67,"context_line":""},{"line_number":68,"context_line":"def plug(adapter, host_uuid, instance, vif, new_vif\u003dTrue):"}],"source_content_type":"text/x-python","patch_set":25,"id":"1f485f77_d8af3de1","line":65,"range":{"start_line":64,"start_character":8,"end_line":65,"end_character":32},"in_reply_to":"3f4b6375_389dbcbb","updated":"2017-11-15 22:17:18.000000000","message":"Done","commit_id":"d17c318eb2b4a22961a929f53a94e85a087e2cf8"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"b0469a17547cefe2c4ba47a611b5da509e16a0bd","unresolved":false,"context_lines":[{"line_number":80,"context_line":"             network.  None if the vnet was not created."},{"line_number":81,"context_line":"    \"\"\""},{"line_number":82,"context_line":"    vif_drv \u003d _build_vif_driver(adapter, host_uuid, instance, vif)"},{"line_number":83,"context_line":""},{"line_number":84,"context_line":"    # Invoke the plug"},{"line_number":85,"context_line":"    try:"},{"line_number":86,"context_line":"        return vif_drv.plug(vif, new_vif\u003dnew_vif)"},{"line_number":87,"context_line":"    except pvm_ex.HttpError as he:"}],"source_content_type":"text/x-python","patch_set":25,"id":"3f4b6375_586638bd","line":84,"range":{"start_line":83,"start_character":0,"end_line":84,"end_character":21},"updated":"2017-11-06 17:05:43.000000000","message":"not necessary.","commit_id":"d17c318eb2b4a22961a929f53a94e85a087e2cf8"},{"author":{"_account_id":16710,"name":"Eric Berglund","email":"esberglu@us.ibm.com","username":"esberglu"},"change_message_id":"3ffa85f520a5ccd65c0cdc0bf45d067e9a9c6896","unresolved":false,"context_lines":[{"line_number":80,"context_line":"             network.  None if the vnet was not created."},{"line_number":81,"context_line":"    \"\"\""},{"line_number":82,"context_line":"    vif_drv \u003d _build_vif_driver(adapter, host_uuid, instance, vif)"},{"line_number":83,"context_line":""},{"line_number":84,"context_line":"    # Invoke the plug"},{"line_number":85,"context_line":"    try:"},{"line_number":86,"context_line":"        return vif_drv.plug(vif, new_vif\u003dnew_vif)"},{"line_number":87,"context_line":"    except pvm_ex.HttpError as he:"}],"source_content_type":"text/x-python","patch_set":25,"id":"1f485f77_b56fec90","line":84,"range":{"start_line":83,"start_character":0,"end_line":84,"end_character":21},"in_reply_to":"3f4b6375_586638bd","updated":"2017-11-15 22:17:18.000000000","message":"Done","commit_id":"d17c318eb2b4a22961a929f53a94e85a087e2cf8"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"b0469a17547cefe2c4ba47a611b5da509e16a0bd","unresolved":false,"context_lines":[{"line_number":85,"context_line":"    try:"},{"line_number":86,"context_line":"        return vif_drv.plug(vif, new_vif\u003dnew_vif)"},{"line_number":87,"context_line":"    except pvm_ex.HttpError as he:"},{"line_number":88,"context_line":"        # Log the message constructed by HttpError"},{"line_number":89,"context_line":"        LOG.exception(he.args[0], instance\u003dinstance)"},{"line_number":90,"context_line":"        raise exception.VirtualInterfacePlugException()"},{"line_number":91,"context_line":"    # Other exceptions are (hopefully) custom VirtualInterfacePlugException"}],"source_content_type":"text/x-python","patch_set":25,"id":"3f4b6375_f80cc4ec","line":88,"range":{"start_line":88,"start_character":8,"end_line":88,"end_character":50},"updated":"2017-11-06 17:05:43.000000000","message":"Not necessary.","commit_id":"d17c318eb2b4a22961a929f53a94e85a087e2cf8"},{"author":{"_account_id":16710,"name":"Eric Berglund","email":"esberglu@us.ibm.com","username":"esberglu"},"change_message_id":"3ffa85f520a5ccd65c0cdc0bf45d067e9a9c6896","unresolved":false,"context_lines":[{"line_number":85,"context_line":"    try:"},{"line_number":86,"context_line":"        return vif_drv.plug(vif, new_vif\u003dnew_vif)"},{"line_number":87,"context_line":"    except pvm_ex.HttpError as he:"},{"line_number":88,"context_line":"        # Log the message constructed by HttpError"},{"line_number":89,"context_line":"        LOG.exception(he.args[0], instance\u003dinstance)"},{"line_number":90,"context_line":"        raise exception.VirtualInterfacePlugException()"},{"line_number":91,"context_line":"    # Other exceptions are (hopefully) custom VirtualInterfacePlugException"}],"source_content_type":"text/x-python","patch_set":25,"id":"1f485f77_d59828c1","line":88,"range":{"start_line":88,"start_character":8,"end_line":88,"end_character":50},"in_reply_to":"3f4b6375_f80cc4ec","updated":"2017-11-15 22:17:18.000000000","message":"Done","commit_id":"d17c318eb2b4a22961a929f53a94e85a087e2cf8"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"b0469a17547cefe2c4ba47a611b5da509e16a0bd","unresolved":false,"context_lines":[{"line_number":86,"context_line":"        return vif_drv.plug(vif, new_vif\u003dnew_vif)"},{"line_number":87,"context_line":"    except pvm_ex.HttpError as he:"},{"line_number":88,"context_line":"        # Log the message constructed by HttpError"},{"line_number":89,"context_line":"        LOG.exception(he.args[0], instance\u003dinstance)"},{"line_number":90,"context_line":"        raise exception.VirtualInterfacePlugException()"},{"line_number":91,"context_line":"    # Other exceptions are (hopefully) custom VirtualInterfacePlugException"},{"line_number":92,"context_line":"    # generated lower in the call stack."}],"source_content_type":"text/x-python","patch_set":25,"id":"3f4b6375_d85a28f0","line":89,"range":{"start_line":89,"start_character":22,"end_line":89,"end_character":32},"updated":"2017-11-06 17:05:43.000000000","message":"Per prior work in this area: this should be a real message; LOG.exception already logs the one from the caught exception.","commit_id":"d17c318eb2b4a22961a929f53a94e85a087e2cf8"},{"author":{"_account_id":16710,"name":"Eric Berglund","email":"esberglu@us.ibm.com","username":"esberglu"},"change_message_id":"3ffa85f520a5ccd65c0cdc0bf45d067e9a9c6896","unresolved":false,"context_lines":[{"line_number":86,"context_line":"        return vif_drv.plug(vif, new_vif\u003dnew_vif)"},{"line_number":87,"context_line":"    except pvm_ex.HttpError as he:"},{"line_number":88,"context_line":"        # Log the message constructed by HttpError"},{"line_number":89,"context_line":"        LOG.exception(he.args[0], instance\u003dinstance)"},{"line_number":90,"context_line":"        raise exception.VirtualInterfacePlugException()"},{"line_number":91,"context_line":"    # Other exceptions are (hopefully) custom VirtualInterfacePlugException"},{"line_number":92,"context_line":"    # generated lower in the call stack."}],"source_content_type":"text/x-python","patch_set":25,"id":"1f485f77_75697489","line":89,"range":{"start_line":89,"start_character":22,"end_line":89,"end_character":32},"in_reply_to":"3f4b6375_d85a28f0","updated":"2017-11-15 22:17:18.000000000","message":"Done","commit_id":"d17c318eb2b4a22961a929f53a94e85a087e2cf8"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"b0469a17547cefe2c4ba47a611b5da509e16a0bd","unresolved":false,"context_lines":[{"line_number":107,"context_line":"    try:"},{"line_number":108,"context_line":"        vif_drv.unplug(vif, cna_w_list\u003dcna_w_list)"},{"line_number":109,"context_line":"    except pvm_ex.HttpError as he:"},{"line_number":110,"context_line":"        # Log the message constructed by HttpError"},{"line_number":111,"context_line":"        LOG.exception(he.args[0], instance\u003dinstance)"},{"line_number":112,"context_line":"        raise exception.VirtualInterfaceUnplugException(reason\u003dhe.args[0])"},{"line_number":113,"context_line":""}],"source_content_type":"text/x-python","patch_set":25,"id":"3f4b6375_d80fc8dd","line":110,"range":{"start_line":110,"start_character":8,"end_line":110,"end_character":50},"updated":"2017-11-06 17:05:43.000000000","message":"Not necessary.","commit_id":"d17c318eb2b4a22961a929f53a94e85a087e2cf8"},{"author":{"_account_id":16710,"name":"Eric Berglund","email":"esberglu@us.ibm.com","username":"esberglu"},"change_message_id":"3ffa85f520a5ccd65c0cdc0bf45d067e9a9c6896","unresolved":false,"context_lines":[{"line_number":107,"context_line":"    try:"},{"line_number":108,"context_line":"        vif_drv.unplug(vif, cna_w_list\u003dcna_w_list)"},{"line_number":109,"context_line":"    except pvm_ex.HttpError as he:"},{"line_number":110,"context_line":"        # Log the message constructed by HttpError"},{"line_number":111,"context_line":"        LOG.exception(he.args[0], instance\u003dinstance)"},{"line_number":112,"context_line":"        raise exception.VirtualInterfaceUnplugException(reason\u003dhe.args[0])"},{"line_number":113,"context_line":""}],"source_content_type":"text/x-python","patch_set":25,"id":"1f485f77_155b60f7","line":110,"range":{"start_line":110,"start_character":8,"end_line":110,"end_character":50},"in_reply_to":"3f4b6375_d80fc8dd","updated":"2017-11-15 22:17:18.000000000","message":"Done","commit_id":"d17c318eb2b4a22961a929f53a94e85a087e2cf8"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"b0469a17547cefe2c4ba47a611b5da509e16a0bd","unresolved":false,"context_lines":[{"line_number":108,"context_line":"        vif_drv.unplug(vif, cna_w_list\u003dcna_w_list)"},{"line_number":109,"context_line":"    except pvm_ex.HttpError as he:"},{"line_number":110,"context_line":"        # Log the message constructed by HttpError"},{"line_number":111,"context_line":"        LOG.exception(he.args[0], instance\u003dinstance)"},{"line_number":112,"context_line":"        raise exception.VirtualInterfaceUnplugException(reason\u003dhe.args[0])"},{"line_number":113,"context_line":""},{"line_number":114,"context_line":""}],"source_content_type":"text/x-python","patch_set":25,"id":"3f4b6375_98703074","line":111,"range":{"start_line":111,"start_character":22,"end_line":111,"end_character":33},"updated":"2017-11-06 17:05:43.000000000","message":"ditto above","commit_id":"d17c318eb2b4a22961a929f53a94e85a087e2cf8"},{"author":{"_account_id":16710,"name":"Eric Berglund","email":"esberglu@us.ibm.com","username":"esberglu"},"change_message_id":"3ffa85f520a5ccd65c0cdc0bf45d067e9a9c6896","unresolved":false,"context_lines":[{"line_number":108,"context_line":"        vif_drv.unplug(vif, cna_w_list\u003dcna_w_list)"},{"line_number":109,"context_line":"    except pvm_ex.HttpError as he:"},{"line_number":110,"context_line":"        # Log the message constructed by HttpError"},{"line_number":111,"context_line":"        LOG.exception(he.args[0], instance\u003dinstance)"},{"line_number":112,"context_line":"        raise exception.VirtualInterfaceUnplugException(reason\u003dhe.args[0])"},{"line_number":113,"context_line":""},{"line_number":114,"context_line":""}],"source_content_type":"text/x-python","patch_set":25,"id":"1f485f77_f5120409","line":111,"range":{"start_line":111,"start_character":22,"end_line":111,"end_character":33},"in_reply_to":"3f4b6375_98703074","updated":"2017-11-15 22:17:18.000000000","message":"Done","commit_id":"d17c318eb2b4a22961a929f53a94e85a087e2cf8"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"b0469a17547cefe2c4ba47a611b5da509e16a0bd","unresolved":false,"context_lines":[{"line_number":112,"context_line":"        raise exception.VirtualInterfaceUnplugException(reason\u003dhe.args[0])"},{"line_number":113,"context_line":""},{"line_number":114,"context_line":""},{"line_number":115,"context_line":"def get_secure_rmc_vswitch(adapter, host_uuid):"},{"line_number":116,"context_line":"    \"\"\"Returns the vSwitch that is used for secure RMC."},{"line_number":117,"context_line":""},{"line_number":118,"context_line":"    :param adapter: The pypowervm adapter API interface."},{"line_number":119,"context_line":"    :param host_uuid: The host system UUID."},{"line_number":120,"context_line":"    :return: The wrapper for the secure RMC vSwitch.  If it does not exist"},{"line_number":121,"context_line":"             on the system, None is returned."},{"line_number":122,"context_line":"    \"\"\""},{"line_number":123,"context_line":"    vswitches \u003d pvm_net.VSwitch.search("},{"line_number":124,"context_line":"        adapter, parent_type\u003dpvm_ms.System.schema_type,"},{"line_number":125,"context_line":"        parent_uuid\u003dhost_uuid, name\u003dSECURE_RMC_VSWITCH)"},{"line_number":126,"context_line":"    if len(vswitches) \u003d\u003d 1:"},{"line_number":127,"context_line":"        return vswitches[0]"},{"line_number":128,"context_line":"    return None"},{"line_number":129,"context_line":""},{"line_number":130,"context_line":""},{"line_number":131,"context_line":"def plug_secure_rmc_vif(adapter, instance, host_uuid):"}],"source_content_type":"text/x-python","patch_set":25,"id":"3f4b6375_98ccb089","line":128,"range":{"start_line":115,"start_character":0,"end_line":128,"end_character":15},"updated":"2017-11-06 17:05:43.000000000","message":"This is only used once; could be inlined.","commit_id":"d17c318eb2b4a22961a929f53a94e85a087e2cf8"},{"author":{"_account_id":16710,"name":"Eric Berglund","email":"esberglu@us.ibm.com","username":"esberglu"},"change_message_id":"3ffa85f520a5ccd65c0cdc0bf45d067e9a9c6896","unresolved":false,"context_lines":[{"line_number":112,"context_line":"        raise exception.VirtualInterfaceUnplugException(reason\u003dhe.args[0])"},{"line_number":113,"context_line":""},{"line_number":114,"context_line":""},{"line_number":115,"context_line":"def get_secure_rmc_vswitch(adapter, host_uuid):"},{"line_number":116,"context_line":"    \"\"\"Returns the vSwitch that is used for secure RMC."},{"line_number":117,"context_line":""},{"line_number":118,"context_line":"    :param adapter: The pypowervm adapter API interface."},{"line_number":119,"context_line":"    :param host_uuid: The host system UUID."},{"line_number":120,"context_line":"    :return: The wrapper for the secure RMC vSwitch.  If it does not exist"},{"line_number":121,"context_line":"             on the system, None is returned."},{"line_number":122,"context_line":"    \"\"\""},{"line_number":123,"context_line":"    vswitches \u003d pvm_net.VSwitch.search("},{"line_number":124,"context_line":"        adapter, parent_type\u003dpvm_ms.System.schema_type,"},{"line_number":125,"context_line":"        parent_uuid\u003dhost_uuid, name\u003dSECURE_RMC_VSWITCH)"},{"line_number":126,"context_line":"    if len(vswitches) \u003d\u003d 1:"},{"line_number":127,"context_line":"        return vswitches[0]"},{"line_number":128,"context_line":"    return None"},{"line_number":129,"context_line":""},{"line_number":130,"context_line":""},{"line_number":131,"context_line":"def plug_secure_rmc_vif(adapter, instance, host_uuid):"}],"source_content_type":"text/x-python","patch_set":25,"id":"1f485f77_e16d7dcc","line":128,"range":{"start_line":115,"start_character":0,"end_line":128,"end_character":15},"in_reply_to":"3f4b6375_98ccb089","updated":"2017-11-15 22:17:18.000000000","message":"Done","commit_id":"d17c318eb2b4a22961a929f53a94e85a087e2cf8"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"b0469a17547cefe2c4ba47a611b5da509e16a0bd","unresolved":false,"context_lines":[{"line_number":128,"context_line":"    return None"},{"line_number":129,"context_line":""},{"line_number":130,"context_line":""},{"line_number":131,"context_line":"def plug_secure_rmc_vif(adapter, instance, host_uuid):"},{"line_number":132,"context_line":"    \"\"\"Creates the Secure RMC Network Adapter on the VM."},{"line_number":133,"context_line":""},{"line_number":134,"context_line":"    :param adapter: The pypowervm adapter API interface."},{"line_number":135,"context_line":"    :param instance: The nova instance to create the VIF against."},{"line_number":136,"context_line":"    :param host_uuid: The host system UUID."},{"line_number":137,"context_line":"    :return: The created network adapter wrapper."},{"line_number":138,"context_line":"    \"\"\""},{"line_number":139,"context_line":"    # Create the adapter."},{"line_number":140,"context_line":"    lpar_uuid \u003d vm.get_pvm_uuid(instance)"},{"line_number":141,"context_line":"    return pvm_cna.crt_cna(adapter, host_uuid, lpar_uuid, SECURE_RMC_VLAN,"},{"line_number":142,"context_line":"                           vswitch\u003dSECURE_RMC_VSWITCH, crt_vswitch\u003dTrue)"},{"line_number":143,"context_line":""},{"line_number":144,"context_line":""},{"line_number":145,"context_line":"def _get_trunk_dev_name(vif):"}],"source_content_type":"text/x-python","patch_set":25,"id":"3f4b6375_58975846","line":142,"range":{"start_line":131,"start_character":0,"end_line":142,"end_character":72},"updated":"2017-11-06 17:05:43.000000000","message":"Ditto.","commit_id":"d17c318eb2b4a22961a929f53a94e85a087e2cf8"},{"author":{"_account_id":16710,"name":"Eric Berglund","email":"esberglu@us.ibm.com","username":"esberglu"},"change_message_id":"3ffa85f520a5ccd65c0cdc0bf45d067e9a9c6896","unresolved":false,"context_lines":[{"line_number":128,"context_line":"    return None"},{"line_number":129,"context_line":""},{"line_number":130,"context_line":""},{"line_number":131,"context_line":"def plug_secure_rmc_vif(adapter, instance, host_uuid):"},{"line_number":132,"context_line":"    \"\"\"Creates the Secure RMC Network Adapter on the VM."},{"line_number":133,"context_line":""},{"line_number":134,"context_line":"    :param adapter: The pypowervm adapter API interface."},{"line_number":135,"context_line":"    :param instance: The nova instance to create the VIF against."},{"line_number":136,"context_line":"    :param host_uuid: The host system UUID."},{"line_number":137,"context_line":"    :return: The created network adapter wrapper."},{"line_number":138,"context_line":"    \"\"\""},{"line_number":139,"context_line":"    # Create the adapter."},{"line_number":140,"context_line":"    lpar_uuid \u003d vm.get_pvm_uuid(instance)"},{"line_number":141,"context_line":"    return pvm_cna.crt_cna(adapter, host_uuid, lpar_uuid, SECURE_RMC_VLAN,"},{"line_number":142,"context_line":"                           vswitch\u003dSECURE_RMC_VSWITCH, crt_vswitch\u003dTrue)"},{"line_number":143,"context_line":""},{"line_number":144,"context_line":""},{"line_number":145,"context_line":"def _get_trunk_dev_name(vif):"}],"source_content_type":"text/x-python","patch_set":25,"id":"1f485f77_c17281ad","line":142,"range":{"start_line":131,"start_character":0,"end_line":142,"end_character":72},"in_reply_to":"3f4b6375_58975846","updated":"2017-11-15 22:17:18.000000000","message":"Done","commit_id":"d17c318eb2b4a22961a929f53a94e85a087e2cf8"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"b0469a17547cefe2c4ba47a611b5da509e16a0bd","unresolved":false,"context_lines":[{"line_number":142,"context_line":"                           vswitch\u003dSECURE_RMC_VSWITCH, crt_vswitch\u003dTrue)"},{"line_number":143,"context_line":""},{"line_number":144,"context_line":""},{"line_number":145,"context_line":"def _get_trunk_dev_name(vif):"},{"line_number":146,"context_line":"    \"\"\"Returns the device name for the trunk adapter."},{"line_number":147,"context_line":""},{"line_number":148,"context_line":"    A given VIF in the Linux I/O model will have a trunk adapter and a"},{"line_number":149,"context_line":"    client adapter.  This will return the trunk adapter\u0027s name as it"},{"line_number":150,"context_line":"    will appear on the management VM."},{"line_number":151,"context_line":""},{"line_number":152,"context_line":"    :param vif: The nova network interface"},{"line_number":153,"context_line":"    :return: The device name."},{"line_number":154,"context_line":"    \"\"\""},{"line_number":155,"context_line":"    if \u0027devname\u0027 in vif:"},{"line_number":156,"context_line":"        return vif[\u0027devname\u0027]"},{"line_number":157,"context_line":"    return (\"nic\" + vif[\u0027id\u0027])[:network_model.NIC_NAME_LEN]"},{"line_number":158,"context_line":""},{"line_number":159,"context_line":""},{"line_number":160,"context_line":"@six.add_metaclass(abc.ABCMeta)"}],"source_content_type":"text/x-python","patch_set":25,"id":"3f4b6375_388c9c34","line":157,"range":{"start_line":145,"start_character":0,"end_line":157,"end_character":59},"updated":"2017-11-06 17:05:43.000000000","message":"Ditto.","commit_id":"d17c318eb2b4a22961a929f53a94e85a087e2cf8"},{"author":{"_account_id":16710,"name":"Eric Berglund","email":"esberglu@us.ibm.com","username":"esberglu"},"change_message_id":"3ffa85f520a5ccd65c0cdc0bf45d067e9a9c6896","unresolved":false,"context_lines":[{"line_number":142,"context_line":"                           vswitch\u003dSECURE_RMC_VSWITCH, crt_vswitch\u003dTrue)"},{"line_number":143,"context_line":""},{"line_number":144,"context_line":""},{"line_number":145,"context_line":"def _get_trunk_dev_name(vif):"},{"line_number":146,"context_line":"    \"\"\"Returns the device name for the trunk adapter."},{"line_number":147,"context_line":""},{"line_number":148,"context_line":"    A given VIF in the Linux I/O model will have a trunk adapter and a"},{"line_number":149,"context_line":"    client adapter.  This will return the trunk adapter\u0027s name as it"},{"line_number":150,"context_line":"    will appear on the management VM."},{"line_number":151,"context_line":""},{"line_number":152,"context_line":"    :param vif: The nova network interface"},{"line_number":153,"context_line":"    :return: The device name."},{"line_number":154,"context_line":"    \"\"\""},{"line_number":155,"context_line":"    if \u0027devname\u0027 in vif:"},{"line_number":156,"context_line":"        return vif[\u0027devname\u0027]"},{"line_number":157,"context_line":"    return (\"nic\" + vif[\u0027id\u0027])[:network_model.NIC_NAME_LEN]"},{"line_number":158,"context_line":""},{"line_number":159,"context_line":""},{"line_number":160,"context_line":"@six.add_metaclass(abc.ABCMeta)"}],"source_content_type":"text/x-python","patch_set":25,"id":"1f485f77_06966f40","line":157,"range":{"start_line":145,"start_character":0,"end_line":157,"end_character":59},"in_reply_to":"3f4b6375_388c9c34","updated":"2017-11-15 22:17:18.000000000","message":"Done","commit_id":"d17c318eb2b4a22961a929f53a94e85a087e2cf8"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"b0469a17547cefe2c4ba47a611b5da509e16a0bd","unresolved":false,"context_lines":[{"line_number":158,"context_line":""},{"line_number":159,"context_line":""},{"line_number":160,"context_line":"@six.add_metaclass(abc.ABCMeta)"},{"line_number":161,"context_line":"class PvmVifDriver(object):"},{"line_number":162,"context_line":"    \"\"\"Represents an abstract class for a PowerVM Vif Driver."},{"line_number":163,"context_line":""},{"line_number":164,"context_line":"    A VIF Driver understands a given virtual interface type (network).  It"}],"source_content_type":"text/x-python","patch_set":25,"id":"3f4b6375_188fa02a","line":161,"range":{"start_line":161,"start_character":6,"end_line":161,"end_character":18},"updated":"2017-11-06 17:05:43.000000000","message":"Let\u0027s fold this in.  We can split it out later if/when we support a second VIF driver.","commit_id":"d17c318eb2b4a22961a929f53a94e85a087e2cf8"},{"author":{"_account_id":16710,"name":"Eric Berglund","email":"esberglu@us.ibm.com","username":"esberglu"},"change_message_id":"3ffa85f520a5ccd65c0cdc0bf45d067e9a9c6896","unresolved":false,"context_lines":[{"line_number":158,"context_line":""},{"line_number":159,"context_line":""},{"line_number":160,"context_line":"@six.add_metaclass(abc.ABCMeta)"},{"line_number":161,"context_line":"class PvmVifDriver(object):"},{"line_number":162,"context_line":"    \"\"\"Represents an abstract class for a PowerVM Vif Driver."},{"line_number":163,"context_line":""},{"line_number":164,"context_line":"    A VIF Driver understands a given virtual interface type (network).  It"}],"source_content_type":"text/x-python","patch_set":25,"id":"1f485f77_a16e652c","line":161,"range":{"start_line":161,"start_character":6,"end_line":161,"end_character":18},"in_reply_to":"3f4b6375_188fa02a","updated":"2017-11-15 22:17:18.000000000","message":"Done","commit_id":"d17c318eb2b4a22961a929f53a94e85a087e2cf8"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"b0469a17547cefe2c4ba47a611b5da509e16a0bd","unresolved":false,"context_lines":[{"line_number":226,"context_line":"        return cna_w"},{"line_number":227,"context_line":""},{"line_number":228,"context_line":"    @staticmethod"},{"line_number":229,"context_line":"    def _find_cna_for_vif(cna_w_list, vif):"},{"line_number":230,"context_line":"        \"\"\"Finds the PowerVM CNA for a given Nova VIF."},{"line_number":231,"context_line":""},{"line_number":232,"context_line":"        :param cna_w_list: The list of Client Network Adapter wrappers from"}],"source_content_type":"text/x-python","patch_set":25,"id":"3f4b6375_387b7cf5","line":229,"range":{"start_line":229,"start_character":0,"end_line":229,"end_character":43},"updated":"2017-11-06 17:05:43.000000000","message":"Should be able to inline this guy too, once you fold the classes together.","commit_id":"d17c318eb2b4a22961a929f53a94e85a087e2cf8"},{"author":{"_account_id":16710,"name":"Eric Berglund","email":"esberglu@us.ibm.com","username":"esberglu"},"change_message_id":"3ffa85f520a5ccd65c0cdc0bf45d067e9a9c6896","unresolved":false,"context_lines":[{"line_number":226,"context_line":"        return cna_w"},{"line_number":227,"context_line":""},{"line_number":228,"context_line":"    @staticmethod"},{"line_number":229,"context_line":"    def _find_cna_for_vif(cna_w_list, vif):"},{"line_number":230,"context_line":"        \"\"\"Finds the PowerVM CNA for a given Nova VIF."},{"line_number":231,"context_line":""},{"line_number":232,"context_line":"        :param cna_w_list: The list of Client Network Adapter wrappers from"}],"source_content_type":"text/x-python","patch_set":25,"id":"1f485f77_211cb576","line":229,"range":{"start_line":229,"start_character":0,"end_line":229,"end_character":43},"in_reply_to":"3f4b6375_387b7cf5","updated":"2017-11-15 22:17:18.000000000","message":"Done","commit_id":"d17c318eb2b4a22961a929f53a94e85a087e2cf8"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"b0469a17547cefe2c4ba47a611b5da509e16a0bd","unresolved":false,"context_lines":[{"line_number":242,"context_line":"        return None"},{"line_number":243,"context_line":""},{"line_number":244,"context_line":""},{"line_number":245,"context_line":"class PvmMetaAttrs(list):"},{"line_number":246,"context_line":"    \"\"\"Represents meta attributes for a PowerVM Vif Driver."},{"line_number":247,"context_line":"    \"\"\""},{"line_number":248,"context_line":""},{"line_number":249,"context_line":"    def __init__(self, vif, instance):"},{"line_number":250,"context_line":"        \"\"\"Initializes meta attributes."},{"line_number":251,"context_line":"        :param vif: The virtual interface for the instance"},{"line_number":252,"context_line":"        :param instance: The nova instance that the vif action will be run"},{"line_number":253,"context_line":"                         against."},{"line_number":254,"context_line":"        \"\"\""},{"line_number":255,"context_line":"        self.append(\u0027iface-id\u003d%s\u0027 % (vif.get(\u0027ovs_interfaceid\u0027) or vif[\u0027id\u0027]))"},{"line_number":256,"context_line":"        self.append(\u0027iface-status\u003dactive\u0027)"},{"line_number":257,"context_line":"        self.append(\u0027attached-mac\u003d%s\u0027 % vif[\u0027address\u0027])"},{"line_number":258,"context_line":"        self.append(\u0027vm-uuid\u003d%s\u0027 % instance.uuid)"},{"line_number":259,"context_line":""},{"line_number":260,"context_line":"    def __str__(self):"},{"line_number":261,"context_line":"        return \u0027,\u0027.join(self)"},{"line_number":262,"context_line":""},{"line_number":263,"context_line":""},{"line_number":264,"context_line":"class PvmOvsVifDriver(PvmVifDriver):"}],"source_content_type":"text/x-python","patch_set":25,"id":"3f4b6375_38081c90","line":261,"range":{"start_line":245,"start_character":0,"end_line":261,"end_character":29},"updated":"2017-11-06 17:05:43.000000000","message":"This seems a little heavy for a whole class.  How \u0027bout a method?\n\n def _ovs_meta_attrs(vif, instance):\n     return \u0027,\u0027.join([\n         \u0027iface-id\u003d%s\u0027 % (vif.get(\u0027ovs_interfaceid\u0027) or vif[\u0027id\u0027]),\n         \u0027iface-status\u003dactive\u0027,\n         \u0027attached-mac\u003d%s\u0027 % vif[\u0027address\u0027],\n         \u0027vm-uuid\u003d%s\u0027 % instance.uuid])\n\nOr even inline it at L297.","commit_id":"d17c318eb2b4a22961a929f53a94e85a087e2cf8"},{"author":{"_account_id":16710,"name":"Eric Berglund","email":"esberglu@us.ibm.com","username":"esberglu"},"change_message_id":"3ffa85f520a5ccd65c0cdc0bf45d067e9a9c6896","unresolved":false,"context_lines":[{"line_number":242,"context_line":"        return None"},{"line_number":243,"context_line":""},{"line_number":244,"context_line":""},{"line_number":245,"context_line":"class PvmMetaAttrs(list):"},{"line_number":246,"context_line":"    \"\"\"Represents meta attributes for a PowerVM Vif Driver."},{"line_number":247,"context_line":"    \"\"\""},{"line_number":248,"context_line":""},{"line_number":249,"context_line":"    def __init__(self, vif, instance):"},{"line_number":250,"context_line":"        \"\"\"Initializes meta attributes."},{"line_number":251,"context_line":"        :param vif: The virtual interface for the instance"},{"line_number":252,"context_line":"        :param instance: The nova instance that the vif action will be run"},{"line_number":253,"context_line":"                         against."},{"line_number":254,"context_line":"        \"\"\""},{"line_number":255,"context_line":"        self.append(\u0027iface-id\u003d%s\u0027 % (vif.get(\u0027ovs_interfaceid\u0027) or vif[\u0027id\u0027]))"},{"line_number":256,"context_line":"        self.append(\u0027iface-status\u003dactive\u0027)"},{"line_number":257,"context_line":"        self.append(\u0027attached-mac\u003d%s\u0027 % vif[\u0027address\u0027])"},{"line_number":258,"context_line":"        self.append(\u0027vm-uuid\u003d%s\u0027 % instance.uuid)"},{"line_number":259,"context_line":""},{"line_number":260,"context_line":"    def __str__(self):"},{"line_number":261,"context_line":"        return \u0027,\u0027.join(self)"},{"line_number":262,"context_line":""},{"line_number":263,"context_line":""},{"line_number":264,"context_line":"class PvmOvsVifDriver(PvmVifDriver):"}],"source_content_type":"text/x-python","patch_set":25,"id":"1f485f77_e696b33e","line":261,"range":{"start_line":245,"start_character":0,"end_line":261,"end_character":29},"in_reply_to":"3f4b6375_38081c90","updated":"2017-11-15 22:17:18.000000000","message":"Done","commit_id":"d17c318eb2b4a22961a929f53a94e85a087e2cf8"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"b0469a17547cefe2c4ba47a611b5da509e16a0bd","unresolved":false,"context_lines":[{"line_number":302,"context_line":"            ovs_ext_ids\u003dstr(meta_attrs), configured_mtu\u003dmtu)[0]"},{"line_number":303,"context_line":""},{"line_number":304,"context_line":"    @staticmethod"},{"line_number":305,"context_line":"    def get_ovs_interfaceid(vif):"},{"line_number":306,"context_line":"        \"\"\"Returns the interface id to set for a given VIF."},{"line_number":307,"context_line":""},{"line_number":308,"context_line":"        When a VIF is plugged for an Open vSwitch, it needs to have the"}],"source_content_type":"text/x-python","patch_set":25,"id":"3f4b6375_38913c48","line":305,"range":{"start_line":305,"start_character":8,"end_line":305,"end_character":27},"updated":"2017-11-06 17:05:43.000000000","message":"Not used.  Remove it and its test.","commit_id":"d17c318eb2b4a22961a929f53a94e85a087e2cf8"},{"author":{"_account_id":16710,"name":"Eric Berglund","email":"esberglu@us.ibm.com","username":"esberglu"},"change_message_id":"3ffa85f520a5ccd65c0cdc0bf45d067e9a9c6896","unresolved":false,"context_lines":[{"line_number":302,"context_line":"            ovs_ext_ids\u003dstr(meta_attrs), configured_mtu\u003dmtu)[0]"},{"line_number":303,"context_line":""},{"line_number":304,"context_line":"    @staticmethod"},{"line_number":305,"context_line":"    def get_ovs_interfaceid(vif):"},{"line_number":306,"context_line":"        \"\"\"Returns the interface id to set for a given VIF."},{"line_number":307,"context_line":""},{"line_number":308,"context_line":"        When a VIF is plugged for an Open vSwitch, it needs to have the"}],"source_content_type":"text/x-python","patch_set":25,"id":"1f485f77_b5aa4ccf","line":305,"range":{"start_line":305,"start_character":8,"end_line":305,"end_character":27},"in_reply_to":"3f4b6375_38913c48","updated":"2017-11-15 22:17:18.000000000","message":"Done","commit_id":"d17c318eb2b4a22961a929f53a94e85a087e2cf8"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"341422a637f79441055575e15478732822a63a71","unresolved":false,"context_lines":[{"line_number":127,"context_line":"                 set to True.  Otherwise None is expected."},{"line_number":128,"context_line":"        \"\"\""},{"line_number":129,"context_line":""},{"line_number":130,"context_line":"        if not new_vif:"},{"line_number":131,"context_line":"            return None"},{"line_number":132,"context_line":""},{"line_number":133,"context_line":"        # Create the trunk and client adapter."},{"line_number":134,"context_line":"        lpar_uuid \u003d vm.get_pvm_uuid(self.instance)"}],"source_content_type":"text/x-python","patch_set":26,"id":"1f485f77_c82981e6","line":131,"range":{"start_line":130,"start_character":0,"end_line":131,"end_character":23},"updated":"2017-11-15 23:05:32.000000000","message":"I believe this should now subsume https://review.openstack.org/#/c/519030/","commit_id":"363b7df3b9e6f00c6762f11f4a191f665b50f44f"},{"author":{"_account_id":16710,"name":"Eric Berglund","email":"esberglu@us.ibm.com","username":"esberglu"},"change_message_id":"1f62128fa43b1e28d3ac8b8a6e7077832dbc562c","unresolved":false,"context_lines":[{"line_number":127,"context_line":"                 set to True.  Otherwise None is expected."},{"line_number":128,"context_line":"        \"\"\""},{"line_number":129,"context_line":""},{"line_number":130,"context_line":"        if not new_vif:"},{"line_number":131,"context_line":"            return None"},{"line_number":132,"context_line":""},{"line_number":133,"context_line":"        # Create the trunk and client adapter."},{"line_number":134,"context_line":"        lpar_uuid \u003d vm.get_pvm_uuid(self.instance)"}],"source_content_type":"text/x-python","patch_set":26,"id":"1f485f77_fda5f947","line":131,"range":{"start_line":130,"start_character":0,"end_line":131,"end_character":23},"in_reply_to":"1f485f77_c82981e6","updated":"2017-11-16 22:02:01.000000000","message":"Will address in PS28","commit_id":"363b7df3b9e6f00c6762f11f4a191f665b50f44f"},{"author":{"_account_id":16710,"name":"Eric Berglund","email":"esberglu@us.ibm.com","username":"esberglu"},"change_message_id":"b272f5ed07837d384eb88f4ef212ee3009e85876","unresolved":false,"context_lines":[{"line_number":127,"context_line":"                 set to True.  Otherwise None is expected."},{"line_number":128,"context_line":"        \"\"\""},{"line_number":129,"context_line":""},{"line_number":130,"context_line":"        if not new_vif:"},{"line_number":131,"context_line":"            return None"},{"line_number":132,"context_line":""},{"line_number":133,"context_line":"        # Create the trunk and client adapter."},{"line_number":134,"context_line":"        lpar_uuid \u003d vm.get_pvm_uuid(self.instance)"}],"source_content_type":"text/x-python","patch_set":26,"id":"1f485f77_fe716f45","line":131,"range":{"start_line":130,"start_character":0,"end_line":131,"end_character":23},"in_reply_to":"1f485f77_fda5f947","updated":"2017-11-16 23:49:35.000000000","message":"Done","commit_id":"363b7df3b9e6f00c6762f11f4a191f665b50f44f"},{"author":{"_account_id":10608,"name":"Matthew Edmonds","email":"edmondsw@us.ibm.com","username":"edmondsw"},"change_message_id":"f12ae7669f707f1646969cdc6f7c965f23f1f030","unresolved":false,"context_lines":[{"line_number":32,"context_line":""},{"line_number":33,"context_line":"NOVALINK_VSWITCH \u003d \u0027NovaLinkVEABridge\u0027"},{"line_number":34,"context_line":""},{"line_number":35,"context_line":"# Provider tag for custom events from this module"},{"line_number":36,"context_line":"EVENT_PROVIDER_ID \u003d \u0027NOVA_PVM_VIF\u0027"},{"line_number":37,"context_line":""},{"line_number":38,"context_line":"# NOTE(svenkat): Manually adjust CNA child ordering to workaround bug 1731657"},{"line_number":39,"context_line":"# TODO(esberglu) Remove workaround when pypowervm is fixed"}],"source_content_type":"text/x-python","patch_set":30,"id":"ff82abbf_a91d9e74","line":36,"range":{"start_line":35,"start_character":0,"end_line":36,"end_character":34},"updated":"2017-11-30 15:43:23.000000000","message":"not used for OVS... should move to the SEA patch","commit_id":"61d4b0f060fa3d19c7cacff71fe99027a04e8eba"},{"author":{"_account_id":16710,"name":"Eric Berglund","email":"esberglu@us.ibm.com","username":"esberglu"},"change_message_id":"c6068663d9b49b9d76a1fd7e799a58325f84f492","unresolved":false,"context_lines":[{"line_number":32,"context_line":""},{"line_number":33,"context_line":"NOVALINK_VSWITCH \u003d \u0027NovaLinkVEABridge\u0027"},{"line_number":34,"context_line":""},{"line_number":35,"context_line":"# Provider tag for custom events from this module"},{"line_number":36,"context_line":"EVENT_PROVIDER_ID \u003d \u0027NOVA_PVM_VIF\u0027"},{"line_number":37,"context_line":""},{"line_number":38,"context_line":"# NOTE(svenkat): Manually adjust CNA child ordering to workaround bug 1731657"},{"line_number":39,"context_line":"# TODO(esberglu) Remove workaround when pypowervm is fixed"}],"source_content_type":"text/x-python","patch_set":30,"id":"df87a7cf_ae9a43c2","line":36,"range":{"start_line":35,"start_character":0,"end_line":36,"end_character":34},"in_reply_to":"ff82abbf_a91d9e74","updated":"2017-12-15 02:22:18.000000000","message":"Done","commit_id":"61d4b0f060fa3d19c7cacff71fe99027a04e8eba"},{"author":{"_account_id":10608,"name":"Matthew Edmonds","email":"edmondsw@us.ibm.com","username":"edmondsw"},"change_message_id":"f12ae7669f707f1646969cdc6f7c965f23f1f030","unresolved":false,"context_lines":[{"line_number":55,"context_line":"    \"\"\""},{"line_number":56,"context_line":"    if vif.get(\u0027type\u0027) !\u003d \u0027ovs\u0027:"},{"line_number":57,"context_line":"        raise exception.VirtualInterfacePlugException("},{"line_number":58,"context_line":"            _(\"PowerVM only supports the OVS VIF type.\"))"},{"line_number":59,"context_line":"    return PvmOvsVifDriver(adapter, instance)"},{"line_number":60,"context_line":""},{"line_number":61,"context_line":""}],"source_content_type":"text/x-python","patch_set":30,"id":"ff82abbf_8c26a8ba","line":58,"updated":"2017-11-30 15:43:23.000000000","message":"I\u0027d say copy this method from the SEA patch, and define VIF_TYPE_PVM_OVS and VIF_MAPPING with only the OVS driver. Then there\u0027s even less to change when we add SEA here, and if there any comments on exception message wording, etc. we can hash them out in one place (on which note, see my comments in the SEA patch)","commit_id":"61d4b0f060fa3d19c7cacff71fe99027a04e8eba"},{"author":{"_account_id":16710,"name":"Eric Berglund","email":"esberglu@us.ibm.com","username":"esberglu"},"change_message_id":"c6068663d9b49b9d76a1fd7e799a58325f84f492","unresolved":false,"context_lines":[{"line_number":55,"context_line":"    \"\"\""},{"line_number":56,"context_line":"    if vif.get(\u0027type\u0027) !\u003d \u0027ovs\u0027:"},{"line_number":57,"context_line":"        raise exception.VirtualInterfacePlugException("},{"line_number":58,"context_line":"            _(\"PowerVM only supports the OVS VIF type.\"))"},{"line_number":59,"context_line":"    return PvmOvsVifDriver(adapter, instance)"},{"line_number":60,"context_line":""},{"line_number":61,"context_line":""}],"source_content_type":"text/x-python","patch_set":30,"id":"df87a7cf_ceba27bf","line":58,"in_reply_to":"ff82abbf_8c26a8ba","updated":"2017-12-15 02:22:18.000000000","message":"Done","commit_id":"61d4b0f060fa3d19c7cacff71fe99027a04e8eba"},{"author":{"_account_id":10608,"name":"Matthew Edmonds","email":"edmondsw@us.ibm.com","username":"edmondsw"},"change_message_id":"879af74c43dde7e3aeead5db992175a4a2499c28","unresolved":false,"context_lines":[{"line_number":37,"context_line":"               \u0027nova.virt.powervm.vif.PvmOvsVifDriver\u0027}"},{"line_number":38,"context_line":""},{"line_number":39,"context_line":""},{"line_number":40,"context_line":"# NOTE(svenkat): Manually adjust CNA child ordering to workaround bug 1731657"},{"line_number":41,"context_line":"# TODO(esberglu) Remove workaround when pypowervm is fixed"},{"line_number":42,"context_line":"child_order \u003d list(pvm_net.CNA._child_order)"},{"line_number":43,"context_line":"child_order.remove(\u0027VirtualNetworks\u0027)"},{"line_number":44,"context_line":"child_order.append(\u0027VirtualNetworks\u0027)"}],"source_content_type":"text/x-python","patch_set":32,"id":"9f91af0f_f0704075","line":41,"range":{"start_line":40,"start_character":0,"end_line":41,"end_character":58},"updated":"2018-01-02 22:27:42.000000000","message":"since we already need a new release of pypowervm for the CI to pass on this patch, and that bug has already been addressed in pypowervm, we should go ahead and rework this to depend on those pypowervm changes.","commit_id":"6efbcee789b98ad58d667deead9f49e6a97e115d"},{"author":{"_account_id":16710,"name":"Eric Berglund","email":"esberglu@us.ibm.com","username":"esberglu"},"change_message_id":"68583dc9596f091e84691f34b700cf12a42178f8","unresolved":false,"context_lines":[{"line_number":37,"context_line":"               \u0027nova.virt.powervm.vif.PvmOvsVifDriver\u0027}"},{"line_number":38,"context_line":""},{"line_number":39,"context_line":""},{"line_number":40,"context_line":"# NOTE(svenkat): Manually adjust CNA child ordering to workaround bug 1731657"},{"line_number":41,"context_line":"# TODO(esberglu) Remove workaround when pypowervm is fixed"},{"line_number":42,"context_line":"child_order \u003d list(pvm_net.CNA._child_order)"},{"line_number":43,"context_line":"child_order.remove(\u0027VirtualNetworks\u0027)"},{"line_number":44,"context_line":"child_order.append(\u0027VirtualNetworks\u0027)"}],"source_content_type":"text/x-python","patch_set":32,"id":"9f91af0f_61046416","line":41,"range":{"start_line":40,"start_character":0,"end_line":41,"end_character":58},"in_reply_to":"9f91af0f_f0704075","updated":"2018-01-03 01:13:14.000000000","message":"Done","commit_id":"6efbcee789b98ad58d667deead9f49e6a97e115d"},{"author":{"_account_id":10608,"name":"Matthew Edmonds","email":"edmondsw@us.ibm.com","username":"edmondsw"},"change_message_id":"879af74c43dde7e3aeead5db992175a4a2499c28","unresolved":false,"context_lines":[{"line_number":176,"context_line":"            # init of the nova compute service, which will call vif plug with"},{"line_number":177,"context_line":"            # new_vif\u003d\u003dFalse."},{"line_number":178,"context_line":""},{"line_number":179,"context_line":"            # Find the CNA for this vif."},{"line_number":180,"context_line":"            cna_w_list \u003d vm.get_cnas(self.adapter, self.instance)"},{"line_number":181,"context_line":"            cna_w \u003d None"},{"line_number":182,"context_line":"            for cna in cna_w_list:"}],"source_content_type":"text/x-python","patch_set":32,"id":"9f91af0f_f0528067","line":179,"updated":"2018-01-02 22:27:42.000000000","message":"There are a couple perf TODOs here in the OOT version. Did we have a reason for not copying those here?","commit_id":"6efbcee789b98ad58d667deead9f49e6a97e115d"},{"author":{"_account_id":16710,"name":"Eric Berglund","email":"esberglu@us.ibm.com","username":"esberglu"},"change_message_id":"68583dc9596f091e84691f34b700cf12a42178f8","unresolved":false,"context_lines":[{"line_number":176,"context_line":"            # init of the nova compute service, which will call vif plug with"},{"line_number":177,"context_line":"            # new_vif\u003d\u003dFalse."},{"line_number":178,"context_line":""},{"line_number":179,"context_line":"            # Find the CNA for this vif."},{"line_number":180,"context_line":"            cna_w_list \u003d vm.get_cnas(self.adapter, self.instance)"},{"line_number":181,"context_line":"            cna_w \u003d None"},{"line_number":182,"context_line":"            for cna in cna_w_list:"}],"source_content_type":"text/x-python","patch_set":32,"id":"9f91af0f_0109d82a","line":179,"in_reply_to":"9f91af0f_f0528067","updated":"2018-01-03 01:13:14.000000000","message":"Done","commit_id":"6efbcee789b98ad58d667deead9f49e6a97e115d"},{"author":{"_account_id":10608,"name":"Matthew Edmonds","email":"edmondsw@us.ibm.com","username":"edmondsw"},"change_message_id":"879af74c43dde7e3aeead5db992175a4a2499c28","unresolved":false,"context_lines":[{"line_number":203,"context_line":"    def unplug(self, vif, cna_w_list\u003dNone):"},{"line_number":204,"context_line":"        \"\"\"Unplugs a virtual interface (network) from a VM."},{"line_number":205,"context_line":""},{"line_number":206,"context_line":"        Extends the base implementation, but before calling it will remove"},{"line_number":207,"context_line":"        the adapter from the Open vSwitch and delete the trunk."},{"line_number":208,"context_line":""},{"line_number":209,"context_line":"        :param vif: The virtual interface to plug into the instance."},{"line_number":210,"context_line":"        :param cna_w_list: (Optional, Default: None) The list of Client Network"}],"source_content_type":"text/x-python","patch_set":32,"id":"9f91af0f_d0dadce7","line":207,"range":{"start_line":206,"start_character":0,"end_line":207,"end_character":63},"updated":"2018-01-02 22:27:42.000000000","message":"there is no base implementation being extended here (yet), since you aren\u0027t creating the superclass until the SEA patch. This comment should move to that patch.","commit_id":"6efbcee789b98ad58d667deead9f49e6a97e115d"},{"author":{"_account_id":16710,"name":"Eric Berglund","email":"esberglu@us.ibm.com","username":"esberglu"},"change_message_id":"68583dc9596f091e84691f34b700cf12a42178f8","unresolved":false,"context_lines":[{"line_number":203,"context_line":"    def unplug(self, vif, cna_w_list\u003dNone):"},{"line_number":204,"context_line":"        \"\"\"Unplugs a virtual interface (network) from a VM."},{"line_number":205,"context_line":""},{"line_number":206,"context_line":"        Extends the base implementation, but before calling it will remove"},{"line_number":207,"context_line":"        the adapter from the Open vSwitch and delete the trunk."},{"line_number":208,"context_line":""},{"line_number":209,"context_line":"        :param vif: The virtual interface to plug into the instance."},{"line_number":210,"context_line":"        :param cna_w_list: (Optional, Default: None) The list of Client Network"}],"source_content_type":"text/x-python","patch_set":32,"id":"9f91af0f_c1121059","line":207,"range":{"start_line":206,"start_character":0,"end_line":207,"end_character":63},"in_reply_to":"9f91af0f_d0dadce7","updated":"2018-01-03 01:13:14.000000000","message":"Done","commit_id":"6efbcee789b98ad58d667deead9f49e6a97e115d"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"d57f9e1888af16781dbad1155f44303ebbe96f41","unresolved":false,"context_lines":[{"line_number":49,"context_line":"                      instance\u003dinstance)"},{"line_number":50,"context_line":"        raise exception.VirtualInterfacePlugException()"},{"line_number":51,"context_line":""},{"line_number":52,"context_line":"    # Check the type to the implementations"},{"line_number":53,"context_line":"    if VIF_MAPPING.get(vif[\u0027type\u0027]):"},{"line_number":54,"context_line":"        return importutils.import_object("},{"line_number":55,"context_line":"            VIF_MAPPING.get(vif[\u0027type\u0027]), adapter, instance)"}],"source_content_type":"text/x-python","patch_set":34,"id":"9f91af0f_92adb49c","line":52,"range":{"start_line":52,"start_character":6,"end_line":52,"end_character":11},"updated":"2018-01-09 14:18:00.000000000","message":"Map?","commit_id":"8e91966fc6afb124b4e1c20d010d8aaab17a3467"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"bdb89e879abd3c6fb0caa1d34c15a2834c4e5e44","unresolved":false,"context_lines":[{"line_number":207,"context_line":"        for cna in cna_w_list:"},{"line_number":208,"context_line":"            # If the MAC address matched, attempt the delete."},{"line_number":209,"context_line":"            if vm.norm_mac(cna.mac) \u003d\u003d vif[\u0027address\u0027]:"},{"line_number":210,"context_line":"                cna_w \u003d cna"},{"line_number":211,"context_line":""},{"line_number":212,"context_line":"        if not cna_w:"},{"line_number":213,"context_line":"            LOG.warning(\u0027Unable to unplug VIF with mac %s for instance. The \u0027"}],"source_content_type":"text/x-python","patch_set":34,"id":"9f91af0f_3ae59a09","line":210,"range":{"start_line":210,"start_character":16,"end_line":210,"end_character":27},"updated":"2018-01-09 16:45:07.000000000","message":"and break?\n\nBut you could factor this block and L173-177 into _find_cna_for_vif à la https://review.openstack.org/#/c/523216/11/nova/virt/powervm/vif.py@218","commit_id":"8e91966fc6afb124b4e1c20d010d8aaab17a3467"},{"author":{"_account_id":16710,"name":"Eric Berglund","email":"esberglu@us.ibm.com","username":"esberglu"},"change_message_id":"5a27f6d4f9d767247ddfb656b68ba85cf98e9594","unresolved":false,"context_lines":[{"line_number":207,"context_line":"        for cna in cna_w_list:"},{"line_number":208,"context_line":"            # If the MAC address matched, attempt the delete."},{"line_number":209,"context_line":"            if vm.norm_mac(cna.mac) \u003d\u003d vif[\u0027address\u0027]:"},{"line_number":210,"context_line":"                cna_w \u003d cna"},{"line_number":211,"context_line":""},{"line_number":212,"context_line":"        if not cna_w:"},{"line_number":213,"context_line":"            LOG.warning(\u0027Unable to unplug VIF with mac %s for instance. The \u0027"}],"source_content_type":"text/x-python","patch_set":34,"id":"7f96bb07_883cf1c8","line":210,"range":{"start_line":210,"start_character":16,"end_line":210,"end_character":27},"in_reply_to":"9f91af0f_3ae59a09","updated":"2018-01-15 17:24:27.000000000","message":"Done","commit_id":"8e91966fc6afb124b4e1c20d010d8aaab17a3467"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"3950e915c8a1f9cca748108dcd9df60aa62e05b3","unresolved":false,"context_lines":[{"line_number":157,"context_line":"                self.adapter, None, lpar_uuid, [mgmt_uuid], NOVALINK_VSWITCH,"},{"line_number":158,"context_line":"                crt_vswitch\u003dTrue, mac_addr\u003dvif[\u0027address\u0027], dev_name\u003ddev_name,"},{"line_number":159,"context_line":"                ovs_bridge\u003dvif[\u0027network\u0027][\u0027bridge\u0027],"},{"line_number":160,"context_line":"                ovs_ext_ids\u003dstr(meta_attrs), configured_mtu\u003dmtu)[0]"},{"line_number":161,"context_line":"        else:"},{"line_number":162,"context_line":"            # Bug : https://bugs.launchpad.net/nova-powervm/+bug/1731548"},{"line_number":163,"context_line":"            # When a host is rebooted, something is discarding tap devices for"}],"source_content_type":"text/x-python","patch_set":36,"id":"7f96bb07_8b5f0e0d","line":160,"range":{"start_line":160,"start_character":28,"end_line":160,"end_character":31},"updated":"2018-01-15 15:23:34.000000000","message":"As far as I understand meta_attrs already a string returned by str.join()","commit_id":"8a56694128c2f4d23c9650f6a25403d550d7d5af"},{"author":{"_account_id":16710,"name":"Eric Berglund","email":"esberglu@us.ibm.com","username":"esberglu"},"change_message_id":"5a27f6d4f9d767247ddfb656b68ba85cf98e9594","unresolved":false,"context_lines":[{"line_number":157,"context_line":"                self.adapter, None, lpar_uuid, [mgmt_uuid], NOVALINK_VSWITCH,"},{"line_number":158,"context_line":"                crt_vswitch\u003dTrue, mac_addr\u003dvif[\u0027address\u0027], dev_name\u003ddev_name,"},{"line_number":159,"context_line":"                ovs_bridge\u003dvif[\u0027network\u0027][\u0027bridge\u0027],"},{"line_number":160,"context_line":"                ovs_ext_ids\u003dstr(meta_attrs), configured_mtu\u003dmtu)[0]"},{"line_number":161,"context_line":"        else:"},{"line_number":162,"context_line":"            # Bug : https://bugs.launchpad.net/nova-powervm/+bug/1731548"},{"line_number":163,"context_line":"            # When a host is rebooted, something is discarding tap devices for"}],"source_content_type":"text/x-python","patch_set":36,"id":"7f96bb07_06bc5367","line":160,"range":{"start_line":160,"start_character":28,"end_line":160,"end_character":31},"in_reply_to":"7f96bb07_8b5f0e0d","updated":"2018-01-15 17:24:27.000000000","message":"Done","commit_id":"8a56694128c2f4d23c9650f6a25403d550d7d5af"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"3950e915c8a1f9cca748108dcd9df60aa62e05b3","unresolved":false,"context_lines":[{"line_number":176,"context_line":"                    cna_w \u003d cna"},{"line_number":177,"context_line":"                    break"},{"line_number":178,"context_line":"            # Find the corresponding trunk adapter"},{"line_number":179,"context_line":"            trunks \u003d pvm_cna.find_trunks(self.adapter, cna_w)"},{"line_number":180,"context_line":"            for trunk in trunks:"},{"line_number":181,"context_line":"                # Set MTU, OVS external ids, and OVS bridge metadata"},{"line_number":182,"context_line":"                trunk.configured_mtu \u003d mtu"}],"source_content_type":"text/x-python","patch_set":36,"id":"7f96bb07_4bd6e651","line":179,"updated":"2018-01-15 15:23:34.000000000","message":"I don\u0027t know if it is a problem for find_trunks() but cna_w could be None here if the above loop did not found a matching vif","commit_id":"8a56694128c2f4d23c9650f6a25403d550d7d5af"},{"author":{"_account_id":16710,"name":"Eric Berglund","email":"esberglu@us.ibm.com","username":"esberglu"},"change_message_id":"5a27f6d4f9d767247ddfb656b68ba85cf98e9594","unresolved":false,"context_lines":[{"line_number":176,"context_line":"                    cna_w \u003d cna"},{"line_number":177,"context_line":"                    break"},{"line_number":178,"context_line":"            # Find the corresponding trunk adapter"},{"line_number":179,"context_line":"            trunks \u003d pvm_cna.find_trunks(self.adapter, cna_w)"},{"line_number":180,"context_line":"            for trunk in trunks:"},{"line_number":181,"context_line":"                # Set MTU, OVS external ids, and OVS bridge metadata"},{"line_number":182,"context_line":"                trunk.configured_mtu \u003d mtu"}],"source_content_type":"text/x-python","patch_set":36,"id":"7f96bb07_c672ebe3","line":179,"in_reply_to":"7f96bb07_4bd6e651","updated":"2018-01-15 17:24:27.000000000","message":"Not a problem","commit_id":"8a56694128c2f4d23c9650f6a25403d550d7d5af"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"3950e915c8a1f9cca748108dcd9df60aa62e05b3","unresolved":false,"context_lines":[{"line_number":196,"context_line":"        :param cna_w_list: (Optional, Default: None) The list of Client Network"},{"line_number":197,"context_line":"                           Adapters from pypowervm.  Providing this input"},{"line_number":198,"context_line":"                           allows for an improvement in operation speed."},{"line_number":199,"context_line":"        :return cna_w: The deleted Client Network Adapter."},{"line_number":200,"context_line":"        \"\"\""},{"line_number":201,"context_line":"        # Need to find the adapters if they were not provided"},{"line_number":202,"context_line":"        if not cna_w_list:"}],"source_content_type":"text/x-python","patch_set":36,"id":"7f96bb07_2b611aaa","line":199,"range":{"start_line":199,"start_character":23,"end_line":199,"end_character":58},"updated":"2018-01-15 15:23:34.000000000","message":"or None if the CNA is not found","commit_id":"8a56694128c2f4d23c9650f6a25403d550d7d5af"},{"author":{"_account_id":16710,"name":"Eric Berglund","email":"esberglu@us.ibm.com","username":"esberglu"},"change_message_id":"5a27f6d4f9d767247ddfb656b68ba85cf98e9594","unresolved":false,"context_lines":[{"line_number":196,"context_line":"        :param cna_w_list: (Optional, Default: None) The list of Client Network"},{"line_number":197,"context_line":"                           Adapters from pypowervm.  Providing this input"},{"line_number":198,"context_line":"                           allows for an improvement in operation speed."},{"line_number":199,"context_line":"        :return cna_w: The deleted Client Network Adapter."},{"line_number":200,"context_line":"        \"\"\""},{"line_number":201,"context_line":"        # Need to find the adapters if they were not provided"},{"line_number":202,"context_line":"        if not cna_w_list:"}],"source_content_type":"text/x-python","patch_set":36,"id":"7f96bb07_e646077d","line":199,"range":{"start_line":199,"start_character":23,"end_line":199,"end_character":58},"in_reply_to":"7f96bb07_2b611aaa","updated":"2018-01-15 17:24:27.000000000","message":"Done","commit_id":"8a56694128c2f4d23c9650f6a25403d550d7d5af"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"3950e915c8a1f9cca748108dcd9df60aa62e05b3","unresolved":false,"context_lines":[{"line_number":207,"context_line":"        for cna in cna_w_list:"},{"line_number":208,"context_line":"            # If the MAC address matched, attempt the delete."},{"line_number":209,"context_line":"            if vm.norm_mac(cna.mac) \u003d\u003d vif[\u0027address\u0027]:"},{"line_number":210,"context_line":"                cna_w \u003d cna"},{"line_number":211,"context_line":""},{"line_number":212,"context_line":"        if not cna_w:"},{"line_number":213,"context_line":"            LOG.warning(\u0027Unable to unplug VIF with mac %s for instance. The \u0027"}],"source_content_type":"text/x-python","patch_set":36,"id":"7f96bb07_eb41f20c","line":210,"updated":"2018-01-15 15:23:34.000000000","message":"In a similar loop in plug() the code breaks when the cna is found, please make it consistent. You can even pull out a helper function for it.","commit_id":"8a56694128c2f4d23c9650f6a25403d550d7d5af"},{"author":{"_account_id":16710,"name":"Eric Berglund","email":"esberglu@us.ibm.com","username":"esberglu"},"change_message_id":"5a27f6d4f9d767247ddfb656b68ba85cf98e9594","unresolved":false,"context_lines":[{"line_number":207,"context_line":"        for cna in cna_w_list:"},{"line_number":208,"context_line":"            # If the MAC address matched, attempt the delete."},{"line_number":209,"context_line":"            if vm.norm_mac(cna.mac) \u003d\u003d vif[\u0027address\u0027]:"},{"line_number":210,"context_line":"                cna_w \u003d cna"},{"line_number":211,"context_line":""},{"line_number":212,"context_line":"        if not cna_w:"},{"line_number":213,"context_line":"            LOG.warning(\u0027Unable to unplug VIF with mac %s for instance. The \u0027"}],"source_content_type":"text/x-python","patch_set":36,"id":"7f96bb07_665af74f","line":210,"in_reply_to":"7f96bb07_eb41f20c","updated":"2018-01-15 17:24:27.000000000","message":"Done","commit_id":"8a56694128c2f4d23c9650f6a25403d550d7d5af"},{"author":{"_account_id":10608,"name":"Matthew Edmonds","email":"edmondsw@us.ibm.com","username":"edmondsw"},"change_message_id":"4fbd66f918f566347c6e950739896fd35216530f","unresolved":false,"context_lines":[{"line_number":170,"context_line":"            # TODO(esberglu) improve performance by caching VIOS wrapper(s) and"},{"line_number":171,"context_line":"            # CNA lists (in case \u003e1 vif per VM)."},{"line_number":172,"context_line":"            cna_w_list \u003d vm.get_cnas(self.adapter, self.instance)"},{"line_number":173,"context_line":"            cna_w \u003d self._find_cna_for_vif(cna_w_list, vif)"},{"line_number":174,"context_line":"            # Find the corresponding trunk adapter"},{"line_number":175,"context_line":"            trunks \u003d pvm_cna.find_trunks(self.adapter, cna_w)"},{"line_number":176,"context_line":"            for trunk in trunks:"}],"source_content_type":"text/x-python","patch_set":38,"id":"7f96bb07_b757c802","line":173,"updated":"2018-01-15 18:59:51.000000000","message":"if cna_w is None, log an error and return None like we do in unplug.","commit_id":"564827e089fb0e6d4649ee87a4cf5c0f548d0d4d"},{"author":{"_account_id":16710,"name":"Eric Berglund","email":"esberglu@us.ibm.com","username":"esberglu"},"change_message_id":"9666e08d89436fdafb1bc741c53085cdf991f9ff","unresolved":false,"context_lines":[{"line_number":170,"context_line":"            # TODO(esberglu) improve performance by caching VIOS wrapper(s) and"},{"line_number":171,"context_line":"            # CNA lists (in case \u003e1 vif per VM)."},{"line_number":172,"context_line":"            cna_w_list \u003d vm.get_cnas(self.adapter, self.instance)"},{"line_number":173,"context_line":"            cna_w \u003d self._find_cna_for_vif(cna_w_list, vif)"},{"line_number":174,"context_line":"            # Find the corresponding trunk adapter"},{"line_number":175,"context_line":"            trunks \u003d pvm_cna.find_trunks(self.adapter, cna_w)"},{"line_number":176,"context_line":"            for trunk in trunks:"}],"source_content_type":"text/x-python","patch_set":38,"id":"7f96bb07_f70550c3","line":173,"in_reply_to":"7f96bb07_b757c802","updated":"2018-01-15 20:32:32.000000000","message":"Done","commit_id":"564827e089fb0e6d4649ee87a4cf5c0f548d0d4d"},{"author":{"_account_id":10608,"name":"Matthew Edmonds","email":"edmondsw@us.ibm.com","username":"edmondsw"},"change_message_id":"4fbd66f918f566347c6e950739896fd35216530f","unresolved":false,"context_lines":[{"line_number":236,"context_line":"                 part of the cna_w_list."},{"line_number":237,"context_line":"        \"\"\""},{"line_number":238,"context_line":"        for cna_w in cna_w_list:"},{"line_number":239,"context_line":"            # If the MAC address matched, attempt the delete."},{"line_number":240,"context_line":"            if vm.norm_mac(cna_w.mac) \u003d\u003d vif[\u0027address\u0027]:"},{"line_number":241,"context_line":"                return cna_w"},{"line_number":242,"context_line":"        return None"}],"source_content_type":"text/x-python","patch_set":38,"id":"7f96bb07_5718c473","line":239,"updated":"2018-01-15 18:59:51.000000000","message":"this comment doesn\u0027t apply here","commit_id":"564827e089fb0e6d4649ee87a4cf5c0f548d0d4d"},{"author":{"_account_id":16710,"name":"Eric Berglund","email":"esberglu@us.ibm.com","username":"esberglu"},"change_message_id":"9666e08d89436fdafb1bc741c53085cdf991f9ff","unresolved":false,"context_lines":[{"line_number":236,"context_line":"                 part of the cna_w_list."},{"line_number":237,"context_line":"        \"\"\""},{"line_number":238,"context_line":"        for cna_w in cna_w_list:"},{"line_number":239,"context_line":"            # If the MAC address matched, attempt the delete."},{"line_number":240,"context_line":"            if vm.norm_mac(cna_w.mac) \u003d\u003d vif[\u0027address\u0027]:"},{"line_number":241,"context_line":"                return cna_w"},{"line_number":242,"context_line":"        return None"}],"source_content_type":"text/x-python","patch_set":38,"id":"7f96bb07_3792d89f","line":239,"in_reply_to":"7f96bb07_5718c473","updated":"2018-01-15 20:32:32.000000000","message":"Done","commit_id":"564827e089fb0e6d4649ee87a4cf5c0f548d0d4d"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"9e2ed213f1795f1a73f5a0c0a1abcafe773ab3b0","unresolved":false,"context_lines":[{"line_number":102,"context_line":"        raise exception.VirtualInterfaceUnplugException(reason\u003dhe.args[0])"},{"line_number":103,"context_line":""},{"line_number":104,"context_line":""},{"line_number":105,"context_line":"class PvmOvsVifDriver(object):"},{"line_number":106,"context_line":"    \"\"\"The Open vSwitch VIF driver for PowerVM.\"\"\""},{"line_number":107,"context_line":""},{"line_number":108,"context_line":"    def __init__(self, adapter, instance):"}],"source_content_type":"text/x-python","patch_set":39,"id":"7f96bb07_37be31d5","line":105,"updated":"2018-01-16 17:32:10.000000000","message":"I wonder if neutron is ever going to use these objects? If so, they should probably be kept in a separate lib?","commit_id":"5abd333a188b3f5410bff3a5a48c928c85de79c6"},{"author":{"_account_id":16710,"name":"Eric Berglund","email":"esberglu@us.ibm.com","username":"esberglu"},"change_message_id":"5654ba4a73aef8207a069b75f68cb34bd6485d6a","unresolved":false,"context_lines":[{"line_number":102,"context_line":"        raise exception.VirtualInterfaceUnplugException(reason\u003dhe.args[0])"},{"line_number":103,"context_line":""},{"line_number":104,"context_line":""},{"line_number":105,"context_line":"class PvmOvsVifDriver(object):"},{"line_number":106,"context_line":"    \"\"\"The Open vSwitch VIF driver for PowerVM.\"\"\""},{"line_number":107,"context_line":""},{"line_number":108,"context_line":"    def __init__(self, adapter, instance):"}],"source_content_type":"text/x-python","patch_set":39,"id":"7f96bb07_d2111b54","line":105,"in_reply_to":"7f96bb07_37be31d5","updated":"2018-01-16 17:56:49.000000000","message":"We don\u0027t think neutron will ever be using these. But if so we can pull it out in a future series.","commit_id":"5abd333a188b3f5410bff3a5a48c928c85de79c6"}],"nova/virt/powervm/vm.py":[{"author":{"_account_id":8190,"name":"Drew Thorstensen (thorst)","email":"thorst@us.ibm.com","username":"thorst"},"change_message_id":"98828f799bdac2fe2bb03753796e89d587611ea2","unresolved":false,"context_lines":[{"line_number":92,"context_line":"                parent_uuid\u003dget_pvm_uuid(instance), **search)"},{"line_number":93,"context_line":""},{"line_number":94,"context_line":""},{"line_number":95,"context_line":"def get_vnics(adapter, instance, **search):"},{"line_number":96,"context_line":"    \"\"\"Returns the (possibly filtered) current vNICs on the instance."},{"line_number":97,"context_line":""},{"line_number":98,"context_line":"    :param adapter: The pypowervm adapter."},{"line_number":99,"context_line":"    :param instance: The nova instance."},{"line_number":100,"context_line":"    :param search: Keyword arguments for VNIC.search.  If omitted, all VNICs"},{"line_number":101,"context_line":"                   are returned."},{"line_number":102,"context_line":"    :return The VNIC wrappers that represent the virtual NICs on the VM."},{"line_number":103,"context_line":"    \"\"\""},{"line_number":104,"context_line":"    meth \u003d pvm_card.VNIC.search if search else pvm_card.VNIC.get"},{"line_number":105,"context_line":""},{"line_number":106,"context_line":"    return meth(adapter, parent_type\u003dpvm_lpar.LPAR,"},{"line_number":107,"context_line":"                parent_uuid\u003dget_pvm_uuid(instance), **search)"},{"line_number":108,"context_line":""},{"line_number":109,"context_line":""},{"line_number":110,"context_line":"def get_lpar_names(adapter):"}],"source_content_type":"text/x-python","patch_set":7,"id":"3a461143_eaf1cb6b","line":107,"range":{"start_line":95,"start_character":0,"end_line":107,"end_character":61},"updated":"2017-01-26 16:18:06.000000000","message":"Debatable if we need.  Eric F. needs to weigh in.  This is for vNIC/SR-IOV rather than OVS.","commit_id":"9bbfc0c6f7176599aea2b9b8071e9212630e11cf"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"78267b11844e0a1f7f3dc983a4ae864219c49790","unresolved":false,"context_lines":[{"line_number":92,"context_line":"                parent_uuid\u003dget_pvm_uuid(instance), **search)"},{"line_number":93,"context_line":""},{"line_number":94,"context_line":""},{"line_number":95,"context_line":"def get_vnics(adapter, instance, **search):"},{"line_number":96,"context_line":"    \"\"\"Returns the (possibly filtered) current vNICs on the instance."},{"line_number":97,"context_line":""},{"line_number":98,"context_line":"    :param adapter: The pypowervm adapter."},{"line_number":99,"context_line":"    :param instance: The nova instance."},{"line_number":100,"context_line":"    :param search: Keyword arguments for VNIC.search.  If omitted, all VNICs"},{"line_number":101,"context_line":"                   are returned."},{"line_number":102,"context_line":"    :return The VNIC wrappers that represent the virtual NICs on the VM."},{"line_number":103,"context_line":"    \"\"\""},{"line_number":104,"context_line":"    meth \u003d pvm_card.VNIC.search if search else pvm_card.VNIC.get"},{"line_number":105,"context_line":""},{"line_number":106,"context_line":"    return meth(adapter, parent_type\u003dpvm_lpar.LPAR,"},{"line_number":107,"context_line":"                parent_uuid\u003dget_pvm_uuid(instance), **search)"},{"line_number":108,"context_line":""},{"line_number":109,"context_line":""},{"line_number":110,"context_line":"def get_lpar_names(adapter):"}],"source_content_type":"text/x-python","patch_set":7,"id":"3a461143_7f863bdc","line":107,"range":{"start_line":95,"start_character":0,"end_line":107,"end_character":61},"in_reply_to":"3a461143_eaf1cb6b","updated":"2017-01-27 22:36:58.000000000","message":"Yeah, I agree.  See comment in network.py","commit_id":"9bbfc0c6f7176599aea2b9b8071e9212630e11cf"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"b0469a17547cefe2c4ba47a611b5da509e16a0bd","unresolved":false,"context_lines":[{"line_number":78,"context_line":"    \"\"\"Returns the (possibly filtered) current CNAs on the instance."},{"line_number":79,"context_line":""},{"line_number":80,"context_line":"    The Client Network Adapters are the Ethernet adapters for a VM."},{"line_number":81,"context_line":"    :param adapter: The pypowervm adapter."},{"line_number":82,"context_line":"    :param instance: The nova instance."},{"line_number":83,"context_line":"    :param search: Keyword arguments for CNA.search.  If omitted, all CNAs are"},{"line_number":84,"context_line":"                   returned."}],"source_content_type":"text/x-python","patch_set":25,"id":"3f4b6375_d5b2f1e4","line":81,"updated":"2017-11-06 17:05:43.000000000","message":"newline","commit_id":"d17c318eb2b4a22961a929f53a94e85a087e2cf8"},{"author":{"_account_id":16710,"name":"Eric Berglund","email":"esberglu@us.ibm.com","username":"esberglu"},"change_message_id":"3ffa85f520a5ccd65c0cdc0bf45d067e9a9c6896","unresolved":false,"context_lines":[{"line_number":78,"context_line":"    \"\"\"Returns the (possibly filtered) current CNAs on the instance."},{"line_number":79,"context_line":""},{"line_number":80,"context_line":"    The Client Network Adapters are the Ethernet adapters for a VM."},{"line_number":81,"context_line":"    :param adapter: The pypowervm adapter."},{"line_number":82,"context_line":"    :param instance: The nova instance."},{"line_number":83,"context_line":"    :param search: Keyword arguments for CNA.search.  If omitted, all CNAs are"},{"line_number":84,"context_line":"                   returned."}],"source_content_type":"text/x-python","patch_set":25,"id":"1f485f77_72c18a2e","line":81,"in_reply_to":"3f4b6375_d5b2f1e4","updated":"2017-11-15 22:17:18.000000000","message":"Done","commit_id":"d17c318eb2b4a22961a929f53a94e85a087e2cf8"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"b0469a17547cefe2c4ba47a611b5da509e16a0bd","unresolved":false,"context_lines":[{"line_number":345,"context_line":""},{"line_number":346,"context_line":"def norm_mac(mac):"},{"line_number":347,"context_line":"    \"\"\"Normalizes a MAC address from pypowervm format to OpenStack."},{"line_number":348,"context_line":"    That means that the format will be converted to lower case and will"},{"line_number":349,"context_line":"    have colons added."},{"line_number":350,"context_line":"    :param mac: A pypowervm mac address.  Ex. 1234567890AB"},{"line_number":351,"context_line":"    :return: A mac that matches the standard neutron format."}],"source_content_type":"text/x-python","patch_set":25,"id":"3f4b6375_957a3921","line":348,"updated":"2017-11-06 17:05:43.000000000","message":"Think we need another newline here.","commit_id":"d17c318eb2b4a22961a929f53a94e85a087e2cf8"},{"author":{"_account_id":16710,"name":"Eric Berglund","email":"esberglu@us.ibm.com","username":"esberglu"},"change_message_id":"3ffa85f520a5ccd65c0cdc0bf45d067e9a9c6896","unresolved":false,"context_lines":[{"line_number":345,"context_line":""},{"line_number":346,"context_line":"def norm_mac(mac):"},{"line_number":347,"context_line":"    \"\"\"Normalizes a MAC address from pypowervm format to OpenStack."},{"line_number":348,"context_line":"    That means that the format will be converted to lower case and will"},{"line_number":349,"context_line":"    have colons added."},{"line_number":350,"context_line":"    :param mac: A pypowervm mac address.  Ex. 1234567890AB"},{"line_number":351,"context_line":"    :return: A mac that matches the standard neutron format."}],"source_content_type":"text/x-python","patch_set":25,"id":"1f485f77_b23a6231","line":348,"in_reply_to":"3f4b6375_957a3921","updated":"2017-11-15 22:17:18.000000000","message":"Done","commit_id":"d17c318eb2b4a22961a929f53a94e85a087e2cf8"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"b0469a17547cefe2c4ba47a611b5da509e16a0bd","unresolved":false,"context_lines":[{"line_number":347,"context_line":"    \"\"\"Normalizes a MAC address from pypowervm format to OpenStack."},{"line_number":348,"context_line":"    That means that the format will be converted to lower case and will"},{"line_number":349,"context_line":"    have colons added."},{"line_number":350,"context_line":"    :param mac: A pypowervm mac address.  Ex. 1234567890AB"},{"line_number":351,"context_line":"    :return: A mac that matches the standard neutron format."},{"line_number":352,"context_line":"             Ex. 12:34:56:78:90:ab"},{"line_number":353,"context_line":"    \"\"\""}],"source_content_type":"text/x-python","patch_set":25,"id":"3f4b6375_35ba65c0","line":350,"updated":"2017-11-06 17:05:43.000000000","message":"and here","commit_id":"d17c318eb2b4a22961a929f53a94e85a087e2cf8"},{"author":{"_account_id":16710,"name":"Eric Berglund","email":"esberglu@us.ibm.com","username":"esberglu"},"change_message_id":"3ffa85f520a5ccd65c0cdc0bf45d067e9a9c6896","unresolved":false,"context_lines":[{"line_number":347,"context_line":"    \"\"\"Normalizes a MAC address from pypowervm format to OpenStack."},{"line_number":348,"context_line":"    That means that the format will be converted to lower case and will"},{"line_number":349,"context_line":"    have colons added."},{"line_number":350,"context_line":"    :param mac: A pypowervm mac address.  Ex. 1234567890AB"},{"line_number":351,"context_line":"    :return: A mac that matches the standard neutron format."},{"line_number":352,"context_line":"             Ex. 12:34:56:78:90:ab"},{"line_number":353,"context_line":"    \"\"\""}],"source_content_type":"text/x-python","patch_set":25,"id":"1f485f77_45dfbc0c","line":350,"in_reply_to":"3f4b6375_35ba65c0","updated":"2017-11-15 22:17:18.000000000","message":"Done","commit_id":"d17c318eb2b4a22961a929f53a94e85a087e2cf8"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"3950e915c8a1f9cca748108dcd9df60aa62e05b3","unresolved":false,"context_lines":[{"line_number":354,"context_line":"    :return: A mac that matches the standard neutron format."},{"line_number":355,"context_line":"             Ex. 12:34:56:78:90:ab"},{"line_number":356,"context_line":"    \"\"\""},{"line_number":357,"context_line":"    mac \u003d mac.lower().replace(\u0027:\u0027, \u0027\u0027)"},{"line_number":358,"context_line":"    return \u0027:\u0027.join(mac[i:i + 2] for i in range(0, len(mac), 2))"},{"line_number":359,"context_line":""},{"line_number":360,"context_line":""}],"source_content_type":"text/x-python","patch_set":36,"id":"7f96bb07_cb1d1610","line":357,"range":{"start_line":357,"start_character":10,"end_line":357,"end_character":37},"updated":"2018-01-15 15:23:34.000000000","message":"If the example in :param mac doc is correct then the replace(\u0027:\u0027, \u0027\u0027) is unnecessary.","commit_id":"8a56694128c2f4d23c9650f6a25403d550d7d5af"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"8201b953fbce102dd96d08f22e670e11ee7d0981","unresolved":false,"context_lines":[{"line_number":354,"context_line":"    :return: A mac that matches the standard neutron format."},{"line_number":355,"context_line":"             Ex. 12:34:56:78:90:ab"},{"line_number":356,"context_line":"    \"\"\""},{"line_number":357,"context_line":"    mac \u003d mac.lower().replace(\u0027:\u0027, \u0027\u0027)"},{"line_number":358,"context_line":"    return \u0027:\u0027.join(mac[i:i + 2] for i in range(0, len(mac), 2))"},{"line_number":359,"context_line":""},{"line_number":360,"context_line":""}],"source_content_type":"text/x-python","patch_set":36,"id":"7f96bb07_4639d1a1","line":357,"range":{"start_line":357,"start_character":10,"end_line":357,"end_character":37},"in_reply_to":"7f96bb07_6e172def","updated":"2018-01-16 16:14:10.000000000","message":"Sure. Then I would change the doc of the mac param to mention that it accepts an already normalized mac.","commit_id":"8a56694128c2f4d23c9650f6a25403d550d7d5af"},{"author":{"_account_id":16710,"name":"Eric Berglund","email":"esberglu@us.ibm.com","username":"esberglu"},"change_message_id":"5a27f6d4f9d767247ddfb656b68ba85cf98e9594","unresolved":false,"context_lines":[{"line_number":354,"context_line":"    :return: A mac that matches the standard neutron format."},{"line_number":355,"context_line":"             Ex. 12:34:56:78:90:ab"},{"line_number":356,"context_line":"    \"\"\""},{"line_number":357,"context_line":"    mac \u003d mac.lower().replace(\u0027:\u0027, \u0027\u0027)"},{"line_number":358,"context_line":"    return \u0027:\u0027.join(mac[i:i + 2] for i in range(0, len(mac), 2))"},{"line_number":359,"context_line":""},{"line_number":360,"context_line":""}],"source_content_type":"text/x-python","patch_set":36,"id":"7f96bb07_6e172def","line":357,"range":{"start_line":357,"start_character":10,"end_line":357,"end_character":37},"in_reply_to":"7f96bb07_cb1d1610","updated":"2018-01-15 17:24:27.000000000","message":"This is here in case the mac is already normalized. Whether or not that ever happens, I am not sure. I would like to leave it for now, then remove in a follow up when we can confirm that it isn\u0027t needed.","commit_id":"8a56694128c2f4d23c9650f6a25403d550d7d5af"}]}
