)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":12356,"name":"Vladyslav Drok","email":"vdrok@mirantis.com","username":"vdrok"},"change_message_id":"f466504696ffe3daa521f1e97cd4cdd10fdc4a5a","unresolved":false,"context_lines":[{"line_number":6,"context_line":""},{"line_number":7,"context_line":"Add Virtual Network Interface RPC APIs"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"This patch adds a virtual network interface API in order to abstract the"},{"line_number":10,"context_line":"task of assigning logical network interfaces to physical network"},{"line_number":11,"context_line":"interfaces. Since Newton Ironic provides an interface for pluggable"},{"line_number":12,"context_line":"network implementations. Different network implementations may want to"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":1,"id":"5a74a57a_cea2839a","line":9,"updated":"2016-11-30 10:05:32.000000000","message":"You might want to change the commit messages text a bit, as ATM it\u0027s completely the same for all 3 patches in chain.","commit_id":"0e598f09f85989a9caf222d7e7318260bbf75e0b"},{"author":{"_account_id":6637,"name":"Sam Betts","email":"sam@code-smash.net","username":"sambetts"},"change_message_id":"30342e29a2ffcf72c25c65f9c4606e58a7df0d13","unresolved":false,"context_lines":[{"line_number":6,"context_line":""},{"line_number":7,"context_line":"Add Virtual Network Interface RPC APIs"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"This patch adds a virtual network interface API in order to abstract the"},{"line_number":10,"context_line":"task of assigning logical network interfaces to physical network"},{"line_number":11,"context_line":"interfaces. Since Newton Ironic provides an interface for pluggable"},{"line_number":12,"context_line":"network implementations. Different network implementations may want to"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":1,"id":"5a74a57a_b5f741f4","line":9,"in_reply_to":"5a74a57a_cea2839a","updated":"2016-11-30 16:50:23.000000000","message":"Done","commit_id":"0e598f09f85989a9caf222d7e7318260bbf75e0b"},{"author":{"_account_id":14525,"name":"Vasyl Saienko","email":"vsaienko@mirantis.com","username":"vsaienko"},"change_message_id":"3554aefb3bb89b79a155e98c7b0616460e8fe353","unresolved":false,"context_lines":[{"line_number":9,"context_line":"This patch adds the driver API interfaces for the virtual network"},{"line_number":10,"context_line":"interface API in order to abstract the task of assigning logical network"},{"line_number":11,"context_line":"interfaces to physical network interfaces."},{"line_number":12,"context_line":""},{"line_number":13,"context_line":"Since the OpenStack Newton release, Ironic provides an interface for"},{"line_number":14,"context_line":"pluggable network implementations. Different network implementations may"},{"line_number":15,"context_line":"want to handle how logical to physical network interface assignment"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":2,"id":"3a71b18c_97e31433","line":12,"updated":"2016-12-02 13:25:10.000000000","message":"Please update commit message to reflet actual changes. This patch is about adding Virtual Network Interface RPC API part.","commit_id":"8ecc18080901d408bb3742e793a9e56ebef6ead2"},{"author":{"_account_id":6618,"name":"Ruby Loo","email":"opensrloo@gmail.com","username":"rloo"},"change_message_id":"46f97a0717f1dd807d79284a4883b272297a643f","unresolved":false,"context_lines":[{"line_number":6,"context_line":""},{"line_number":7,"context_line":"Add Virtual Network Interface RPC APIs"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"This patch adds the driver API interfaces for the virtual network"},{"line_number":10,"context_line":"interface API in order to abstract the task of assigning logical network"},{"line_number":11,"context_line":"interfaces to physical network interfaces."},{"line_number":12,"context_line":""}],"source_content_type":"text/x-gerrit-commit-message","patch_set":4,"id":"3a71b18c_4924c7ae","line":9,"updated":"2016-12-07 18:18:15.000000000","message":"s/driver API interfaces/RPC APIs/","commit_id":"6bb053e4543435e47d46a189c3d0a878931fe2c6"},{"author":{"_account_id":6637,"name":"Sam Betts","email":"sam@code-smash.net","username":"sambetts"},"change_message_id":"1560af2e8b6b238f827607663dd18df6385de585","unresolved":false,"context_lines":[{"line_number":6,"context_line":""},{"line_number":7,"context_line":"Add Virtual Network Interface RPC APIs"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"This patch adds the driver API interfaces for the virtual network"},{"line_number":10,"context_line":"interface API in order to abstract the task of assigning logical network"},{"line_number":11,"context_line":"interfaces to physical network interfaces."},{"line_number":12,"context_line":""}],"source_content_type":"text/x-gerrit-commit-message","patch_set":4,"id":"3a71b18c_bb801248","line":9,"in_reply_to":"3a71b18c_4924c7ae","updated":"2016-12-08 16:26:14.000000000","message":"Done","commit_id":"6bb053e4543435e47d46a189c3d0a878931fe2c6"},{"author":{"_account_id":19686,"name":"Ramamani Yeleswarapu","email":"ramamani.yeleswarapu@intel.com","username":"Rama_Y"},"change_message_id":"5ce12726d32603a824458ce718844812e591e2d7","unresolved":false,"context_lines":[{"line_number":17,"context_line":"implementation loaded for the specified node."},{"line_number":18,"context_line":""},{"line_number":19,"context_line":"This is part 2 of 3, and adds vif_attach, vif_detach and vif_list"},{"line_number":20,"context_line":"functions to the conductor manager and rpc API classes."},{"line_number":21,"context_line":""},{"line_number":22,"context_line":"Change-Id: I6c5a50016d12ad88b3c8175bc9b665e325e8df66"},{"line_number":23,"context_line":"Partial-Bug: #1582188"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":5,"id":"3a71b18c_cdd87121","line":20,"updated":"2016-12-09 23:11:01.000000000","message":"nit: s/rpc/RPC","commit_id":"4b2b88f24bddd7cdcfb338de2b78cfafc2e661b5"},{"author":{"_account_id":14525,"name":"Vasyl Saienko","email":"vsaienko@mirantis.com","username":"vsaienko"},"change_message_id":"bb69a02230b1320ad38692f8299bb32194ded6a3","unresolved":false,"context_lines":[{"line_number":17,"context_line":"implementation loaded for the specified node."},{"line_number":18,"context_line":""},{"line_number":19,"context_line":"This is part 2 of 3, and adds vif_attach, vif_detach and vif_list"},{"line_number":20,"context_line":"functions to the conductor manager and rpc API classes."},{"line_number":21,"context_line":""},{"line_number":22,"context_line":"Change-Id: I6c5a50016d12ad88b3c8175bc9b665e325e8df66"},{"line_number":23,"context_line":"Partial-Bug: #1582188"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":5,"id":"1a6eadb0_0bbb3f28","line":20,"in_reply_to":"3a71b18c_cdd87121","updated":"2016-12-14 16:18:30.000000000","message":"Done","commit_id":"4b2b88f24bddd7cdcfb338de2b78cfafc2e661b5"}],"ironic/api/controllers/v1/node.py":[{"author":{"_account_id":14525,"name":"Vasyl Saienko","email":"vsaienko@mirantis.com","username":"vsaienko"},"change_message_id":"3554aefb3bb89b79a155e98c7b0616460e8fe353","unresolved":false,"context_lines":[{"line_number":1043,"context_line":"        self._set_maintenance(node_ident, False)"},{"line_number":1044,"context_line":""},{"line_number":1045,"context_line":""},{"line_number":1046,"context_line":"class Vif(base.APIBase):"},{"line_number":1047,"context_line":""},{"line_number":1048,"context_line":"    id \u003d types.uuid_or_name"},{"line_number":1049,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"3a71b18c_f757e8ff","line":1046,"range":{"start_line":1046,"start_character":10,"end_line":1046,"end_character":22},"updated":"2016-12-02 13:25:10.000000000","message":"Not sure that we should inherit from base.APIBase VIf object, it shouldn\u0027t have created_at and updated_at fields.","commit_id":"8ecc18080901d408bb3742e793a9e56ebef6ead2"},{"author":{"_account_id":14525,"name":"Vasyl Saienko","email":"vsaienko@mirantis.com","username":"vsaienko"},"change_message_id":"3554aefb3bb89b79a155e98c7b0616460e8fe353","unresolved":false,"context_lines":[{"line_number":1043,"context_line":"        self._set_maintenance(node_ident, False)"},{"line_number":1044,"context_line":""},{"line_number":1045,"context_line":""},{"line_number":1046,"context_line":"class Vif(base.APIBase):"},{"line_number":1047,"context_line":""},{"line_number":1048,"context_line":"    id \u003d types.uuid_or_name"},{"line_number":1049,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"3a71b18c_94731215","line":1046,"updated":"2016-12-02 13:25:10.000000000","message":"it is not related to RPC API change, should be in next patch in the chain.","commit_id":"8ecc18080901d408bb3742e793a9e56ebef6ead2"},{"author":{"_account_id":6637,"name":"Sam Betts","email":"sam@code-smash.net","username":"sambetts"},"change_message_id":"5c51c2d89b60436504a321cf29bc36f810cb204c","unresolved":false,"context_lines":[{"line_number":1043,"context_line":"        self._set_maintenance(node_ident, False)"},{"line_number":1044,"context_line":""},{"line_number":1045,"context_line":""},{"line_number":1046,"context_line":"class Vif(base.APIBase):"},{"line_number":1047,"context_line":""},{"line_number":1048,"context_line":"    id \u003d types.uuid_or_name"},{"line_number":1049,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"3a71b18c_e9fb1a77","line":1046,"range":{"start_line":1046,"start_character":10,"end_line":1046,"end_character":22},"in_reply_to":"3a71b18c_f757e8ff","updated":"2016-12-06 12:11:24.000000000","message":"Done","commit_id":"8ecc18080901d408bb3742e793a9e56ebef6ead2"},{"author":{"_account_id":14525,"name":"Vasyl Saienko","email":"vsaienko@mirantis.com","username":"vsaienko"},"change_message_id":"3554aefb3bb89b79a155e98c7b0616460e8fe353","unresolved":false,"context_lines":[{"line_number":1049,"context_line":""},{"line_number":1050,"context_line":"    def __init__(self, **kwargs):"},{"line_number":1051,"context_line":"        super(Vif, self).__init__(**kwargs)"},{"line_number":1052,"context_line":"        for k in kwargs:"},{"line_number":1053,"context_line":"            setattr(self, k, kwargs[k])"},{"line_number":1054,"context_line":""},{"line_number":1055,"context_line":"    @classmethod"}],"source_content_type":"text/x-python","patch_set":2,"id":"3a71b18c_b4a1eeab","line":1052,"updated":"2016-12-02 13:25:10.000000000","message":"Do we need this, we have only one field - id at the moment.","commit_id":"8ecc18080901d408bb3742e793a9e56ebef6ead2"},{"author":{"_account_id":6637,"name":"Sam Betts","email":"sam@code-smash.net","username":"sambetts"},"change_message_id":"5c51c2d89b60436504a321cf29bc36f810cb204c","unresolved":false,"context_lines":[{"line_number":1049,"context_line":""},{"line_number":1050,"context_line":"    def __init__(self, **kwargs):"},{"line_number":1051,"context_line":"        super(Vif, self).__init__(**kwargs)"},{"line_number":1052,"context_line":"        for k in kwargs:"},{"line_number":1053,"context_line":"            setattr(self, k, kwargs[k])"},{"line_number":1054,"context_line":""},{"line_number":1055,"context_line":"    @classmethod"}],"source_content_type":"text/x-python","patch_set":2,"id":"3a71b18c_e975da63","line":1052,"in_reply_to":"3a71b18c_b4a1eeab","updated":"2016-12-06 12:11:24.000000000","message":"The reason for this is so we can pass through any other interface specific information through with the VIF, but still validate the ID with the uuid_or_name type.","commit_id":"8ecc18080901d408bb3742e793a9e56ebef6ead2"},{"author":{"_account_id":6618,"name":"Ruby Loo","email":"opensrloo@gmail.com","username":"rloo"},"change_message_id":"f2c2bed500428234c43383b6f4ea003bb32d971b","unresolved":false,"context_lines":[{"line_number":1053,"context_line":"            setattr(self, k, kwargs[k])"},{"line_number":1054,"context_line":""},{"line_number":1055,"context_line":"    @classmethod"},{"line_number":1056,"context_line":"    def convert_with_links(cls, vif, fields\u003dNone):"},{"line_number":1057,"context_line":"        vif \u003d cls(**vif)"},{"line_number":1058,"context_line":""},{"line_number":1059,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"3a71b18c_32bc3c05","line":1056,"updated":"2016-12-01 19:06:14.000000000","message":"what is vif? A dict?","commit_id":"8ecc18080901d408bb3742e793a9e56ebef6ead2"},{"author":{"_account_id":14525,"name":"Vasyl Saienko","email":"vsaienko@mirantis.com","username":"vsaienko"},"change_message_id":"3554aefb3bb89b79a155e98c7b0616460e8fe353","unresolved":false,"context_lines":[{"line_number":1053,"context_line":"            setattr(self, k, kwargs[k])"},{"line_number":1054,"context_line":""},{"line_number":1055,"context_line":"    @classmethod"},{"line_number":1056,"context_line":"    def convert_with_links(cls, vif, fields\u003dNone):"},{"line_number":1057,"context_line":"        vif \u003d cls(**vif)"},{"line_number":1058,"context_line":""},{"line_number":1059,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"3a71b18c_d4bd8ad8","line":1056,"in_reply_to":"3a71b18c_32bc3c05","updated":"2016-12-02 13:25:10.000000000","message":"Do we need convert_with_links method for VIf object? We don\u0027t have db representation for this.","commit_id":"8ecc18080901d408bb3742e793a9e56ebef6ead2"},{"author":{"_account_id":6637,"name":"Sam Betts","email":"sam@code-smash.net","username":"sambetts"},"change_message_id":"5c51c2d89b60436504a321cf29bc36f810cb204c","unresolved":false,"context_lines":[{"line_number":1053,"context_line":"            setattr(self, k, kwargs[k])"},{"line_number":1054,"context_line":""},{"line_number":1055,"context_line":"    @classmethod"},{"line_number":1056,"context_line":"    def convert_with_links(cls, vif, fields\u003dNone):"},{"line_number":1057,"context_line":"        vif \u003d cls(**vif)"},{"line_number":1058,"context_line":""},{"line_number":1059,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"3a71b18c_a934c249","line":1056,"in_reply_to":"3a71b18c_d4bd8ad8","updated":"2016-12-06 12:11:24.000000000","message":"Removed","commit_id":"8ecc18080901d408bb3742e793a9e56ebef6ead2"},{"author":{"_account_id":6618,"name":"Ruby Loo","email":"opensrloo@gmail.com","username":"rloo"},"change_message_id":"f2c2bed500428234c43383b6f4ea003bb32d971b","unresolved":false,"context_lines":[{"line_number":1055,"context_line":"    @classmethod"},{"line_number":1056,"context_line":"    def convert_with_links(cls, vif, fields\u003dNone):"},{"line_number":1057,"context_line":"        vif \u003d cls(**vif)"},{"line_number":1058,"context_line":""},{"line_number":1059,"context_line":""},{"line_number":1060,"context_line":"class VifCollection(collection.Collection):"},{"line_number":1061,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"3a71b18c_d272287c","line":1058,"updated":"2016-12-01 19:06:14.000000000","message":"were you actually going to add links to this?","commit_id":"8ecc18080901d408bb3742e793a9e56ebef6ead2"},{"author":{"_account_id":6637,"name":"Sam Betts","email":"sam@code-smash.net","username":"sambetts"},"change_message_id":"5c51c2d89b60436504a321cf29bc36f810cb204c","unresolved":false,"context_lines":[{"line_number":1055,"context_line":"    @classmethod"},{"line_number":1056,"context_line":"    def convert_with_links(cls, vif, fields\u003dNone):"},{"line_number":1057,"context_line":"        vif \u003d cls(**vif)"},{"line_number":1058,"context_line":""},{"line_number":1059,"context_line":""},{"line_number":1060,"context_line":"class VifCollection(collection.Collection):"},{"line_number":1061,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"3a71b18c_c9857ecf","line":1058,"in_reply_to":"3a71b18c_d272287c","updated":"2016-12-06 12:11:24.000000000","message":"you can\u0027t GET a specific VIF so I don\u0027t know if we need too.","commit_id":"8ecc18080901d408bb3742e793a9e56ebef6ead2"},{"author":{"_account_id":6618,"name":"Ruby Loo","email":"opensrloo@gmail.com","username":"rloo"},"change_message_id":"f2c2bed500428234c43383b6f4ea003bb32d971b","unresolved":false,"context_lines":[{"line_number":1060,"context_line":"class VifCollection(collection.Collection):"},{"line_number":1061,"context_line":""},{"line_number":1062,"context_line":"    vifs \u003d [Vif]"},{"line_number":1063,"context_line":"    \"\"\"A list containing nodes objects\"\"\""},{"line_number":1064,"context_line":""},{"line_number":1065,"context_line":"    def __init__(self, **kwargs):"},{"line_number":1066,"context_line":"        self._type \u003d \u0027vifs\u0027"}],"source_content_type":"text/x-python","patch_set":2,"id":"3a71b18c_b2e20c02","line":1063,"updated":"2016-12-01 19:06:14.000000000","message":"s/nodes/Vif/ ?","commit_id":"8ecc18080901d408bb3742e793a9e56ebef6ead2"},{"author":{"_account_id":6637,"name":"Sam Betts","email":"sam@code-smash.net","username":"sambetts"},"change_message_id":"5c51c2d89b60436504a321cf29bc36f810cb204c","unresolved":false,"context_lines":[{"line_number":1060,"context_line":"class VifCollection(collection.Collection):"},{"line_number":1061,"context_line":""},{"line_number":1062,"context_line":"    vifs \u003d [Vif]"},{"line_number":1063,"context_line":"    \"\"\"A list containing nodes objects\"\"\""},{"line_number":1064,"context_line":""},{"line_number":1065,"context_line":"    def __init__(self, **kwargs):"},{"line_number":1066,"context_line":"        self._type \u003d \u0027vifs\u0027"}],"source_content_type":"text/x-python","patch_set":2,"id":"3a71b18c_49724e12","line":1063,"in_reply_to":"3a71b18c_b2e20c02","updated":"2016-12-06 12:11:24.000000000","message":"Done","commit_id":"8ecc18080901d408bb3742e793a9e56ebef6ead2"},{"author":{"_account_id":6618,"name":"Ruby Loo","email":"opensrloo@gmail.com","username":"rloo"},"change_message_id":"f2c2bed500428234c43383b6f4ea003bb32d971b","unresolved":false,"context_lines":[{"line_number":1066,"context_line":"        self._type \u003d \u0027vifs\u0027"},{"line_number":1067,"context_line":""},{"line_number":1068,"context_line":"    @staticmethod"},{"line_number":1069,"context_line":"    def convert_with_links(vifs, limit\u003dNone, url\u003dNone, fields\u003dNone, **kwargs):"},{"line_number":1070,"context_line":"        limit \u003d api_utils.validate_limit(limit)"},{"line_number":1071,"context_line":"        collection \u003d VifCollection()"},{"line_number":1072,"context_line":"        collection.vifs \u003d [Vif.convert_with_links(v, fields\u003dfields)"}],"source_content_type":"text/x-python","patch_set":2,"id":"3a71b18c_b2112caf","line":1069,"updated":"2016-12-01 19:06:14.000000000","message":"I know we don\u0027t do it but it would be nice to have a docstring describing the parameters. Would make it easier on us reviewers.\n\nvifs is a list or set of vif objects?","commit_id":"8ecc18080901d408bb3742e793a9e56ebef6ead2"},{"author":{"_account_id":6637,"name":"Sam Betts","email":"sam@code-smash.net","username":"sambetts"},"change_message_id":"5c51c2d89b60436504a321cf29bc36f810cb204c","unresolved":false,"context_lines":[{"line_number":1066,"context_line":"        self._type \u003d \u0027vifs\u0027"},{"line_number":1067,"context_line":""},{"line_number":1068,"context_line":"    @staticmethod"},{"line_number":1069,"context_line":"    def convert_with_links(vifs, limit\u003dNone, url\u003dNone, fields\u003dNone, **kwargs):"},{"line_number":1070,"context_line":"        limit \u003d api_utils.validate_limit(limit)"},{"line_number":1071,"context_line":"        collection \u003d VifCollection()"},{"line_number":1072,"context_line":"        collection.vifs \u003d [Vif.convert_with_links(v, fields\u003dfields)"}],"source_content_type":"text/x-python","patch_set":2,"id":"3a71b18c_ec4ec839","line":1069,"in_reply_to":"3a71b18c_b2112caf","updated":"2016-12-06 12:11:24.000000000","message":"Done","commit_id":"8ecc18080901d408bb3742e793a9e56ebef6ead2"},{"author":{"_account_id":6618,"name":"Ruby Loo","email":"opensrloo@gmail.com","username":"rloo"},"change_message_id":"f2c2bed500428234c43383b6f4ea003bb32d971b","unresolved":false,"context_lines":[{"line_number":1073,"context_line":"                           for v in vifs]"},{"line_number":1074,"context_line":"        collection.next \u003d collection.get_next(limit, url\u003durl, **kwargs)"},{"line_number":1075,"context_line":"        return collection"},{"line_number":1076,"context_line":""},{"line_number":1077,"context_line":""},{"line_number":1078,"context_line":"class NodeVIFController(rest.RestController):"},{"line_number":1079,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"3a71b18c_52c7f811","line":1076,"updated":"2016-12-01 19:06:14.000000000","message":"For other *Collections, we also have a sample(), but I\u0027m not sure that we even use that any more.","commit_id":"8ecc18080901d408bb3742e793a9e56ebef6ead2"},{"author":{"_account_id":6637,"name":"Sam Betts","email":"sam@code-smash.net","username":"sambetts"},"change_message_id":"5c51c2d89b60436504a321cf29bc36f810cb204c","unresolved":false,"context_lines":[{"line_number":1073,"context_line":"                           for v in vifs]"},{"line_number":1074,"context_line":"        collection.next \u003d collection.get_next(limit, url\u003durl, **kwargs)"},{"line_number":1075,"context_line":"        return collection"},{"line_number":1076,"context_line":""},{"line_number":1077,"context_line":""},{"line_number":1078,"context_line":"class NodeVIFController(rest.RestController):"},{"line_number":1079,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"3a71b18c_ec75e863","line":1076,"in_reply_to":"3a71b18c_52c7f811","updated":"2016-12-06 12:11:24.000000000","message":"Not sure either, I\u0027ve simplified these classes in the next update.","commit_id":"8ecc18080901d408bb3742e793a9e56ebef6ead2"},{"author":{"_account_id":6618,"name":"Ruby Loo","email":"opensrloo@gmail.com","username":"rloo"},"change_message_id":"f2c2bed500428234c43383b6f4ea003bb32d971b","unresolved":false,"context_lines":[{"line_number":1090,"context_line":""},{"line_number":1091,"context_line":"    @expose.expose(VifCollection)"},{"line_number":1092,"context_line":"    def get_all(self):"},{"line_number":1093,"context_line":"        \u0027\u0027\u0027Get a list of attached VIF IDs\u0027\u0027\u0027"},{"line_number":1094,"context_line":"        rpc_node, topic \u003d self._get_node_and_topic()"},{"line_number":1095,"context_line":"        vifs \u003d pecan.request.rpcapi.vif_list(pecan.request.context,"},{"line_number":1096,"context_line":"                                             rpc_node.uuid, topic\u003dtopic)"}],"source_content_type":"text/x-python","patch_set":2,"id":"3a71b18c_12302001","line":1093,"updated":"2016-12-01 19:06:14.000000000","message":"nit, looks like we use \"\"\", not \u0027\u0027\u0027.","commit_id":"8ecc18080901d408bb3742e793a9e56ebef6ead2"},{"author":{"_account_id":6637,"name":"Sam Betts","email":"sam@code-smash.net","username":"sambetts"},"change_message_id":"5c51c2d89b60436504a321cf29bc36f810cb204c","unresolved":false,"context_lines":[{"line_number":1090,"context_line":""},{"line_number":1091,"context_line":"    @expose.expose(VifCollection)"},{"line_number":1092,"context_line":"    def get_all(self):"},{"line_number":1093,"context_line":"        \u0027\u0027\u0027Get a list of attached VIF IDs\u0027\u0027\u0027"},{"line_number":1094,"context_line":"        rpc_node, topic \u003d self._get_node_and_topic()"},{"line_number":1095,"context_line":"        vifs \u003d pecan.request.rpcapi.vif_list(pecan.request.context,"},{"line_number":1096,"context_line":"                                             rpc_node.uuid, topic\u003dtopic)"}],"source_content_type":"text/x-python","patch_set":2,"id":"3a71b18c_cc282c36","line":1093,"in_reply_to":"3a71b18c_12302001","updated":"2016-12-06 12:11:24.000000000","message":"Done","commit_id":"8ecc18080901d408bb3742e793a9e56ebef6ead2"}],"ironic/api/controllers/v1/utils.py":[{"author":{"_account_id":14525,"name":"Vasyl Saienko","email":"vsaienko@mirantis.com","username":"vsaienko"},"change_message_id":"3554aefb3bb89b79a155e98c7b0616460e8fe353","unresolved":false,"context_lines":[{"line_number":442,"context_line":"            versions.MINOR_25_UNSET_CHASSIS_UUID)"},{"line_number":443,"context_line":""},{"line_number":444,"context_line":""},{"line_number":445,"context_line":"def allow_vifs_subcontroller():"},{"line_number":446,"context_line":"    \"\"\"Check if node/vifs can be used."},{"line_number":447,"context_line":""},{"line_number":448,"context_line":"    Version 1.26 of the API added support for VIFs to be"}],"source_content_type":"text/x-python","patch_set":2,"id":"3a71b18c_54509a5e","line":445,"updated":"2016-12-02 13:25:10.000000000","message":"ditto about API change.","commit_id":"8ecc18080901d408bb3742e793a9e56ebef6ead2"}],"ironic/api/controllers/v1/versions.py":[{"author":{"_account_id":14525,"name":"Vasyl Saienko","email":"vsaienko@mirantis.com","username":"vsaienko"},"change_message_id":"3554aefb3bb89b79a155e98c7b0616460e8fe353","unresolved":false,"context_lines":[{"line_number":56,"context_line":"# v1.24: Add subcontrollers: node.portgroup, portgroup.ports."},{"line_number":57,"context_line":"#        Add port.portgroup_uuid field."},{"line_number":58,"context_line":"# v1.25: Add possibility to unset chassis_uuid from node."},{"line_number":59,"context_line":"# v1.26: Add vifs subcontroller to node"},{"line_number":60,"context_line":""},{"line_number":61,"context_line":"MINOR_0_JUNO \u003d 0"},{"line_number":62,"context_line":"MINOR_1_INITIAL_VERSION \u003d 1"}],"source_content_type":"text/x-python","patch_set":2,"id":"3a71b18c_744f56bd","line":59,"updated":"2016-12-02 13:25:10.000000000","message":"ditto about API change.","commit_id":"8ecc18080901d408bb3742e793a9e56ebef6ead2"}],"ironic/conductor/manager.py":[{"author":{"_account_id":12356,"name":"Vladyslav Drok","email":"vdrok@mirantis.com","username":"vdrok"},"change_message_id":"f466504696ffe3daa521f1e97cd4cdd10fdc4a5a","unresolved":false,"context_lines":[{"line_number":2155,"context_line":"    @messaging.expected_exceptions(exception.NodeLocked,"},{"line_number":2156,"context_line":"                                   exception.NetworkError,"},{"line_number":2157,"context_line":"                                   exception.InvalidParameterValue,"},{"line_number":2158,"context_line":"                                   exception.MissingParameterValue)"},{"line_number":2159,"context_line":"    def vif_list(self, context, node_id):"},{"line_number":2160,"context_line":"        with task_manager.acquire(context, node_id,"},{"line_number":2161,"context_line":"                                  purpose\u003d\u0027list vifs\u0027) as task:"}],"source_content_type":"text/x-python","patch_set":1,"id":"5a74a57a_6e3b2f9d","line":2158,"updated":"2016-11-30 10:05:32.000000000","message":"missing is inherited from invalid, no need to include it, ditto for others","commit_id":"0e598f09f85989a9caf222d7e7318260bbf75e0b"},{"author":{"_account_id":6637,"name":"Sam Betts","email":"sam@code-smash.net","username":"sambetts"},"change_message_id":"30342e29a2ffcf72c25c65f9c4606e58a7df0d13","unresolved":false,"context_lines":[{"line_number":2155,"context_line":"    @messaging.expected_exceptions(exception.NodeLocked,"},{"line_number":2156,"context_line":"                                   exception.NetworkError,"},{"line_number":2157,"context_line":"                                   exception.InvalidParameterValue,"},{"line_number":2158,"context_line":"                                   exception.MissingParameterValue)"},{"line_number":2159,"context_line":"    def vif_list(self, context, node_id):"},{"line_number":2160,"context_line":"        with task_manager.acquire(context, node_id,"},{"line_number":2161,"context_line":"                                  purpose\u003d\u0027list vifs\u0027) as task:"}],"source_content_type":"text/x-python","patch_set":1,"id":"5a74a57a_d5c3dd88","line":2158,"in_reply_to":"5a74a57a_6e3b2f9d","updated":"2016-11-30 16:50:23.000000000","message":"Done","commit_id":"0e598f09f85989a9caf222d7e7318260bbf75e0b"},{"author":{"_account_id":14525,"name":"Vasyl Saienko","email":"vsaienko@mirantis.com","username":"vsaienko"},"change_message_id":"484c8b6e4db6139d19f3cda1878997a5bd99c9d7","unresolved":false,"context_lines":[{"line_number":1708,"context_line":"                                   exception.MACAlreadyExists,"},{"line_number":1709,"context_line":"                                   exception.InvalidState,"},{"line_number":1710,"context_line":"                                   exception.FailedToUpdateDHCPOptOnPort,"},{"line_number":1711,"context_line":"                                   exception.Conflict)"},{"line_number":1712,"context_line":"    def update_port(self, context, port_obj):"},{"line_number":1713,"context_line":"        \"\"\"Update a port."},{"line_number":1714,"context_line":""}],"source_content_type":"text/x-python","patch_set":4,"id":"3a71b18c_4ef4d786","line":1711,"updated":"2016-12-07 14:13:18.000000000","message":"network.validate() may raise InvalidParameterValue, NetworkError and MissingParameterValue","commit_id":"6bb053e4543435e47d46a189c3d0a878931fe2c6"},{"author":{"_account_id":6637,"name":"Sam Betts","email":"sam@code-smash.net","username":"sambetts"},"change_message_id":"1560af2e8b6b238f827607663dd18df6385de585","unresolved":false,"context_lines":[{"line_number":1708,"context_line":"                                   exception.MACAlreadyExists,"},{"line_number":1709,"context_line":"                                   exception.InvalidState,"},{"line_number":1710,"context_line":"                                   exception.FailedToUpdateDHCPOptOnPort,"},{"line_number":1711,"context_line":"                                   exception.Conflict)"},{"line_number":1712,"context_line":"    def update_port(self, context, port_obj):"},{"line_number":1713,"context_line":"        \"\"\"Update a port."},{"line_number":1714,"context_line":""}],"source_content_type":"text/x-python","patch_set":4,"id":"3a71b18c_1b5586c5","line":1711,"in_reply_to":"3a71b18c_4ef4d786","updated":"2016-12-08 16:26:14.000000000","message":"Done","commit_id":"6bb053e4543435e47d46a189c3d0a878931fe2c6"},{"author":{"_account_id":6618,"name":"Ruby Loo","email":"opensrloo@gmail.com","username":"rloo"},"change_message_id":"46f97a0717f1dd807d79284a4883b272297a643f","unresolved":false,"context_lines":[{"line_number":2304,"context_line":"                                  purpose\u003d\u0027heartbeat\u0027) as task:"},{"line_number":2305,"context_line":"            task.spawn_after(self._spawn_worker, task.driver.deploy.heartbeat,"},{"line_number":2306,"context_line":"                             task, callback_url)"},{"line_number":2307,"context_line":""},{"line_number":2308,"context_line":"    @messaging.expected_exceptions(exception.NodeLocked,"},{"line_number":2309,"context_line":"                                   exception.NetworkError,"},{"line_number":2310,"context_line":"                                   exception.InvalidParameterValue)"}],"source_content_type":"text/x-python","patch_set":4,"id":"3a71b18c_8f1c1f15","line":2307,"updated":"2016-12-07 18:18:15.000000000","message":"We probably want to add @METRICS.timer() to these 3 methods.","commit_id":"6bb053e4543435e47d46a189c3d0a878931fe2c6"},{"author":{"_account_id":6637,"name":"Sam Betts","email":"sam@code-smash.net","username":"sambetts"},"change_message_id":"1560af2e8b6b238f827607663dd18df6385de585","unresolved":false,"context_lines":[{"line_number":2304,"context_line":"                                  purpose\u003d\u0027heartbeat\u0027) as task:"},{"line_number":2305,"context_line":"            task.spawn_after(self._spawn_worker, task.driver.deploy.heartbeat,"},{"line_number":2306,"context_line":"                             task, callback_url)"},{"line_number":2307,"context_line":""},{"line_number":2308,"context_line":"    @messaging.expected_exceptions(exception.NodeLocked,"},{"line_number":2309,"context_line":"                                   exception.NetworkError,"},{"line_number":2310,"context_line":"                                   exception.InvalidParameterValue)"}],"source_content_type":"text/x-python","patch_set":4,"id":"3a71b18c_dbc94e5c","line":2307,"in_reply_to":"3a71b18c_8f1c1f15","updated":"2016-12-08 16:26:14.000000000","message":"Done","commit_id":"6bb053e4543435e47d46a189c3d0a878931fe2c6"},{"author":{"_account_id":14525,"name":"Vasyl Saienko","email":"vsaienko@mirantis.com","username":"vsaienko"},"change_message_id":"484c8b6e4db6139d19f3cda1878997a5bd99c9d7","unresolved":false,"context_lines":[{"line_number":2307,"context_line":""},{"line_number":2308,"context_line":"    @messaging.expected_exceptions(exception.NodeLocked,"},{"line_number":2309,"context_line":"                                   exception.NetworkError,"},{"line_number":2310,"context_line":"                                   exception.InvalidParameterValue)"},{"line_number":2311,"context_line":"    def vif_list(self, context, node_id):"},{"line_number":2312,"context_line":"        with task_manager.acquire(context, node_id,"},{"line_number":2313,"context_line":"                                  purpose\u003d\u0027list vifs\u0027) as task:"}],"source_content_type":"text/x-python","patch_set":4,"id":"3a71b18c_4e221703","line":2310,"updated":"2016-12-07 14:13:18.000000000","message":"MissingParameterValue may be raised by validate()","commit_id":"6bb053e4543435e47d46a189c3d0a878931fe2c6"},{"author":{"_account_id":6637,"name":"Sam Betts","email":"sam@code-smash.net","username":"sambetts"},"change_message_id":"1560af2e8b6b238f827607663dd18df6385de585","unresolved":false,"context_lines":[{"line_number":2307,"context_line":""},{"line_number":2308,"context_line":"    @messaging.expected_exceptions(exception.NodeLocked,"},{"line_number":2309,"context_line":"                                   exception.NetworkError,"},{"line_number":2310,"context_line":"                                   exception.InvalidParameterValue)"},{"line_number":2311,"context_line":"    def vif_list(self, context, node_id):"},{"line_number":2312,"context_line":"        with task_manager.acquire(context, node_id,"},{"line_number":2313,"context_line":"                                  purpose\u003d\u0027list vifs\u0027) as task:"}],"source_content_type":"text/x-python","patch_set":4,"id":"3a71b18c_fb6e0a95","line":2310,"in_reply_to":"3a71b18c_4e221703","updated":"2016-12-08 16:26:14.000000000","message":"MissingParameterValue is a subclass of InvalidParameterValue, I originally had that in this list, but was told it was unnecessary in an earlier patchset.","commit_id":"6bb053e4543435e47d46a189c3d0a878931fe2c6"},{"author":{"_account_id":6618,"name":"Ruby Loo","email":"opensrloo@gmail.com","username":"rloo"},"change_message_id":"46f97a0717f1dd807d79284a4883b272297a643f","unresolved":false,"context_lines":[{"line_number":2308,"context_line":"    @messaging.expected_exceptions(exception.NodeLocked,"},{"line_number":2309,"context_line":"                                   exception.NetworkError,"},{"line_number":2310,"context_line":"                                   exception.InvalidParameterValue)"},{"line_number":2311,"context_line":"    def vif_list(self, context, node_id):"},{"line_number":2312,"context_line":"        with task_manager.acquire(context, node_id,"},{"line_number":2313,"context_line":"                                  purpose\u003d\u0027list vifs\u0027) as task:"},{"line_number":2314,"context_line":"            task.driver.network.validate(task)"}],"source_content_type":"text/x-python","patch_set":4,"id":"3a71b18c_4fb847e6","line":2311,"updated":"2016-12-07 18:18:15.000000000","message":"Please add docstrings to the three methods","commit_id":"6bb053e4543435e47d46a189c3d0a878931fe2c6"},{"author":{"_account_id":6637,"name":"Sam Betts","email":"sam@code-smash.net","username":"sambetts"},"change_message_id":"1560af2e8b6b238f827607663dd18df6385de585","unresolved":false,"context_lines":[{"line_number":2308,"context_line":"    @messaging.expected_exceptions(exception.NodeLocked,"},{"line_number":2309,"context_line":"                                   exception.NetworkError,"},{"line_number":2310,"context_line":"                                   exception.InvalidParameterValue)"},{"line_number":2311,"context_line":"    def vif_list(self, context, node_id):"},{"line_number":2312,"context_line":"        with task_manager.acquire(context, node_id,"},{"line_number":2313,"context_line":"                                  purpose\u003d\u0027list vifs\u0027) as task:"},{"line_number":2314,"context_line":"            task.driver.network.validate(task)"}],"source_content_type":"text/x-python","patch_set":4,"id":"3a71b18c_7b1cba77","line":2311,"in_reply_to":"3a71b18c_4fb847e6","updated":"2016-12-08 16:26:14.000000000","message":"Done","commit_id":"6bb053e4543435e47d46a189c3d0a878931fe2c6"},{"author":{"_account_id":6618,"name":"Ruby Loo","email":"opensrloo@gmail.com","username":"rloo"},"change_message_id":"46f97a0717f1dd807d79284a4883b272297a643f","unresolved":false,"context_lines":[{"line_number":2309,"context_line":"                                   exception.NetworkError,"},{"line_number":2310,"context_line":"                                   exception.InvalidParameterValue)"},{"line_number":2311,"context_line":"    def vif_list(self, context, node_id):"},{"line_number":2312,"context_line":"        with task_manager.acquire(context, node_id,"},{"line_number":2313,"context_line":"                                  purpose\u003d\u0027list vifs\u0027) as task:"},{"line_number":2314,"context_line":"            task.driver.network.validate(task)"},{"line_number":2315,"context_line":"            return task.driver.network.vif_list(task)"}],"source_content_type":"text/x-python","patch_set":4,"id":"3a71b18c_ef4bd35d","line":2312,"updated":"2016-12-07 18:18:15.000000000","message":"we can do shared\u003dTrue here?","commit_id":"6bb053e4543435e47d46a189c3d0a878931fe2c6"},{"author":{"_account_id":6637,"name":"Sam Betts","email":"sam@code-smash.net","username":"sambetts"},"change_message_id":"1560af2e8b6b238f827607663dd18df6385de585","unresolved":false,"context_lines":[{"line_number":2309,"context_line":"                                   exception.NetworkError,"},{"line_number":2310,"context_line":"                                   exception.InvalidParameterValue)"},{"line_number":2311,"context_line":"    def vif_list(self, context, node_id):"},{"line_number":2312,"context_line":"        with task_manager.acquire(context, node_id,"},{"line_number":2313,"context_line":"                                  purpose\u003d\u0027list vifs\u0027) as task:"},{"line_number":2314,"context_line":"            task.driver.network.validate(task)"},{"line_number":2315,"context_line":"            return task.driver.network.vif_list(task)"}],"source_content_type":"text/x-python","patch_set":4,"id":"3a71b18c_bb165253","line":2312,"in_reply_to":"3a71b18c_ef4bd35d","updated":"2016-12-08 16:26:14.000000000","message":"Done","commit_id":"6bb053e4543435e47d46a189c3d0a878931fe2c6"},{"author":{"_account_id":14525,"name":"Vasyl Saienko","email":"vsaienko@mirantis.com","username":"vsaienko"},"change_message_id":"484c8b6e4db6139d19f3cda1878997a5bd99c9d7","unresolved":false,"context_lines":[{"line_number":2316,"context_line":""},{"line_number":2317,"context_line":"    @messaging.expected_exceptions(exception.NodeLocked,"},{"line_number":2318,"context_line":"                                   exception.NetworkError,"},{"line_number":2319,"context_line":"                                   exception.InvalidParameterValue)"},{"line_number":2320,"context_line":"    def vif_attach(self, context, node_id, vif_obj):"},{"line_number":2321,"context_line":"        with task_manager.acquire(context, node_id,"},{"line_number":2322,"context_line":"                                  purpose\u003d\u0027attach vif\u0027) as task:"}],"source_content_type":"text/x-python","patch_set":4,"id":"3a71b18c_ce7c67ee","line":2319,"updated":"2016-12-07 14:13:18.000000000","message":"ditto about MissingParameterValue","commit_id":"6bb053e4543435e47d46a189c3d0a878931fe2c6"},{"author":{"_account_id":6637,"name":"Sam Betts","email":"sam@code-smash.net","username":"sambetts"},"change_message_id":"1560af2e8b6b238f827607663dd18df6385de585","unresolved":false,"context_lines":[{"line_number":2316,"context_line":""},{"line_number":2317,"context_line":"    @messaging.expected_exceptions(exception.NodeLocked,"},{"line_number":2318,"context_line":"                                   exception.NetworkError,"},{"line_number":2319,"context_line":"                                   exception.InvalidParameterValue)"},{"line_number":2320,"context_line":"    def vif_attach(self, context, node_id, vif_obj):"},{"line_number":2321,"context_line":"        with task_manager.acquire(context, node_id,"},{"line_number":2322,"context_line":"                                  purpose\u003d\u0027attach vif\u0027) as task:"}],"source_content_type":"text/x-python","patch_set":4,"id":"3a71b18c_db0b0e2a","line":2319,"in_reply_to":"3a71b18c_ce7c67ee","updated":"2016-12-08 16:26:14.000000000","message":"See above.","commit_id":"6bb053e4543435e47d46a189c3d0a878931fe2c6"},{"author":{"_account_id":14525,"name":"Vasyl Saienko","email":"vsaienko@mirantis.com","username":"vsaienko"},"change_message_id":"484c8b6e4db6139d19f3cda1878997a5bd99c9d7","unresolved":false,"context_lines":[{"line_number":2323,"context_line":"            task.driver.network.validate(task)"},{"line_number":2324,"context_line":"            return task.driver.network.vif_attach(task, vif_obj)"},{"line_number":2325,"context_line":""},{"line_number":2326,"context_line":"    @messaging.expected_exceptions(exception.NodeLocked,"},{"line_number":2327,"context_line":"                                   exception.NetworkError,"},{"line_number":2328,"context_line":"                                   exception.InvalidParameterValue)"},{"line_number":2329,"context_line":"    def vif_detach(self, context, node_id, vif_id):"}],"source_content_type":"text/x-python","patch_set":4,"id":"3a71b18c_4e693725","line":2326,"updated":"2016-12-07 14:13:18.000000000","message":"ditto about MissingParameterValue","commit_id":"6bb053e4543435e47d46a189c3d0a878931fe2c6"},{"author":{"_account_id":6637,"name":"Sam Betts","email":"sam@code-smash.net","username":"sambetts"},"change_message_id":"1560af2e8b6b238f827607663dd18df6385de585","unresolved":false,"context_lines":[{"line_number":2323,"context_line":"            task.driver.network.validate(task)"},{"line_number":2324,"context_line":"            return task.driver.network.vif_attach(task, vif_obj)"},{"line_number":2325,"context_line":""},{"line_number":2326,"context_line":"    @messaging.expected_exceptions(exception.NodeLocked,"},{"line_number":2327,"context_line":"                                   exception.NetworkError,"},{"line_number":2328,"context_line":"                                   exception.InvalidParameterValue)"},{"line_number":2329,"context_line":"    def vif_detach(self, context, node_id, vif_id):"}],"source_content_type":"text/x-python","patch_set":4,"id":"3a71b18c_1b066620","line":2326,"in_reply_to":"3a71b18c_4e693725","updated":"2016-12-08 16:26:14.000000000","message":"See above.","commit_id":"6bb053e4543435e47d46a189c3d0a878931fe2c6"},{"author":{"_account_id":6618,"name":"Ruby Loo","email":"opensrloo@gmail.com","username":"rloo"},"change_message_id":"ace1f09bb663edd3e3955a726329bd4215d6c0c3","unresolved":false,"context_lines":[{"line_number":2315,"context_line":"        \"\"\"List attached VIFs for a node"},{"line_number":2316,"context_line":""},{"line_number":2317,"context_line":"        :param context: request context."},{"line_number":2318,"context_line":"        :param node_id: node id or uuid."},{"line_number":2319,"context_line":"        :raises NodeLocked, if node has an exclusive locked held on it"},{"line_number":2320,"context_line":"        :raises Networkerror, if something goes wrong during list the vifs"},{"line_number":2321,"context_line":"        :raises InvalidParameterValue, if a parameter is wrong/missing thats"}],"source_content_type":"text/x-python","patch_set":5,"id":"1a6eadb0_d1907598","line":2318,"updated":"2016-12-13 02:11:27.000000000","message":"one of these daze I\u0027m going to go through and change all id and uuid to ID and UUID :)\n\nIn the meantime, s/id/ID/. s/uuid/UUID/.","commit_id":"4b2b88f24bddd7cdcfb338de2b78cfafc2e661b5"},{"author":{"_account_id":14525,"name":"Vasyl Saienko","email":"vsaienko@mirantis.com","username":"vsaienko"},"change_message_id":"bb69a02230b1320ad38692f8299bb32194ded6a3","unresolved":false,"context_lines":[{"line_number":2315,"context_line":"        \"\"\"List attached VIFs for a node"},{"line_number":2316,"context_line":""},{"line_number":2317,"context_line":"        :param context: request context."},{"line_number":2318,"context_line":"        :param node_id: node id or uuid."},{"line_number":2319,"context_line":"        :raises NodeLocked, if node has an exclusive locked held on it"},{"line_number":2320,"context_line":"        :raises Networkerror, if something goes wrong during list the vifs"},{"line_number":2321,"context_line":"        :raises InvalidParameterValue, if a parameter is wrong/missing thats"}],"source_content_type":"text/x-python","patch_set":5,"id":"1a6eadb0_8bf4aff2","line":2318,"in_reply_to":"1a6eadb0_d1907598","updated":"2016-12-14 16:18:30.000000000","message":"Done","commit_id":"4b2b88f24bddd7cdcfb338de2b78cfafc2e661b5"},{"author":{"_account_id":19686,"name":"Ramamani Yeleswarapu","email":"ramamani.yeleswarapu@intel.com","username":"Rama_Y"},"change_message_id":"5ce12726d32603a824458ce718844812e591e2d7","unresolved":false,"context_lines":[{"line_number":2316,"context_line":""},{"line_number":2317,"context_line":"        :param context: request context."},{"line_number":2318,"context_line":"        :param node_id: node id or uuid."},{"line_number":2319,"context_line":"        :raises NodeLocked, if node has an exclusive locked held on it"},{"line_number":2320,"context_line":"        :raises Networkerror, if something goes wrong during list the vifs"},{"line_number":2321,"context_line":"        :raises InvalidParameterValue, if a parameter is wrong/missing thats"},{"line_number":2322,"context_line":"            required for vif list"}],"source_content_type":"text/x-python","patch_set":5,"id":"3a71b18c_58e41ddf","line":2319,"updated":"2016-12-09 23:11:01.000000000","message":"s/raises/raises:\n\ns/locked/lock","commit_id":"4b2b88f24bddd7cdcfb338de2b78cfafc2e661b5"},{"author":{"_account_id":14525,"name":"Vasyl Saienko","email":"vsaienko@mirantis.com","username":"vsaienko"},"change_message_id":"bb69a02230b1320ad38692f8299bb32194ded6a3","unresolved":false,"context_lines":[{"line_number":2316,"context_line":""},{"line_number":2317,"context_line":"        :param context: request context."},{"line_number":2318,"context_line":"        :param node_id: node id or uuid."},{"line_number":2319,"context_line":"        :raises NodeLocked, if node has an exclusive locked held on it"},{"line_number":2320,"context_line":"        :raises Networkerror, if something goes wrong during list the vifs"},{"line_number":2321,"context_line":"        :raises InvalidParameterValue, if a parameter is wrong/missing thats"},{"line_number":2322,"context_line":"            required for vif list"}],"source_content_type":"text/x-python","patch_set":5,"id":"1a6eadb0_8bcbcfa4","line":2319,"in_reply_to":"3a71b18c_58e41ddf","updated":"2016-12-14 16:18:30.000000000","message":"Done","commit_id":"4b2b88f24bddd7cdcfb338de2b78cfafc2e661b5"},{"author":{"_account_id":19686,"name":"Ramamani Yeleswarapu","email":"ramamani.yeleswarapu@intel.com","username":"Rama_Y"},"change_message_id":"5ce12726d32603a824458ce718844812e591e2d7","unresolved":false,"context_lines":[{"line_number":2317,"context_line":"        :param context: request context."},{"line_number":2318,"context_line":"        :param node_id: node id or uuid."},{"line_number":2319,"context_line":"        :raises NodeLocked, if node has an exclusive locked held on it"},{"line_number":2320,"context_line":"        :raises Networkerror, if something goes wrong during list the vifs"},{"line_number":2321,"context_line":"        :raises InvalidParameterValue, if a parameter is wrong/missing thats"},{"line_number":2322,"context_line":"            required for vif list"},{"line_number":2323,"context_line":"        \"\"\""}],"source_content_type":"text/x-python","patch_set":5,"id":"3a71b18c_b8cff154","line":2320,"updated":"2016-12-09 23:11:01.000000000","message":"s/raises/raises:\ns/Networkerror/NetworkError\nlisting?\ns/vifs/VIFs","commit_id":"4b2b88f24bddd7cdcfb338de2b78cfafc2e661b5"},{"author":{"_account_id":14525,"name":"Vasyl Saienko","email":"vsaienko@mirantis.com","username":"vsaienko"},"change_message_id":"bb69a02230b1320ad38692f8299bb32194ded6a3","unresolved":false,"context_lines":[{"line_number":2317,"context_line":"        :param context: request context."},{"line_number":2318,"context_line":"        :param node_id: node id or uuid."},{"line_number":2319,"context_line":"        :raises NodeLocked, if node has an exclusive locked held on it"},{"line_number":2320,"context_line":"        :raises Networkerror, if something goes wrong during list the vifs"},{"line_number":2321,"context_line":"        :raises InvalidParameterValue, if a parameter is wrong/missing thats"},{"line_number":2322,"context_line":"            required for vif list"},{"line_number":2323,"context_line":"        \"\"\""}],"source_content_type":"text/x-python","patch_set":5,"id":"1a6eadb0_cb21474f","line":2320,"in_reply_to":"3a71b18c_b8cff154","updated":"2016-12-14 16:18:30.000000000","message":"Done","commit_id":"4b2b88f24bddd7cdcfb338de2b78cfafc2e661b5"},{"author":{"_account_id":19686,"name":"Ramamani Yeleswarapu","email":"ramamani.yeleswarapu@intel.com","username":"Rama_Y"},"change_message_id":"5ce12726d32603a824458ce718844812e591e2d7","unresolved":false,"context_lines":[{"line_number":2318,"context_line":"        :param node_id: node id or uuid."},{"line_number":2319,"context_line":"        :raises NodeLocked, if node has an exclusive locked held on it"},{"line_number":2320,"context_line":"        :raises Networkerror, if something goes wrong during list the vifs"},{"line_number":2321,"context_line":"        :raises InvalidParameterValue, if a parameter is wrong/missing thats"},{"line_number":2322,"context_line":"            required for vif list"},{"line_number":2323,"context_line":"        \"\"\""},{"line_number":2324,"context_line":"        with task_manager.acquire(context, node_id,"}],"source_content_type":"text/x-python","patch_set":5,"id":"3a71b18c_d8d82d21","line":2321,"updated":"2016-12-09 23:11:01.000000000","message":"s/raises/raises:\ns/thats/that\u0027s","commit_id":"4b2b88f24bddd7cdcfb338de2b78cfafc2e661b5"},{"author":{"_account_id":14525,"name":"Vasyl Saienko","email":"vsaienko@mirantis.com","username":"vsaienko"},"change_message_id":"bb69a02230b1320ad38692f8299bb32194ded6a3","unresolved":false,"context_lines":[{"line_number":2318,"context_line":"        :param node_id: node id or uuid."},{"line_number":2319,"context_line":"        :raises NodeLocked, if node has an exclusive locked held on it"},{"line_number":2320,"context_line":"        :raises Networkerror, if something goes wrong during list the vifs"},{"line_number":2321,"context_line":"        :raises InvalidParameterValue, if a parameter is wrong/missing thats"},{"line_number":2322,"context_line":"            required for vif list"},{"line_number":2323,"context_line":"        \"\"\""},{"line_number":2324,"context_line":"        with task_manager.acquire(context, node_id,"}],"source_content_type":"text/x-python","patch_set":5,"id":"1a6eadb0_cb96a74b","line":2321,"in_reply_to":"3a71b18c_d8d82d21","updated":"2016-12-14 16:18:30.000000000","message":"Done","commit_id":"4b2b88f24bddd7cdcfb338de2b78cfafc2e661b5"},{"author":{"_account_id":19686,"name":"Ramamani Yeleswarapu","email":"ramamani.yeleswarapu@intel.com","username":"Rama_Y"},"change_message_id":"5ce12726d32603a824458ce718844812e591e2d7","unresolved":false,"context_lines":[{"line_number":2319,"context_line":"        :raises NodeLocked, if node has an exclusive locked held on it"},{"line_number":2320,"context_line":"        :raises Networkerror, if something goes wrong during list the vifs"},{"line_number":2321,"context_line":"        :raises InvalidParameterValue, if a parameter is wrong/missing thats"},{"line_number":2322,"context_line":"            required for vif list"},{"line_number":2323,"context_line":"        \"\"\""},{"line_number":2324,"context_line":"        with task_manager.acquire(context, node_id,"},{"line_number":2325,"context_line":"                                  purpose\u003d\u0027list vifs\u0027,"}],"source_content_type":"text/x-python","patch_set":5,"id":"3a71b18c_1819c588","line":2322,"updated":"2016-12-09 23:11:01.000000000","message":"s/vifs/VIFs","commit_id":"4b2b88f24bddd7cdcfb338de2b78cfafc2e661b5"},{"author":{"_account_id":14525,"name":"Vasyl Saienko","email":"vsaienko@mirantis.com","username":"vsaienko"},"change_message_id":"bb69a02230b1320ad38692f8299bb32194ded6a3","unresolved":false,"context_lines":[{"line_number":2319,"context_line":"        :raises NodeLocked, if node has an exclusive locked held on it"},{"line_number":2320,"context_line":"        :raises Networkerror, if something goes wrong during list the vifs"},{"line_number":2321,"context_line":"        :raises InvalidParameterValue, if a parameter is wrong/missing thats"},{"line_number":2322,"context_line":"            required for vif list"},{"line_number":2323,"context_line":"        \"\"\""},{"line_number":2324,"context_line":"        with task_manager.acquire(context, node_id,"},{"line_number":2325,"context_line":"                                  purpose\u003d\u0027list vifs\u0027,"}],"source_content_type":"text/x-python","patch_set":5,"id":"1a6eadb0_6b8cb335","line":2322,"in_reply_to":"3a71b18c_1819c588","updated":"2016-12-14 16:18:30.000000000","message":"Done","commit_id":"4b2b88f24bddd7cdcfb338de2b78cfafc2e661b5"},{"author":{"_account_id":6618,"name":"Ruby Loo","email":"opensrloo@gmail.com","username":"rloo"},"change_message_id":"ace1f09bb663edd3e3955a726329bd4215d6c0c3","unresolved":false,"context_lines":[{"line_number":2335,"context_line":"        \"\"\"Attach a VIF to a node"},{"line_number":2336,"context_line":""},{"line_number":2337,"context_line":"        :param context: request context."},{"line_number":2338,"context_line":"        :param node_id: node id or uuid."},{"line_number":2339,"context_line":"        :param vif_obj: An object representing a VIF."},{"line_number":2340,"context_line":"        :raises NodeLocked, if node has an exclusive locked held on it"},{"line_number":2341,"context_line":"        :raises Networkerror, if something goes wrong during attaching the vif"}],"source_content_type":"text/x-python","patch_set":5,"id":"1a6eadb0_11d02d53","line":2338,"updated":"2016-12-13 02:11:27.000000000","message":"ditto","commit_id":"4b2b88f24bddd7cdcfb338de2b78cfafc2e661b5"},{"author":{"_account_id":14525,"name":"Vasyl Saienko","email":"vsaienko@mirantis.com","username":"vsaienko"},"change_message_id":"bb69a02230b1320ad38692f8299bb32194ded6a3","unresolved":false,"context_lines":[{"line_number":2335,"context_line":"        \"\"\"Attach a VIF to a node"},{"line_number":2336,"context_line":""},{"line_number":2337,"context_line":"        :param context: request context."},{"line_number":2338,"context_line":"        :param node_id: node id or uuid."},{"line_number":2339,"context_line":"        :param vif_obj: An object representing a VIF."},{"line_number":2340,"context_line":"        :raises NodeLocked, if node has an exclusive locked held on it"},{"line_number":2341,"context_line":"        :raises Networkerror, if something goes wrong during attaching the vif"}],"source_content_type":"text/x-python","patch_set":5,"id":"1a6eadb0_4bb7f7d7","line":2338,"in_reply_to":"1a6eadb0_11d02d53","updated":"2016-12-14 16:18:30.000000000","message":"Done","commit_id":"4b2b88f24bddd7cdcfb338de2b78cfafc2e661b5"},{"author":{"_account_id":19686,"name":"Ramamani Yeleswarapu","email":"ramamani.yeleswarapu@intel.com","username":"Rama_Y"},"change_message_id":"5ce12726d32603a824458ce718844812e591e2d7","unresolved":false,"context_lines":[{"line_number":2337,"context_line":"        :param context: request context."},{"line_number":2338,"context_line":"        :param node_id: node id or uuid."},{"line_number":2339,"context_line":"        :param vif_obj: An object representing a VIF."},{"line_number":2340,"context_line":"        :raises NodeLocked, if node has an exclusive locked held on it"},{"line_number":2341,"context_line":"        :raises Networkerror, if something goes wrong during attaching the vif"},{"line_number":2342,"context_line":"        :raises InvalidParameterValue, if a parameter is wrong/missing thats"},{"line_number":2343,"context_line":"            required for vif attach"},{"line_number":2344,"context_line":"        \"\"\""},{"line_number":2345,"context_line":"        with task_manager.acquire(context, node_id,"},{"line_number":2346,"context_line":"                                  purpose\u003d\u0027attach vif\u0027) as task:"}],"source_content_type":"text/x-python","patch_set":5,"id":"3a71b18c_d31ace6e","line":2343,"range":{"start_line":2340,"start_character":0,"end_line":2343,"end_character":35},"updated":"2016-12-09 23:11:01.000000000","message":"same comments as above","commit_id":"4b2b88f24bddd7cdcfb338de2b78cfafc2e661b5"},{"author":{"_account_id":14525,"name":"Vasyl Saienko","email":"vsaienko@mirantis.com","username":"vsaienko"},"change_message_id":"bb69a02230b1320ad38692f8299bb32194ded6a3","unresolved":false,"context_lines":[{"line_number":2337,"context_line":"        :param context: request context."},{"line_number":2338,"context_line":"        :param node_id: node id or uuid."},{"line_number":2339,"context_line":"        :param vif_obj: An object representing a VIF."},{"line_number":2340,"context_line":"        :raises NodeLocked, if node has an exclusive locked held on it"},{"line_number":2341,"context_line":"        :raises Networkerror, if something goes wrong during attaching the vif"},{"line_number":2342,"context_line":"        :raises InvalidParameterValue, if a parameter is wrong/missing thats"},{"line_number":2343,"context_line":"            required for vif attach"},{"line_number":2344,"context_line":"        \"\"\""},{"line_number":2345,"context_line":"        with task_manager.acquire(context, node_id,"},{"line_number":2346,"context_line":"                                  purpose\u003d\u0027attach vif\u0027) as task:"}],"source_content_type":"text/x-python","patch_set":5,"id":"1a6eadb0_6bbaf3c1","line":2343,"range":{"start_line":2340,"start_character":0,"end_line":2343,"end_character":35},"in_reply_to":"3a71b18c_d31ace6e","updated":"2016-12-14 16:18:30.000000000","message":"Done","commit_id":"4b2b88f24bddd7cdcfb338de2b78cfafc2e661b5"},{"author":{"_account_id":6618,"name":"Ruby Loo","email":"opensrloo@gmail.com","username":"rloo"},"change_message_id":"ace1f09bb663edd3e3955a726329bd4215d6c0c3","unresolved":false,"context_lines":[{"line_number":2355,"context_line":"        \"\"\"Detach a VIF from a node"},{"line_number":2356,"context_line":""},{"line_number":2357,"context_line":"        :param context: request context."},{"line_number":2358,"context_line":"        :param node_id: node id or uuid."},{"line_number":2359,"context_line":"        :param vif_id: A VIF ID."},{"line_number":2360,"context_line":"        :raises NodeLocked, if node has an exclusive locked held on it"},{"line_number":2361,"context_line":"        :raises Networkerror, if something goes wrong during detaching the vif"}],"source_content_type":"text/x-python","patch_set":5,"id":"1a6eadb0_51caa5a2","line":2358,"updated":"2016-12-13 02:11:27.000000000","message":"ditto","commit_id":"4b2b88f24bddd7cdcfb338de2b78cfafc2e661b5"},{"author":{"_account_id":14525,"name":"Vasyl Saienko","email":"vsaienko@mirantis.com","username":"vsaienko"},"change_message_id":"bb69a02230b1320ad38692f8299bb32194ded6a3","unresolved":false,"context_lines":[{"line_number":2355,"context_line":"        \"\"\"Detach a VIF from a node"},{"line_number":2356,"context_line":""},{"line_number":2357,"context_line":"        :param context: request context."},{"line_number":2358,"context_line":"        :param node_id: node id or uuid."},{"line_number":2359,"context_line":"        :param vif_id: A VIF ID."},{"line_number":2360,"context_line":"        :raises NodeLocked, if node has an exclusive locked held on it"},{"line_number":2361,"context_line":"        :raises Networkerror, if something goes wrong during detaching the vif"}],"source_content_type":"text/x-python","patch_set":5,"id":"1a6eadb0_4bde1712","line":2358,"in_reply_to":"1a6eadb0_51caa5a2","updated":"2016-12-14 16:18:30.000000000","message":"Done","commit_id":"4b2b88f24bddd7cdcfb338de2b78cfafc2e661b5"},{"author":{"_account_id":19686,"name":"Ramamani Yeleswarapu","email":"ramamani.yeleswarapu@intel.com","username":"Rama_Y"},"change_message_id":"5ce12726d32603a824458ce718844812e591e2d7","unresolved":false,"context_lines":[{"line_number":2357,"context_line":"        :param context: request context."},{"line_number":2358,"context_line":"        :param node_id: node id or uuid."},{"line_number":2359,"context_line":"        :param vif_id: A VIF ID."},{"line_number":2360,"context_line":"        :raises NodeLocked, if node has an exclusive locked held on it"},{"line_number":2361,"context_line":"        :raises Networkerror, if something goes wrong during detaching the vif"},{"line_number":2362,"context_line":"        :raises InvalidParameterValue, if a parameter is wrong/missing thats"},{"line_number":2363,"context_line":"            required for vif detach"},{"line_number":2364,"context_line":"        \"\"\""},{"line_number":2365,"context_line":"        with task_manager.acquire(context, node_id,"},{"line_number":2366,"context_line":"                                  purpose\u003d\u0027detach vif\u0027) as task:"}],"source_content_type":"text/x-python","patch_set":5,"id":"3a71b18c_f32eea8a","line":2363,"range":{"start_line":2360,"start_character":0,"end_line":2363,"end_character":35},"updated":"2016-12-09 23:11:01.000000000","message":"same comments as above","commit_id":"4b2b88f24bddd7cdcfb338de2b78cfafc2e661b5"},{"author":{"_account_id":14525,"name":"Vasyl Saienko","email":"vsaienko@mirantis.com","username":"vsaienko"},"change_message_id":"bb69a02230b1320ad38692f8299bb32194ded6a3","unresolved":false,"context_lines":[{"line_number":2357,"context_line":"        :param context: request context."},{"line_number":2358,"context_line":"        :param node_id: node id or uuid."},{"line_number":2359,"context_line":"        :param vif_id: A VIF ID."},{"line_number":2360,"context_line":"        :raises NodeLocked, if node has an exclusive locked held on it"},{"line_number":2361,"context_line":"        :raises Networkerror, if something goes wrong during detaching the vif"},{"line_number":2362,"context_line":"        :raises InvalidParameterValue, if a parameter is wrong/missing thats"},{"line_number":2363,"context_line":"            required for vif detach"},{"line_number":2364,"context_line":"        \"\"\""},{"line_number":2365,"context_line":"        with task_manager.acquire(context, node_id,"},{"line_number":2366,"context_line":"                                  purpose\u003d\u0027detach vif\u0027) as task:"}],"source_content_type":"text/x-python","patch_set":5,"id":"1a6eadb0_6be113d0","line":2363,"range":{"start_line":2360,"start_character":0,"end_line":2363,"end_character":35},"in_reply_to":"3a71b18c_f32eea8a","updated":"2016-12-14 16:18:30.000000000","message":"Done","commit_id":"4b2b88f24bddd7cdcfb338de2b78cfafc2e661b5"},{"author":{"_account_id":6618,"name":"Ruby Loo","email":"opensrloo@gmail.com","username":"rloo"},"change_message_id":"dc19dba6cb113256a62e2e19a21d1528b5da2ef2","unresolved":false,"context_lines":[{"line_number":2291,"context_line":"        :raises: NodeLocked, if node has an exclusive lock held on it"},{"line_number":2292,"context_line":"        :raises: Networkerror, if something goes wrong during list the VIFs"},{"line_number":2293,"context_line":"        :raises: InvalidParameterValue, if a parameter is wrong/missing that\u0027s"},{"line_number":2294,"context_line":"            required for VIF list"},{"line_number":2295,"context_line":"        \"\"\""},{"line_number":2296,"context_line":"        with task_manager.acquire(context, node_id,"},{"line_number":2297,"context_line":"                                  purpose\u003d\u0027list vifs\u0027,"}],"source_content_type":"text/x-python","patch_set":6,"id":"1a6eadb0_0c2d0bfe","line":2294,"updated":"2016-12-14 20:14:29.000000000","message":":returns: list of VIF dictionaries; \u0027id\u0027 is one of the keys","commit_id":"e37a9a05f0646e83415de18a62222b971a67f1b8"},{"author":{"_account_id":14525,"name":"Vasyl Saienko","email":"vsaienko@mirantis.com","username":"vsaienko"},"change_message_id":"77160a764a8991090f1ab79c758f3ac3b2aa4c1d","unresolved":false,"context_lines":[{"line_number":2291,"context_line":"        :raises: NodeLocked, if node has an exclusive lock held on it"},{"line_number":2292,"context_line":"        :raises: Networkerror, if something goes wrong during list the VIFs"},{"line_number":2293,"context_line":"        :raises: InvalidParameterValue, if a parameter is wrong/missing that\u0027s"},{"line_number":2294,"context_line":"            required for VIF list"},{"line_number":2295,"context_line":"        \"\"\""},{"line_number":2296,"context_line":"        with task_manager.acquire(context, node_id,"},{"line_number":2297,"context_line":"                                  purpose\u003d\u0027list vifs\u0027,"}],"source_content_type":"text/x-python","patch_set":6,"id":"1a6eadb0_97d74d4a","line":2294,"in_reply_to":"1a6eadb0_0c2d0bfe","updated":"2016-12-15 12:05:35.000000000","message":"Done","commit_id":"e37a9a05f0646e83415de18a62222b971a67f1b8"},{"author":{"_account_id":6618,"name":"Ruby Loo","email":"opensrloo@gmail.com","username":"rloo"},"change_message_id":"dc19dba6cb113256a62e2e19a21d1528b5da2ef2","unresolved":false,"context_lines":[{"line_number":2303,"context_line":"    @messaging.expected_exceptions(exception.NodeLocked,"},{"line_number":2304,"context_line":"                                   exception.NetworkError,"},{"line_number":2305,"context_line":"                                   exception.InvalidParameterValue)"},{"line_number":2306,"context_line":"    def vif_attach(self, context, node_id, vif_obj):"},{"line_number":2307,"context_line":"        \"\"\"Attach a VIF to a node"},{"line_number":2308,"context_line":""},{"line_number":2309,"context_line":"        :param context: request context."}],"source_content_type":"text/x-python","patch_set":6,"id":"1a6eadb0_ac3ed725","line":2306,"updated":"2016-12-14 20:14:29.000000000","message":"s/vif_obj/vif_info/","commit_id":"e37a9a05f0646e83415de18a62222b971a67f1b8"},{"author":{"_account_id":14525,"name":"Vasyl Saienko","email":"vsaienko@mirantis.com","username":"vsaienko"},"change_message_id":"77160a764a8991090f1ab79c758f3ac3b2aa4c1d","unresolved":false,"context_lines":[{"line_number":2303,"context_line":"    @messaging.expected_exceptions(exception.NodeLocked,"},{"line_number":2304,"context_line":"                                   exception.NetworkError,"},{"line_number":2305,"context_line":"                                   exception.InvalidParameterValue)"},{"line_number":2306,"context_line":"    def vif_attach(self, context, node_id, vif_obj):"},{"line_number":2307,"context_line":"        \"\"\"Attach a VIF to a node"},{"line_number":2308,"context_line":""},{"line_number":2309,"context_line":"        :param context: request context."}],"source_content_type":"text/x-python","patch_set":6,"id":"1a6eadb0_17725d7b","line":2306,"in_reply_to":"1a6eadb0_ac3ed725","updated":"2016-12-15 12:05:35.000000000","message":"Done","commit_id":"e37a9a05f0646e83415de18a62222b971a67f1b8"},{"author":{"_account_id":6618,"name":"Ruby Loo","email":"opensrloo@gmail.com","username":"rloo"},"change_message_id":"dc19dba6cb113256a62e2e19a21d1528b5da2ef2","unresolved":false,"context_lines":[{"line_number":2308,"context_line":""},{"line_number":2309,"context_line":"        :param context: request context."},{"line_number":2310,"context_line":"        :param node_id: node ID or UUID."},{"line_number":2311,"context_line":"        :param vif_obj: An object representing a VIF."},{"line_number":2312,"context_line":"        :raises: NodeLocked, if node has an exclusive lock held on it"},{"line_number":2313,"context_line":"        :raises: Networkerror, if something goes wrong during attaching the VIF"},{"line_number":2314,"context_line":"        :raises: InvalidParameterValue, if a parameter is wrong/missing that\u0027s"}],"source_content_type":"text/x-python","patch_set":6,"id":"1a6eadb0_2c19e7d7","line":2311,"updated":"2016-12-14 20:14:29.000000000","message":"vif_info: ...dictionary...","commit_id":"e37a9a05f0646e83415de18a62222b971a67f1b8"},{"author":{"_account_id":14525,"name":"Vasyl Saienko","email":"vsaienko@mirantis.com","username":"vsaienko"},"change_message_id":"77160a764a8991090f1ab79c758f3ac3b2aa4c1d","unresolved":false,"context_lines":[{"line_number":2308,"context_line":""},{"line_number":2309,"context_line":"        :param context: request context."},{"line_number":2310,"context_line":"        :param node_id: node ID or UUID."},{"line_number":2311,"context_line":"        :param vif_obj: An object representing a VIF."},{"line_number":2312,"context_line":"        :raises: NodeLocked, if node has an exclusive lock held on it"},{"line_number":2313,"context_line":"        :raises: Networkerror, if something goes wrong during attaching the VIF"},{"line_number":2314,"context_line":"        :raises: InvalidParameterValue, if a parameter is wrong/missing that\u0027s"}],"source_content_type":"text/x-python","patch_set":6,"id":"1a6eadb0_770711ca","line":2311,"in_reply_to":"1a6eadb0_2c19e7d7","updated":"2016-12-15 12:05:35.000000000","message":"Done","commit_id":"e37a9a05f0646e83415de18a62222b971a67f1b8"},{"author":{"_account_id":12356,"name":"Vladyslav Drok","email":"vdrok@mirantis.com","username":"vdrok"},"change_message_id":"952ccf33b0e6ad428ae74e453871f53b331f4976","unresolved":false,"context_lines":[{"line_number":1788,"context_line":"                              \u0027connect\u0027: \u0027, \u0027.join(connectivity_attr),"},{"line_number":1789,"context_line":"                              \u0027allowed\u0027: \u0027, \u0027.join(allowed_update_states)})"},{"line_number":1790,"context_line":""},{"line_number":1791,"context_line":"            task.driver.network.validate(task)"},{"line_number":1792,"context_line":""},{"line_number":1793,"context_line":"            # Handle mac_address update and VIF attach/detach stuff."},{"line_number":1794,"context_line":"            task.driver.network.port_changed(task, port_obj)"}],"source_content_type":"text/x-python","patch_set":9,"id":"1a6eadb0_b44af525","line":1791,"updated":"2016-12-19 15:29:12.000000000","message":"It feels like that should be in the base patch, as well as the change on L1868.","commit_id":"18cbcedb62649c4c204c29c067fa5d15c38ac00c"},{"author":{"_account_id":14525,"name":"Vasyl Saienko","email":"vsaienko@mirantis.com","username":"vsaienko"},"change_message_id":"3be4ab36b5e83ff6a691c13090da0ab845ccc3f8","unresolved":false,"context_lines":[{"line_number":1788,"context_line":"                              \u0027connect\u0027: \u0027, \u0027.join(connectivity_attr),"},{"line_number":1789,"context_line":"                              \u0027allowed\u0027: \u0027, \u0027.join(allowed_update_states)})"},{"line_number":1790,"context_line":""},{"line_number":1791,"context_line":"            task.driver.network.validate(task)"},{"line_number":1792,"context_line":""},{"line_number":1793,"context_line":"            # Handle mac_address update and VIF attach/detach stuff."},{"line_number":1794,"context_line":"            task.driver.network.port_changed(task, port_obj)"}],"source_content_type":"text/x-python","patch_set":9,"id":"1a6eadb0_9cb977ef","line":1791,"in_reply_to":"1a6eadb0_b44af525","updated":"2016-12-20 16:59:17.000000000","message":"Done","commit_id":"18cbcedb62649c4c204c29c067fa5d15c38ac00c"},{"author":{"_account_id":12356,"name":"Vladyslav Drok","email":"vdrok@mirantis.com","username":"vdrok"},"change_message_id":"952ccf33b0e6ad428ae74e453871f53b331f4976","unresolved":false,"context_lines":[{"line_number":2309,"context_line":"        :param node_id: node ID or UUID."},{"line_number":2310,"context_line":"        :returns: List of VIF dictionaries, each dictionary will have an"},{"line_number":2311,"context_line":"            \u0027id\u0027 entry with the ID of the VIF."},{"line_number":2312,"context_line":"        :raises: NodeLocked, if node has an exclusive lock held on it"},{"line_number":2313,"context_line":"        :raises: Networkerror, if something goes wrong during list the VIFs"},{"line_number":2314,"context_line":"        :raises: InvalidParameterValue, if a parameter is wrong/missing that\u0027s"},{"line_number":2315,"context_line":"            required for VIF list"}],"source_content_type":"text/x-python","patch_set":9,"id":"1a6eadb0_74f21d08","line":2312,"range":{"start_line":2312,"start_character":8,"end_line":2312,"end_character":69},"updated":"2016-12-19 15:29:12.000000000","message":"No NodeLocked here, it\u0027s a shared lock.","commit_id":"18cbcedb62649c4c204c29c067fa5d15c38ac00c"},{"author":{"_account_id":13295,"name":"Mario Villaplana","email":"mario.villaplana@gmail.com","username":"mariojv"},"change_message_id":"432efac76e85c4c803f50638d2f871e26db0f5eb","unresolved":false,"context_lines":[{"line_number":2309,"context_line":"        :param node_id: node ID or UUID."},{"line_number":2310,"context_line":"        :returns: List of VIF dictionaries, each dictionary will have an"},{"line_number":2311,"context_line":"            \u0027id\u0027 entry with the ID of the VIF."},{"line_number":2312,"context_line":"        :raises: NodeLocked, if node has an exclusive lock held on it"},{"line_number":2313,"context_line":"        :raises: Networkerror, if something goes wrong during list the VIFs"},{"line_number":2314,"context_line":"        :raises: InvalidParameterValue, if a parameter is wrong/missing that\u0027s"},{"line_number":2315,"context_line":"            required for VIF list"}],"source_content_type":"text/x-python","patch_set":9,"id":"1a6eadb0_41e4733a","line":2312,"range":{"start_line":2312,"start_character":8,"end_line":2312,"end_character":69},"in_reply_to":"1a6eadb0_74f21d08","updated":"2016-12-19 21:50:03.000000000","message":"+1","commit_id":"18cbcedb62649c4c204c29c067fa5d15c38ac00c"},{"author":{"_account_id":14525,"name":"Vasyl Saienko","email":"vsaienko@mirantis.com","username":"vsaienko"},"change_message_id":"3be4ab36b5e83ff6a691c13090da0ab845ccc3f8","unresolved":false,"context_lines":[{"line_number":2309,"context_line":"        :param node_id: node ID or UUID."},{"line_number":2310,"context_line":"        :returns: List of VIF dictionaries, each dictionary will have an"},{"line_number":2311,"context_line":"            \u0027id\u0027 entry with the ID of the VIF."},{"line_number":2312,"context_line":"        :raises: NodeLocked, if node has an exclusive lock held on it"},{"line_number":2313,"context_line":"        :raises: Networkerror, if something goes wrong during list the VIFs"},{"line_number":2314,"context_line":"        :raises: InvalidParameterValue, if a parameter is wrong/missing that\u0027s"},{"line_number":2315,"context_line":"            required for VIF list"}],"source_content_type":"text/x-python","patch_set":9,"id":"1a6eadb0_2f44a219","line":2312,"range":{"start_line":2312,"start_character":8,"end_line":2312,"end_character":69},"in_reply_to":"1a6eadb0_74f21d08","updated":"2016-12-20 16:59:17.000000000","message":"Done","commit_id":"18cbcedb62649c4c204c29c067fa5d15c38ac00c"},{"author":{"_account_id":13295,"name":"Mario Villaplana","email":"mario.villaplana@gmail.com","username":"mariojv"},"change_message_id":"432efac76e85c4c803f50638d2f871e26db0f5eb","unresolved":false,"context_lines":[{"line_number":2310,"context_line":"        :returns: List of VIF dictionaries, each dictionary will have an"},{"line_number":2311,"context_line":"            \u0027id\u0027 entry with the ID of the VIF."},{"line_number":2312,"context_line":"        :raises: NodeLocked, if node has an exclusive lock held on it"},{"line_number":2313,"context_line":"        :raises: Networkerror, if something goes wrong during list the VIFs"},{"line_number":2314,"context_line":"        :raises: InvalidParameterValue, if a parameter is wrong/missing that\u0027s"},{"line_number":2315,"context_line":"            required for VIF list"},{"line_number":2316,"context_line":"        \"\"\""}],"source_content_type":"text/x-python","patch_set":9,"id":"1a6eadb0_81d4cb47","line":2313,"range":{"start_line":2313,"start_character":24,"end_line":2313,"end_character":25},"updated":"2016-12-19 21:50:03.000000000","message":"nit: NetworkError, not Networkerror. Same below.","commit_id":"18cbcedb62649c4c204c29c067fa5d15c38ac00c"},{"author":{"_account_id":14525,"name":"Vasyl Saienko","email":"vsaienko@mirantis.com","username":"vsaienko"},"change_message_id":"3be4ab36b5e83ff6a691c13090da0ab845ccc3f8","unresolved":false,"context_lines":[{"line_number":2310,"context_line":"        :returns: List of VIF dictionaries, each dictionary will have an"},{"line_number":2311,"context_line":"            \u0027id\u0027 entry with the ID of the VIF."},{"line_number":2312,"context_line":"        :raises: NodeLocked, if node has an exclusive lock held on it"},{"line_number":2313,"context_line":"        :raises: Networkerror, if something goes wrong during list the VIFs"},{"line_number":2314,"context_line":"        :raises: InvalidParameterValue, if a parameter is wrong/missing that\u0027s"},{"line_number":2315,"context_line":"            required for VIF list"},{"line_number":2316,"context_line":"        \"\"\""}],"source_content_type":"text/x-python","patch_set":9,"id":"1a6eadb0_0f41a60b","line":2313,"range":{"start_line":2313,"start_character":24,"end_line":2313,"end_character":25},"in_reply_to":"1a6eadb0_81d4cb47","updated":"2016-12-20 16:59:17.000000000","message":"Done","commit_id":"18cbcedb62649c4c204c29c067fa5d15c38ac00c"},{"author":{"_account_id":12356,"name":"Vladyslav Drok","email":"vdrok@mirantis.com","username":"vdrok"},"change_message_id":"e5b03cebfa7fdfce8c256200cbcd3e187e14eb09","unresolved":false,"context_lines":[{"line_number":2309,"context_line":"        :returns: List of VIF dictionaries, each dictionary will have an"},{"line_number":2310,"context_line":"            \u0027id\u0027 entry with the ID of the VIF."},{"line_number":2311,"context_line":"        :raises: NetworkError, if something goes wrong during list the VIFs"},{"line_number":2312,"context_line":"        :raises: InvalidParameterValue, if a parameter is wrong/missing that\u0027s"},{"line_number":2313,"context_line":"            required for VIF list"},{"line_number":2314,"context_line":"        \"\"\""},{"line_number":2315,"context_line":"        with task_manager.acquire(context, node_id,"},{"line_number":2316,"context_line":"                                  purpose\u003d\u0027list vifs\u0027,"}],"source_content_type":"text/x-python","patch_set":10,"id":"1a6eadb0_1921e74d","line":2313,"range":{"start_line":2312,"start_character":39,"end_line":2313,"end_character":33},"updated":"2016-12-20 15:11:25.000000000","message":"nit - if a parameter that\u0027s required for \u003caction\u003e is wrong/missing everywhere.","commit_id":"5ae966beeebcc69ccb8b245ff9d943b273e64479"},{"author":{"_account_id":14525,"name":"Vasyl Saienko","email":"vsaienko@mirantis.com","username":"vsaienko"},"change_message_id":"d42553eba571c73c0c7d6cbefc52898895e47af0","unresolved":false,"context_lines":[{"line_number":2309,"context_line":"        :returns: List of VIF dictionaries, each dictionary will have an"},{"line_number":2310,"context_line":"            \u0027id\u0027 entry with the ID of the VIF."},{"line_number":2311,"context_line":"        :raises: NetworkError, if something goes wrong during list the VIFs"},{"line_number":2312,"context_line":"        :raises: InvalidParameterValue, if a parameter is wrong/missing that\u0027s"},{"line_number":2313,"context_line":"            required for VIF list"},{"line_number":2314,"context_line":"        \"\"\""},{"line_number":2315,"context_line":"        with task_manager.acquire(context, node_id,"},{"line_number":2316,"context_line":"                                  purpose\u003d\u0027list vifs\u0027,"}],"source_content_type":"text/x-python","patch_set":10,"id":"1a6eadb0_617941fc","line":2313,"range":{"start_line":2312,"start_character":39,"end_line":2313,"end_character":33},"in_reply_to":"1a6eadb0_1921e74d","updated":"2016-12-20 16:59:30.000000000","message":"Done","commit_id":"5ae966beeebcc69ccb8b245ff9d943b273e64479"},{"author":{"_account_id":14525,"name":"Vasyl Saienko","email":"vsaienko@mirantis.com","username":"vsaienko"},"change_message_id":"9006e12e62c44f02b1406bc84c40c017a892a63d","unresolved":false,"context_lines":[{"line_number":2342,"context_line":"        with task_manager.acquire(context, node_id,"},{"line_number":2343,"context_line":"                                  purpose\u003d\u0027attach vif\u0027) as task:"},{"line_number":2344,"context_line":"            task.driver.network.validate(task)"},{"line_number":2345,"context_line":"            task.driver.network.vif_attach(task, vif_info)"},{"line_number":2346,"context_line":""},{"line_number":2347,"context_line":"    @METRICS.timer(\u0027ConductorManager.vif_detach\u0027)"},{"line_number":2348,"context_line":"    @messaging.expected_exceptions(exception.NodeLocked,"}],"source_content_type":"text/x-python","patch_set":12,"id":"1a6eadb0_d75ad329","line":2345,"updated":"2016-12-20 17:09:37.000000000","message":"We may want to add LOG.info(_LI(\"VIF %s has been attached to ironic node.\")) or do it at the driver level.","commit_id":"0a47ef59cf7c7fc66507f9d77621f8a51884b36c"},{"author":{"_account_id":6618,"name":"Ruby Loo","email":"opensrloo@gmail.com","username":"rloo"},"change_message_id":"0d9041eef90804c47a57e7d1ba5639208dcf3989","unresolved":false,"context_lines":[{"line_number":2342,"context_line":"        with task_manager.acquire(context, node_id,"},{"line_number":2343,"context_line":"                                  purpose\u003d\u0027attach vif\u0027) as task:"},{"line_number":2344,"context_line":"            task.driver.network.validate(task)"},{"line_number":2345,"context_line":"            task.driver.network.vif_attach(task, vif_info)"},{"line_number":2346,"context_line":""},{"line_number":2347,"context_line":"    @METRICS.timer(\u0027ConductorManager.vif_detach\u0027)"},{"line_number":2348,"context_line":"    @messaging.expected_exceptions(exception.NodeLocked,"}],"source_content_type":"text/x-python","patch_set":12,"id":"1a6eadb0_86f3c609","line":2345,"in_reply_to":"1a6eadb0_d75ad329","updated":"2016-12-20 21:32:52.000000000","message":"Oh, good point. I think we can do it here since it is will be attached after this call.\n\nWhich also reminds me, looks like we tend to do LOG.debug() at the start of these (rpc-invoked) methods.","commit_id":"0a47ef59cf7c7fc66507f9d77621f8a51884b36c"},{"author":{"_account_id":14525,"name":"Vasyl Saienko","email":"vsaienko@mirantis.com","username":"vsaienko"},"change_message_id":"9006e12e62c44f02b1406bc84c40c017a892a63d","unresolved":false,"context_lines":[{"line_number":2365,"context_line":"        with task_manager.acquire(context, node_id,"},{"line_number":2366,"context_line":"                                  purpose\u003d\u0027detach vif\u0027) as task:"},{"line_number":2367,"context_line":"            task.driver.network.validate(task)"},{"line_number":2368,"context_line":"            task.driver.network.vif_detach(task, vif_id)"},{"line_number":2369,"context_line":""},{"line_number":2370,"context_line":"    def _object_dispatch(self, target, method, context, args, kwargs):"},{"line_number":2371,"context_line":"        \"\"\"Dispatch a call to an object method."}],"source_content_type":"text/x-python","patch_set":12,"id":"1a6eadb0_173d2bbb","line":2368,"updated":"2016-12-20 17:09:37.000000000","message":"ditto about log.info","commit_id":"0a47ef59cf7c7fc66507f9d77621f8a51884b36c"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"4ec08a42275e18c4d99ff752f148ceb55de08d75","unresolved":false,"context_lines":[{"line_number":2331,"context_line":"        :param context: request context."},{"line_number":2332,"context_line":"        :param node_id: node ID or UUID."},{"line_number":2333,"context_line":"        :param vif_info: a dictionary of information about a VIF."},{"line_number":2334,"context_line":"             It must have an \u0027id\u0027 key, whose value is a unique"},{"line_number":2335,"context_line":"             identifier for that VIF."},{"line_number":2336,"context_line":"        :raises: VifAlreadyAttached, if VIF is already attached to node"},{"line_number":2337,"context_line":"        :raises: NoFreePhysicalPorts, if no free physical ports left to attach"}],"source_content_type":"text/x-python","patch_set":14,"id":"da4df55a_76ede58a","line":2334,"updated":"2016-12-22 14:49:44.000000000","message":"nit: over-indented by one or a few too few characters :)","commit_id":"6eaf83b8aa52fc6a1e1c5c2672a87a79bd6dd0a9"},{"author":{"_account_id":6618,"name":"Ruby Loo","email":"opensrloo@gmail.com","username":"rloo"},"change_message_id":"7b7bfdce48137e76df902a2170650d97d02f0022","unresolved":false,"context_lines":[{"line_number":2369,"context_line":"        :raises: InvalidParameterValue, if a parameter that\u0027s required for"},{"line_number":2370,"context_line":"            VIF detach is wrong/missing everywhere."},{"line_number":2371,"context_line":"        \"\"\""},{"line_number":2372,"context_line":"        LOG.debug(\"RPC vif_detach called for the node %s\", node_id)"},{"line_number":2373,"context_line":"        with task_manager.acquire(context, node_id,"},{"line_number":2374,"context_line":"                                  purpose\u003d\u0027detach vif\u0027) as task:"},{"line_number":2375,"context_line":"            task.driver.network.validate(task)"}],"source_content_type":"text/x-python","patch_set":14,"id":"1a6eadb0_2d7d451c","line":2372,"updated":"2016-12-21 16:21:56.000000000","message":"nit, might want to log the vif ID too.","commit_id":"6eaf83b8aa52fc6a1e1c5c2672a87a79bd6dd0a9"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"4ec08a42275e18c4d99ff752f148ceb55de08d75","unresolved":false,"context_lines":[{"line_number":2369,"context_line":"        :raises: InvalidParameterValue, if a parameter that\u0027s required for"},{"line_number":2370,"context_line":"            VIF detach is wrong/missing everywhere."},{"line_number":2371,"context_line":"        \"\"\""},{"line_number":2372,"context_line":"        LOG.debug(\"RPC vif_detach called for the node %s\", node_id)"},{"line_number":2373,"context_line":"        with task_manager.acquire(context, node_id,"},{"line_number":2374,"context_line":"                                  purpose\u003d\u0027detach vif\u0027) as task:"},{"line_number":2375,"context_line":"            task.driver.network.validate(task)"}],"source_content_type":"text/x-python","patch_set":14,"id":"da4df55a_36c19de5","line":2372,"in_reply_to":"1a6eadb0_2d7d451c","updated":"2016-12-22 14:49:44.000000000","message":"++ It is an explicit operation, I think we definitely need to log the vif_id as well.","commit_id":"6eaf83b8aa52fc6a1e1c5c2672a87a79bd6dd0a9"},{"author":{"_account_id":14525,"name":"Vasyl Saienko","email":"vsaienko@mirantis.com","username":"vsaienko"},"change_message_id":"a6459ffdaa8c1dd84e56f819a4f21fdb21653a7a","unresolved":false,"context_lines":[{"line_number":2369,"context_line":"        :raises: InvalidParameterValue, if a parameter that\u0027s required for"},{"line_number":2370,"context_line":"            VIF detach is wrong/missing everywhere."},{"line_number":2371,"context_line":"        \"\"\""},{"line_number":2372,"context_line":"        LOG.debug(\"RPC vif_detach called for the node %s\", node_id)"},{"line_number":2373,"context_line":"        with task_manager.acquire(context, node_id,"},{"line_number":2374,"context_line":"                                  purpose\u003d\u0027detach vif\u0027) as task:"},{"line_number":2375,"context_line":"            task.driver.network.validate(task)"}],"source_content_type":"text/x-python","patch_set":14,"id":"da4df55a_c6e87b13","line":2372,"in_reply_to":"da4df55a_36c19de5","updated":"2016-12-23 11:18:37.000000000","message":"Done","commit_id":"6eaf83b8aa52fc6a1e1c5c2672a87a79bd6dd0a9"},{"author":{"_account_id":23883,"name":"Joanna Taryma","email":"joanna.taryma@intel.com","username":"jtaryma"},"change_message_id":"7d085ed2f07a2ba96d8e421262ba3dff664794aa","unresolved":false,"context_lines":[{"line_number":2306,"context_line":""},{"line_number":2307,"context_line":"        :param context: request context."},{"line_number":2308,"context_line":"        :param node_id: node ID or UUID."},{"line_number":2309,"context_line":"        :returns: List of VIF dictionaries, each dictionary will have an"},{"line_number":2310,"context_line":"            \u0027id\u0027 entry with the ID of the VIF."},{"line_number":2311,"context_line":"        :raises: NetworkError, if something goes wrong during list the VIFs"},{"line_number":2312,"context_line":"        :raises: InvalidParameterValue, if a parameter that\u0027s required for"}],"source_content_type":"text/x-python","patch_set":15,"id":"da4df55a_91c78611","line":2309,"updated":"2016-12-23 13:58:18.000000000","message":"will have/contains","commit_id":"2aef06435fe61993cea4eb2b567b7807575a981a"},{"author":{"_account_id":14525,"name":"Vasyl Saienko","email":"vsaienko@mirantis.com","username":"vsaienko"},"change_message_id":"a0b86ff2c9887891b799a64f001574d97614cc7b","unresolved":false,"context_lines":[{"line_number":2306,"context_line":""},{"line_number":2307,"context_line":"        :param context: request context."},{"line_number":2308,"context_line":"        :param node_id: node ID or UUID."},{"line_number":2309,"context_line":"        :returns: List of VIF dictionaries, each dictionary will have an"},{"line_number":2310,"context_line":"            \u0027id\u0027 entry with the ID of the VIF."},{"line_number":2311,"context_line":"        :raises: NetworkError, if something goes wrong during list the VIFs"},{"line_number":2312,"context_line":"        :raises: InvalidParameterValue, if a parameter that\u0027s required for"}],"source_content_type":"text/x-python","patch_set":15,"id":"da4df55a_5922a002","line":2309,"in_reply_to":"da4df55a_91c78611","updated":"2016-12-26 11:09:21.000000000","message":"this was suggested by Ruby, I\u0027m not native speaker so will left as is.","commit_id":"2aef06435fe61993cea4eb2b567b7807575a981a"},{"author":{"_account_id":23883,"name":"Joanna Taryma","email":"joanna.taryma@intel.com","username":"jtaryma"},"change_message_id":"7d085ed2f07a2ba96d8e421262ba3dff664794aa","unresolved":false,"context_lines":[{"line_number":2330,"context_line":""},{"line_number":2331,"context_line":"        :param context: request context."},{"line_number":2332,"context_line":"        :param node_id: node ID or UUID."},{"line_number":2333,"context_line":"        :param vif_info: a dictionary of information about a VIF."},{"line_number":2334,"context_line":"             It must have an \u0027id\u0027 key, whose value is a unique"},{"line_number":2335,"context_line":"             identifier for that VIF."},{"line_number":2336,"context_line":"        :raises: VifAlreadyAttached, if VIF is already attached to node"}],"source_content_type":"text/x-python","patch_set":15,"id":"da4df55a_9195c6e5","line":2333,"updated":"2016-12-23 13:58:18.000000000","message":"If this dictionary is later on translated to an object, I think \u0027a dictionary representing VIF object\u0027","commit_id":"2aef06435fe61993cea4eb2b567b7807575a981a"},{"author":{"_account_id":14525,"name":"Vasyl Saienko","email":"vsaienko@mirantis.com","username":"vsaienko"},"change_message_id":"a0b86ff2c9887891b799a64f001574d97614cc7b","unresolved":false,"context_lines":[{"line_number":2330,"context_line":""},{"line_number":2331,"context_line":"        :param context: request context."},{"line_number":2332,"context_line":"        :param node_id: node ID or UUID."},{"line_number":2333,"context_line":"        :param vif_info: a dictionary of information about a VIF."},{"line_number":2334,"context_line":"             It must have an \u0027id\u0027 key, whose value is a unique"},{"line_number":2335,"context_line":"             identifier for that VIF."},{"line_number":2336,"context_line":"        :raises: VifAlreadyAttached, if VIF is already attached to node"}],"source_content_type":"text/x-python","patch_set":15,"id":"da4df55a_045168d8","line":2333,"in_reply_to":"da4df55a_9195c6e5","updated":"2016-12-26 11:09:21.000000000","message":"Done","commit_id":"2aef06435fe61993cea4eb2b567b7807575a981a"},{"author":{"_account_id":23883,"name":"Joanna Taryma","email":"joanna.taryma@intel.com","username":"jtaryma"},"change_message_id":"7d085ed2f07a2ba96d8e421262ba3dff664794aa","unresolved":false,"context_lines":[{"line_number":2336,"context_line":"        :raises: VifAlreadyAttached, if VIF is already attached to node"},{"line_number":2337,"context_line":"        :raises: NoFreePhysicalPorts, if no free physical ports left to attach"},{"line_number":2338,"context_line":"        :raises: NodeLocked, if node has an exclusive lock held on it"},{"line_number":2339,"context_line":"        :raises: NetworkError, if something goes wrong during attaching the VIF"},{"line_number":2340,"context_line":"        :raises: InvalidParameterValue, if a parameter that\u0027s required for"},{"line_number":2341,"context_line":"            VIF attach is wrong/missing everywhere."},{"line_number":2342,"context_line":"        \"\"\""}],"source_content_type":"text/x-python","patch_set":15,"id":"da4df55a_5107de1b","line":2339,"updated":"2016-12-23 13:58:18.000000000","message":"\u0027if an error occurs during attaching the VIF\u0027 would look better, I think","commit_id":"2aef06435fe61993cea4eb2b567b7807575a981a"},{"author":{"_account_id":14525,"name":"Vasyl Saienko","email":"vsaienko@mirantis.com","username":"vsaienko"},"change_message_id":"a0b86ff2c9887891b799a64f001574d97614cc7b","unresolved":false,"context_lines":[{"line_number":2336,"context_line":"        :raises: VifAlreadyAttached, if VIF is already attached to node"},{"line_number":2337,"context_line":"        :raises: NoFreePhysicalPorts, if no free physical ports left to attach"},{"line_number":2338,"context_line":"        :raises: NodeLocked, if node has an exclusive lock held on it"},{"line_number":2339,"context_line":"        :raises: NetworkError, if something goes wrong during attaching the VIF"},{"line_number":2340,"context_line":"        :raises: InvalidParameterValue, if a parameter that\u0027s required for"},{"line_number":2341,"context_line":"            VIF attach is wrong/missing everywhere."},{"line_number":2342,"context_line":"        \"\"\""}],"source_content_type":"text/x-python","patch_set":15,"id":"da4df55a_c4712078","line":2339,"in_reply_to":"da4df55a_5107de1b","updated":"2016-12-26 11:09:21.000000000","message":"Done","commit_id":"2aef06435fe61993cea4eb2b567b7807575a981a"},{"author":{"_account_id":23883,"name":"Joanna Taryma","email":"joanna.taryma@intel.com","username":"jtaryma"},"change_message_id":"7d085ed2f07a2ba96d8e421262ba3dff664794aa","unresolved":false,"context_lines":[{"line_number":2367,"context_line":"        :raises: NetworkError, if something goes wrong during detaching the"},{"line_number":2368,"context_line":"            VIFs"},{"line_number":2369,"context_line":"        :raises: InvalidParameterValue, if a parameter that\u0027s required for"},{"line_number":2370,"context_line":"            VIF detach is wrong/missing everywhere."},{"line_number":2371,"context_line":"        \"\"\""},{"line_number":2372,"context_line":"        LOG.debug(\"RPC vif_detach called for the node %(node_id)s with \""},{"line_number":2373,"context_line":"                  \"vif_id %(vif_id)s\", {\u0027node_id\u0027: node_id, \u0027vif_id\u0027: vif_id})"}],"source_content_type":"text/x-python","patch_set":15,"id":"da4df55a_0c145942","line":2370,"updated":"2016-12-23 13:58:18.000000000","message":"what does \u0027everywhere\u0027 mean here? (same in vif_list and vif_attach)","commit_id":"2aef06435fe61993cea4eb2b567b7807575a981a"},{"author":{"_account_id":14525,"name":"Vasyl Saienko","email":"vsaienko@mirantis.com","username":"vsaienko"},"change_message_id":"a0b86ff2c9887891b799a64f001574d97614cc7b","unresolved":false,"context_lines":[{"line_number":2367,"context_line":"        :raises: NetworkError, if something goes wrong during detaching the"},{"line_number":2368,"context_line":"            VIFs"},{"line_number":2369,"context_line":"        :raises: InvalidParameterValue, if a parameter that\u0027s required for"},{"line_number":2370,"context_line":"            VIF detach is wrong/missing everywhere."},{"line_number":2371,"context_line":"        \"\"\""},{"line_number":2372,"context_line":"        LOG.debug(\"RPC vif_detach called for the node %(node_id)s with \""},{"line_number":2373,"context_line":"                  \"vif_id %(vif_id)s\", {\u0027node_id\u0027: node_id, \u0027vif_id\u0027: vif_id})"}],"source_content_type":"text/x-python","patch_set":15,"id":"da4df55a_440c50ed","line":2370,"in_reply_to":"da4df55a_0c145942","updated":"2016-12-26 11:09:21.000000000","message":"Done","commit_id":"2aef06435fe61993cea4eb2b567b7807575a981a"}],"ironic/conductor/rpcapi.py":[{"author":{"_account_id":14525,"name":"Vasyl Saienko","email":"vsaienko@mirantis.com","username":"vsaienko"},"change_message_id":"484c8b6e4db6139d19f3cda1878997a5bd99c9d7","unresolved":false,"context_lines":[{"line_number":841,"context_line":"        return cctxt.call(context, \u0027update_volume_target\u0027,"},{"line_number":842,"context_line":"                          target\u003dtarget)"},{"line_number":843,"context_line":""},{"line_number":844,"context_line":"    def vif_attach(self, context, node_id, topic\u003dNone, vif_obj\u003dNone):"},{"line_number":845,"context_line":"        cctxt \u003d self.client.prepare(topic\u003dtopic or self.topic, version\u003d\u00271.38\u0027)"},{"line_number":846,"context_line":"        return cctxt.call(context, \u0027vif_attach\u0027, node_id\u003dnode_id,"},{"line_number":847,"context_line":"                          vif_obj\u003dvif_obj)"}],"source_content_type":"text/x-python","patch_set":4,"id":"3a71b18c_0ed57fb8","line":844,"updated":"2016-12-07 14:13:18.000000000","message":"should be mandatory field","commit_id":"6bb053e4543435e47d46a189c3d0a878931fe2c6"},{"author":{"_account_id":6618,"name":"Ruby Loo","email":"opensrloo@gmail.com","username":"rloo"},"change_message_id":"46f97a0717f1dd807d79284a4883b272297a643f","unresolved":false,"context_lines":[{"line_number":841,"context_line":"        return cctxt.call(context, \u0027update_volume_target\u0027,"},{"line_number":842,"context_line":"                          target\u003dtarget)"},{"line_number":843,"context_line":""},{"line_number":844,"context_line":"    def vif_attach(self, context, node_id, topic\u003dNone, vif_obj\u003dNone):"},{"line_number":845,"context_line":"        cctxt \u003d self.client.prepare(topic\u003dtopic or self.topic, version\u003d\u00271.38\u0027)"},{"line_number":846,"context_line":"        return cctxt.call(context, \u0027vif_attach\u0027, node_id\u003dnode_id,"},{"line_number":847,"context_line":"                          vif_obj\u003dvif_obj)"}],"source_content_type":"text/x-python","patch_set":4,"id":"3a71b18c_691fc309","line":844,"in_reply_to":"3a71b18c_0ed57fb8","updated":"2016-12-07 18:18:15.000000000","message":"+1. vif_obj should be mandatory.","commit_id":"6bb053e4543435e47d46a189c3d0a878931fe2c6"},{"author":{"_account_id":6637,"name":"Sam Betts","email":"sam@code-smash.net","username":"sambetts"},"change_message_id":"1560af2e8b6b238f827607663dd18df6385de585","unresolved":false,"context_lines":[{"line_number":841,"context_line":"        return cctxt.call(context, \u0027update_volume_target\u0027,"},{"line_number":842,"context_line":"                          target\u003dtarget)"},{"line_number":843,"context_line":""},{"line_number":844,"context_line":"    def vif_attach(self, context, node_id, topic\u003dNone, vif_obj\u003dNone):"},{"line_number":845,"context_line":"        cctxt \u003d self.client.prepare(topic\u003dtopic or self.topic, version\u003d\u00271.38\u0027)"},{"line_number":846,"context_line":"        return cctxt.call(context, \u0027vif_attach\u0027, node_id\u003dnode_id,"},{"line_number":847,"context_line":"                          vif_obj\u003dvif_obj)"}],"source_content_type":"text/x-python","patch_set":4,"id":"3a71b18c_7603ef0d","line":844,"in_reply_to":"3a71b18c_691fc309","updated":"2016-12-08 16:26:14.000000000","message":"Done","commit_id":"6bb053e4543435e47d46a189c3d0a878931fe2c6"},{"author":{"_account_id":14525,"name":"Vasyl Saienko","email":"vsaienko@mirantis.com","username":"vsaienko"},"change_message_id":"484c8b6e4db6139d19f3cda1878997a5bd99c9d7","unresolved":false,"context_lines":[{"line_number":846,"context_line":"        return cctxt.call(context, \u0027vif_attach\u0027, node_id\u003dnode_id,"},{"line_number":847,"context_line":"                          vif_obj\u003dvif_obj)"},{"line_number":848,"context_line":""},{"line_number":849,"context_line":"    def vif_detach(self, context, node_id, topic\u003dNone, vif_id\u003dNone):"},{"line_number":850,"context_line":"        cctxt \u003d self.client.prepare(topic\u003dtopic or self.topic, version\u003d\u00271.38\u0027)"},{"line_number":851,"context_line":"        return cctxt.call(context, \u0027vif_detach\u0027, node_id\u003dnode_id,"},{"line_number":852,"context_line":"                          vif_id\u003dvif_id)"}],"source_content_type":"text/x-python","patch_set":4,"id":"3a71b18c_ce3467fd","line":849,"updated":"2016-12-07 14:13:18.000000000","message":"ditto about mandatory field.","commit_id":"6bb053e4543435e47d46a189c3d0a878931fe2c6"},{"author":{"_account_id":6618,"name":"Ruby Loo","email":"opensrloo@gmail.com","username":"rloo"},"change_message_id":"46f97a0717f1dd807d79284a4883b272297a643f","unresolved":false,"context_lines":[{"line_number":846,"context_line":"        return cctxt.call(context, \u0027vif_attach\u0027, node_id\u003dnode_id,"},{"line_number":847,"context_line":"                          vif_obj\u003dvif_obj)"},{"line_number":848,"context_line":""},{"line_number":849,"context_line":"    def vif_detach(self, context, node_id, topic\u003dNone, vif_id\u003dNone):"},{"line_number":850,"context_line":"        cctxt \u003d self.client.prepare(topic\u003dtopic or self.topic, version\u003d\u00271.38\u0027)"},{"line_number":851,"context_line":"        return cctxt.call(context, \u0027vif_detach\u0027, node_id\u003dnode_id,"},{"line_number":852,"context_line":"                          vif_id\u003dvif_id)"}],"source_content_type":"text/x-python","patch_set":4,"id":"3a71b18c_e9d11331","line":849,"in_reply_to":"3a71b18c_ce3467fd","updated":"2016-12-07 18:18:15.000000000","message":"+1","commit_id":"6bb053e4543435e47d46a189c3d0a878931fe2c6"},{"author":{"_account_id":6637,"name":"Sam Betts","email":"sam@code-smash.net","username":"sambetts"},"change_message_id":"1560af2e8b6b238f827607663dd18df6385de585","unresolved":false,"context_lines":[{"line_number":846,"context_line":"        return cctxt.call(context, \u0027vif_attach\u0027, node_id\u003dnode_id,"},{"line_number":847,"context_line":"                          vif_obj\u003dvif_obj)"},{"line_number":848,"context_line":""},{"line_number":849,"context_line":"    def vif_detach(self, context, node_id, topic\u003dNone, vif_id\u003dNone):"},{"line_number":850,"context_line":"        cctxt \u003d self.client.prepare(topic\u003dtopic or self.topic, version\u003d\u00271.38\u0027)"},{"line_number":851,"context_line":"        return cctxt.call(context, \u0027vif_detach\u0027, node_id\u003dnode_id,"},{"line_number":852,"context_line":"                          vif_id\u003dvif_id)"}],"source_content_type":"text/x-python","patch_set":4,"id":"3a71b18c_d6120358","line":849,"in_reply_to":"3a71b18c_e9d11331","updated":"2016-12-08 16:26:14.000000000","message":"Done","commit_id":"6bb053e4543435e47d46a189c3d0a878931fe2c6"},{"author":{"_account_id":6618,"name":"Ruby Loo","email":"opensrloo@gmail.com","username":"rloo"},"change_message_id":"46f97a0717f1dd807d79284a4883b272297a643f","unresolved":false,"context_lines":[{"line_number":853,"context_line":""},{"line_number":854,"context_line":"    def vif_list(self, context, node_id, topic\u003dNone):"},{"line_number":855,"context_line":"        cctxt \u003d self.client.prepare(topic\u003dtopic or self.topic, version\u003d\u00271.38\u0027)"},{"line_number":856,"context_line":"        return cctxt.call(context, \u0027vif_list\u0027, node_id\u003dnode_id)"}],"source_content_type":"text/x-python","patch_set":4,"id":"3a71b18c_a902bbb2","line":856,"updated":"2016-12-07 18:18:15.000000000","message":"All three methods should have docstrings describing the methods, parameters, etc.","commit_id":"6bb053e4543435e47d46a189c3d0a878931fe2c6"},{"author":{"_account_id":6637,"name":"Sam Betts","email":"sam@code-smash.net","username":"sambetts"},"change_message_id":"1560af2e8b6b238f827607663dd18df6385de585","unresolved":false,"context_lines":[{"line_number":853,"context_line":""},{"line_number":854,"context_line":"    def vif_list(self, context, node_id, topic\u003dNone):"},{"line_number":855,"context_line":"        cctxt \u003d self.client.prepare(topic\u003dtopic or self.topic, version\u003d\u00271.38\u0027)"},{"line_number":856,"context_line":"        return cctxt.call(context, \u0027vif_list\u0027, node_id\u003dnode_id)"}],"source_content_type":"text/x-python","patch_set":4,"id":"3a71b18c_169f1b60","line":856,"in_reply_to":"3a71b18c_a902bbb2","updated":"2016-12-08 16:26:14.000000000","message":"Done","commit_id":"6bb053e4543435e47d46a189c3d0a878931fe2c6"},{"author":{"_account_id":6618,"name":"Ruby Loo","email":"opensrloo@gmail.com","username":"rloo"},"change_message_id":"ace1f09bb663edd3e3955a726329bd4215d6c0c3","unresolved":false,"context_lines":[{"line_number":845,"context_line":"        \"\"\"Attach VIF to a node"},{"line_number":846,"context_line":""},{"line_number":847,"context_line":"        :param context: request context."},{"line_number":848,"context_line":"        :param node_id: node id or uuid."},{"line_number":849,"context_line":"        :param vif_obj: a object representing a VIF."},{"line_number":850,"context_line":"        :param topic: RPC topic. Defaults to self.topic."},{"line_number":851,"context_line":"        :raises NodeLocked, if node has an exclusive locked held on it"}],"source_content_type":"text/x-python","patch_set":5,"id":"1a6eadb0_f1bbb10c","line":848,"updated":"2016-12-13 02:11:27.000000000","message":"s/id/ID/\n\ns/uuid/UUID/","commit_id":"4b2b88f24bddd7cdcfb338de2b78cfafc2e661b5"},{"author":{"_account_id":14525,"name":"Vasyl Saienko","email":"vsaienko@mirantis.com","username":"vsaienko"},"change_message_id":"bb69a02230b1320ad38692f8299bb32194ded6a3","unresolved":false,"context_lines":[{"line_number":845,"context_line":"        \"\"\"Attach VIF to a node"},{"line_number":846,"context_line":""},{"line_number":847,"context_line":"        :param context: request context."},{"line_number":848,"context_line":"        :param node_id: node id or uuid."},{"line_number":849,"context_line":"        :param vif_obj: a object representing a VIF."},{"line_number":850,"context_line":"        :param topic: RPC topic. Defaults to self.topic."},{"line_number":851,"context_line":"        :raises NodeLocked, if node has an exclusive locked held on it"}],"source_content_type":"text/x-python","patch_set":5,"id":"1a6eadb0_4b2c5702","line":848,"in_reply_to":"1a6eadb0_f1bbb10c","updated":"2016-12-14 16:18:30.000000000","message":"Done","commit_id":"4b2b88f24bddd7cdcfb338de2b78cfafc2e661b5"},{"author":{"_account_id":6618,"name":"Ruby Loo","email":"opensrloo@gmail.com","username":"rloo"},"change_message_id":"ace1f09bb663edd3e3955a726329bd4215d6c0c3","unresolved":false,"context_lines":[{"line_number":846,"context_line":""},{"line_number":847,"context_line":"        :param context: request context."},{"line_number":848,"context_line":"        :param node_id: node id or uuid."},{"line_number":849,"context_line":"        :param vif_obj: a object representing a VIF."},{"line_number":850,"context_line":"        :param topic: RPC topic. Defaults to self.topic."},{"line_number":851,"context_line":"        :raises NodeLocked, if node has an exclusive locked held on it"},{"line_number":852,"context_line":"        :raises Networkerror, if something goes wrong while listing the vifs"}],"source_content_type":"text/x-python","patch_set":5,"id":"1a6eadb0_5141c50a","line":849,"updated":"2016-12-13 02:11:27.000000000","message":"nit s/a/an/","commit_id":"4b2b88f24bddd7cdcfb338de2b78cfafc2e661b5"},{"author":{"_account_id":14525,"name":"Vasyl Saienko","email":"vsaienko@mirantis.com","username":"vsaienko"},"change_message_id":"bb69a02230b1320ad38692f8299bb32194ded6a3","unresolved":false,"context_lines":[{"line_number":846,"context_line":""},{"line_number":847,"context_line":"        :param context: request context."},{"line_number":848,"context_line":"        :param node_id: node id or uuid."},{"line_number":849,"context_line":"        :param vif_obj: a object representing a VIF."},{"line_number":850,"context_line":"        :param topic: RPC topic. Defaults to self.topic."},{"line_number":851,"context_line":"        :raises NodeLocked, if node has an exclusive locked held on it"},{"line_number":852,"context_line":"        :raises Networkerror, if something goes wrong while listing the vifs"}],"source_content_type":"text/x-python","patch_set":5,"id":"1a6eadb0_0b225f00","line":849,"in_reply_to":"1a6eadb0_5141c50a","updated":"2016-12-14 16:18:30.000000000","message":"Done","commit_id":"4b2b88f24bddd7cdcfb338de2b78cfafc2e661b5"},{"author":{"_account_id":19686,"name":"Ramamani Yeleswarapu","email":"ramamani.yeleswarapu@intel.com","username":"Rama_Y"},"change_message_id":"5ce12726d32603a824458ce718844812e591e2d7","unresolved":false,"context_lines":[{"line_number":848,"context_line":"        :param node_id: node id or uuid."},{"line_number":849,"context_line":"        :param vif_obj: a object representing a VIF."},{"line_number":850,"context_line":"        :param topic: RPC topic. Defaults to self.topic."},{"line_number":851,"context_line":"        :raises NodeLocked, if node has an exclusive locked held on it"},{"line_number":852,"context_line":"        :raises Networkerror, if something goes wrong while listing the vifs"},{"line_number":853,"context_line":"        :raises InvalidParameterValue, if a parameter is wrong/missing thats"},{"line_number":854,"context_line":"            required for vif list"},{"line_number":855,"context_line":"        \"\"\""},{"line_number":856,"context_line":"        cctxt \u003d self.client.prepare(topic\u003dtopic or self.topic, version\u003d\u00271.38\u0027)"},{"line_number":857,"context_line":"        return cctxt.call(context, \u0027vif_attach\u0027, node_id\u003dnode_id,"}],"source_content_type":"text/x-python","patch_set":5,"id":"3a71b18c_337a2289","line":854,"range":{"start_line":851,"start_character":0,"end_line":854,"end_character":33},"updated":"2016-12-09 23:11:01.000000000","message":"same comments as in manager.vif_list","commit_id":"4b2b88f24bddd7cdcfb338de2b78cfafc2e661b5"},{"author":{"_account_id":14525,"name":"Vasyl Saienko","email":"vsaienko@mirantis.com","username":"vsaienko"},"change_message_id":"bb69a02230b1320ad38692f8299bb32194ded6a3","unresolved":false,"context_lines":[{"line_number":848,"context_line":"        :param node_id: node id or uuid."},{"line_number":849,"context_line":"        :param vif_obj: a object representing a VIF."},{"line_number":850,"context_line":"        :param topic: RPC topic. Defaults to self.topic."},{"line_number":851,"context_line":"        :raises NodeLocked, if node has an exclusive locked held on it"},{"line_number":852,"context_line":"        :raises Networkerror, if something goes wrong while listing the vifs"},{"line_number":853,"context_line":"        :raises InvalidParameterValue, if a parameter is wrong/missing thats"},{"line_number":854,"context_line":"            required for vif list"},{"line_number":855,"context_line":"        \"\"\""},{"line_number":856,"context_line":"        cctxt \u003d self.client.prepare(topic\u003dtopic or self.topic, version\u003d\u00271.38\u0027)"},{"line_number":857,"context_line":"        return cctxt.call(context, \u0027vif_attach\u0027, node_id\u003dnode_id,"}],"source_content_type":"text/x-python","patch_set":5,"id":"1a6eadb0_2b1d5bbd","line":854,"range":{"start_line":851,"start_character":0,"end_line":854,"end_character":33},"in_reply_to":"3a71b18c_337a2289","updated":"2016-12-14 16:18:30.000000000","message":"Done","commit_id":"4b2b88f24bddd7cdcfb338de2b78cfafc2e661b5"},{"author":{"_account_id":6618,"name":"Ruby Loo","email":"opensrloo@gmail.com","username":"rloo"},"change_message_id":"ace1f09bb663edd3e3955a726329bd4215d6c0c3","unresolved":false,"context_lines":[{"line_number":861,"context_line":"        \"\"\"Detach a VIF from a node"},{"line_number":862,"context_line":""},{"line_number":863,"context_line":"        :param context: request context."},{"line_number":864,"context_line":"        :param node_id: node id or uuid."},{"line_number":865,"context_line":"        :param vif_id: a id of a VIF."},{"line_number":866,"context_line":"        :param topic: RPC topic. Defaults to self.topic."},{"line_number":867,"context_line":"        :raises NodeLocked, if node has an exclusive locked held on it"}],"source_content_type":"text/x-python","patch_set":5,"id":"1a6eadb0_914b5d2b","line":864,"updated":"2016-12-13 02:11:27.000000000","message":"ditto","commit_id":"4b2b88f24bddd7cdcfb338de2b78cfafc2e661b5"},{"author":{"_account_id":6618,"name":"Ruby Loo","email":"opensrloo@gmail.com","username":"rloo"},"change_message_id":"ace1f09bb663edd3e3955a726329bd4215d6c0c3","unresolved":false,"context_lines":[{"line_number":862,"context_line":""},{"line_number":863,"context_line":"        :param context: request context."},{"line_number":864,"context_line":"        :param node_id: node id or uuid."},{"line_number":865,"context_line":"        :param vif_id: a id of a VIF."},{"line_number":866,"context_line":"        :param topic: RPC topic. Defaults to self.topic."},{"line_number":867,"context_line":"        :raises NodeLocked, if node has an exclusive locked held on it"},{"line_number":868,"context_line":"        :raises Networkerror, if something goes wrong while listing the vifs"}],"source_content_type":"text/x-python","patch_set":5,"id":"1a6eadb0_f152d1dc","line":865,"updated":"2016-12-13 02:11:27.000000000","message":"s/a id/the ID/","commit_id":"4b2b88f24bddd7cdcfb338de2b78cfafc2e661b5"},{"author":{"_account_id":19686,"name":"Ramamani Yeleswarapu","email":"ramamani.yeleswarapu@intel.com","username":"Rama_Y"},"change_message_id":"5ce12726d32603a824458ce718844812e591e2d7","unresolved":false,"context_lines":[{"line_number":864,"context_line":"        :param node_id: node id or uuid."},{"line_number":865,"context_line":"        :param vif_id: a id of a VIF."},{"line_number":866,"context_line":"        :param topic: RPC topic. Defaults to self.topic."},{"line_number":867,"context_line":"        :raises NodeLocked, if node has an exclusive locked held on it"},{"line_number":868,"context_line":"        :raises Networkerror, if something goes wrong while listing the vifs"},{"line_number":869,"context_line":"        :raises InvalidParameterValue, if a parameter is wrong/missing thats"},{"line_number":870,"context_line":"            required for vif list"},{"line_number":871,"context_line":"        \"\"\""},{"line_number":872,"context_line":"        cctxt \u003d self.client.prepare(topic\u003dtopic or self.topic, version\u003d\u00271.38\u0027)"},{"line_number":873,"context_line":"        return cctxt.call(context, \u0027vif_detach\u0027, node_id\u003dnode_id,"}],"source_content_type":"text/x-python","patch_set":5,"id":"3a71b18c_139c46bf","line":870,"range":{"start_line":867,"start_character":0,"end_line":870,"end_character":33},"updated":"2016-12-09 23:11:01.000000000","message":"same as above","commit_id":"4b2b88f24bddd7cdcfb338de2b78cfafc2e661b5"},{"author":{"_account_id":14525,"name":"Vasyl Saienko","email":"vsaienko@mirantis.com","username":"vsaienko"},"change_message_id":"bb69a02230b1320ad38692f8299bb32194ded6a3","unresolved":false,"context_lines":[{"line_number":864,"context_line":"        :param node_id: node id or uuid."},{"line_number":865,"context_line":"        :param vif_id: a id of a VIF."},{"line_number":866,"context_line":"        :param topic: RPC topic. Defaults to self.topic."},{"line_number":867,"context_line":"        :raises NodeLocked, if node has an exclusive locked held on it"},{"line_number":868,"context_line":"        :raises Networkerror, if something goes wrong while listing the vifs"},{"line_number":869,"context_line":"        :raises InvalidParameterValue, if a parameter is wrong/missing thats"},{"line_number":870,"context_line":"            required for vif list"},{"line_number":871,"context_line":"        \"\"\""},{"line_number":872,"context_line":"        cctxt \u003d self.client.prepare(topic\u003dtopic or self.topic, version\u003d\u00271.38\u0027)"},{"line_number":873,"context_line":"        return cctxt.call(context, \u0027vif_detach\u0027, node_id\u003dnode_id,"}],"source_content_type":"text/x-python","patch_set":5,"id":"1a6eadb0_eb50c360","line":870,"range":{"start_line":867,"start_character":0,"end_line":870,"end_character":33},"in_reply_to":"3a71b18c_139c46bf","updated":"2016-12-14 16:18:30.000000000","message":"Done","commit_id":"4b2b88f24bddd7cdcfb338de2b78cfafc2e661b5"},{"author":{"_account_id":6618,"name":"Ruby Loo","email":"opensrloo@gmail.com","username":"rloo"},"change_message_id":"ace1f09bb663edd3e3955a726329bd4215d6c0c3","unresolved":false,"context_lines":[{"line_number":877,"context_line":"        \"\"\"List attached VIFs for a node"},{"line_number":878,"context_line":""},{"line_number":879,"context_line":"        :param context: request context."},{"line_number":880,"context_line":"        :param node_id: node id or uuid."},{"line_number":881,"context_line":"        :param topic: RPC topic. Defaults to self.topic."},{"line_number":882,"context_line":"        :raises NodeLocked, if node has an exclusive locked held on it"},{"line_number":883,"context_line":"        :raises Networkerror, if something goes wrong while listing the vifs"}],"source_content_type":"text/x-python","patch_set":5,"id":"1a6eadb0_b16f7991","line":880,"updated":"2016-12-13 02:11:27.000000000","message":"ditto","commit_id":"4b2b88f24bddd7cdcfb338de2b78cfafc2e661b5"},{"author":{"_account_id":14525,"name":"Vasyl Saienko","email":"vsaienko@mirantis.com","username":"vsaienko"},"change_message_id":"bb69a02230b1320ad38692f8299bb32194ded6a3","unresolved":false,"context_lines":[{"line_number":877,"context_line":"        \"\"\"List attached VIFs for a node"},{"line_number":878,"context_line":""},{"line_number":879,"context_line":"        :param context: request context."},{"line_number":880,"context_line":"        :param node_id: node id or uuid."},{"line_number":881,"context_line":"        :param topic: RPC topic. Defaults to self.topic."},{"line_number":882,"context_line":"        :raises NodeLocked, if node has an exclusive locked held on it"},{"line_number":883,"context_line":"        :raises Networkerror, if something goes wrong while listing the vifs"}],"source_content_type":"text/x-python","patch_set":5,"id":"1a6eadb0_4beff786","line":880,"in_reply_to":"1a6eadb0_b16f7991","updated":"2016-12-14 16:18:30.000000000","message":"Done","commit_id":"4b2b88f24bddd7cdcfb338de2b78cfafc2e661b5"},{"author":{"_account_id":19686,"name":"Ramamani Yeleswarapu","email":"ramamani.yeleswarapu@intel.com","username":"Rama_Y"},"change_message_id":"5ce12726d32603a824458ce718844812e591e2d7","unresolved":false,"context_lines":[{"line_number":879,"context_line":"        :param context: request context."},{"line_number":880,"context_line":"        :param node_id: node id or uuid."},{"line_number":881,"context_line":"        :param topic: RPC topic. Defaults to self.topic."},{"line_number":882,"context_line":"        :raises NodeLocked, if node has an exclusive locked held on it"},{"line_number":883,"context_line":"        :raises Networkerror, if something goes wrong while listing the vifs"},{"line_number":884,"context_line":"        :raises InvalidParameterValue, if a parameter is wrong/missing thats"},{"line_number":885,"context_line":"            required for vif list"},{"line_number":886,"context_line":"        \"\"\""},{"line_number":887,"context_line":"        cctxt \u003d self.client.prepare(topic\u003dtopic or self.topic, version\u003d\u00271.38\u0027)"},{"line_number":888,"context_line":"        return cctxt.call(context, \u0027vif_list\u0027, node_id\u003dnode_id)"}],"source_content_type":"text/x-python","patch_set":5,"id":"3a71b18c_53a23efd","line":885,"range":{"start_line":882,"start_character":0,"end_line":885,"end_character":33},"updated":"2016-12-09 23:11:01.000000000","message":"same as above","commit_id":"4b2b88f24bddd7cdcfb338de2b78cfafc2e661b5"},{"author":{"_account_id":14525,"name":"Vasyl Saienko","email":"vsaienko@mirantis.com","username":"vsaienko"},"change_message_id":"bb69a02230b1320ad38692f8299bb32194ded6a3","unresolved":false,"context_lines":[{"line_number":879,"context_line":"        :param context: request context."},{"line_number":880,"context_line":"        :param node_id: node id or uuid."},{"line_number":881,"context_line":"        :param topic: RPC topic. Defaults to self.topic."},{"line_number":882,"context_line":"        :raises NodeLocked, if node has an exclusive locked held on it"},{"line_number":883,"context_line":"        :raises Networkerror, if something goes wrong while listing the vifs"},{"line_number":884,"context_line":"        :raises InvalidParameterValue, if a parameter is wrong/missing thats"},{"line_number":885,"context_line":"            required for vif list"},{"line_number":886,"context_line":"        \"\"\""},{"line_number":887,"context_line":"        cctxt \u003d self.client.prepare(topic\u003dtopic or self.topic, version\u003d\u00271.38\u0027)"},{"line_number":888,"context_line":"        return cctxt.call(context, \u0027vif_list\u0027, node_id\u003dnode_id)"}],"source_content_type":"text/x-python","patch_set":5,"id":"1a6eadb0_cb030741","line":885,"range":{"start_line":882,"start_character":0,"end_line":885,"end_character":33},"in_reply_to":"3a71b18c_53a23efd","updated":"2016-12-14 16:18:30.000000000","message":"Done","commit_id":"4b2b88f24bddd7cdcfb338de2b78cfafc2e661b5"},{"author":{"_account_id":6618,"name":"Ruby Loo","email":"opensrloo@gmail.com","username":"rloo"},"change_message_id":"dc19dba6cb113256a62e2e19a21d1528b5da2ef2","unresolved":false,"context_lines":[{"line_number":841,"context_line":"        return cctxt.call(context, \u0027update_volume_target\u0027,"},{"line_number":842,"context_line":"                          target\u003dtarget)"},{"line_number":843,"context_line":""},{"line_number":844,"context_line":"    def vif_attach(self, context, node_id, vif_obj, topic\u003dNone):"},{"line_number":845,"context_line":"        \"\"\"Attach VIF to a node"},{"line_number":846,"context_line":""},{"line_number":847,"context_line":"        :param context: request context."}],"source_content_type":"text/x-python","patch_set":6,"id":"1a6eadb0_ac6c1736","line":844,"updated":"2016-12-14 20:14:29.000000000","message":"s/vif_obj/vif_info/","commit_id":"e37a9a05f0646e83415de18a62222b971a67f1b8"},{"author":{"_account_id":14525,"name":"Vasyl Saienko","email":"vsaienko@mirantis.com","username":"vsaienko"},"change_message_id":"77160a764a8991090f1ab79c758f3ac3b2aa4c1d","unresolved":false,"context_lines":[{"line_number":841,"context_line":"        return cctxt.call(context, \u0027update_volume_target\u0027,"},{"line_number":842,"context_line":"                          target\u003dtarget)"},{"line_number":843,"context_line":""},{"line_number":844,"context_line":"    def vif_attach(self, context, node_id, vif_obj, topic\u003dNone):"},{"line_number":845,"context_line":"        \"\"\"Attach VIF to a node"},{"line_number":846,"context_line":""},{"line_number":847,"context_line":"        :param context: request context."}],"source_content_type":"text/x-python","patch_set":6,"id":"1a6eadb0_d7e0e5fc","line":844,"in_reply_to":"1a6eadb0_ac6c1736","updated":"2016-12-15 12:05:35.000000000","message":"Done","commit_id":"e37a9a05f0646e83415de18a62222b971a67f1b8"},{"author":{"_account_id":6618,"name":"Ruby Loo","email":"opensrloo@gmail.com","username":"rloo"},"change_message_id":"dc19dba6cb113256a62e2e19a21d1528b5da2ef2","unresolved":false,"context_lines":[{"line_number":846,"context_line":""},{"line_number":847,"context_line":"        :param context: request context."},{"line_number":848,"context_line":"        :param node_id: node ID or UUID."},{"line_number":849,"context_line":"        :param vif_obj: an object representing a VIF."},{"line_number":850,"context_line":"        :param topic: RPC topic. Defaults to self.topic."},{"line_number":851,"context_line":"        :raises: NodeLocked, if node has an exclusive lock held on it"},{"line_number":852,"context_line":"        :raises: NetworkError, if something goes wrong while listing the VIFs"}],"source_content_type":"text/x-python","patch_set":6,"id":"1a6eadb0_0c626b3e","line":849,"updated":"2016-12-14 20:14:29.000000000","message":"not an object, a dict","commit_id":"e37a9a05f0646e83415de18a62222b971a67f1b8"},{"author":{"_account_id":14525,"name":"Vasyl Saienko","email":"vsaienko@mirantis.com","username":"vsaienko"},"change_message_id":"77160a764a8991090f1ab79c758f3ac3b2aa4c1d","unresolved":false,"context_lines":[{"line_number":846,"context_line":""},{"line_number":847,"context_line":"        :param context: request context."},{"line_number":848,"context_line":"        :param node_id: node ID or UUID."},{"line_number":849,"context_line":"        :param vif_obj: an object representing a VIF."},{"line_number":850,"context_line":"        :param topic: RPC topic. Defaults to self.topic."},{"line_number":851,"context_line":"        :raises: NodeLocked, if node has an exclusive lock held on it"},{"line_number":852,"context_line":"        :raises: NetworkError, if something goes wrong while listing the VIFs"}],"source_content_type":"text/x-python","patch_set":6,"id":"1a6eadb0_f7e961e7","line":849,"in_reply_to":"1a6eadb0_0c626b3e","updated":"2016-12-15 12:05:35.000000000","message":"Done","commit_id":"e37a9a05f0646e83415de18a62222b971a67f1b8"},{"author":{"_account_id":6618,"name":"Ruby Loo","email":"opensrloo@gmail.com","username":"rloo"},"change_message_id":"dc19dba6cb113256a62e2e19a21d1528b5da2ef2","unresolved":false,"context_lines":[{"line_number":862,"context_line":""},{"line_number":863,"context_line":"        :param context: request context."},{"line_number":864,"context_line":"        :param node_id: node ID or UUID."},{"line_number":865,"context_line":"        :param vif_id: a ID of a VIF."},{"line_number":866,"context_line":"        :param topic: RPC topic. Defaults to self.topic."},{"line_number":867,"context_line":"        :raises: NodeLocked, if node has an exclusive lock held on it"},{"line_number":868,"context_line":"        :raises: NetworkError, if something goes wrong while listing the VIFs"}],"source_content_type":"text/x-python","patch_set":6,"id":"1a6eadb0_6cb3dfe9","line":865,"updated":"2016-12-14 20:14:29.000000000","message":"nit, s/a/an/\n\nor s/a/the/\n\nor s/a//","commit_id":"e37a9a05f0646e83415de18a62222b971a67f1b8"},{"author":{"_account_id":14525,"name":"Vasyl Saienko","email":"vsaienko@mirantis.com","username":"vsaienko"},"change_message_id":"77160a764a8991090f1ab79c758f3ac3b2aa4c1d","unresolved":false,"context_lines":[{"line_number":862,"context_line":""},{"line_number":863,"context_line":"        :param context: request context."},{"line_number":864,"context_line":"        :param node_id: node ID or UUID."},{"line_number":865,"context_line":"        :param vif_id: a ID of a VIF."},{"line_number":866,"context_line":"        :param topic: RPC topic. Defaults to self.topic."},{"line_number":867,"context_line":"        :raises: NodeLocked, if node has an exclusive lock held on it"},{"line_number":868,"context_line":"        :raises: NetworkError, if something goes wrong while listing the VIFs"}],"source_content_type":"text/x-python","patch_set":6,"id":"1a6eadb0_b7a9a992","line":865,"in_reply_to":"1a6eadb0_6cb3dfe9","updated":"2016-12-15 12:05:35.000000000","message":"Done","commit_id":"e37a9a05f0646e83415de18a62222b971a67f1b8"},{"author":{"_account_id":6618,"name":"Ruby Loo","email":"opensrloo@gmail.com","username":"rloo"},"change_message_id":"dc19dba6cb113256a62e2e19a21d1528b5da2ef2","unresolved":false,"context_lines":[{"line_number":882,"context_line":"        :raises: NodeLocked, if node has an exclusive lock held on it"},{"line_number":883,"context_line":"        :raises: NetworkError, if something goes wrong while listing the VIFs"},{"line_number":884,"context_line":"        :raises: InvalidParameterValue, if a parameter is wrong/missing that\u0027s"},{"line_number":885,"context_line":"            required for VIF list"},{"line_number":886,"context_line":"        \"\"\""},{"line_number":887,"context_line":"        cctxt \u003d self.client.prepare(topic\u003dtopic or self.topic, version\u003d\u00271.38\u0027)"},{"line_number":888,"context_line":"        return cctxt.call(context, \u0027vif_list\u0027, node_id\u003dnode_id)"}],"source_content_type":"text/x-python","patch_set":6,"id":"1a6eadb0_ac53376a","line":885,"updated":"2016-12-14 20:14:29.000000000","message":"returns list of VIF dictionaries...","commit_id":"e37a9a05f0646e83415de18a62222b971a67f1b8"},{"author":{"_account_id":14525,"name":"Vasyl Saienko","email":"vsaienko@mirantis.com","username":"vsaienko"},"change_message_id":"77160a764a8991090f1ab79c758f3ac3b2aa4c1d","unresolved":false,"context_lines":[{"line_number":882,"context_line":"        :raises: NodeLocked, if node has an exclusive lock held on it"},{"line_number":883,"context_line":"        :raises: NetworkError, if something goes wrong while listing the VIFs"},{"line_number":884,"context_line":"        :raises: InvalidParameterValue, if a parameter is wrong/missing that\u0027s"},{"line_number":885,"context_line":"            required for VIF list"},{"line_number":886,"context_line":"        \"\"\""},{"line_number":887,"context_line":"        cctxt \u003d self.client.prepare(topic\u003dtopic or self.topic, version\u003d\u00271.38\u0027)"},{"line_number":888,"context_line":"        return cctxt.call(context, \u0027vif_list\u0027, node_id\u003dnode_id)"}],"source_content_type":"text/x-python","patch_set":6,"id":"1a6eadb0_5772154a","line":885,"in_reply_to":"1a6eadb0_ac53376a","updated":"2016-12-15 12:05:35.000000000","message":"Done","commit_id":"e37a9a05f0646e83415de18a62222b971a67f1b8"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"4ec08a42275e18c4d99ff752f148ceb55de08d75","unresolved":false,"context_lines":[{"line_number":846,"context_line":""},{"line_number":847,"context_line":"        :param context: request context."},{"line_number":848,"context_line":"        :param node_id: node ID or UUID."},{"line_number":849,"context_line":"        param vif_info: a dictionary of information about a VIF."},{"line_number":850,"context_line":"            It must have an \u0027id\u0027 key, whose value is a unique"},{"line_number":851,"context_line":"            identifier for that VIF."},{"line_number":852,"context_line":"        :param topic: RPC topic. Defaults to self.topic."}],"source_content_type":"text/x-python","patch_set":14,"id":"da4df55a_39798e94","line":849,"updated":"2016-12-22 14:49:44.000000000","message":"s/param/:param/","commit_id":"6eaf83b8aa52fc6a1e1c5c2672a87a79bd6dd0a9"},{"author":{"_account_id":14525,"name":"Vasyl Saienko","email":"vsaienko@mirantis.com","username":"vsaienko"},"change_message_id":"a6459ffdaa8c1dd84e56f819a4f21fdb21653a7a","unresolved":false,"context_lines":[{"line_number":846,"context_line":""},{"line_number":847,"context_line":"        :param context: request context."},{"line_number":848,"context_line":"        :param node_id: node ID or UUID."},{"line_number":849,"context_line":"        param vif_info: a dictionary of information about a VIF."},{"line_number":850,"context_line":"            It must have an \u0027id\u0027 key, whose value is a unique"},{"line_number":851,"context_line":"            identifier for that VIF."},{"line_number":852,"context_line":"        :param topic: RPC topic. Defaults to self.topic."}],"source_content_type":"text/x-python","patch_set":14,"id":"da4df55a_46cbaba5","line":849,"in_reply_to":"da4df55a_39798e94","updated":"2016-12-23 11:18:37.000000000","message":"Done","commit_id":"6eaf83b8aa52fc6a1e1c5c2672a87a79bd6dd0a9"},{"author":{"_account_id":23883,"name":"Joanna Taryma","email":"joanna.taryma@intel.com","username":"jtaryma"},"change_message_id":"7d085ed2f07a2ba96d8e421262ba3dff664794aa","unresolved":false,"context_lines":[{"line_number":842,"context_line":"                          target\u003dtarget)"},{"line_number":843,"context_line":""},{"line_number":844,"context_line":"    def vif_attach(self, context, node_id, vif_info, topic\u003dNone):"},{"line_number":845,"context_line":"        \"\"\"Attach VIF to a node"},{"line_number":846,"context_line":""},{"line_number":847,"context_line":"        :param context: request context."},{"line_number":848,"context_line":"        :param node_id: node ID or UUID."}],"source_content_type":"text/x-python","patch_set":15,"id":"da4df55a_8c4da974","line":845,"updated":"2016-12-23 13:58:18.000000000","message":"nit: a VIF (to be compliant with \u0027Detach a VIF\u0027) :)","commit_id":"2aef06435fe61993cea4eb2b567b7807575a981a"},{"author":{"_account_id":14525,"name":"Vasyl Saienko","email":"vsaienko@mirantis.com","username":"vsaienko"},"change_message_id":"a0b86ff2c9887891b799a64f001574d97614cc7b","unresolved":false,"context_lines":[{"line_number":842,"context_line":"                          target\u003dtarget)"},{"line_number":843,"context_line":""},{"line_number":844,"context_line":"    def vif_attach(self, context, node_id, vif_info, topic\u003dNone):"},{"line_number":845,"context_line":"        \"\"\"Attach VIF to a node"},{"line_number":846,"context_line":""},{"line_number":847,"context_line":"        :param context: request context."},{"line_number":848,"context_line":"        :param node_id: node ID or UUID."}],"source_content_type":"text/x-python","patch_set":15,"id":"da4df55a_242e6c43","line":845,"in_reply_to":"da4df55a_8c4da974","updated":"2016-12-26 11:09:21.000000000","message":"Done","commit_id":"2aef06435fe61993cea4eb2b567b7807575a981a"},{"author":{"_account_id":23883,"name":"Joanna Taryma","email":"joanna.taryma@intel.com","username":"jtaryma"},"change_message_id":"7d085ed2f07a2ba96d8e421262ba3dff664794aa","unresolved":false,"context_lines":[{"line_number":845,"context_line":"        \"\"\"Attach VIF to a node"},{"line_number":846,"context_line":""},{"line_number":847,"context_line":"        :param context: request context."},{"line_number":848,"context_line":"        :param node_id: node ID or UUID."},{"line_number":849,"context_line":"        :param vif_info: a dictionary of information about a VIF."},{"line_number":850,"context_line":"            It must have an \u0027id\u0027 key, whose value is a unique"},{"line_number":851,"context_line":"            identifier for that VIF."}],"source_content_type":"text/x-python","patch_set":15,"id":"da4df55a_cc35f146","line":848,"updated":"2016-12-23 13:58:18.000000000","message":"Just thinking: I know that this is due to the difference in API object and DB object, but is it a best idea to mix these here?","commit_id":"2aef06435fe61993cea4eb2b567b7807575a981a"},{"author":{"_account_id":14525,"name":"Vasyl Saienko","email":"vsaienko@mirantis.com","username":"vsaienko"},"change_message_id":"a0b86ff2c9887891b799a64f001574d97614cc7b","unresolved":false,"context_lines":[{"line_number":845,"context_line":"        \"\"\"Attach VIF to a node"},{"line_number":846,"context_line":""},{"line_number":847,"context_line":"        :param context: request context."},{"line_number":848,"context_line":"        :param node_id: node ID or UUID."},{"line_number":849,"context_line":"        :param vif_info: a dictionary of information about a VIF."},{"line_number":850,"context_line":"            It must have an \u0027id\u0027 key, whose value is a unique"},{"line_number":851,"context_line":"            identifier for that VIF."}],"source_content_type":"text/x-python","patch_set":15,"id":"da4df55a_049b2873","line":848,"in_reply_to":"da4df55a_cc35f146","updated":"2016-12-26 11:09:21.000000000","message":"We using such description in docstring in other places, it was just copied.","commit_id":"2aef06435fe61993cea4eb2b567b7807575a981a"}],"ironic/tests/unit/conductor/test_manager.py":[{"author":{"_account_id":12356,"name":"Vladyslav Drok","email":"vdrok@mirantis.com","username":"vdrok"},"change_message_id":"f466504696ffe3daa521f1e97cd4cdd10fdc4a5a","unresolved":false,"context_lines":[{"line_number":3313,"context_line":""},{"line_number":3314,"context_line":""},{"line_number":3315,"context_line":"@mgr_utils.mock_record_keepalive"},{"line_number":3316,"context_line":"class VifAttachDetachTestCase(mgr_utils.ServiceSetUpMixin,"},{"line_number":3317,"context_line":"                              tests_db_base.DbTestCase):"},{"line_number":3318,"context_line":""},{"line_number":3319,"context_line":"    @mock.patch.object(flat.FlatNetwork, \u0027validate\u0027)"}],"source_content_type":"text/x-python","patch_set":1,"id":"5a74a57a_0ead5b88","line":3316,"updated":"2016-11-30 10:05:32.000000000","message":"list too","commit_id":"0e598f09f85989a9caf222d7e7318260bbf75e0b"},{"author":{"_account_id":6637,"name":"Sam Betts","email":"sam@code-smash.net","username":"sambetts"},"change_message_id":"30342e29a2ffcf72c25c65f9c4606e58a7df0d13","unresolved":false,"context_lines":[{"line_number":3313,"context_line":""},{"line_number":3314,"context_line":""},{"line_number":3315,"context_line":"@mgr_utils.mock_record_keepalive"},{"line_number":3316,"context_line":"class VifAttachDetachTestCase(mgr_utils.ServiceSetUpMixin,"},{"line_number":3317,"context_line":"                              tests_db_base.DbTestCase):"},{"line_number":3318,"context_line":""},{"line_number":3319,"context_line":"    @mock.patch.object(flat.FlatNetwork, \u0027validate\u0027)"}],"source_content_type":"text/x-python","patch_set":1,"id":"5a74a57a_555d0deb","line":3316,"in_reply_to":"5a74a57a_0ead5b88","updated":"2016-11-30 16:50:23.000000000","message":"Done","commit_id":"0e598f09f85989a9caf222d7e7318260bbf75e0b"},{"author":{"_account_id":12356,"name":"Vladyslav Drok","email":"vdrok@mirantis.com","username":"vdrok"},"change_message_id":"f466504696ffe3daa521f1e97cd4cdd10fdc4a5a","unresolved":false,"context_lines":[{"line_number":3349,"context_line":""},{"line_number":3350,"context_line":"    @mock.patch.object(flat.FlatNetwork, \u0027validate\u0027)"},{"line_number":3351,"context_line":"    @mock.patch.object(flat.FlatNetwork, \u0027vif_attach\u0027)"},{"line_number":3352,"context_line":"    def test_vif_attach_raises_network_error(self, mock_attach,"},{"line_number":3353,"context_line":"                                             mock_valid):"},{"line_number":3354,"context_line":"        mock_attach.side_effect \u003d exception.NetworkError(\"BOOM\")"},{"line_number":3355,"context_line":"        node \u003d obj_utils.create_test_node(self.context, driver\u003d\u0027fake\u0027)"}],"source_content_type":"text/x-python","patch_set":1,"id":"5a74a57a_0ec8fb73","line":3352,"updated":"2016-11-30 10:05:32.000000000","message":"vif_detach_validate_fails?","commit_id":"0e598f09f85989a9caf222d7e7318260bbf75e0b"},{"author":{"_account_id":6637,"name":"Sam Betts","email":"sam@code-smash.net","username":"sambetts"},"change_message_id":"30342e29a2ffcf72c25c65f9c4606e58a7df0d13","unresolved":false,"context_lines":[{"line_number":3349,"context_line":""},{"line_number":3350,"context_line":"    @mock.patch.object(flat.FlatNetwork, \u0027validate\u0027)"},{"line_number":3351,"context_line":"    @mock.patch.object(flat.FlatNetwork, \u0027vif_attach\u0027)"},{"line_number":3352,"context_line":"    def test_vif_attach_raises_network_error(self, mock_attach,"},{"line_number":3353,"context_line":"                                             mock_valid):"},{"line_number":3354,"context_line":"        mock_attach.side_effect \u003d exception.NetworkError(\"BOOM\")"},{"line_number":3355,"context_line":"        node \u003d obj_utils.create_test_node(self.context, driver\u003d\u0027fake\u0027)"}],"source_content_type":"text/x-python","patch_set":1,"id":"5a74a57a_55118dae","line":3352,"in_reply_to":"5a74a57a_0ec8fb73","updated":"2016-11-30 16:50:23.000000000","message":"Done","commit_id":"0e598f09f85989a9caf222d7e7318260bbf75e0b"},{"author":{"_account_id":12356,"name":"Vladyslav Drok","email":"vdrok@mirantis.com","username":"vdrok"},"change_message_id":"f466504696ffe3daa521f1e97cd4cdd10fdc4a5a","unresolved":false,"context_lines":[{"line_number":3383,"context_line":""},{"line_number":3384,"context_line":"    @mock.patch.object(flat.FlatNetwork, \u0027validate\u0027)"},{"line_number":3385,"context_line":"    @mock.patch.object(flat.FlatNetwork, \u0027vif_detach\u0027)"},{"line_number":3386,"context_line":"    def test_vif_detach_raises_network_error(self, mock_detach,"},{"line_number":3387,"context_line":"                                             mock_valid):"},{"line_number":3388,"context_line":"        mock_detach.side_effect \u003d exception.NetworkError(\"BOOM\")"},{"line_number":3389,"context_line":"        node \u003d obj_utils.create_test_node(self.context, driver\u003d\u0027fake\u0027)"}],"source_content_type":"text/x-python","patch_set":1,"id":"5a74a57a_8eaa4b84","line":3386,"updated":"2016-11-30 10:05:32.000000000","message":"vif_detach_validate_fails?","commit_id":"0e598f09f85989a9caf222d7e7318260bbf75e0b"},{"author":{"_account_id":6637,"name":"Sam Betts","email":"sam@code-smash.net","username":"sambetts"},"change_message_id":"30342e29a2ffcf72c25c65f9c4606e58a7df0d13","unresolved":false,"context_lines":[{"line_number":3383,"context_line":""},{"line_number":3384,"context_line":"    @mock.patch.object(flat.FlatNetwork, \u0027validate\u0027)"},{"line_number":3385,"context_line":"    @mock.patch.object(flat.FlatNetwork, \u0027vif_detach\u0027)"},{"line_number":3386,"context_line":"    def test_vif_detach_raises_network_error(self, mock_detach,"},{"line_number":3387,"context_line":"                                             mock_valid):"},{"line_number":3388,"context_line":"        mock_detach.side_effect \u003d exception.NetworkError(\"BOOM\")"},{"line_number":3389,"context_line":"        node \u003d obj_utils.create_test_node(self.context, driver\u003d\u0027fake\u0027)"}],"source_content_type":"text/x-python","patch_set":1,"id":"5a74a57a_f5229900","line":3386,"in_reply_to":"5a74a57a_8eaa4b84","updated":"2016-11-30 16:50:23.000000000","message":"Done","commit_id":"0e598f09f85989a9caf222d7e7318260bbf75e0b"},{"author":{"_account_id":6618,"name":"Ruby Loo","email":"opensrloo@gmail.com","username":"rloo"},"change_message_id":"46f97a0717f1dd807d79284a4883b272297a643f","unresolved":false,"context_lines":[{"line_number":2886,"context_line":""},{"line_number":2887,"context_line":"@mgr_utils.mock_record_keepalive"},{"line_number":2888,"context_line":"class UpdatePortTestCase(mgr_utils.ServiceSetUpMixin,"},{"line_number":2889,"context_line":"                         tests_db_base.DbTestCase):"},{"line_number":2890,"context_line":"    @mock.patch(\u0027ironic.drivers.modules.network.flat.FlatNetwork.validate\u0027)"},{"line_number":2891,"context_line":"    def test_update_port(self, mock_val):"},{"line_number":2892,"context_line":"        node \u003d obj_utils.create_test_node(self.context, driver\u003d\u0027fake\u0027)"}],"source_content_type":"text/x-python","patch_set":4,"id":"3a71b18c_dadb3320","line":2889,"updated":"2016-12-07 18:18:15.000000000","message":"I think some of these tests should move to drivers/modules/network/test_common.py\n\nany that remain here should probably mock the port_changed method.","commit_id":"6bb053e4543435e47d46a189c3d0a878931fe2c6"},{"author":{"_account_id":6637,"name":"Sam Betts","email":"sam@code-smash.net","username":"sambetts"},"change_message_id":"1560af2e8b6b238f827607663dd18df6385de585","unresolved":false,"context_lines":[{"line_number":2886,"context_line":""},{"line_number":2887,"context_line":"@mgr_utils.mock_record_keepalive"},{"line_number":2888,"context_line":"class UpdatePortTestCase(mgr_utils.ServiceSetUpMixin,"},{"line_number":2889,"context_line":"                         tests_db_base.DbTestCase):"},{"line_number":2890,"context_line":"    @mock.patch(\u0027ironic.drivers.modules.network.flat.FlatNetwork.validate\u0027)"},{"line_number":2891,"context_line":"    def test_update_port(self, mock_val):"},{"line_number":2892,"context_line":"        node \u003d obj_utils.create_test_node(self.context, driver\u003d\u0027fake\u0027)"}],"source_content_type":"text/x-python","patch_set":4,"id":"3a71b18c_d0e2042f","line":2889,"in_reply_to":"3a71b18c_dadb3320","updated":"2016-12-08 16:26:14.000000000","message":"Done","commit_id":"6bb053e4543435e47d46a189c3d0a878931fe2c6"},{"author":{"_account_id":6618,"name":"Ruby Loo","email":"opensrloo@gmail.com","username":"rloo"},"change_message_id":"46f97a0717f1dd807d79284a4883b272297a643f","unresolved":false,"context_lines":[{"line_number":3501,"context_line":"@mgr_utils.mock_record_keepalive"},{"line_number":3502,"context_line":"class VifTestCase(mgr_utils.ServiceSetUpMixin, tests_db_base.DbTestCase):"},{"line_number":3503,"context_line":""},{"line_number":3504,"context_line":"    @mock.patch.object(flat.FlatNetwork, \u0027validate\u0027)"},{"line_number":3505,"context_line":"    @mock.patch.object(flat.FlatNetwork, \u0027vif_list\u0027)"},{"line_number":3506,"context_line":"    def test_vif_list(self, mock_list, mock_valid):"},{"line_number":3507,"context_line":"        mock_list.return_value \u003d [\u0027VIF_ID\u0027]"}],"source_content_type":"text/x-python","patch_set":4,"id":"3a71b18c_3a10a7a8","line":3504,"updated":"2016-12-07 18:18:15.000000000","message":"this is used in all the tests, maybe move it above L3502","commit_id":"6bb053e4543435e47d46a189c3d0a878931fe2c6"},{"author":{"_account_id":6637,"name":"Sam Betts","email":"sam@code-smash.net","username":"sambetts"},"change_message_id":"1560af2e8b6b238f827607663dd18df6385de585","unresolved":false,"context_lines":[{"line_number":3501,"context_line":"@mgr_utils.mock_record_keepalive"},{"line_number":3502,"context_line":"class VifTestCase(mgr_utils.ServiceSetUpMixin, tests_db_base.DbTestCase):"},{"line_number":3503,"context_line":""},{"line_number":3504,"context_line":"    @mock.patch.object(flat.FlatNetwork, \u0027validate\u0027)"},{"line_number":3505,"context_line":"    @mock.patch.object(flat.FlatNetwork, \u0027vif_list\u0027)"},{"line_number":3506,"context_line":"    def test_vif_list(self, mock_list, mock_valid):"},{"line_number":3507,"context_line":"        mock_list.return_value \u003d [\u0027VIF_ID\u0027]"}],"source_content_type":"text/x-python","patch_set":4,"id":"3a71b18c_1092bc4b","line":3504,"in_reply_to":"3a71b18c_3a10a7a8","updated":"2016-12-08 16:26:14.000000000","message":"Done","commit_id":"6bb053e4543435e47d46a189c3d0a878931fe2c6"},{"author":{"_account_id":6618,"name":"Ruby Loo","email":"opensrloo@gmail.com","username":"rloo"},"change_message_id":"46f97a0717f1dd807d79284a4883b272297a643f","unresolved":false,"context_lines":[{"line_number":3509,"context_line":"        data \u003d self.service.vif_list(self.context, node.uuid)"},{"line_number":3510,"context_line":"        mock_list.assert_called_once_with(mock.ANY)"},{"line_number":3511,"context_line":"        mock_valid.assert_called_once_with(mock.ANY)"},{"line_number":3512,"context_line":"        self.assertEqual(data, mock_list.return_value)"},{"line_number":3513,"context_line":""},{"line_number":3514,"context_line":"    @mock.patch.object(flat.FlatNetwork, \u0027validate\u0027)"},{"line_number":3515,"context_line":"    @mock.patch.object(flat.FlatNetwork, \u0027vif_attach\u0027)"}],"source_content_type":"text/x-python","patch_set":4,"id":"3a71b18c_3ad507b9","line":3512,"updated":"2016-12-07 18:18:15.000000000","message":"it\u0027s the other way I think. ..(mock_list.return_value, data)","commit_id":"6bb053e4543435e47d46a189c3d0a878931fe2c6"},{"author":{"_account_id":6637,"name":"Sam Betts","email":"sam@code-smash.net","username":"sambetts"},"change_message_id":"1560af2e8b6b238f827607663dd18df6385de585","unresolved":false,"context_lines":[{"line_number":3509,"context_line":"        data \u003d self.service.vif_list(self.context, node.uuid)"},{"line_number":3510,"context_line":"        mock_list.assert_called_once_with(mock.ANY)"},{"line_number":3511,"context_line":"        mock_valid.assert_called_once_with(mock.ANY)"},{"line_number":3512,"context_line":"        self.assertEqual(data, mock_list.return_value)"},{"line_number":3513,"context_line":""},{"line_number":3514,"context_line":"    @mock.patch.object(flat.FlatNetwork, \u0027validate\u0027)"},{"line_number":3515,"context_line":"    @mock.patch.object(flat.FlatNetwork, \u0027vif_attach\u0027)"}],"source_content_type":"text/x-python","patch_set":4,"id":"3a71b18c_f0b540d0","line":3512,"in_reply_to":"3a71b18c_3ad507b9","updated":"2016-12-08 16:26:14.000000000","message":"Done","commit_id":"6bb053e4543435e47d46a189c3d0a878931fe2c6"},{"author":{"_account_id":6618,"name":"Ruby Loo","email":"opensrloo@gmail.com","username":"rloo"},"change_message_id":"46f97a0717f1dd807d79284a4883b272297a643f","unresolved":false,"context_lines":[{"line_number":3515,"context_line":"    @mock.patch.object(flat.FlatNetwork, \u0027vif_attach\u0027)"},{"line_number":3516,"context_line":"    def test_vif_attach(self, mock_attach, mock_valid):"},{"line_number":3517,"context_line":"        node \u003d obj_utils.create_test_node(self.context, driver\u003d\u0027fake\u0027)"},{"line_number":3518,"context_line":"        self.service.vif_attach(self.context, node.uuid, \"interface\")"},{"line_number":3519,"context_line":"        mock_attach.assert_called_once_with(mock.ANY, \"interface\")"},{"line_number":3520,"context_line":"        mock_valid.assert_called_once_with(mock.ANY)"},{"line_number":3521,"context_line":""}],"source_content_type":"text/x-python","patch_set":4,"id":"3a71b18c_9afb7b47","line":3518,"updated":"2016-12-07 18:18:15.000000000","message":"i\u0027d rather the vif be something a bit more realistic than a string but ...","commit_id":"6bb053e4543435e47d46a189c3d0a878931fe2c6"},{"author":{"_account_id":6637,"name":"Sam Betts","email":"sam@code-smash.net","username":"sambetts"},"change_message_id":"1560af2e8b6b238f827607663dd18df6385de585","unresolved":false,"context_lines":[{"line_number":3515,"context_line":"    @mock.patch.object(flat.FlatNetwork, \u0027vif_attach\u0027)"},{"line_number":3516,"context_line":"    def test_vif_attach(self, mock_attach, mock_valid):"},{"line_number":3517,"context_line":"        node \u003d obj_utils.create_test_node(self.context, driver\u003d\u0027fake\u0027)"},{"line_number":3518,"context_line":"        self.service.vif_attach(self.context, node.uuid, \"interface\")"},{"line_number":3519,"context_line":"        mock_attach.assert_called_once_with(mock.ANY, \"interface\")"},{"line_number":3520,"context_line":"        mock_valid.assert_called_once_with(mock.ANY)"},{"line_number":3521,"context_line":""}],"source_content_type":"text/x-python","patch_set":4,"id":"3a71b18c_10f1dc6a","line":3518,"in_reply_to":"3a71b18c_9afb7b47","updated":"2016-12-08 16:26:14.000000000","message":"Done","commit_id":"6bb053e4543435e47d46a189c3d0a878931fe2c6"},{"author":{"_account_id":6618,"name":"Ruby Loo","email":"opensrloo@gmail.com","username":"rloo"},"change_message_id":"46f97a0717f1dd807d79284a4883b272297a643f","unresolved":false,"context_lines":[{"line_number":3543,"context_line":"                                self.context, node.uuid, \"interface\")"},{"line_number":3544,"context_line":"        # Compare true exception hidden by @messaging.expected_exceptions"},{"line_number":3545,"context_line":"        self.assertEqual(exception.NetworkError, exc.exc_info[0])"},{"line_number":3546,"context_line":"        mock_valid.assert_called_once_with(mock.ANY)"},{"line_number":3547,"context_line":""},{"line_number":3548,"context_line":"    @mock.patch.object(flat.FlatNetwork, \u0027validate\u0027)"},{"line_number":3549,"context_line":"    @mock.patch.object(flat.FlatNetwork, \u0027vif_attach\u0027)"}],"source_content_type":"text/x-python","patch_set":4,"id":"3a71b18c_da617313","line":3546,"updated":"2016-12-07 18:18:15.000000000","message":"mock_attach was also called","commit_id":"6bb053e4543435e47d46a189c3d0a878931fe2c6"},{"author":{"_account_id":6637,"name":"Sam Betts","email":"sam@code-smash.net","username":"sambetts"},"change_message_id":"1560af2e8b6b238f827607663dd18df6385de585","unresolved":false,"context_lines":[{"line_number":3543,"context_line":"                                self.context, node.uuid, \"interface\")"},{"line_number":3544,"context_line":"        # Compare true exception hidden by @messaging.expected_exceptions"},{"line_number":3545,"context_line":"        self.assertEqual(exception.NetworkError, exc.exc_info[0])"},{"line_number":3546,"context_line":"        mock_valid.assert_called_once_with(mock.ANY)"},{"line_number":3547,"context_line":""},{"line_number":3548,"context_line":"    @mock.patch.object(flat.FlatNetwork, \u0027validate\u0027)"},{"line_number":3549,"context_line":"    @mock.patch.object(flat.FlatNetwork, \u0027vif_attach\u0027)"}],"source_content_type":"text/x-python","patch_set":4,"id":"3a71b18c_10bf1c61","line":3546,"in_reply_to":"3a71b18c_da617313","updated":"2016-12-08 16:26:14.000000000","message":"Done","commit_id":"6bb053e4543435e47d46a189c3d0a878931fe2c6"},{"author":{"_account_id":6618,"name":"Ruby Loo","email":"opensrloo@gmail.com","username":"rloo"},"change_message_id":"46f97a0717f1dd807d79284a4883b272297a643f","unresolved":false,"context_lines":[{"line_number":3556,"context_line":"                                self.context, node.uuid, \"interface\")"},{"line_number":3557,"context_line":"        # Compare true exception hidden by @messaging.expected_exceptions"},{"line_number":3558,"context_line":"        self.assertEqual(exception.MissingParameterValue, exc.exc_info[0])"},{"line_number":3559,"context_line":"        mock_valid.assert_called_once_with(mock.ANY)"},{"line_number":3560,"context_line":""},{"line_number":3561,"context_line":"    @mock.patch.object(flat.FlatNetwork, \u0027validate\u0027)"},{"line_number":3562,"context_line":"    @mock.patch.object(flat.FlatNetwork, \u0027vif_detach\u0027)"}],"source_content_type":"text/x-python","patch_set":4,"id":"3a71b18c_1a6ccb07","line":3559,"updated":"2016-12-07 18:18:15.000000000","message":"mock_attach was not called","commit_id":"6bb053e4543435e47d46a189c3d0a878931fe2c6"},{"author":{"_account_id":6637,"name":"Sam Betts","email":"sam@code-smash.net","username":"sambetts"},"change_message_id":"1560af2e8b6b238f827607663dd18df6385de585","unresolved":false,"context_lines":[{"line_number":3556,"context_line":"                                self.context, node.uuid, \"interface\")"},{"line_number":3557,"context_line":"        # Compare true exception hidden by @messaging.expected_exceptions"},{"line_number":3558,"context_line":"        self.assertEqual(exception.MissingParameterValue, exc.exc_info[0])"},{"line_number":3559,"context_line":"        mock_valid.assert_called_once_with(mock.ANY)"},{"line_number":3560,"context_line":""},{"line_number":3561,"context_line":"    @mock.patch.object(flat.FlatNetwork, \u0027validate\u0027)"},{"line_number":3562,"context_line":"    @mock.patch.object(flat.FlatNetwork, \u0027vif_detach\u0027)"}],"source_content_type":"text/x-python","patch_set":4,"id":"3a71b18c_b0aae817","line":3559,"in_reply_to":"3a71b18c_1a6ccb07","updated":"2016-12-08 16:26:14.000000000","message":"Done","commit_id":"6bb053e4543435e47d46a189c3d0a878931fe2c6"},{"author":{"_account_id":6618,"name":"Ruby Loo","email":"opensrloo@gmail.com","username":"rloo"},"change_message_id":"46f97a0717f1dd807d79284a4883b272297a643f","unresolved":false,"context_lines":[{"line_number":3590,"context_line":"                                self.context, node.uuid, \"interface\")"},{"line_number":3591,"context_line":"        # Compare true exception hidden by @messaging.expected_exceptions"},{"line_number":3592,"context_line":"        self.assertEqual(exception.NetworkError, exc.exc_info[0])"},{"line_number":3593,"context_line":"        mock_valid.assert_called_once_with(mock.ANY)"},{"line_number":3594,"context_line":""},{"line_number":3595,"context_line":"    @mock.patch.object(flat.FlatNetwork, \u0027validate\u0027)"},{"line_number":3596,"context_line":"    @mock.patch.object(flat.FlatNetwork, \u0027vif_detach\u0027)"}],"source_content_type":"text/x-python","patch_set":4,"id":"3a71b18c_3a48a787","line":3593,"updated":"2016-12-07 18:18:15.000000000","message":"mock_detach was called","commit_id":"6bb053e4543435e47d46a189c3d0a878931fe2c6"},{"author":{"_account_id":6637,"name":"Sam Betts","email":"sam@code-smash.net","username":"sambetts"},"change_message_id":"1560af2e8b6b238f827607663dd18df6385de585","unresolved":false,"context_lines":[{"line_number":3590,"context_line":"                                self.context, node.uuid, \"interface\")"},{"line_number":3591,"context_line":"        # Compare true exception hidden by @messaging.expected_exceptions"},{"line_number":3592,"context_line":"        self.assertEqual(exception.NetworkError, exc.exc_info[0])"},{"line_number":3593,"context_line":"        mock_valid.assert_called_once_with(mock.ANY)"},{"line_number":3594,"context_line":""},{"line_number":3595,"context_line":"    @mock.patch.object(flat.FlatNetwork, \u0027validate\u0027)"},{"line_number":3596,"context_line":"    @mock.patch.object(flat.FlatNetwork, \u0027vif_detach\u0027)"}],"source_content_type":"text/x-python","patch_set":4,"id":"3a71b18c_104d5c99","line":3593,"in_reply_to":"3a71b18c_3a48a787","updated":"2016-12-08 16:26:14.000000000","message":"Done","commit_id":"6bb053e4543435e47d46a189c3d0a878931fe2c6"},{"author":{"_account_id":6618,"name":"Ruby Loo","email":"opensrloo@gmail.com","username":"rloo"},"change_message_id":"46f97a0717f1dd807d79284a4883b272297a643f","unresolved":false,"context_lines":[{"line_number":3603,"context_line":"                                self.context, node.uuid, \"interface\")"},{"line_number":3604,"context_line":"        # Compare true exception hidden by @messaging.expected_exceptions"},{"line_number":3605,"context_line":"        self.assertEqual(exception.MissingParameterValue, exc.exc_info[0])"},{"line_number":3606,"context_line":"        mock_valid.assert_called_once_with(mock.ANY)"},{"line_number":3607,"context_line":""},{"line_number":3608,"context_line":""},{"line_number":3609,"context_line":"@mgr_utils.mock_record_keepalive"}],"source_content_type":"text/x-python","patch_set":4,"id":"3a71b18c_1a3a0be8","line":3606,"updated":"2016-12-07 18:18:15.000000000","message":"mock_detach was not called","commit_id":"6bb053e4543435e47d46a189c3d0a878931fe2c6"},{"author":{"_account_id":6637,"name":"Sam Betts","email":"sam@code-smash.net","username":"sambetts"},"change_message_id":"1560af2e8b6b238f827607663dd18df6385de585","unresolved":false,"context_lines":[{"line_number":3603,"context_line":"                                self.context, node.uuid, \"interface\")"},{"line_number":3604,"context_line":"        # Compare true exception hidden by @messaging.expected_exceptions"},{"line_number":3605,"context_line":"        self.assertEqual(exception.MissingParameterValue, exc.exc_info[0])"},{"line_number":3606,"context_line":"        mock_valid.assert_called_once_with(mock.ANY)"},{"line_number":3607,"context_line":""},{"line_number":3608,"context_line":""},{"line_number":3609,"context_line":"@mgr_utils.mock_record_keepalive"}],"source_content_type":"text/x-python","patch_set":4,"id":"3a71b18c_f049c08f","line":3606,"in_reply_to":"3a71b18c_1a3a0be8","updated":"2016-12-08 16:26:14.000000000","message":"Done","commit_id":"6bb053e4543435e47d46a189c3d0a878931fe2c6"}],"ironic/tests/unit/conductor/test_rpcapi.py":[{"author":{"_account_id":12356,"name":"Vladyslav Drok","email":"vdrok@mirantis.com","username":"vdrok"},"change_message_id":"f466504696ffe3daa521f1e97cd4cdd10fdc4a5a","unresolved":false,"context_lines":[{"line_number":401,"context_line":"                          callback_url\u003d\u0027http://ramdisk.url:port\u0027,"},{"line_number":402,"context_line":"                          version\u003d\u00271.34\u0027)"},{"line_number":403,"context_line":""},{"line_number":404,"context_line":"    def test_vif_attach(self):"},{"line_number":405,"context_line":"        self._test_rpcapi(\u0027vif_attach\u0027,"},{"line_number":406,"context_line":"                          \u0027call\u0027,"},{"line_number":407,"context_line":"                          node_id\u003d\u0027fake-node\u0027,"}],"source_content_type":"text/x-python","patch_set":1,"id":"5a74a57a_2e9cd768","line":404,"updated":"2016-11-30 10:05:32.000000000","message":"vif_list missing","commit_id":"0e598f09f85989a9caf222d7e7318260bbf75e0b"},{"author":{"_account_id":6637,"name":"Sam Betts","email":"sam@code-smash.net","username":"sambetts"},"change_message_id":"30342e29a2ffcf72c25c65f9c4606e58a7df0d13","unresolved":false,"context_lines":[{"line_number":401,"context_line":"                          callback_url\u003d\u0027http://ramdisk.url:port\u0027,"},{"line_number":402,"context_line":"                          version\u003d\u00271.34\u0027)"},{"line_number":403,"context_line":""},{"line_number":404,"context_line":"    def test_vif_attach(self):"},{"line_number":405,"context_line":"        self._test_rpcapi(\u0027vif_attach\u0027,"},{"line_number":406,"context_line":"                          \u0027call\u0027,"},{"line_number":407,"context_line":"                          node_id\u003d\u0027fake-node\u0027,"}],"source_content_type":"text/x-python","patch_set":1,"id":"5a74a57a_35f9714e","line":404,"in_reply_to":"5a74a57a_2e9cd768","updated":"2016-11-30 16:50:23.000000000","message":"Done","commit_id":"0e598f09f85989a9caf222d7e7318260bbf75e0b"}]}
