)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":20229,"name":"Omer Anson","email":"omer.anson@toganetworks.com","username":"oanson"},"change_message_id":"37dd50808f360798cb404d6afe2faf9684877a33","unresolved":false,"context_lines":[{"line_number":4,"context_line":"Commit:     Eyal Leshem \u003ceyal.leshem@toganetworks.com\u003e"},{"line_number":5,"context_line":"CommitDate: 2018-01-09 11:24:43 +0000"},{"line_number":6,"context_line":""},{"line_number":7,"context_line":"Simple IPAM"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"needed for supporting kuryr-drivers without realying on neutron"},{"line_number":10,"context_line":"IPAM."}],"source_content_type":"text/x-gerrit-commit-message","patch_set":3,"id":"9f91af0f_7f10dd4e","line":7,"range":{"start_line":7,"start_character":0,"end_line":7,"end_character":11},"updated":"2018-01-10 12:45:55.000000000","message":"nit: Add simple IPAM","commit_id":"a2ad70948ad5a963e15102ac937342a40bced865"},{"author":{"_account_id":6598,"name":"Berezovsky Irena","email":"irenab.dev@gmail.com","username":"irenab"},"change_message_id":"813eaf8b1102095245af9cbaf0a0fba7686b9cca","unresolved":false,"context_lines":[{"line_number":8,"context_line":""},{"line_number":9,"context_line":"needed for supporting kuryr-drivers without realying on neutron"},{"line_number":10,"context_line":"IPAM."},{"line_number":11,"context_line":""},{"line_number":12,"context_line":"Change-Id: I953de4ac541571db7c1605438de9fefd67a18e44"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":7,"id":"7f96bb07_9ee447ae","line":11,"updated":"2018-01-14 09:34:10.000000000","message":"Need to fill a bug","commit_id":"c04ad49c61dfd4466184361a68c901ac5cf18000"}],"dragonflow/cni/simple_ipam.py":[{"author":{"_account_id":20229,"name":"Omer Anson","email":"omer.anson@toganetworks.com","username":"oanson"},"change_message_id":"37dd50808f360798cb404d6afe2faf9684877a33","unresolved":false,"context_lines":[{"line_number":33,"context_line":"    ipam \u003d nb_api.get(lean_ipam)"},{"line_number":34,"context_line":"    ipset \u003d netaddr.IPSet(ipam.free_addrs)"},{"line_number":35,"context_line":"    try:"},{"line_number":36,"context_line":"        ret \u003d next(ipset.__iter__())"},{"line_number":37,"context_line":"    except StopIteration:"},{"line_number":38,"context_line":"        return None"},{"line_number":39,"context_line":"    ipset.remove(ret)"}],"source_content_type":"text/x-python","patch_set":3,"id":"9f91af0f_ffee2d20","line":36,"range":{"start_line":36,"start_character":19,"end_line":36,"end_character":35},"updated":"2018-01-10 12:45:55.000000000","message":"I think \u0027iter(ipset)\u0027 is better than \u0027ipset.__iter__()\u0027.","commit_id":"a2ad70948ad5a963e15102ac937342a40bced865"},{"author":{"_account_id":26131,"name":"Eyal Leshem","email":"eyal.leshem@toganetworks.com","username":"leyal"},"change_message_id":"7ef1e1949a17e20aed81694454bb29beed7d34f2","unresolved":false,"context_lines":[{"line_number":33,"context_line":"    ipam \u003d nb_api.get(lean_ipam)"},{"line_number":34,"context_line":"    ipset \u003d netaddr.IPSet(ipam.free_addrs)"},{"line_number":35,"context_line":"    try:"},{"line_number":36,"context_line":"        ret \u003d next(ipset.__iter__())"},{"line_number":37,"context_line":"    except StopIteration:"},{"line_number":38,"context_line":"        return None"},{"line_number":39,"context_line":"    ipset.remove(ret)"}],"source_content_type":"text/x-python","patch_set":3,"id":"7f96bb07_025491c9","line":36,"range":{"start_line":36,"start_character":19,"end_line":36,"end_character":35},"in_reply_to":"9f91af0f_ffee2d20","updated":"2018-01-11 15:28:11.000000000","message":"done","commit_id":"a2ad70948ad5a963e15102ac937342a40bced865"},{"author":{"_account_id":17880,"name":"Shachar Snapiri","email":"shachar.snapiri@toganetworks.com","username":"snapiri"},"change_message_id":"551fe2db5c0b3e917696f0cb3fe0ce158b49b0c5","unresolved":false,"context_lines":[{"line_number":46,"context_line":"    lean_ipam \u003d l2.IPAM(id\u003dsubnet_id)"},{"line_number":47,"context_line":"    ipam \u003d nb_api.get(lean_ipam)"},{"line_number":48,"context_line":"    if ip not in ipam.cidr:"},{"line_number":49,"context_line":"        raise ValueError(_(\"trying to release out of range adress\"))"},{"line_number":50,"context_line":"    ipset \u003d netaddr.IPSet(ipam.free_addrs)"},{"line_number":51,"context_line":"    if ip in ipset:"},{"line_number":52,"context_line":"        raise ValueError(_(\"trying to release ip that not in use\"))"}],"source_content_type":"text/x-python","patch_set":3,"id":"9f91af0f_71c912aa","line":49,"range":{"start_line":49,"start_character":38,"end_line":49,"end_character":65},"updated":"2018-01-09 13:24:05.000000000","message":"release an address that is not in the allowed range","commit_id":"a2ad70948ad5a963e15102ac937342a40bced865"},{"author":{"_account_id":26131,"name":"Eyal Leshem","email":"eyal.leshem@toganetworks.com","username":"leyal"},"change_message_id":"7ef1e1949a17e20aed81694454bb29beed7d34f2","unresolved":false,"context_lines":[{"line_number":46,"context_line":"    lean_ipam \u003d l2.IPAM(id\u003dsubnet_id)"},{"line_number":47,"context_line":"    ipam \u003d nb_api.get(lean_ipam)"},{"line_number":48,"context_line":"    if ip not in ipam.cidr:"},{"line_number":49,"context_line":"        raise ValueError(_(\"trying to release out of range adress\"))"},{"line_number":50,"context_line":"    ipset \u003d netaddr.IPSet(ipam.free_addrs)"},{"line_number":51,"context_line":"    if ip in ipset:"},{"line_number":52,"context_line":"        raise ValueError(_(\"trying to release ip that not in use\"))"}],"source_content_type":"text/x-python","patch_set":3,"id":"7f96bb07_22518dd9","line":49,"range":{"start_line":49,"start_character":38,"end_line":49,"end_character":65},"in_reply_to":"9f91af0f_71c912aa","updated":"2018-01-11 15:28:11.000000000","message":"done","commit_id":"a2ad70948ad5a963e15102ac937342a40bced865"},{"author":{"_account_id":17880,"name":"Shachar Snapiri","email":"shachar.snapiri@toganetworks.com","username":"snapiri"},"change_message_id":"551fe2db5c0b3e917696f0cb3fe0ce158b49b0c5","unresolved":false,"context_lines":[{"line_number":49,"context_line":"        raise ValueError(_(\"trying to release out of range adress\"))"},{"line_number":50,"context_line":"    ipset \u003d netaddr.IPSet(ipam.free_addrs)"},{"line_number":51,"context_line":"    if ip in ipset:"},{"line_number":52,"context_line":"        raise ValueError(_(\"trying to release ip that not in use\"))"},{"line_number":53,"context_line":""},{"line_number":54,"context_line":"    ipset.add(ip)"},{"line_number":55,"context_line":"    ipam.free_addrs \u003d [cidr for cidr in ipset.iter_cidrs()]"}],"source_content_type":"text/x-python","patch_set":3,"id":"9f91af0f_f1e3e232","line":52,"range":{"start_line":52,"start_character":49,"end_line":52,"end_character":57},"updated":"2018-01-09 13:24:05.000000000","message":"that is not","commit_id":"a2ad70948ad5a963e15102ac937342a40bced865"},{"author":{"_account_id":26131,"name":"Eyal Leshem","email":"eyal.leshem@toganetworks.com","username":"leyal"},"change_message_id":"7ef1e1949a17e20aed81694454bb29beed7d34f2","unresolved":false,"context_lines":[{"line_number":49,"context_line":"        raise ValueError(_(\"trying to release out of range adress\"))"},{"line_number":50,"context_line":"    ipset \u003d netaddr.IPSet(ipam.free_addrs)"},{"line_number":51,"context_line":"    if ip in ipset:"},{"line_number":52,"context_line":"        raise ValueError(_(\"trying to release ip that not in use\"))"},{"line_number":53,"context_line":""},{"line_number":54,"context_line":"    ipset.add(ip)"},{"line_number":55,"context_line":"    ipam.free_addrs \u003d [cidr for cidr in ipset.iter_cidrs()]"}],"source_content_type":"text/x-python","patch_set":3,"id":"7f96bb07_e26405bc","line":52,"range":{"start_line":52,"start_character":49,"end_line":52,"end_character":57},"in_reply_to":"9f91af0f_f1e3e232","updated":"2018-01-11 15:28:11.000000000","message":"done","commit_id":"a2ad70948ad5a963e15102ac937342a40bced865"},{"author":{"_account_id":20229,"name":"Omer Anson","email":"omer.anson@toganetworks.com","username":"oanson"},"change_message_id":"1fd4782ba41318b5dfa70505762db6cbc046ba62","unresolved":false,"context_lines":[{"line_number":34,"context_line":"    ipam_object \u003d nb_api.get(lean_ipam)"},{"line_number":35,"context_line":"    ipset \u003d netaddr.IPSet(ipam_object.free_addrs)"},{"line_number":36,"context_line":"    try:"},{"line_number":37,"context_line":"        ret \u003d next(ipset.__iter__())"},{"line_number":38,"context_line":"    except StopIteration:"},{"line_number":39,"context_line":"        return None"},{"line_number":40,"context_line":"    ipset.remove(ret)"}],"source_content_type":"text/x-python","patch_set":7,"id":"7f96bb07_5e06bf88","line":37,"range":{"start_line":37,"start_character":19,"end_line":37,"end_character":35},"updated":"2018-01-14 09:05:02.000000000","message":"Why was this turned back from iter(ipset) ?","commit_id":"c04ad49c61dfd4466184361a68c901ac5cf18000"},{"author":{"_account_id":26131,"name":"Eyal Leshem","email":"eyal.leshem@toganetworks.com","username":"leyal"},"change_message_id":"6b27528595f1f67ccb76bc127c55f9fefe2b8130","unresolved":false,"context_lines":[{"line_number":34,"context_line":"    ipam_object \u003d nb_api.get(lean_ipam)"},{"line_number":35,"context_line":"    ipset \u003d netaddr.IPSet(ipam_object.free_addrs)"},{"line_number":36,"context_line":"    try:"},{"line_number":37,"context_line":"        ret \u003d next(ipset.__iter__())"},{"line_number":38,"context_line":"    except StopIteration:"},{"line_number":39,"context_line":"        return None"},{"line_number":40,"context_line":"    ipset.remove(ret)"}],"source_content_type":"text/x-python","patch_set":7,"id":"7f96bb07_5e623f40","line":37,"range":{"start_line":37,"start_character":19,"end_line":37,"end_character":35},"in_reply_to":"7f96bb07_5e06bf88","updated":"2018-01-14 09:52:12.000000000","message":":/ . i think i done some mess in rebase . thanks for showing me that.","commit_id":"c04ad49c61dfd4466184361a68c901ac5cf18000"},{"author":{"_account_id":23235,"name":"Lihi Wishnitzer","email":"lihiwish@gmail.com","username":"lihiwish"},"change_message_id":"c77af416b05a55ff843f1a240e7fdd69f1b04e6d","unresolved":false,"context_lines":[{"line_number":29,"context_line":"    nb_api.create(ipam_obj)"},{"line_number":30,"context_line":""},{"line_number":31,"context_line":""},{"line_number":32,"context_line":"def request_ip(nb_api, subnet_id):"},{"line_number":33,"context_line":"    lean_ipam \u003d ipam.IPAM(id\u003dsubnet_id)"},{"line_number":34,"context_line":"    ipam_object \u003d nb_api.get(lean_ipam)"},{"line_number":35,"context_line":"    ipset \u003d netaddr.IPSet(ipam_object.free_addrs)"}],"source_content_type":"text/x-python","patch_set":8,"id":"7f96bb07_39866ddd","line":32,"range":{"start_line":32,"start_character":4,"end_line":32,"end_character":14},"updated":"2018-01-14 12:00:22.000000000","message":"I think this needs to be wrapped with DB lock","commit_id":"8e6fb531c899f30fee7c616addc21b36e03b8b45"},{"author":{"_account_id":23235,"name":"Lihi Wishnitzer","email":"lihiwish@gmail.com","username":"lihiwish"},"change_message_id":"1e90a5318d14d15fc4f275ede5ebbc4d4c2f4c3d","unresolved":false,"context_lines":[{"line_number":29,"context_line":"    nb_api.create(ipam_obj)"},{"line_number":30,"context_line":""},{"line_number":31,"context_line":""},{"line_number":32,"context_line":"def request_ip(nb_api, subnet_id):"},{"line_number":33,"context_line":"    lean_ipam \u003d ipam.IPAM(id\u003dsubnet_id)"},{"line_number":34,"context_line":"    ipam_object \u003d nb_api.get(lean_ipam)"},{"line_number":35,"context_line":"    ipset \u003d netaddr.IPSet(ipam_object.free_addrs)"}],"source_content_type":"text/x-python","patch_set":8,"id":"7f96bb07_0eafa2e3","line":32,"range":{"start_line":32,"start_character":4,"end_line":32,"end_character":14},"in_reply_to":"7f96bb07_0b7794d6","updated":"2018-01-14 15:00:11.000000000","message":"If for creating a kuryr-df-only POC, a df-implementation of IPAM was required, then this is should be same for any other requirement (such as a DB lock).","commit_id":"8e6fb531c899f30fee7c616addc21b36e03b8b45"},{"author":{"_account_id":26131,"name":"Eyal Leshem","email":"eyal.leshem@toganetworks.com","username":"leyal"},"change_message_id":"6971943b73f13de03e1d88d76127ce7c6573b962","unresolved":false,"context_lines":[{"line_number":29,"context_line":"    nb_api.create(ipam_obj)"},{"line_number":30,"context_line":""},{"line_number":31,"context_line":""},{"line_number":32,"context_line":"def request_ip(nb_api, subnet_id):"},{"line_number":33,"context_line":"    lean_ipam \u003d ipam.IPAM(id\u003dsubnet_id)"},{"line_number":34,"context_line":"    ipam_object \u003d nb_api.get(lean_ipam)"},{"line_number":35,"context_line":"    ipset \u003d netaddr.IPSet(ipam_object.free_addrs)"}],"source_content_type":"text/x-python","patch_set":8,"id":"7f96bb07_0b7794d6","line":32,"range":{"start_line":32,"start_character":4,"end_line":32,"end_character":14},"in_reply_to":"7f96bb07_39866ddd","updated":"2018-01-14 14:28:03.000000000","message":"This point is really problematic - \nbecause we assume that we run without neutron , so we don\u0027t have neutron db - for creating the lock.\nFor the POC i assume that only one instance of \"kuryr\" runs in the same time , but it\u0027s should be solved to real implementation of DF-api , or CNI support (for all db models not just the IPAM). \n(maybe implement lock via df-db by support of db-drivers or something in that direction)","commit_id":"8e6fb531c899f30fee7c616addc21b36e03b8b45"},{"author":{"_account_id":23235,"name":"Lihi Wishnitzer","email":"lihiwish@gmail.com","username":"lihiwish"},"change_message_id":"c77af416b05a55ff843f1a240e7fdd69f1b04e6d","unresolved":false,"context_lines":[{"line_number":43,"context_line":"    return ret"},{"line_number":44,"context_line":""},{"line_number":45,"context_line":""},{"line_number":46,"context_line":"def release_ip(nb_api, subnet_id, ip):"},{"line_number":47,"context_line":"    lean_ipam \u003d ipam.IPAM(id\u003dsubnet_id)"},{"line_number":48,"context_line":"    ipam_obj \u003d nb_api.get(lean_ipam)"},{"line_number":49,"context_line":"    if ip not in ipam_obj.cidr:"}],"source_content_type":"text/x-python","patch_set":8,"id":"7f96bb07_7965d544","line":46,"range":{"start_line":46,"start_character":4,"end_line":46,"end_character":14},"updated":"2018-01-14 12:00:22.000000000","message":"ditto","commit_id":"8e6fb531c899f30fee7c616addc21b36e03b8b45"}],"dragonflow/db/models/ipam.py":[{"author":{"_account_id":20229,"name":"Omer Anson","email":"omer.anson@toganetworks.com","username":"oanson"},"change_message_id":"1fd4782ba41318b5dfa70505762db6cbc046ba62","unresolved":false,"context_lines":[{"line_number":18,"context_line":"@mf.construct_nb_db_model"},{"line_number":19,"context_line":"class IPAM(mf.ModelBase):"},{"line_number":20,"context_line":"    table_name \u003d \"ipam\""},{"line_number":21,"context_line":"    free_addrs \u003d df_fields.ListOfField(df_fields.IpNetworkField())"},{"line_number":22,"context_line":"    cidr \u003d df_fields.IpNetworkField()"}],"source_content_type":"text/x-python","patch_set":7,"id":"7f96bb07_1e003767","line":21,"updated":"2018-01-14 09:05:02.000000000","message":"Still missing a function to initialize free_addrs.","commit_id":"c04ad49c61dfd4466184361a68c901ac5cf18000"},{"author":{"_account_id":26131,"name":"Eyal Leshem","email":"eyal.leshem@toganetworks.com","username":"leyal"},"change_message_id":"6b27528595f1f67ccb76bc127c55f9fefe2b8130","unresolved":false,"context_lines":[{"line_number":18,"context_line":"@mf.construct_nb_db_model"},{"line_number":19,"context_line":"class IPAM(mf.ModelBase):"},{"line_number":20,"context_line":"    table_name \u003d \"ipam\""},{"line_number":21,"context_line":"    free_addrs \u003d df_fields.ListOfField(df_fields.IpNetworkField())"},{"line_number":22,"context_line":"    cidr \u003d df_fields.IpNetworkField()"}],"source_content_type":"text/x-python","patch_set":7,"id":"7f96bb07_3e5f3373","line":21,"in_reply_to":"7f96bb07_1e003767","updated":"2018-01-14 09:52:12.000000000","message":"I don\u0027t agree that it\u0027s need to done here , \nas i see that here should be only the definitions of how the data should be stored in the DB.","commit_id":"c04ad49c61dfd4466184361a68c901ac5cf18000"}],"dragonflow/db/models/l2.py":[{"author":{"_account_id":6598,"name":"Berezovsky Irena","email":"irenab.dev@gmail.com","username":"irenab"},"change_message_id":"4c2ac59097f86ec64f6dc096b742749b7223dc17","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":3,"id":"9f91af0f_718112fb","line":199,"updated":"2018-01-09 12:16:58.000000000","message":"what about mac address?","commit_id":"a2ad70948ad5a963e15102ac937342a40bced865"},{"author":{"_account_id":26131,"name":"Eyal Leshem","email":"eyal.leshem@toganetworks.com","username":"leyal"},"change_message_id":"7ef1e1949a17e20aed81694454bb29beed7d34f2","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":3,"id":"7f96bb07_4221394d","line":199,"in_reply_to":"9f91af0f_718112fb","updated":"2018-01-11 15:28:11.000000000","message":"this patch is just about ips, I still not sure how it\u0027s will be done with MACs , will take a look in neutron","commit_id":"a2ad70948ad5a963e15102ac937342a40bced865"},{"author":{"_account_id":20229,"name":"Omer Anson","email":"omer.anson@toganetworks.com","username":"oanson"},"change_message_id":"294ecfb3eeeb683738391155bd834564d9a3c7fe","unresolved":false,"context_lines":[{"line_number":192,"context_line":""},{"line_number":193,"context_line":"@mf.register_model"},{"line_number":194,"context_line":"@mf.construct_nb_db_model"},{"line_number":195,"context_line":"class IPAM(mf.ModelBase):"},{"line_number":196,"context_line":"    table_name \u003d \"ipam\""},{"line_number":197,"context_line":"    free_addrs \u003d df_fields.ListOfField(df_fields.IpNetworkField())"},{"line_number":198,"context_line":"    cidr \u003d df_fields.IpNetworkField()"}],"source_content_type":"text/x-python","patch_set":4,"id":"7f96bb07_8fd537bc","line":195,"updated":"2018-01-11 06:32:23.000000000","message":"I think this should be in an independant ipam.py module","commit_id":"f572078f0b36aa76efda64cf0639c2e6e50ed112"},{"author":{"_account_id":26131,"name":"Eyal Leshem","email":"eyal.leshem@toganetworks.com","username":"leyal"},"change_message_id":"7ef1e1949a17e20aed81694454bb29beed7d34f2","unresolved":false,"context_lines":[{"line_number":192,"context_line":""},{"line_number":193,"context_line":"@mf.register_model"},{"line_number":194,"context_line":"@mf.construct_nb_db_model"},{"line_number":195,"context_line":"class IPAM(mf.ModelBase):"},{"line_number":196,"context_line":"    table_name \u003d \"ipam\""},{"line_number":197,"context_line":"    free_addrs \u003d df_fields.ListOfField(df_fields.IpNetworkField())"},{"line_number":198,"context_line":"    cidr \u003d df_fields.IpNetworkField()"}],"source_content_type":"text/x-python","patch_set":4,"id":"7f96bb07_a29d9d5a","line":195,"in_reply_to":"7f96bb07_8fd537bc","updated":"2018-01-11 15:28:11.000000000","message":"Done","commit_id":"f572078f0b36aa76efda64cf0639c2e6e50ed112"},{"author":{"_account_id":20229,"name":"Omer Anson","email":"omer.anson@toganetworks.com","username":"oanson"},"change_message_id":"294ecfb3eeeb683738391155bd834564d9a3c7fe","unresolved":false,"context_lines":[{"line_number":194,"context_line":"@mf.construct_nb_db_model"},{"line_number":195,"context_line":"class IPAM(mf.ModelBase):"},{"line_number":196,"context_line":"    table_name \u003d \"ipam\""},{"line_number":197,"context_line":"    free_addrs \u003d df_fields.ListOfField(df_fields.IpNetworkField())"},{"line_number":198,"context_line":"    cidr \u003d df_fields.IpNetworkField()"}],"source_content_type":"text/x-python","patch_set":4,"id":"7f96bb07_6fe9cb7e","line":197,"range":{"start_line":197,"start_character":0,"end_line":197,"end_character":66},"updated":"2018-01-11 06:32:23.000000000","message":"Maybe add a model method to populate free_addrs? So you could use:\n\nipam \u003d l2.IPAM(cidr\u003d\u002710.0.0.0/24\u0027)\nipam.populate_free_addresses()","commit_id":"f572078f0b36aa76efda64cf0639c2e6e50ed112"},{"author":{"_account_id":26131,"name":"Eyal Leshem","email":"eyal.leshem@toganetworks.com","username":"leyal"},"change_message_id":"7ef1e1949a17e20aed81694454bb29beed7d34f2","unresolved":false,"context_lines":[{"line_number":194,"context_line":"@mf.construct_nb_db_model"},{"line_number":195,"context_line":"class IPAM(mf.ModelBase):"},{"line_number":196,"context_line":"    table_name \u003d \"ipam\""},{"line_number":197,"context_line":"    free_addrs \u003d df_fields.ListOfField(df_fields.IpNetworkField())"},{"line_number":198,"context_line":"    cidr \u003d df_fields.IpNetworkField()"}],"source_content_type":"text/x-python","patch_set":4,"id":"7f96bb07_02ac918a","line":197,"range":{"start_line":197,"start_character":0,"end_line":197,"end_character":66},"in_reply_to":"7f96bb07_6fe9cb7e","updated":"2018-01-11 15:28:11.000000000","message":"It\u0027s feel me like mixing the data-model and the logic above that.","commit_id":"f572078f0b36aa76efda64cf0639c2e6e50ed112"}],"dragonflow/tests/unit/test_ipam.py":[{"author":{"_account_id":20229,"name":"Omer Anson","email":"omer.anson@toganetworks.com","username":"oanson"},"change_message_id":"37dd50808f360798cb404d6afe2faf9684877a33","unresolved":false,"context_lines":[{"line_number":30,"context_line":"class TestIPAM(base.BaseTestCase):"},{"line_number":31,"context_line":""},{"line_number":32,"context_line":"    def setUp(self):"},{"line_number":33,"context_line":"        super(TestIPAM, self).setUp()"},{"line_number":34,"context_line":"        db_driver \u003d _dummy_db_driver._DummyDbDriver()"},{"line_number":35,"context_line":"        cfg.CONF.df.enable_df_pub_sub \u003d False"},{"line_number":36,"context_line":"        driver_mock \u003d mock.patch.object(df_utils, \u0027load_driver\u0027,"}],"source_content_type":"text/x-python","patch_set":3,"id":"9f91af0f_7f71bd75","line":33,"updated":"2018-01-10 12:45:55.000000000","message":"Wouldn\u0027t it be better to override the configuration?","commit_id":"a2ad70948ad5a963e15102ac937342a40bced865"},{"author":{"_account_id":26131,"name":"Eyal Leshem","email":"eyal.leshem@toganetworks.com","username":"leyal"},"change_message_id":"7ef1e1949a17e20aed81694454bb29beed7d34f2","unresolved":false,"context_lines":[{"line_number":30,"context_line":"class TestIPAM(base.BaseTestCase):"},{"line_number":31,"context_line":""},{"line_number":32,"context_line":"    def setUp(self):"},{"line_number":33,"context_line":"        super(TestIPAM, self).setUp()"},{"line_number":34,"context_line":"        db_driver \u003d _dummy_db_driver._DummyDbDriver()"},{"line_number":35,"context_line":"        cfg.CONF.df.enable_df_pub_sub \u003d False"},{"line_number":36,"context_line":"        driver_mock \u003d mock.patch.object(df_utils, \u0027load_driver\u0027,"}],"source_content_type":"text/x-python","patch_set":3,"id":"7f96bb07_42e61919","line":33,"in_reply_to":"9f91af0f_7f71bd75","updated":"2018-01-11 15:28:11.000000000","message":"need it for configuration initialization? \nCan be done also here - but why override ?","commit_id":"a2ad70948ad5a963e15102ac937342a40bced865"},{"author":{"_account_id":17880,"name":"Shachar Snapiri","email":"shachar.snapiri@toganetworks.com","username":"snapiri"},"change_message_id":"551fe2db5c0b3e917696f0cb3fe0ce158b49b0c5","unresolved":false,"context_lines":[{"line_number":46,"context_line":"        simple_ipam.add_subnet_ipam(nb_api, \"subnet_id\")"},{"line_number":47,"context_line":"        lean_ipam \u003d l2.IPAM(id\u003d\"subnet_id\")"},{"line_number":48,"context_line":"        ipam \u003d nb_api.get(lean_ipam)"},{"line_number":49,"context_line":"        self.assertTrue(ipam is not None)"},{"line_number":50,"context_line":""},{"line_number":51,"context_line":"        free_addrs \u003d netaddr.IPSet(ipam.free_addrs)"},{"line_number":52,"context_line":"        self.assertTrue(\"10.10.10.1\" in free_addrs)"}],"source_content_type":"text/x-python","patch_set":3,"id":"9f91af0f_2c26d1cf","line":49,"updated":"2018-01-09 13:24:05.000000000","message":"maybe add a test that a subnet you did not create IPAM for does not return an IPAM object?","commit_id":"a2ad70948ad5a963e15102ac937342a40bced865"},{"author":{"_account_id":26131,"name":"Eyal Leshem","email":"eyal.leshem@toganetworks.com","username":"leyal"},"change_message_id":"7ef1e1949a17e20aed81694454bb29beed7d34f2","unresolved":false,"context_lines":[{"line_number":46,"context_line":"        simple_ipam.add_subnet_ipam(nb_api, \"subnet_id\")"},{"line_number":47,"context_line":"        lean_ipam \u003d l2.IPAM(id\u003d\"subnet_id\")"},{"line_number":48,"context_line":"        ipam \u003d nb_api.get(lean_ipam)"},{"line_number":49,"context_line":"        self.assertTrue(ipam is not None)"},{"line_number":50,"context_line":""},{"line_number":51,"context_line":"        free_addrs \u003d netaddr.IPSet(ipam.free_addrs)"},{"line_number":52,"context_line":"        self.assertTrue(\"10.10.10.1\" in free_addrs)"}],"source_content_type":"text/x-python","patch_set":3,"id":"7f96bb07_02c9f176","line":49,"in_reply_to":"9f91af0f_2c26d1cf","updated":"2018-01-11 15:28:11.000000000","message":"I removed this check , as that checked by the follwing method . i don\u0027y think there is any chance that other network will be added by mistake and we guess and test this exact subnet","commit_id":"a2ad70948ad5a963e15102ac937342a40bced865"},{"author":{"_account_id":17880,"name":"Shachar Snapiri","email":"shachar.snapiri@toganetworks.com","username":"snapiri"},"change_message_id":"551fe2db5c0b3e917696f0cb3fe0ce158b49b0c5","unresolved":false,"context_lines":[{"line_number":62,"context_line":"            free_addrs\u003d[\"10.10.10.0/24\"]"},{"line_number":63,"context_line":"        ))"},{"line_number":64,"context_line":"        ip \u003d simple_ipam.request_ip(nb_api, \"subnet_id\")"},{"line_number":65,"context_line":"        self.assertTrue(ip in netaddr.IPNetwork(\"10.10.10.0/24\"))"},{"line_number":66,"context_line":""},{"line_number":67,"context_line":"    def test_remove_addr(self):"},{"line_number":68,"context_line":"        nb_api \u003d api_nb.NbApi.get_instance(False)"}],"source_content_type":"text/x-python","patch_set":3,"id":"9f91af0f_f7199279","line":65,"updated":"2018-01-09 13:24:05.000000000","message":"I would recommend a negative test as well, create IPAM with /30 range (2 addresses) and try to get address 3 times, make sure you succeed twice and fail once.","commit_id":"a2ad70948ad5a963e15102ac937342a40bced865"},{"author":{"_account_id":26131,"name":"Eyal Leshem","email":"eyal.leshem@toganetworks.com","username":"leyal"},"change_message_id":"7ef1e1949a17e20aed81694454bb29beed7d34f2","unresolved":false,"context_lines":[{"line_number":62,"context_line":"            free_addrs\u003d[\"10.10.10.0/24\"]"},{"line_number":63,"context_line":"        ))"},{"line_number":64,"context_line":"        ip \u003d simple_ipam.request_ip(nb_api, \"subnet_id\")"},{"line_number":65,"context_line":"        self.assertTrue(ip in netaddr.IPNetwork(\"10.10.10.0/24\"))"},{"line_number":66,"context_line":""},{"line_number":67,"context_line":"    def test_remove_addr(self):"},{"line_number":68,"context_line":"        nb_api \u003d api_nb.NbApi.get_instance(False)"}],"source_content_type":"text/x-python","patch_set":3,"id":"7f96bb07_c2a0e9a8","line":65,"in_reply_to":"9f91af0f_f7199279","updated":"2018-01-11 15:28:11.000000000","message":"done","commit_id":"a2ad70948ad5a963e15102ac937342a40bced865"},{"author":{"_account_id":17880,"name":"Shachar Snapiri","email":"shachar.snapiri@toganetworks.com","username":"snapiri"},"change_message_id":"551fe2db5c0b3e917696f0cb3fe0ce158b49b0c5","unresolved":false,"context_lines":[{"line_number":80,"context_line":"                          simple_ipam.release_ip,"},{"line_number":81,"context_line":"                          nb_api, \"subnet_id\", \"10.10.10.129\")"},{"line_number":82,"context_line":""},{"line_number":83,"context_line":"        self.assertRaises(ValueError,"},{"line_number":84,"context_line":"                          simple_ipam.release_ip, nb_api,"},{"line_number":85,"context_line":"                          \"subnet_id\", \"192.168.10.1\")"}],"source_content_type":"text/x-python","patch_set":3,"id":"9f91af0f_776d82ca","line":83,"updated":"2018-01-09 13:24:05.000000000","message":"How about adding one more test?\nuse get_addr to get several IPs, then remove_addr to release them, make sure the entire range is available again...","commit_id":"a2ad70948ad5a963e15102ac937342a40bced865"},{"author":{"_account_id":26131,"name":"Eyal Leshem","email":"eyal.leshem@toganetworks.com","username":"leyal"},"change_message_id":"7ef1e1949a17e20aed81694454bb29beed7d34f2","unresolved":false,"context_lines":[{"line_number":80,"context_line":"                          simple_ipam.release_ip,"},{"line_number":81,"context_line":"                          nb_api, \"subnet_id\", \"10.10.10.129\")"},{"line_number":82,"context_line":""},{"line_number":83,"context_line":"        self.assertRaises(ValueError,"},{"line_number":84,"context_line":"                          simple_ipam.release_ip, nb_api,"},{"line_number":85,"context_line":"                          \"subnet_id\", \"192.168.10.1\")"}],"source_content_type":"text/x-python","patch_set":3,"id":"7f96bb07_627a3525","line":83,"in_reply_to":"9f91af0f_776d82ca","updated":"2018-01-11 15:28:11.000000000","message":"I think this got by chaining of the current test. \nI prefer to keep the \"unit\" in each test.","commit_id":"a2ad70948ad5a963e15102ac937342a40bced865"},{"author":{"_account_id":17880,"name":"Shachar Snapiri","email":"shachar.snapiri@toganetworks.com","username":"snapiri"},"change_message_id":"0e838f4126766375b0583bdd9be6c15036c65549","unresolved":false,"context_lines":[{"line_number":73,"context_line":"            free_addrs\u003d[\"10.10.10.128/25\"]"},{"line_number":74,"context_line":"        ))"},{"line_number":75,"context_line":""},{"line_number":76,"context_line":"        simple_ipam.release_ip(nb_api, \"subnet_id\", \"10.10.10.1\")"},{"line_number":77,"context_line":"        ipam_obj \u003d nb_api.get(ipam.IPAM(id\u003d\"subnet_id\"))"},{"line_number":78,"context_line":"        ipset \u003d netaddr.IPSet(ipam_obj.free_addrs)"},{"line_number":79,"context_line":"        self.assertTrue(\"10.10.10.1\" in ipset)"}],"source_content_type":"text/x-python","patch_set":7,"id":"7f96bb07_f3f4a489","line":76,"range":{"start_line":76,"start_character":8,"end_line":76,"end_character":65},"updated":"2018-01-14 06:02:15.000000000","message":"Shouldn\u0027t this line throw an exception now?","commit_id":"c04ad49c61dfd4466184361a68c901ac5cf18000"},{"author":{"_account_id":26131,"name":"Eyal Leshem","email":"eyal.leshem@toganetworks.com","username":"leyal"},"change_message_id":"6b27528595f1f67ccb76bc127c55f9fefe2b8130","unresolved":false,"context_lines":[{"line_number":73,"context_line":"            free_addrs\u003d[\"10.10.10.128/25\"]"},{"line_number":74,"context_line":"        ))"},{"line_number":75,"context_line":""},{"line_number":76,"context_line":"        simple_ipam.release_ip(nb_api, \"subnet_id\", \"10.10.10.1\")"},{"line_number":77,"context_line":"        ipam_obj \u003d nb_api.get(ipam.IPAM(id\u003d\"subnet_id\"))"},{"line_number":78,"context_line":"        ipset \u003d netaddr.IPSet(ipam_obj.free_addrs)"},{"line_number":79,"context_line":"        self.assertTrue(\"10.10.10.1\" in ipset)"}],"source_content_type":"text/x-python","patch_set":7,"id":"7f96bb07_9e768706","line":76,"range":{"start_line":76,"start_character":8,"end_line":76,"end_character":65},"in_reply_to":"7f96bb07_f3f4a489","updated":"2018-01-14 09:52:12.000000000","message":"Nope , it\u0027s simulate legal ip that released by client.","commit_id":"c04ad49c61dfd4466184361a68c901ac5cf18000"}]}
