)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":13734,"name":"Nell Jerram","email":"nell@tigera.io","username":"neiljerram"},"change_message_id":"d4758907afed5a2993f7a6ffdd51857e72b8b5ad","unresolved":false,"context_lines":[{"line_number":6,"context_line":""},{"line_number":7,"context_line":"Enable pluggable IPAM implementation by default"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"*WIP*"},{"line_number":10,"context_line":"Enables pluggable IPAM by pointing ipam_driver to refence driver."},{"line_number":11,"context_line":"This change stands for collecting results for all CI tests."},{"line_number":12,"context_line":""}],"source_content_type":"text/x-gerrit-commit-message","patch_set":23,"id":"3a50d1a3_c05ff70c","line":9,"updated":"2015-07-20 14:57:44.000000000","message":"Why do you call this change \"WIP\"?","commit_id":"a47de96b1494add7d071464e5333cc459e727844"},{"author":{"_account_id":13734,"name":"Nell Jerram","email":"nell@tigera.io","username":"neiljerram"},"change_message_id":"61da9fb8c37aac777c0b398fa13e3448f9f4db76","unresolved":false,"context_lines":[{"line_number":6,"context_line":""},{"line_number":7,"context_line":"Enable pluggable IPAM implementation by default"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"*WIP*"},{"line_number":10,"context_line":"Enables pluggable IPAM by pointing ipam_driver to refence driver."},{"line_number":11,"context_line":"This change stands for collecting results for all CI tests."},{"line_number":12,"context_line":""}],"source_content_type":"text/x-gerrit-commit-message","patch_set":23,"id":"3a50d1a3_9b0ac0d1","line":9,"in_reply_to":"3a50d1a3_2026db68","updated":"2015-07-20 15:15:09.000000000","message":"Ah, yes, I remember now - sorry for forgetting that!","commit_id":"a47de96b1494add7d071464e5333cc459e727844"},{"author":{"_account_id":13768,"name":"Pavel Bondar","email":"pbondar@infoblox.com","username":"pavel_bondar"},"change_message_id":"9d12f8aff553f117d0f3ebb00e826390d3cca222","unresolved":false,"context_lines":[{"line_number":6,"context_line":""},{"line_number":7,"context_line":"Enable pluggable IPAM implementation by default"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"*WIP*"},{"line_number":10,"context_line":"Enables pluggable IPAM by pointing ipam_driver to refence driver."},{"line_number":11,"context_line":"This change stands for collecting results for all CI tests."},{"line_number":12,"context_line":""}],"source_content_type":"text/x-gerrit-commit-message","patch_set":23,"id":"3a50d1a3_2026db68","line":9,"in_reply_to":"3a50d1a3_c05ff70c","updated":"2015-07-20 15:02:03.000000000","message":"because this change is not expected to be merged, at least during Liberty.\nNon Pluggable IPAM implementation will be default during Liberty lifecycle.\nThis chainge right now stands only for collectin CI results for pluggable ipam implementation.","commit_id":"a47de96b1494add7d071464e5333cc459e727844"},{"author":{"_account_id":1653,"name":"garyk","email":"gkotton@vmware.com","username":"garyk"},"change_message_id":"f9ccfcdde951146d1eb8a1922837231c0e17c98f","unresolved":false,"context_lines":[{"line_number":24,"context_line":""},{"line_number":25,"context_line":"Built-in IPAM implementation becomes deprecated and is planned to be"},{"line_number":26,"context_line":"removed in upcoming commits."},{"line_number":27,"context_line":""},{"line_number":28,"context_line":"Closes-Bug: #1516156"},{"line_number":29,"context_line":"Change-Id: I1d633810bd16f1bec7bbca57522e9ad3f7745ea2"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":68,"id":"1a122d0e_5a4b5e87","line":27,"updated":"2016-04-19 08:49:31.000000000","message":"Please add UpgradeImpact here","commit_id":"541381a56280168dfc079cbb47adef7510676f86"},{"author":{"_account_id":13768,"name":"Pavel Bondar","email":"pbondar@infoblox.com","username":"pavel_bondar"},"change_message_id":"145a40b4a04d74b883980f97045d0659833bd0a0","unresolved":false,"context_lines":[{"line_number":24,"context_line":""},{"line_number":25,"context_line":"Built-in IPAM implementation becomes deprecated and is planned to be"},{"line_number":26,"context_line":"removed in upcoming commits."},{"line_number":27,"context_line":""},{"line_number":28,"context_line":"Closes-Bug: #1516156"},{"line_number":29,"context_line":"Change-Id: I1d633810bd16f1bec7bbca57522e9ad3f7745ea2"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":68,"id":"1a122d0e_fd7d04b2","line":27,"in_reply_to":"1a122d0e_5a4b5e87","updated":"2016-04-19 09:03:31.000000000","message":"will do","commit_id":"541381a56280168dfc079cbb47adef7510676f86"},{"author":{"_account_id":13768,"name":"Pavel Bondar","email":"pbondar@infoblox.com","username":"pavel_bondar"},"change_message_id":"8a0d223c823a2b711dbdb1ce7a8e04d91451ca8c","unresolved":false,"context_lines":[{"line_number":24,"context_line":""},{"line_number":25,"context_line":"Built-in IPAM implementation becomes deprecated and is planned to be"},{"line_number":26,"context_line":"removed in upcoming commits."},{"line_number":27,"context_line":""},{"line_number":28,"context_line":"Closes-Bug: #1516156"},{"line_number":29,"context_line":"Change-Id: I1d633810bd16f1bec7bbca57522e9ad3f7745ea2"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":68,"id":"1a122d0e_404e84c1","line":27,"in_reply_to":"1a122d0e_fd7d04b2","updated":"2016-04-20 13:34:38.000000000","message":"Done","commit_id":"541381a56280168dfc079cbb47adef7510676f86"},{"author":{"_account_id":7448,"name":"Carl Baldwin","email":"carl@ecbaldwin.net","username":"carl-baldwin"},"change_message_id":"5e315209a3961157786f0cf5b74e9440a9550e2f","unresolved":false,"context_lines":[{"line_number":7,"context_line":"Switch to pluggable IPAM implementation"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"This patch does unconditional switch from non-pluggable IPAM to"},{"line_number":10,"context_line":"pluggable IPAM for all deployments during upgrate to Neutron."},{"line_number":11,"context_line":""},{"line_number":12,"context_line":"Pluggable IPAM is enabled by pointing ipam_driver default to reference"},{"line_number":13,"context_line":"driver. User who manually set ipam_driver in neutron.conf will continue"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":85,"id":"7aa08908_39bfafab","line":10,"range":{"start_line":10,"start_character":42,"end_line":10,"end_character":49},"updated":"2016-06-16 20:08:59.000000000","message":"*upgrade","commit_id":"4c70c07191f67a0198701d655ca1cccedace3a03"},{"author":{"_account_id":13768,"name":"Pavel Bondar","email":"pbondar@infoblox.com","username":"pavel_bondar"},"change_message_id":"c2d2ff7af3bc90c7bddefca4f7ae51353eb76642","unresolved":false,"context_lines":[{"line_number":7,"context_line":"Switch to pluggable IPAM implementation"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"This patch does unconditional switch from non-pluggable IPAM to"},{"line_number":10,"context_line":"pluggable IPAM for all deployments during upgrate to Neutron."},{"line_number":11,"context_line":""},{"line_number":12,"context_line":"Pluggable IPAM is enabled by pointing ipam_driver default to reference"},{"line_number":13,"context_line":"driver. User who manually set ipam_driver in neutron.conf will continue"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":85,"id":"5a9d85d2_5fe8a8e2","line":10,"range":{"start_line":10,"start_character":42,"end_line":10,"end_character":49},"in_reply_to":"7aa08908_39bfafab","updated":"2016-06-21 12:15:36.000000000","message":"Done","commit_id":"4c70c07191f67a0198701d655ca1cccedace3a03"},{"author":{"_account_id":7448,"name":"Carl Baldwin","email":"carl@ecbaldwin.net","username":"carl-baldwin"},"change_message_id":"5e315209a3961157786f0cf5b74e9440a9550e2f","unresolved":false,"context_lines":[{"line_number":11,"context_line":""},{"line_number":12,"context_line":"Pluggable IPAM is enabled by pointing ipam_driver default to reference"},{"line_number":13,"context_line":"driver. User who manually set ipam_driver in neutron.conf will continue"},{"line_number":14,"context_line":"to use ipam_driver of their choise."},{"line_number":15,"context_line":""},{"line_number":16,"context_line":"During upgrade data is migrated from non-pluggable IPAM tables to"},{"line_number":17,"context_line":"pluggable IPAM tables using alembic_migration. Availability ranges"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":85,"id":"7aa08908_99dce319","line":14,"range":{"start_line":14,"start_character":28,"end_line":14,"end_character":34},"updated":"2016-06-16 20:08:59.000000000","message":"*choice","commit_id":"4c70c07191f67a0198701d655ca1cccedace3a03"},{"author":{"_account_id":13768,"name":"Pavel Bondar","email":"pbondar@infoblox.com","username":"pavel_bondar"},"change_message_id":"c2d2ff7af3bc90c7bddefca4f7ae51353eb76642","unresolved":false,"context_lines":[{"line_number":11,"context_line":""},{"line_number":12,"context_line":"Pluggable IPAM is enabled by pointing ipam_driver default to reference"},{"line_number":13,"context_line":"driver. User who manually set ipam_driver in neutron.conf will continue"},{"line_number":14,"context_line":"to use ipam_driver of their choise."},{"line_number":15,"context_line":""},{"line_number":16,"context_line":"During upgrade data is migrated from non-pluggable IPAM tables to"},{"line_number":17,"context_line":"pluggable IPAM tables using alembic_migration. Availability ranges"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":85,"id":"5a9d85d2_3fe31c07","line":14,"range":{"start_line":14,"start_character":28,"end_line":14,"end_character":34},"in_reply_to":"7aa08908_99dce319","updated":"2016-06-21 12:15:36.000000000","message":"Done","commit_id":"4c70c07191f67a0198701d655ca1cccedace3a03"},{"author":{"_account_id":7448,"name":"Carl Baldwin","email":"carl@ecbaldwin.net","username":"carl-baldwin"},"change_message_id":"5e315209a3961157786f0cf5b74e9440a9550e2f","unresolved":false,"context_lines":[{"line_number":23,"context_line":"Once migration is completed ipam related tables are checked"},{"line_number":24,"context_line":"if data is migrated properly."},{"line_number":25,"context_line":""},{"line_number":26,"context_line":"Built-in IPAM implementation becomes deprecated and is planned to be"},{"line_number":27,"context_line":"removed in upcoming commits."},{"line_number":28,"context_line":""},{"line_number":29,"context_line":"UpgradeImpact"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":85,"id":"7aa08908_59f27b9b","line":26,"range":{"start_line":26,"start_character":37,"end_line":26,"end_character":47},"updated":"2016-06-16 20:08:59.000000000","message":"s/deprecated/obsolete/","commit_id":"4c70c07191f67a0198701d655ca1cccedace3a03"},{"author":{"_account_id":13768,"name":"Pavel Bondar","email":"pbondar@infoblox.com","username":"pavel_bondar"},"change_message_id":"c2d2ff7af3bc90c7bddefca4f7ae51353eb76642","unresolved":false,"context_lines":[{"line_number":23,"context_line":"Once migration is completed ipam related tables are checked"},{"line_number":24,"context_line":"if data is migrated properly."},{"line_number":25,"context_line":""},{"line_number":26,"context_line":"Built-in IPAM implementation becomes deprecated and is planned to be"},{"line_number":27,"context_line":"removed in upcoming commits."},{"line_number":28,"context_line":""},{"line_number":29,"context_line":"UpgradeImpact"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":85,"id":"5a9d85d2_dfbad8e0","line":26,"range":{"start_line":26,"start_character":37,"end_line":26,"end_character":47},"in_reply_to":"7aa08908_59f27b9b","updated":"2016-06-21 12:15:36.000000000","message":"Done","commit_id":"4c70c07191f67a0198701d655ca1cccedace3a03"}],"neutron/common/config.py":[{"author":{"_account_id":13734,"name":"Nell Jerram","email":"nell@tigera.io","username":"neiljerram"},"change_message_id":"c9b60b2614207bb702e115ed66efb0dd699f639f","unresolved":false,"context_lines":[{"line_number":132,"context_line":"                help\u003d_(\u0027If True, effort is made to advertise MTU settings \u0027"},{"line_number":133,"context_line":"                       \u0027to VMs via network methods (DHCP and RA MTU options) \u0027"},{"line_number":134,"context_line":"                       \u0027when the network\\\u0027s preferred MTU is known.\u0027)),"},{"line_number":135,"context_line":"    cfg.StrOpt(\u0027ipam_driver\u0027, default\u003d\u0027internal\u0027,"},{"line_number":136,"context_line":"               help\u003d_(\u0027IPAM driver to use.\u0027)),"},{"line_number":137,"context_line":"    cfg.BoolOpt(\u0027vlan_transparent\u0027, default\u003dFalse,"},{"line_number":138,"context_line":"                help\u003d_(\u0027If True, then allow plugins that support it to \u0027"}],"source_content_type":"text/x-python","patch_set":14,"id":"ba3cc151_af3a4297","line":135,"updated":"2015-07-02 14:55:24.000000000","message":"Is \u0027internal\u0027 intended to mean the pluggable backend?\n\nIf so, I\u0027m afraid that isn\u0027t clear at all; I\u0027d say that \u0027internal\u0027 could equally well refer to either the non-pluggable backend, or the pluggable one.\n\nI recommend:\n\n- using a value of \u0027pluggable\u0027 instead of \u0027internal\u0027\n\n- explaining that \u0027pluggable\u0027 will enable pluggable IPAM, and that \u0027None\u0027 will select the non-pluggable backend.\n\nIf the pluggable backend is used, where is the driver configured?","commit_id":"a7c5038f1b53b0c338f1324ef80d5237ced8b8e2"},{"author":{"_account_id":13768,"name":"Pavel Bondar","email":"pbondar@infoblox.com","username":"pavel_bondar"},"change_message_id":"fcbd9b66b9e0099bb6cc355a4f29f4d87d9b02ef","unresolved":false,"context_lines":[{"line_number":132,"context_line":"                help\u003d_(\u0027If True, effort is made to advertise MTU settings \u0027"},{"line_number":133,"context_line":"                       \u0027to VMs via network methods (DHCP and RA MTU options) \u0027"},{"line_number":134,"context_line":"                       \u0027when the network\\\u0027s preferred MTU is known.\u0027)),"},{"line_number":135,"context_line":"    cfg.StrOpt(\u0027ipam_driver\u0027, default\u003d\u0027internal\u0027,"},{"line_number":136,"context_line":"               help\u003d_(\u0027IPAM driver to use.\u0027)),"},{"line_number":137,"context_line":"    cfg.BoolOpt(\u0027vlan_transparent\u0027, default\u003dFalse,"},{"line_number":138,"context_line":"                help\u003d_(\u0027If True, then allow plugins that support it to \u0027"}],"source_content_type":"text/x-python","patch_set":14,"id":"ba3cc151_43290d9d","line":135,"in_reply_to":"ba3cc151_af3a4297","updated":"2015-07-13 12:17:55.000000000","message":"Driver is configured in [1], ipam_driver meaning is slightly described there.\nAny value other than None for ipam_driver means that pluggable ipam will be used (with internal driver or some vendor driver),\nso ipam_driver \u003d \u0027pluggable\u0027 looks like kind of duplication in this context for me.\n\nAnd yeah, we may want to improve description for ipam_driver value in neutron.conf\n\nFYI, this review is endless WIP(at least during Liberty cycle), it stands only for collection CI results when ipam is enabled globally.\n\n[1] https://github.com/openstack/neutron/blob/master/etc/neutron.conf#L69","commit_id":"a7c5038f1b53b0c338f1324ef80d5237ced8b8e2"},{"author":{"_account_id":7448,"name":"Carl Baldwin","email":"carl@ecbaldwin.net","username":"carl-baldwin"},"change_message_id":"29f536009b133986bb9e210499222a95e33dc4f0","unresolved":false,"context_lines":[{"line_number":160,"context_line":"                       \u0027calculates them. Currently, the only way to advertise \u0027"},{"line_number":161,"context_line":"                       \u0027MTU to running instances is using corresponding DHCP \u0027"},{"line_number":162,"context_line":"                       \u0027option.\u0027)),"},{"line_number":163,"context_line":"    cfg.StrOpt(\u0027ipam_driver\u0027, default\u003d\u0027internal\u0027,"},{"line_number":164,"context_line":"               help\u003d_(\"Neutron IPAM (IP address management) driver to use. \""},{"line_number":165,"context_line":"                      \"If ipam_driver is not set (default behavior), no IPAM \""},{"line_number":166,"context_line":"                      \"driver is used. In order to use the reference \""}],"source_content_type":"text/x-python","patch_set":49,"id":"9a68dd71_9f363ee6","line":163,"range":{"start_line":163,"start_character":30,"end_line":163,"end_character":49},"updated":"2016-01-26 11:22:07.000000000","message":"I don\u0027t think this is quite right.  On the bug, we discussed giving the operator a choice of when to run the migration offline.  But, adding this default here will force the pluggable driver to be used right away (unless the operator has specified otherwise.)\n\nI know that this patch originally just existed to run tests on the pluggable implementation in the gate.  So, it makes sense why it is currently like this.  However, I think it makes sense to flesh out this patch with the migration and work out grenade so that it passes.","commit_id":"33315579962571f5f1e43db188c141152013fb5e"},{"author":{"_account_id":13768,"name":"Pavel Bondar","email":"pbondar@infoblox.com","username":"pavel_bondar"},"change_message_id":"6436ef9067179e0aae8ed183d396963160d2568b","unresolved":false,"context_lines":[{"line_number":160,"context_line":"                       \u0027calculates them. Currently, the only way to advertise \u0027"},{"line_number":161,"context_line":"                       \u0027MTU to running instances is using corresponding DHCP \u0027"},{"line_number":162,"context_line":"                       \u0027option.\u0027)),"},{"line_number":163,"context_line":"    cfg.StrOpt(\u0027ipam_driver\u0027, default\u003d\u0027internal\u0027,"},{"line_number":164,"context_line":"               help\u003d_(\"Neutron IPAM (IP address management) driver to use. \""},{"line_number":165,"context_line":"                      \"If ipam_driver is not set (default behavior), no IPAM \""},{"line_number":166,"context_line":"                      \"driver is used. In order to use the reference \""}],"source_content_type":"text/x-python","patch_set":49,"id":"9a68dd71_f642f767","line":163,"range":{"start_line":163,"start_character":30,"end_line":163,"end_character":49},"in_reply_to":"9a68dd71_9f363ee6","updated":"2016-01-26 15:32:42.000000000","message":"ok, I will add data migration code to this patch and once UT are conquered it can be splitted into smaller pieces.","commit_id":"33315579962571f5f1e43db188c141152013fb5e"}],"neutron/db/ipam_pluggable_backend.py":[{"author":{"_account_id":7448,"name":"Carl Baldwin","email":"carl@ecbaldwin.net","username":"carl-baldwin"},"change_message_id":"5e315209a3961157786f0cf5b74e9440a9550e2f","unresolved":false,"context_lines":[{"line_number":467,"context_line":"            with excutils.save_and_reraise_exception():"},{"line_number":468,"context_line":"                LOG.debug(\"An exception occurred during subnet creation. \""},{"line_number":469,"context_line":"                          \"Reverting subnet allocation.\")"},{"line_number":470,"context_line":"                self._safe_rollback(self.delete_subnet,"},{"line_number":471,"context_line":"                                    context,"},{"line_number":472,"context_line":"                                    subnet_request.subnet_id)"},{"line_number":473,"context_line":"        return subnet, ipam_subnet"}],"source_content_type":"text/x-python","patch_set":85,"id":"7aa08908_7962d73e","line":470,"range":{"start_line":470,"start_character":21,"end_line":470,"end_character":36},"updated":"2016-06-16 20:08:59.000000000","message":"Why is this in the migration patch?","commit_id":"4c70c07191f67a0198701d655ca1cccedace3a03"},{"author":{"_account_id":13768,"name":"Pavel Bondar","email":"pbondar@infoblox.com","username":"pavel_bondar"},"change_message_id":"1b88349050354fe8e14e575d695e303388ceda1f","unresolved":false,"context_lines":[{"line_number":467,"context_line":"            with excutils.save_and_reraise_exception():"},{"line_number":468,"context_line":"                LOG.debug(\"An exception occurred during subnet creation. \""},{"line_number":469,"context_line":"                          \"Reverting subnet allocation.\")"},{"line_number":470,"context_line":"                self._safe_rollback(self.delete_subnet,"},{"line_number":471,"context_line":"                                    context,"},{"line_number":472,"context_line":"                                    subnet_request.subnet_id)"},{"line_number":473,"context_line":"        return subnet, ipam_subnet"}],"source_content_type":"text/x-python","patch_set":85,"id":"7aa08908_fec1664f","line":470,"range":{"start_line":470,"start_character":21,"end_line":470,"end_character":36},"in_reply_to":"7aa08908_7962d73e","updated":"2016-06-20 16:28:34.000000000","message":"will decompose to separate patch.","commit_id":"4c70c07191f67a0198701d655ca1cccedace3a03"},{"author":{"_account_id":13768,"name":"Pavel Bondar","email":"pbondar@infoblox.com","username":"pavel_bondar"},"change_message_id":"c2d2ff7af3bc90c7bddefca4f7ae51353eb76642","unresolved":false,"context_lines":[{"line_number":467,"context_line":"            with excutils.save_and_reraise_exception():"},{"line_number":468,"context_line":"                LOG.debug(\"An exception occurred during subnet creation. \""},{"line_number":469,"context_line":"                          \"Reverting subnet allocation.\")"},{"line_number":470,"context_line":"                self._safe_rollback(self.delete_subnet,"},{"line_number":471,"context_line":"                                    context,"},{"line_number":472,"context_line":"                                    subnet_request.subnet_id)"},{"line_number":473,"context_line":"        return subnet, ipam_subnet"}],"source_content_type":"text/x-python","patch_set":85,"id":"5a9d85d2_ffe074fc","line":470,"range":{"start_line":470,"start_character":21,"end_line":470,"end_character":36},"in_reply_to":"7aa08908_fec1664f","updated":"2016-06-21 12:15:36.000000000","message":"Done","commit_id":"4c70c07191f67a0198701d655ca1cccedace3a03"}],"neutron/db/migration/alembic_migrations/versions/mitaka/contract/434073b3bc5f_data_for_reference_ipam_driver.py":[{"author":{"_account_id":7448,"name":"Carl Baldwin","email":"carl@ecbaldwin.net","username":"carl-baldwin"},"change_message_id":"c8f59228547ab70c4b5ea0ff18d4ee1717fa6d71","unresolved":false,"context_lines":[{"line_number":30,"context_line":""},{"line_number":31,"context_line":"def upgrade():"},{"line_number":32,"context_line":""},{"line_number":33,"context_line":"    cmd \u003d [\u0027neutron-populate-ipam-data\u0027]"},{"line_number":34,"context_line":"    utils.execute(cmd)"}],"source_content_type":"text/x-python","patch_set":60,"id":"9aed3d3a_f2055fc2","line":33,"range":{"start_line":33,"start_character":12,"end_line":33,"end_character":38},"updated":"2016-02-26 21:12:58.000000000","message":"Is there a way to run this from grenade instead of from alembic.  Given our current strategy, I don\u0027t think we\u0027ll ever want to run this from alembic.","commit_id":"b3e4d31a3d28093da4f56dd0a68bba452b9b3321"},{"author":{"_account_id":13768,"name":"Pavel Bondar","email":"pbondar@infoblox.com","username":"pavel_bondar"},"change_message_id":"8ec393ae8d3cb3d42e95a992575c3f93b923e187","unresolved":false,"context_lines":[{"line_number":30,"context_line":""},{"line_number":31,"context_line":"def upgrade():"},{"line_number":32,"context_line":""},{"line_number":33,"context_line":"    cmd \u003d [\u0027neutron-populate-ipam-data\u0027]"},{"line_number":34,"context_line":"    utils.execute(cmd)"}],"source_content_type":"text/x-python","patch_set":60,"id":"7af24918_ff125bb3","line":33,"range":{"start_line":33,"start_character":12,"end_line":33,"end_character":38},"in_reply_to":"9aed3d3a_f2055fc2","updated":"2016-03-02 06:57:20.000000000","message":"Have not found yet the way to add this script to grenande, but still working on it.","commit_id":"b3e4d31a3d28093da4f56dd0a68bba452b9b3321"},{"author":{"_account_id":6524,"name":"Henry Gessau","email":"HenryG@gessau.net","username":"gessau"},"change_message_id":"5fa13c9de18b622daff1f4a22842d82b0dd75b9b","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":62,"id":"1af94dfe_0fce7062","updated":"2016-03-18 14:32:47.000000000","message":"This must now go in the newton versions directory.","commit_id":"cdb604b33c9b4f27eff200536c23532e5baa53c0"},{"author":{"_account_id":7787,"name":"Kevin Benton","email":"kevin@benton.pub","username":"blak111"},"change_message_id":"510df3403de9c64d6454ee98dba57878e3be1ed6","unresolved":false,"context_lines":[{"line_number":30,"context_line":""},{"line_number":31,"context_line":"def upgrade():"},{"line_number":32,"context_line":""},{"line_number":33,"context_line":"    cmd \u003d [\u0027neutron-migrate-ipam-to-pluggable\u0027]"},{"line_number":34,"context_line":"    utils.execute(cmd)"}],"source_content_type":"text/x-python","patch_set":62,"id":"da0c15f0_7d2bd494","line":33,"updated":"2016-03-28 08:02:20.000000000","message":"Grenade should catch this since it will have been defaulted to the old ipam code.","commit_id":"cdb604b33c9b4f27eff200536c23532e5baa53c0"},{"author":{"_account_id":7448,"name":"Carl Baldwin","email":"carl@ecbaldwin.net","username":"carl-baldwin"},"change_message_id":"d37ae103d6e747f00bce86c93bd998651f2bea0d","unresolved":false,"context_lines":[{"line_number":30,"context_line":""},{"line_number":31,"context_line":"def upgrade():"},{"line_number":32,"context_line":""},{"line_number":33,"context_line":"    cmd \u003d [\u0027neutron-migrate-ipam-to-pluggable\u0027]"},{"line_number":34,"context_line":"    utils.execute(cmd)"}],"source_content_type":"text/x-python","patch_set":62,"id":"5aef4532_b4512d65","line":33,"range":{"start_line":33,"start_character":12,"end_line":33,"end_character":45},"updated":"2016-03-07 21:32:08.000000000","message":"Is there any data to migrate at this point?  I\u0027m worried that this is just testing migrating empty tables.","commit_id":"cdb604b33c9b4f27eff200536c23532e5baa53c0"}],"neutron/db/migration/alembic_migrations/versions/newton/contract/3b935b28e7a0_migrate_to_pluggable_ipam.py":[{"author":{"_account_id":7448,"name":"Carl Baldwin","email":"carl@ecbaldwin.net","username":"carl-baldwin"},"change_message_id":"5e315209a3961157786f0cf5b74e9440a9550e2f","unresolved":false,"context_lines":[{"line_number":87,"context_line":"    \"\"\"Migrate data to pluggable ipam reference driver."},{"line_number":88,"context_line":""},{"line_number":89,"context_line":"    Cleans up any ipam* tables and populate data from API exposed tables,"},{"line_number":90,"context_line":"    then rebuild availability ranges in ipam tables."},{"line_number":91,"context_line":"    \"\"\""},{"line_number":92,"context_line":"    session \u003d sa.orm.Session(bind\u003dop.get_bind())"},{"line_number":93,"context_line":""}],"source_content_type":"text/x-python","patch_set":85,"id":"7aa08908_5f341bdd","line":90,"range":{"start_line":90,"start_character":4,"end_line":90,"end_character":51},"updated":"2016-06-16 20:08:59.000000000","message":"This comment is obsolete.","commit_id":"4c70c07191f67a0198701d655ca1cccedace3a03"},{"author":{"_account_id":13768,"name":"Pavel Bondar","email":"pbondar@infoblox.com","username":"pavel_bondar"},"change_message_id":"1b88349050354fe8e14e575d695e303388ceda1f","unresolved":false,"context_lines":[{"line_number":87,"context_line":"    \"\"\"Migrate data to pluggable ipam reference driver."},{"line_number":88,"context_line":""},{"line_number":89,"context_line":"    Cleans up any ipam* tables and populate data from API exposed tables,"},{"line_number":90,"context_line":"    then rebuild availability ranges in ipam tables."},{"line_number":91,"context_line":"    \"\"\""},{"line_number":92,"context_line":"    session \u003d sa.orm.Session(bind\u003dop.get_bind())"},{"line_number":93,"context_line":""}],"source_content_type":"text/x-python","patch_set":85,"id":"7aa08908_de20ea4b","line":90,"range":{"start_line":90,"start_character":4,"end_line":90,"end_character":51},"in_reply_to":"7aa08908_5f341bdd","updated":"2016-06-20 16:28:34.000000000","message":"will update and add more info about migration","commit_id":"4c70c07191f67a0198701d655ca1cccedace3a03"},{"author":{"_account_id":7448,"name":"Carl Baldwin","email":"carl@ecbaldwin.net","username":"carl-baldwin"},"change_message_id":"5e315209a3961157786f0cf5b74e9440a9550e2f","unresolved":false,"context_lines":[{"line_number":92,"context_line":"    session \u003d sa.orm.Session(bind\u003dop.get_bind())"},{"line_number":93,"context_line":""},{"line_number":94,"context_line":"    # Make sure destination tables are clean"},{"line_number":95,"context_line":"    session.execute(ipam_subnet.delete())"},{"line_number":96,"context_line":"    session.execute(ipam_allocation_pool.delete())"},{"line_number":97,"context_line":"    session.execute(ipam_allocation.delete())"},{"line_number":98,"context_line":""}],"source_content_type":"text/x-python","patch_set":85,"id":"7aa08908_dff2cb05","line":95,"range":{"start_line":95,"start_character":20,"end_line":95,"end_character":38},"updated":"2016-06-16 20:08:59.000000000","message":"This scares me a little.  The only reason that these tables would have data is because someone switched to the pluggable reference implementation.  I doubt many (if any) people did this, but if they did.  What do we do?  I\u0027d hate to clobber their data and rewrite it with old data.  What if they turned it on and then reverted back somehow.  I\u0027m feeling nervous about this.","commit_id":"4c70c07191f67a0198701d655ca1cccedace3a03"},{"author":{"_account_id":7448,"name":"Carl Baldwin","email":"carl@ecbaldwin.net","username":"carl-baldwin"},"change_message_id":"37fc823c2c2e3d353f4849bbf537ba30b8fafb03","unresolved":false,"context_lines":[{"line_number":92,"context_line":"    session \u003d sa.orm.Session(bind\u003dop.get_bind())"},{"line_number":93,"context_line":""},{"line_number":94,"context_line":"    # Make sure destination tables are clean"},{"line_number":95,"context_line":"    session.execute(ipam_subnet.delete())"},{"line_number":96,"context_line":"    session.execute(ipam_allocation_pool.delete())"},{"line_number":97,"context_line":"    session.execute(ipam_allocation.delete())"},{"line_number":98,"context_line":""}],"source_content_type":"text/x-python","patch_set":85,"id":"3aaa91ec_847db31e","line":95,"range":{"start_line":95,"start_character":20,"end_line":95,"end_character":38},"in_reply_to":"5a9d85d2_e8657ce1","updated":"2016-06-22 17:41:38.000000000","message":"Ok, this makes sense.  I meant to revisit this comment a couple of days ago but got distracted.  Pavel\u0027s right, there is enough information in the models he mentioned to rebuild all of the IPAM data.","commit_id":"4c70c07191f67a0198701d655ca1cccedace3a03"},{"author":{"_account_id":7448,"name":"Carl Baldwin","email":"carl@ecbaldwin.net","username":"carl-baldwin"},"change_message_id":"cd299252a141b90feca45ab6b7c1f5a8395eb7e9","unresolved":false,"context_lines":[{"line_number":92,"context_line":"    session \u003d sa.orm.Session(bind\u003dop.get_bind())"},{"line_number":93,"context_line":""},{"line_number":94,"context_line":"    # Make sure destination tables are clean"},{"line_number":95,"context_line":"    session.execute(ipam_subnet.delete())"},{"line_number":96,"context_line":"    session.execute(ipam_allocation_pool.delete())"},{"line_number":97,"context_line":"    session.execute(ipam_allocation.delete())"},{"line_number":98,"context_line":""}],"source_content_type":"text/x-python","patch_set":85,"id":"5a9d85d2_e8657ce1","line":95,"range":{"start_line":95,"start_character":20,"end_line":95,"end_character":38},"in_reply_to":"7aa08908_282c54ab","updated":"2016-06-20 20:36:57.000000000","message":"If that\u0027s true then that will calm my fears, I think.  I might have to convince myself I know why this is true.","commit_id":"4c70c07191f67a0198701d655ca1cccedace3a03"},{"author":{"_account_id":13768,"name":"Pavel Bondar","email":"pbondar@infoblox.com","username":"pavel_bondar"},"change_message_id":"1b88349050354fe8e14e575d695e303388ceda1f","unresolved":false,"context_lines":[{"line_number":92,"context_line":"    session \u003d sa.orm.Session(bind\u003dop.get_bind())"},{"line_number":93,"context_line":""},{"line_number":94,"context_line":"    # Make sure destination tables are clean"},{"line_number":95,"context_line":"    session.execute(ipam_subnet.delete())"},{"line_number":96,"context_line":"    session.execute(ipam_allocation_pool.delete())"},{"line_number":97,"context_line":"    session.execute(ipam_allocation.delete())"},{"line_number":98,"context_line":""}],"source_content_type":"text/x-python","patch_set":85,"id":"7aa08908_282c54ab","line":95,"range":{"start_line":95,"start_character":20,"end_line":95,"end_character":38},"in_reply_to":"7aa08908_a76c1109","updated":"2016-06-20 16:28:34.000000000","message":"Carl,\nThis is safe to delete data from ipam_* tables that belongs to reference ipam driver, because we have all the needed data to rebuild it.\nDuring migration data for ipam_*  tables is built from \n\u0027subnets\u0027, \u0027ipallocationpools\u0027 and \u0027ipallocations\u0027.\nAll these tables are maintained up-to-date even if ipam driver is used. These source tables are API exposed and updated on each ipam action, so they contain valid data with any ipam driver.\nIt makes them reliable source of ipam data and reference ipam driver tables (ipam_*) can be safely cleaned up and rebuilt.\n\nI\u0027ll update docstring to this migration to include info from this comment.","commit_id":"4c70c07191f67a0198701d655ca1cccedace3a03"},{"author":{"_account_id":7448,"name":"Carl Baldwin","email":"carl@ecbaldwin.net","username":"carl-baldwin"},"change_message_id":"fd3c8c0a04cd7a7cf41d186d3b5f7c92de169db5","unresolved":false,"context_lines":[{"line_number":92,"context_line":"    session \u003d sa.orm.Session(bind\u003dop.get_bind())"},{"line_number":93,"context_line":""},{"line_number":94,"context_line":"    # Make sure destination tables are clean"},{"line_number":95,"context_line":"    session.execute(ipam_subnet.delete())"},{"line_number":96,"context_line":"    session.execute(ipam_allocation_pool.delete())"},{"line_number":97,"context_line":"    session.execute(ipam_allocation.delete())"},{"line_number":98,"context_line":""}],"source_content_type":"text/x-python","patch_set":85,"id":"7aa08908_a76c1109","line":95,"range":{"start_line":95,"start_character":20,"end_line":95,"end_character":38},"in_reply_to":"7aa08908_dff2cb05","updated":"2016-06-16 21:17:37.000000000","message":"I\u0027m not going to be able to sleep unless I\u0027m pretty confident that we\u0027re not going to clobber someone\u0027s IPAM data.  I posted this to the operator\u0027s mailing list [1].\n\nAt one point, I thought I had a strategy in mind for this.  I\u0027ll have to think about it some more.  If we could read config during migration, that might help.  It would mean a conditional migration which sounds a little hairy but, then again, so does this.\n\n [1] http://lists.openstack.org/pipermail/openstack-operators/2016-June/010750.html","commit_id":"4c70c07191f67a0198701d655ca1cccedace3a03"},{"author":{"_account_id":841,"name":"Akihiro Motoki","email":"amotoki@gmail.com","username":"amotoki"},"change_message_id":"048027a6d9da7a64dc6d3d4da3f3bb11fe4fda34","unresolved":false,"context_lines":[{"line_number":108,"context_line":""},{"line_number":109,"context_line":"    map_neutron_id_to_ipam \u003d {}"},{"line_number":110,"context_line":"    subnet_values \u003d []"},{"line_number":111,"context_line":"    for subnet_id, in session.query(neutron_subnet).all():"},{"line_number":112,"context_line":"        ipam_id \u003d uuidutils.generate_uuid()"},{"line_number":113,"context_line":"        map_neutron_id_to_ipam[subnet_id] \u003d ipam_id"},{"line_number":114,"context_line":"        subnet_values.append(dict("}],"source_content_type":"text/x-python","patch_set":87,"id":"1aa78d24_eb249161","line":111,"range":{"start_line":111,"start_character":51,"end_line":111,"end_character":58},"updated":"2016-07-07 21:58:18.000000000","message":"we don\u0027t need to use all() here.\nquery() returns a generator, so we can pass it directly to for-loop.\nWe can avoid generating a full list of values and consuming memories in larger deployments.","commit_id":"0a579afd595785cea246bce67a4acb5018ab90e3"},{"author":{"_account_id":7448,"name":"Carl Baldwin","email":"carl@ecbaldwin.net","username":"carl-baldwin"},"change_message_id":"c37697a650d0e06b0bbe913bbd369d2b88e87fce","unresolved":false,"context_lines":[{"line_number":108,"context_line":""},{"line_number":109,"context_line":"    map_neutron_id_to_ipam \u003d {}"},{"line_number":110,"context_line":"    subnet_values \u003d []"},{"line_number":111,"context_line":"    for subnet_id, in session.query(neutron_subnet).all():"},{"line_number":112,"context_line":"        ipam_id \u003d uuidutils.generate_uuid()"},{"line_number":113,"context_line":"        map_neutron_id_to_ipam[subnet_id] \u003d ipam_id"},{"line_number":114,"context_line":"        subnet_values.append(dict("}],"source_content_type":"text/x-python","patch_set":87,"id":"1aa78d24_1ed8fe1c","line":111,"range":{"start_line":111,"start_character":51,"end_line":111,"end_character":58},"in_reply_to":"1aa78d24_eb249161","updated":"2016-07-08 20:29:12.000000000","message":"Done","commit_id":"0a579afd595785cea246bce67a4acb5018ab90e3"},{"author":{"_account_id":9423,"name":"Roey Chen","email":"roeyc@vmware.com","username":"roeyc"},"change_message_id":"a840d7a06ed41fd5f132ed5f88db5ed80fe5b64c","unresolved":false,"context_lines":[{"line_number":96,"context_line":"    session \u003d sa.orm.Session(bind\u003dop.get_bind())"},{"line_number":97,"context_line":""},{"line_number":98,"context_line":"    # Make sure destination tables are clean"},{"line_number":99,"context_line":"    session.execute(ipam_subnet.delete())"},{"line_number":100,"context_line":"    session.execute(ipam_allocation_pool.delete())"},{"line_number":101,"context_line":"    session.execute(ipam_allocation.delete())"},{"line_number":102,"context_line":""},{"line_number":103,"context_line":"    map_neutron_id_to_ipam \u003d {}"},{"line_number":104,"context_line":"    subnet_values \u003d []"}],"source_content_type":"text/x-python","patch_set":97,"id":"3ac371cc_58223153","line":101,"range":{"start_line":99,"start_character":3,"end_line":101,"end_character":45},"updated":"2016-08-17 12:58:10.000000000","message":"What if I use pluggable ipam already, wouldn\u0027t this discard all information in these tables?","commit_id":"625de54de3936b0da8760c3da76d2d315d05f94e"},{"author":{"_account_id":9423,"name":"Roey Chen","email":"roeyc@vmware.com","username":"roeyc"},"change_message_id":"aff41e48389e2fad7ed737b48eb7c333dba73f68","unresolved":false,"context_lines":[{"line_number":96,"context_line":"    session \u003d sa.orm.Session(bind\u003dop.get_bind())"},{"line_number":97,"context_line":""},{"line_number":98,"context_line":"    # Make sure destination tables are clean"},{"line_number":99,"context_line":"    session.execute(ipam_subnet.delete())"},{"line_number":100,"context_line":"    session.execute(ipam_allocation_pool.delete())"},{"line_number":101,"context_line":"    session.execute(ipam_allocation.delete())"},{"line_number":102,"context_line":""},{"line_number":103,"context_line":"    map_neutron_id_to_ipam \u003d {}"},{"line_number":104,"context_line":"    subnet_values \u003d []"}],"source_content_type":"text/x-python","patch_set":97,"id":"3ac371cc_87ec44f4","line":101,"range":{"start_line":99,"start_character":3,"end_line":101,"end_character":45},"in_reply_to":"3ac371cc_010fa488","updated":"2016-08-17 14:09:06.000000000","message":"I got that part, but I just wondered what if this script is ran on an already migrated deployment that has the new ipam tables? If it\u0027s even possible (I guess not).","commit_id":"625de54de3936b0da8760c3da76d2d315d05f94e"},{"author":{"_account_id":9423,"name":"Roey Chen","email":"roeyc@vmware.com","username":"roeyc"},"change_message_id":"5e9f4e4ac9a2f44198b3e3751769fe3d059c9312","unresolved":false,"context_lines":[{"line_number":96,"context_line":"    session \u003d sa.orm.Session(bind\u003dop.get_bind())"},{"line_number":97,"context_line":""},{"line_number":98,"context_line":"    # Make sure destination tables are clean"},{"line_number":99,"context_line":"    session.execute(ipam_subnet.delete())"},{"line_number":100,"context_line":"    session.execute(ipam_allocation_pool.delete())"},{"line_number":101,"context_line":"    session.execute(ipam_allocation.delete())"},{"line_number":102,"context_line":""},{"line_number":103,"context_line":"    map_neutron_id_to_ipam \u003d {}"},{"line_number":104,"context_line":"    subnet_values \u003d []"}],"source_content_type":"text/x-python","patch_set":97,"id":"3ac371cc_7f042c17","line":101,"range":{"start_line":99,"start_character":3,"end_line":101,"end_character":45},"in_reply_to":"3ac371cc_2da3b101","updated":"2016-08-17 14:55:35.000000000","message":"Ok, got it after paying better attention to your comments.\nThanks!","commit_id":"625de54de3936b0da8760c3da76d2d315d05f94e"},{"author":{"_account_id":13768,"name":"Pavel Bondar","email":"pbondar@infoblox.com","username":"pavel_bondar"},"change_message_id":"6fd0bdcc23ebe3ef978b6ef679d64c4e9cb7998c","unresolved":false,"context_lines":[{"line_number":96,"context_line":"    session \u003d sa.orm.Session(bind\u003dop.get_bind())"},{"line_number":97,"context_line":""},{"line_number":98,"context_line":"    # Make sure destination tables are clean"},{"line_number":99,"context_line":"    session.execute(ipam_subnet.delete())"},{"line_number":100,"context_line":"    session.execute(ipam_allocation_pool.delete())"},{"line_number":101,"context_line":"    session.execute(ipam_allocation.delete())"},{"line_number":102,"context_line":""},{"line_number":103,"context_line":"    map_neutron_id_to_ipam \u003d {}"},{"line_number":104,"context_line":"    subnet_values \u003d []"}],"source_content_type":"text/x-python","patch_set":97,"id":"3ac371cc_010fa488","line":101,"range":{"start_line":99,"start_character":3,"end_line":101,"end_character":45},"in_reply_to":"3ac371cc_58223153","updated":"2016-08-17 13:47:35.000000000","message":"These tables are cleaned up and rebuild from build-in ipam tables: \u0027subnets\u0027, \u0027ipallocationpools\u0027 and \u0027ipallocations\u0027. These tables contain all needed data for reference driver tables. This is what I tried to describe as docstring to this method.","commit_id":"625de54de3936b0da8760c3da76d2d315d05f94e"},{"author":{"_account_id":13768,"name":"Pavel Bondar","email":"pbondar@infoblox.com","username":"pavel_bondar"},"change_message_id":"d1aef197f74c4ef44f297977387c199416a95989","unresolved":false,"context_lines":[{"line_number":96,"context_line":"    session \u003d sa.orm.Session(bind\u003dop.get_bind())"},{"line_number":97,"context_line":""},{"line_number":98,"context_line":"    # Make sure destination tables are clean"},{"line_number":99,"context_line":"    session.execute(ipam_subnet.delete())"},{"line_number":100,"context_line":"    session.execute(ipam_allocation_pool.delete())"},{"line_number":101,"context_line":"    session.execute(ipam_allocation.delete())"},{"line_number":102,"context_line":""},{"line_number":103,"context_line":"    map_neutron_id_to_ipam \u003d {}"},{"line_number":104,"context_line":"    subnet_values \u003d []"}],"source_content_type":"text/x-python","patch_set":97,"id":"3ac371cc_2da3b101","line":101,"range":{"start_line":99,"start_character":3,"end_line":101,"end_character":45},"in_reply_to":"3ac371cc_87ec44f4","updated":"2016-08-17 14:29:42.000000000","message":"It is possible case to have data in ipam_* tables, it means pluggable ipam is already in use (or was used). It might be the case for greenfield deployments, where pluggable ipam can be enabled manually since Liberty.\n\nIn this case ipam_* tables are rebuilt anyway. Yes, they have needed data in place, but it is safer to always recalculate that data from reliable source, because all data from ipam_* is calculatable from built-in tables.\n\nAlso this approch (always rebuild ipam tables) removes some corner cases. For example someone enabled pluggable ipam for a short period of time and then switched back to built-in ipam.\nIn this case ipam_* tables have some data, but it is outdated.\nAnd currect approach cleanups that data.\n\nTo summarize, migration is written in the way where it does not matter if ipam driver was used prior to that migration or not, after migration you will have valid data in all ipam_* tables.","commit_id":"625de54de3936b0da8760c3da76d2d315d05f94e"}],"neutron/tests/functional/db/migrations/test_3b935b28e7a0_migrate_to_pluggable_ipam.py":[{"author":{"_account_id":841,"name":"Akihiro Motoki","email":"amotoki@gmail.com","username":"amotoki"},"change_message_id":"048027a6d9da7a64dc6d3d4da3f3bb11fe4fda34","unresolved":false,"context_lines":[{"line_number":13,"context_line":"#    under the License."},{"line_number":14,"context_line":"#"},{"line_number":15,"context_line":""},{"line_number":16,"context_line":"from oslo_db.sqlalchemy import utils as oslo_utils"},{"line_number":17,"context_line":"from oslo_utils import uuidutils"},{"line_number":18,"context_line":""},{"line_number":19,"context_line":"from neutron.tests.functional.db import test_migrations"}],"source_content_type":"text/x-python","patch_set":87,"id":"1aa78d24_f13920f4","line":16,"range":{"start_line":16,"start_character":40,"end_line":16,"end_character":50},"updated":"2016-07-07 21:58:18.000000000","message":"nit: This naming is a bit confusing as we have \u0027oslo_utils\u0027.\nHow about \u0027db_utils\u0027 or \u0027oslo_db_utils\u0027?","commit_id":"0a579afd595785cea246bce67a4acb5018ab90e3"},{"author":{"_account_id":7448,"name":"Carl Baldwin","email":"carl@ecbaldwin.net","username":"carl-baldwin"},"change_message_id":"c37697a650d0e06b0bbe913bbd369d2b88e87fce","unresolved":false,"context_lines":[{"line_number":13,"context_line":"#    under the License."},{"line_number":14,"context_line":"#"},{"line_number":15,"context_line":""},{"line_number":16,"context_line":"from oslo_db.sqlalchemy import utils as oslo_utils"},{"line_number":17,"context_line":"from oslo_utils import uuidutils"},{"line_number":18,"context_line":""},{"line_number":19,"context_line":"from neutron.tests.functional.db import test_migrations"}],"source_content_type":"text/x-python","patch_set":87,"id":"1aa78d24_7edca218","line":16,"range":{"start_line":16,"start_character":40,"end_line":16,"end_character":50},"in_reply_to":"1aa78d24_f13920f4","updated":"2016-07-08 20:29:12.000000000","message":"Done","commit_id":"0a579afd595785cea246bce67a4acb5018ab90e3"}],"releasenotes/notes/pluggable-ipam-is-default-15c2ee15dc5b4a7b.yaml":[{"author":{"_account_id":748,"name":"Armando Migliaccio","email":"armamig@gmail.com","username":"armando-migliaccio"},"change_message_id":"26975e33a501ba67603e90fbe3742c412053fea2","unresolved":false,"context_lines":[{"line_number":8,"context_line":"  - During upgrade \u0027internal\u0027 ipam driver becomes default for \u0027ipam_driver\u0027"},{"line_number":9,"context_line":"    config option and data is migrated to new tables using alembic migration."},{"line_number":10,"context_line":"deprecations:"},{"line_number":11,"context_line":"  - The non-pluggable ipam implementatios is deprecated and will be removed in"},{"line_number":12,"context_line":"    Newton release cycle."}],"source_content_type":"text/x-yaml","patch_set":97,"id":"3ac371cc_4fe437ab","line":11,"updated":"2016-08-17 09:18:03.000000000","message":"where is the patch that removes the nonpluggable ipam driver?","commit_id":"625de54de3936b0da8760c3da76d2d315d05f94e"}]}
