)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":8415,"name":"Denis M.","email":"lildee1991@gmail.com","username":"dmakogon"},"change_message_id":"eb70a1ec1090991c295c87ae1e18dce6e43d00c7","unresolved":false,"context_lines":[{"line_number":9,"context_line":"Refactored the code to use netaddr rather than re-implementing IP"},{"line_number":10,"context_line":"address validation. This gives us IPv6 support for free."},{"line_number":11,"context_line":""},{"line_number":12,"context_line":"DocImpact"},{"line_number":13,"context_line":"Change-Id: I36c76169f2ab3bb7f54f67db522309a49ae61f7a"},{"line_number":14,"context_line":"Closes-Bug: #1343192"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":5,"id":"baada198_32a88477","line":12,"updated":"2014-08-04 15:40:19.000000000","message":"DocImpact section should state about given changes. It can\u0027t be empty","commit_id":"09fb3e7937236bbbe1d5b2803c9807cd229b17a7"},{"author":{"_account_id":8415,"name":"Denis M.","email":"lildee1991@gmail.com","username":"dmakogon"},"change_message_id":"28dda8b4a80b0f80d1f6447f36a59d9c51bfef13","unresolved":false,"context_lines":[{"line_number":9,"context_line":"Refactored the code to use netaddr rather than re-implementing IP"},{"line_number":10,"context_line":"address validation. This gives us IPv6 support for free."},{"line_number":11,"context_line":""},{"line_number":12,"context_line":"DocImpact"},{"line_number":13,"context_line":"The hostname_require_ipv4 configuration option is being"},{"line_number":14,"context_line":"removed in favor of hostname_require_valid_ip. The latter is more"},{"line_number":15,"context_line":"inclusive and validates both IPv4 and IPv6 addresses."}],"source_content_type":"text/x-gerrit-commit-message","patch_set":6,"id":"baada198_9e585d5a","line":12,"updated":"2014-08-05 10:06:37.000000000","message":"DocImpact: The hostname_require_ipv4 configuration option is being\n           removed in favor of hostname_require_valid_ip. The latter is more\n           inclusive and validates both IPv4 and IPv6 addresses.","commit_id":"206b288224b7b65e2dcd94fc42c72d6a1bd34721"},{"author":{"_account_id":2340,"name":"Ionut Artarisi","email":"iartarisi@suse.cz","username":"mapleoin"},"change_message_id":"0aa1d307c49fc90ec4c31c49b3897fdcce3b02d8","unresolved":false,"context_lines":[{"line_number":9,"context_line":"Refactored the code to use netaddr rather than re-implementing IP"},{"line_number":10,"context_line":"address validation. This gives us IPv6 support for free."},{"line_number":11,"context_line":""},{"line_number":12,"context_line":"DocImpact"},{"line_number":13,"context_line":"The hostname_require_ipv4 configuration option is being"},{"line_number":14,"context_line":"removed in favor of hostname_require_valid_ip. The latter is more"},{"line_number":15,"context_line":"inclusive and validates both IPv4 and IPv6 addresses."}],"source_content_type":"text/x-gerrit-commit-message","patch_set":6,"id":"baada198_1a9fd903","line":12,"in_reply_to":"baada198_9e585d5a","updated":"2014-08-13 09:26:27.000000000","message":"https://wiki.openstack.org/wiki/GitCommitMessages#Including_external_references says to \"Put DocImpact on a line by itself. \"","commit_id":"206b288224b7b65e2dcd94fc42c72d6a1bd34721"}],"trove/common/cfg.py":[{"author":{"_account_id":8415,"name":"Denis M.","email":"lildee1991@gmail.com","username":"dmakogon"},"change_message_id":"cd2dce7b6051159232daeed0c135d61666f5bc2c","unresolved":false,"context_lines":[{"line_number":156,"context_line":"    cfg.IntOpt(\u0027http_delete_rate\u0027, default\u003d200),"},{"line_number":157,"context_line":"    cfg.IntOpt(\u0027http_put_rate\u0027, default\u003d200),"},{"line_number":158,"context_line":"    cfg.IntOpt(\u0027http_mgmt_post_rate\u0027, default\u003d200),"},{"line_number":159,"context_line":"    cfg.BoolOpt(\u0027hostname_require_valid_ip\u0027, default\u003dTrue,"},{"line_number":160,"context_line":"                help\u003d\"Require user hostnames to be valid IP addresses.\"),"},{"line_number":161,"context_line":"    cfg.BoolOpt(\u0027trove_security_groups_support\u0027, default\u003dTrue),"},{"line_number":162,"context_line":"    cfg.StrOpt(\u0027trove_security_group_name_prefix\u0027, default\u003d\u0027SecGroup\u0027),"}],"source_content_type":"text/x-python","patch_set":4,"id":"baada198_f1caea9e","line":159,"updated":"2014-07-24 15:06:52.000000000","message":"What does it change?","commit_id":"f0ce2c6489dee4cae63c4dcf5194b44674e7a036"},{"author":{"_account_id":2340,"name":"Ionut Artarisi","email":"iartarisi@suse.cz","username":"mapleoin"},"change_message_id":"f54590b9ff1524b2213826e1d3db2ee384b4af4f","unresolved":false,"context_lines":[{"line_number":156,"context_line":"    cfg.IntOpt(\u0027http_delete_rate\u0027, default\u003d200),"},{"line_number":157,"context_line":"    cfg.IntOpt(\u0027http_put_rate\u0027, default\u003d200),"},{"line_number":158,"context_line":"    cfg.IntOpt(\u0027http_mgmt_post_rate\u0027, default\u003d200),"},{"line_number":159,"context_line":"    cfg.BoolOpt(\u0027hostname_require_valid_ip\u0027, default\u003dTrue,"},{"line_number":160,"context_line":"                help\u003d\"Require user hostnames to be valid IP addresses.\"),"},{"line_number":161,"context_line":"    cfg.BoolOpt(\u0027trove_security_groups_support\u0027, default\u003dTrue),"},{"line_number":162,"context_line":"    cfg.StrOpt(\u0027trove_security_group_name_prefix\u0027, default\u003d\u0027SecGroup\u0027),"}],"source_content_type":"text/x-python","patch_set":4,"id":"baada198_31f542cb","line":159,"in_reply_to":"baada198_f1caea9e","updated":"2014-07-24 15:08:49.000000000","message":"I\u0027m changing the name since I want both ipv4 and ipv6 to be supported.","commit_id":"f0ce2c6489dee4cae63c4dcf5194b44674e7a036"},{"author":{"_account_id":5293,"name":"Nikhil","email":"SlickNik@gmail.com","username":"slicknik"},"change_message_id":"8747875ec38a689c197b382cbc762f395c527e69","unresolved":false,"context_lines":[{"line_number":157,"context_line":"    cfg.IntOpt(\u0027http_put_rate\u0027, default\u003d200),"},{"line_number":158,"context_line":"    cfg.IntOpt(\u0027http_mgmt_post_rate\u0027, default\u003d200),"},{"line_number":159,"context_line":"    cfg.BoolOpt(\u0027hostname_require_valid_ip\u0027, default\u003dTrue,"},{"line_number":160,"context_line":"                help\u003d\"Require user hostnames to be valid IP addresses.\"),"},{"line_number":161,"context_line":"    cfg.BoolOpt(\u0027trove_security_groups_support\u0027, default\u003dTrue),"},{"line_number":162,"context_line":"    cfg.StrOpt(\u0027trove_security_group_name_prefix\u0027, default\u003d\u0027SecGroup\u0027),"},{"line_number":163,"context_line":"    cfg.StrOpt(\u0027trove_security_group_rule_cidr\u0027, default\u003d\u00270.0.0.0/0\u0027),"}],"source_content_type":"text/x-python","patch_set":6,"id":"baada198_16452d43","line":160,"updated":"2014-08-12 08:38:45.000000000","message":"Can we specify a deprecated_name of \u0027hostname_require_ipv4\u0027 here so that we continue to use the old value if a new one is not defined? \n\nThat will automatically log a warning message in that case as well, IIRC.","commit_id":"206b288224b7b65e2dcd94fc42c72d6a1bd34721"},{"author":{"_account_id":2340,"name":"Ionut Artarisi","email":"iartarisi@suse.cz","username":"mapleoin"},"change_message_id":"0aa1d307c49fc90ec4c31c49b3897fdcce3b02d8","unresolved":false,"context_lines":[{"line_number":157,"context_line":"    cfg.IntOpt(\u0027http_put_rate\u0027, default\u003d200),"},{"line_number":158,"context_line":"    cfg.IntOpt(\u0027http_mgmt_post_rate\u0027, default\u003d200),"},{"line_number":159,"context_line":"    cfg.BoolOpt(\u0027hostname_require_valid_ip\u0027, default\u003dTrue,"},{"line_number":160,"context_line":"                help\u003d\"Require user hostnames to be valid IP addresses.\"),"},{"line_number":161,"context_line":"    cfg.BoolOpt(\u0027trove_security_groups_support\u0027, default\u003dTrue),"},{"line_number":162,"context_line":"    cfg.StrOpt(\u0027trove_security_group_name_prefix\u0027, default\u003d\u0027SecGroup\u0027),"},{"line_number":163,"context_line":"    cfg.StrOpt(\u0027trove_security_group_rule_cidr\u0027, default\u003d\u00270.0.0.0/0\u0027),"}],"source_content_type":"text/x-python","patch_set":6,"id":"baada198_3afc9d40","line":160,"in_reply_to":"baada198_16452d43","updated":"2014-08-13 09:26:27.000000000","message":"Done","commit_id":"206b288224b7b65e2dcd94fc42c72d6a1bd34721"}],"trove/guestagent/db/models.py":[{"author":{"_account_id":8415,"name":"Denis M.","email":"lildee1991@gmail.com","username":"dmakogon"},"change_message_id":"cd2dce7b6051159232daeed0c135d61666f5bc2c","unresolved":false,"context_lines":[{"line_number":381,"context_line":"        if CONF.hostname_require_valid_ip:"},{"line_number":382,"context_line":"            try:"},{"line_number":383,"context_line":"                # \u0027%\u0027 works as a MySQL wildcard, but it is not a valid"},{"line_number":384,"context_line":"                # part of an IPAddress"},{"line_number":385,"context_line":"                netaddr.IPAddress(value.replace(\u0027%\u0027, \u00271\u0027))"},{"line_number":386,"context_line":"            except (ValueError, netaddr.AddrFormatError):"},{"line_number":387,"context_line":"                return False"}],"source_content_type":"text/x-python","patch_set":4,"id":"baada198_d13c0695","line":384,"updated":"2014-07-24 15:06:52.000000000","message":"I can see what you\u0027re trying to address.","commit_id":"f0ce2c6489dee4cae63c4dcf5194b44674e7a036"},{"author":{"_account_id":10215,"name":"Peter Stachowski","email":"peter@tesora.com","username":"peterstac"},"change_message_id":"1074b68294d0405ada5f5be090052b1c96e7fb77","unresolved":false,"context_lines":[{"line_number":16,"context_line":"import re"},{"line_number":17,"context_line":"import string"},{"line_number":18,"context_line":""},{"line_number":19,"context_line":"import netaddr"},{"line_number":20,"context_line":""},{"line_number":21,"context_line":"from trove.common import cfg"},{"line_number":22,"context_line":""}],"source_content_type":"text/x-python","patch_set":6,"id":"baada198_aab918ed","line":19,"updated":"2014-08-06 21:43:43.000000000","message":"This should be in alphabetical order, without a line in between (i.e. just above \u0027import re\u0027)","commit_id":"206b288224b7b65e2dcd94fc42c72d6a1bd34721"},{"author":{"_account_id":2340,"name":"Ionut Artarisi","email":"iartarisi@suse.cz","username":"mapleoin"},"change_message_id":"0aa1d307c49fc90ec4c31c49b3897fdcce3b02d8","unresolved":false,"context_lines":[{"line_number":16,"context_line":"import re"},{"line_number":17,"context_line":"import string"},{"line_number":18,"context_line":""},{"line_number":19,"context_line":"import netaddr"},{"line_number":20,"context_line":""},{"line_number":21,"context_line":"from trove.common import cfg"},{"line_number":22,"context_line":""}],"source_content_type":"text/x-python","patch_set":6,"id":"baada198_7700ee03","line":19,"in_reply_to":"baada198_aab918ed","updated":"2014-08-13 09:26:27.000000000","message":"netaddr is a third-party library. These should be grouped separately from stdlib and local imports according to pep8: http://legacy.python.org/dev/peps/pep-0008/#imports","commit_id":"206b288224b7b65e2dcd94fc42c72d6a1bd34721"},{"author":{"_account_id":9664,"name":"amrith","email":"amrith.kumar@gmail.com","username":"amrith"},"change_message_id":"880d0bb8c19047f6a51a8e6919527030068f445b","unresolved":false,"context_lines":[{"line_number":382,"context_line":"            try:"},{"line_number":383,"context_line":"                # \u0027%\u0027 works as a MySQL wildcard, but it is not a valid"},{"line_number":384,"context_line":"                # part of an IPAddress"},{"line_number":385,"context_line":"                netaddr.IPAddress(value.replace(\u0027%\u0027, \u00271\u0027))"},{"line_number":386,"context_line":"            except (ValueError, netaddr.AddrFormatError):"},{"line_number":387,"context_line":"                return False"},{"line_number":388,"context_line":"            else:"}],"source_content_type":"text/x-python","patch_set":8,"id":"fa98f980_959fe24f","line":385,"updated":"2014-09-02 11:25:39.000000000","message":"netaddr.IPAddress() appears to have some shortcomings.\n\nFirst, it doesn\u0027t validate all address formats. For example, I tried to use netaddr.IPAddress() to validate the IP address scheme I use in my home network which uses the RFC 4291 style v4 bridging.\n\n2001.db8::FFFF:10.40.2.117\n\nThat is a valid ipv6 address based on rfc 4291/5952 and 6052 and quite often used in mapping v4 to v6 addresses. Yet IPAddress() hurls on this.\n\nSecond, and this may have been an issue in the old code as well. If you are looking to validate host names, you can\u0027t just validate the IP address.\n\n255.255.255.255 is a valid IP address but you can\u0027t configure it as a host IP address, which is what this function aims to do.","commit_id":"2c12fcfadc9184d53c8ae3f39ddb4cb40d8441c6"},{"author":{"_account_id":9664,"name":"amrith","email":"amrith.kumar@gmail.com","username":"amrith"},"change_message_id":"0fb6b48f1e71a1e28724c307483ed643507d49b0","unresolved":false,"context_lines":[{"line_number":382,"context_line":"            try:"},{"line_number":383,"context_line":"                # \u0027%\u0027 works as a MySQL wildcard, but it is not a valid"},{"line_number":384,"context_line":"                # part of an IPAddress"},{"line_number":385,"context_line":"                netaddr.IPAddress(value.replace(\u0027%\u0027, \u00271\u0027))"},{"line_number":386,"context_line":"            except (ValueError, netaddr.AddrFormatError):"},{"line_number":387,"context_line":"                return False"},{"line_number":388,"context_line":"            else:"}],"source_content_type":"text/x-python","patch_set":8,"id":"fa98f980_a6c4b75f","line":385,"in_reply_to":"fa98f980_8359655c","updated":"2014-09-02 14:07:43.000000000","message":"You are right, I see that address in my config page but when I look at the interface, it is as you say a \u0027:\u0027.\n\nWeird.","commit_id":"2c12fcfadc9184d53c8ae3f39ddb4cb40d8441c6"},{"author":{"_account_id":2340,"name":"Ionut Artarisi","email":"iartarisi@suse.cz","username":"mapleoin"},"change_message_id":"0d12d7b1e72580deff24f7878d0049e2fee15718","unresolved":false,"context_lines":[{"line_number":382,"context_line":"            try:"},{"line_number":383,"context_line":"                # \u0027%\u0027 works as a MySQL wildcard, but it is not a valid"},{"line_number":384,"context_line":"                # part of an IPAddress"},{"line_number":385,"context_line":"                netaddr.IPAddress(value.replace(\u0027%\u0027, \u00271\u0027))"},{"line_number":386,"context_line":"            except (ValueError, netaddr.AddrFormatError):"},{"line_number":387,"context_line":"                return False"},{"line_number":388,"context_line":"            else:"}],"source_content_type":"text/x-python","patch_set":8,"id":"fa98f980_8359655c","line":385,"in_reply_to":"fa98f980_959fe24f","updated":"2014-09-02 13:51:37.000000000","message":"To the first point: Are you sure you mean 2001.db8::FFFF:10.40.2.117 and not 2001:db8::FFFF:10.40.2.117 ?\n\nThe dot seems very weird to me and the latter works fine with netaddr.\n\nTo your second point, I think we\u0027re getting ahead of ourselves.","commit_id":"2c12fcfadc9184d53c8ae3f39ddb4cb40d8441c6"}]}
