)]}'
{"doc/source/main/octaviaapi.rst":[{"author":{"_account_id":11685,"name":"Stephen Balukoff","email":"stephen@balukoff.com","username":"sbalukoff"},"change_message_id":"f88d4fa06c8a0cb39a8d5010e0aace77c08cd729","unresolved":false,"context_lines":[{"line_number":217,"context_line":"        \u0027vip\u0027:{"},{"line_number":218,"context_line":"            \u0027port_id\u0027: \u0027uuid\u0027,"},{"line_number":219,"context_line":"            \u0027network_id\u0027: \u0027uuid\u0027,"},{"line_number":220,"context_line":"            \u0027ip_address\u0027: \u0027127.0.0.1\u0027"},{"line_number":221,"context_line":"        },"},{"line_number":222,"context_line":"        \u0027tenant_id\u0027: \u0027uuid\u0027,"},{"line_number":223,"context_line":"        \u0027name\u0027: \u0027lb_name\u0027,"}],"source_content_type":"text/x-rst","patch_set":3,"id":"3a961159_1e56d52a","line":220,"updated":"2015-01-13 04:37:28.000000000","message":"Minor nit: In example responses, prefer to use something from the \u0027example address block\u0027 instead of loopback, unless you specifically want to imply that loopback is likely to be returned, eh. From: https://tools.ietf.org/html/rfc5737\n\nThe blocks 192.0.2.0/24 (TEST-NET-1), 198.51.100.0/24 (TEST-NET-2),\n   and 203.0.113.0/24 (TEST-NET-3) are provided for use in\n   documentation.","commit_id":"bb3023e507297300efca59a671acebc429facc8b"}],"octavia/common/data_models.py":[{"author":{"_account_id":10850,"name":"German Eichberger","email":"german.eichberger@gmail.com","username":"german"},"change_message_id":"29fa551773356185b619c0df294075bbd350a5b1","unresolved":false,"context_lines":[{"line_number":172,"context_line":"class Vip(BaseDataModel):"},{"line_number":173,"context_line":""},{"line_number":174,"context_line":"    def __init__(self, load_balancer_id\u003dNone, ip_address\u003dNone,"},{"line_number":175,"context_line":"                 network_id\u003dNone, port_id\u003dNone, load_balancer\u003dNone):"},{"line_number":176,"context_line":"        self.load_balancer_id \u003d load_balancer_id"},{"line_number":177,"context_line":"        self.ip_address \u003d ip_address"},{"line_number":178,"context_line":"        self.network_id \u003d network_id"}],"source_content_type":"text/x-python","patch_set":2,"id":"3a961159_5f094631","line":175,"updated":"2015-01-12 20:35:53.000000000","message":"Not sure but I think we might always have a load balancer (unless we were envisioning to run a VIP pool similar to an OFFLINE amphora pool)","commit_id":"322b1e14ba7a19276683cca77bff2fe5c43ccfb4"},{"author":{"_account_id":6951,"name":"Brandon Logan","email":"brandon.logan@rackspace.com","username":"brandon-logan"},"change_message_id":"d1cd4effc93abe53e5b47235fa60cc9a68b6e806","unresolved":false,"context_lines":[{"line_number":172,"context_line":"class Vip(BaseDataModel):"},{"line_number":173,"context_line":""},{"line_number":174,"context_line":"    def __init__(self, load_balancer_id\u003dNone, ip_address\u003dNone,"},{"line_number":175,"context_line":"                 network_id\u003dNone, port_id\u003dNone, load_balancer\u003dNone):"},{"line_number":176,"context_line":"        self.load_balancer_id \u003d load_balancer_id"},{"line_number":177,"context_line":"        self.ip_address \u003d ip_address"},{"line_number":178,"context_line":"        self.network_id \u003d network_id"}],"source_content_type":"text/x-python","patch_set":2,"id":"3a961159_b38a6162","line":175,"in_reply_to":"3a961159_5f094631","updated":"2015-01-12 22:14:17.000000000","message":"This is more here to do an exact copy of the sql alchemy model VIP that has a load_balancer_id and load_balancer.  The reason I made them default to None is to allow them to be easily used as a data container without required parameters.  The SA models will always have a load balancer, and as such when they get transformed into these, these will too.","commit_id":"322b1e14ba7a19276683cca77bff2fe5c43ccfb4"}],"octavia/network/base.py":[{"author":{"_account_id":10850,"name":"German Eichberger","email":"german.eichberger@gmail.com","username":"german"},"change_message_id":"29fa551773356185b619c0df294075bbd350a5b1","unresolved":false,"context_lines":[{"line_number":95,"context_line":"        :return: octavia.common.data_models.VIP"},{"line_number":96,"context_line":"        :raises: AllocateVIPException, PortNotFound, NetworkNotFound"},{"line_number":97,"context_line":"        \"\"\""},{"line_number":98,"context_line":"        pass"},{"line_number":99,"context_line":""},{"line_number":100,"context_line":"    @abc.abstractmethod"},{"line_number":101,"context_line":"    def deallocate_vip(self, vip):"}],"source_content_type":"text/x-python","patch_set":2,"id":"3a961159_823435e0","line":98,"updated":"2015-01-12 20:35:53.000000000","message":"wouldn\u0027t it be better to throw a NotImplememented Exception? Same is true for subsequent definitions--","commit_id":"322b1e14ba7a19276683cca77bff2fe5c43ccfb4"},{"author":{"_account_id":6951,"name":"Brandon Logan","email":"brandon.logan@rackspace.com","username":"brandon-logan"},"change_message_id":"d1cd4effc93abe53e5b47235fa60cc9a68b6e806","unresolved":false,"context_lines":[{"line_number":95,"context_line":"        :return: octavia.common.data_models.VIP"},{"line_number":96,"context_line":"        :raises: AllocateVIPException, PortNotFound, NetworkNotFound"},{"line_number":97,"context_line":"        \"\"\""},{"line_number":98,"context_line":"        pass"},{"line_number":99,"context_line":""},{"line_number":100,"context_line":"    @abc.abstractmethod"},{"line_number":101,"context_line":"    def deallocate_vip(self, vip):"}],"source_content_type":"text/x-python","patch_set":2,"id":"3a961159_189d140b","line":98,"in_reply_to":"3a961159_823435e0","updated":"2015-01-12 22:14:17.000000000","message":"thats what the @abc.abstractmethod decorator is for.  It will throw an exception if any class is instantiated without this method implemented.  Whereas throwing NotImplemented will allow a class to be instantiated that doesn\u0027t have this method implemented, and will only throw it when that method is called.","commit_id":"322b1e14ba7a19276683cca77bff2fe5c43ccfb4"}],"octavia/network/data_models.py":[{"author":{"_account_id":11685,"name":"Stephen Balukoff","email":"stephen@balukoff.com","username":"sbalukoff"},"change_message_id":"edf899d054bda94fe59489cf9decdb4dc0aa3039","unresolved":false,"context_lines":[{"line_number":22,"context_line":"        self.id \u003d id"},{"line_number":23,"context_line":"        self.amphora_id \u003d amphora_id"},{"line_number":24,"context_line":"        self.network_id \u003d network_id"},{"line_number":25,"context_line":"        self.ip_address \u003d ip_address"}],"source_content_type":"text/x-python","patch_set":2,"id":"3a961159_be278162","line":25,"updated":"2015-01-13 04:01:05.000000000","message":"Do we care what the amphora itself calls the interface (eg. \u0027eth0\u0027?) I can\u0027t imagine us having a use for that programmatically-- but do we ever envision exposing interface data to an operator (eg. for troubleshooting purposes)?","commit_id":"322b1e14ba7a19276683cca77bff2fe5c43ccfb4"},{"author":{"_account_id":6951,"name":"Brandon Logan","email":"brandon.logan@rackspace.com","username":"brandon-logan"},"change_message_id":"e2d56b85b91d63da2202ee27c1f4d126ea2cb651","unresolved":false,"context_lines":[{"line_number":22,"context_line":"        self.id \u003d id"},{"line_number":23,"context_line":"        self.amphora_id \u003d amphora_id"},{"line_number":24,"context_line":"        self.network_id \u003d network_id"},{"line_number":25,"context_line":"        self.ip_address \u003d ip_address"}],"source_content_type":"text/x-python","patch_set":2,"id":"3a961159_beb141e2","line":25,"in_reply_to":"3a961159_be278162","updated":"2015-01-13 04:15:40.000000000","message":"I doubt we\u0027ll need it soon.  However, the good thing about this model is it is easily added to.  No migration needed (at least not yet).  So if we ever do need that then we can just add it in here.","commit_id":"322b1e14ba7a19276683cca77bff2fe5c43ccfb4"}]}
