)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":17120,"name":"Manjeet Singh Bhatia","email":"manjeet.s.bhatia@intel.com","username":"manjeets"},"change_message_id":"2fc561d51c82c8d7aa7918c5ac9a8582be4867e5","unresolved":false,"context_lines":[{"line_number":8,"context_line":""},{"line_number":9,"context_line":"- Adds converter to generate a valid mac address if the"},{"line_number":10,"context_line":"  provided data is \u0027null\u0027 (None)."},{"line_number":11,"context_line":"- Adds api extension defenition for port using the new converter."},{"line_number":12,"context_line":""},{"line_number":13,"context_line":"Related-Bug: #1768690"},{"line_number":14,"context_line":"Change-Id: Ibfcf179c2051d2bf47d4d1e62e8146cbee29fd64"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":5,"id":"5f7c97a3_352ab5e6","line":11,"range":{"start_line":11,"start_character":21,"end_line":11,"end_character":31},"updated":"2018-06-21 23:39:21.000000000","message":"definition","commit_id":"58cd9d3e4e7c6a1c4aef987e931b0c79f5f19377"},{"author":{"_account_id":24245,"name":"Harald Jensås","email":"hjensas@redhat.com","username":"harald.jensas"},"change_message_id":"7f37fa2102311d3642c014fb53b4be4f22776344","unresolved":false,"context_lines":[{"line_number":8,"context_line":""},{"line_number":9,"context_line":"- Adds converter to generate a valid mac address if the"},{"line_number":10,"context_line":"  provided data is \u0027null\u0027 (None)."},{"line_number":11,"context_line":"- Adds api extension defenition for port using the new converter."},{"line_number":12,"context_line":""},{"line_number":13,"context_line":"Related-Bug: #1768690"},{"line_number":14,"context_line":"Change-Id: Ibfcf179c2051d2bf47d4d1e62e8146cbee29fd64"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":5,"id":"5f7c97a3_832fc6a5","line":11,"range":{"start_line":11,"start_character":21,"end_line":11,"end_character":31},"in_reply_to":"5f7c97a3_352ab5e6","updated":"2018-06-22 13:25:28.000000000","message":"Done","commit_id":"58cd9d3e4e7c6a1c4aef987e931b0c79f5f19377"}],"neutron_lib/api/converters.py":[{"author":{"_account_id":17120,"name":"Manjeet Singh Bhatia","email":"manjeet.s.bhatia@intel.com","username":"manjeets"},"change_message_id":"9df9432a9c55fa1c21b5d5916f74b7a06879ee6d","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":5,"id":"5f7c97a3_55673126","updated":"2018-06-22 00:05:37.000000000","message":"and also a tests in neutron-lib/tests/unit/api/test_conversion.py should also be added for newly added method","commit_id":"58cd9d3e4e7c6a1c4aef987e931b0c79f5f19377"},{"author":{"_account_id":24245,"name":"Harald Jensås","email":"hjensas@redhat.com","username":"harald.jensas"},"change_message_id":"7f37fa2102311d3642c014fb53b4be4f22776344","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":5,"id":"5f7c97a3_43352ef5","in_reply_to":"5f7c97a3_55673126","updated":"2018-06-22 13:25:28.000000000","message":"Done","commit_id":"58cd9d3e4e7c6a1c4aef987e931b0c79f5f19377"},{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"change_message_id":"21f993b3fa1a62d54eeed3c44792f3174c804f87","unresolved":false,"context_lines":[{"line_number":317,"context_line":"    :return: Random mac address if data is None, else return data."},{"line_number":318,"context_line":"    \"\"\""},{"line_number":319,"context_line":"    if data is None:"},{"line_number":320,"context_line":"        return net_utils.get_random_mac(cfg.CONF.base_mac.split(\u0027:\u0027))"},{"line_number":321,"context_line":""},{"line_number":322,"context_line":"    return data"}],"source_content_type":"text/x-python","patch_set":7,"id":"5f7c97a3_25833105","line":320,"range":{"start_line":320,"start_character":40,"end_line":320,"end_character":57},"updated":"2018-06-25 18:29:06.000000000","message":"I guess it\u0027s ok that we assume this config value is present as it is done elsewhere.","commit_id":"56033ba643812a30577f6ab17648806c2ee494ba"},{"author":{"_account_id":11975,"name":"Slawek Kaplonski","email":"skaplons@redhat.com","username":"slaweq"},"change_message_id":"23509043a5f42d19af4afe89e8b873d8d79c97c9","unresolved":false,"context_lines":[{"line_number":317,"context_line":"    :return: Random mac address if data is None, else return data."},{"line_number":318,"context_line":"    \"\"\""},{"line_number":319,"context_line":"    if data is None:"},{"line_number":320,"context_line":"        return net_utils.get_random_mac(cfg.CONF.base_mac.split(\u0027:\u0027))"},{"line_number":321,"context_line":""},{"line_number":322,"context_line":"    return data"}],"source_content_type":"text/x-python","patch_set":7,"id":"5f7c97a3_474427b8","line":320,"range":{"start_line":320,"start_character":8,"end_line":320,"end_character":14},"updated":"2018-06-26 06:37:41.000000000","message":"I would personally do here:\n\n    data \u003d net_utils.get_random_mac()\n\nto make only one return from function but it\u0027s fine like that as well :)","commit_id":"56033ba643812a30577f6ab17648806c2ee494ba"}],"neutron_lib/api/definitions/port.py":[{"author":{"_account_id":5367,"name":"boden","email":"bodenvmw@gmail.com","username":"boden"},"change_message_id":"9c3881a045ab6da63ad7ebc58a3fdd3bb50a962d","unresolved":false,"context_lines":[{"line_number":44,"context_line":"                           \u0027is_visible\u0027: True},"},{"line_number":45,"context_line":"        \u0027mac_address\u0027: {\u0027allow_post\u0027: True, \u0027allow_put\u0027: True,"},{"line_number":46,"context_line":"                        \u0027default\u0027: constants.ATTR_NOT_SPECIFIED,"},{"line_number":47,"context_line":"                        \u0027validate\u0027: {\u0027type:mac_address_or_regenerate\u0027: None},"},{"line_number":48,"context_line":"                        \u0027enforce_policy\u0027: True,"},{"line_number":49,"context_line":"                        \u0027is_visible\u0027: True},"},{"line_number":50,"context_line":"        \u0027fixed_ips\u0027: {\u0027allow_post\u0027: True, \u0027allow_put\u0027: True,"}],"source_content_type":"text/x-python","patch_set":1,"id":"5f7c97a3_774be386","line":47,"range":{"start_line":47,"start_character":43,"end_line":47,"end_character":68},"updated":"2018-05-03 12:27:12.000000000","message":"Wouldn\u0027t we need to introduce this change as a new extension to signify the behavior change?","commit_id":"917326cf3ed10ee33601dbd671357975a5e5a18a"}],"neutron_lib/api/definitions/port_mac_address_regenerate.py":[{"author":{"_account_id":5367,"name":"boden","email":"bodenvmw@gmail.com","username":"boden"},"change_message_id":"df2ceca1ca2d7dd3ff3ec25b1fe1057b32c46215","unresolved":false,"context_lines":[{"line_number":22,"context_line":""},{"line_number":23,"context_line":"RESOURCE_ATTRIBUTE_MAP \u003d {"},{"line_number":24,"context_line":"    port_def.COLLECTION_NAME: {"},{"line_number":25,"context_line":"        \u0027mac_address\u0027: {\u0027allow_post\u0027: True, \u0027allow_put\u0027: True,"},{"line_number":26,"context_line":"                        \u0027default\u0027: constants.ATTR_NOT_SPECIFIED,"},{"line_number":27,"context_line":"                        \u0027validate\u0027: {\u0027type:mac_address_or_regenerate\u0027: None},"},{"line_number":28,"context_line":"                        \u0027enforce_policy\u0027: True,"}],"source_content_type":"text/x-python","patch_set":3,"id":"5f7c97a3_88c11e32","line":25,"range":{"start_line":25,"start_character":9,"end_line":25,"end_character":20},"updated":"2018-05-29 13:53:43.000000000","message":"if we think mac_address will be used a lot, it could be made a constant so it can be ref\u0027d elsewhere.","commit_id":"3c8580fb9304aceafa79b0c4c05e2c7a971f21f0"},{"author":{"_account_id":24245,"name":"Harald Jensås","email":"hjensas@redhat.com","username":"harald.jensas"},"change_message_id":"a94b18a5170b07a682eca51c215551dbe46679fa","unresolved":false,"context_lines":[{"line_number":22,"context_line":""},{"line_number":23,"context_line":"RESOURCE_ATTRIBUTE_MAP \u003d {"},{"line_number":24,"context_line":"    port_def.COLLECTION_NAME: {"},{"line_number":25,"context_line":"        \u0027mac_address\u0027: {\u0027allow_post\u0027: True, \u0027allow_put\u0027: True,"},{"line_number":26,"context_line":"                        \u0027default\u0027: constants.ATTR_NOT_SPECIFIED,"},{"line_number":27,"context_line":"                        \u0027validate\u0027: {\u0027type:mac_address_or_regenerate\u0027: None},"},{"line_number":28,"context_line":"                        \u0027enforce_policy\u0027: True,"}],"source_content_type":"text/x-python","patch_set":3,"id":"5f7c97a3_270a9089","line":25,"range":{"start_line":25,"start_character":9,"end_line":25,"end_character":20},"in_reply_to":"5f7c97a3_88c11e32","updated":"2018-06-21 17:06:14.000000000","message":"Done","commit_id":"3c8580fb9304aceafa79b0c4c05e2c7a971f21f0"}],"neutron_lib/api/validators/__init__.py":[{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"change_message_id":"280d571b467f554703ec221eae177b337033e84b","unresolved":false,"context_lines":[{"line_number":387,"context_line":""},{"line_number":388,"context_line":""},{"line_number":389,"context_line":"def validate_mac_address_or_regenerate(data, valid_values\u003dNone):"},{"line_number":390,"context_line":"    \"\"\"Validate data is a MAC address if the data isn\u0027t None."},{"line_number":391,"context_line":""},{"line_number":392,"context_line":"    :param data: The data to validate."},{"line_number":393,"context_line":"    :param valid_values: Not used!"}],"source_content_type":"text/x-python","patch_set":2,"id":"5f7c97a3_46ccf288","line":390,"updated":"2018-05-03 16:45:41.000000000","message":"and isn\u0027t \u0027regenerate\u0027","commit_id":"7c0ca532cf3a21ffcba0d44cdf77302107ef5da2"},{"author":{"_account_id":24245,"name":"Harald Jensås","email":"hjensas@redhat.com","username":"harald.jensas"},"change_message_id":"82cc3202178d9c96a037bfa3760af969ed81629a","unresolved":false,"context_lines":[{"line_number":387,"context_line":""},{"line_number":388,"context_line":""},{"line_number":389,"context_line":"def validate_mac_address_or_regenerate(data, valid_values\u003dNone):"},{"line_number":390,"context_line":"    \"\"\"Validate data is a MAC address if the data isn\u0027t None."},{"line_number":391,"context_line":""},{"line_number":392,"context_line":"    :param data: The data to validate."},{"line_number":393,"context_line":"    :param valid_values: Not used!"}],"source_content_type":"text/x-python","patch_set":2,"id":"5f7c97a3_09512bd9","line":390,"in_reply_to":"5f7c97a3_46ccf288","updated":"2018-05-03 17:25:36.000000000","message":"Done","commit_id":"7c0ca532cf3a21ffcba0d44cdf77302107ef5da2"},{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"change_message_id":"280d571b467f554703ec221eae177b337033e84b","unresolved":false,"context_lines":[{"line_number":394,"context_line":"    :returns: None if the data is None or a valid MAC address, otherwise"},{"line_number":395,"context_line":"        a human readable message indicating why validation failed."},{"line_number":396,"context_line":"    \"\"\""},{"line_number":397,"context_line":"    if data !\u003d \u0027regenerate\u0027:"},{"line_number":398,"context_line":"        return validate_mac_address(data, valid_values)"},{"line_number":399,"context_line":""},{"line_number":400,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"5f7c97a3_86ba0adc","line":397,"updated":"2018-05-03 16:45:41.000000000","message":"if data and data !\u003d \u0027regenerate\u0027:\n\nelse you\u0027d try and validate None","commit_id":"7c0ca532cf3a21ffcba0d44cdf77302107ef5da2"},{"author":{"_account_id":24245,"name":"Harald Jensås","email":"hjensas@redhat.com","username":"harald.jensas"},"change_message_id":"82cc3202178d9c96a037bfa3760af969ed81629a","unresolved":false,"context_lines":[{"line_number":394,"context_line":"    :returns: None if the data is None or a valid MAC address, otherwise"},{"line_number":395,"context_line":"        a human readable message indicating why validation failed."},{"line_number":396,"context_line":"    \"\"\""},{"line_number":397,"context_line":"    if data !\u003d \u0027regenerate\u0027:"},{"line_number":398,"context_line":"        return validate_mac_address(data, valid_values)"},{"line_number":399,"context_line":""},{"line_number":400,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"5f7c97a3_a95fd7e3","line":397,"in_reply_to":"5f7c97a3_86ba0adc","updated":"2018-05-03 17:25:36.000000000","message":"Done","commit_id":"7c0ca532cf3a21ffcba0d44cdf77302107ef5da2"},{"author":{"_account_id":5367,"name":"boden","email":"bodenvmw@gmail.com","username":"boden"},"change_message_id":"df2ceca1ca2d7dd3ff3ec25b1fe1057b32c46215","unresolved":false,"context_lines":[{"line_number":386,"context_line":"        return msg"},{"line_number":387,"context_line":""},{"line_number":388,"context_line":""},{"line_number":389,"context_line":"def validate_mac_address_or_regenerate(data, valid_values\u003dNone):"},{"line_number":390,"context_line":"    \"\"\"Validate data is a MAC address if the data isn\u0027t \u0027regenerate\u0027."},{"line_number":391,"context_line":""},{"line_number":392,"context_line":"    :param data: The data to validate."}],"source_content_type":"text/x-python","patch_set":3,"id":"5f7c97a3_2836ca52","line":389,"range":{"start_line":389,"start_character":4,"end_line":389,"end_character":38},"updated":"2018-05-29 13:53:43.000000000","message":"Curious, when \u0027regenerate\u0027 is passed, does the backend HAVE to be the logic generating the MAC or could that also be done here in the API layer? What I was wondering is if it could make sense to instead make this a converter that could convert \u0027regenerate\u0027 into a random MAC? What do you/others think?","commit_id":"3c8580fb9304aceafa79b0c4c05e2c7a971f21f0"},{"author":{"_account_id":24245,"name":"Harald Jensås","email":"hjensas@redhat.com","username":"harald.jensas"},"change_message_id":"324204a305ed1fcb95aa950c8977642c0eda41a9","unresolved":false,"context_lines":[{"line_number":386,"context_line":"        return msg"},{"line_number":387,"context_line":""},{"line_number":388,"context_line":""},{"line_number":389,"context_line":"def validate_mac_address_or_regenerate(data, valid_values\u003dNone):"},{"line_number":390,"context_line":"    \"\"\"Validate data is a MAC address if the data isn\u0027t \u0027regenerate\u0027."},{"line_number":391,"context_line":""},{"line_number":392,"context_line":"    :param data: The data to validate."}],"source_content_type":"text/x-python","patch_set":3,"id":"5f7c97a3_fc08af27","line":389,"range":{"start_line":389,"start_character":4,"end_line":389,"end_character":38},"in_reply_to":"5f7c97a3_2836ca52","updated":"2018-06-21 15:44:52.000000000","message":"Thanks for this suggestion. I changed it to use a converter instead.","commit_id":"3c8580fb9304aceafa79b0c4c05e2c7a971f21f0"}],"neutron_lib/tests/unit/api/definitions/test_port_mac_address_regenerate.py":[{"author":{"_account_id":5367,"name":"boden","email":"bodenvmw@gmail.com","username":"boden"},"change_message_id":"df2ceca1ca2d7dd3ff3ec25b1fe1057b32c46215","unresolved":false,"context_lines":[{"line_number":16,"context_line":""},{"line_number":17,"context_line":"class PortMacAddressRegenerateTestCase(base.DefinitionBaseTestCase):"},{"line_number":18,"context_line":"    extension_module \u003d port_mac_address_regenerate"},{"line_number":19,"context_line":"    extension_attributes \u003d (\u0027mac_address\u0027,)"}],"source_content_type":"text/x-python","patch_set":3,"id":"5f7c97a3_a8be5aab","line":19,"range":{"start_line":19,"start_character":29,"end_line":19,"end_character":40},"updated":"2018-05-29 13:53:43.000000000","message":"See comment on API def on potentially making this a constant.","commit_id":"3c8580fb9304aceafa79b0c4c05e2c7a971f21f0"}],"neutron_lib/tests/unit/api/test_conversions.py":[{"author":{"_account_id":17120,"name":"Manjeet Singh Bhatia","email":"manjeet.s.bhatia@intel.com","username":"manjeets"},"change_message_id":"141e7377ed37040dca34506b415f3af88ed1d08e","unresolved":false,"context_lines":[{"line_number":342,"context_line":"        self.assertEqual(valid_mac,"},{"line_number":343,"context_line":"                         converters.convert_to_mac_if_none(valid_mac))"},{"line_number":344,"context_line":""},{"line_number":345,"context_line":"    @mock.patch(\u0027oslo_config.cfg.CONF\u0027)"},{"line_number":346,"context_line":"    def test_convert_none_to_mac_address(self, CONF):"},{"line_number":347,"context_line":"        CONF.base_mac \u003d \u0027fa:16:3e:00:00:00\u0027"},{"line_number":348,"context_line":"        self.assertTrue("}],"source_content_type":"text/x-python","patch_set":6,"id":"5f7c97a3_d57b3326","line":345,"range":{"start_line":345,"start_character":4,"end_line":345,"end_character":39},"updated":"2018-06-22 15:26:26.000000000","message":"is this really needed ?","commit_id":"187882791d07c38e3ee61acdd236565c70f93b67"},{"author":{"_account_id":24245,"name":"Harald Jensås","email":"hjensas@redhat.com","username":"harald.jensas"},"change_message_id":"8339ffb2fbc538b902fd6eef1bba33d1f05b8f93","unresolved":false,"context_lines":[{"line_number":342,"context_line":"        self.assertEqual(valid_mac,"},{"line_number":343,"context_line":"                         converters.convert_to_mac_if_none(valid_mac))"},{"line_number":344,"context_line":""},{"line_number":345,"context_line":"    @mock.patch(\u0027oslo_config.cfg.CONF\u0027)"},{"line_number":346,"context_line":"    def test_convert_none_to_mac_address(self, CONF):"},{"line_number":347,"context_line":"        CONF.base_mac \u003d \u0027fa:16:3e:00:00:00\u0027"},{"line_number":348,"context_line":"        self.assertTrue("}],"source_content_type":"text/x-python","patch_set":6,"id":"5f7c97a3_482c6649","line":345,"range":{"start_line":345,"start_character":4,"end_line":345,"end_character":39},"in_reply_to":"5f7c97a3_d57b3326","updated":"2018-06-22 16:07:50.000000000","message":"The converter uses cfg.CONF.base_mac.\n\nmock patching oslo_config.cfg.CONF follows the same pattern used elsewhere in the code. For example: https://github.com/openstack/neutron-lib/blob/master/neutron_lib/tests/unit/api/validators/test_dns.py#L22\n\nIf we don\u0027t mock oslo_config the test fails because cfg.CONF.base_mac is not defined.","commit_id":"187882791d07c38e3ee61acdd236565c70f93b67"}],"releasenotes/notes/port-mac-address-regenerate-cc33d03216b5bc3d.yaml":[{"author":{"_account_id":17120,"name":"Manjeet Singh Bhatia","email":"manjeet.s.bhatia@intel.com","username":"manjeets"},"change_message_id":"2fc561d51c82c8d7aa7918c5ac9a8582be4867e5","unresolved":false,"context_lines":[{"line_number":1,"context_line":"---"},{"line_number":2,"context_line":"features:"},{"line_number":3,"context_line":"  - |"},{"line_number":4,"context_line":"    Adds new converter ``convert_to_mac_if_none`` used by api extenstion"},{"line_number":5,"context_line":"    ``port-mac-address-regenerate``. When passing ``\u0027null\u0027`` (``None``) as the"},{"line_number":6,"context_line":"    ``mac_address`` on port update the converted will generate a new mac"},{"line_number":7,"context_line":"    address that will be assigned to the port."},{"line_number":8,"context_line":"    `RFE:  #1768690 \u003chttps://bugs.launchpad.net/neutron/+bug/1768690\u003e`_."}],"source_content_type":"text/x-yaml","patch_set":5,"id":"5f7c97a3_95eb89a2","line":7,"range":{"start_line":4,"start_character":3,"end_line":7,"end_character":46},"updated":"2018-06-21 23:39:21.000000000","message":"Release notes looks incomplete, it also adds new extension definition \u0027port_mac_address_regenerate\u0027. that should also be mentioned.","commit_id":"58cd9d3e4e7c6a1c4aef987e931b0c79f5f19377"},{"author":{"_account_id":24245,"name":"Harald Jensås","email":"hjensas@redhat.com","username":"harald.jensas"},"change_message_id":"7f37fa2102311d3642c014fb53b4be4f22776344","unresolved":false,"context_lines":[{"line_number":1,"context_line":"---"},{"line_number":2,"context_line":"features:"},{"line_number":3,"context_line":"  - |"},{"line_number":4,"context_line":"    Adds new converter ``convert_to_mac_if_none`` used by api extenstion"},{"line_number":5,"context_line":"    ``port-mac-address-regenerate``. When passing ``\u0027null\u0027`` (``None``) as the"},{"line_number":6,"context_line":"    ``mac_address`` on port update the converted will generate a new mac"},{"line_number":7,"context_line":"    address that will be assigned to the port."},{"line_number":8,"context_line":"    `RFE:  #1768690 \u003chttps://bugs.launchpad.net/neutron/+bug/1768690\u003e`_."}],"source_content_type":"text/x-yaml","patch_set":5,"id":"5f7c97a3_232032b0","line":7,"range":{"start_line":4,"start_character":3,"end_line":7,"end_character":46},"in_reply_to":"5f7c97a3_95eb89a2","updated":"2018-06-22 13:25:28.000000000","message":"Done","commit_id":"58cd9d3e4e7c6a1c4aef987e931b0c79f5f19377"},{"author":{"_account_id":17120,"name":"Manjeet Singh Bhatia","email":"manjeet.s.bhatia@intel.com","username":"manjeets"},"change_message_id":"141e7377ed37040dca34506b415f3af88ed1d08e","unresolved":false,"context_lines":[{"line_number":1,"context_line":"---"},{"line_number":2,"context_line":"features:"},{"line_number":3,"context_line":"  - |"},{"line_number":4,"context_line":"    Adds api extension ``port-mac-address-regenerate``."},{"line_number":5,"context_line":""},{"line_number":6,"context_line":"    Adds converter ``convert_to_mac_if_none`` used by api extenstion"},{"line_number":7,"context_line":"    ``port-mac-address-regenerate``."},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"    When passing ``\u0027null\u0027`` (``None``) as the ``mac_address`` on port update"},{"line_number":10,"context_line":"    the converter will generate a new mac address that will be assigned to the"},{"line_number":11,"context_line":"    port. `RFE:  #1768690 \u003chttps://bugs.launchpad.net/neutron/+bug/1768690\u003e`_."}],"source_content_type":"text/x-yaml","patch_set":6,"id":"5f7c97a3_15ac4b86","line":10,"range":{"start_line":4,"start_character":4,"end_line":10,"end_character":78},"updated":"2018-06-22 15:26:26.000000000","message":"nit: this can be a single paragraph. no line space needed in b/w","commit_id":"187882791d07c38e3ee61acdd236565c70f93b67"},{"author":{"_account_id":24245,"name":"Harald Jensås","email":"hjensas@redhat.com","username":"harald.jensas"},"change_message_id":"fbceafa69e88d8533cc9b8c29044c5d585193dd6","unresolved":false,"context_lines":[{"line_number":1,"context_line":"---"},{"line_number":2,"context_line":"features:"},{"line_number":3,"context_line":"  - |"},{"line_number":4,"context_line":"    Adds api extension ``port-mac-address-regenerate``."},{"line_number":5,"context_line":""},{"line_number":6,"context_line":"    Adds converter ``convert_to_mac_if_none`` used by api extenstion"},{"line_number":7,"context_line":"    ``port-mac-address-regenerate``."},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"    When passing ``\u0027null\u0027`` (``None``) as the ``mac_address`` on port update"},{"line_number":10,"context_line":"    the converter will generate a new mac address that will be assigned to the"},{"line_number":11,"context_line":"    port. `RFE:  #1768690 \u003chttps://bugs.launchpad.net/neutron/+bug/1768690\u003e`_."}],"source_content_type":"text/x-yaml","patch_set":6,"id":"5f7c97a3_c8d876f1","line":10,"range":{"start_line":4,"start_character":4,"end_line":10,"end_character":78},"in_reply_to":"5f7c97a3_15ac4b86","updated":"2018-06-22 16:15:20.000000000","message":"Done","commit_id":"187882791d07c38e3ee61acdd236565c70f93b67"}]}
