)]}'
{"etc/octavia.conf":[{"author":{"_account_id":11685,"name":"Stephen Balukoff","email":"stephen@balukoff.com","username":"sbalukoff"},"change_message_id":"9cc7ca511f641aa9bca0697a101aef3c3d7673e4","unresolved":false,"context_lines":[{"line_number":36,"context_line":"# storage_path \u003d /var/lib/octavia/certificates/"},{"line_number":37,"context_line":""},{"line_number":38,"context_line":"[networking]"},{"line_number":39,"context_line":"# management_net_id \u003d"}],"source_content_type":"text/plain","patch_set":16,"id":"5a890539_40392ed7","line":39,"updated":"2014-12-02 05:15:32.000000000","message":"We called this the \u0027loadbalancer network\u0027 in the design spec... partially because it\u0027s not exactly a management network (that is to say, data also flows over this network).","commit_id":"6507f665b1f873b5550a328869a8b0d556a04bae"},{"author":{"_account_id":10850,"name":"German Eichberger","email":"german.eichberger@gmail.com","username":"german"},"change_message_id":"adf92916e0f40976cd01e33e6bc50612ffb478dd","unresolved":false,"context_lines":[{"line_number":36,"context_line":"# storage_path \u003d /var/lib/octavia/certificates/"},{"line_number":37,"context_line":""},{"line_number":38,"context_line":"[networking]"},{"line_number":39,"context_line":"# management_net_id \u003d"}],"source_content_type":"text/plain","patch_set":16,"id":"5a890539_98526a11","line":39,"in_reply_to":"5a890539_155e4a45","updated":"2014-12-03 16:14:04.000000000","message":"Layer-3 routing will go through the VIP in most cases so depending which network we assign the VIP to the routing will happen. That said for the sake of this spec we don\u0027t need to decide where the VIPs end up.\n\nI think having an extra network for outside traffic is likely overkill (and we would need to shard that as well for scalability).","commit_id":"6507f665b1f873b5550a328869a8b0d556a04bae"},{"author":{"_account_id":10273,"name":"Adam Harwell","email":"flux.adam@gmail.com","username":"rm_you"},"change_message_id":"ed4cda322b581b884fcae03f48d521153859625f","unresolved":false,"context_lines":[{"line_number":36,"context_line":"# storage_path \u003d /var/lib/octavia/certificates/"},{"line_number":37,"context_line":""},{"line_number":38,"context_line":"[networking]"},{"line_number":39,"context_line":"# management_net_id \u003d"}],"source_content_type":"text/plain","patch_set":16,"id":"5a890539_9c6fec5f","line":39,"in_reply_to":"5a890539_40392ed7","updated":"2014-12-02 17:19:49.000000000","message":"What data flows through this network besides Amphorae configuration management?\nThere is an additional concern though, which is whether this is a single network or not. We need to discuss whether it is feasible to have *every Amphora* attached to a single Neutron Network (I have heard rumors that at the moment the networks in Neutron don\u0027t scale well enough to handle thousands of machines on a single one), or if we want to have a unique network per HA Set of Amphorae (which comes with its own limitations and scaling issues). This is one of the things I assumed would be discussed at length at our meetup.","commit_id":"6507f665b1f873b5550a328869a8b0d556a04bae"},{"author":{"_account_id":11685,"name":"Stephen Balukoff","email":"stephen@balukoff.com","username":"sbalukoff"},"change_message_id":"c9081104af72cf2c7f4506c712c32c7f5bbb8ef4","unresolved":false,"context_lines":[{"line_number":36,"context_line":"# storage_path \u003d /var/lib/octavia/certificates/"},{"line_number":37,"context_line":""},{"line_number":38,"context_line":"[networking]"},{"line_number":39,"context_line":"# management_net_id \u003d"}],"source_content_type":"text/plain","patch_set":16,"id":"5a890539_f74e3d37","line":39,"in_reply_to":"5a890539_5fa01690","updated":"2014-12-03 00:23:30.000000000","message":"Well, it\u0027s not just that--  if we\u0027re using layer-3 routing for the front-end topology, actual requests from clients for load balanced services will flow over this network as well. Hence the reason I want to avoid the term \"management network,\" as much as possible (and yes, I realize one of my earlier comments called it the \"load balancer / management network\" or something), because \u0027management network\u0027 is one of those terms that carries meaning: It implies that traffic on this network is privileged, sensitive, and can be trusted. None of these things are true for the loadbalancer network.","commit_id":"6507f665b1f873b5550a328869a8b0d556a04bae"},{"author":{"_account_id":6951,"name":"Brandon Logan","email":"brandon.logan@rackspace.com","username":"brandon-logan"},"change_message_id":"7974d8b82e2f4bf7ddd9320d639889bbec724e59","unresolved":false,"context_lines":[{"line_number":36,"context_line":"# storage_path \u003d /var/lib/octavia/certificates/"},{"line_number":37,"context_line":""},{"line_number":38,"context_line":"[networking]"},{"line_number":39,"context_line":"# management_net_id \u003d"}],"source_content_type":"text/plain","patch_set":16,"id":"5a890539_257dab6d","line":39,"in_reply_to":"5a890539_98526a11","updated":"2014-12-04 06:53:35.000000000","message":"calling it lb_network is fine.  different frontend topologies will have user traffic going over this, others will not.  it will be a management network for some and more for others.  calling it lb_network shoulnd\u0027t be a big deal.","commit_id":"6507f665b1f873b5550a328869a8b0d556a04bae"},{"author":{"_account_id":10850,"name":"German Eichberger","email":"german.eichberger@gmail.com","username":"german"},"change_message_id":"112a18671ca5832cc7fa5fbbf06c8d8d7aeb7334","unresolved":false,"context_lines":[{"line_number":36,"context_line":"# storage_path \u003d /var/lib/octavia/certificates/"},{"line_number":37,"context_line":""},{"line_number":38,"context_line":"[networking]"},{"line_number":39,"context_line":"# management_net_id \u003d"}],"source_content_type":"text/plain","patch_set":16,"id":"5a890539_5fa01690","line":39,"in_reply_to":"5a890539_9c6fec5f","updated":"2014-12-02 17:56:43.000000000","message":"Some people might want to use that network to transport haproxy logs upstream and metering \u0026 billing data (if amphora emit that by themselves straight to ceilometer).\n\nHaving multiple networks for potential scalability should be something we consider at the get go -- but as Stephen said that might be too big a can of worms so we might need to defer to get this spec moving forward.","commit_id":"6507f665b1f873b5550a328869a8b0d556a04bae"},{"author":{"_account_id":10806,"name":"Trevor Vardeman","email":"tvardema@redhat.com","username":"tvardeman"},"change_message_id":"9e2c10aa175a57685a99c42a23eea5b55d9b57a8","unresolved":false,"context_lines":[{"line_number":36,"context_line":"# storage_path \u003d /var/lib/octavia/certificates/"},{"line_number":37,"context_line":""},{"line_number":38,"context_line":"[networking]"},{"line_number":39,"context_line":"# management_net_id \u003d"}],"source_content_type":"text/plain","patch_set":16,"id":"5a890539_155e4a45","line":39,"in_reply_to":"5a890539_f74e3d37","updated":"2014-12-03 14:57:35.000000000","message":"I can\u0027t say I agree with Layer-3 routing going over this network, not with my current understanding of its purpose.  My thoughts were this network was dedicated to Operator actions.  Would it be all that difficult to add another network for Layer-3 routing (called load-balancer-network or something we might decide later) and use this network solely for Operator access?  This would solve the problem of the \"privileged, sensitive, and trusted\" requirements as well would it not?","commit_id":"6507f665b1f873b5550a328869a8b0d556a04bae"},{"author":{"_account_id":10980,"name":"Doug Wiegley","email":"dougwig@parkside.io","username":"dougw"},"change_message_id":"0558871eb8557165ec2334410fe3495dd1eae32f","unresolved":false,"context_lines":[{"line_number":36,"context_line":"# storage_path \u003d /var/lib/octavia/certificates/"},{"line_number":37,"context_line":""},{"line_number":38,"context_line":"[networking]"},{"line_number":39,"context_line":"# lb_network_id \u003d"}],"source_content_type":"text/plain","patch_set":18,"id":"3a961159_9bd5091e","line":39,"updated":"2014-12-12 03:22:25.000000000","message":"What is this?  comment needed","commit_id":"9da5956a10ed215462201b605d46f7bdbdbfecd3"}],"octavia/amphorae/drivers/compute/nova_driver.py":[{"author":{"_account_id":6951,"name":"Brandon Logan","email":"brandon.logan@rackspace.com","username":"brandon-logan"},"change_message_id":"b8aa49891100a877575fa32b49d1e32d56de406b","unresolved":false,"context_lines":[{"line_number":12,"context_line":"#    License for the specific language governing permissions and limitations"},{"line_number":13,"context_line":"#    under the License."},{"line_number":14,"context_line":""},{"line_number":15,"context_line":"from keystoneclient.auth.identity import v3 as keystone_client"},{"line_number":16,"context_line":"from keystoneclient import session"},{"line_number":17,"context_line":"from novaclient import client as nova_client"},{"line_number":18,"context_line":"from oslo.config import cfg"}],"source_content_type":"text/x-python","patch_set":15,"id":"5a890539_1b8c5e7f","line":15,"updated":"2014-11-18 23:59:02.000000000","message":"i worry about handling v3 vs v2, however, this will do for now.","commit_id":"675e5ac9faa73cb4c19fa9a05fff0b1ae2588434"},{"author":{"_account_id":6951,"name":"Brandon Logan","email":"brandon.logan@rackspace.com","username":"brandon-logan"},"change_message_id":"b8aa49891100a877575fa32b49d1e32d56de406b","unresolved":false,"context_lines":[{"line_number":31,"context_line":"CONF.import_group(\u0027keystone_authtoken\u0027, \u0027octavia.common.config\u0027)"},{"line_number":32,"context_line":""},{"line_number":33,"context_line":""},{"line_number":34,"context_line":"class VirtualMachineManager(compute_base.ComputeBase):"},{"line_number":35,"context_line":""},{"line_number":36,"context_line":"    def __init__(self):"},{"line_number":37,"context_line":"        super(VirtualMachineManager, self).__init__()"}],"source_content_type":"text/x-python","patch_set":15,"id":"5a890539_402a73e8","line":34,"updated":"2014-11-18 23:59:02.000000000","message":"Just calling this NovaManager for now will be sufficient.  Since build takes amphora_type, the NovaManager should be able to handle all types.","commit_id":"675e5ac9faa73cb4c19fa9a05fff0b1ae2588434"},{"author":{"_account_id":6951,"name":"Brandon Logan","email":"brandon.logan@rackspace.com","username":"brandon-logan"},"change_message_id":"b8aa49891100a877575fa32b49d1e32d56de406b","unresolved":false,"context_lines":[{"line_number":58,"context_line":"            raise exceptions.NovaBuildException()"},{"line_number":59,"context_line":""},{"line_number":60,"context_line":"    def delete(self, amphora_id):"},{"line_number":61,"context_line":"        if amphora_id is None and amphora_id is None:"},{"line_number":62,"context_line":"            raise exceptions.MissingArguments()"},{"line_number":63,"context_line":"        try:"},{"line_number":64,"context_line":"            self.manager.delete(server\u003damphora_id)"}],"source_content_type":"text/x-python","patch_set":15,"id":"5a890539_a08797d6","line":61,"updated":"2014-11-18 23:59:02.000000000","message":"if someone passes None to this method, its their fault that it broke.  We shouldn\u0027t have to check for None for every positional argument for every function/method ever created.","commit_id":"675e5ac9faa73cb4c19fa9a05fff0b1ae2588434"},{"author":{"_account_id":11685,"name":"Stephen Balukoff","email":"stephen@balukoff.com","username":"sbalukoff"},"change_message_id":"ddc259bdbee0b2b214b2220d2a51f530c61ff0a2","unresolved":false,"context_lines":[{"line_number":58,"context_line":"            raise exceptions.NovaBuildException()"},{"line_number":59,"context_line":""},{"line_number":60,"context_line":"    def delete(self, amphora_id):"},{"line_number":61,"context_line":"        if amphora_id is None and amphora_id is None:"},{"line_number":62,"context_line":"            raise exceptions.MissingArguments()"},{"line_number":63,"context_line":"        try:"},{"line_number":64,"context_line":"            self.manager.delete(server\u003damphora_id)"}],"source_content_type":"text/x-python","patch_set":15,"id":"5a890539_6473feb4","line":61,"in_reply_to":"5a890539_a08797d6","updated":"2014-11-19 03:06:54.000000000","message":"I generally agree with this.","commit_id":"675e5ac9faa73cb4c19fa9a05fff0b1ae2588434"},{"author":{"_account_id":6951,"name":"Brandon Logan","email":"brandon.logan@rackspace.com","username":"brandon-logan"},"change_message_id":"b8aa49891100a877575fa32b49d1e32d56de406b","unresolved":false,"context_lines":[{"line_number":67,"context_line":"            raise exceptions.NovaDeleteException()"},{"line_number":68,"context_line":""},{"line_number":69,"context_line":"    def status(self, amphora_id):"},{"line_number":70,"context_line":"        if amphora_id is None and amphora_id is None:"},{"line_number":71,"context_line":"            raise exceptions.MissingArguments()"},{"line_number":72,"context_line":"        try:"},{"line_number":73,"context_line":"            if self.get_amphora(amphora_id\u003damphora_id):"}],"source_content_type":"text/x-python","patch_set":15,"id":"5a890539_405fd375","line":70,"updated":"2014-11-18 23:59:02.000000000","message":"same as above","commit_id":"675e5ac9faa73cb4c19fa9a05fff0b1ae2588434"},{"author":{"_account_id":6951,"name":"Brandon Logan","email":"brandon.logan@rackspace.com","username":"brandon-logan"},"change_message_id":"b8aa49891100a877575fa32b49d1e32d56de406b","unresolved":false,"context_lines":[{"line_number":81,"context_line":"    def get_amphora(self, amphora_id\u003dNone, amphora_name\u003dNone):"},{"line_number":82,"context_line":"        # utilize nova client ServerManager \u0027get\u0027 method to retrieve info"},{"line_number":83,"context_line":"        amphora \u003d None"},{"line_number":84,"context_line":"        if amphora_id is None and amphora_name is None:"},{"line_number":85,"context_line":"            raise exceptions.MissingArguments()"},{"line_number":86,"context_line":"        try:"},{"line_number":87,"context_line":"            if amphora_id is not None:"}],"source_content_type":"text/x-python","patch_set":15,"id":"5a890539_db3576dc","line":84,"updated":"2014-11-18 23:59:02.000000000","message":"I suppose this is warranted, but I feel like it shouldn\u0027t be needed, that or we seprate out to a get_amphora_by_name method and a get_amphora(self, amphora_id) method.  Or we can just do away with getting an amphora by name because I don\u0027t see the value in that.","commit_id":"675e5ac9faa73cb4c19fa9a05fff0b1ae2588434"},{"author":{"_account_id":11685,"name":"Stephen Balukoff","email":"stephen@balukoff.com","username":"sbalukoff"},"change_message_id":"ddc259bdbee0b2b214b2220d2a51f530c61ff0a2","unresolved":false,"context_lines":[{"line_number":81,"context_line":"    def get_amphora(self, amphora_id\u003dNone, amphora_name\u003dNone):"},{"line_number":82,"context_line":"        # utilize nova client ServerManager \u0027get\u0027 method to retrieve info"},{"line_number":83,"context_line":"        amphora \u003d None"},{"line_number":84,"context_line":"        if amphora_id is None and amphora_name is None:"},{"line_number":85,"context_line":"            raise exceptions.MissingArguments()"},{"line_number":86,"context_line":"        try:"},{"line_number":87,"context_line":"            if amphora_id is not None:"}],"source_content_type":"text/x-python","patch_set":15,"id":"5a890539_c4b4b2d3","line":84,"in_reply_to":"5a890539_db3576dc","updated":"2014-11-19 03:06:54.000000000","message":"Agreed-- when do we anticipate ever getting an amphora by name? I can see the usefulness of knowing the amphora name for display in an Operator GUI, but in that case we will know the ID as well and can do any lookups or manipulation based on that.","commit_id":"675e5ac9faa73cb4c19fa9a05fff0b1ae2588434"},{"author":{"_account_id":6951,"name":"Brandon Logan","email":"brandon.logan@rackspace.com","username":"brandon-logan"},"change_message_id":"b8aa49891100a877575fa32b49d1e32d56de406b","unresolved":false,"context_lines":[{"line_number":100,"context_line":"            id\u003dnova_response.get(\u0027id\u0027),"},{"line_number":101,"context_line":"            status\u003dnova_response.get(\u0027status\u0027),"},{"line_number":102,"context_line":"            name\u003dnova_response.get(\u0027id\u0027),"},{"line_number":103,"context_line":"            management_ip\u003dnova_response.get(\u0027interface_list\u0027)[0]"},{"line_number":104,"context_line":"        )"},{"line_number":105,"context_line":"        return response"},{"line_number":106,"context_line":""}],"source_content_type":"text/x-python","patch_set":15,"id":"5a890539_3b9afac5","line":103,"updated":"2014-11-18 23:59:02.000000000","message":"i think you\u0027re going to have to loop through the interface list and find the network id that matches the management network id.  which would require you to load the management id from the config file.  However, I\u0027d be fine with that functionality being added in later bc that hasn\u0027t fully been discussed yet.   Unless there are other objections.","commit_id":"675e5ac9faa73cb4c19fa9a05fff0b1ae2588434"},{"author":{"_account_id":6951,"name":"Brandon Logan","email":"brandon.logan@rackspace.com","username":"brandon-logan"},"change_message_id":"9f8c14d9f88b0171cfd80cc7ee6d5cc5adced7fe","unresolved":false,"context_lines":[{"line_number":100,"context_line":"            id\u003dnova_response.get(\u0027id\u0027),"},{"line_number":101,"context_line":"            status\u003dnova_response.get(\u0027status\u0027),"},{"line_number":102,"context_line":"            name\u003dnova_response.get(\u0027id\u0027),"},{"line_number":103,"context_line":"            management_ip\u003dnova_response.get(\u0027interface_list\u0027)[0]"},{"line_number":104,"context_line":"        )"},{"line_number":105,"context_line":"        return response"},{"line_number":106,"context_line":""}],"source_content_type":"text/x-python","patch_set":15,"id":"5a890539_efc9877a","line":103,"in_reply_to":"5a890539_24f1f695","updated":"2014-11-19 03:20:58.000000000","message":"I don\u0027t think it is ever safe to assume that, our amphorae shouldn\u0027t have very many interfaces, so looping through them negligible anyway.  But like I said before, I don\u0027t think we need that just yet.","commit_id":"675e5ac9faa73cb4c19fa9a05fff0b1ae2588434"},{"author":{"_account_id":11685,"name":"Stephen Balukoff","email":"stephen@balukoff.com","username":"sbalukoff"},"change_message_id":"ddc259bdbee0b2b214b2220d2a51f530c61ff0a2","unresolved":false,"context_lines":[{"line_number":100,"context_line":"            id\u003dnova_response.get(\u0027id\u0027),"},{"line_number":101,"context_line":"            status\u003dnova_response.get(\u0027status\u0027),"},{"line_number":102,"context_line":"            name\u003dnova_response.get(\u0027id\u0027),"},{"line_number":103,"context_line":"            management_ip\u003dnova_response.get(\u0027interface_list\u0027)[0]"},{"line_number":104,"context_line":"        )"},{"line_number":105,"context_line":"        return response"},{"line_number":106,"context_line":""}],"source_content_type":"text/x-python","patch_set":15,"id":"5a890539_24f1f695","line":103,"in_reply_to":"5a890539_3b9afac5","updated":"2014-11-19 03:06:54.000000000","message":"Is it safe to assume the management interface is always going to be the first one on the amphora? If so, then we may not need to loop through all of them. If there\u0027s a possibility that the loopback interface shows up as the first one, then we might need to loop through them, eh.","commit_id":"675e5ac9faa73cb4c19fa9a05fff0b1ae2588434"},{"author":{"_account_id":11302,"name":"Phillip Toohill","email":"phillip.toohill@rackspace.com","username":"ptoohill1"},"change_message_id":"a63c449a9ae6e66fc58b2ea3fec429e0ae117368","unresolved":false,"context_lines":[{"line_number":41,"context_line":"        self.manager \u003d self._nova_client.servers"},{"line_number":42,"context_line":"        # Need to initialize database repo access to translate name into ID,"},{"line_number":43,"context_line":"        # and also needs name defined in the database"},{"line_number":44,"context_line":"        # self.repo \u003d None"},{"line_number":45,"context_line":""},{"line_number":46,"context_line":"    def get_logger(self):"},{"line_number":47,"context_line":"        pass"}],"source_content_type":"text/x-python","patch_set":16,"id":"5a890539_c2e694af","line":44,"updated":"2014-11-25 21:23:05.000000000","message":"Is this still needed if its commented out. I might just be unsure what this is used for.","commit_id":"6507f665b1f873b5550a328869a8b0d556a04bae"},{"author":{"_account_id":11685,"name":"Stephen Balukoff","email":"stephen@balukoff.com","username":"sbalukoff"},"change_message_id":"9cc7ca511f641aa9bca0697a101aef3c3d7673e4","unresolved":false,"context_lines":[{"line_number":41,"context_line":"        self.manager \u003d self._nova_client.servers"},{"line_number":42,"context_line":"        # Need to initialize database repo access to translate name into ID,"},{"line_number":43,"context_line":"        # and also needs name defined in the database"},{"line_number":44,"context_line":"        # self.repo \u003d None"},{"line_number":45,"context_line":""},{"line_number":46,"context_line":"    def get_logger(self):"},{"line_number":47,"context_line":"        pass"}],"source_content_type":"text/x-python","patch_set":16,"id":"5a890539_e04f7a68","line":44,"in_reply_to":"5a890539_c2e694af","updated":"2014-12-02 05:15:32.000000000","message":"+1 to Phillip here. Is this meant to be a TODO instead?","commit_id":"6507f665b1f873b5550a328869a8b0d556a04bae"},{"author":{"_account_id":11302,"name":"Phillip Toohill","email":"phillip.toohill@rackspace.com","username":"ptoohill1"},"change_message_id":"a63c449a9ae6e66fc58b2ea3fec429e0ae117368","unresolved":false,"context_lines":[{"line_number":103,"context_line":"    _keystone_session \u003d None"},{"line_number":104,"context_line":"    _nova_client \u003d None"},{"line_number":105,"context_line":""},{"line_number":106,"context_line":"    # TODO(rm_you): refactor for common availability"},{"line_number":107,"context_line":"    @classmethod"},{"line_number":108,"context_line":"    def _get_keystone_session(cls):"},{"line_number":109,"context_line":"        \"\"\"Initializes a Keystone session."}],"source_content_type":"text/x-python","patch_set":16,"id":"5a890539_8262cc3b","line":106,"updated":"2014-11-25 21:23:05.000000000","message":"Can this be refactored now rather than later?","commit_id":"6507f665b1f873b5550a328869a8b0d556a04bae"},{"author":{"_account_id":11685,"name":"Stephen Balukoff","email":"stephen@balukoff.com","username":"sbalukoff"},"change_message_id":"48bd1d20bc0cbf4b74418ebfc2766642e090681b","unresolved":false,"context_lines":[{"line_number":32,"context_line":"CONF.import_group(\u0027networking\u0027, \u0027octavia.common.config\u0027)"},{"line_number":33,"context_line":""},{"line_number":34,"context_line":""},{"line_number":35,"context_line":"class VirtualMachineManager(compute_base.ComputeBase):"},{"line_number":36,"context_line":""},{"line_number":37,"context_line":"    def __init__(self):"},{"line_number":38,"context_line":"        super(VirtualMachineManager, self).__init__()"}],"source_content_type":"text/x-python","patch_set":17,"id":"3a961159_36dd38e1","line":35,"updated":"2014-12-11 00:39:15.000000000","message":"Per the discussion in today\u0027s Octavia meeting, this is a reminder to please put docstrings to document classes and methods throughout these source files. :)","commit_id":"1ace69e4db466bf33e0e98367385808c5730a0a7"},{"author":{"_account_id":6951,"name":"Brandon Logan","email":"brandon.logan@rackspace.com","username":"brandon-logan"},"change_message_id":"cee40c8ad27fb04b53979eb9a77cf4a1ca0bd06f","unresolved":false,"context_lines":[{"line_number":21,"context_line":"from octavia.common import data_models as models"},{"line_number":22,"context_line":"from octavia.common import exceptions"},{"line_number":23,"context_line":"from octavia.compute import compute_base"},{"line_number":24,"context_line":"from octavia.openstack.common import excutils"},{"line_number":25,"context_line":"from octavia.openstack.common import gettextutils as u"},{"line_number":26,"context_line":"from octavia.openstack.common import log"},{"line_number":27,"context_line":""}],"source_content_type":"text/x-python","patch_set":18,"id":"3a961159_dbcf9127","line":24,"updated":"2014-12-12 03:46:13.000000000","message":"this will need to be changed to from oslo.utils import excutils","commit_id":"9da5956a10ed215462201b605d46f7bdbdbfecd3"},{"author":{"_account_id":6951,"name":"Brandon Logan","email":"brandon.logan@rackspace.com","username":"brandon-logan"},"change_message_id":"cee40c8ad27fb04b53979eb9a77cf4a1ca0bd06f","unresolved":false,"context_lines":[{"line_number":22,"context_line":"from octavia.common import exceptions"},{"line_number":23,"context_line":"from octavia.compute import compute_base"},{"line_number":24,"context_line":"from octavia.openstack.common import excutils"},{"line_number":25,"context_line":"from octavia.openstack.common import gettextutils as u"},{"line_number":26,"context_line":"from octavia.openstack.common import log"},{"line_number":27,"context_line":""},{"line_number":28,"context_line":"LOG \u003d log.getLogger(__name__)"}],"source_content_type":"text/x-python","patch_set":18,"id":"3a961159_fbd44dbe","line":25,"updated":"2014-12-12 03:46:13.000000000","message":"this will need to be changed to from octavia.i18n import _LI, _LE, etc","commit_id":"9da5956a10ed215462201b605d46f7bdbdbfecd3"},{"author":{"_account_id":6951,"name":"Brandon Logan","email":"brandon.logan@rackspace.com","username":"brandon-logan"},"change_message_id":"cee40c8ad27fb04b53979eb9a77cf4a1ca0bd06f","unresolved":false,"context_lines":[{"line_number":62,"context_line":"            amphora \u003d self.manager.create("},{"line_number":63,"context_line":"                type\u003damphora_type, name\u003d\"amphora_name\", image\u003dimage_id,"},{"line_number":64,"context_line":"                flavor\u003damphora_flavor, keys\u003dkeys, sec_groups\u003dsec_groups,"},{"line_number":65,"context_line":"                network_ids\u003dnetwork_ids)"},{"line_number":66,"context_line":"            return amphora.get(\u0027id\u0027)"},{"line_number":67,"context_line":"        except Exception as e:"},{"line_number":68,"context_line":"            LOG.error(u._LE(\"Error building nova virtual machine.\\n%s\") % e)"}],"source_content_type":"text/x-python","patch_set":18,"id":"3a961159_3b2415c4","line":65,"updated":"2014-12-12 03:46:13.000000000","message":"These are not the actual kwargs the nova client server manager accepts.  Doesn\u0027t look like it even accepts a type.\n\nhttp://docs.openstack.org/developer/python-novaclient/","commit_id":"9da5956a10ed215462201b605d46f7bdbdbfecd3"},{"author":{"_account_id":10980,"name":"Doug Wiegley","email":"dougwig@parkside.io","username":"dougw"},"change_message_id":"0558871eb8557165ec2334410fe3495dd1eae32f","unresolved":false,"context_lines":[{"line_number":76,"context_line":"        try:"},{"line_number":77,"context_line":"            self.manager.delete(server\u003damphora_id)"},{"line_number":78,"context_line":"        except Exception as e:"},{"line_number":79,"context_line":"            LOG.error(u._LE(\"Error deleting nova virtual machine.\\n%s\") % e)"},{"line_number":80,"context_line":"            raise exceptions.NovaDeleteException()"},{"line_number":81,"context_line":""},{"line_number":82,"context_line":"    def status(self, amphora_id):"}],"source_content_type":"text/x-python","patch_set":18,"id":"3a961159_1b7e7919","line":79,"updated":"2014-12-12 03:22:25.000000000","message":"The ruling on the field is that we\u0027re using the _LX() functions bare.  Also, you can use LOG.exception() and ditch the %s.  If that\u0027s missing, pull it over from neutron/common.","commit_id":"9da5956a10ed215462201b605d46f7bdbdbfecd3"},{"author":{"_account_id":10806,"name":"Trevor Vardeman","email":"tvardema@redhat.com","username":"tvardeman"},"change_message_id":"357a968d2097f835c2acf991ba3f8ef33a38a858","unresolved":false,"context_lines":[{"line_number":76,"context_line":"        try:"},{"line_number":77,"context_line":"            self.manager.delete(server\u003damphora_id)"},{"line_number":78,"context_line":"        except Exception as e:"},{"line_number":79,"context_line":"            LOG.error(u._LE(\"Error deleting nova virtual machine.\\n%s\") % e)"},{"line_number":80,"context_line":"            raise exceptions.NovaDeleteException()"},{"line_number":81,"context_line":""},{"line_number":82,"context_line":"    def status(self, amphora_id):"}],"source_content_type":"text/x-python","patch_set":18,"id":"3a961159_4fad7fe8","line":79,"in_reply_to":"3a961159_1b7e7919","updated":"2014-12-12 21:03:43.000000000","message":"1)  You\u0027re saying not to have \"u._LE\" but just \"_LE\" right?\n2)  You\u0027re advocating removing specific text in favor of catching only the error message thrown?  Example:\n\nLOG.error(_LE(\"something we say%s) % e) \u003c-- make this....\nLOG.exception(e) \u003c-- this?\n\nSorry, your comment has me confused.","commit_id":"9da5956a10ed215462201b605d46f7bdbdbfecd3"},{"author":{"_account_id":10980,"name":"Doug Wiegley","email":"dougwig@parkside.io","username":"dougw"},"change_message_id":"fb019a11b3c0944df369986e7eb93bf8b6befa8b","unresolved":false,"context_lines":[{"line_number":76,"context_line":"        try:"},{"line_number":77,"context_line":"            self.manager.delete(server\u003damphora_id)"},{"line_number":78,"context_line":"        except Exception as e:"},{"line_number":79,"context_line":"            LOG.error(u._LE(\"Error deleting nova virtual machine.\\n%s\") % e)"},{"line_number":80,"context_line":"            raise exceptions.NovaDeleteException()"},{"line_number":81,"context_line":""},{"line_number":82,"context_line":"    def status(self, amphora_id):"}],"source_content_type":"text/x-python","patch_set":18,"id":"3a961159_efdc6b48","line":79,"in_reply_to":"3a961159_4fad7fe8","updated":"2014-12-12 21:07:47.000000000","message":"I\u0027d suggesting this:\n\nLOG.exception(\"something we say\")\n\n... it\u0027ll append by the exception via magic.","commit_id":"9da5956a10ed215462201b605d46f7bdbdbfecd3"},{"author":{"_account_id":10980,"name":"Doug Wiegley","email":"dougwig@parkside.io","username":"dougw"},"change_message_id":"f3c50c62c63e6603a1940d42f8187b7094d242e9","unresolved":false,"context_lines":[{"line_number":76,"context_line":"        try:"},{"line_number":77,"context_line":"            self.manager.delete(server\u003damphora_id)"},{"line_number":78,"context_line":"        except Exception as e:"},{"line_number":79,"context_line":"            LOG.error(u._LE(\"Error deleting nova virtual machine.\\n%s\") % e)"},{"line_number":80,"context_line":"            raise exceptions.NovaDeleteException()"},{"line_number":81,"context_line":""},{"line_number":82,"context_line":"    def status(self, amphora_id):"}],"source_content_type":"text/x-python","patch_set":18,"id":"3a961159_cf316f5b","line":79,"in_reply_to":"3a961159_efdc6b48","updated":"2014-12-12 21:12:13.000000000","message":"I botched that example:\n\nLOG.exception(_LE(\"something we say\"))","commit_id":"9da5956a10ed215462201b605d46f7bdbdbfecd3"},{"author":{"_account_id":10980,"name":"Doug Wiegley","email":"dougwig@parkside.io","username":"dougw"},"change_message_id":"0558871eb8557165ec2334410fe3495dd1eae32f","unresolved":false,"context_lines":[{"line_number":77,"context_line":"            self.manager.delete(server\u003damphora_id)"},{"line_number":78,"context_line":"        except Exception as e:"},{"line_number":79,"context_line":"            LOG.error(u._LE(\"Error deleting nova virtual machine.\\n%s\") % e)"},{"line_number":80,"context_line":"            raise exceptions.NovaDeleteException()"},{"line_number":81,"context_line":""},{"line_number":82,"context_line":"    def status(self, amphora_id):"},{"line_number":83,"context_line":"        \u0027\u0027\u0027Retrieve the status of a virtual machine."}],"source_content_type":"text/x-python","patch_set":18,"id":"3a961159_7b713d43","line":80,"updated":"2014-12-12 03:22:25.000000000","message":"Is this the same exception that Nova raises?  If not, re-raise context?","commit_id":"9da5956a10ed215462201b605d46f7bdbdbfecd3"},{"author":{"_account_id":10806,"name":"Trevor Vardeman","email":"tvardema@redhat.com","username":"tvardeman"},"change_message_id":"357a968d2097f835c2acf991ba3f8ef33a38a858","unresolved":false,"context_lines":[{"line_number":77,"context_line":"            self.manager.delete(server\u003damphora_id)"},{"line_number":78,"context_line":"        except Exception as e:"},{"line_number":79,"context_line":"            LOG.error(u._LE(\"Error deleting nova virtual machine.\\n%s\") % e)"},{"line_number":80,"context_line":"            raise exceptions.NovaDeleteException()"},{"line_number":81,"context_line":""},{"line_number":82,"context_line":"    def status(self, amphora_id):"},{"line_number":83,"context_line":"        \u0027\u0027\u0027Retrieve the status of a virtual machine."}],"source_content_type":"text/x-python","patch_set":18,"id":"3a961159_ec439969","line":80,"in_reply_to":"3a961159_7b713d43","updated":"2014-12-12 21:03:43.000000000","message":"We\u0027re raising an Octavia exception after catching all that is Exceptions otherwise... Mostly because we don\u0027t care what failure there is from Nova, we only care that it failed.","commit_id":"9da5956a10ed215462201b605d46f7bdbdbfecd3"},{"author":{"_account_id":10980,"name":"Doug Wiegley","email":"dougwig@parkside.io","username":"dougw"},"change_message_id":"fb019a11b3c0944df369986e7eb93bf8b6befa8b","unresolved":false,"context_lines":[{"line_number":77,"context_line":"            self.manager.delete(server\u003damphora_id)"},{"line_number":78,"context_line":"        except Exception as e:"},{"line_number":79,"context_line":"            LOG.error(u._LE(\"Error deleting nova virtual machine.\\n%s\") % e)"},{"line_number":80,"context_line":"            raise exceptions.NovaDeleteException()"},{"line_number":81,"context_line":""},{"line_number":82,"context_line":"    def status(self, amphora_id):"},{"line_number":83,"context_line":"        \u0027\u0027\u0027Retrieve the status of a virtual machine."}],"source_content_type":"text/x-python","patch_set":18,"id":"3a961159_8febe7da","line":80,"in_reply_to":"3a961159_ec439969","updated":"2014-12-12 21:07:47.000000000","message":"Ok, that\u0027s fine.","commit_id":"9da5956a10ed215462201b605d46f7bdbdbfecd3"},{"author":{"_account_id":11628,"name":"Michael Johnson","email":"johnsomor@gmail.com","username":"johnsom"},"change_message_id":"b818d259aa63b02fed0ec6a0de5e61acb44f0cfb","unresolved":false,"context_lines":[{"line_number":59,"context_line":"        \u0027\u0027\u0027"},{"line_number":60,"context_line":"        try:"},{"line_number":61,"context_line":"            amphora \u003d self.manager.create("},{"line_number":62,"context_line":"                name\u003d\"amphora_name\", image\u003dimage_id, flavor\u003damphora_flavor,"},{"line_number":63,"context_line":"                key_name\u003dkey_name, security_groups\u003dsec_groups,"},{"line_number":64,"context_line":"                nics\u003dnetwork_ids)"},{"line_number":65,"context_line":"            return amphora.get(\u0027id\u0027)"}],"source_content_type":"text/x-python","patch_set":19,"id":"3a961159_a70b58d4","line":62,"updated":"2014-12-14 15:29:28.000000000","message":"NIT: I would prefer name to default to \"amphora_name\" and be a parameter that can optionally be set.  I see debugging value in giving them a configurable name such as \"amphora_az1\" or \"amphora_2GB\".","commit_id":"ec92b6f3b4172b2e2362d77a4f4b930b5cacb705"},{"author":{"_account_id":10806,"name":"Trevor Vardeman","email":"tvardema@redhat.com","username":"tvardeman"},"change_message_id":"da10fc13af25c482a5c3c2d2319fc5bd4ed7d9b3","unresolved":false,"context_lines":[{"line_number":59,"context_line":"        \u0027\u0027\u0027"},{"line_number":60,"context_line":"        try:"},{"line_number":61,"context_line":"            amphora \u003d self.manager.create("},{"line_number":62,"context_line":"                name\u003d\"amphora_name\", image\u003dimage_id, flavor\u003damphora_flavor,"},{"line_number":63,"context_line":"                key_name\u003dkey_name, security_groups\u003dsec_groups,"},{"line_number":64,"context_line":"                nics\u003dnetwork_ids)"},{"line_number":65,"context_line":"            return amphora.get(\u0027id\u0027)"}],"source_content_type":"text/x-python","patch_set":19,"id":"3a961159_96603302","line":62,"in_reply_to":"3a961159_a70b58d4","updated":"2014-12-15 17:10:17.000000000","message":"That\u0027s my fault, its supposed to include a name parameter.","commit_id":"ec92b6f3b4172b2e2362d77a4f4b930b5cacb705"},{"author":{"_account_id":6951,"name":"Brandon Logan","email":"brandon.logan@rackspace.com","username":"brandon-logan"},"change_message_id":"2c81f3ee0b34b1131b7454490fc6c70847518128","unresolved":false,"context_lines":[{"line_number":11,"context_line":"#    WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the"},{"line_number":12,"context_line":"#    License for the specific language governing permissions and limitations"},{"line_number":13,"context_line":"#    under the License."},{"line_number":14,"context_line":""},{"line_number":15,"context_line":"from keystoneclient.auth.identity import v3 as keystone_client"},{"line_number":16,"context_line":"from keystoneclient import session"},{"line_number":17,"context_line":"from novaclient import client as nova_client"}],"source_content_type":"text/x-python","patch_set":20,"id":"3a961159_62069787","line":14,"updated":"2015-01-10 08:21:31.000000000","message":"i feel like this entire file should reside in octavia.compute.drivers, since thats where the interface will reside.  Am I missing something on this?","commit_id":"a90715100a83185f6c709eb0360bf37beeb1e8d4"},{"author":{"_account_id":10850,"name":"German Eichberger","email":"german.eichberger@gmail.com","username":"german"},"change_message_id":"e8f6485c1aa3c045cd9fa6cf418c2a9ee57f1fd0","unresolved":false,"context_lines":[{"line_number":45,"context_line":"        \u0027\u0027\u0027Retrieve a custom logger.\u0027\u0027\u0027"},{"line_number":46,"context_line":"        pass"},{"line_number":47,"context_line":""},{"line_number":48,"context_line":"    def build(self, name\u003d\"amphora_name\", amphora_flavor\u003dNone, image_id\u003dNone,"},{"line_number":49,"context_line":"              key_name\u003dNone, sec_groups\u003dNone, network_ids\u003dNone):"},{"line_number":50,"context_line":"        \u0027\u0027\u0027Create a new virtual machine."},{"line_number":51,"context_line":""}],"source_content_type":"text/x-python","patch_set":20,"id":"3a961159_03fb9d7b","line":48,"updated":"2015-01-05 22:53:28.000000000","message":"Make sure to note this is an async operation -- with that we will need a check_boot operation to make sure the boot was successful (see https://github.com/dreamhost/akanda-rug/blob/master/akanda/rug/vm_manager.py) - also note the boot timeout management","commit_id":"a90715100a83185f6c709eb0360bf37beeb1e8d4"},{"author":{"_account_id":6951,"name":"Brandon Logan","email":"brandon.logan@rackspace.com","username":"brandon-logan"},"change_message_id":"38aca4409b1932cdacec584dbcbb4cecdd20a730","unresolved":false,"context_lines":[{"line_number":45,"context_line":"        \u0027\u0027\u0027Retrieve a custom logger.\u0027\u0027\u0027"},{"line_number":46,"context_line":"        pass"},{"line_number":47,"context_line":""},{"line_number":48,"context_line":"    def build(self, name\u003d\"amphora_name\", amphora_flavor\u003dNone, image_id\u003dNone,"},{"line_number":49,"context_line":"              key_name\u003dNone, sec_groups\u003dNone, network_ids\u003dNone):"},{"line_number":50,"context_line":"        \u0027\u0027\u0027Create a new virtual machine."},{"line_number":51,"context_line":""}],"source_content_type":"text/x-python","patch_set":20,"id":"3a961159_7fc44241","line":48,"in_reply_to":"3a961159_03fb9d7b","updated":"2015-01-12 20:17:41.000000000","message":"You mean this method is async?  I was under the impression that this would be synchronous, and the layer calling into this would poll the status method or even get_amphora until it was booted.","commit_id":"a90715100a83185f6c709eb0360bf37beeb1e8d4"},{"author":{"_account_id":10850,"name":"German Eichberger","email":"german.eichberger@gmail.com","username":"german"},"change_message_id":"25a21ced42c942bc117006b01428e0dbb5100141","unresolved":false,"context_lines":[{"line_number":45,"context_line":"        \u0027\u0027\u0027Retrieve a custom logger.\u0027\u0027\u0027"},{"line_number":46,"context_line":"        pass"},{"line_number":47,"context_line":""},{"line_number":48,"context_line":"    def build(self, name\u003d\"amphora_name\", amphora_flavor\u003dNone, image_id\u003dNone,"},{"line_number":49,"context_line":"              key_name\u003dNone, sec_groups\u003dNone, network_ids\u003dNone):"},{"line_number":50,"context_line":"        \u0027\u0027\u0027Create a new virtual machine."},{"line_number":51,"context_line":""}],"source_content_type":"text/x-python","patch_set":20,"id":"3a961159_e880574b","line":48,"in_reply_to":"3a961159_7fc44241","updated":"2015-01-13 17:38:54.000000000","message":"You are right - I didn\u0027t think that through enough --","commit_id":"a90715100a83185f6c709eb0360bf37beeb1e8d4"},{"author":{"_account_id":10850,"name":"German Eichberger","email":"german.eichberger@gmail.com","username":"german"},"change_message_id":"e8f6485c1aa3c045cd9fa6cf418c2a9ee57f1fd0","unresolved":false,"context_lines":[{"line_number":133,"context_line":""},{"line_number":134,"context_line":"    # TODO(rm_you): refactor for common availability"},{"line_number":135,"context_line":"    @classmethod"},{"line_number":136,"context_line":"    def _get_keystone_session(cls):"},{"line_number":137,"context_line":"        \"\"\"Initializes a Keystone session."},{"line_number":138,"context_line":""},{"line_number":139,"context_line":"        :return: a Keystone Session object"}],"source_content_type":"text/x-python","patch_set":20,"id":"3a961159_83730d15","line":136,"updated":"2015-01-05 22:53:28.000000000","message":"wgy are we using keystone directly? Why not the nova login method? I assume the goal is to have one login to use with different clients but is that realistic?","commit_id":"a90715100a83185f6c709eb0360bf37beeb1e8d4"},{"author":{"_account_id":6951,"name":"Brandon Logan","email":"brandon.logan@rackspace.com","username":"brandon-logan"},"change_message_id":"38aca4409b1932cdacec584dbcbb4cecdd20a730","unresolved":false,"context_lines":[{"line_number":133,"context_line":""},{"line_number":134,"context_line":"    # TODO(rm_you): refactor for common availability"},{"line_number":135,"context_line":"    @classmethod"},{"line_number":136,"context_line":"    def _get_keystone_session(cls):"},{"line_number":137,"context_line":"        \"\"\"Initializes a Keystone session."},{"line_number":138,"context_line":""},{"line_number":139,"context_line":"        :return: a Keystone Session object"}],"source_content_type":"text/x-python","patch_set":20,"id":"3a961159_9f73ae4d","line":136,"in_reply_to":"3a961159_83730d15","updated":"2015-01-12 20:17:41.000000000","message":"Yeah it seems to be doing novaclient.client.Client(VERSION, USERNAME, PASSWORD, AUTH_URL) would work and save this entire method.  I could see a use case for this method to reuse across other clients, but I don\u0027t think it warrants the extra cruft right now.","commit_id":"a90715100a83185f6c709eb0360bf37beeb1e8d4"},{"author":{"_account_id":10273,"name":"Adam Harwell","email":"flux.adam@gmail.com","username":"rm_you"},"change_message_id":"fc0cdb3da7554e235ce81f1e50be39ced1af8701","unresolved":false,"context_lines":[{"line_number":133,"context_line":""},{"line_number":134,"context_line":"    # TODO(rm_you): refactor for common availability"},{"line_number":135,"context_line":"    @classmethod"},{"line_number":136,"context_line":"    def _get_keystone_session(cls):"},{"line_number":137,"context_line":"        \"\"\"Initializes a Keystone session."},{"line_number":138,"context_line":""},{"line_number":139,"context_line":"        :return: a Keystone Session object"}],"source_content_type":"text/x-python","patch_set":20,"id":"3a961159_c8f55b52","line":136,"in_reply_to":"3a961159_8d7aa175","updated":"2015-01-13 17:50:51.000000000","message":"http://docs.openstack.org/developer/python-keystoneclient/using-api-v3.html#non-session-authentication-deprecated","commit_id":"a90715100a83185f6c709eb0360bf37beeb1e8d4"},{"author":{"_account_id":10273,"name":"Adam Harwell","email":"flux.adam@gmail.com","username":"rm_you"},"change_message_id":"ce8799446b412e35e2f12d471f8814a814dbf9fc","unresolved":false,"context_lines":[{"line_number":133,"context_line":""},{"line_number":134,"context_line":"    # TODO(rm_you): refactor for common availability"},{"line_number":135,"context_line":"    @classmethod"},{"line_number":136,"context_line":"    def _get_keystone_session(cls):"},{"line_number":137,"context_line":"        \"\"\"Initializes a Keystone session."},{"line_number":138,"context_line":""},{"line_number":139,"context_line":"        :return: a Keystone Session object"}],"source_content_type":"text/x-python","patch_set":20,"id":"3a961159_8d7aa175","line":136,"in_reply_to":"3a961159_9f73ae4d","updated":"2015-01-13 01:16:26.000000000","message":"That was the old method, and I think it has been deprecated in favor of explicit keystone sessions. Someone should verify this, but for now I\u0027d recommend keeping the code as it is.","commit_id":"a90715100a83185f6c709eb0360bf37beeb1e8d4"}],"octavia/common/config.py":[{"author":{"_account_id":11302,"name":"Phillip Toohill","email":"phillip.toohill@rackspace.com","username":"ptoohill1"},"change_message_id":"a63c449a9ae6e66fc58b2ea3fec429e0ae117368","unresolved":false,"context_lines":[{"line_number":85,"context_line":"networking_opts \u003d ["},{"line_number":86,"context_line":"    cfg.StrOpt(\u0027management_net_id\u0027, help\u003d_(\u0027ID of amphora management \u0027"},{"line_number":87,"context_line":"                                           \u0027network\u0027)),"},{"line_number":88,"context_line":"]"},{"line_number":89,"context_line":""},{"line_number":90,"context_line":"core_cli_opts \u003d []"},{"line_number":91,"context_line":""}],"source_content_type":"text/x-python","patch_set":16,"id":"5a890539_e2b71083","line":88,"updated":"2014-11-25 21:23:05.000000000","message":"nit: could possibly format this better by return line after parentheses","commit_id":"6507f665b1f873b5550a328869a8b0d556a04bae"}],"octavia/common/constants.py":[{"author":{"_account_id":10980,"name":"Doug Wiegley","email":"dougwig@parkside.io","username":"dougw"},"change_message_id":"0558871eb8557165ec2334410fe3495dd1eae32f","unresolved":false,"context_lines":[{"line_number":61,"context_line":"NOVA_1 \u003d \u00271.1\u0027"},{"line_number":62,"context_line":"NOVA_2 \u003d \u00272\u0027"},{"line_number":63,"context_line":"NOVA_3 \u003d \u00273\u0027"},{"line_number":64,"context_line":"NOVA_VERSIONS \u003d (NOVA_1, NOVA_2, NOVA_3)"}],"source_content_type":"text/x-python","patch_set":18,"id":"3a961159_fb9c4d5f","line":64,"updated":"2014-12-12 03:22:25.000000000","message":"Do we have to support all of them?","commit_id":"9da5956a10ed215462201b605d46f7bdbdbfecd3"},{"author":{"_account_id":6951,"name":"Brandon Logan","email":"brandon.logan@rackspace.com","username":"brandon-logan"},"change_message_id":"cee40c8ad27fb04b53979eb9a77cf4a1ca0bd06f","unresolved":false,"context_lines":[{"line_number":61,"context_line":"NOVA_1 \u003d \u00271.1\u0027"},{"line_number":62,"context_line":"NOVA_2 \u003d \u00272\u0027"},{"line_number":63,"context_line":"NOVA_3 \u003d \u00273\u0027"},{"line_number":64,"context_line":"NOVA_VERSIONS \u003d (NOVA_1, NOVA_2, NOVA_3)"}],"source_content_type":"text/x-python","patch_set":18,"id":"3a961159_9bbee963","line":64,"in_reply_to":"3a961159_fb9c4d5f","updated":"2014-12-12 03:46:13.000000000","message":"Sounds like with microversioning, they\u0027re not going to go with nova 3, just fold it into nova 2 with microversioning.  nova 1 i doubt we\u0027ll need.  So it\u0027s a tough question to answer right now.","commit_id":"9da5956a10ed215462201b605d46f7bdbdbfecd3"},{"author":{"_account_id":10850,"name":"German Eichberger","email":"german.eichberger@gmail.com","username":"german"},"change_message_id":"907cd934765e8c9724ce090f4af60c22dc75682c","unresolved":false,"context_lines":[{"line_number":57,"context_line":""},{"line_number":58,"context_line":"AMPHORA_UP \u003d \u0027UP\u0027"},{"line_number":59,"context_line":"AMPHORA_DOWN \u003d \u0027DOWN\u0027"},{"line_number":60,"context_line":"SUPPORTED_AMPHORA_STATUSES \u003d (AMPHORA_UP, AMPHORA_DOWN)"},{"line_number":61,"context_line":""},{"line_number":62,"context_line":"NOVA_1 \u003d \u00271.1\u0027"},{"line_number":63,"context_line":"NOVA_2 \u003d \u00272\u0027"}],"source_content_type":"text/x-python","patch_set":20,"id":"3a961159_5bb34f9a","line":60,"updated":"2015-01-09 16:49:48.000000000","message":"As I said elsewhere we will likely need boot, snapshot, debug (kept around for debugging), etc.","commit_id":"a90715100a83185f6c709eb0360bf37beeb1e8d4"},{"author":{"_account_id":10850,"name":"German Eichberger","email":"german.eichberger@gmail.com","username":"german"},"change_message_id":"25a21ced42c942bc117006b01428e0dbb5100141","unresolved":false,"context_lines":[{"line_number":57,"context_line":""},{"line_number":58,"context_line":"AMPHORA_UP \u003d \u0027UP\u0027"},{"line_number":59,"context_line":"AMPHORA_DOWN \u003d \u0027DOWN\u0027"},{"line_number":60,"context_line":"SUPPORTED_AMPHORA_STATUSES \u003d (AMPHORA_UP, AMPHORA_DOWN)"},{"line_number":61,"context_line":""},{"line_number":62,"context_line":"NOVA_1 \u003d \u00271.1\u0027"},{"line_number":63,"context_line":"NOVA_2 \u003d \u00272\u0027"}],"source_content_type":"text/x-python","patch_set":20,"id":"3a961159_080763ca","line":60,"in_reply_to":"3a961159_5bb34f9a","updated":"2015-01-13 17:38:54.000000000","message":"I thought we were talking high level statuses here: As discussed in IRC I would like to have high level statuses for an amphora: PENDING_CREATE, BOOTED, READY, and then when we activate the LB  PENDING_UPDATE, ACTIVE -- so remove up and down and please add those (even if they wouldn\u0027t be technically part of this review)","commit_id":"a90715100a83185f6c709eb0360bf37beeb1e8d4"}],"octavia/common/data_models.py":[{"author":{"_account_id":6951,"name":"Brandon Logan","email":"brandon.logan@rackspace.com","username":"brandon-logan"},"change_message_id":"b8aa49891100a877575fa32b49d1e32d56de406b","unresolved":false,"context_lines":[{"line_number":195,"context_line":"        self.host_id \u003d host_id"},{"line_number":196,"context_line":"        self.status \u003d status"},{"line_number":197,"context_line":"        self.management_ip \u003d management_ip"},{"line_number":198,"context_line":"        self.subnet_id \u003d subnet_id"},{"line_number":199,"context_line":"        self.load_balancer \u003d load_balancer"}],"source_content_type":"text/x-python","patch_set":15,"id":"5a890539_1bba9e0a","line":198,"updated":"2014-11-18 23:59:02.000000000","message":"what will this be used for?","commit_id":"675e5ac9faa73cb4c19fa9a05fff0b1ae2588434"},{"author":{"_account_id":11685,"name":"Stephen Balukoff","email":"stephen@balukoff.com","username":"sbalukoff"},"change_message_id":"ddc259bdbee0b2b214b2220d2a51f530c61ff0a2","unresolved":false,"context_lines":[{"line_number":195,"context_line":"        self.host_id \u003d host_id"},{"line_number":196,"context_line":"        self.status \u003d status"},{"line_number":197,"context_line":"        self.management_ip \u003d management_ip"},{"line_number":198,"context_line":"        self.subnet_id \u003d subnet_id"},{"line_number":199,"context_line":"        self.load_balancer \u003d load_balancer"}],"source_content_type":"text/x-python","patch_set":15,"id":"5a890539_a40b267c","line":198,"in_reply_to":"5a890539_1bba9e0a","updated":"2014-11-19 03:06:54.000000000","message":"Shouldn\u0027t it always be the load balancer subnet? (ie. the management subnet)?","commit_id":"675e5ac9faa73cb4c19fa9a05fff0b1ae2588434"}],"octavia/common/exceptions.py":[{"author":{"_account_id":6951,"name":"Brandon Logan","email":"brandon.logan@rackspace.com","username":"brandon-logan"},"change_message_id":"b8aa49891100a877575fa32b49d1e32d56de406b","unresolved":false,"context_lines":[{"line_number":72,"context_line":"    message \u003d _(\u0027Could not sign the certificate request: %(msg)s\u0027)"},{"line_number":73,"context_line":""},{"line_number":74,"context_line":""},{"line_number":75,"context_line":"class NovaException(Exception):"},{"line_number":76,"context_line":"    \"\"\"Base Nova Exception."},{"line_number":77,"context_line":""},{"line_number":78,"context_line":"    To correctly use this class, inherit from it and define a \u0027message\u0027"}],"source_content_type":"text/x-python","patch_set":15,"id":"5a890539_db6d769b","line":75,"updated":"2014-11-18 23:59:02.000000000","message":"why not inherit from OctaviaException and rid yourself of the duplicate code?","commit_id":"675e5ac9faa73cb4c19fa9a05fff0b1ae2588434"},{"author":{"_account_id":11685,"name":"Stephen Balukoff","email":"stephen@balukoff.com","username":"sbalukoff"},"change_message_id":"ddc259bdbee0b2b214b2220d2a51f530c61ff0a2","unresolved":false,"context_lines":[{"line_number":72,"context_line":"    message \u003d _(\u0027Could not sign the certificate request: %(msg)s\u0027)"},{"line_number":73,"context_line":""},{"line_number":74,"context_line":""},{"line_number":75,"context_line":"class NovaException(Exception):"},{"line_number":76,"context_line":"    \"\"\"Base Nova Exception."},{"line_number":77,"context_line":""},{"line_number":78,"context_line":"    To correctly use this class, inherit from it and define a \u0027message\u0027"}],"source_content_type":"text/x-python","patch_set":15,"id":"5a890539_04695a25","line":75,"in_reply_to":"5a890539_db6d769b","updated":"2014-11-19 03:06:54.000000000","message":"+1","commit_id":"675e5ac9faa73cb4c19fa9a05fff0b1ae2588434"},{"author":{"_account_id":6951,"name":"Brandon Logan","email":"brandon.logan@rackspace.com","username":"brandon-logan"},"change_message_id":"cee40c8ad27fb04b53979eb9a77cf4a1ca0bd06f","unresolved":false,"context_lines":[{"line_number":72,"context_line":"    message \u003d _(\u0027Could not sign the certificate request: %(msg)s\u0027)"},{"line_number":73,"context_line":""},{"line_number":74,"context_line":""},{"line_number":75,"context_line":"class NovaBuildException(OctaviaException):"},{"line_number":76,"context_line":"    message \u003d u._LE(\u0027Failed to build nova instance.\u0027)"},{"line_number":77,"context_line":""},{"line_number":78,"context_line":""}],"source_content_type":"text/x-python","patch_set":18,"id":"3a961159_fbeb6d75","line":75,"updated":"2014-12-12 03:46:13.000000000","message":"I don\u0027t think these should be called Nova... as nova is an implementation of the Compute interface.  So instead of Nova, do Compute.","commit_id":"9da5956a10ed215462201b605d46f7bdbdbfecd3"}],"octavia/db/migration/alembic_migrations/versions/1f903774f880_modify_amphora_table.py":[{"author":{"_account_id":6951,"name":"Brandon Logan","email":"brandon.logan@rackspace.com","username":"brandon-logan"},"change_message_id":"b8aa49891100a877575fa32b49d1e32d56de406b","unresolved":false,"context_lines":[{"line_number":33,"context_line":"        u\u0027amphora\u0027, sa.Column(u\u0027name\u0027, sa.String(255), nullable\u003dTrue)"},{"line_number":34,"context_line":"    )"},{"line_number":35,"context_line":"    op.add_column("},{"line_number":36,"context_line":"        u\u0027amphora\u0027, sa.Column(u\u0027ip_address\u0027, sa.String(64), nullable\u003dFalse)"},{"line_number":37,"context_line":"    )"},{"line_number":38,"context_line":""},{"line_number":39,"context_line":""}],"source_content_type":"text/x-python","patch_set":15,"id":"5a890539_3ba03aa5","line":36,"updated":"2014-11-18 23:59:02.000000000","message":"shouldn\u0027t this be management_ip?","commit_id":"675e5ac9faa73cb4c19fa9a05fff0b1ae2588434"},{"author":{"_account_id":11685,"name":"Stephen Balukoff","email":"stephen@balukoff.com","username":"sbalukoff"},"change_message_id":"ddc259bdbee0b2b214b2220d2a51f530c61ff0a2","unresolved":false,"context_lines":[{"line_number":33,"context_line":"        u\u0027amphora\u0027, sa.Column(u\u0027name\u0027, sa.String(255), nullable\u003dTrue)"},{"line_number":34,"context_line":"    )"},{"line_number":35,"context_line":"    op.add_column("},{"line_number":36,"context_line":"        u\u0027amphora\u0027, sa.Column(u\u0027ip_address\u0027, sa.String(64), nullable\u003dFalse)"},{"line_number":37,"context_line":"    )"},{"line_number":38,"context_line":""},{"line_number":39,"context_line":""}],"source_content_type":"text/x-python","patch_set":15,"id":"5a890539_c45e7276","line":36,"in_reply_to":"5a890539_3ba03aa5","updated":"2014-11-19 03:06:54.000000000","message":"+1","commit_id":"675e5ac9faa73cb4c19fa9a05fff0b1ae2588434"},{"author":{"_account_id":6951,"name":"Brandon Logan","email":"brandon.logan@rackspace.com","username":"brandon-logan"},"change_message_id":"b8aa49891100a877575fa32b49d1e32d56de406b","unresolved":false,"context_lines":[{"line_number":39,"context_line":""},{"line_number":40,"context_line":"def downgrade():"},{"line_number":41,"context_line":"    op.drop_column(u\u0027amphora\u0027, u\u0027name\u0027)"},{"line_number":42,"context_line":"    op.drop_column(u\u0027amphora\u0027, u\u0027ip_address\u0027)"}],"source_content_type":"text/x-python","patch_set":15,"id":"5a890539_bb1eea0b","line":42,"updated":"2014-11-18 23:59:02.000000000","message":"it might be better to just add these columns to the initial migration.  Adam made a good point that there\u0027s really no need to have migrations right now other than the initial one because there isn\u0027t any version of this yet.  Once 0.5 comes out, thats when we will do new migration scripts.","commit_id":"675e5ac9faa73cb4c19fa9a05fff0b1ae2588434"},{"author":{"_account_id":11685,"name":"Stephen Balukoff","email":"stephen@balukoff.com","username":"sbalukoff"},"change_message_id":"ddc259bdbee0b2b214b2220d2a51f530c61ff0a2","unresolved":false,"context_lines":[{"line_number":39,"context_line":""},{"line_number":40,"context_line":"def downgrade():"},{"line_number":41,"context_line":"    op.drop_column(u\u0027amphora\u0027, u\u0027name\u0027)"},{"line_number":42,"context_line":"    op.drop_column(u\u0027amphora\u0027, u\u0027ip_address\u0027)"}],"source_content_type":"text/x-python","patch_set":15,"id":"5a890539_a4596690","line":42,"in_reply_to":"5a890539_bb1eea0b","updated":"2014-11-19 03:06:54.000000000","message":"Agreed. There\u0027s nobody running this anywhere yet, eh.","commit_id":"675e5ac9faa73cb4c19fa9a05fff0b1ae2588434"}],"octavia/db/migration/alembic_migrations/versions/35dee79d5865_initial_create.py":[{"author":{"_account_id":10850,"name":"German Eichberger","email":"german.eichberger@gmail.com","username":"german"},"change_message_id":"b0f7e3a836a05c052a2c387f7a2a783212021c0f","unresolved":false,"context_lines":[{"line_number":333,"context_line":"        sa.Column(u\u0027host_id\u0027, sa.String(36), nullable\u003dFalse),"},{"line_number":334,"context_line":"        sa.Column(u\u0027status\u0027, sa.String(36), nullable\u003dFalse),"},{"line_number":335,"context_line":"        sa.Column(u\u0027management_ip\u0027, sa.String(64), nullable\u003dFalse),"},{"line_number":336,"context_line":"        sa.PrimaryKeyConstraint(u\u0027id\u0027),"},{"line_number":337,"context_line":"        sa.ForeignKeyConstraint("},{"line_number":338,"context_line":"            [u\u0027status\u0027], [u\u0027provisioning_status.name\u0027],"},{"line_number":339,"context_line":"            name\u003du\u0027fk_container_provisioning_status_name\u0027)"}],"source_content_type":"text/x-python","patch_set":16,"id":"5a890539_ecce4c82","line":336,"updated":"2014-11-24 23:50:30.000000000","message":"we might need multiple management network. I have been told of neutron scaling issues but that might be something for a later patch.","commit_id":"6507f665b1f873b5550a328869a8b0d556a04bae"},{"author":{"_account_id":11685,"name":"Stephen Balukoff","email":"stephen@balukoff.com","username":"sbalukoff"},"change_message_id":"9cc7ca511f641aa9bca0697a101aef3c3d7673e4","unresolved":false,"context_lines":[{"line_number":333,"context_line":"        sa.Column(u\u0027host_id\u0027, sa.String(36), nullable\u003dFalse),"},{"line_number":334,"context_line":"        sa.Column(u\u0027status\u0027, sa.String(36), nullable\u003dFalse),"},{"line_number":335,"context_line":"        sa.Column(u\u0027management_ip\u0027, sa.String(64), nullable\u003dFalse),"},{"line_number":336,"context_line":"        sa.PrimaryKeyConstraint(u\u0027id\u0027),"},{"line_number":337,"context_line":"        sa.ForeignKeyConstraint("},{"line_number":338,"context_line":"            [u\u0027status\u0027], [u\u0027provisioning_status.name\u0027],"},{"line_number":339,"context_line":"            name\u003du\u0027fk_container_provisioning_status_name\u0027)"}],"source_content_type":"text/x-python","patch_set":16,"id":"5a890539_808f9674","line":336,"in_reply_to":"5a890539_ecce4c82","updated":"2014-12-02 05:15:32.000000000","message":"That\u0027s a pretty big can of worms to open, though I agree there might be a need for this. I\u0027m guessing it\u0027ll probably have something to do with physical locations of resources as well, which might be something we have to take into account. That\u0027s a huge can of worms, though, and I\u0027d like to see requirements before we go there.\n\nAlso, this is definitely not something we\u0027d need to support before Octavia v1.","commit_id":"6507f665b1f873b5550a328869a8b0d556a04bae"},{"author":{"_account_id":11628,"name":"Michael Johnson","email":"johnsomor@gmail.com","username":"johnsom"},"change_message_id":"b818d259aa63b02fed0ec6a0de5e61acb44f0cfb","unresolved":false,"context_lines":[{"line_number":332,"context_line":"        sa.Column(u\u0027id\u0027, sa.String(36), nullable\u003dFalse, autoincrement\u003dFalse),"},{"line_number":333,"context_line":"        sa.Column(u\u0027host_id\u0027, sa.String(36), nullable\u003dFalse),"},{"line_number":334,"context_line":"        sa.Column(u\u0027status\u0027, sa.String(36), nullable\u003dFalse),"},{"line_number":335,"context_line":"        sa.Column(u\u0027management_ip\u0027, sa.String(64), nullable\u003dFalse),"},{"line_number":336,"context_line":"        sa.PrimaryKeyConstraint(u\u0027id\u0027),"},{"line_number":337,"context_line":"        sa.ForeignKeyConstraint("},{"line_number":338,"context_line":"            [u\u0027status\u0027], [u\u0027provisioning_status.name\u0027],"}],"source_content_type":"text/x-python","patch_set":19,"id":"3a961159_e711e004","line":335,"updated":"2014-12-14 15:29:28.000000000","message":"Do we need to store all of the amphora creation details to be able to rebuild failed amphora?  I think we need the network_ids.  Wouldn\u0027t these network_ids include customer networks, or is this just the \"loadbalancer network\"?","commit_id":"ec92b6f3b4172b2e2362d77a4f4b930b5cacb705"},{"author":{"_account_id":10806,"name":"Trevor Vardeman","email":"tvardema@redhat.com","username":"tvardeman"},"change_message_id":"da10fc13af25c482a5c3c2d2319fc5bd4ed7d9b3","unresolved":false,"context_lines":[{"line_number":332,"context_line":"        sa.Column(u\u0027id\u0027, sa.String(36), nullable\u003dFalse, autoincrement\u003dFalse),"},{"line_number":333,"context_line":"        sa.Column(u\u0027host_id\u0027, sa.String(36), nullable\u003dFalse),"},{"line_number":334,"context_line":"        sa.Column(u\u0027status\u0027, sa.String(36), nullable\u003dFalse),"},{"line_number":335,"context_line":"        sa.Column(u\u0027management_ip\u0027, sa.String(64), nullable\u003dFalse),"},{"line_number":336,"context_line":"        sa.PrimaryKeyConstraint(u\u0027id\u0027),"},{"line_number":337,"context_line":"        sa.ForeignKeyConstraint("},{"line_number":338,"context_line":"            [u\u0027status\u0027], [u\u0027provisioning_status.name\u0027],"}],"source_content_type":"text/x-python","patch_set":19,"id":"3a961159_cf8ea179","line":335,"in_reply_to":"3a961159_e711e004","updated":"2014-12-15 17:10:17.000000000","message":"On the note of multiple networks specified here: if I remember correctly we decided to look into that after version 0.5 (maybe brandon or stephen can comment otherwise).  I did however change the name in the DB to appropriately reflect lb_network_ip.","commit_id":"ec92b6f3b4172b2e2362d77a4f4b930b5cacb705"},{"author":{"_account_id":6951,"name":"Brandon Logan","email":"brandon.logan@rackspace.com","username":"brandon-logan"},"change_message_id":"0f646129b983fdc68f65efbf4bccee1dc170a22e","unresolved":false,"context_lines":[{"line_number":330,"context_line":"        u\u0027amphora\u0027,"},{"line_number":331,"context_line":"        # id should come from the service providing the amphora (i.e. nova)"},{"line_number":332,"context_line":"        sa.Column(u\u0027id\u0027, sa.String(36), nullable\u003dFalse, autoincrement\u003dFalse),"},{"line_number":333,"context_line":"        sa.Column(u\u0027host_id\u0027, sa.String(36), nullable\u003dFalse),"},{"line_number":334,"context_line":"        sa.Column(u\u0027status\u0027, sa.String(36), nullable\u003dFalse),"},{"line_number":335,"context_line":"        sa.Column(u\u0027lb_network_ip\u0027, sa.String(64), nullable\u003dFalse),"},{"line_number":336,"context_line":"        sa.PrimaryKeyConstraint(u\u0027id\u0027),"}],"source_content_type":"text/x-python","patch_set":21,"id":"3a961159_57b82275","line":333,"updated":"2015-01-13 20:54:33.000000000","message":"this is going to overwrite the compute_id.  It\u0027s probably best to just turn this into its own migration, adding the lb_network_ip column.","commit_id":"3f05a541c522fa1fea5ac87374f8a60395c619f5"}],"octavia/db/models.py":[{"author":{"_account_id":6951,"name":"Brandon Logan","email":"brandon.logan@rackspace.com","username":"brandon-logan"},"change_message_id":"b8aa49891100a877575fa32b49d1e32d56de406b","unresolved":false,"context_lines":[{"line_number":316,"context_line":""},{"line_number":317,"context_line":"    id \u003d sa.Column(sa.String(36), nullable\u003dFalse, primary_key\u003dTrue,"},{"line_number":318,"context_line":"                   autoincrement\u003dFalse)"},{"line_number":319,"context_line":"    name \u003d sa.Column(sa.String(36), nullable\u003dTrue)"},{"line_number":320,"context_line":"    load_balancer_id \u003d sa.Column("},{"line_number":321,"context_line":"        sa.String(36), sa.ForeignKey(\"load_balancer.id\","},{"line_number":322,"context_line":"                                     name\u003d\"fk_amphora_load_balancer_id\"),"}],"source_content_type":"text/x-python","patch_set":15,"id":"5a890539_7bb3a20a","line":319,"updated":"2014-11-18 23:59:02.000000000","message":"s/36/255","commit_id":"675e5ac9faa73cb4c19fa9a05fff0b1ae2588434"},{"author":{"_account_id":6951,"name":"Brandon Logan","email":"brandon.logan@rackspace.com","username":"brandon-logan"},"change_message_id":"b8aa49891100a877575fa32b49d1e32d56de406b","unresolved":false,"context_lines":[{"line_number":322,"context_line":"                                     name\u003d\"fk_amphora_load_balancer_id\"),"},{"line_number":323,"context_line":"        nullable\u003dTrue)"},{"line_number":324,"context_line":"    host_id \u003d sa.Column(sa.String(36), nullable\u003dFalse)"},{"line_number":325,"context_line":"    management_ip \u003d sa.Column(sa.String(36), nullable\u003dFalse)"},{"line_number":326,"context_line":"    status \u003d sa.Column("},{"line_number":327,"context_line":"        sa.String(36),"},{"line_number":328,"context_line":"        sa.ForeignKey(\"provisioning_status.name\","}],"source_content_type":"text/x-python","patch_set":15,"id":"5a890539_bb934a5b","line":325,"updated":"2014-11-18 23:59:02.000000000","message":"s/36/64","commit_id":"675e5ac9faa73cb4c19fa9a05fff0b1ae2588434"},{"author":{"_account_id":11628,"name":"Michael Johnson","email":"johnsomor@gmail.com","username":"johnsom"},"change_message_id":"b818d259aa63b02fed0ec6a0de5e61acb44f0cfb","unresolved":false,"context_lines":[{"line_number":320,"context_line":"                                     name\u003d\"fk_amphora_load_balancer_id\"),"},{"line_number":321,"context_line":"        nullable\u003dTrue)"},{"line_number":322,"context_line":"    host_id \u003d sa.Column(sa.String(36), nullable\u003dFalse)"},{"line_number":323,"context_line":"    lb_network_ip \u003d sa.Column(sa.String(64), nullable\u003dFalse)"},{"line_number":324,"context_line":"    status \u003d sa.Column("},{"line_number":325,"context_line":"        sa.String(36),"},{"line_number":326,"context_line":"        sa.ForeignKey(\"provisioning_status.name\","}],"source_content_type":"text/x-python","patch_set":19,"id":"3a961159_4702b4b4","line":323,"updated":"2014-12-14 15:29:28.000000000","message":"Same comment here, do we need to store the network_ids to be able to rebuild failed amphora?","commit_id":"ec92b6f3b4172b2e2362d77a4f4b930b5cacb705"},{"author":{"_account_id":10850,"name":"German Eichberger","email":"german.eichberger@gmail.com","username":"german"},"change_message_id":"907cd934765e8c9724ce090f4af60c22dc75682c","unresolved":false,"context_lines":[{"line_number":320,"context_line":"                                     name\u003d\"fk_amphora_load_balancer_id\"),"},{"line_number":321,"context_line":"        nullable\u003dTrue)"},{"line_number":322,"context_line":"    host_id \u003d sa.Column(sa.String(36), nullable\u003dFalse)"},{"line_number":323,"context_line":"    lb_network_ip \u003d sa.Column(sa.String(64), nullable\u003dFalse)"},{"line_number":324,"context_line":"    status \u003d sa.Column("},{"line_number":325,"context_line":"        sa.String(36),"},{"line_number":326,"context_line":"        sa.ForeignKey(\"provisioning_status.name\","}],"source_content_type":"text/x-python","patch_set":20,"id":"3a961159_db73bf14","line":323,"updated":"2015-01-09 16:49:48.000000000","message":"I like that to be nullable so we can capture the case a nova vm comes up without an ip","commit_id":"a90715100a83185f6c709eb0360bf37beeb1e8d4"},{"author":{"_account_id":10850,"name":"German Eichberger","email":"german.eichberger@gmail.com","username":"german"},"change_message_id":"907cd934765e8c9724ce090f4af60c22dc75682c","unresolved":false,"context_lines":[{"line_number":323,"context_line":"    lb_network_ip \u003d sa.Column(sa.String(64), nullable\u003dFalse)"},{"line_number":324,"context_line":"    status \u003d sa.Column("},{"line_number":325,"context_line":"        sa.String(36),"},{"line_number":326,"context_line":"        sa.ForeignKey(\"provisioning_status.name\","},{"line_number":327,"context_line":"                      name\u003d\"fk_container_provisioning_status_name\"))"}],"source_content_type":"text/x-python","patch_set":20,"id":"3a961159_3b9763ed","line":326,"updated":"2015-01-09 16:49:48.000000000","message":"When I looked at the lifecycle of an amphora there is BOOT, etc... I am not sure if it makes sense to add that to the provisioning status table since there are nova specific states we might need. My main worry from an operator perspective is that I need to find the amphora in Error/Boot/Delete state Octavia didn\u0027t properly discard and I need to go into nova to do myself.\n\nFurthermore we will have special debug statuses like captures, snapshot, etc. to aid debugging. My understanding is I can query the DB for a list og amphora in that state to inspect.","commit_id":"a90715100a83185f6c709eb0360bf37beeb1e8d4"},{"author":{"_account_id":10850,"name":"German Eichberger","email":"german.eichberger@gmail.com","username":"german"},"change_message_id":"25a21ced42c942bc117006b01428e0dbb5100141","unresolved":false,"context_lines":[{"line_number":323,"context_line":"    lb_network_ip \u003d sa.Column(sa.String(64), nullable\u003dFalse)"},{"line_number":324,"context_line":"    status \u003d sa.Column("},{"line_number":325,"context_line":"        sa.String(36),"},{"line_number":326,"context_line":"        sa.ForeignKey(\"provisioning_status.name\","},{"line_number":327,"context_line":"                      name\u003d\"fk_container_provisioning_status_name\"))"}],"source_content_type":"text/x-python","patch_set":20,"id":"3a961159_28dc1f46","line":326,"in_reply_to":"3a961159_3b9763ed","updated":"2015-01-13 17:38:54.000000000","message":"We had the status discussion and my talking here applies to the high level controller status - so can be done in a different patch...","commit_id":"a90715100a83185f6c709eb0360bf37beeb1e8d4"}],"octavia/tests/unit/amphorae/drivers/test_nova_driver.py":[{"author":{"_account_id":6951,"name":"Brandon Logan","email":"brandon.logan@rackspace.com","username":"brandon-logan"},"change_message_id":"b8aa49891100a877575fa32b49d1e32d56de406b","unresolved":false,"context_lines":[{"line_number":43,"context_line":"        self.manager.manager \u003d mock.MagicMock()"},{"line_number":44,"context_line":"        self.manager.manager.get.return_value \u003d self.amphora"},{"line_number":45,"context_line":"        self.manager.manager.create.return_value \u003d self.nova_response"},{"line_number":46,"context_line":"        self.manager._translate_amphora \u003d mock.MagicMock()"},{"line_number":47,"context_line":"        self.manager._translate_amphora.return_value \u003d self.amphora"},{"line_number":48,"context_line":"        super(TestNovaClient, self).setUp()"},{"line_number":49,"context_line":""}],"source_content_type":"text/x-python","patch_set":15,"id":"5a890539_1ba9be7b","line":46,"updated":"2014-11-18 23:59:02.000000000","message":"either don\u0027t mock this or mock this and have a test specifically for this method.  The latter option is probably the right one.","commit_id":"675e5ac9faa73cb4c19fa9a05fff0b1ae2588434"},{"author":{"_account_id":6951,"name":"Brandon Logan","email":"brandon.logan@rackspace.com","username":"brandon-logan"},"change_message_id":"b8aa49891100a877575fa32b49d1e32d56de406b","unresolved":false,"context_lines":[{"line_number":91,"context_line":"    def test_get_amphora(self):"},{"line_number":92,"context_line":"        amphora \u003d self.manager.get_amphora(self.amphora.id)"},{"line_number":93,"context_line":"        self.assertEqual(self.amphora, amphora)"},{"line_number":94,"context_line":"        self.manager.manager.get.called_with(server\u003damphora.id)"},{"line_number":95,"context_line":""},{"line_number":96,"context_line":"    def test_bad_get_amphora(self):"},{"line_number":97,"context_line":"        self.manager.manager.get.side_effect \u003d Exception"}],"source_content_type":"text/x-python","patch_set":15,"id":"5a890539_bbc8aa57","line":94,"updated":"2014-11-18 23:59:02.000000000","message":"should do a self.manager._translate_amphora.assert_called_once_with","commit_id":"675e5ac9faa73cb4c19fa9a05fff0b1ae2588434"},{"author":{"_account_id":11302,"name":"Phillip Toohill","email":"phillip.toohill@rackspace.com","username":"ptoohill1"},"change_message_id":"a63c449a9ae6e66fc58b2ea3fec429e0ae117368","unresolved":false,"context_lines":[{"line_number":110,"context_line":"                          self.manager.get_amphora, self.amphora.id)"},{"line_number":111,"context_line":""},{"line_number":112,"context_line":""},{"line_number":113,"context_line":"class TestNovaAuth(base.TestCase):"},{"line_number":114,"context_line":""},{"line_number":115,"context_line":"    def setUp(self):"},{"line_number":116,"context_line":"        # Reset the session and client"}],"source_content_type":"text/x-python","patch_set":16,"id":"5a890539_824c8c9f","line":113,"updated":"2014-11-25 21:23:05.000000000","message":"If refactored as stated in other comment these tests would live else where.","commit_id":"6507f665b1f873b5550a328869a8b0d556a04bae"}]}
