)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":8313,"name":"Lajos Katona","display_name":"lajoskatona","email":"katonalala@gmail.com","username":"elajkat","status":"Ericsson Software Technology"},"change_message_id":"329819a29959a9d84c3369d4bd3d706a1d8e8a8d","unresolved":false,"context_lines":[{"line_number":14,"context_line":"Partially-Implements: https://bugs.launchpad.net/neutron/+bug/1889431"},{"line_number":15,"context_line":"RFE: https://bugs.launchpad.net/neutron/+bug/1889431"},{"line_number":16,"context_line":"Depends-On: https://review.opendev.org/#/c/744702/"},{"line_number":17,"context_line":"Depends-On: https://review.opendev.org/#/c/743828/"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":9,"id":"9f560f44_ad19c222","line":17,"range":{"start_line":17,"start_character":0,"end_line":17,"end_character":50},"updated":"2020-08-26 06:58:48.000000000","message":"nit: this depends-on is not needed as it is in the same repo and you put this patch on top of 743828","commit_id":"8608aa69ba5d440dc8f82c2b4c5151b7a5f5c94b"},{"author":{"_account_id":11975,"name":"Slawek Kaplonski","email":"skaplons@redhat.com","username":"slaweq"},"change_message_id":"9a86072fd66dd5afb8e57859348b46ec0237fd90","unresolved":false,"context_lines":[{"line_number":14,"context_line":"Partially-Implements: https://bugs.launchpad.net/neutron/+bug/1889431"},{"line_number":15,"context_line":"RFE: https://bugs.launchpad.net/neutron/+bug/1889431"},{"line_number":16,"context_line":"Depends-On: https://review.opendev.org/#/c/744702/"},{"line_number":17,"context_line":"Depends-On: https://review.opendev.org/#/c/743828/"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":9,"id":"9f560f44_80a5a5a1","line":17,"range":{"start_line":17,"start_character":0,"end_line":17,"end_character":50},"in_reply_to":"9f560f44_ad19c222","updated":"2020-08-26 07:51:18.000000000","message":"+1","commit_id":"8608aa69ba5d440dc8f82c2b4c5151b7a5f5c94b"},{"author":{"_account_id":28356,"name":"Rafael Weingartner","email":"rafael@apache.org","username":"rafaelweingartner"},"change_message_id":"e12b753d06f1d20572120d09da1d8e65b2c8c125","unresolved":false,"context_lines":[{"line_number":14,"context_line":"Partially-Implements: https://bugs.launchpad.net/neutron/+bug/1889431"},{"line_number":15,"context_line":"RFE: https://bugs.launchpad.net/neutron/+bug/1889431"},{"line_number":16,"context_line":"Depends-On: https://review.opendev.org/#/c/744702/"},{"line_number":17,"context_line":"Depends-On: https://review.opendev.org/#/c/743828/"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":9,"id":"9f560f44_0f589ef7","line":17,"range":{"start_line":17,"start_character":0,"end_line":17,"end_character":50},"in_reply_to":"9f560f44_ad19c222","updated":"2020-08-26 14:10:52.000000000","message":"Done","commit_id":"8608aa69ba5d440dc8f82c2b4c5151b7a5f5c94b"}],"api-ref/source/v2/metering.inc":[{"author":{"_account_id":11975,"name":"Slawek Kaplonski","email":"skaplons@redhat.com","username":"slaweq"},"change_message_id":"9a86072fd66dd5afb8e57859348b46ec0237fd90","unresolved":false,"context_lines":[{"line_number":300,"context_line":""},{"line_number":301,"context_line":"- The ID for the metering label rule."},{"line_number":302,"context_line":""},{"line_number":303,"context_line":"- The remote IP prefix (deprecated)."},{"line_number":304,"context_line":""},{"line_number":305,"context_line":"- The source IP prefix"},{"line_number":306,"context_line":""}],"source_content_type":"text/x-c++src","patch_set":9,"id":"9f560f44_c0bcbdbc","line":303,"range":{"start_line":303,"start_character":24,"end_line":303,"end_character":34},"updated":"2020-08-26 07:51:18.000000000","message":"this should be in https://review.opendev.org/#/c/743828/ probably","commit_id":"8608aa69ba5d440dc8f82c2b4c5151b7a5f5c94b"},{"author":{"_account_id":28356,"name":"Rafael Weingartner","email":"rafael@apache.org","username":"rafaelweingartner"},"change_message_id":"e12b753d06f1d20572120d09da1d8e65b2c8c125","unresolved":false,"context_lines":[{"line_number":300,"context_line":""},{"line_number":301,"context_line":"- The ID for the metering label rule."},{"line_number":302,"context_line":""},{"line_number":303,"context_line":"- The remote IP prefix (deprecated)."},{"line_number":304,"context_line":""},{"line_number":305,"context_line":"- The source IP prefix"},{"line_number":306,"context_line":""}],"source_content_type":"text/x-c++src","patch_set":9,"id":"9f560f44_54aa2670","line":303,"range":{"start_line":303,"start_character":24,"end_line":303,"end_character":34},"in_reply_to":"9f560f44_c0bcbdbc","updated":"2020-08-26 14:10:52.000000000","message":"Done","commit_id":"8608aa69ba5d440dc8f82c2b4c5151b7a5f5c94b"}],"api-ref/source/v2/parameters.yaml":[{"author":{"_account_id":11975,"name":"Slawek Kaplonski","email":"skaplons@redhat.com","username":"slaweq"},"change_message_id":"db0310dbd26606e01419b3010683aead28be18ca","unresolved":false,"context_lines":[{"line_number":729,"context_line":"  description: |"},{"line_number":730,"context_line":"    The destination IP prefix that the metering rule is associated with; in"},{"line_number":731,"context_line":"    this context, destination IP prefix represents the destination IP of the"},{"line_number":732,"context_line":"    network packet. Therefore, if we configure an ingress rule, the destination"},{"line_number":733,"context_line":"    IP is the internal IP associated with some OpenStack VM. On the other hand,"},{"line_number":734,"context_line":"    if we configure an egress rule, the destination IP prefix is the IP of"},{"line_number":735,"context_line":"    some external system that an application running inside some OpenStack"}],"source_content_type":"text/x-yaml","patch_set":4,"id":"9f560f44_78cb5449","line":732,"updated":"2020-08-19 11:22:33.000000000","message":"I\u0027m not sure if we should use \"we\" in this documentation. Maybe better would be something like: \"for ingress rule, the destination IP is the internal IP...\"","commit_id":"062033ecdbb20bb0fad5243cc87d7021693566d4"},{"author":{"_account_id":28356,"name":"Rafael Weingartner","email":"rafael@apache.org","username":"rafaelweingartner"},"change_message_id":"be006447ec80dae0764b482562196f7a6c72022d","unresolved":false,"context_lines":[{"line_number":729,"context_line":"  description: |"},{"line_number":730,"context_line":"    The destination IP prefix that the metering rule is associated with; in"},{"line_number":731,"context_line":"    this context, destination IP prefix represents the destination IP of the"},{"line_number":732,"context_line":"    network packet. Therefore, if we configure an ingress rule, the destination"},{"line_number":733,"context_line":"    IP is the internal IP associated with some OpenStack VM. On the other hand,"},{"line_number":734,"context_line":"    if we configure an egress rule, the destination IP prefix is the IP of"},{"line_number":735,"context_line":"    some external system that an application running inside some OpenStack"}],"source_content_type":"text/x-yaml","patch_set":4,"id":"9f560f44_98558853","line":732,"in_reply_to":"9f560f44_78cb5449","updated":"2020-08-19 11:58:07.000000000","message":"Done","commit_id":"062033ecdbb20bb0fad5243cc87d7021693566d4"},{"author":{"_account_id":11975,"name":"Slawek Kaplonski","email":"skaplons@redhat.com","username":"slaweq"},"change_message_id":"db0310dbd26606e01419b3010683aead28be18ca","unresolved":false,"context_lines":[{"line_number":770,"context_line":"  description: |"},{"line_number":771,"context_line":"    The source IP prefix that the metering rule is associated with; in this"},{"line_number":772,"context_line":"    context, source IP prefix represents the source IP of the network packet."},{"line_number":773,"context_line":"    Therefore, if we configure an ingress rule, the source IP is the IP of"},{"line_number":774,"context_line":"    the system accessing something inside OpenStack. On the other hand, if"},{"line_number":775,"context_line":"    we configure an egress rule, the source IP is the internal IP associated"},{"line_number":776,"context_line":"    with some OpenStack VM. Moreover, instead of an IP, one can also use a"}],"source_content_type":"text/x-yaml","patch_set":4,"id":"9f560f44_d8da6015","line":773,"updated":"2020-08-19 11:22:33.000000000","message":"same comment here also","commit_id":"062033ecdbb20bb0fad5243cc87d7021693566d4"},{"author":{"_account_id":28356,"name":"Rafael Weingartner","email":"rafael@apache.org","username":"rafaelweingartner"},"change_message_id":"be006447ec80dae0764b482562196f7a6c72022d","unresolved":false,"context_lines":[{"line_number":770,"context_line":"  description: |"},{"line_number":771,"context_line":"    The source IP prefix that the metering rule is associated with; in this"},{"line_number":772,"context_line":"    context, source IP prefix represents the source IP of the network packet."},{"line_number":773,"context_line":"    Therefore, if we configure an ingress rule, the source IP is the IP of"},{"line_number":774,"context_line":"    the system accessing something inside OpenStack. On the other hand, if"},{"line_number":775,"context_line":"    we configure an egress rule, the source IP is the internal IP associated"},{"line_number":776,"context_line":"    with some OpenStack VM. Moreover, instead of an IP, one can also use a"}],"source_content_type":"text/x-yaml","patch_set":4,"id":"9f560f44_b8f84c49","line":773,"in_reply_to":"9f560f44_d8da6015","updated":"2020-08-19 11:58:07.000000000","message":"Done","commit_id":"062033ecdbb20bb0fad5243cc87d7021693566d4"}],"neutron_lib/api/definitions/metering.py":[{"author":{"_account_id":5948,"name":"Oleg Bondarev","email":"obondarev@mirantis.com","username":"obondarev"},"change_message_id":"693f209d39fd5f7880bf3d66e486eb254ea54bed","unresolved":false,"context_lines":[{"line_number":93,"context_line":"            \u0027allow_post\u0027: True, \u0027allow_put\u0027: False,"},{"line_number":94,"context_line":"            \u0027is_visible\u0027: True, \u0027required_by_policy\u0027: True,"},{"line_number":95,"context_line":"            \u0027is_filter\u0027: True, \u0027is_sort_key\u0027: True,"},{"line_number":96,"context_line":"            \u0027validate\u0027: {\u0027type:subnet\u0027: None}"},{"line_number":97,"context_line":"        },"},{"line_number":98,"context_line":"        \u0027tenant_id\u0027: {"},{"line_number":99,"context_line":"            \u0027allow_post\u0027: True, \u0027allow_put\u0027: False,"}],"source_content_type":"text/x-python","patch_set":4,"id":"9f560f44_447e736b","side":"PARENT","line":96,"range":{"start_line":96,"start_character":13,"end_line":96,"end_character":45},"updated":"2020-08-19 06:19:52.000000000","message":"why removing validation?","commit_id":"02595de4f4ecf9ef4ad08c0f4dee9a6ac94fa2c4"},{"author":{"_account_id":28356,"name":"Rafael Weingartner","email":"rafael@apache.org","username":"rafaelweingartner"},"change_message_id":"be006447ec80dae0764b482562196f7a6c72022d","unresolved":false,"context_lines":[{"line_number":93,"context_line":"            \u0027allow_post\u0027: True, \u0027allow_put\u0027: False,"},{"line_number":94,"context_line":"            \u0027is_visible\u0027: True, \u0027required_by_policy\u0027: True,"},{"line_number":95,"context_line":"            \u0027is_filter\u0027: True, \u0027is_sort_key\u0027: True,"},{"line_number":96,"context_line":"            \u0027validate\u0027: {\u0027type:subnet\u0027: None}"},{"line_number":97,"context_line":"        },"},{"line_number":98,"context_line":"        \u0027tenant_id\u0027: {"},{"line_number":99,"context_line":"            \u0027allow_post\u0027: True, \u0027allow_put\u0027: False,"}],"source_content_type":"text/x-python","patch_set":4,"id":"9f560f44_3886fcdc","side":"PARENT","line":96,"range":{"start_line":96,"start_character":13,"end_line":96,"end_character":45},"in_reply_to":"9f560f44_447e736b","updated":"2020-08-19 11:58:07.000000000","message":"because this field has to be nullable now. There is still validation in the code. If I used it here, it forces the field to be not nullable (as far as I tested.).","commit_id":"02595de4f4ecf9ef4ad08c0f4dee9a6ac94fa2c4"},{"author":{"_account_id":11975,"name":"Slawek Kaplonski","email":"skaplons@redhat.com","username":"slaweq"},"change_message_id":"db0310dbd26606e01419b3010683aead28be18ca","unresolved":false,"context_lines":[{"line_number":102,"context_line":"        \u0027destination_ip_prefix\u0027: {"},{"line_number":103,"context_line":"            \u0027allow_post\u0027: True, \u0027allow_put\u0027: True,"},{"line_number":104,"context_line":"            \u0027is_visible\u0027: True, \u0027required_by_policy\u0027: False,"},{"line_number":105,"context_line":"            \u0027is_filter\u0027: True, \u0027is_sort_key\u0027: True, \u0027default\u0027: None"},{"line_number":106,"context_line":"        },"},{"line_number":107,"context_line":"        \u0027tenant_id\u0027: {"},{"line_number":108,"context_line":"            \u0027allow_post\u0027: True, \u0027allow_put\u0027: False,"}],"source_content_type":"text/x-python","patch_set":4,"id":"9f560f44_b8d5ece7","line":105,"updated":"2020-08-19 11:22:33.000000000","message":"You need to propose new api extension which will introduce those new attributes. Please see e.g. https://github.com/openstack/neutron-lib/blob/master/neutron_lib/api/definitions/extraroute_atomic.py how it extended router\u0027s attributes.","commit_id":"062033ecdbb20bb0fad5243cc87d7021693566d4"},{"author":{"_account_id":28356,"name":"Rafael Weingartner","email":"rafael@apache.org","username":"rafaelweingartner"},"change_message_id":"b2dadd91acbf3850b83194255af9d1f01d2bf4ed","unresolved":false,"context_lines":[{"line_number":102,"context_line":"        \u0027destination_ip_prefix\u0027: {"},{"line_number":103,"context_line":"            \u0027allow_post\u0027: True, \u0027allow_put\u0027: True,"},{"line_number":104,"context_line":"            \u0027is_visible\u0027: True, \u0027required_by_policy\u0027: False,"},{"line_number":105,"context_line":"            \u0027is_filter\u0027: True, \u0027is_sort_key\u0027: True, \u0027default\u0027: None"},{"line_number":106,"context_line":"        },"},{"line_number":107,"context_line":"        \u0027tenant_id\u0027: {"},{"line_number":108,"context_line":"            \u0027allow_post\u0027: True, \u0027allow_put\u0027: False,"}],"source_content_type":"text/x-python","patch_set":4,"id":"9f560f44_42b8f5e3","line":105,"in_reply_to":"9f560f44_b3686f87","updated":"2020-08-21 11:33:46.000000000","message":"Hello Slawek, \nDid you want me to introduce something like the latest patch?","commit_id":"062033ecdbb20bb0fad5243cc87d7021693566d4"},{"author":{"_account_id":28356,"name":"Rafael Weingartner","email":"rafael@apache.org","username":"rafaelweingartner"},"change_message_id":"be006447ec80dae0764b482562196f7a6c72022d","unresolved":false,"context_lines":[{"line_number":102,"context_line":"        \u0027destination_ip_prefix\u0027: {"},{"line_number":103,"context_line":"            \u0027allow_post\u0027: True, \u0027allow_put\u0027: True,"},{"line_number":104,"context_line":"            \u0027is_visible\u0027: True, \u0027required_by_policy\u0027: False,"},{"line_number":105,"context_line":"            \u0027is_filter\u0027: True, \u0027is_sort_key\u0027: True, \u0027default\u0027: None"},{"line_number":106,"context_line":"        },"},{"line_number":107,"context_line":"        \u0027tenant_id\u0027: {"},{"line_number":108,"context_line":"            \u0027allow_post\u0027: True, \u0027allow_put\u0027: False,"}],"source_content_type":"text/x-python","patch_set":4,"id":"9f560f44_b3686f87","line":105,"in_reply_to":"9f560f44_b8d5ece7","updated":"2020-08-19 11:58:07.000000000","message":"I am seeing that, but I really do not understand it.\n\nSo, do I need to create a new API? I mean, when I see all of those different and loosely coupled configs,I really get lost.\n\nWhat is the idea here? So, in Neutron we have the \"neutron/extensions/metering.py\", this component configures the API definition via \"api_definition \u003d metering_apidef\", where \"metering_apidef\" is the import of this file here. \n\nSo, even if I only want to add new attributes in an API, I need to create a new api definition? Wouldn\u0027t that create a new API as well?","commit_id":"062033ecdbb20bb0fad5243cc87d7021693566d4"}],"neutron_lib/api/definitions/metering_source_and_destination_filters.py":[{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"9ac296d5ac74ae2085bda83ccbac92d48db98a69","unresolved":false,"context_lines":[{"line_number":11,"context_line":"# License for the specific language governing permissions and limitations"},{"line_number":12,"context_line":"# under the License."},{"line_number":13,"context_line":""},{"line_number":14,"context_line":"from neutron_lib import constants"},{"line_number":15,"context_line":"from neutron_lib.db import constants as db_const"},{"line_number":16,"context_line":""},{"line_number":17,"context_line":"from neutron_lib.api import converters"}],"source_content_type":"text/x-python","patch_set":8,"id":"9f560f44_766a171a","line":14,"updated":"2020-08-21 15:13:37.000000000","message":"pep8: F401 \u0027neutron_lib.constants\u0027 imported but unused","commit_id":"24aee8045d022211c974eae48ac44c23b3b5dfd6"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"9ac296d5ac74ae2085bda83ccbac92d48db98a69","unresolved":false,"context_lines":[{"line_number":12,"context_line":"# under the License."},{"line_number":13,"context_line":""},{"line_number":14,"context_line":"from neutron_lib import constants"},{"line_number":15,"context_line":"from neutron_lib.db import constants as db_const"},{"line_number":16,"context_line":""},{"line_number":17,"context_line":"from neutron_lib.api import converters"},{"line_number":18,"context_line":"from neutron_lib.api.definitions import metering"}],"source_content_type":"text/x-python","patch_set":8,"id":"9f560f44_d6732315","line":15,"updated":"2020-08-21 15:13:37.000000000","message":"pep8: F401 \u0027neutron_lib.db.constants as db_const\u0027 imported but unused","commit_id":"24aee8045d022211c974eae48ac44c23b3b5dfd6"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"9ac296d5ac74ae2085bda83ccbac92d48db98a69","unresolved":false,"context_lines":[{"line_number":14,"context_line":"from neutron_lib import constants"},{"line_number":15,"context_line":"from neutron_lib.db import constants as db_const"},{"line_number":16,"context_line":""},{"line_number":17,"context_line":"from neutron_lib.api import converters"},{"line_number":18,"context_line":"from neutron_lib.api.definitions import metering"},{"line_number":19,"context_line":"from neutron_lib.services.qos import constants as qos_consts"},{"line_number":20,"context_line":""}],"source_content_type":"text/x-python","patch_set":8,"id":"9f560f44_b6702f0a","line":17,"updated":"2020-08-21 15:13:37.000000000","message":"pep8: F401 \u0027neutron_lib.api.converters\u0027 imported but unused","commit_id":"24aee8045d022211c974eae48ac44c23b3b5dfd6"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"9ac296d5ac74ae2085bda83ccbac92d48db98a69","unresolved":false,"context_lines":[{"line_number":16,"context_line":""},{"line_number":17,"context_line":"from neutron_lib.api import converters"},{"line_number":18,"context_line":"from neutron_lib.api.definitions import metering"},{"line_number":19,"context_line":"from neutron_lib.services.qos import constants as qos_consts"},{"line_number":20,"context_line":""},{"line_number":21,"context_line":"ALIAS \u003d \u0027metering_source_and_destination_fields\u0027"},{"line_number":22,"context_line":"IS_SHIM_EXTENSION \u003d False"}],"source_content_type":"text/x-python","patch_set":8,"id":"9f560f44_1663db43","line":19,"updated":"2020-08-21 15:13:37.000000000","message":"pep8: F401 \u0027neutron_lib.services.qos.constants as qos_consts\u0027 imported but unused","commit_id":"24aee8045d022211c974eae48ac44c23b3b5dfd6"},{"author":{"_account_id":8313,"name":"Lajos Katona","display_name":"lajoskatona","email":"katonalala@gmail.com","username":"elajkat","status":"Ericsson Software Technology"},"change_message_id":"329819a29959a9d84c3369d4bd3d706a1d8e8a8d","unresolved":false,"context_lines":[{"line_number":28,"context_line":""},{"line_number":29,"context_line":"SUB_RESOURCE_ATTRIBUTE_MAP \u003d {"},{"line_number":30,"context_line":"    metering.METERING_LABEL_RULES: {"},{"line_number":31,"context_line":"        \u0027remote_ip_prefix\u0027: {"},{"line_number":32,"context_line":"            \u0027allow_post\u0027: True, \u0027allow_put\u0027: False,"},{"line_number":33,"context_line":"            \u0027is_visible\u0027: True, \u0027required_by_policy\u0027: False,"},{"line_number":34,"context_line":"            \u0027is_filter\u0027: True, \u0027is_sort_key\u0027: True, \u0027default\u0027: None"},{"line_number":35,"context_line":"        },"},{"line_number":36,"context_line":"        \u0027source_ip_prefix\u0027: {"},{"line_number":37,"context_line":"            \u0027allow_post\u0027: True, \u0027allow_put\u0027: True,"},{"line_number":38,"context_line":"            \u0027is_visible\u0027: True, \u0027required_by_policy\u0027: False,"}],"source_content_type":"text/x-python","patch_set":9,"id":"9f560f44_8d483eb3","line":35,"range":{"start_line":31,"start_character":9,"end_line":35,"end_character":10},"updated":"2020-08-26 06:58:48.000000000","message":"this is the old key, which is on its way to deprecation, but this is nearly the same what is currently defined:\nhttps://opendev.org/openstack/neutron-lib/src/branch/master/neutron_lib/api/definitions/metering.py#L92\n\nI am not sure I understand your intention with it.","commit_id":"8608aa69ba5d440dc8f82c2b4c5151b7a5f5c94b"},{"author":{"_account_id":8313,"name":"Lajos Katona","display_name":"lajoskatona","email":"katonalala@gmail.com","username":"elajkat","status":"Ericsson Software Technology"},"change_message_id":"9c4cf270a7bc2822fb3e39d7f278ee3fe815866e","unresolved":false,"context_lines":[{"line_number":28,"context_line":""},{"line_number":29,"context_line":"SUB_RESOURCE_ATTRIBUTE_MAP \u003d {"},{"line_number":30,"context_line":"    metering.METERING_LABEL_RULES: {"},{"line_number":31,"context_line":"        \u0027remote_ip_prefix\u0027: {"},{"line_number":32,"context_line":"            \u0027allow_post\u0027: True, \u0027allow_put\u0027: False,"},{"line_number":33,"context_line":"            \u0027is_visible\u0027: True, \u0027required_by_policy\u0027: False,"},{"line_number":34,"context_line":"            \u0027is_filter\u0027: True, \u0027is_sort_key\u0027: True, \u0027default\u0027: None"},{"line_number":35,"context_line":"        },"},{"line_number":36,"context_line":"        \u0027source_ip_prefix\u0027: {"},{"line_number":37,"context_line":"            \u0027allow_post\u0027: True, \u0027allow_put\u0027: True,"},{"line_number":38,"context_line":"            \u0027is_visible\u0027: True, \u0027required_by_policy\u0027: False,"}],"source_content_type":"text/x-python","patch_set":9,"id":"9f560f44_26df680d","line":35,"range":{"start_line":31,"start_character":9,"end_line":35,"end_character":10},"in_reply_to":"9f560f44_12f1cc95","updated":"2020-08-28 08:05:40.000000000","message":"hm, by this definition that\u0027s possible:\nhttps://opendev.org/openstack/neutron-lib/src/branch/master/neutron_lib/api/validators/__init__.py#L645","commit_id":"8608aa69ba5d440dc8f82c2b4c5151b7a5f5c94b"},{"author":{"_account_id":28356,"name":"Rafael Weingartner","email":"rafael@apache.org","username":"rafaelweingartner"},"change_message_id":"e12b753d06f1d20572120d09da1d8e65b2c8c125","unresolved":false,"context_lines":[{"line_number":28,"context_line":""},{"line_number":29,"context_line":"SUB_RESOURCE_ATTRIBUTE_MAP \u003d {"},{"line_number":30,"context_line":"    metering.METERING_LABEL_RULES: {"},{"line_number":31,"context_line":"        \u0027remote_ip_prefix\u0027: {"},{"line_number":32,"context_line":"            \u0027allow_post\u0027: True, \u0027allow_put\u0027: False,"},{"line_number":33,"context_line":"            \u0027is_visible\u0027: True, \u0027required_by_policy\u0027: False,"},{"line_number":34,"context_line":"            \u0027is_filter\u0027: True, \u0027is_sort_key\u0027: True, \u0027default\u0027: None"},{"line_number":35,"context_line":"        },"},{"line_number":36,"context_line":"        \u0027source_ip_prefix\u0027: {"},{"line_number":37,"context_line":"            \u0027allow_post\u0027: True, \u0027allow_put\u0027: True,"},{"line_number":38,"context_line":"            \u0027is_visible\u0027: True, \u0027required_by_policy\u0027: False,"}],"source_content_type":"text/x-python","patch_set":9,"id":"9f560f44_6f667abd","line":35,"range":{"start_line":31,"start_character":9,"end_line":35,"end_character":10},"in_reply_to":"9f560f44_20e5b9dc","updated":"2020-08-26 14:10:52.000000000","message":"I am overriding it because of the validation option there. It was making it mandatory; even when I set ``\u0027required_by_policy\u0027: False``.\n\nThis ``remote_ip_prefix`` is not mandatory anymore. Therefore, I needed to override/redeclare it here.","commit_id":"8608aa69ba5d440dc8f82c2b4c5151b7a5f5c94b"},{"author":{"_account_id":8313,"name":"Lajos Katona","display_name":"lajoskatona","email":"katonalala@gmail.com","username":"elajkat","status":"Ericsson Software Technology"},"change_message_id":"d4a40dc9eb350c5c7f0bf544b75143fe4f378f17","unresolved":false,"context_lines":[{"line_number":28,"context_line":""},{"line_number":29,"context_line":"SUB_RESOURCE_ATTRIBUTE_MAP \u003d {"},{"line_number":30,"context_line":"    metering.METERING_LABEL_RULES: {"},{"line_number":31,"context_line":"        \u0027remote_ip_prefix\u0027: {"},{"line_number":32,"context_line":"            \u0027allow_post\u0027: True, \u0027allow_put\u0027: False,"},{"line_number":33,"context_line":"            \u0027is_visible\u0027: True, \u0027required_by_policy\u0027: False,"},{"line_number":34,"context_line":"            \u0027is_filter\u0027: True, \u0027is_sort_key\u0027: True, \u0027default\u0027: None"},{"line_number":35,"context_line":"        },"},{"line_number":36,"context_line":"        \u0027source_ip_prefix\u0027: {"},{"line_number":37,"context_line":"            \u0027allow_post\u0027: True, \u0027allow_put\u0027: True,"},{"line_number":38,"context_line":"            \u0027is_visible\u0027: True, \u0027required_by_policy\u0027: False,"}],"source_content_type":"text/x-python","patch_set":9,"id":"9f560f44_72b2c8e6","line":35,"range":{"start_line":31,"start_character":9,"end_line":35,"end_character":10},"in_reply_to":"9f560f44_6f667abd","updated":"2020-08-27 13:08:47.000000000","message":"Ok.\nBut this brings another question: don\u0027t you need validator here and for the new keys, like here:\nhttps://opendev.org/openstack/neutron-lib/src/branch/master/neutron_lib/api/definitions/metering.py#L96","commit_id":"8608aa69ba5d440dc8f82c2b4c5151b7a5f5c94b"},{"author":{"_account_id":28356,"name":"Rafael Weingartner","email":"rafael@apache.org","username":"rafaelweingartner"},"change_message_id":"3075d1720cc9a4137936555e9eb4cb73669a224d","unresolved":false,"context_lines":[{"line_number":28,"context_line":""},{"line_number":29,"context_line":"SUB_RESOURCE_ATTRIBUTE_MAP \u003d {"},{"line_number":30,"context_line":"    metering.METERING_LABEL_RULES: {"},{"line_number":31,"context_line":"        \u0027remote_ip_prefix\u0027: {"},{"line_number":32,"context_line":"            \u0027allow_post\u0027: True, \u0027allow_put\u0027: False,"},{"line_number":33,"context_line":"            \u0027is_visible\u0027: True, \u0027required_by_policy\u0027: False,"},{"line_number":34,"context_line":"            \u0027is_filter\u0027: True, \u0027is_sort_key\u0027: True, \u0027default\u0027: None"},{"line_number":35,"context_line":"        },"},{"line_number":36,"context_line":"        \u0027source_ip_prefix\u0027: {"},{"line_number":37,"context_line":"            \u0027allow_post\u0027: True, \u0027allow_put\u0027: True,"},{"line_number":38,"context_line":"            \u0027is_visible\u0027: True, \u0027required_by_policy\u0027: False,"}],"source_content_type":"text/x-python","patch_set":9,"id":"9f560f44_12f1cc95","line":35,"range":{"start_line":31,"start_character":9,"end_line":35,"end_character":10},"in_reply_to":"9f560f44_72b2c8e6","updated":"2020-08-27 13:13:59.000000000","message":"That is a good question. I tried to use it, but the use of validators option there was not allowing me to use nullable attributes in the request JSON body; it was trying to validate the null/None values as well, and it throws an error. Therefore, I added the validation in Neutron itself.\n\nIt seems that the use of validators assumes that the value will not be nullable.","commit_id":"8608aa69ba5d440dc8f82c2b4c5151b7a5f5c94b"},{"author":{"_account_id":11975,"name":"Slawek Kaplonski","email":"skaplons@redhat.com","username":"slaweq"},"change_message_id":"9a86072fd66dd5afb8e57859348b46ec0237fd90","unresolved":false,"context_lines":[{"line_number":28,"context_line":""},{"line_number":29,"context_line":"SUB_RESOURCE_ATTRIBUTE_MAP \u003d {"},{"line_number":30,"context_line":"    metering.METERING_LABEL_RULES: {"},{"line_number":31,"context_line":"        \u0027remote_ip_prefix\u0027: {"},{"line_number":32,"context_line":"            \u0027allow_post\u0027: True, \u0027allow_put\u0027: False,"},{"line_number":33,"context_line":"            \u0027is_visible\u0027: True, \u0027required_by_policy\u0027: False,"},{"line_number":34,"context_line":"            \u0027is_filter\u0027: True, \u0027is_sort_key\u0027: True, \u0027default\u0027: None"},{"line_number":35,"context_line":"        },"},{"line_number":36,"context_line":"        \u0027source_ip_prefix\u0027: {"},{"line_number":37,"context_line":"            \u0027allow_post\u0027: True, \u0027allow_put\u0027: True,"},{"line_number":38,"context_line":"            \u0027is_visible\u0027: True, \u0027required_by_policy\u0027: False,"}],"source_content_type":"text/x-python","patch_set":9,"id":"9f560f44_20e5b9dc","line":35,"range":{"start_line":31,"start_character":9,"end_line":35,"end_character":10},"in_reply_to":"9f560f44_8d483eb3","updated":"2020-08-26 07:51:18.000000000","message":"I agree with Lajos. Why You are adding it here?","commit_id":"8608aa69ba5d440dc8f82c2b4c5151b7a5f5c94b"}],"neutron_lib/tests/unit/api/definitions/test_metering.py":[{"author":{"_account_id":8313,"name":"Lajos Katona","display_name":"lajoskatona","email":"katonalala@gmail.com","username":"elajkat","status":"Ericsson Software Technology"},"change_message_id":"329819a29959a9d84c3369d4bd3d706a1d8e8a8d","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":9,"id":"9f560f44_8d6f9e26","updated":"2020-08-26 06:58:48.000000000","message":"you should add a new unit test file as well, like test_metering_source_and_destination_filters.py","commit_id":"8608aa69ba5d440dc8f82c2b4c5151b7a5f5c94b"},{"author":{"_account_id":28356,"name":"Rafael Weingartner","email":"rafael@apache.org","username":"rafaelweingartner"},"change_message_id":"e12b753d06f1d20572120d09da1d8e65b2c8c125","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":9,"id":"9f560f44_b499026e","in_reply_to":"9f560f44_8d6f9e26","updated":"2020-08-26 14:10:52.000000000","message":"Done","commit_id":"8608aa69ba5d440dc8f82c2b4c5151b7a5f5c94b"}],"releasenotes/notes/introduce-source-and-destination-ip-prefixes-into-metering-label-rules-3d62fccbca8e67b8.yaml":[{"author":{"_account_id":11975,"name":"Slawek Kaplonski","email":"skaplons@redhat.com","username":"slaweq"},"change_message_id":"9a86072fd66dd5afb8e57859348b46ec0237fd90","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":"    Add source_ip_prefix and destination_ip_prefix to Neutron metering"},{"line_number":5,"context_line":"    label rules."}],"source_content_type":"text/x-yaml","patch_set":9,"id":"9f560f44_a0d8a91d","line":4,"range":{"start_line":4,"start_character":29,"end_line":4,"end_character":50},"updated":"2020-08-26 07:51:18.000000000","message":"same here","commit_id":"8608aa69ba5d440dc8f82c2b4c5151b7a5f5c94b"},{"author":{"_account_id":11975,"name":"Slawek Kaplonski","email":"skaplons@redhat.com","username":"slaweq"},"change_message_id":"9a86072fd66dd5afb8e57859348b46ec0237fd90","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":"    Add source_ip_prefix and destination_ip_prefix to Neutron metering"},{"line_number":5,"context_line":"    label rules."}],"source_content_type":"text/x-yaml","patch_set":9,"id":"9f560f44_60d21102","line":4,"range":{"start_line":4,"start_character":8,"end_line":4,"end_character":24},"updated":"2020-08-26 07:51:18.000000000","message":"this should be placed inside `` ``","commit_id":"8608aa69ba5d440dc8f82c2b4c5151b7a5f5c94b"},{"author":{"_account_id":28356,"name":"Rafael Weingartner","email":"rafael@apache.org","username":"rafaelweingartner"},"change_message_id":"e12b753d06f1d20572120d09da1d8e65b2c8c125","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":"    Add source_ip_prefix and destination_ip_prefix to Neutron metering"},{"line_number":5,"context_line":"    label rules."}],"source_content_type":"text/x-yaml","patch_set":9,"id":"9f560f44_d432b65d","line":4,"range":{"start_line":4,"start_character":8,"end_line":4,"end_character":24},"in_reply_to":"9f560f44_60d21102","updated":"2020-08-26 14:10:52.000000000","message":"Done","commit_id":"8608aa69ba5d440dc8f82c2b4c5151b7a5f5c94b"},{"author":{"_account_id":28356,"name":"Rafael Weingartner","email":"rafael@apache.org","username":"rafaelweingartner"},"change_message_id":"e12b753d06f1d20572120d09da1d8e65b2c8c125","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":"    Add source_ip_prefix and destination_ip_prefix to Neutron metering"},{"line_number":5,"context_line":"    label rules."}],"source_content_type":"text/x-yaml","patch_set":9,"id":"9f560f44_34ecd2b9","line":4,"range":{"start_line":4,"start_character":29,"end_line":4,"end_character":50},"in_reply_to":"9f560f44_a0d8a91d","updated":"2020-08-26 14:10:52.000000000","message":"Done","commit_id":"8608aa69ba5d440dc8f82c2b4c5151b7a5f5c94b"}]}
