)]}'
{"contrib/rackspace/rackspace/resources/lb_node.py":[{"author":{"_account_id":13720,"name":"Pratik Mallya","email":"pratik.mallya@gmail.com","username":"pmallya"},"change_message_id":"36faea7171066e88bce3b505cc2653dcf16d13ed","unresolved":false,"context_lines":[{"line_number":38,"context_line":"class LBNode(resource.Resource):"},{"line_number":39,"context_line":"    \"\"\"Represents a single node of a Rackspace Cloud Load Balancer\"\"\""},{"line_number":40,"context_line":""},{"line_number":41,"context_line":"    _DRAINING_CONDITION \u003d \u0027DRAINING\u0027"},{"line_number":42,"context_line":""},{"line_number":43,"context_line":"    _NODE_KEYS \u003d ("},{"line_number":44,"context_line":"        ADDRESS, PORT, CONDITION, TYPE, WEIGHT"}],"source_content_type":"text/x-python","patch_set":2,"id":"ba63e191_73b919e9","line":41,"updated":"2016-01-19 14:50:48.000000000","message":"why the underscore?","commit_id":"e0dd419f3d336c1ec85c28336ce0fc627fa63858"},{"author":{"_account_id":15123,"name":"Drago","email":"drago.rosson@rackspace.com","username":"Drago"},"change_message_id":"e05d99421c80f36b73c44b85db3c2b8fe57693af","unresolved":false,"context_lines":[{"line_number":38,"context_line":"class LBNode(resource.Resource):"},{"line_number":39,"context_line":"    \"\"\"Represents a single node of a Rackspace Cloud Load Balancer\"\"\""},{"line_number":40,"context_line":""},{"line_number":41,"context_line":"    _DRAINING_CONDITION \u003d \u0027DRAINING\u0027"},{"line_number":42,"context_line":""},{"line_number":43,"context_line":"    _NODE_KEYS \u003d ("},{"line_number":44,"context_line":"        ADDRESS, PORT, CONDITION, TYPE, WEIGHT"}],"source_content_type":"text/x-python","patch_set":2,"id":"ba63e191_e4577a00","line":41,"in_reply_to":"ba63e191_73b919e9","updated":"2016-01-19 18:13:16.000000000","message":"It\u0027s private to the class.","commit_id":"e0dd419f3d336c1ec85c28336ce0fc627fa63858"},{"author":{"_account_id":13720,"name":"Pratik Mallya","email":"pratik.mallya@gmail.com","username":"pmallya"},"change_message_id":"5e692097e032baef9bd72a2f21369662c82b2641","unresolved":false,"context_lines":[{"line_number":83,"context_line":"            properties.Schema.STRING,"},{"line_number":84,"context_line":"            default\u003d\u0027ENABLED\u0027,"},{"line_number":85,"context_line":"            constraints\u003d["},{"line_number":86,"context_line":"                constraints.AllowedValues([\u0027ENABLED\u0027,"},{"line_number":87,"context_line":"                                           \u0027DISABLED\u0027,"},{"line_number":88,"context_line":"                                           _DRAINING_CONDITION]),"},{"line_number":89,"context_line":"            ],"}],"source_content_type":"text/x-python","patch_set":2,"id":"ba63e191_91a4fe08","line":86,"updated":"2016-01-18 17:50:32.000000000","message":"Why not use a constant for all the allowed values?","commit_id":"e0dd419f3d336c1ec85c28336ce0fc627fa63858"},{"author":{"_account_id":13720,"name":"Pratik Mallya","email":"pratik.mallya@gmail.com","username":"pmallya"},"change_message_id":"36faea7171066e88bce3b505cc2653dcf16d13ed","unresolved":false,"context_lines":[{"line_number":83,"context_line":"            properties.Schema.STRING,"},{"line_number":84,"context_line":"            default\u003d\u0027ENABLED\u0027,"},{"line_number":85,"context_line":"            constraints\u003d["},{"line_number":86,"context_line":"                constraints.AllowedValues([\u0027ENABLED\u0027,"},{"line_number":87,"context_line":"                                           \u0027DISABLED\u0027,"},{"line_number":88,"context_line":"                                           _DRAINING_CONDITION]),"},{"line_number":89,"context_line":"            ],"}],"source_content_type":"text/x-python","patch_set":2,"id":"ba63e191_53b415f1","line":86,"in_reply_to":"ba63e191_4fe49e3a","updated":"2016-01-19 14:50:48.000000000","message":"I think that using constants for all strings is a better idea. Someone trying to understand the code can simply do ctrl + F to find all instances where the constants are used.","commit_id":"e0dd419f3d336c1ec85c28336ce0fc627fa63858"},{"author":{"_account_id":15123,"name":"Drago","email":"drago.rosson@rackspace.com","username":"Drago"},"change_message_id":"e05d99421c80f36b73c44b85db3c2b8fe57693af","unresolved":false,"context_lines":[{"line_number":83,"context_line":"            properties.Schema.STRING,"},{"line_number":84,"context_line":"            default\u003d\u0027ENABLED\u0027,"},{"line_number":85,"context_line":"            constraints\u003d["},{"line_number":86,"context_line":"                constraints.AllowedValues([\u0027ENABLED\u0027,"},{"line_number":87,"context_line":"                                           \u0027DISABLED\u0027,"},{"line_number":88,"context_line":"                                           _DRAINING_CONDITION]),"},{"line_number":89,"context_line":"            ],"}],"source_content_type":"text/x-python","patch_set":2,"id":"ba63e191_b7976f8f","line":86,"in_reply_to":"ba63e191_53b415f1","updated":"2016-01-19 18:13:16.000000000","message":"Done. I don\u0027t see it being done like this anywhere else either...","commit_id":"e0dd419f3d336c1ec85c28336ce0fc627fa63858"},{"author":{"_account_id":15123,"name":"Drago","email":"drago.rosson@rackspace.com","username":"Drago"},"change_message_id":"de2bb50c98221079adf0410f206ba51161357c29","unresolved":false,"context_lines":[{"line_number":83,"context_line":"            properties.Schema.STRING,"},{"line_number":84,"context_line":"            default\u003d\u0027ENABLED\u0027,"},{"line_number":85,"context_line":"            constraints\u003d["},{"line_number":86,"context_line":"                constraints.AllowedValues([\u0027ENABLED\u0027,"},{"line_number":87,"context_line":"                                           \u0027DISABLED\u0027,"},{"line_number":88,"context_line":"                                           _DRAINING_CONDITION]),"},{"line_number":89,"context_line":"            ],"}],"source_content_type":"text/x-python","patch_set":2,"id":"ba63e191_4fe49e3a","line":86,"in_reply_to":"ba63e191_91a4fe08","updated":"2016-01-18 23:09:03.000000000","message":"Simply because only the draining one is used elsewhere in the file. I figure having just the one that needs to be a constant rather than all three would be a better clue to anyone reading the code.","commit_id":"e0dd419f3d336c1ec85c28336ce0fc627fa63858"},{"author":{"_account_id":13720,"name":"Pratik Mallya","email":"pratik.mallya@gmail.com","username":"pmallya"},"change_message_id":"5e692097e032baef9bd72a2f21369662c82b2641","unresolved":false,"context_lines":[{"line_number":118,"context_line":"        lb_id \u003d self.properties.get(self.LOAD_BALANCER)"},{"line_number":119,"context_line":"        return self.clb.get(lb_id)"},{"line_number":120,"context_line":""},{"line_number":121,"context_line":"    def node(self, lb):"},{"line_number":122,"context_line":"        return next((n for n in getattr(lb, \u0027nodes\u0027, [])"},{"line_number":123,"context_line":"                     if str(n.id) \u003d\u003d self.resource_id),"},{"line_number":124,"context_line":"                    None)"}],"source_content_type":"text/x-python","patch_set":2,"id":"ba63e191_91115e60","line":121,"updated":"2016-01-18 17:50:32.000000000","message":"Since the only lb that you fetch the nodes from are self.lb, it would be prudent to fetch the lb using that method rather than as a function argument.","commit_id":"e0dd419f3d336c1ec85c28336ce0fc627fa63858"},{"author":{"_account_id":13720,"name":"Pratik Mallya","email":"pratik.mallya@gmail.com","username":"pmallya"},"change_message_id":"36faea7171066e88bce3b505cc2653dcf16d13ed","unresolved":false,"context_lines":[{"line_number":118,"context_line":"        lb_id \u003d self.properties.get(self.LOAD_BALANCER)"},{"line_number":119,"context_line":"        return self.clb.get(lb_id)"},{"line_number":120,"context_line":""},{"line_number":121,"context_line":"    def node(self, lb):"},{"line_number":122,"context_line":"        return next((n for n in getattr(lb, \u0027nodes\u0027, [])"},{"line_number":123,"context_line":"                     if str(n.id) \u003d\u003d self.resource_id),"},{"line_number":124,"context_line":"                    None)"}],"source_content_type":"text/x-python","patch_set":2,"id":"ba63e191_d35565c6","line":121,"in_reply_to":"ba63e191_17e79e41","updated":"2016-01-19 14:50:48.000000000","message":"Why not cache the call to retrieve the load balancer? If I understand correctly, the node can only refer to one load balancer, so the only reference should be to that load balancer.\n\nI\u0027m not gonna force the issue, but I would consider the simplified code a reasonable trade-off v/s a few calls to the api.","commit_id":"e0dd419f3d336c1ec85c28336ce0fc627fa63858"},{"author":{"_account_id":15123,"name":"Drago","email":"drago.rosson@rackspace.com","username":"Drago"},"change_message_id":"de2bb50c98221079adf0410f206ba51161357c29","unresolved":false,"context_lines":[{"line_number":118,"context_line":"        lb_id \u003d self.properties.get(self.LOAD_BALANCER)"},{"line_number":119,"context_line":"        return self.clb.get(lb_id)"},{"line_number":120,"context_line":""},{"line_number":121,"context_line":"    def node(self, lb):"},{"line_number":122,"context_line":"        return next((n for n in getattr(lb, \u0027nodes\u0027, [])"},{"line_number":123,"context_line":"                     if str(n.id) \u003d\u003d self.resource_id),"},{"line_number":124,"context_line":"                    None)"}],"source_content_type":"text/x-python","patch_set":2,"id":"ba63e191_17e79e41","line":121,"in_reply_to":"ba63e191_91115e60","updated":"2016-01-18 23:09:03.000000000","message":"That\u0027s true, but the reason I have it done this way is so that the lb doesn\u0027t have to be retrieved via the CLB API extra times unnecessarily (see lines 178-182). Similarly, the lb is not saved on the instance (such as it is in [1]) to ensure that the lb\u0027s data is up-to-date on every check_*_complete call in case the resource instance sticks around between them.\n\n[1] https://github.com/openstack/heat/blob/744f40c02156fc3155a372a269bdd062869f5fa6/heat/engine/clients/client_plugin.py#L134","commit_id":"e0dd419f3d336c1ec85c28336ce0fc627fa63858"},{"author":{"_account_id":15123,"name":"Drago","email":"drago.rosson@rackspace.com","username":"Drago"},"change_message_id":"e05d99421c80f36b73c44b85db3c2b8fe57693af","unresolved":false,"context_lines":[{"line_number":118,"context_line":"        lb_id \u003d self.properties.get(self.LOAD_BALANCER)"},{"line_number":119,"context_line":"        return self.clb.get(lb_id)"},{"line_number":120,"context_line":""},{"line_number":121,"context_line":"    def node(self, lb):"},{"line_number":122,"context_line":"        return next((n for n in getattr(lb, \u0027nodes\u0027, [])"},{"line_number":123,"context_line":"                     if str(n.id) \u003d\u003d self.resource_id),"},{"line_number":124,"context_line":"                    None)"}],"source_content_type":"text/x-python","patch_set":2,"id":"ba63e191_446206af","line":121,"in_reply_to":"ba63e191_d35565c6","updated":"2016-01-19 18:13:16.000000000","message":"I answered this in the previous comment. See \"Similarly...\"","commit_id":"e0dd419f3d336c1ec85c28336ce0fc627fa63858"},{"author":{"_account_id":13720,"name":"Pratik Mallya","email":"pratik.mallya@gmail.com","username":"pmallya"},"change_message_id":"5e692097e032baef9bd72a2f21369662c82b2641","unresolved":false,"context_lines":[{"line_number":120,"context_line":""},{"line_number":121,"context_line":"    def node(self, lb):"},{"line_number":122,"context_line":"        return next((n for n in getattr(lb, \u0027nodes\u0027, [])"},{"line_number":123,"context_line":"                     if str(n.id) \u003d\u003d self.resource_id),"},{"line_number":124,"context_line":"                    None)"},{"line_number":125,"context_line":""},{"line_number":126,"context_line":"    def handle_create(self):"}],"source_content_type":"text/x-python","patch_set":2,"id":"ba63e191_3c48895b","line":123,"updated":"2016-01-18 17:50:32.000000000","message":"This line might be simplified into if statements to make the logic clearer.\ne.g.\n\nnodes \u003d getattr(lb, \u0027nodes\u0027, [])\nfor node in nodes:\n    if str(node.id) \u003d\u003d self.resource_id:\n        return node","commit_id":"e0dd419f3d336c1ec85c28336ce0fc627fa63858"},{"author":{"_account_id":15123,"name":"Drago","email":"drago.rosson@rackspace.com","username":"Drago"},"change_message_id":"de2bb50c98221079adf0410f206ba51161357c29","unresolved":false,"context_lines":[{"line_number":120,"context_line":""},{"line_number":121,"context_line":"    def node(self, lb):"},{"line_number":122,"context_line":"        return next((n for n in getattr(lb, \u0027nodes\u0027, [])"},{"line_number":123,"context_line":"                     if str(n.id) \u003d\u003d self.resource_id),"},{"line_number":124,"context_line":"                    None)"},{"line_number":125,"context_line":""},{"line_number":126,"context_line":"    def handle_create(self):"}],"source_content_type":"text/x-python","patch_set":2,"id":"ba63e191_8537d5e2","line":123,"in_reply_to":"ba63e191_3c48895b","updated":"2016-01-18 23:09:03.000000000","message":"Done!","commit_id":"e0dd419f3d336c1ec85c28336ce0fc627fa63858"},{"author":{"_account_id":16203,"name":"zengyingzhe","email":"zengyingzhe@huawei.com","username":"zengyingzhe"},"change_message_id":"4f5f43ec02d39feec5ae427b18207e57e3870fa2","unresolved":false,"context_lines":[{"line_number":53,"context_line":"    _OTHER_KEYS \u003d ("},{"line_number":54,"context_line":"        LOAD_BALANCER, DRAINING_TIMEOUT"},{"line_number":55,"context_line":"    ) \u003d ("},{"line_number":56,"context_line":"        \u0027loadBalancer\u0027, \u0027drainingTimeout\u0027"},{"line_number":57,"context_line":"    )"},{"line_number":58,"context_line":""},{"line_number":59,"context_line":"    PROPERTIES \u003d _NODE_KEYS + _OTHER_KEYS"}],"source_content_type":"text/x-python","patch_set":7,"id":"ba63e191_ffc7ee0f","line":56,"range":{"start_line":56,"start_character":9,"end_line":56,"end_character":21},"updated":"2016-01-20 03:22:42.000000000","message":"Suggest using load_balancer format instead.","commit_id":"6ae9500d03232ffd1cec281a41fa227f497d3b5e"},{"author":{"_account_id":16203,"name":"zengyingzhe","email":"zengyingzhe@huawei.com","username":"zengyingzhe"},"change_message_id":"4f5f43ec02d39feec5ae427b18207e57e3870fa2","unresolved":false,"context_lines":[{"line_number":53,"context_line":"    _OTHER_KEYS \u003d ("},{"line_number":54,"context_line":"        LOAD_BALANCER, DRAINING_TIMEOUT"},{"line_number":55,"context_line":"    ) \u003d ("},{"line_number":56,"context_line":"        \u0027loadBalancer\u0027, \u0027drainingTimeout\u0027"},{"line_number":57,"context_line":"    )"},{"line_number":58,"context_line":""},{"line_number":59,"context_line":"    PROPERTIES \u003d _NODE_KEYS + _OTHER_KEYS"}],"source_content_type":"text/x-python","patch_set":7,"id":"ba63e191_3fe6e6b4","line":56,"range":{"start_line":56,"start_character":25,"end_line":56,"end_character":40},"updated":"2016-01-20 03:22:42.000000000","message":"as well.","commit_id":"6ae9500d03232ffd1cec281a41fa227f497d3b5e"},{"author":{"_account_id":15123,"name":"Drago","email":"drago.rosson@rackspace.com","username":"Drago"},"change_message_id":"84189a91692496c99514c490c61df99e99a79541","unresolved":false,"context_lines":[{"line_number":53,"context_line":"    _OTHER_KEYS \u003d ("},{"line_number":54,"context_line":"        LOAD_BALANCER, DRAINING_TIMEOUT"},{"line_number":55,"context_line":"    ) \u003d ("},{"line_number":56,"context_line":"        \u0027loadBalancer\u0027, \u0027drainingTimeout\u0027"},{"line_number":57,"context_line":"    )"},{"line_number":58,"context_line":""},{"line_number":59,"context_line":"    PROPERTIES \u003d _NODE_KEYS + _OTHER_KEYS"}],"source_content_type":"text/x-python","patch_set":7,"id":"9a68dd71_43686cb9","line":56,"range":{"start_line":56,"start_character":9,"end_line":56,"end_character":21},"in_reply_to":"ba63e191_ffc7ee0f","updated":"2016-01-22 17:48:24.000000000","message":"Done","commit_id":"6ae9500d03232ffd1cec281a41fa227f497d3b5e"},{"author":{"_account_id":16203,"name":"zengyingzhe","email":"zengyingzhe@huawei.com","username":"zengyingzhe"},"change_message_id":"4f5f43ec02d39feec5ae427b18207e57e3870fa2","unresolved":false,"context_lines":[{"line_number":142,"context_line":"        new_node \u003d body[\u0027nodes\u0027][0]"},{"line_number":143,"context_line":"        node_id \u003d new_node[\u0027id\u0027]"},{"line_number":144,"context_line":""},{"line_number":145,"context_line":"        self.resource_id_set(str(node_id))"},{"line_number":146,"context_line":"        return True"},{"line_number":147,"context_line":""},{"line_number":148,"context_line":"    def handle_update(self, json_snippet, tmpl_diff, prop_diff):"}],"source_content_type":"text/x-python","patch_set":7,"id":"ba63e191_6ef90e80","line":145,"range":{"start_line":145,"start_character":29,"end_line":145,"end_character":32},"updated":"2016-01-20 03:22:42.000000000","message":"Is it necessary to convert node_id by str()?","commit_id":"6ae9500d03232ffd1cec281a41fa227f497d3b5e"},{"author":{"_account_id":15123,"name":"Drago","email":"drago.rosson@rackspace.com","username":"Drago"},"change_message_id":"84189a91692496c99514c490c61df99e99a79541","unresolved":false,"context_lines":[{"line_number":142,"context_line":"        new_node \u003d body[\u0027nodes\u0027][0]"},{"line_number":143,"context_line":"        node_id \u003d new_node[\u0027id\u0027]"},{"line_number":144,"context_line":""},{"line_number":145,"context_line":"        self.resource_id_set(str(node_id))"},{"line_number":146,"context_line":"        return True"},{"line_number":147,"context_line":""},{"line_number":148,"context_line":"    def handle_update(self, json_snippet, tmpl_diff, prop_diff):"}],"source_content_type":"text/x-python","patch_set":7,"id":"9a68dd71_a39da8bd","line":145,"range":{"start_line":145,"start_character":29,"end_line":145,"end_character":32},"in_reply_to":"ba63e191_6ef90e80","updated":"2016-01-22 17:48:24.000000000","message":"Nope! Done.","commit_id":"6ae9500d03232ffd1cec281a41fa227f497d3b5e"},{"author":{"_account_id":16203,"name":"zengyingzhe","email":"zengyingzhe@huawei.com","username":"zengyingzhe"},"change_message_id":"4f5f43ec02d39feec5ae427b18207e57e3870fa2","unresolved":false,"context_lines":[{"line_number":149,"context_line":"        return prop_diff"},{"line_number":150,"context_line":""},{"line_number":151,"context_line":"    def check_update_complete(self, prop_diff):"},{"line_number":152,"context_line":"        node \u003d self.node(self.lb())"},{"line_number":153,"context_line":"        is_complete \u003d True"},{"line_number":154,"context_line":""},{"line_number":155,"context_line":"        for key in self._NODE_KEYS:"}],"source_content_type":"text/x-python","patch_set":7,"id":"ba63e191_6ecb4e54","line":152,"range":{"start_line":152,"start_character":8,"end_line":152,"end_character":12},"updated":"2016-01-20 03:22:42.000000000","message":"The result of node may be None. Need check it as well.","commit_id":"6ae9500d03232ffd1cec281a41fa227f497d3b5e"},{"author":{"_account_id":16203,"name":"zengyingzhe","email":"zengyingzhe@huawei.com","username":"zengyingzhe"},"change_message_id":"4f5f43ec02d39feec5ae427b18207e57e3870fa2","unresolved":false,"context_lines":[{"line_number":149,"context_line":"        return prop_diff"},{"line_number":150,"context_line":""},{"line_number":151,"context_line":"    def check_update_complete(self, prop_diff):"},{"line_number":152,"context_line":"        node \u003d self.node(self.lb())"},{"line_number":153,"context_line":"        is_complete \u003d True"},{"line_number":154,"context_line":""},{"line_number":155,"context_line":"        for key in self._NODE_KEYS:"}],"source_content_type":"text/x-python","patch_set":7,"id":"ba63e191_ee8f3e21","line":152,"range":{"start_line":152,"start_character":25,"end_line":152,"end_character":32},"updated":"2016-01-20 03:22:42.000000000","message":"lb may not exist. Please check the exception may throw out.","commit_id":"6ae9500d03232ffd1cec281a41fa227f497d3b5e"},{"author":{"_account_id":15123,"name":"Drago","email":"drago.rosson@rackspace.com","username":"Drago"},"change_message_id":"84189a91692496c99514c490c61df99e99a79541","unresolved":false,"context_lines":[{"line_number":149,"context_line":"        return prop_diff"},{"line_number":150,"context_line":""},{"line_number":151,"context_line":"    def check_update_complete(self, prop_diff):"},{"line_number":152,"context_line":"        node \u003d self.node(self.lb())"},{"line_number":153,"context_line":"        is_complete \u003d True"},{"line_number":154,"context_line":""},{"line_number":155,"context_line":"        for key in self._NODE_KEYS:"}],"source_content_type":"text/x-python","patch_set":7,"id":"9a68dd71_a384c85d","line":152,"range":{"start_line":152,"start_character":25,"end_line":152,"end_character":32},"in_reply_to":"ba63e191_ee8f3e21","updated":"2016-01-22 17:48:24.000000000","message":"I improved the exceptions and added unit tests for cases where the node is missing, lb missing, or lb deleted.","commit_id":"6ae9500d03232ffd1cec281a41fa227f497d3b5e"},{"author":{"_account_id":7256,"name":"Randall Burt","email":"randall.burt@rackspace.com","username":"randall-burt"},"change_message_id":"71e5a3776ecf9dadc28a973e7bed5fdb10d4903d","unresolved":false,"context_lines":[{"line_number":119,"context_line":""},{"line_number":120,"context_line":"    def __init__(self, name, json_snippet, stack):"},{"line_number":121,"context_line":"        super(LBNode, self).__init__(name, json_snippet, stack)"},{"line_number":122,"context_line":"        self.clb \u003d self.cloud_lb()"},{"line_number":123,"context_line":""},{"line_number":124,"context_line":"    def cloud_lb(self):"},{"line_number":125,"context_line":"        return self.client(\u0027cloud_lb\u0027)"}],"source_content_type":"text/x-python","patch_set":8,"id":"9a68dd71_87eee7b2","line":122,"updated":"2016-01-26 16:09:59.000000000","message":"This is a lot of hoop jumping. Grabbing the client in several places just to have some sort of attribute isn\u0027t efficient or safe if used this way. The \"correct\" way to access the client is set `default_client_name` for the class and use `self.client()` to access it safely.","commit_id":"4904cd1548c94bc833e474d146f53c56d752a431"},{"author":{"_account_id":15123,"name":"Drago","email":"drago.rosson@rackspace.com","username":"Drago"},"change_message_id":"06300fa0b390f67a2bc3b73574029696947479ff","unresolved":false,"context_lines":[{"line_number":119,"context_line":""},{"line_number":120,"context_line":"    def __init__(self, name, json_snippet, stack):"},{"line_number":121,"context_line":"        super(LBNode, self).__init__(name, json_snippet, stack)"},{"line_number":122,"context_line":"        self.clb \u003d self.cloud_lb()"},{"line_number":123,"context_line":""},{"line_number":124,"context_line":"    def cloud_lb(self):"},{"line_number":125,"context_line":"        return self.client(\u0027cloud_lb\u0027)"}],"source_content_type":"text/x-python","patch_set":8,"id":"9a68dd71_5b73dab4","line":122,"in_reply_to":"9a68dd71_87eee7b2","updated":"2016-01-26 20:29:36.000000000","message":"Done","commit_id":"4904cd1548c94bc833e474d146f53c56d752a431"},{"author":{"_account_id":7253,"name":"Jason Dunsmore","email":"jasondunsmore@gmail.com","username":"jbd"},"change_message_id":"d3e6b3bc591b362f1795e6618715b01f9a57c48d","unresolved":false,"context_lines":[{"line_number":37,"context_line":""},{"line_number":38,"context_line":""},{"line_number":39,"context_line":"class LoadbalancerDeleted(exception.HeatException):"},{"line_number":40,"context_line":"    msg_fmt \u003d _(\"The Load Balancer has been deleted\")"},{"line_number":41,"context_line":""},{"line_number":42,"context_line":""},{"line_number":43,"context_line":"class NodeNotFound(exception.HeatException):"}],"source_content_type":"text/x-python","patch_set":9,"id":"9a68dd71_5b9afac6","line":40,"updated":"2016-01-26 20:41:49.000000000","message":"Should we add an identifier for the load balancer in this message?","commit_id":"0f3308be4b7c3e94bfd8805ec0439d9e270a7a7b"},{"author":{"_account_id":15123,"name":"Drago","email":"drago.rosson@rackspace.com","username":"Drago"},"change_message_id":"279d93cbe8bd5ae716f4040193be096f3636ad4c","unresolved":false,"context_lines":[{"line_number":37,"context_line":""},{"line_number":38,"context_line":""},{"line_number":39,"context_line":"class LoadbalancerDeleted(exception.HeatException):"},{"line_number":40,"context_line":"    msg_fmt \u003d _(\"The Load Balancer has been deleted\")"},{"line_number":41,"context_line":""},{"line_number":42,"context_line":""},{"line_number":43,"context_line":"class NodeNotFound(exception.HeatException):"}],"source_content_type":"text/x-python","patch_set":9,"id":"7a5de9d1_d08d787c","line":40,"in_reply_to":"9a68dd71_5b9afac6","updated":"2016-01-27 19:42:42.000000000","message":"Done","commit_id":"0f3308be4b7c3e94bfd8805ec0439d9e270a7a7b"},{"author":{"_account_id":7253,"name":"Jason Dunsmore","email":"jasondunsmore@gmail.com","username":"jbd"},"change_message_id":"d3e6b3bc591b362f1795e6618715b01f9a57c48d","unresolved":false,"context_lines":[{"line_number":41,"context_line":""},{"line_number":42,"context_line":""},{"line_number":43,"context_line":"class NodeNotFound(exception.HeatException):"},{"line_number":44,"context_line":"    msg_fmt \u003d _(\"Node not found on Load Balancer\")"},{"line_number":45,"context_line":""},{"line_number":46,"context_line":""},{"line_number":47,"context_line":"class LBNode(resource.Resource):"}],"source_content_type":"text/x-python","patch_set":9,"id":"9a68dd71_1ba48206","line":44,"updated":"2016-01-26 20:41:49.000000000","message":"Ditto above","commit_id":"0f3308be4b7c3e94bfd8805ec0439d9e270a7a7b"},{"author":{"_account_id":15123,"name":"Drago","email":"drago.rosson@rackspace.com","username":"Drago"},"change_message_id":"279d93cbe8bd5ae716f4040193be096f3636ad4c","unresolved":false,"context_lines":[{"line_number":41,"context_line":""},{"line_number":42,"context_line":""},{"line_number":43,"context_line":"class NodeNotFound(exception.HeatException):"},{"line_number":44,"context_line":"    msg_fmt \u003d _(\"Node not found on Load Balancer\")"},{"line_number":45,"context_line":""},{"line_number":46,"context_line":""},{"line_number":47,"context_line":"class LBNode(resource.Resource):"}],"source_content_type":"text/x-python","patch_set":9,"id":"7a5de9d1_50f8a8e5","line":44,"in_reply_to":"9a68dd71_1ba48206","updated":"2016-01-27 19:42:42.000000000","message":"Done","commit_id":"0f3308be4b7c3e94bfd8805ec0439d9e270a7a7b"},{"author":{"_account_id":7253,"name":"Jason Dunsmore","email":"jasondunsmore@gmail.com","username":"jbd"},"change_message_id":"d3e6b3bc591b362f1795e6618715b01f9a57c48d","unresolved":false,"context_lines":[{"line_number":44,"context_line":"    msg_fmt \u003d _(\"Node not found on Load Balancer\")"},{"line_number":45,"context_line":""},{"line_number":46,"context_line":""},{"line_number":47,"context_line":"class LBNode(resource.Resource):"},{"line_number":48,"context_line":"    \"\"\"Represents a single node of a Rackspace Cloud Load Balancer\"\"\""},{"line_number":49,"context_line":""},{"line_number":50,"context_line":"    default_client_name \u003d \u0027cloud_lb\u0027"}],"source_content_type":"text/x-python","patch_set":9,"id":"9a68dd71_7b933e50","line":47,"updated":"2016-01-26 20:41:49.000000000","message":"Seems like this should be called LBNodeAssociation, since you\u0027re creating an association, not a node.","commit_id":"0f3308be4b7c3e94bfd8805ec0439d9e270a7a7b"},{"author":{"_account_id":7253,"name":"Jason Dunsmore","email":"jasondunsmore@gmail.com","username":"jbd"},"change_message_id":"aebd101c45ade6fa93f224d0237da75ecf83c016","unresolved":false,"context_lines":[{"line_number":44,"context_line":"    msg_fmt \u003d _(\"Node not found on Load Balancer\")"},{"line_number":45,"context_line":""},{"line_number":46,"context_line":""},{"line_number":47,"context_line":"class LBNode(resource.Resource):"},{"line_number":48,"context_line":"    \"\"\"Represents a single node of a Rackspace Cloud Load Balancer\"\"\""},{"line_number":49,"context_line":""},{"line_number":50,"context_line":"    default_client_name \u003d \u0027cloud_lb\u0027"}],"source_content_type":"text/x-python","patch_set":9,"id":"7a5de9d1_0a73e2b2","line":47,"in_reply_to":"7a5de9d1_b47c7721","updated":"2016-01-27 17:53:14.000000000","message":"Okay, I misunderstood the terminology.","commit_id":"0f3308be4b7c3e94bfd8805ec0439d9e270a7a7b"},{"author":{"_account_id":15123,"name":"Drago","email":"drago.rosson@rackspace.com","username":"Drago"},"change_message_id":"881b346e0e430984a9b584412d8c7ce6e5315dbf","unresolved":false,"context_lines":[{"line_number":44,"context_line":"    msg_fmt \u003d _(\"Node not found on Load Balancer\")"},{"line_number":45,"context_line":""},{"line_number":46,"context_line":""},{"line_number":47,"context_line":"class LBNode(resource.Resource):"},{"line_number":48,"context_line":"    \"\"\"Represents a single node of a Rackspace Cloud Load Balancer\"\"\""},{"line_number":49,"context_line":""},{"line_number":50,"context_line":"    default_client_name \u003d \u0027cloud_lb\u0027"}],"source_content_type":"text/x-python","patch_set":9,"id":"7a5de9d1_b47c7721","line":47,"in_reply_to":"9a68dd71_7b933e50","updated":"2016-01-27 17:19:13.000000000","message":"I don\u0027t understand how this resource is creating an association. It handles the entire lifecycle of the Load Balancer Node that it creates.","commit_id":"0f3308be4b7c3e94bfd8805ec0439d9e270a7a7b"},{"author":{"_account_id":7253,"name":"Jason Dunsmore","email":"jasondunsmore@gmail.com","username":"jbd"},"change_message_id":"d3e6b3bc591b362f1795e6618715b01f9a57c48d","unresolved":false,"context_lines":[{"line_number":49,"context_line":""},{"line_number":50,"context_line":"    default_client_name \u003d \u0027cloud_lb\u0027"},{"line_number":51,"context_line":""},{"line_number":52,"context_line":"    _CONDITIONS \u003d ("},{"line_number":53,"context_line":"        ENABLED, DISABLED, DRAINING,"},{"line_number":54,"context_line":"    ) \u003d ("},{"line_number":55,"context_line":"        \u0027ENABLED\u0027, \u0027DISABLED\u0027, \u0027DRAINING\u0027,"}],"source_content_type":"text/x-python","patch_set":9,"id":"9a68dd71_1b080228","line":52,"updated":"2016-01-26 20:41:49.000000000","message":"I\u0027m not sure we should use leading underscores here.  Per PEP8, \"Use one leading underscore only for non-public methods and instance variables.\"","commit_id":"0f3308be4b7c3e94bfd8805ec0439d9e270a7a7b"},{"author":{"_account_id":7253,"name":"Jason Dunsmore","email":"jasondunsmore@gmail.com","username":"jbd"},"change_message_id":"aebd101c45ade6fa93f224d0237da75ecf83c016","unresolved":false,"context_lines":[{"line_number":49,"context_line":""},{"line_number":50,"context_line":"    default_client_name \u003d \u0027cloud_lb\u0027"},{"line_number":51,"context_line":""},{"line_number":52,"context_line":"    _CONDITIONS \u003d ("},{"line_number":53,"context_line":"        ENABLED, DISABLED, DRAINING,"},{"line_number":54,"context_line":"    ) \u003d ("},{"line_number":55,"context_line":"        \u0027ENABLED\u0027, \u0027DISABLED\u0027, \u0027DRAINING\u0027,"}],"source_content_type":"text/x-python","patch_set":9,"id":"7a5de9d1_2a057ec1","line":52,"in_reply_to":"7a5de9d1_d43c9331","updated":"2016-01-27 17:53:14.000000000","message":"You\u0027re right.  I should\u0027ve checked the other resources first","commit_id":"0f3308be4b7c3e94bfd8805ec0439d9e270a7a7b"},{"author":{"_account_id":15123,"name":"Drago","email":"drago.rosson@rackspace.com","username":"Drago"},"change_message_id":"881b346e0e430984a9b584412d8c7ce6e5315dbf","unresolved":false,"context_lines":[{"line_number":49,"context_line":""},{"line_number":50,"context_line":"    default_client_name \u003d \u0027cloud_lb\u0027"},{"line_number":51,"context_line":""},{"line_number":52,"context_line":"    _CONDITIONS \u003d ("},{"line_number":53,"context_line":"        ENABLED, DISABLED, DRAINING,"},{"line_number":54,"context_line":"    ) \u003d ("},{"line_number":55,"context_line":"        \u0027ENABLED\u0027, \u0027DISABLED\u0027, \u0027DRAINING\u0027,"}],"source_content_type":"text/x-python","patch_set":9,"id":"7a5de9d1_d43c9331","line":52,"in_reply_to":"9a68dd71_1b080228","updated":"2016-01-27 17:19:13.000000000","message":"Leading underscores for class constants that aren\u0027t PROPERTIES or ATTRIBUTES seems to be the norm in resources. I didn\u0027t find an exception to that in the handful of resources I looked through.","commit_id":"0f3308be4b7c3e94bfd8805ec0439d9e270a7a7b"},{"author":{"_account_id":7253,"name":"Jason Dunsmore","email":"jasondunsmore@gmail.com","username":"jbd"},"change_message_id":"d3e6b3bc591b362f1795e6618715b01f9a57c48d","unresolved":false,"context_lines":[{"line_number":55,"context_line":"        \u0027ENABLED\u0027, \u0027DISABLED\u0027, \u0027DRAINING\u0027,"},{"line_number":56,"context_line":"    )"},{"line_number":57,"context_line":""},{"line_number":58,"context_line":"    _NODE_KEYS \u003d ("},{"line_number":59,"context_line":"        ADDRESS, PORT, CONDITION, TYPE, WEIGHT"},{"line_number":60,"context_line":"    ) \u003d ("},{"line_number":61,"context_line":"        \u0027address\u0027, \u0027port\u0027, \u0027condition\u0027, \u0027type\u0027, \u0027weight\u0027"}],"source_content_type":"text/x-python","patch_set":9,"id":"9a68dd71_db126a58","line":58,"updated":"2016-01-26 20:41:49.000000000","message":"Ditto above","commit_id":"0f3308be4b7c3e94bfd8805ec0439d9e270a7a7b"},{"author":{"_account_id":7253,"name":"Jason Dunsmore","email":"jasondunsmore@gmail.com","username":"jbd"},"change_message_id":"d3e6b3bc591b362f1795e6618715b01f9a57c48d","unresolved":false,"context_lines":[{"line_number":61,"context_line":"        \u0027address\u0027, \u0027port\u0027, \u0027condition\u0027, \u0027type\u0027, \u0027weight\u0027"},{"line_number":62,"context_line":"    )"},{"line_number":63,"context_line":""},{"line_number":64,"context_line":"    _OTHER_KEYS \u003d ("},{"line_number":65,"context_line":"        LOAD_BALANCER, DRAINING_TIMEOUT"},{"line_number":66,"context_line":"    ) \u003d ("},{"line_number":67,"context_line":"        \u0027load_balancer\u0027, \u0027draining_timeout\u0027"}],"source_content_type":"text/x-python","patch_set":9,"id":"9a68dd71_fb0f2e2c","line":64,"updated":"2016-01-26 20:41:49.000000000","message":"Ditto above","commit_id":"0f3308be4b7c3e94bfd8805ec0439d9e270a7a7b"},{"author":{"_account_id":7253,"name":"Jason Dunsmore","email":"jasondunsmore@gmail.com","username":"jbd"},"change_message_id":"d3e6b3bc591b362f1795e6618715b01f9a57c48d","unresolved":false,"context_lines":[{"line_number":87,"context_line":"        ),"},{"line_number":88,"context_line":"        ADDRESS: properties.Schema("},{"line_number":89,"context_line":"            properties.Schema.STRING,"},{"line_number":90,"context_line":"            _(\"IP address for the load balancer node.\"),"},{"line_number":91,"context_line":"            required\u003dTrue"},{"line_number":92,"context_line":"        ),"},{"line_number":93,"context_line":"        PORT: properties.Schema("}],"source_content_type":"text/x-python","patch_set":9,"id":"9a68dd71_dbcd8a87","line":90,"updated":"2016-01-26 20:41:49.000000000","message":"Maybe this should be \"IP address for the node.\"","commit_id":"0f3308be4b7c3e94bfd8805ec0439d9e270a7a7b"},{"author":{"_account_id":15123,"name":"Drago","email":"drago.rosson@rackspace.com","username":"Drago"},"change_message_id":"279d93cbe8bd5ae716f4040193be096f3636ad4c","unresolved":false,"context_lines":[{"line_number":87,"context_line":"        ),"},{"line_number":88,"context_line":"        ADDRESS: properties.Schema("},{"line_number":89,"context_line":"            properties.Schema.STRING,"},{"line_number":90,"context_line":"            _(\"IP address for the load balancer node.\"),"},{"line_number":91,"context_line":"            required\u003dTrue"},{"line_number":92,"context_line":"        ),"},{"line_number":93,"context_line":"        PORT: properties.Schema("}],"source_content_type":"text/x-python","patch_set":9,"id":"7a5de9d1_b0e79c3f","line":90,"in_reply_to":"9a68dd71_dbcd8a87","updated":"2016-01-27 19:42:42.000000000","message":"Done","commit_id":"0f3308be4b7c3e94bfd8805ec0439d9e270a7a7b"},{"author":{"_account_id":7253,"name":"Jason Dunsmore","email":"jasondunsmore@gmail.com","username":"jbd"},"change_message_id":"d3e6b3bc591b362f1795e6618715b01f9a57c48d","unresolved":false,"context_lines":[{"line_number":220,"context_line":""},{"line_number":221,"context_line":""},{"line_number":222,"context_line":"def resource_mapping():"},{"line_number":223,"context_line":"    return {\u0027Rackspace::Cloud::LBNode\u0027: LBNode}"},{"line_number":224,"context_line":""},{"line_number":225,"context_line":""},{"line_number":226,"context_line":"def available_resource_mapping():"}],"source_content_type":"text/x-python","patch_set":9,"id":"9a68dd71_dba26a9a","line":223,"updated":"2016-01-26 20:41:49.000000000","message":"Ditto line 47.","commit_id":"0f3308be4b7c3e94bfd8805ec0439d9e270a7a7b"}]}
