)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":5367,"name":"boden","email":"bodenvmw@gmail.com","username":"boden"},"change_message_id":"88119a45e7442f80297827171e2a0ad021f0561d","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":4,"id":"9a30ddce_0e96b83e","updated":"2017-03-10 14:49:22.000000000","message":"As per [1], I think we want to use the topic \u0027stadium-implosion\u0027.\n\n\n[1] https://review.openstack.org/#/c/389397/18/specs/stadium/ocata.rst@247","commit_id":"baf9b280ce0ebff5bff5a1af4de7536d575dd917"},{"author":{"_account_id":19935,"name":"Anh Tran","email":"anhtt@vn.fujitsu.com","username":"trananhkma"},"change_message_id":"845c47425064fbea7aaced594867034082e7ba45","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":4,"id":"9a30ddce_7e7fb914","in_reply_to":"9a30ddce_0e96b83e","updated":"2017-03-13 04:38:12.000000000","message":"Done","commit_id":"baf9b280ce0ebff5bff5a1af4de7536d575dd917"},{"author":{"_account_id":9656,"name":"Ihar Hrachyshka","email":"ihrachys@redhat.com","username":"ihrachys","status":"Red Hat Networking Systems Engineer"},"change_message_id":"7da4febe32258f36381ed439d6c6d084f91d4125","unresolved":false,"context_lines":[{"line_number":6,"context_line":""},{"line_number":7,"context_line":"Migrate neutron-vpnaas API definitions to neutron-lib"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"Neutron-vpnaas is intending to bring back into the stadium."},{"line_number":10,"context_line":"So, neutron-vpnaas must migrate it\u0027s API definition to neutron-lib."},{"line_number":11,"context_line":""},{"line_number":12,"context_line":"Co-Authored-By: Anh Tran \u003ctrananhkma@gmail.com\u003e"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":6,"id":"3a1ff146_7bd763bf","line":9,"updated":"2017-03-15 20:24:07.000000000","message":"was there any discussion on the matter and a buy-in from the neutron team? I am not aware of a definite answer, though I know there were signals some may be interested in it.\n\nI think moving api definitions would follow the result of the discussion, not vice versa.\n\nArmando just spun assessment process for Pike at https://review.openstack.org/#/c/445680/ I believe vpnaas folks should work with him to document vpnaas state there, to be able to see if the project can get in.","commit_id":"dc3d492729eba6bb7a46ffe49543da53dfb3c022"},{"author":{"_account_id":15905,"name":"Cao Xuan Hoang","email":"xuanhoangqb@gmail.com","username":"hoangcx"},"change_message_id":"c326eaad0b80a5bf413b4a0da3c684eaeacc38b0","unresolved":false,"context_lines":[{"line_number":6,"context_line":""},{"line_number":7,"context_line":"Migrate neutron-vpnaas API definitions to neutron-lib"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"Neutron-vpnaas is intending to bring back into the stadium."},{"line_number":10,"context_line":"So, neutron-vpnaas must migrate it\u0027s API definition to neutron-lib."},{"line_number":11,"context_line":""},{"line_number":12,"context_line":"Co-Authored-By: Anh Tran \u003ctrananhkma@gmail.com\u003e"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":6,"id":"3a1ff146_1d93bc50","line":9,"in_reply_to":"3a1ff146_7bd763bf","updated":"2017-03-16 01:48:51.000000000","message":"Thanks for your attention.\n\nI agreed with your point. Because I didn\u0027t notice/aware of Pike\u0027s assessment. So, I am addressing the criterion which was defined in Ocata. Since I though Pike\u0027s assessment will almost the same as Ocata.\n\nAnyway, I will follow the patch you mentioned to work with Armando to be able to bring it back. Thanks for point out the patch.","commit_id":"dc3d492729eba6bb7a46ffe49543da53dfb3c022"}],"neutron_lib/api/definitions/base.py":[{"author":{"_account_id":841,"name":"Akihiro Motoki","email":"amotoki@gmail.com","username":"amotoki"},"change_message_id":"9292dea9f11c50974fa254760c2fb077d9b56cc1","unresolved":false,"context_lines":[{"line_number":88,"context_line":"    \u0027fwaas_v2\u0027,"},{"line_number":89,"context_line":""},{"line_number":90,"context_line":"    # git.openstack.org/cgit/openstack/neutron-vpnaas"},{"line_number":91,"context_line":"    \u0027vpnaas_v2\u0027,"},{"line_number":92,"context_line":")"},{"line_number":93,"context_line":""},{"line_number":94,"context_line":"# The following is a short reference for understanding attribute info:"}],"source_content_type":"text/x-python","patch_set":6,"id":"3a1ff146_236b1620","line":91,"range":{"start_line":91,"start_character":4,"end_line":91,"end_character":16},"updated":"2017-03-15 14:08:59.000000000","message":"Why \u0027v2\u0027? Why not just \"vpnaas\"?\n\nIn my understanding, VPNaaS team is just trying to bring the existing VPNaaS back to the neutron stadium. The current API is known as \"vpnaas\". It is VPNaaS \"v1\" API on top of \"Networking API v2\". I sometimes see \"VPNaaS v2\" but actually there is no \"v2\" API.","commit_id":"dc3d492729eba6bb7a46ffe49543da53dfb3c022"},{"author":{"_account_id":15905,"name":"Cao Xuan Hoang","email":"xuanhoangqb@gmail.com","username":"hoangcx"},"change_message_id":"458dc6e027a65b74e84f460b1cb6c86ae0db7b1e","unresolved":false,"context_lines":[{"line_number":88,"context_line":"    \u0027fwaas_v2\u0027,"},{"line_number":89,"context_line":""},{"line_number":90,"context_line":"    # git.openstack.org/cgit/openstack/neutron-vpnaas"},{"line_number":91,"context_line":"    \u0027vpnaas_v2\u0027,"},{"line_number":92,"context_line":")"},{"line_number":93,"context_line":""},{"line_number":94,"context_line":"# The following is a short reference for understanding attribute info:"}],"source_content_type":"text/x-python","patch_set":6,"id":"dfeb2761_d278a4f9","line":91,"range":{"start_line":91,"start_character":4,"end_line":91,"end_character":16},"in_reply_to":"3a1ff146_236b1620","updated":"2017-03-31 04:01:40.000000000","message":"Yes. I will fix this one. Thank you for your explanation.","commit_id":"dc3d492729eba6bb7a46ffe49543da53dfb3c022"},{"author":{"_account_id":6854,"name":"YAMAMOTO Takashi","email":"yamamoto@midokura.com","username":"yamamoto"},"change_message_id":"1e790fd2ca7b79ee34705d180444f47c7b4f9597","unresolved":false,"context_lines":[{"line_number":128,"context_line":"    \u0027bgpvpn-vni\u0027,"},{"line_number":129,"context_line":""},{"line_number":130,"context_line":"    # git.openstack.org/cgit/openstack/neutron-vpnaas"},{"line_number":131,"context_line":"    \u0027vpnaas\u0027,"},{"line_number":132,"context_line":")"},{"line_number":133,"context_line":""},{"line_number":134,"context_line":"KNOWN_KEYWORDS \u003d ("}],"source_content_type":"text/x-python","patch_set":12,"id":"df87a7cf_b6a6bdaa","line":131,"updated":"2017-12-08 09:19:05.000000000","message":"how about other two?","commit_id":"e6012e8d96a3f1933973079ffb4c5ce4b44ec565"},{"author":{"_account_id":21781,"name":"Hunt Xu","email":"mhuntxu@gmail.com","username":"huntxu"},"change_message_id":"16e46de4018cf5bc4d761c1bd1a9c57f950edc52","unresolved":false,"context_lines":[{"line_number":128,"context_line":"    \u0027bgpvpn-vni\u0027,"},{"line_number":129,"context_line":""},{"line_number":130,"context_line":"    # git.openstack.org/cgit/openstack/neutron-vpnaas"},{"line_number":131,"context_line":"    \u0027vpnaas\u0027,"},{"line_number":132,"context_line":")"},{"line_number":133,"context_line":""},{"line_number":134,"context_line":"KNOWN_KEYWORDS \u003d ("}],"source_content_type":"text/x-python","patch_set":12,"id":"df87a7cf_561bb17f","line":131,"in_reply_to":"df87a7cf_b6a6bdaa","updated":"2017-12-08 09:34:46.000000000","message":"Done","commit_id":"e6012e8d96a3f1933973079ffb4c5ce4b44ec565"}],"neutron_lib/api/definitions/constants.py":[{"author":{"_account_id":841,"name":"Akihiro Motoki","email":"amotoki@gmail.com","username":"amotoki"},"change_message_id":"9292dea9f11c50974fa254760c2fb077d9b56cc1","unresolved":false,"context_lines":[{"line_number":23,"context_line":"FW_VALID_ACTION_VALUES \u003d [FWAAS_ALLOW, FWAAS_DENY, FWAAS_REJECT]"},{"line_number":24,"context_line":""},{"line_number":25,"context_line":"# neutron-vpnaas constants"},{"line_number":26,"context_line":"SUBNET_ENDPOINT \u003d \u0027subnet\u0027"},{"line_number":27,"context_line":"CIDR_ENDPOINT \u003d \u0027cidr\u0027"},{"line_number":28,"context_line":"VLAN_ENDPOINT \u003d \u0027vlan\u0027"},{"line_number":29,"context_line":"NETWORK_ENDPOINT \u003d \u0027network\u0027"},{"line_number":30,"context_line":"ROUTER_ENDPOINT \u003d \u0027router\u0027"},{"line_number":31,"context_line":""},{"line_number":32,"context_line":"VPN_SUPPORTED_ENDPOINT_TYPES \u003d ["},{"line_number":33,"context_line":"    SUBNET_ENDPOINT, CIDR_ENDPOINT, NETWORK_ENDPOINT,"}],"source_content_type":"text/x-python","patch_set":6,"id":"3a1ff146_235cf64a","line":30,"range":{"start_line":26,"start_character":0,"end_line":30,"end_character":26},"updated":"2017-03-15 14:08:59.000000000","message":"These are available values of VPN endpoint type. I would suggest to add \"VPN_\" prefix.\n\nIn addition, \"VPN_ENDPOINT_XXX\" sounds better.","commit_id":"dc3d492729eba6bb7a46ffe49543da53dfb3c022"},{"author":{"_account_id":15905,"name":"Cao Xuan Hoang","email":"xuanhoangqb@gmail.com","username":"hoangcx"},"change_message_id":"458dc6e027a65b74e84f460b1cb6c86ae0db7b1e","unresolved":false,"context_lines":[{"line_number":23,"context_line":"FW_VALID_ACTION_VALUES \u003d [FWAAS_ALLOW, FWAAS_DENY, FWAAS_REJECT]"},{"line_number":24,"context_line":""},{"line_number":25,"context_line":"# neutron-vpnaas constants"},{"line_number":26,"context_line":"SUBNET_ENDPOINT \u003d \u0027subnet\u0027"},{"line_number":27,"context_line":"CIDR_ENDPOINT \u003d \u0027cidr\u0027"},{"line_number":28,"context_line":"VLAN_ENDPOINT \u003d \u0027vlan\u0027"},{"line_number":29,"context_line":"NETWORK_ENDPOINT \u003d \u0027network\u0027"},{"line_number":30,"context_line":"ROUTER_ENDPOINT \u003d \u0027router\u0027"},{"line_number":31,"context_line":""},{"line_number":32,"context_line":"VPN_SUPPORTED_ENDPOINT_TYPES \u003d ["},{"line_number":33,"context_line":"    SUBNET_ENDPOINT, CIDR_ENDPOINT, NETWORK_ENDPOINT,"}],"source_content_type":"text/x-python","patch_set":6,"id":"dfeb2761_32691025","line":30,"range":{"start_line":26,"start_character":0,"end_line":30,"end_character":26},"in_reply_to":"3a1ff146_235cf64a","updated":"2017-03-31 04:01:40.000000000","message":"Done","commit_id":"dc3d492729eba6bb7a46ffe49543da53dfb3c022"},{"author":{"_account_id":5367,"name":"boden","email":"bodenvmw@gmail.com","username":"boden"},"change_message_id":"71e4008ed3cf10f6ffed7980e1144d43d2876bb8","unresolved":false,"context_lines":[{"line_number":32,"context_line":"IS_DEFAULT \u003d \u0027is_default\u0027"},{"line_number":33,"context_line":""},{"line_number":34,"context_line":"# neutron-vpnaas constants"},{"line_number":35,"context_line":"VPN_ENDPOINT_SUBNET \u003d \u0027subnet\u0027"},{"line_number":36,"context_line":"VPN_ENDPOINT_CIDR \u003d \u0027cidr\u0027"},{"line_number":37,"context_line":"VPN_ENDPOINT_VLAN \u003d \u0027vlan\u0027"},{"line_number":38,"context_line":"VPN_ENDPOINT_NETWORK \u003d \u0027network\u0027"}],"source_content_type":"text/x-python","patch_set":17,"id":"9f91af0f_add2bfcf","line":35,"range":{"start_line":35,"start_character":23,"end_line":35,"end_character":29},"updated":"2018-01-10 16:33:10.000000000","message":"Question: Does it make sense to just reuse the resource names from the API defs for these? e.g.\n\n   from neutron_lib.api.definitions import subnet\n   VPN_ENDPOINT_SUBNET \u003d subnet.RESOURCE_NAME","commit_id":"52775fd6f30c132034d6633c6efa8847747faa2b"},{"author":{"_account_id":21781,"name":"Hunt Xu","email":"mhuntxu@gmail.com","username":"huntxu"},"change_message_id":"660987db2e5f6a851c9f8e2c9a32d61fe0143cae","unresolved":false,"context_lines":[{"line_number":32,"context_line":"IS_DEFAULT \u003d \u0027is_default\u0027"},{"line_number":33,"context_line":""},{"line_number":34,"context_line":"# neutron-vpnaas constants"},{"line_number":35,"context_line":"VPN_ENDPOINT_SUBNET \u003d \u0027subnet\u0027"},{"line_number":36,"context_line":"VPN_ENDPOINT_CIDR \u003d \u0027cidr\u0027"},{"line_number":37,"context_line":"VPN_ENDPOINT_VLAN \u003d \u0027vlan\u0027"},{"line_number":38,"context_line":"VPN_ENDPOINT_NETWORK \u003d \u0027network\u0027"}],"source_content_type":"text/x-python","patch_set":17,"id":"7f96bb07_f024be0f","line":35,"range":{"start_line":35,"start_character":23,"end_line":35,"end_character":29},"in_reply_to":"9f91af0f_add2bfcf","updated":"2018-01-12 04:28:39.000000000","message":"IMHO no as it refers to an endpoint type here, not a resource, though they happen to be the same string.\n\nI keep this in PS18, let me know if you would like me to change, as well as network and router below.","commit_id":"52775fd6f30c132034d6633c6efa8847747faa2b"},{"author":{"_account_id":841,"name":"Akihiro Motoki","email":"amotoki@gmail.com","username":"amotoki"},"change_message_id":"fd820dde219bb91e721a3e011c28a53e304940c6","unresolved":false,"context_lines":[{"line_number":30,"context_line":""},{"line_number":31,"context_line":"# a default resource, such as auto allocated topology is_default network"},{"line_number":32,"context_line":"IS_DEFAULT \u003d \u0027is_default\u0027"},{"line_number":33,"context_line":""},{"line_number":34,"context_line":"# neutron-vpnaas constants"},{"line_number":35,"context_line":"VPN_ENDPOINT_CIDR \u003d \u0027cidr\u0027"},{"line_number":36,"context_line":"VPN_ENDPOINT_NETWORK \u003d \u0027network\u0027"}],"source_content_type":"text/x-python","patch_set":20,"id":"7f96bb07_0e69b01f","line":33,"updated":"2018-01-16 09:20:05.000000000","message":"Generally speaking, I would like to have constant definitions that are common to API definitions. I don\u0027t think constants added by this patch are common to the API definitions. How about moving them to individual API definition files?","commit_id":"86b3dcbb6851345eb87429b739ceabfa32262f55"},{"author":{"_account_id":21781,"name":"Hunt Xu","email":"mhuntxu@gmail.com","username":"huntxu"},"change_message_id":"e1a5274ea265dfcc012325f8a7f413e96b5770b5","unresolved":false,"context_lines":[{"line_number":30,"context_line":""},{"line_number":31,"context_line":"# a default resource, such as auto allocated topology is_default network"},{"line_number":32,"context_line":"IS_DEFAULT \u003d \u0027is_default\u0027"},{"line_number":33,"context_line":""},{"line_number":34,"context_line":"# neutron-vpnaas constants"},{"line_number":35,"context_line":"VPN_ENDPOINT_CIDR \u003d \u0027cidr\u0027"},{"line_number":36,"context_line":"VPN_ENDPOINT_NETWORK \u003d \u0027network\u0027"}],"source_content_type":"text/x-python","patch_set":20,"id":"7f96bb07_e9379e4c","line":33,"in_reply_to":"7f96bb07_0e69b01f","updated":"2018-01-16 09:43:35.000000000","message":"This makes sense to me. Done.","commit_id":"86b3dcbb6851345eb87429b739ceabfa32262f55"}],"neutron_lib/api/definitions/vpn.py":[{"author":{"_account_id":6854,"name":"YAMAMOTO Takashi","email":"yamamoto@midokura.com","username":"yamamoto"},"change_message_id":"1e790fd2ca7b79ee34705d180444f47c7b4f9597","unresolved":false,"context_lines":[{"line_number":1,"context_line":"#    Licensed under the Apache License, Version 2.0 (the \"License\"); you may"},{"line_number":2,"context_line":"#    not use this file except in compliance with the License. You may obtain"},{"line_number":3,"context_line":"#    a copy of the License at"},{"line_number":4,"context_line":"#"}],"source_content_type":"text/x-python","patch_set":12,"id":"df87a7cf_d67ee117","line":1,"updated":"2017-12-08 09:19:05.000000000","message":"keep the original copyright notices when copying stuff.\nditto for other files.","commit_id":"e6012e8d96a3f1933973079ffb4c5ce4b44ec565"},{"author":{"_account_id":21781,"name":"Hunt Xu","email":"mhuntxu@gmail.com","username":"huntxu"},"change_message_id":"16e46de4018cf5bc4d761c1bd1a9c57f950edc52","unresolved":false,"context_lines":[{"line_number":1,"context_line":"#    Licensed under the Apache License, Version 2.0 (the \"License\"); you may"},{"line_number":2,"context_line":"#    not use this file except in compliance with the License. You may obtain"},{"line_number":3,"context_line":"#    a copy of the License at"},{"line_number":4,"context_line":"#"}],"source_content_type":"text/x-python","patch_set":12,"id":"df87a7cf_762035ad","line":1,"in_reply_to":"df87a7cf_d67ee117","updated":"2017-12-08 09:34:46.000000000","message":"Done","commit_id":"e6012e8d96a3f1933973079ffb4c5ce4b44ec565"},{"author":{"_account_id":6854,"name":"YAMAMOTO Takashi","email":"yamamoto@midokura.com","username":"yamamoto"},"change_message_id":"1e790fd2ca7b79ee34705d180444f47c7b4f9597","unresolved":false,"context_lines":[{"line_number":32,"context_line":"# \u0027standard-attr-\u0027."},{"line_number":33,"context_line":"IS_STANDARD_ATTR_EXTENSION \u003d False"},{"line_number":34,"context_line":""},{"line_number":35,"context_line":"# The name of the extension."},{"line_number":36,"context_line":"NAME \u003d \u0027VPNaaS\u0027"},{"line_number":37,"context_line":""},{"line_number":38,"context_line":"# The description of the extension."},{"line_number":39,"context_line":"DESCRIPTION \u003d \"Provides support for vpn-as-a-service version 2\""},{"line_number":40,"context_line":""},{"line_number":41,"context_line":"# A timestamp of when the extension was introduced."},{"line_number":42,"context_line":"UPDATED_TIMESTAMP \u003d \"2017-03-08T10:00:00-00:00\""},{"line_number":43,"context_line":""},{"line_number":44,"context_line":"# Base for the API calls"},{"line_number":45,"context_line":"API_PREFIX \u003d \u0027/vpn\u0027"}],"source_content_type":"text/x-python","patch_set":12,"id":"df87a7cf_36e94db6","line":42,"range":{"start_line":35,"start_character":0,"end_line":42,"end_character":47},"updated":"2017-12-08 09:19:05.000000000","message":"i guess you should not change these\n\nhttps://github.com/openstack/neutron-vpnaas/blob/cdbbb7bd6dd2be96825e1dfb70c435cd868e89bb/neutron_vpnaas/extensions/vpnaas.py#L451-L469","commit_id":"e6012e8d96a3f1933973079ffb4c5ce4b44ec565"},{"author":{"_account_id":21781,"name":"Hunt Xu","email":"mhuntxu@gmail.com","username":"huntxu"},"change_message_id":"16e46de4018cf5bc4d761c1bd1a9c57f950edc52","unresolved":false,"context_lines":[{"line_number":32,"context_line":"# \u0027standard-attr-\u0027."},{"line_number":33,"context_line":"IS_STANDARD_ATTR_EXTENSION \u003d False"},{"line_number":34,"context_line":""},{"line_number":35,"context_line":"# The name of the extension."},{"line_number":36,"context_line":"NAME \u003d \u0027VPNaaS\u0027"},{"line_number":37,"context_line":""},{"line_number":38,"context_line":"# The description of the extension."},{"line_number":39,"context_line":"DESCRIPTION \u003d \"Provides support for vpn-as-a-service version 2\""},{"line_number":40,"context_line":""},{"line_number":41,"context_line":"# A timestamp of when the extension was introduced."},{"line_number":42,"context_line":"UPDATED_TIMESTAMP \u003d \"2017-03-08T10:00:00-00:00\""},{"line_number":43,"context_line":""},{"line_number":44,"context_line":"# Base for the API calls"},{"line_number":45,"context_line":"API_PREFIX \u003d \u0027/vpn\u0027"}],"source_content_type":"text/x-python","patch_set":12,"id":"df87a7cf_1611a95d","line":42,"range":{"start_line":35,"start_character":0,"end_line":42,"end_character":47},"in_reply_to":"df87a7cf_36e94db6","updated":"2017-12-08 09:34:46.000000000","message":"Done","commit_id":"e6012e8d96a3f1933973079ffb4c5ce4b44ec565"},{"author":{"_account_id":5367,"name":"boden","email":"bodenvmw@gmail.com","username":"boden"},"change_message_id":"71e4008ed3cf10f6ffed7980e1144d43d2876bb8","unresolved":false,"context_lines":[{"line_number":51,"context_line":"VPNSERVICES \u003d \u0027vpnservices\u0027"},{"line_number":52,"context_line":""},{"line_number":53,"context_line":"_vpn_supported_initiators \u003d [\u0027bi-directional\u0027, \u0027response-only\u0027]"},{"line_number":54,"context_line":"_vpn_supported_encryption_algorithms \u003d [\u00273des\u0027, \u0027aes-128\u0027,"},{"line_number":55,"context_line":"                                        \u0027aes-192\u0027, \u0027aes-256\u0027]"},{"line_number":56,"context_line":"_vpn_dpd_supported_actions \u003d ["},{"line_number":57,"context_line":"    \u0027hold\u0027, \u0027clear\u0027, \u0027restart\u0027, \u0027restart-by-peer\u0027, \u0027disabled\u0027"}],"source_content_type":"text/x-python","patch_set":17,"id":"9f91af0f_28445d46","line":54,"range":{"start_line":54,"start_character":0,"end_line":54,"end_character":36},"updated":"2018-01-10 16:33:10.000000000","message":"Maybe we should consider making these constants. I see the static strings for these used in a number of places and maybe it\u0027d be nice to consolidate on a constant?","commit_id":"52775fd6f30c132034d6633c6efa8847747faa2b"},{"author":{"_account_id":21781,"name":"Hunt Xu","email":"mhuntxu@gmail.com","username":"huntxu"},"change_message_id":"660987db2e5f6a851c9f8e2c9a32d61fe0143cae","unresolved":false,"context_lines":[{"line_number":51,"context_line":"VPNSERVICES \u003d \u0027vpnservices\u0027"},{"line_number":52,"context_line":""},{"line_number":53,"context_line":"_vpn_supported_initiators \u003d [\u0027bi-directional\u0027, \u0027response-only\u0027]"},{"line_number":54,"context_line":"_vpn_supported_encryption_algorithms \u003d [\u00273des\u0027, \u0027aes-128\u0027,"},{"line_number":55,"context_line":"                                        \u0027aes-192\u0027, \u0027aes-256\u0027]"},{"line_number":56,"context_line":"_vpn_dpd_supported_actions \u003d ["},{"line_number":57,"context_line":"    \u0027hold\u0027, \u0027clear\u0027, \u0027restart\u0027, \u0027restart-by-peer\u0027, \u0027disabled\u0027"}],"source_content_type":"text/x-python","patch_set":17,"id":"7f96bb07_70674e4f","line":54,"range":{"start_line":54,"start_character":0,"end_line":54,"end_character":36},"in_reply_to":"9f91af0f_28445d46","updated":"2018-01-12 04:28:39.000000000","message":"Done\n\nYes, neutron-vpnaas uses quite a lot of static strings too. It is better to make them constants.","commit_id":"52775fd6f30c132034d6633c6efa8847747faa2b"},{"author":{"_account_id":5367,"name":"boden","email":"bodenvmw@gmail.com","username":"boden"},"change_message_id":"71e4008ed3cf10f6ffed7980e1144d43d2876bb8","unresolved":false,"context_lines":[{"line_number":71,"context_line":""},{"line_number":72,"context_line":"RESOURCE_ATTRIBUTE_MAP \u003d {"},{"line_number":73,"context_line":""},{"line_number":74,"context_line":"    \u0027vpnservices\u0027: {"},{"line_number":75,"context_line":"        \u0027id\u0027: {\u0027allow_post\u0027: False, \u0027allow_put\u0027: False,"},{"line_number":76,"context_line":"               \u0027validate\u0027: {\u0027type:uuid\u0027: None},"},{"line_number":77,"context_line":"               \u0027is_visible\u0027: True,"}],"source_content_type":"text/x-python","patch_set":17,"id":"9f91af0f_8820099d","line":74,"range":{"start_line":74,"start_character":5,"end_line":74,"end_character":16},"updated":"2018-01-10 16:33:10.000000000","message":"Maybe better to just use VPNSERVICES","commit_id":"52775fd6f30c132034d6633c6efa8847747faa2b"},{"author":{"_account_id":21781,"name":"Hunt Xu","email":"mhuntxu@gmail.com","username":"huntxu"},"change_message_id":"660987db2e5f6a851c9f8e2c9a32d61fe0143cae","unresolved":false,"context_lines":[{"line_number":71,"context_line":""},{"line_number":72,"context_line":"RESOURCE_ATTRIBUTE_MAP \u003d {"},{"line_number":73,"context_line":""},{"line_number":74,"context_line":"    \u0027vpnservices\u0027: {"},{"line_number":75,"context_line":"        \u0027id\u0027: {\u0027allow_post\u0027: False, \u0027allow_put\u0027: False,"},{"line_number":76,"context_line":"               \u0027validate\u0027: {\u0027type:uuid\u0027: None},"},{"line_number":77,"context_line":"               \u0027is_visible\u0027: True,"}],"source_content_type":"text/x-python","patch_set":17,"id":"7f96bb07_70cc2e35","line":74,"range":{"start_line":74,"start_character":5,"end_line":74,"end_character":16},"in_reply_to":"9f91af0f_8820099d","updated":"2018-01-12 04:28:39.000000000","message":"Done","commit_id":"52775fd6f30c132034d6633c6efa8847747faa2b"},{"author":{"_account_id":5367,"name":"boden","email":"bodenvmw@gmail.com","username":"boden"},"change_message_id":"71e4008ed3cf10f6ffed7980e1144d43d2876bb8","unresolved":false,"context_lines":[{"line_number":98,"context_line":"                           \u0027default\u0027: True,"},{"line_number":99,"context_line":"                           \u0027convert_to\u0027: converters.convert_to_boolean,"},{"line_number":100,"context_line":"                           \u0027is_visible\u0027: True},"},{"line_number":101,"context_line":"        \u0027external_v4_ip\u0027: {\u0027allow_post\u0027: False, \u0027allow_put\u0027: False,"},{"line_number":102,"context_line":"                           \u0027is_visible\u0027: True},"},{"line_number":103,"context_line":"        \u0027external_v6_ip\u0027: {\u0027allow_post\u0027: False, \u0027allow_put\u0027: False,"},{"line_number":104,"context_line":"                           \u0027is_visible\u0027: True},"}],"source_content_type":"text/x-python","patch_set":17,"id":"9f91af0f_ad15df4a","line":101,"range":{"start_line":101,"start_character":9,"end_line":101,"end_character":23},"updated":"2018-01-10 16:33:10.000000000","message":"Do we need to validate these as IP addresses? I don\u0027t see any validation here.","commit_id":"52775fd6f30c132034d6633c6efa8847747faa2b"},{"author":{"_account_id":21781,"name":"Hunt Xu","email":"mhuntxu@gmail.com","username":"huntxu"},"change_message_id":"660987db2e5f6a851c9f8e2c9a32d61fe0143cae","unresolved":false,"context_lines":[{"line_number":98,"context_line":"                           \u0027default\u0027: True,"},{"line_number":99,"context_line":"                           \u0027convert_to\u0027: converters.convert_to_boolean,"},{"line_number":100,"context_line":"                           \u0027is_visible\u0027: True},"},{"line_number":101,"context_line":"        \u0027external_v4_ip\u0027: {\u0027allow_post\u0027: False, \u0027allow_put\u0027: False,"},{"line_number":102,"context_line":"                           \u0027is_visible\u0027: True},"},{"line_number":103,"context_line":"        \u0027external_v6_ip\u0027: {\u0027allow_post\u0027: False, \u0027allow_put\u0027: False,"},{"line_number":104,"context_line":"                           \u0027is_visible\u0027: True},"}],"source_content_type":"text/x-python","patch_set":17,"id":"7f96bb07_90e45aae","line":101,"range":{"start_line":101,"start_character":9,"end_line":101,"end_character":23},"in_reply_to":"9f91af0f_ad15df4a","updated":"2018-01-12 04:28:39.000000000","message":"This is a display only attribute, as well as others you pointed out.","commit_id":"52775fd6f30c132034d6633c6efa8847747faa2b"},{"author":{"_account_id":5367,"name":"boden","email":"bodenvmw@gmail.com","username":"boden"},"change_message_id":"71e4008ed3cf10f6ffed7980e1144d43d2876bb8","unresolved":false,"context_lines":[{"line_number":102,"context_line":"                           \u0027is_visible\u0027: True},"},{"line_number":103,"context_line":"        \u0027external_v6_ip\u0027: {\u0027allow_post\u0027: False, \u0027allow_put\u0027: False,"},{"line_number":104,"context_line":"                           \u0027is_visible\u0027: True},"},{"line_number":105,"context_line":"        \u0027status\u0027: {\u0027allow_post\u0027: False, \u0027allow_put\u0027: False,"},{"line_number":106,"context_line":"                   \u0027is_visible\u0027: True},"},{"line_number":107,"context_line":"    },"},{"line_number":108,"context_line":""}],"source_content_type":"text/x-python","patch_set":17,"id":"9f91af0f_4d10d357","line":105,"range":{"start_line":105,"start_character":9,"end_line":105,"end_character":15},"updated":"2018-01-10 16:33:10.000000000","message":"Ditto on validation","commit_id":"52775fd6f30c132034d6633c6efa8847747faa2b"},{"author":{"_account_id":5367,"name":"boden","email":"bodenvmw@gmail.com","username":"boden"},"change_message_id":"71e4008ed3cf10f6ffed7980e1144d43d2876bb8","unresolved":false,"context_lines":[{"line_number":143,"context_line":"        \u0027peer_ep_group_id\u0027: {\u0027allow_post\u0027: True, \u0027allow_put\u0027: True,"},{"line_number":144,"context_line":"                             \u0027validate\u0027: {\u0027type:uuid_or_none\u0027: None},"},{"line_number":145,"context_line":"                             \u0027is_visible\u0027: True, \u0027default\u0027: None},"},{"line_number":146,"context_line":"        \u0027route_mode\u0027: {\u0027allow_post\u0027: False, \u0027allow_put\u0027: False,"},{"line_number":147,"context_line":"                       \u0027default\u0027: \u0027static\u0027,"},{"line_number":148,"context_line":"                       \u0027is_visible\u0027: True},"},{"line_number":149,"context_line":"        \u0027mtu\u0027: {\u0027allow_post\u0027: True, \u0027allow_put\u0027: True,"}],"source_content_type":"text/x-python","patch_set":17,"id":"9f91af0f_a80aad1c","line":146,"range":{"start_line":146,"start_character":9,"end_line":146,"end_character":19},"updated":"2018-01-10 16:33:10.000000000","message":"Ditto on validation","commit_id":"52775fd6f30c132034d6633c6efa8847747faa2b"},{"author":{"_account_id":21781,"name":"Hunt Xu","email":"mhuntxu@gmail.com","username":"huntxu"},"change_message_id":"660987db2e5f6a851c9f8e2c9a32d61fe0143cae","unresolved":false,"context_lines":[{"line_number":143,"context_line":"        \u0027peer_ep_group_id\u0027: {\u0027allow_post\u0027: True, \u0027allow_put\u0027: True,"},{"line_number":144,"context_line":"                             \u0027validate\u0027: {\u0027type:uuid_or_none\u0027: None},"},{"line_number":145,"context_line":"                             \u0027is_visible\u0027: True, \u0027default\u0027: None},"},{"line_number":146,"context_line":"        \u0027route_mode\u0027: {\u0027allow_post\u0027: False, \u0027allow_put\u0027: False,"},{"line_number":147,"context_line":"                       \u0027default\u0027: \u0027static\u0027,"},{"line_number":148,"context_line":"                       \u0027is_visible\u0027: True},"},{"line_number":149,"context_line":"        \u0027mtu\u0027: {\u0027allow_post\u0027: True, \u0027allow_put\u0027: True,"}],"source_content_type":"text/x-python","patch_set":17,"id":"7f96bb07_70f50e57","line":146,"range":{"start_line":146,"start_character":9,"end_line":146,"end_character":19},"in_reply_to":"9f91af0f_a80aad1c","updated":"2018-01-12 04:28:39.000000000","message":"Also a display only attribute, the default value below is not needed.\n\nThanks for the pointer, I removed it.","commit_id":"52775fd6f30c132034d6633c6efa8847747faa2b"},{"author":{"_account_id":5367,"name":"boden","email":"bodenvmw@gmail.com","username":"boden"},"change_message_id":"71e4008ed3cf10f6ffed7980e1144d43d2876bb8","unresolved":false,"context_lines":[{"line_number":181,"context_line":"                           \u0027default\u0027: True,"},{"line_number":182,"context_line":"                           \u0027convert_to\u0027: converters.convert_to_boolean,"},{"line_number":183,"context_line":"                           \u0027is_visible\u0027: True},"},{"line_number":184,"context_line":"        \u0027status\u0027: {\u0027allow_post\u0027: False, \u0027allow_put\u0027: False,"},{"line_number":185,"context_line":"                   \u0027is_visible\u0027: True},"},{"line_number":186,"context_line":"        \u0027vpnservice_id\u0027: {\u0027allow_post\u0027: True, \u0027allow_put\u0027: False,"},{"line_number":187,"context_line":"                          \u0027validate\u0027: {\u0027type:uuid\u0027: None},"}],"source_content_type":"text/x-python","patch_set":17,"id":"9f91af0f_28169d4a","line":184,"range":{"start_line":184,"start_character":9,"end_line":184,"end_character":15},"updated":"2018-01-10 16:33:10.000000000","message":"Ditto on validation","commit_id":"52775fd6f30c132034d6633c6efa8847747faa2b"},{"author":{"_account_id":5367,"name":"boden","email":"bodenvmw@gmail.com","username":"boden"},"change_message_id":"b99a871286a77230a29033d5e90c73e52cf1e6de","unresolved":false,"context_lines":[{"line_number":90,"context_line":"                   \u0027is_visible\u0027: True},"},{"line_number":91,"context_line":"    },"},{"line_number":92,"context_line":""},{"line_number":93,"context_line":"    \u0027ipsec_site_connections\u0027: {"},{"line_number":94,"context_line":"        \u0027id\u0027: {\u0027allow_post\u0027: False, \u0027allow_put\u0027: False,"},{"line_number":95,"context_line":"               \u0027validate\u0027: {\u0027type:uuid\u0027: None},"},{"line_number":96,"context_line":"               \u0027is_visible\u0027: True,"}],"source_content_type":"text/x-python","patch_set":19,"id":"7f96bb07_e1ff0365","line":93,"range":{"start_line":93,"start_character":5,"end_line":93,"end_character":27},"updated":"2018-01-12 13:35:59.000000000","message":"What about making this a constant as well? I see this static string used in a number of our projects.","commit_id":"cc6a65a5c43c22704439825295feec3bb8aa486a"},{"author":{"_account_id":21781,"name":"Hunt Xu","email":"mhuntxu@gmail.com","username":"huntxu"},"change_message_id":"f1d35fb4970799b09e29370220b882bd4e1de01d","unresolved":false,"context_lines":[{"line_number":90,"context_line":"                   \u0027is_visible\u0027: True},"},{"line_number":91,"context_line":"    },"},{"line_number":92,"context_line":""},{"line_number":93,"context_line":"    \u0027ipsec_site_connections\u0027: {"},{"line_number":94,"context_line":"        \u0027id\u0027: {\u0027allow_post\u0027: False, \u0027allow_put\u0027: False,"},{"line_number":95,"context_line":"               \u0027validate\u0027: {\u0027type:uuid\u0027: None},"},{"line_number":96,"context_line":"               \u0027is_visible\u0027: True,"}],"source_content_type":"text/x-python","patch_set":19,"id":"7f96bb07_3f996a6d","line":93,"range":{"start_line":93,"start_character":5,"end_line":93,"end_character":27},"in_reply_to":"7f96bb07_e1ff0365","updated":"2018-01-15 02:48:17.000000000","message":"Done","commit_id":"cc6a65a5c43c22704439825295feec3bb8aa486a"},{"author":{"_account_id":5367,"name":"boden","email":"bodenvmw@gmail.com","username":"boden"},"change_message_id":"b99a871286a77230a29033d5e90c73e52cf1e6de","unresolved":false,"context_lines":[{"line_number":130,"context_line":"        \u0027route_mode\u0027: {\u0027allow_post\u0027: False, \u0027allow_put\u0027: False,"},{"line_number":131,"context_line":"                       \u0027is_visible\u0027: True},"},{"line_number":132,"context_line":"        \u0027mtu\u0027: {\u0027allow_post\u0027: True, \u0027allow_put\u0027: True,"},{"line_number":133,"context_line":"                \u0027default\u0027: \u00271500\u0027,"},{"line_number":134,"context_line":"                \u0027validate\u0027: {\u0027type:non_negative\u0027: None},"},{"line_number":135,"context_line":"                \u0027convert_to\u0027: converters.convert_to_int,"},{"line_number":136,"context_line":"                \u0027is_visible\u0027: True},"}],"source_content_type":"text/x-python","patch_set":19,"id":"7f96bb07_a13edb26","line":133,"range":{"start_line":133,"start_character":28,"end_line":133,"end_character":32},"updated":"2018-01-12 13:35:59.000000000","message":"Nit: shouldn\u0027t this be an int and not a str?","commit_id":"cc6a65a5c43c22704439825295feec3bb8aa486a"},{"author":{"_account_id":21781,"name":"Hunt Xu","email":"mhuntxu@gmail.com","username":"huntxu"},"change_message_id":"f1d35fb4970799b09e29370220b882bd4e1de01d","unresolved":false,"context_lines":[{"line_number":130,"context_line":"        \u0027route_mode\u0027: {\u0027allow_post\u0027: False, \u0027allow_put\u0027: False,"},{"line_number":131,"context_line":"                       \u0027is_visible\u0027: True},"},{"line_number":132,"context_line":"        \u0027mtu\u0027: {\u0027allow_post\u0027: True, \u0027allow_put\u0027: True,"},{"line_number":133,"context_line":"                \u0027default\u0027: \u00271500\u0027,"},{"line_number":134,"context_line":"                \u0027validate\u0027: {\u0027type:non_negative\u0027: None},"},{"line_number":135,"context_line":"                \u0027convert_to\u0027: converters.convert_to_int,"},{"line_number":136,"context_line":"                \u0027is_visible\u0027: True},"}],"source_content_type":"text/x-python","patch_set":19,"id":"7f96bb07_dfd5e6e6","line":133,"range":{"start_line":133,"start_character":28,"end_line":133,"end_character":32},"in_reply_to":"7f96bb07_a13edb26","updated":"2018-01-15 02:48:17.000000000","message":"Overlooked, just copy\u0026paste from neutron-vpnaas. Done.","commit_id":"cc6a65a5c43c22704439825295feec3bb8aa486a"},{"author":{"_account_id":5367,"name":"boden","email":"bodenvmw@gmail.com","username":"boden"},"change_message_id":"b99a871286a77230a29033d5e90c73e52cf1e6de","unresolved":false,"context_lines":[{"line_number":175,"context_line":"                           \u0027is_visible\u0027: True},"},{"line_number":176,"context_line":"    },"},{"line_number":177,"context_line":""},{"line_number":178,"context_line":"    \u0027ipsecpolicies\u0027: {"},{"line_number":179,"context_line":"        \u0027id\u0027: {\u0027allow_post\u0027: False, \u0027allow_put\u0027: False,"},{"line_number":180,"context_line":"               \u0027validate\u0027: {\u0027type:uuid\u0027: None},"},{"line_number":181,"context_line":"               \u0027is_visible\u0027: True,"}],"source_content_type":"text/x-python","patch_set":19,"id":"7f96bb07_01054f77","line":178,"range":{"start_line":178,"start_character":5,"end_line":178,"end_character":18},"updated":"2018-01-12 13:35:59.000000000","message":"Ditto.","commit_id":"cc6a65a5c43c22704439825295feec3bb8aa486a"},{"author":{"_account_id":21781,"name":"Hunt Xu","email":"mhuntxu@gmail.com","username":"huntxu"},"change_message_id":"f1d35fb4970799b09e29370220b882bd4e1de01d","unresolved":false,"context_lines":[{"line_number":175,"context_line":"                           \u0027is_visible\u0027: True},"},{"line_number":176,"context_line":"    },"},{"line_number":177,"context_line":""},{"line_number":178,"context_line":"    \u0027ipsecpolicies\u0027: {"},{"line_number":179,"context_line":"        \u0027id\u0027: {\u0027allow_post\u0027: False, \u0027allow_put\u0027: False,"},{"line_number":180,"context_line":"               \u0027validate\u0027: {\u0027type:uuid\u0027: None},"},{"line_number":181,"context_line":"               \u0027is_visible\u0027: True,"}],"source_content_type":"text/x-python","patch_set":19,"id":"7f96bb07_5f9c765c","line":178,"range":{"start_line":178,"start_character":5,"end_line":178,"end_character":18},"in_reply_to":"7f96bb07_01054f77","updated":"2018-01-15 02:48:17.000000000","message":"Done","commit_id":"cc6a65a5c43c22704439825295feec3bb8aa486a"},{"author":{"_account_id":5367,"name":"boden","email":"bodenvmw@gmail.com","username":"boden"},"change_message_id":"b99a871286a77230a29033d5e90c73e52cf1e6de","unresolved":false,"context_lines":[{"line_number":238,"context_line":"                \u0027is_visible\u0027: True},"},{"line_number":239,"context_line":"    },"},{"line_number":240,"context_line":""},{"line_number":241,"context_line":"    \u0027ikepolicies\u0027: {"},{"line_number":242,"context_line":"        \u0027id\u0027: {\u0027allow_post\u0027: False, \u0027allow_put\u0027: False,"},{"line_number":243,"context_line":"               \u0027validate\u0027: {\u0027type:uuid\u0027: None},"},{"line_number":244,"context_line":"               \u0027is_visible\u0027: True,"}],"source_content_type":"text/x-python","patch_set":19,"id":"7f96bb07_e134e34c","line":241,"range":{"start_line":241,"start_character":5,"end_line":241,"end_character":16},"updated":"2018-01-12 13:35:59.000000000","message":"Ditto.","commit_id":"cc6a65a5c43c22704439825295feec3bb8aa486a"},{"author":{"_account_id":21781,"name":"Hunt Xu","email":"mhuntxu@gmail.com","username":"huntxu"},"change_message_id":"f1d35fb4970799b09e29370220b882bd4e1de01d","unresolved":false,"context_lines":[{"line_number":238,"context_line":"                \u0027is_visible\u0027: True},"},{"line_number":239,"context_line":"    },"},{"line_number":240,"context_line":""},{"line_number":241,"context_line":"    \u0027ikepolicies\u0027: {"},{"line_number":242,"context_line":"        \u0027id\u0027: {\u0027allow_post\u0027: False, \u0027allow_put\u0027: False,"},{"line_number":243,"context_line":"               \u0027validate\u0027: {\u0027type:uuid\u0027: None},"},{"line_number":244,"context_line":"               \u0027is_visible\u0027: True,"}],"source_content_type":"text/x-python","patch_set":19,"id":"7f96bb07_1f9eee53","line":241,"range":{"start_line":241,"start_character":5,"end_line":241,"end_character":16},"in_reply_to":"7f96bb07_e134e34c","updated":"2018-01-15 02:48:17.000000000","message":"Done","commit_id":"cc6a65a5c43c22704439825295feec3bb8aa486a"},{"author":{"_account_id":841,"name":"Akihiro Motoki","email":"amotoki@gmail.com","username":"amotoki"},"change_message_id":"fd820dde219bb91e721a3e011c28a53e304940c6","unresolved":false,"context_lines":[{"line_number":16,"context_line":"from neutron_lib.api import converters"},{"line_number":17,"context_line":"from neutron_lib.api import validators"},{"line_number":18,"context_line":"from neutron_lib.db import constants as db_const"},{"line_number":19,"context_line":""},{"line_number":20,"context_line":"from neutron_lib.api.definitions import constants"},{"line_number":21,"context_line":"from neutron_lib.api.definitions import l3"},{"line_number":22,"context_line":""}],"source_content_type":"text/x-python","patch_set":20,"id":"7f96bb07_8e75c0cd","line":19,"updated":"2018-01-16 09:20:05.000000000","message":"No blank line is needed here.","commit_id":"86b3dcbb6851345eb87429b739ceabfa32262f55"},{"author":{"_account_id":21781,"name":"Hunt Xu","email":"mhuntxu@gmail.com","username":"huntxu"},"change_message_id":"e1a5274ea265dfcc012325f8a7f413e96b5770b5","unresolved":false,"context_lines":[{"line_number":16,"context_line":"from neutron_lib.api import converters"},{"line_number":17,"context_line":"from neutron_lib.api import validators"},{"line_number":18,"context_line":"from neutron_lib.db import constants as db_const"},{"line_number":19,"context_line":""},{"line_number":20,"context_line":"from neutron_lib.api.definitions import constants"},{"line_number":21,"context_line":"from neutron_lib.api.definitions import l3"},{"line_number":22,"context_line":""}],"source_content_type":"text/x-python","patch_set":20,"id":"7f96bb07_89405aa7","line":19,"in_reply_to":"7f96bb07_8e75c0cd","updated":"2018-01-16 09:43:35.000000000","message":"Done","commit_id":"86b3dcbb6851345eb87429b739ceabfa32262f55"}],"neutron_lib/api/definitions/vpn_endpoint_groups.py":[{"author":{"_account_id":841,"name":"Akihiro Motoki","email":"amotoki@gmail.com","username":"amotoki"},"change_message_id":"fd820dde219bb91e721a3e011c28a53e304940c6","unresolved":false,"context_lines":[{"line_number":14,"context_line":""},{"line_number":15,"context_line":"from neutron_lib.api import converters"},{"line_number":16,"context_line":"from neutron_lib.db import constants as db_const"},{"line_number":17,"context_line":""},{"line_number":18,"context_line":"from neutron_lib.api.definitions import constants"},{"line_number":19,"context_line":"from neutron_lib.api.definitions import vpn"},{"line_number":20,"context_line":""}],"source_content_type":"text/x-python","patch_set":20,"id":"7f96bb07_ee4d649a","line":17,"updated":"2018-01-16 09:20:05.000000000","message":"No blank line is needed here.","commit_id":"86b3dcbb6851345eb87429b739ceabfa32262f55"},{"author":{"_account_id":21781,"name":"Hunt Xu","email":"mhuntxu@gmail.com","username":"huntxu"},"change_message_id":"e1a5274ea265dfcc012325f8a7f413e96b5770b5","unresolved":false,"context_lines":[{"line_number":14,"context_line":""},{"line_number":15,"context_line":"from neutron_lib.api import converters"},{"line_number":16,"context_line":"from neutron_lib.db import constants as db_const"},{"line_number":17,"context_line":""},{"line_number":18,"context_line":"from neutron_lib.api.definitions import constants"},{"line_number":19,"context_line":"from neutron_lib.api.definitions import vpn"},{"line_number":20,"context_line":""}],"source_content_type":"text/x-python","patch_set":20,"id":"7f96bb07_69438eb0","line":17,"in_reply_to":"7f96bb07_ee4d649a","updated":"2018-01-16 09:43:35.000000000","message":"Done","commit_id":"86b3dcbb6851345eb87429b739ceabfa32262f55"}],"neutron_lib/api/definitions/vpn_flavors.py":[{"author":{"_account_id":6854,"name":"YAMAMOTO Takashi","email":"yamamoto@midokura.com","username":"yamamoto"},"change_message_id":"1e790fd2ca7b79ee34705d180444f47c7b4f9597","unresolved":false,"context_lines":[{"line_number":19,"context_line":"IS_SHIM_EXTENSION \u003d False"},{"line_number":20,"context_line":"IS_STANDARD_ATTR_EXTENSION \u003d False"},{"line_number":21,"context_line":"NAME \u003d \u0027VPN Service Falvor Extension\u0027"},{"line_number":22,"context_line":"DESCRIPTION \u003d \u0027Flavor support for VPN services.\u0027"},{"line_number":23,"context_line":"UPDATED_TIMESTAMP \u003d \u00272017-04-19T00:00:00-00:00\u0027"},{"line_number":24,"context_line":"API_PREFIX \u003d \u0027/vpn\u0027"},{"line_number":25,"context_line":"RESOURCE_NAME \u003d vpn.VPNSERVICE"}],"source_content_type":"text/x-python","patch_set":12,"id":"df87a7cf_96f05993","line":22,"range":{"start_line":22,"start_character":0,"end_line":22,"end_character":48},"updated":"2017-12-08 09:19:05.000000000","message":"i guess it\u0027s safer not to change this within this commit.","commit_id":"e6012e8d96a3f1933973079ffb4c5ce4b44ec565"},{"author":{"_account_id":6854,"name":"YAMAMOTO Takashi","email":"yamamoto@midokura.com","username":"yamamoto"},"change_message_id":"1128e78f1d7563bd47023aa0b2ed04bfe80b5e93","unresolved":false,"context_lines":[{"line_number":19,"context_line":"IS_SHIM_EXTENSION \u003d False"},{"line_number":20,"context_line":"IS_STANDARD_ATTR_EXTENSION \u003d False"},{"line_number":21,"context_line":"NAME \u003d \u0027VPN Service Falvor Extension\u0027"},{"line_number":22,"context_line":"DESCRIPTION \u003d \u0027Flavor support for VPN services.\u0027"},{"line_number":23,"context_line":"UPDATED_TIMESTAMP \u003d \u00272017-04-19T00:00:00-00:00\u0027"},{"line_number":24,"context_line":"API_PREFIX \u003d \u0027/vpn\u0027"},{"line_number":25,"context_line":"RESOURCE_NAME \u003d vpn.VPNSERVICE"}],"source_content_type":"text/x-python","patch_set":12,"id":"9f91af0f_0823c2be","line":22,"range":{"start_line":22,"start_character":0,"end_line":22,"end_character":48},"in_reply_to":"df87a7cf_9604d919","updated":"2018-01-09 06:57:06.000000000","message":"you changed it from\n\n   Flavor support for vpnservices.\n\nto\n\n   Flavor support for VPN services.","commit_id":"e6012e8d96a3f1933973079ffb4c5ce4b44ec565"},{"author":{"_account_id":21781,"name":"Hunt Xu","email":"mhuntxu@gmail.com","username":"huntxu"},"change_message_id":"16e46de4018cf5bc4d761c1bd1a9c57f950edc52","unresolved":false,"context_lines":[{"line_number":19,"context_line":"IS_SHIM_EXTENSION \u003d False"},{"line_number":20,"context_line":"IS_STANDARD_ATTR_EXTENSION \u003d False"},{"line_number":21,"context_line":"NAME \u003d \u0027VPN Service Falvor Extension\u0027"},{"line_number":22,"context_line":"DESCRIPTION \u003d \u0027Flavor support for VPN services.\u0027"},{"line_number":23,"context_line":"UPDATED_TIMESTAMP \u003d \u00272017-04-19T00:00:00-00:00\u0027"},{"line_number":24,"context_line":"API_PREFIX \u003d \u0027/vpn\u0027"},{"line_number":25,"context_line":"RESOURCE_NAME \u003d vpn.VPNSERVICE"}],"source_content_type":"text/x-python","patch_set":12,"id":"df87a7cf_9604d919","line":22,"range":{"start_line":22,"start_character":0,"end_line":22,"end_character":48},"in_reply_to":"df87a7cf_96f05993","updated":"2017-12-08 09:34:46.000000000","message":"This is copied from https://github.com/openstack/neutron-vpnaas/blob/cdbbb7bd6dd2be96825e1dfb70c435cd868e89bb/neutron_vpnaas/extensions/vpn_flavors.py#L52 . Did I miss something?","commit_id":"e6012e8d96a3f1933973079ffb4c5ce4b44ec565"}],"neutron_lib/api/definitions/vpn_v2.py":[{"author":{"_account_id":5367,"name":"boden","email":"bodenvmw@gmail.com","username":"boden"},"change_message_id":"88119a45e7442f80297827171e2a0ad021f0561d","unresolved":false,"context_lines":[{"line_number":45,"context_line":"API_PREFIX \u003d \u0027/vpn\u0027"},{"line_number":46,"context_line":""},{"line_number":47,"context_line":""},{"line_number":48,"context_line":"def _validate_subnet_list_or_none(data, key_specs\u003dNone):"},{"line_number":49,"context_line":"    if data is not None:"},{"line_number":50,"context_line":"        return validators.validate_subnet_list(data, key_specs)"},{"line_number":51,"context_line":""}],"source_content_type":"text/x-python","patch_set":4,"id":"9a30ddce_ae2daca9","line":48,"updated":"2017-03-10 14:49:22.000000000","message":"Why not make this part of neutron_lib.api.validators?","commit_id":"baf9b280ce0ebff5bff5a1af4de7536d575dd917"},{"author":{"_account_id":19935,"name":"Anh Tran","email":"anhtt@vn.fujitsu.com","username":"trananhkma"},"change_message_id":"845c47425064fbea7aaced594867034082e7ba45","unresolved":false,"context_lines":[{"line_number":45,"context_line":"API_PREFIX \u003d \u0027/vpn\u0027"},{"line_number":46,"context_line":""},{"line_number":47,"context_line":""},{"line_number":48,"context_line":"def _validate_subnet_list_or_none(data, key_specs\u003dNone):"},{"line_number":49,"context_line":"    if data is not None:"},{"line_number":50,"context_line":"        return validators.validate_subnet_list(data, key_specs)"},{"line_number":51,"context_line":""}],"source_content_type":"text/x-python","patch_set":4,"id":"9a30ddce_9e7aad22","line":48,"in_reply_to":"9a30ddce_ae2daca9","updated":"2017-03-13 04:38:12.000000000","message":"Done","commit_id":"baf9b280ce0ebff5bff5a1af4de7536d575dd917"},{"author":{"_account_id":5367,"name":"boden","email":"bodenvmw@gmail.com","username":"boden"},"change_message_id":"88119a45e7442f80297827171e2a0ad021f0561d","unresolved":false,"context_lines":[{"line_number":52,"context_line":"validators.add_validator(\u0027type:subnet_list_or_none\u0027,"},{"line_number":53,"context_line":"                         _validate_subnet_list_or_none)"},{"line_number":54,"context_line":""},{"line_number":55,"context_line":"vpn_supported_initiators \u003d [\u0027bi-directional\u0027, \u0027response-only\u0027]"},{"line_number":56,"context_line":"vpn_supported_encryption_algorithms \u003d [\u00273des\u0027, \u0027aes-128\u0027,"},{"line_number":57,"context_line":"                                       \u0027aes-192\u0027, \u0027aes-256\u0027]"},{"line_number":58,"context_line":"vpn_dpd_supported_actions \u003d ["}],"source_content_type":"text/x-python","patch_set":4,"id":"9a30ddce_f14ea56d","line":55,"updated":"2017-03-10 14:49:22.000000000","message":"For these module level vars, I\u0027d opt to either make them private if they won\u0027t be used by consumers, or make them all caps to indicate global.","commit_id":"baf9b280ce0ebff5bff5a1af4de7536d575dd917"},{"author":{"_account_id":19935,"name":"Anh Tran","email":"anhtt@vn.fujitsu.com","username":"trananhkma"},"change_message_id":"845c47425064fbea7aaced594867034082e7ba45","unresolved":false,"context_lines":[{"line_number":52,"context_line":"validators.add_validator(\u0027type:subnet_list_or_none\u0027,"},{"line_number":53,"context_line":"                         _validate_subnet_list_or_none)"},{"line_number":54,"context_line":""},{"line_number":55,"context_line":"vpn_supported_initiators \u003d [\u0027bi-directional\u0027, \u0027response-only\u0027]"},{"line_number":56,"context_line":"vpn_supported_encryption_algorithms \u003d [\u00273des\u0027, \u0027aes-128\u0027,"},{"line_number":57,"context_line":"                                       \u0027aes-192\u0027, \u0027aes-256\u0027]"},{"line_number":58,"context_line":"vpn_dpd_supported_actions \u003d ["}],"source_content_type":"text/x-python","patch_set":4,"id":"9a30ddce_de70a542","line":55,"in_reply_to":"9a30ddce_f14ea56d","updated":"2017-03-13 04:38:12.000000000","message":"Done","commit_id":"baf9b280ce0ebff5bff5a1af4de7536d575dd917"},{"author":{"_account_id":5367,"name":"boden","email":"bodenvmw@gmail.com","username":"boden"},"change_message_id":"88119a45e7442f80297827171e2a0ad021f0561d","unresolved":false,"context_lines":[{"line_number":358,"context_line":"}"},{"line_number":359,"context_line":""},{"line_number":360,"context_line":"# The list of required extensions."},{"line_number":361,"context_line":"REQUIRED_EXTENSIONS \u003d ["},{"line_number":362,"context_line":"]"},{"line_number":363,"context_line":""},{"line_number":364,"context_line":"# The list of optional extensions."}],"source_content_type":"text/x-python","patch_set":4,"id":"9a30ddce_d1e2812e","line":361,"updated":"2017-03-10 14:49:22.000000000","message":"No required extensions (e.g. router or other)?","commit_id":"baf9b280ce0ebff5bff5a1af4de7536d575dd917"},{"author":{"_account_id":19935,"name":"Anh Tran","email":"anhtt@vn.fujitsu.com","username":"trananhkma"},"change_message_id":"845c47425064fbea7aaced594867034082e7ba45","unresolved":false,"context_lines":[{"line_number":358,"context_line":"}"},{"line_number":359,"context_line":""},{"line_number":360,"context_line":"# The list of required extensions."},{"line_number":361,"context_line":"REQUIRED_EXTENSIONS \u003d ["},{"line_number":362,"context_line":"]"},{"line_number":363,"context_line":""},{"line_number":364,"context_line":"# The list of optional extensions."}],"source_content_type":"text/x-python","patch_set":4,"id":"9a30ddce_fe91e947","line":361,"in_reply_to":"9a30ddce_d1e2812e","updated":"2017-03-13 04:38:12.000000000","message":"Done","commit_id":"baf9b280ce0ebff5bff5a1af4de7536d575dd917"},{"author":{"_account_id":841,"name":"Akihiro Motoki","email":"amotoki@gmail.com","username":"amotoki"},"change_message_id":"9292dea9f11c50974fa254760c2fb077d9b56cc1","unresolved":false,"context_lines":[{"line_number":19,"context_line":""},{"line_number":20,"context_line":""},{"line_number":21,"context_line":"# The alias of the extension."},{"line_number":22,"context_line":"ALIAS \u003d \u0027vpnaas_v2\u0027"},{"line_number":23,"context_line":""},{"line_number":24,"context_line":"# Whether or not this extension is simply signaling behavior to the user"},{"line_number":25,"context_line":"# or it actively modifies the attribute map."}],"source_content_type":"text/x-python","patch_set":6,"id":"3a1ff146_ee13a55a","line":22,"range":{"start_line":22,"start_character":8,"end_line":22,"end_character":19},"updated":"2017-03-15 14:08:59.000000000","message":"We now have \"vpnaas\" extension. What is different between \"vpnaas\" and \"vpnaas_v2\" extensions? It is related to my comment in base.py.","commit_id":"dc3d492729eba6bb7a46ffe49543da53dfb3c022"},{"author":{"_account_id":15905,"name":"Cao Xuan Hoang","email":"xuanhoangqb@gmail.com","username":"hoangcx"},"change_message_id":"458dc6e027a65b74e84f460b1cb6c86ae0db7b1e","unresolved":false,"context_lines":[{"line_number":19,"context_line":""},{"line_number":20,"context_line":""},{"line_number":21,"context_line":"# The alias of the extension."},{"line_number":22,"context_line":"ALIAS \u003d \u0027vpnaas_v2\u0027"},{"line_number":23,"context_line":""},{"line_number":24,"context_line":"# Whether or not this extension is simply signaling behavior to the user"},{"line_number":25,"context_line":"# or it actively modifies the attribute map."}],"source_content_type":"text/x-python","patch_set":6,"id":"dfeb2761_72d558b9","line":22,"range":{"start_line":22,"start_character":8,"end_line":22,"end_character":19},"in_reply_to":"3a1ff146_ee13a55a","updated":"2017-03-31 04:01:40.000000000","message":"This is his misunderstanding. I will fix this. Thank you","commit_id":"dc3d492729eba6bb7a46ffe49543da53dfb3c022"}],"neutron_lib/api/validators.py":[{"author":{"_account_id":5367,"name":"boden","email":"bodenvmw@gmail.com","username":"boden"},"change_message_id":"12261193c4c9d018a58a90ff13a1432b9a560276","unresolved":false,"context_lines":[{"line_number":617,"context_line":"    :returns: None if data is None or a valid list of subnet dicts, otherwise"},{"line_number":618,"context_line":"    a human readable message as to why the data is invalid."},{"line_number":619,"context_line":"    \"\"\""},{"line_number":620,"context_line":"    if data is not None:"},{"line_number":621,"context_line":"        return validate_subnet_list(data, key_specs)"},{"line_number":622,"context_line":""},{"line_number":623,"context_line":""}],"source_content_type":"text/x-python","patch_set":6,"id":"3a1ff146_8854f054","line":620,"updated":"2017-03-15 11:11:05.000000000","message":"No test for this, but I guess its so trivial a test may just be overkill.","commit_id":"dc3d492729eba6bb7a46ffe49543da53dfb3c022"},{"author":{"_account_id":15905,"name":"Cao Xuan Hoang","email":"xuanhoangqb@gmail.com","username":"hoangcx"},"change_message_id":"458dc6e027a65b74e84f460b1cb6c86ae0db7b1e","unresolved":false,"context_lines":[{"line_number":617,"context_line":"    :returns: None if data is None or a valid list of subnet dicts, otherwise"},{"line_number":618,"context_line":"    a human readable message as to why the data is invalid."},{"line_number":619,"context_line":"    \"\"\""},{"line_number":620,"context_line":"    if data is not None:"},{"line_number":621,"context_line":"        return validate_subnet_list(data, key_specs)"},{"line_number":622,"context_line":""},{"line_number":623,"context_line":""}],"source_content_type":"text/x-python","patch_set":6,"id":"dfeb2761_d2ef8485","line":620,"in_reply_to":"3a1ff146_8854f054","updated":"2017-03-31 04:01:40.000000000","message":"Indeed. Thanks for your review.","commit_id":"dc3d492729eba6bb7a46ffe49543da53dfb3c022"}],"neutron_lib/exceptions/vpn.py":[{"author":{"_account_id":5367,"name":"boden","email":"bodenvmw@gmail.com","username":"boden"},"change_message_id":"be4d094a90baba073558c31f4360beca5c54025f","unresolved":false,"context_lines":[{"line_number":76,"context_line":""},{"line_number":77,"context_line":""},{"line_number":78,"context_line":"class DeviceDriverImportError(exceptions.NeutronException):"},{"line_number":79,"context_line":"    message \u003d _(\"Can not load driver :%(device_driver)s\")"},{"line_number":80,"context_line":""},{"line_number":81,"context_line":""},{"line_number":82,"context_line":"class SubnetIsNotConnectedToRouter(exceptions.BadRequest):"}],"source_content_type":"text/x-python","patch_set":22,"id":"7f96bb07_6c012706","line":79,"range":{"start_line":79,"start_character":36,"end_line":79,"end_character":37},"updated":"2018-01-17 16:55:26.000000000","message":"nit: I think the space should come after the \":\"","commit_id":"ae811c808e7e46b721f409c2f01657156d7a35b4"},{"author":{"_account_id":21781,"name":"Hunt Xu","email":"mhuntxu@gmail.com","username":"huntxu"},"change_message_id":"41f15dcefe514b7ba3e613b090a1b11cca18570b","unresolved":false,"context_lines":[{"line_number":76,"context_line":""},{"line_number":77,"context_line":""},{"line_number":78,"context_line":"class DeviceDriverImportError(exceptions.NeutronException):"},{"line_number":79,"context_line":"    message \u003d _(\"Can not load driver :%(device_driver)s\")"},{"line_number":80,"context_line":""},{"line_number":81,"context_line":""},{"line_number":82,"context_line":"class SubnetIsNotConnectedToRouter(exceptions.BadRequest):"}],"source_content_type":"text/x-python","patch_set":22,"id":"7f96bb07_171bc072","line":79,"range":{"start_line":79,"start_character":36,"end_line":79,"end_character":37},"in_reply_to":"7f96bb07_6c012706","updated":"2018-01-18 02:06:52.000000000","message":"Done. Wow, nice catch","commit_id":"ae811c808e7e46b721f409c2f01657156d7a35b4"},{"author":{"_account_id":841,"name":"Akihiro Motoki","email":"amotoki@gmail.com","username":"amotoki"},"change_message_id":"1b79333d084489c2451bb0ef425aa1dfcdf7de52","unresolved":false,"context_lines":[{"line_number":1,"context_line":"# All rights reserved."},{"line_number":2,"context_line":"#"},{"line_number":3,"context_line":"#    Licensed under the Apache License, Version 2.0 (the \"License\"); you may"},{"line_number":4,"context_line":"#    not use this file except in compliance with the License. You may obtain"}],"source_content_type":"text/x-python","patch_set":23,"id":"5f93b717_6df9bc7e","line":1,"range":{"start_line":1,"start_character":0,"end_line":1,"end_character":22},"updated":"2018-01-25 17:31:05.000000000","message":"nit: \"All rights reserved\" without copyright owner sounds a bit odd. Could you drop it?","commit_id":"736d0941fe275f4f5b8a9f0613fadc3f27b6431a"},{"author":{"_account_id":21781,"name":"Hunt Xu","email":"mhuntxu@gmail.com","username":"huntxu"},"change_message_id":"6be015476b9886e71e25a70179fec1d060bc5af5","unresolved":false,"context_lines":[{"line_number":1,"context_line":"# All rights reserved."},{"line_number":2,"context_line":"#"},{"line_number":3,"context_line":"#    Licensed under the Apache License, Version 2.0 (the \"License\"); you may"},{"line_number":4,"context_line":"#    not use this file except in compliance with the License. You may obtain"}],"source_content_type":"text/x-python","patch_set":23,"id":"5f93b717_434da870","line":1,"range":{"start_line":1,"start_character":0,"end_line":1,"end_character":22},"in_reply_to":"5f93b717_6df9bc7e","updated":"2018-01-26 01:20:38.000000000","message":"Done.\n\nAnd just an FYI, there are several other places with a single line of this sentence at the first line of the file. I guess some cleanups should also be done to those.\n\n$ find . -name \"*.py\" -exec head -n 1 {} \\; |grep \"^# All rights reserved.$\"|wc -l \u003d\u003e 33","commit_id":"736d0941fe275f4f5b8a9f0613fadc3f27b6431a"},{"author":{"_account_id":841,"name":"Akihiro Motoki","email":"amotoki@gmail.com","username":"amotoki"},"change_message_id":"1b79333d084489c2451bb0ef425aa1dfcdf7de52","unresolved":false,"context_lines":[{"line_number":67,"context_line":""},{"line_number":68,"context_line":"class VPNStateInvalidToUpdate(exceptions.BadRequest):"},{"line_number":69,"context_line":"    message \u003d _(\"Invalid state %(state)s of vpnaas resource %(id)s\""},{"line_number":70,"context_line":"                \" for updating\")"},{"line_number":71,"context_line":""},{"line_number":72,"context_line":""},{"line_number":73,"context_line":"class IPsecPolicyInUse(exceptions.InUse):"}],"source_content_type":"text/x-python","patch_set":23,"id":"5f93b717_cd39f041","line":70,"range":{"start_line":70,"start_character":17,"end_line":70,"end_character":18},"updated":"2018-01-25 17:31:05.000000000","message":"Nit: In other places of wrapping lines, spaces are placed at the end of lines, but here is an exception. Could you move a space to the end of line?","commit_id":"736d0941fe275f4f5b8a9f0613fadc3f27b6431a"},{"author":{"_account_id":21781,"name":"Hunt Xu","email":"mhuntxu@gmail.com","username":"huntxu"},"change_message_id":"6be015476b9886e71e25a70179fec1d060bc5af5","unresolved":false,"context_lines":[{"line_number":67,"context_line":""},{"line_number":68,"context_line":"class VPNStateInvalidToUpdate(exceptions.BadRequest):"},{"line_number":69,"context_line":"    message \u003d _(\"Invalid state %(state)s of vpnaas resource %(id)s\""},{"line_number":70,"context_line":"                \" for updating\")"},{"line_number":71,"context_line":""},{"line_number":72,"context_line":""},{"line_number":73,"context_line":"class IPsecPolicyInUse(exceptions.InUse):"}],"source_content_type":"text/x-python","patch_set":23,"id":"5f93b717_e3ab94d3","line":70,"range":{"start_line":70,"start_character":17,"end_line":70,"end_character":18},"in_reply_to":"5f93b717_cd39f041","updated":"2018-01-26 01:20:38.000000000","message":"Done","commit_id":"736d0941fe275f4f5b8a9f0613fadc3f27b6431a"}],"neutron_lib/tests/unit/api/definitions/test_vpn_endpoint_groups.py":[{"author":{"_account_id":6854,"name":"YAMAMOTO Takashi","email":"yamamoto@midokura.com","username":"yamamoto"},"change_message_id":"1e790fd2ca7b79ee34705d180444f47c7b4f9597","unresolved":false,"context_lines":[{"line_number":15,"context_line":""},{"line_number":16,"context_line":""},{"line_number":17,"context_line":"class VPNEndpointGroupsDefinitionTestCase(base.DefinitionBaseTestCase):"},{"line_number":18,"context_line":"    extension_module \u003d vpn_endpint_groups"},{"line_number":19,"context_line":"    extension_resources \u003d (\u0027endpoint_groups\u0027,)"},{"line_number":20,"context_line":"    extension_attributes \u003d (\u0027type\u0027, \u0027endpoints\u0027,)"}],"source_content_type":"text/x-python","patch_set":12,"id":"df87a7cf_1696893f","line":18,"range":{"start_line":18,"start_character":27,"end_line":18,"end_character":34},"updated":"2017-12-08 09:19:05.000000000","message":"endpoint","commit_id":"e6012e8d96a3f1933973079ffb4c5ce4b44ec565"},{"author":{"_account_id":21781,"name":"Hunt Xu","email":"mhuntxu@gmail.com","username":"huntxu"},"change_message_id":"16e46de4018cf5bc4d761c1bd1a9c57f950edc52","unresolved":false,"context_lines":[{"line_number":15,"context_line":""},{"line_number":16,"context_line":""},{"line_number":17,"context_line":"class VPNEndpointGroupsDefinitionTestCase(base.DefinitionBaseTestCase):"},{"line_number":18,"context_line":"    extension_module \u003d vpn_endpint_groups"},{"line_number":19,"context_line":"    extension_resources \u003d (\u0027endpoint_groups\u0027,)"},{"line_number":20,"context_line":"    extension_attributes \u003d (\u0027type\u0027, \u0027endpoints\u0027,)"}],"source_content_type":"text/x-python","patch_set":12,"id":"df87a7cf_5900c201","line":18,"range":{"start_line":18,"start_character":27,"end_line":18,"end_character":34},"in_reply_to":"df87a7cf_1696893f","updated":"2017-12-08 09:34:46.000000000","message":"oops, Done","commit_id":"e6012e8d96a3f1933973079ffb4c5ce4b44ec565"}],"releasenotes/notes/vpn-api-def-52970461fac0f7d2.yaml":[{"author":{"_account_id":5367,"name":"boden","email":"bodenvmw@gmail.com","username":"boden"},"change_message_id":"12261193c4c9d018a58a90ff13a1432b9a560276","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":6,"id":"3a1ff146_28ccdc34","line":4,"updated":"2017-03-15 11:11:05.000000000","message":"Might be nice to also add a note that the new validator was added too.","commit_id":"dc3d492729eba6bb7a46ffe49543da53dfb3c022"},{"author":{"_account_id":15905,"name":"Cao Xuan Hoang","email":"xuanhoangqb@gmail.com","username":"hoangcx"},"change_message_id":"458dc6e027a65b74e84f460b1cb6c86ae0db7b1e","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":6,"id":"dfeb2761_b299a020","line":4,"in_reply_to":"3a1ff146_28ccdc34","updated":"2017-03-31 04:01:40.000000000","message":"Done","commit_id":"dc3d492729eba6bb7a46ffe49543da53dfb3c022"},{"author":{"_account_id":6854,"name":"YAMAMOTO Takashi","email":"yamamoto@midokura.com","username":"yamamoto"},"change_message_id":"8ca7294ca552324e421da9f86ba8237f94fb6ca1","unresolved":false,"context_lines":[{"line_number":1,"context_line":"---"},{"line_number":2,"context_line":"features:"},{"line_number":3,"context_line":"    - Adds neutron-vpnaas API definitions to neutron-lib."},{"line_number":4,"context_line":"    - New validator for subnet was added too."}],"source_content_type":"text/x-yaml","patch_set":15,"id":"9f91af0f_c344dd49","line":3,"range":{"start_line":3,"start_character":0,"end_line":3,"end_character":57},"updated":"2018-01-09 07:08:32.000000000","message":"it\u0027s better to mention what they are.  (vpnaas, ...)","commit_id":"6620d0bca20c78ffe530932df8889bab447a3c06"},{"author":{"_account_id":6854,"name":"YAMAMOTO Takashi","email":"yamamoto@midokura.com","username":"yamamoto"},"change_message_id":"8ca7294ca552324e421da9f86ba8237f94fb6ca1","unresolved":false,"context_lines":[{"line_number":1,"context_line":"---"},{"line_number":2,"context_line":"features:"},{"line_number":3,"context_line":"    - Adds neutron-vpnaas API definitions to neutron-lib."},{"line_number":4,"context_line":"    - New validator for subnet was added too."}],"source_content_type":"text/x-yaml","patch_set":15,"id":"9f91af0f_4359ad32","line":4,"range":{"start_line":4,"start_character":0,"end_line":4,"end_character":45},"updated":"2018-01-09 07:08:32.000000000","message":"it\u0027s better to mention what it is. (validate_subnet_list_or_none)","commit_id":"6620d0bca20c78ffe530932df8889bab447a3c06"},{"author":{"_account_id":5367,"name":"boden","email":"bodenvmw@gmail.com","username":"boden"},"change_message_id":"71e4008ed3cf10f6ffed7980e1144d43d2876bb8","unresolved":false,"context_lines":[{"line_number":1,"context_line":"---"},{"line_number":2,"context_line":"features:"},{"line_number":3,"context_line":"  - Adds neutron-vpnaas API definitions to neutron-lib, including"},{"line_number":4,"context_line":"    vpnaas, vpn-endpoint-groups and vpn-flavors."},{"line_number":5,"context_line":"  - A new validator to validate data is a list of subnet dicts or None"},{"line_number":6,"context_line":"    is added too."}],"source_content_type":"text/x-yaml","patch_set":17,"id":"7f96bb07_246f76c6","line":3,"range":{"start_line":3,"start_character":9,"end_line":3,"end_character":23},"updated":"2018-01-10 16:33:10.000000000","message":"Nit: use ``neutron-vpnaas`` style when referring to \"code names\" as the formatting makes is read a bit easier.","commit_id":"52775fd6f30c132034d6633c6efa8847747faa2b"},{"author":{"_account_id":21781,"name":"Hunt Xu","email":"mhuntxu@gmail.com","username":"huntxu"},"change_message_id":"660987db2e5f6a851c9f8e2c9a32d61fe0143cae","unresolved":false,"context_lines":[{"line_number":1,"context_line":"---"},{"line_number":2,"context_line":"features:"},{"line_number":3,"context_line":"  - Adds neutron-vpnaas API definitions to neutron-lib, including"},{"line_number":4,"context_line":"    vpnaas, vpn-endpoint-groups and vpn-flavors."},{"line_number":5,"context_line":"  - A new validator to validate data is a list of subnet dicts or None"},{"line_number":6,"context_line":"    is added too."}],"source_content_type":"text/x-yaml","patch_set":17,"id":"7f96bb07_f0859eae","line":3,"range":{"start_line":3,"start_character":9,"end_line":3,"end_character":23},"in_reply_to":"7f96bb07_246f76c6","updated":"2018-01-12 04:28:39.000000000","message":"Done","commit_id":"52775fd6f30c132034d6633c6efa8847747faa2b"},{"author":{"_account_id":5367,"name":"boden","email":"bodenvmw@gmail.com","username":"boden"},"change_message_id":"71e4008ed3cf10f6ffed7980e1144d43d2876bb8","unresolved":false,"context_lines":[{"line_number":2,"context_line":"features:"},{"line_number":3,"context_line":"  - Adds neutron-vpnaas API definitions to neutron-lib, including"},{"line_number":4,"context_line":"    vpnaas, vpn-endpoint-groups and vpn-flavors."},{"line_number":5,"context_line":"  - A new validator to validate data is a list of subnet dicts or None"},{"line_number":6,"context_line":"    is added too."}],"source_content_type":"text/x-yaml","patch_set":17,"id":"7f96bb07_24a45608","line":5,"range":{"start_line":5,"start_character":10,"end_line":5,"end_character":19},"updated":"2018-01-10 16:33:10.000000000","message":"IMO it\u0027d be nice to mention the new validation type type:subnet_list_or_none here since that\u0027s what users will likely consume.","commit_id":"52775fd6f30c132034d6633c6efa8847747faa2b"},{"author":{"_account_id":21781,"name":"Hunt Xu","email":"mhuntxu@gmail.com","username":"huntxu"},"change_message_id":"660987db2e5f6a851c9f8e2c9a32d61fe0143cae","unresolved":false,"context_lines":[{"line_number":2,"context_line":"features:"},{"line_number":3,"context_line":"  - Adds neutron-vpnaas API definitions to neutron-lib, including"},{"line_number":4,"context_line":"    vpnaas, vpn-endpoint-groups and vpn-flavors."},{"line_number":5,"context_line":"  - A new validator to validate data is a list of subnet dicts or None"},{"line_number":6,"context_line":"    is added too."}],"source_content_type":"text/x-yaml","patch_set":17,"id":"7f96bb07_b08f16cb","line":5,"range":{"start_line":5,"start_character":10,"end_line":5,"end_character":19},"in_reply_to":"7f96bb07_24a45608","updated":"2018-01-12 04:28:39.000000000","message":"Done","commit_id":"52775fd6f30c132034d6633c6efa8847747faa2b"},{"author":{"_account_id":5367,"name":"boden","email":"bodenvmw@gmail.com","username":"boden"},"change_message_id":"9a21b129da9d2404645f28d004b69f87da8d568e","unresolved":false,"context_lines":[{"line_number":3,"context_line":"  - Adds ``neutron-vpnaas`` API definitions to neutron-lib, including"},{"line_number":4,"context_line":"    ``vpnaas``, ``vpn-endpoint-groups`` and ``vpn-flavors``."},{"line_number":5,"context_line":"  - A new validator for type ``type:subnet_list_or_none`` to validate"},{"line_number":6,"context_line":"    data is a list of subnet dicts or None is added too."}],"source_content_type":"text/x-yaml","patch_set":21,"id":"7f96bb07_90e876e2","line":6,"range":{"start_line":6,"start_character":38,"end_line":6,"end_character":42},"updated":"2018-01-16 13:30:36.000000000","message":"Nit; ``None``","commit_id":"b7ea452e9649e7228e51ba37e22b710c9baf8c6d"}]}
