)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":14826,"name":"Mark Goddard","email":"markgoddard86@gmail.com","username":"mgoddard"},"change_message_id":"be4e17c250657201afbbb5b7b3a55cd5eda19e43","unresolved":false,"context_lines":[{"line_number":53,"context_line":""},{"line_number":54,"context_line":"haproxy upgrade checks for slaves based on ipv6 addresses"},{"line_number":55,"context_line":""},{"line_number":56,"context_line":"TODO:"},{"line_number":57,"context_line":""},{"line_number":58,"context_line":"ovs-dpdk grabs ipv4 network address (w/ prefix len / submask)"},{"line_number":59,"context_line":"not supported, invalid by default because neutron_external has no address"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":69,"id":"3fa7e38b_5f6f1a27","line":56,"range":{"start_line":56,"start_character":0,"end_line":56,"end_character":5},"updated":"2019-10-15 17:05:40.000000000","message":"Still TODO?","commit_id":"2983873f2f89b05eac824fa48dbaab8944dbd321"},{"author":{"_account_id":30491,"name":"Radosław Piliszek","display_name":"Radek","email":"radek@piliszek.it","username":"yoctozepto","status":"self-employed techologist, collaborating mostly with 7bulls.com"},"change_message_id":"f3921cb618565bcb2282177bd8d967e836ed88e3","unresolved":false,"context_lines":[{"line_number":53,"context_line":""},{"line_number":54,"context_line":"haproxy upgrade checks for slaves based on ipv6 addresses"},{"line_number":55,"context_line":""},{"line_number":56,"context_line":"TODO:"},{"line_number":57,"context_line":""},{"line_number":58,"context_line":"ovs-dpdk grabs ipv4 network address (w/ prefix len / submask)"},{"line_number":59,"context_line":"not supported, invalid by default because neutron_external has no address"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":69,"id":"3fa7e38b_8038d2ed","line":56,"range":{"start_line":56,"start_character":0,"end_line":56,"end_character":5},"in_reply_to":"3fa7e38b_5f6f1a27","updated":"2019-10-15 19:03:14.000000000","message":"Yup, these are harder to deliver and not so critical. rp_filter a tentative TODO though.","commit_id":"2983873f2f89b05eac824fa48dbaab8944dbd321"},{"author":{"_account_id":14826,"name":"Mark Goddard","email":"markgoddard86@gmail.com","username":"mgoddard"},"change_message_id":"be4e17c250657201afbbb5b7b3a55cd5eda19e43","unresolved":false,"context_lines":[{"line_number":74,"context_line":""},{"line_number":75,"context_line":"RabbitMQ may fail to bind to IPv6 if hostname resolves also to IPv4."},{"line_number":76,"context_line":"IPv4 is preferred by default and may fail in the IPv6-only scenario."},{"line_number":77,"context_line":"This should be no problem in real life as IPv6-only is indeed IPv6-only."},{"line_number":78,"context_line":""},{"line_number":79,"context_line":"For reliable runs, at least Ansible 2.8 is required (2.8.5 confirmed"},{"line_number":80,"context_line":"to work well). Older Ansible versions are known to miss IPv6 addresses"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":69,"id":"3fa7e38b_3f4d7ec3","line":77,"range":{"start_line":77,"start_character":42,"end_line":77,"end_character":71},"updated":"2019-10-15 17:05:40.000000000","message":"we would never have both and want to use v6?","commit_id":"2983873f2f89b05eac824fa48dbaab8944dbd321"},{"author":{"_account_id":30491,"name":"Radosław Piliszek","display_name":"Radek","email":"radek@piliszek.it","username":"yoctozepto","status":"self-employed techologist, collaborating mostly with 7bulls.com"},"change_message_id":"f3921cb618565bcb2282177bd8d967e836ed88e3","unresolved":false,"context_lines":[{"line_number":74,"context_line":""},{"line_number":75,"context_line":"RabbitMQ may fail to bind to IPv6 if hostname resolves also to IPv4."},{"line_number":76,"context_line":"IPv4 is preferred by default and may fail in the IPv6-only scenario."},{"line_number":77,"context_line":"This should be no problem in real life as IPv6-only is indeed IPv6-only."},{"line_number":78,"context_line":""},{"line_number":79,"context_line":"For reliable runs, at least Ansible 2.8 is required (2.8.5 confirmed"},{"line_number":80,"context_line":"to work well). Older Ansible versions are known to miss IPv6 addresses"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":69,"id":"3fa7e38b_e01e666e","line":77,"range":{"start_line":77,"start_character":42,"end_line":77,"end_character":71},"in_reply_to":"3fa7e38b_3f4d7ec3","updated":"2019-10-15 19:03:14.000000000","message":"This regards DNS queries but yeah. This is due to old rabbitmq used in our images. Newer rabbitmq fixes that and we are deploying all the relevant config. I should probably rewrite this paragraph.","commit_id":"2983873f2f89b05eac824fa48dbaab8944dbd321"}],"ansible/filter_plugins/address.py":[{"author":{"_account_id":14826,"name":"Mark Goddard","email":"markgoddard86@gmail.com","username":"mgoddard"},"change_message_id":"be4e17c250657201afbbb5b7b3a55cd5eda19e43","unresolved":false,"context_lines":[{"line_number":15,"context_line":"# limitations under the License."},{"line_number":16,"context_line":""},{"line_number":17,"context_line":"from kolla_ansible.kolla_address import kolla_address"},{"line_number":18,"context_line":"from kolla_ansible.put_address_in_context import put_address_in_context"},{"line_number":19,"context_line":""},{"line_number":20,"context_line":""},{"line_number":21,"context_line":"class FilterModule(object):"}],"source_content_type":"text/x-python","patch_set":69,"id":"3fa7e38b_24301556","line":18,"range":{"start_line":18,"start_character":49,"end_line":18,"end_character":71},"updated":"2019-10-15 17:05:40.000000000","message":"I\u0027d have gone for format_address, but meh.","commit_id":"2983873f2f89b05eac824fa48dbaab8944dbd321"}],"ansible/filter_plugins/kolla_address.py":[{"author":{"_account_id":14826,"name":"Mark Goddard","email":"markgoddard86@gmail.com","username":"mgoddard"},"change_message_id":"14d264e33f6efa1c0b1167b8e72e5b4edb7023c9","unresolved":false,"context_lines":[{"line_number":1,"context_line":"# -*- coding: utf-8 -*-"},{"line_number":2,"context_line":"#"},{"line_number":3,"context_line":"# Copyright 2019 Radosław Piliszek (yoctozepto)"},{"line_number":4,"context_line":"#"}],"source_content_type":"text/x-python","patch_set":12,"id":"5faad753_a071910e","line":1,"updated":"2019-09-13 10:28:57.000000000","message":"Needs a unit test. Check out how I avoided a dependency on ansible in https://review.opendev.org/665922.","commit_id":"e50808d82c7cd41256243aaf40808b15a7efb3c0"},{"author":{"_account_id":14826,"name":"Mark Goddard","email":"markgoddard86@gmail.com","username":"mgoddard"},"change_message_id":"14d264e33f6efa1c0b1167b8e72e5b4edb7023c9","unresolved":false,"context_lines":[{"line_number":33,"context_line":""},{"line_number":34,"context_line":""},{"line_number":35,"context_line":"@contextfilter"},{"line_number":36,"context_line":"def kolla_address(context, network_name, hostname\u003dNone, addr_context\u003dNone):"},{"line_number":37,"context_line":"    \"\"\"returns IP address on the requested network"},{"line_number":38,"context_line":""},{"line_number":39,"context_line":"    The output is affected by \u0027\u003cnetwork_name\u003e_*\u0027 variables:"}],"source_content_type":"text/x-python","patch_set":12,"id":"5faad753_60e4f9e1","line":36,"range":{"start_line":36,"start_character":61,"end_line":36,"end_character":68},"updated":"2019-09-13 10:28:57.000000000","message":"format?","commit_id":"e50808d82c7cd41256243aaf40808b15a7efb3c0"},{"author":{"_account_id":14826,"name":"Mark Goddard","email":"markgoddard86@gmail.com","username":"mgoddard"},"change_message_id":"14d264e33f6efa1c0b1167b8e72e5b4edb7023c9","unresolved":false,"context_lines":[{"line_number":56,"context_line":"    # \u0027None\u0027 or value specified as default for \u0027get\u0027 method"},{"line_number":57,"context_line":"    # \u0027HostVars\u0027 shares this behavior"},{"line_number":58,"context_line":""},{"line_number":59,"context_line":"    if hostname is None:"},{"line_number":60,"context_line":"        hostname \u003d context.get(\u0027inventory_hostname\u0027)"},{"line_number":61,"context_line":"        if isinstance(hostname, Undefined):"},{"line_number":62,"context_line":"            raise MyError(\"\u0027inventory_hostname\u0027 variable is unavailable\")"},{"line_number":63,"context_line":""},{"line_number":64,"context_line":"    if addr_context is not None and addr_context not in [\u0027url\u0027, \u0027memcache\u0027]:"},{"line_number":65,"context_line":"        raise MyError(\"Unknown \u0027addr_context\u0027 given: %s\" % addr_context)"},{"line_number":66,"context_line":""},{"line_number":67,"context_line":"    hostvars \u003d context.get(\u0027hostvars\u0027)"},{"line_number":68,"context_line":"    if isinstance(hostvars, Undefined):"},{"line_number":69,"context_line":"        raise MyError(\"\u0027hostvars\u0027 variable is unavailable\")"},{"line_number":70,"context_line":""},{"line_number":71,"context_line":"    del context  # remove for sanity"},{"line_number":72,"context_line":""}],"source_content_type":"text/x-python","patch_set":12,"id":"5faad753_407bfdf3","line":69,"range":{"start_line":59,"start_character":0,"end_line":69,"end_character":59},"updated":"2019-09-13 10:28:57.000000000","message":"NOTE: here\u0027s how we do this in Kayobe: https://opendev.org/x/kayobe/src/branch/master/ansible/filter_plugins/networks.py#L20\n\nIt avoids accessing variables for the current host via hostvars[inventory_hostname]. I don\u0027t know if there\u0027s any benefit to that, but it can\u0027t hurt.","commit_id":"e50808d82c7cd41256243aaf40808b15a7efb3c0"},{"author":{"_account_id":14826,"name":"Mark Goddard","email":"markgoddard86@gmail.com","username":"mgoddard"},"change_message_id":"14d264e33f6efa1c0b1167b8e72e5b4edb7023c9","unresolved":false,"context_lines":[{"line_number":78,"context_line":""},{"line_number":79,"context_line":"    interface_name \u003d host.get(\u0027%s_interface\u0027 % network_name)"},{"line_number":80,"context_line":"    if interface_name is None:"},{"line_number":81,"context_line":"        raise MyError(\"Interface name undefined for network \u0027%s\u0027\" %"},{"line_number":82,"context_line":"                      network_name)"},{"line_number":83,"context_line":""},{"line_number":84,"context_line":"    af \u003d host.get(\u0027%s_af\u0027 % network_name)"}],"source_content_type":"text/x-python","patch_set":12,"id":"5faad753_a04af1a8","line":81,"updated":"2019-09-13 10:28:57.000000000","message":"Let\u0027s mention the variable name.","commit_id":"e50808d82c7cd41256243aaf40808b15a7efb3c0"},{"author":{"_account_id":14826,"name":"Mark Goddard","email":"markgoddard86@gmail.com","username":"mgoddard"},"change_message_id":"14d264e33f6efa1c0b1167b8e72e5b4edb7023c9","unresolved":false,"context_lines":[{"line_number":81,"context_line":"        raise MyError(\"Interface name undefined for network \u0027%s\u0027\" %"},{"line_number":82,"context_line":"                      network_name)"},{"line_number":83,"context_line":""},{"line_number":84,"context_line":"    af \u003d host.get(\u0027%s_af\u0027 % network_name)"},{"line_number":85,"context_line":"    if af is None:"},{"line_number":86,"context_line":"        raise MyError(\"AF undefined for network \u0027%s\u0027\" % network_name)"},{"line_number":87,"context_line":"    if af not in [\u0027ipv4\u0027, \u0027ipv6\u0027]:"}],"source_content_type":"text/x-python","patch_set":12,"id":"5faad753_a0df51d4","line":84,"updated":"2019-09-13 10:28:57.000000000","message":".lower()? Someone\u0027s bound to try IPv6","commit_id":"e50808d82c7cd41256243aaf40808b15a7efb3c0"},{"author":{"_account_id":14826,"name":"Mark Goddard","email":"markgoddard86@gmail.com","username":"mgoddard"},"change_message_id":"14d264e33f6efa1c0b1167b8e72e5b4edb7023c9","unresolved":false,"context_lines":[{"line_number":83,"context_line":""},{"line_number":84,"context_line":"    af \u003d host.get(\u0027%s_af\u0027 % network_name)"},{"line_number":85,"context_line":"    if af is None:"},{"line_number":86,"context_line":"        raise MyError(\"AF undefined for network \u0027%s\u0027\" % network_name)"},{"line_number":87,"context_line":"    if af not in [\u0027ipv4\u0027, \u0027ipv6\u0027]:"},{"line_number":88,"context_line":"        raise MyError(\"Unknown AF \u0027%s\u0027\" % af)"},{"line_number":89,"context_line":""}],"source_content_type":"text/x-python","patch_set":12,"id":"5faad753_005ae581","line":86,"range":{"start_line":86,"start_character":23,"end_line":86,"end_character":25},"updated":"2019-09-13 10:28:57.000000000","message":"Address family.","commit_id":"e50808d82c7cd41256243aaf40808b15a7efb3c0"},{"author":{"_account_id":14826,"name":"Mark Goddard","email":"markgoddard86@gmail.com","username":"mgoddard"},"change_message_id":"14d264e33f6efa1c0b1167b8e72e5b4edb7023c9","unresolved":false,"context_lines":[{"line_number":87,"context_line":"    if af not in [\u0027ipv4\u0027, \u0027ipv6\u0027]:"},{"line_number":88,"context_line":"        raise MyError(\"Unknown AF \u0027%s\u0027\" % af)"},{"line_number":89,"context_line":""},{"line_number":90,"context_line":"    interface \u003d host.get(\u0027ansible_%s\u0027 % interface_name)"},{"line_number":91,"context_line":"    if interface is None:"},{"line_number":92,"context_line":"        raise MyError(\"Unknown interface \u0027%s\u0027 on host \u0027%s\u0027\" %"},{"line_number":93,"context_line":"                      (interface_name, hostname))"}],"source_content_type":"text/x-python","patch_set":12,"id":"5faad753_c0dccde5","line":90,"range":{"start_line":90,"start_character":40,"end_line":90,"end_character":54},"updated":"2019-09-13 10:28:57.000000000","message":"Let\u0027s apply Ansible\u0027s formatting rules here:\n\n.replace(\u0027-\u0027, \u0027_\u0027)","commit_id":"e50808d82c7cd41256243aaf40808b15a7efb3c0"},{"author":{"_account_id":14826,"name":"Mark Goddard","email":"markgoddard86@gmail.com","username":"mgoddard"},"change_message_id":"14d264e33f6efa1c0b1167b8e72e5b4edb7023c9","unresolved":false,"context_lines":[{"line_number":89,"context_line":""},{"line_number":90,"context_line":"    interface \u003d host.get(\u0027ansible_%s\u0027 % interface_name)"},{"line_number":91,"context_line":"    if interface is None:"},{"line_number":92,"context_line":"        raise MyError(\"Unknown interface \u0027%s\u0027 on host \u0027%s\u0027\" %"},{"line_number":93,"context_line":"                      (interface_name, hostname))"},{"line_number":94,"context_line":""},{"line_number":95,"context_line":"    af_interface \u003d interface.get(af)"}],"source_content_type":"text/x-python","patch_set":12,"id":"5faad753_c005ad47","line":92,"updated":"2019-09-13 10:28:57.000000000","message":"Interface does not exist?","commit_id":"e50808d82c7cd41256243aaf40808b15a7efb3c0"},{"author":{"_account_id":14826,"name":"Mark Goddard","email":"markgoddard86@gmail.com","username":"mgoddard"},"change_message_id":"14d264e33f6efa1c0b1167b8e72e5b4edb7023c9","unresolved":false,"context_lines":[{"line_number":94,"context_line":""},{"line_number":95,"context_line":"    af_interface \u003d interface.get(af)"},{"line_number":96,"context_line":"    if af_interface is None:"},{"line_number":97,"context_line":"        raise MyError(\"AF \u0027%s\u0027 undefined on interface \u0027%s\u0027 for host: \u0027%s\u0027\" %"},{"line_number":98,"context_line":"                      (af, interface_name, hostname))"},{"line_number":99,"context_line":""},{"line_number":100,"context_line":"    if af \u003d\u003d \u0027ipv4\u0027:"}],"source_content_type":"text/x-python","patch_set":12,"id":"5faad753_a0f8b148","line":97,"range":{"start_line":97,"start_character":23,"end_line":97,"end_character":25},"updated":"2019-09-13 10:28:57.000000000","message":"Address family","commit_id":"e50808d82c7cd41256243aaf40808b15a7efb3c0"},{"author":{"_account_id":14826,"name":"Mark Goddard","email":"markgoddard86@gmail.com","username":"mgoddard"},"change_message_id":"14d264e33f6efa1c0b1167b8e72e5b4edb7023c9","unresolved":false,"context_lines":[{"line_number":112,"context_line":"            address \u003d None"},{"line_number":113,"context_line":""},{"line_number":114,"context_line":"    if address is None:"},{"line_number":115,"context_line":"        raise MyError(\"Address undefined on interface \u0027%s\u0027 \""},{"line_number":116,"context_line":"                      \"using AF \u0027%s\u0027 for host \u0027%s\u0027\" %"},{"line_number":117,"context_line":"                      (interface_name, af, hostname))"},{"line_number":118,"context_line":""},{"line_number":119,"context_line":"    if af \u003d\u003d \u0027ipv4\u0027:"}],"source_content_type":"text/x-python","patch_set":12,"id":"5faad753_809015ef","line":116,"range":{"start_line":115,"start_character":0,"end_line":116,"end_character":53},"updated":"2019-09-13 10:28:57.000000000","message":"Interface does not have an ${AF} address?","commit_id":"e50808d82c7cd41256243aaf40808b15a7efb3c0"},{"author":{"_account_id":14826,"name":"Mark Goddard","email":"markgoddard86@gmail.com","username":"mgoddard"},"change_message_id":"14d264e33f6efa1c0b1167b8e72e5b4edb7023c9","unresolved":false,"context_lines":[{"line_number":119,"context_line":"    if af \u003d\u003d \u0027ipv4\u0027:"},{"line_number":120,"context_line":"        return address"},{"line_number":121,"context_line":"    elif af \u003d\u003d \u0027ipv6\u0027:"},{"line_number":122,"context_line":"        if addr_context is None:"},{"line_number":123,"context_line":"            return address"},{"line_number":124,"context_line":"        elif addr_context \u003d\u003d \u0027url\u0027:"},{"line_number":125,"context_line":"            return \u0027[%s]\u0027 % address"},{"line_number":126,"context_line":"        elif addr_context \u003d\u003d \u0027memcache\u0027:"},{"line_number":127,"context_line":"            return \u0027inet6:[%s]\u0027 % address"}],"source_content_type":"text/x-python","patch_set":12,"id":"5faad753_00fe656a","line":127,"range":{"start_line":122,"start_character":0,"end_line":127,"end_character":41},"updated":"2019-09-13 10:28:57.000000000","message":"Another option would be two other filters which you chain to apply the correct format. Not saying we have to do that.","commit_id":"e50808d82c7cd41256243aaf40808b15a7efb3c0"},{"author":{"_account_id":30491,"name":"Radosław Piliszek","display_name":"Radek","email":"radek@piliszek.it","username":"yoctozepto","status":"self-employed techologist, collaborating mostly with 7bulls.com"},"change_message_id":"2f8151407a8403f8aa6d83422c5e1076bae7eb92","unresolved":false,"context_lines":[{"line_number":119,"context_line":"    if af \u003d\u003d \u0027ipv4\u0027:"},{"line_number":120,"context_line":"        return address"},{"line_number":121,"context_line":"    elif af \u003d\u003d \u0027ipv6\u0027:"},{"line_number":122,"context_line":"        if addr_context is None:"},{"line_number":123,"context_line":"            return address"},{"line_number":124,"context_line":"        elif addr_context \u003d\u003d \u0027url\u0027:"},{"line_number":125,"context_line":"            return \u0027[%s]\u0027 % address"},{"line_number":126,"context_line":"        elif addr_context \u003d\u003d \u0027memcache\u0027:"},{"line_number":127,"context_line":"            return \u0027inet6:[%s]\u0027 % address"}],"source_content_type":"text/x-python","patch_set":12,"id":"3fa7e38b_48460a7f","line":127,"range":{"start_line":122,"start_character":0,"end_line":127,"end_character":41},"in_reply_to":"3fa7e38b_73873863","updated":"2019-09-20 15:01:28.000000000","message":"Yeah, the need for such is mentioned in the commit message. The workaround was to use FQDN of course - this is more complicated as we cannot just go slapping [ ] around FQDN anyway. I think it is best if this filters keeps supporting AF-and-context-specific formatting and another one for just formatting - they could share some common code. Obviously nicer to put testable functions into dict.","commit_id":"e50808d82c7cd41256243aaf40808b15a7efb3c0"},{"author":{"_account_id":14826,"name":"Mark Goddard","email":"markgoddard86@gmail.com","username":"mgoddard"},"change_message_id":"022e3618af1a2e6cdf5424149e6e9bd190351a59","unresolved":false,"context_lines":[{"line_number":119,"context_line":"    if af \u003d\u003d \u0027ipv4\u0027:"},{"line_number":120,"context_line":"        return address"},{"line_number":121,"context_line":"    elif af \u003d\u003d \u0027ipv6\u0027:"},{"line_number":122,"context_line":"        if addr_context is None:"},{"line_number":123,"context_line":"            return address"},{"line_number":124,"context_line":"        elif addr_context \u003d\u003d \u0027url\u0027:"},{"line_number":125,"context_line":"            return \u0027[%s]\u0027 % address"},{"line_number":126,"context_line":"        elif addr_context \u003d\u003d \u0027memcache\u0027:"},{"line_number":127,"context_line":"            return \u0027inet6:[%s]\u0027 % address"}],"source_content_type":"text/x-python","patch_set":12,"id":"3fa7e38b_73873863","line":127,"range":{"start_line":122,"start_character":0,"end_line":127,"end_character":41},"in_reply_to":"5faad753_00fe656a","updated":"2019-09-20 13:39:44.000000000","message":"Here\u0027s one good reason to make it separate: https://github.com/BaptisteGerondeau/kolla-ansible/commit/c7bc49785b3ce41390b2ae881764a4b771ea77cf","commit_id":"e50808d82c7cd41256243aaf40808b15a7efb3c0"},{"author":{"_account_id":19316,"name":"Eduardo Gonzalez","email":"dabarren@gmail.com","username":"egonzalez90"},"change_message_id":"1e00a23da7cbf76fcc2171726cd7346b2466ef2c","unresolved":false,"context_lines":[{"line_number":13,"context_line":"# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied."},{"line_number":14,"context_line":"# See the License for the specific language governing permissions and"},{"line_number":15,"context_line":"# limitations under the License."},{"line_number":16,"context_line":""},{"line_number":17,"context_line":"from jinja2.filters import contextfilter"},{"line_number":18,"context_line":"from jinja2.runtime import Undefined"},{"line_number":19,"context_line":""}],"source_content_type":"text/x-python","patch_set":14,"id":"3fa7e38b_d13e08d9","line":16,"updated":"2019-09-23 11:56:56.000000000","message":"General question, have we though about creating host facts with instead of evaluating the var each time the plugin is called. will speed a lot deployment with cached facts.\nie:\n\ncalling hostvars[\u0027host1\u0027][\u0027kolla_api_address\u0027]","commit_id":"9d48403d00afa5521fb047c1b45b82d2074d6fa2"},{"author":{"_account_id":30491,"name":"Radosław Piliszek","display_name":"Radek","email":"radek@piliszek.it","username":"yoctozepto","status":"self-employed techologist, collaborating mostly with 7bulls.com"},"change_message_id":"f9108eee65c0b61d0cc56caf685e609e7cef7bdc","unresolved":false,"context_lines":[{"line_number":13,"context_line":"# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied."},{"line_number":14,"context_line":"# See the License for the specific language governing permissions and"},{"line_number":15,"context_line":"# limitations under the License."},{"line_number":16,"context_line":""},{"line_number":17,"context_line":"from jinja2.filters import contextfilter"},{"line_number":18,"context_line":"from jinja2.runtime import Undefined"},{"line_number":19,"context_line":""}],"source_content_type":"text/x-python","patch_set":14,"id":"3fa7e38b_dcbb7f6f","line":16,"in_reply_to":"3fa7e38b_d13e08d9","updated":"2019-09-23 12:14:36.000000000","message":"Precomputing sounds nice though I doubt this will be much of an impact. After kolla_address works, we can apply some regexp to use precomputed.","commit_id":"9d48403d00afa5521fb047c1b45b82d2074d6fa2"},{"author":{"_account_id":30491,"name":"Radosław Piliszek","display_name":"Radek","email":"radek@piliszek.it","username":"yoctozepto","status":"self-employed techologist, collaborating mostly with 7bulls.com"},"change_message_id":"378a1bd0c6a57732570ba6149810f2733bcf62b9","unresolved":false,"context_lines":[{"line_number":13,"context_line":"# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied."},{"line_number":14,"context_line":"# See the License for the specific language governing permissions and"},{"line_number":15,"context_line":"# limitations under the License."},{"line_number":16,"context_line":""},{"line_number":17,"context_line":"from jinja2.filters import contextfilter"},{"line_number":18,"context_line":"from jinja2.runtime import Undefined"},{"line_number":19,"context_line":""}],"source_content_type":"text/x-python","patch_set":14,"id":"3fa7e38b_c249558b","line":16,"in_reply_to":"3fa7e38b_dcbb7f6f","updated":"2019-09-23 16:06:27.000000000","message":"Also, we already have some precomputing and it has bitten us due to ansible bug which forces evaluation even of finally unused variables as soon as they are referenced.","commit_id":"9d48403d00afa5521fb047c1b45b82d2074d6fa2"},{"author":{"_account_id":19316,"name":"Eduardo Gonzalez","email":"dabarren@gmail.com","username":"egonzalez90"},"change_message_id":"1e00a23da7cbf76fcc2171726cd7346b2466ef2c","unresolved":false,"context_lines":[{"line_number":20,"context_line":"from ansible import errors"},{"line_number":21,"context_line":""},{"line_number":22,"context_line":""},{"line_number":23,"context_line":"MyError \u003d errors.AnsibleFilterError"},{"line_number":24,"context_line":""},{"line_number":25,"context_line":""},{"line_number":26,"context_line":"class FilterModule(object):"}],"source_content_type":"text/x-python","patch_set":14,"id":"3fa7e38b_31dbdc1b","line":23,"range":{"start_line":23,"start_character":0,"end_line":23,"end_character":7},"updated":"2019-09-23 11:56:56.000000000","message":"why this is used? cannot call the error directly?","commit_id":"9d48403d00afa5521fb047c1b45b82d2074d6fa2"},{"author":{"_account_id":30491,"name":"Radosław Piliszek","display_name":"Radek","email":"radek@piliszek.it","username":"yoctozepto","status":"self-employed techologist, collaborating mostly with 7bulls.com"},"change_message_id":"f9108eee65c0b61d0cc56caf685e609e7cef7bdc","unresolved":false,"context_lines":[{"line_number":20,"context_line":"from ansible import errors"},{"line_number":21,"context_line":""},{"line_number":22,"context_line":""},{"line_number":23,"context_line":"MyError \u003d errors.AnsibleFilterError"},{"line_number":24,"context_line":""},{"line_number":25,"context_line":""},{"line_number":26,"context_line":"class FilterModule(object):"}],"source_content_type":"text/x-python","patch_set":14,"id":"3fa7e38b_dc5fff6f","line":23,"range":{"start_line":23,"start_character":0,"end_line":23,"end_character":7},"in_reply_to":"3fa7e38b_31dbdc1b","updated":"2019-09-23 12:14:36.000000000","message":"Name aliasing, though it will be more important after refactoring for testing to pass (we don\u0027t install ansible with kolla-ansible).","commit_id":"9d48403d00afa5521fb047c1b45b82d2074d6fa2"},{"author":{"_account_id":19316,"name":"Eduardo Gonzalez","email":"dabarren@gmail.com","username":"egonzalez90"},"change_message_id":"1e00a23da7cbf76fcc2171726cd7346b2466ef2c","unresolved":false,"context_lines":[{"line_number":62,"context_line":"            raise MyError(\"\u0027inventory_hostname\u0027 variable is unavailable\")"},{"line_number":63,"context_line":""},{"line_number":64,"context_line":"    if addr_context is not None and addr_context not in [\u0027url\u0027, \u0027memcache\u0027]:"},{"line_number":65,"context_line":"        raise MyError(\"Unknown \u0027addr_context\u0027 given: %s\" % addr_context)"},{"line_number":66,"context_line":""},{"line_number":67,"context_line":"    hostvars \u003d context.get(\u0027hostvars\u0027)"},{"line_number":68,"context_line":"    if isinstance(hostvars, Undefined):"}],"source_content_type":"text/x-python","patch_set":14,"id":"3fa7e38b_3178bc28","line":65,"range":{"start_line":65,"start_character":53,"end_line":65,"end_character":71},"updated":"2019-09-23 11:56:56.000000000","message":"maybe a more py3 way (\"string {}\").format(var)","commit_id":"9d48403d00afa5521fb047c1b45b82d2074d6fa2"},{"author":{"_account_id":30491,"name":"Radosław Piliszek","display_name":"Radek","email":"radek@piliszek.it","username":"yoctozepto","status":"self-employed techologist, collaborating mostly with 7bulls.com"},"change_message_id":"f9108eee65c0b61d0cc56caf685e609e7cef7bdc","unresolved":false,"context_lines":[{"line_number":62,"context_line":"            raise MyError(\"\u0027inventory_hostname\u0027 variable is unavailable\")"},{"line_number":63,"context_line":""},{"line_number":64,"context_line":"    if addr_context is not None and addr_context not in [\u0027url\u0027, \u0027memcache\u0027]:"},{"line_number":65,"context_line":"        raise MyError(\"Unknown \u0027addr_context\u0027 given: %s\" % addr_context)"},{"line_number":66,"context_line":""},{"line_number":67,"context_line":"    hostvars \u003d context.get(\u0027hostvars\u0027)"},{"line_number":68,"context_line":"    if isinstance(hostvars, Undefined):"}],"source_content_type":"text/x-python","patch_set":14,"id":"3fa7e38b_9c23c705","line":65,"range":{"start_line":65,"start_character":53,"end_line":65,"end_character":71},"in_reply_to":"3fa7e38b_3178bc28","updated":"2019-09-23 12:14:36.000000000","message":"Yeah, I got from f-strings to prehistory there. :D","commit_id":"9d48403d00afa5521fb047c1b45b82d2074d6fa2"}],"ansible/group_vars/all.yml":[{"author":{"_account_id":14826,"name":"Mark Goddard","email":"markgoddard86@gmail.com","username":"mgoddard"},"change_message_id":"14d264e33f6efa1c0b1167b8e72e5b4edb7023c9","unresolved":false,"context_lines":[{"line_number":193,"context_line":"bifrost_network_interface: \"{{ network_interface }}\""},{"line_number":194,"context_line":"dns_interface: \"{{ network_interface }}\""},{"line_number":195,"context_line":""},{"line_number":196,"context_line":"network_af: \"ipv4\""},{"line_number":197,"context_line":"api_af: \"{{ network_af }}\""},{"line_number":198,"context_line":"storage_af: \"{{ network_af }}\""},{"line_number":199,"context_line":"cluster_af: \"{{ network_af }}\""}],"source_content_type":"text/x-yaml","patch_set":12,"id":"5faad753_00b0a5dc","line":196,"range":{"start_line":196,"start_character":8,"end_line":196,"end_character":10},"updated":"2019-09-13 10:28:57.000000000","message":"address_family might be easier for users to understand","commit_id":"e50808d82c7cd41256243aaf40808b15a7efb3c0"},{"author":{"_account_id":14826,"name":"Mark Goddard","email":"markgoddard86@gmail.com","username":"mgoddard"},"change_message_id":"be4e17c250657201afbbb5b7b3a55cd5eda19e43","unresolved":false,"context_lines":[{"line_number":62,"context_line":"  https_proxy: \"{{ container_https_proxy }}\""},{"line_number":63,"context_line":"  no_proxy: \"{{ container_no_proxy }},{{ api_interface_address }},{{ kolla_internal_vip_address }}\""},{"line_number":64,"context_line":""},{"line_number":65,"context_line":"# By default, Kolla API services bind to the network address assigned"},{"line_number":66,"context_line":"# to the api_interface.  Allow the bind address to be an override."},{"line_number":67,"context_line":"api_interface_address: \"{{ \u0027api\u0027 | kolla_address }}\""},{"line_number":68,"context_line":""},{"line_number":69,"context_line":"# This is used to get the ip corresponding to the storage_interface."},{"line_number":70,"context_line":"storage_interface_address: \"{{ \u0027storage\u0027 | kolla_address }}\""},{"line_number":71,"context_line":""},{"line_number":72,"context_line":"################"},{"line_number":73,"context_line":"# Chrony options"}],"source_content_type":"text/x-yaml","patch_set":69,"id":"3fa7e38b_a4696525","line":70,"range":{"start_line":65,"start_character":0,"end_line":70,"end_character":60},"updated":"2019-10-15 17:05:40.000000000","message":"We should probably put these all together. Another time.","commit_id":"2983873f2f89b05eac824fa48dbaab8944dbd321"}],"ansible/roles/ceph/templates/ceph-osd.json.j2":[{"author":{"_account_id":14826,"name":"Mark Goddard","email":"markgoddard86@gmail.com","username":"mgoddard"},"change_message_id":"f74b6bce0e1e4c7a2f04f17204af6cd0051151f5","unresolved":false,"context_lines":[{"line_number":1,"context_line":"{"},{"line_number":2,"context_line":"    \"command\": \"/usr/bin/ceph-osd -f {% if ceph_debug %}-d{% endif %} --public-addr {{ storage_interface_address }} --cluster-addr {{ \u0027cluster\u0027 | kolla_address }}\","},{"line_number":3,"context_line":"    \"config_files\": ["},{"line_number":4,"context_line":"        {"},{"line_number":5,"context_line":"            \"source\": \"{{ container_config_directory }}/ceph.conf\","}],"source_content_type":"text/x-jinja2","patch_set":70,"id":"3fa7e38b_dd60e8d1","line":2,"range":{"start_line":2,"start_character":87,"end_line":2,"end_character":112},"updated":"2019-10-16 10:23:59.000000000","message":"Odd that this one does not need url context. Because it has no port?","commit_id":"bc053c09c180b21151da9312386c0d2fdc1a2700"},{"author":{"_account_id":30491,"name":"Radosław Piliszek","display_name":"Radek","email":"radek@piliszek.it","username":"yoctozepto","status":"self-employed techologist, collaborating mostly with 7bulls.com"},"change_message_id":"aead4f75c78debd5f55713d5e7bc046446bfec44","unresolved":false,"context_lines":[{"line_number":1,"context_line":"{"},{"line_number":2,"context_line":"    \"command\": \"/usr/bin/ceph-osd -f {% if ceph_debug %}-d{% endif %} --public-addr {{ storage_interface_address }} --cluster-addr {{ \u0027cluster\u0027 | kolla_address }}\","},{"line_number":3,"context_line":"    \"config_files\": ["},{"line_number":4,"context_line":"        {"},{"line_number":5,"context_line":"            \"source\": \"{{ container_config_directory }}/ceph.conf\","}],"source_content_type":"text/x-jinja2","patch_set":70,"id":"3fa7e38b_e08e5b77","line":2,"range":{"start_line":2,"start_character":87,"end_line":2,"end_character":112},"in_reply_to":"3fa7e38b_dd60e8d1","updated":"2019-10-16 10:32:13.000000000","message":"Most likely.","commit_id":"bc053c09c180b21151da9312386c0d2fdc1a2700"}],"ansible/roles/prechecks/tasks/port_checks.yml":[{"author":{"_account_id":14826,"name":"Mark Goddard","email":"markgoddard86@gmail.com","username":"mgoddard"},"change_message_id":"f74b6bce0e1e4c7a2f04f17204af6cd0051151f5","unresolved":false,"context_lines":[{"line_number":7,"context_line":"  fail: \"msg\u003d\u0027Please check the api_interface settings - interface {{ api_interface }} is not active\u0027\""},{"line_number":8,"context_line":"  when: hostvars[inventory_hostname][\u0027ansible_\u0027 + api_interface][\u0027active\u0027] !\u003d True"},{"line_number":9,"context_line":""},{"line_number":10,"context_line":"# kolla_address handles relevant address check"},{"line_number":11,"context_line":"- name: Checking the api_interface ip address configuration"},{"line_number":12,"context_line":"  fail: \"msg\u003d\u0027Please check the api_interface settings - interface {{ api_interface }} ip address problem\u0027\""},{"line_number":13,"context_line":"  when: api_interface_address is not defined"}],"source_content_type":"text/x-yaml","patch_set":70,"id":"3fa7e38b_7d00d466","line":10,"updated":"2019-10-16 10:23:59.000000000","message":"It does, but prechecks are supposed to provide a friendly way to check. At what point will it fail if we rely on kolla_address? Also we\u0027re not actually using kolla_address here.","commit_id":"bc053c09c180b21151da9312386c0d2fdc1a2700"},{"author":{"_account_id":30491,"name":"Radosław Piliszek","display_name":"Radek","email":"radek@piliszek.it","username":"yoctozepto","status":"self-employed techologist, collaborating mostly with 7bulls.com"},"change_message_id":"25dde2b82f2d0c5ecfeefd41fb81024a99b2bbe5","unresolved":false,"context_lines":[{"line_number":7,"context_line":"  fail: \"msg\u003d\u0027Please check the api_interface settings - interface {{ api_interface }} is not active\u0027\""},{"line_number":8,"context_line":"  when: hostvars[inventory_hostname][\u0027ansible_\u0027 + api_interface][\u0027active\u0027] !\u003d True"},{"line_number":9,"context_line":""},{"line_number":10,"context_line":"# kolla_address handles relevant address check"},{"line_number":11,"context_line":"- name: Checking the api_interface ip address configuration"},{"line_number":12,"context_line":"  fail: \"msg\u003d\u0027Please check the api_interface settings - interface {{ api_interface }} ip address problem\u0027\""},{"line_number":13,"context_line":"  when: api_interface_address is not defined"}],"source_content_type":"text/x-yaml","patch_set":70,"id":"3fa7e38b_d1352ff8","line":10,"in_reply_to":"3fa7e38b_1615fd3c","updated":"2019-10-16 14:04:11.000000000","message":"Yes, the error below is never printed but the error message is pretty clear.","commit_id":"bc053c09c180b21151da9312386c0d2fdc1a2700"},{"author":{"_account_id":14826,"name":"Mark Goddard","email":"markgoddard86@gmail.com","username":"mgoddard"},"change_message_id":"bbb7a902ae8032f544ba7e3ad84ae8173efc2931","unresolved":false,"context_lines":[{"line_number":7,"context_line":"  fail: \"msg\u003d\u0027Please check the api_interface settings - interface {{ api_interface }} is not active\u0027\""},{"line_number":8,"context_line":"  when: hostvars[inventory_hostname][\u0027ansible_\u0027 + api_interface][\u0027active\u0027] !\u003d True"},{"line_number":9,"context_line":""},{"line_number":10,"context_line":"# kolla_address handles relevant address check"},{"line_number":11,"context_line":"- name: Checking the api_interface ip address configuration"},{"line_number":12,"context_line":"  fail: \"msg\u003d\u0027Please check the api_interface settings - interface {{ api_interface }} ip address problem\u0027\""},{"line_number":13,"context_line":"  when: api_interface_address is not defined"}],"source_content_type":"text/x-yaml","patch_set":70,"id":"3fa7e38b_1615fd3c","line":10,"in_reply_to":"3fa7e38b_20deb36c","updated":"2019-10-16 12:32:00.000000000","message":"True, but this one is pretty critical. Will the following task catch the case where there is no IP? Is the error given friendly?","commit_id":"bc053c09c180b21151da9312386c0d2fdc1a2700"},{"author":{"_account_id":30491,"name":"Radosław Piliszek","display_name":"Radek","email":"radek@piliszek.it","username":"yoctozepto","status":"self-employed techologist, collaborating mostly with 7bulls.com"},"change_message_id":"aead4f75c78debd5f55713d5e7bc046446bfec44","unresolved":false,"context_lines":[{"line_number":7,"context_line":"  fail: \"msg\u003d\u0027Please check the api_interface settings - interface {{ api_interface }} is not active\u0027\""},{"line_number":8,"context_line":"  when: hostvars[inventory_hostname][\u0027ansible_\u0027 + api_interface][\u0027active\u0027] !\u003d True"},{"line_number":9,"context_line":""},{"line_number":10,"context_line":"# kolla_address handles relevant address check"},{"line_number":11,"context_line":"- name: Checking the api_interface ip address configuration"},{"line_number":12,"context_line":"  fail: \"msg\u003d\u0027Please check the api_interface settings - interface {{ api_interface }} ip address problem\u0027\""},{"line_number":13,"context_line":"  when: api_interface_address is not defined"}],"source_content_type":"text/x-yaml","patch_set":70,"id":"3fa7e38b_20deb36c","line":10,"in_reply_to":"3fa7e38b_7d00d466","updated":"2019-10-16 10:32:13.000000000","message":"api_interface_address is based on kolla_address\n\nWill fail when evaluating.\n\nNote other addresses are not checked so thoroughly.","commit_id":"bc053c09c180b21151da9312386c0d2fdc1a2700"}],"ansible/roles/qdrouterd/tasks/precheck.yml":[{"author":{"_account_id":14826,"name":"Mark Goddard","email":"markgoddard86@gmail.com","username":"mgoddard"},"change_message_id":"f74b6bce0e1e4c7a2f04f17204af6cd0051151f5","unresolved":false,"context_lines":[{"line_number":17,"context_line":"    - container_facts[\u0027qdrouterd\u0027] is not defined"},{"line_number":18,"context_line":"    - inventory_hostname in groups[\u0027qdrouterd\u0027]"},{"line_number":19,"context_line":""},{"line_number":20,"context_line":"- name: Set NSS database for IPv4"},{"line_number":21,"context_line":"  set_fact:"},{"line_number":22,"context_line":"    nss_database: \u0027ahostsv4\u0027"},{"line_number":23,"context_line":"  when:"},{"line_number":24,"context_line":"    - api_address_family \u003d\u003d \u0027ipv4\u0027"},{"line_number":25,"context_line":""},{"line_number":26,"context_line":"- name: Set NSS database for IPv6"},{"line_number":27,"context_line":"  set_fact:"},{"line_number":28,"context_line":"    nss_database: \u0027ahostsv6\u0027"},{"line_number":29,"context_line":"  when:"},{"line_number":30,"context_line":"    - api_address_family \u003d\u003d \u0027ipv6\u0027"},{"line_number":31,"context_line":""},{"line_number":32,"context_line":"- name: Check if all qdrouterd hostnames are resolvable"},{"line_number":33,"context_line":"  command: \"getent {{ nss_database }} {{ hostvars[item][\u0027ansible_hostname\u0027] }}\""}],"source_content_type":"text/x-yaml","patch_set":70,"id":"3fa7e38b_1d57605a","line":30,"range":{"start_line":20,"start_character":0,"end_line":30,"end_character":34},"updated":"2019-10-16 10:23:59.000000000","message":"nit: a task var would be simpler and more lightweight:\n\nrabbitmq_nss_database: \"{{ \u0027ahostsv4\u0027 if api_address_family \u003d\u003d \u0027ipv4\u0027 else \u0027ahostsv6\u0027 }}\"\n\nCould be a follow up","commit_id":"bc053c09c180b21151da9312386c0d2fdc1a2700"},{"author":{"_account_id":30491,"name":"Radosław Piliszek","display_name":"Radek","email":"radek@piliszek.it","username":"yoctozepto","status":"self-employed techologist, collaborating mostly with 7bulls.com"},"change_message_id":"aead4f75c78debd5f55713d5e7bc046446bfec44","unresolved":false,"context_lines":[{"line_number":17,"context_line":"    - container_facts[\u0027qdrouterd\u0027] is not defined"},{"line_number":18,"context_line":"    - inventory_hostname in groups[\u0027qdrouterd\u0027]"},{"line_number":19,"context_line":""},{"line_number":20,"context_line":"- name: Set NSS database for IPv4"},{"line_number":21,"context_line":"  set_fact:"},{"line_number":22,"context_line":"    nss_database: \u0027ahostsv4\u0027"},{"line_number":23,"context_line":"  when:"},{"line_number":24,"context_line":"    - api_address_family \u003d\u003d \u0027ipv4\u0027"},{"line_number":25,"context_line":""},{"line_number":26,"context_line":"- name: Set NSS database for IPv6"},{"line_number":27,"context_line":"  set_fact:"},{"line_number":28,"context_line":"    nss_database: \u0027ahostsv6\u0027"},{"line_number":29,"context_line":"  when:"},{"line_number":30,"context_line":"    - api_address_family \u003d\u003d \u0027ipv6\u0027"},{"line_number":31,"context_line":""},{"line_number":32,"context_line":"- name: Check if all qdrouterd hostnames are resolvable"},{"line_number":33,"context_line":"  command: \"getent {{ nss_database }} {{ hostvars[item][\u0027ansible_hostname\u0027] }}\""}],"source_content_type":"text/x-yaml","patch_set":70,"id":"3fa7e38b_40d96f80","line":30,"range":{"start_line":20,"start_character":0,"end_line":30,"end_character":34},"in_reply_to":"3fa7e38b_1d57605a","updated":"2019-10-16 10:32:13.000000000","message":"I think it\u0027s the same in some other place. Will follow it up.","commit_id":"bc053c09c180b21151da9312386c0d2fdc1a2700"}],"kolla_ansible/kolla_address.py":[{"author":{"_account_id":14826,"name":"Mark Goddard","email":"markgoddard86@gmail.com","username":"mgoddard"},"change_message_id":"be4e17c250657201afbbb5b7b3a55cd5eda19e43","unresolved":false,"context_lines":[{"line_number":90,"context_line":""},{"line_number":91,"context_line":"    af_interface \u003d interface.get(address_family)"},{"line_number":92,"context_line":"    if af_interface is None:"},{"line_number":93,"context_line":"        raise FilterError(\"Adress family \u0027{address_family}\u0027 undefined \""},{"line_number":94,"context_line":"                          \"on interface \u0027{interface_name}\u0027 \""},{"line_number":95,"context_line":"                          \"for host: \u0027{hostname}\u0027\""},{"line_number":96,"context_line":"                          .format(address_family\u003daddress_family,"}],"source_content_type":"text/x-python","patch_set":69,"id":"3fa7e38b_ff292689","line":93,"range":{"start_line":93,"start_character":27,"end_line":93,"end_character":33},"updated":"2019-10-15 17:05:40.000000000","message":"nit: Address","commit_id":"2983873f2f89b05eac824fa48dbaab8944dbd321"}],"kolla_ansible/put_address_in_context.py":[{"author":{"_account_id":14826,"name":"Mark Goddard","email":"markgoddard86@gmail.com","username":"mgoddard"},"change_message_id":"be4e17c250657201afbbb5b7b3a55cd5eda19e43","unresolved":false,"context_lines":[{"line_number":31,"context_line":"        raise FilterError(\"Unknown context \u0027{context}\u0027\""},{"line_number":32,"context_line":"                          .format(context\u003dcontext))"},{"line_number":33,"context_line":""},{"line_number":34,"context_line":"    if \u0027:\u0027 not in address:"},{"line_number":35,"context_line":"        return address"},{"line_number":36,"context_line":""},{"line_number":37,"context_line":"    # must be IPv6 raw address"}],"source_content_type":"text/x-python","patch_set":69,"id":"3fa7e38b_1f6522b5","line":34,"range":{"start_line":34,"start_character":4,"end_line":34,"end_character":26},"updated":"2019-10-15 17:05:40.000000000","message":"host:port will bork this","commit_id":"2983873f2f89b05eac824fa48dbaab8944dbd321"},{"author":{"_account_id":30491,"name":"Radosław Piliszek","display_name":"Radek","email":"radek@piliszek.it","username":"yoctozepto","status":"self-employed techologist, collaborating mostly with 7bulls.com"},"change_message_id":"f3921cb618565bcb2282177bd8d967e836ed88e3","unresolved":false,"context_lines":[{"line_number":31,"context_line":"        raise FilterError(\"Unknown context \u0027{context}\u0027\""},{"line_number":32,"context_line":"                          .format(context\u003dcontext))"},{"line_number":33,"context_line":""},{"line_number":34,"context_line":"    if \u0027:\u0027 not in address:"},{"line_number":35,"context_line":"        return address"},{"line_number":36,"context_line":""},{"line_number":37,"context_line":"    # must be IPv6 raw address"}],"source_content_type":"text/x-python","patch_set":69,"id":"3fa7e38b_00a94222","line":34,"range":{"start_line":34,"start_character":4,"end_line":34,"end_character":26},"in_reply_to":"3fa7e38b_1f6522b5","updated":"2019-10-15 19:03:14.000000000","message":"Not to be used this way. This is for addresses.","commit_id":"2983873f2f89b05eac824fa48dbaab8944dbd321"}],"kolla_ansible/tests/unit/test_address_filters.py":[{"author":{"_account_id":14826,"name":"Mark Goddard","email":"markgoddard86@gmail.com","username":"mgoddard"},"change_message_id":"be4e17c250657201afbbb5b7b3a55cd5eda19e43","unresolved":false,"context_lines":[{"line_number":30,"context_line":"        addr \u003d \u0027192.168.1.1\u0027"},{"line_number":31,"context_line":"        self.assertEqual(put_address_in_context(addr, context),"},{"line_number":32,"context_line":"                         addr)"},{"line_number":33,"context_line":"        addr \u003d \u0027www.example.com\u0027"},{"line_number":34,"context_line":"        self.assertEqual(put_address_in_context(addr, context),"},{"line_number":35,"context_line":"                         addr)"},{"line_number":36,"context_line":"        addr \u003d \u0027fd::\u0027"}],"source_content_type":"text/x-python","patch_set":69,"id":"3fa7e38b_bf572eca","line":33,"updated":"2019-10-15 17:05:40.000000000","message":"can you add a host:port test?","commit_id":"2983873f2f89b05eac824fa48dbaab8944dbd321"},{"author":{"_account_id":30491,"name":"Radosław Piliszek","display_name":"Radek","email":"radek@piliszek.it","username":"yoctozepto","status":"self-employed techologist, collaborating mostly with 7bulls.com"},"change_message_id":"f3921cb618565bcb2282177bd8d967e836ed88e3","unresolved":false,"context_lines":[{"line_number":30,"context_line":"        addr \u003d \u0027192.168.1.1\u0027"},{"line_number":31,"context_line":"        self.assertEqual(put_address_in_context(addr, context),"},{"line_number":32,"context_line":"                         addr)"},{"line_number":33,"context_line":"        addr \u003d \u0027www.example.com\u0027"},{"line_number":34,"context_line":"        self.assertEqual(put_address_in_context(addr, context),"},{"line_number":35,"context_line":"                         addr)"},{"line_number":36,"context_line":"        addr \u003d \u0027fd::\u0027"}],"source_content_type":"text/x-python","patch_set":69,"id":"3fa7e38b_e0674624","line":33,"in_reply_to":"3fa7e38b_bf572eca","updated":"2019-10-15 19:03:14.000000000","message":"No :-)","commit_id":"2983873f2f89b05eac824fa48dbaab8944dbd321"},{"author":{"_account_id":14826,"name":"Mark Goddard","email":"markgoddard86@gmail.com","username":"mgoddard"},"change_message_id":"be4e17c250657201afbbb5b7b3a55cd5eda19e43","unresolved":false,"context_lines":[{"line_number":42,"context_line":"        addr \u003d \u0027192.168.1.1\u0027"},{"line_number":43,"context_line":"        self.assertEqual(put_address_in_context(addr, context),"},{"line_number":44,"context_line":"                         addr)"},{"line_number":45,"context_line":"        addr \u003d \u0027www.example.com\u0027"},{"line_number":46,"context_line":"        self.assertEqual(put_address_in_context(addr, context),"},{"line_number":47,"context_line":"                         addr)"},{"line_number":48,"context_line":"        addr \u003d \u0027fd::\u0027"}],"source_content_type":"text/x-python","patch_set":69,"id":"3fa7e38b_9f703274","line":45,"updated":"2019-10-15 17:05:40.000000000","message":"and here","commit_id":"2983873f2f89b05eac824fa48dbaab8944dbd321"},{"author":{"_account_id":30491,"name":"Radosław Piliszek","display_name":"Radek","email":"radek@piliszek.it","username":"yoctozepto","status":"self-employed techologist, collaborating mostly with 7bulls.com"},"change_message_id":"f3921cb618565bcb2282177bd8d967e836ed88e3","unresolved":false,"context_lines":[{"line_number":42,"context_line":"        addr \u003d \u0027192.168.1.1\u0027"},{"line_number":43,"context_line":"        self.assertEqual(put_address_in_context(addr, context),"},{"line_number":44,"context_line":"                         addr)"},{"line_number":45,"context_line":"        addr \u003d \u0027www.example.com\u0027"},{"line_number":46,"context_line":"        self.assertEqual(put_address_in_context(addr, context),"},{"line_number":47,"context_line":"                         addr)"},{"line_number":48,"context_line":"        addr \u003d \u0027fd::\u0027"}],"source_content_type":"text/x-python","patch_set":69,"id":"3fa7e38b_806a12ea","line":45,"in_reply_to":"3fa7e38b_9f703274","updated":"2019-10-15 19:03:14.000000000","message":"No :-)","commit_id":"2983873f2f89b05eac824fa48dbaab8944dbd321"},{"author":{"_account_id":14826,"name":"Mark Goddard","email":"markgoddard86@gmail.com","username":"mgoddard"},"change_message_id":"be4e17c250657201afbbb5b7b3a55cd5eda19e43","unresolved":false,"context_lines":[{"line_number":63,"context_line":"        return self.env.context_class("},{"line_number":64,"context_line":"            self.env, parent\u003dparent, name\u003d\u0027dummy\u0027, blocks\u003d{})"},{"line_number":65,"context_line":""},{"line_number":66,"context_line":"    def test_missing_config(self):"},{"line_number":67,"context_line":"        context \u003d self._make_context({"},{"line_number":68,"context_line":"            \u0027inventory_hostname\u0027: \u0027primary\u0027,"},{"line_number":69,"context_line":"            \u0027hostvars\u0027: {"}],"source_content_type":"text/x-python","patch_set":69,"id":"3fa7e38b_5f663abd","line":66,"updated":"2019-10-15 17:05:40.000000000","message":"Another with missing inventory_hostname?","commit_id":"2983873f2f89b05eac824fa48dbaab8944dbd321"},{"author":{"_account_id":30491,"name":"Radosław Piliszek","display_name":"Radek","email":"radek@piliszek.it","username":"yoctozepto","status":"self-employed techologist, collaborating mostly with 7bulls.com"},"change_message_id":"f3921cb618565bcb2282177bd8d967e836ed88e3","unresolved":false,"context_lines":[{"line_number":63,"context_line":"        return self.env.context_class("},{"line_number":64,"context_line":"            self.env, parent\u003dparent, name\u003d\u0027dummy\u0027, blocks\u003d{})"},{"line_number":65,"context_line":""},{"line_number":66,"context_line":"    def test_missing_config(self):"},{"line_number":67,"context_line":"        context \u003d self._make_context({"},{"line_number":68,"context_line":"            \u0027inventory_hostname\u0027: \u0027primary\u0027,"},{"line_number":69,"context_line":"            \u0027hostvars\u0027: {"}],"source_content_type":"text/x-python","patch_set":69,"id":"3fa7e38b_607356e8","line":66,"in_reply_to":"3fa7e38b_5f663abd","updated":"2019-10-15 19:03:14.000000000","message":"OK, though it\u0027s weird","commit_id":"2983873f2f89b05eac824fa48dbaab8944dbd321"},{"author":{"_account_id":14826,"name":"Mark Goddard","email":"markgoddard86@gmail.com","username":"mgoddard"},"change_message_id":"be4e17c250657201afbbb5b7b3a55cd5eda19e43","unresolved":false,"context_lines":[{"line_number":101,"context_line":"                    \u0027api_interface\u0027: \u0027fake-interface\u0027,"},{"line_number":102,"context_line":"                    \u0027ansible_fake_interface\u0027: {"},{"line_number":103,"context_line":"                        \u0027ipv6\u0027: [{"},{"line_number":104,"context_line":"                            \u0027address\u0027: addr,"},{"line_number":105,"context_line":"                            \u0027scope\u0027: \u0027global\u0027,"},{"line_number":106,"context_line":"                            \u0027prefix\u0027: 64,"},{"line_number":107,"context_line":"                        }],"},{"line_number":108,"context_line":"                    },"},{"line_number":109,"context_line":"                },"}],"source_content_type":"text/x-python","patch_set":69,"id":"3fa7e38b_9ff592cd","line":106,"range":{"start_line":104,"start_character":0,"end_line":106,"end_character":41},"updated":"2019-10-15 17:05:40.000000000","message":"maybe add a test with a non-global address, and a mix of global and non-global","commit_id":"2983873f2f89b05eac824fa48dbaab8944dbd321"},{"author":{"_account_id":30491,"name":"Radosław Piliszek","display_name":"Radek","email":"radek@piliszek.it","username":"yoctozepto","status":"self-employed techologist, collaborating mostly with 7bulls.com"},"change_message_id":"f3921cb618565bcb2282177bd8d967e836ed88e3","unresolved":false,"context_lines":[{"line_number":101,"context_line":"                    \u0027api_interface\u0027: \u0027fake-interface\u0027,"},{"line_number":102,"context_line":"                    \u0027ansible_fake_interface\u0027: {"},{"line_number":103,"context_line":"                        \u0027ipv6\u0027: [{"},{"line_number":104,"context_line":"                            \u0027address\u0027: addr,"},{"line_number":105,"context_line":"                            \u0027scope\u0027: \u0027global\u0027,"},{"line_number":106,"context_line":"                            \u0027prefix\u0027: 64,"},{"line_number":107,"context_line":"                        }],"},{"line_number":108,"context_line":"                    },"},{"line_number":109,"context_line":"                },"}],"source_content_type":"text/x-python","patch_set":69,"id":"3fa7e38b_007e22ae","line":106,"range":{"start_line":104,"start_character":0,"end_line":106,"end_character":41},"in_reply_to":"3fa7e38b_9ff592cd","updated":"2019-10-15 19:03:14.000000000","message":"good idea!","commit_id":"2983873f2f89b05eac824fa48dbaab8944dbd321"}],"tests/check-logs.sh":[{"author":{"_account_id":14826,"name":"Mark Goddard","email":"markgoddard86@gmail.com","username":"mgoddard"},"change_message_id":"be4e17c250657201afbbb5b7b3a55cd5eda19e43","unresolved":false,"context_lines":[{"line_number":19,"context_line":"any_critical\u003d0"},{"line_number":20,"context_line":"for level in CRITICAL ERROR WARNING; do"},{"line_number":21,"context_line":"    all_file\u003d/tmp/logs/kolla/all-${level}.log"},{"line_number":22,"context_line":"    # clear file to avoid collecting duplicates"},{"line_number":23,"context_line":"    echo -n \u003e $all_file"},{"line_number":24,"context_line":"    any_matched\u003d0"},{"line_number":25,"context_line":"    echo \"Checking for $level log messages\""}],"source_content_type":"text/x-sh","patch_set":69,"id":"3fa7e38b_1fa682c2","line":22,"updated":"2019-10-15 17:05:40.000000000","message":"Seems a little unrelated.","commit_id":"2983873f2f89b05eac824fa48dbaab8944dbd321"},{"author":{"_account_id":30491,"name":"Radosław Piliszek","display_name":"Radek","email":"radek@piliszek.it","username":"yoctozepto","status":"self-employed techologist, collaborating mostly with 7bulls.com"},"change_message_id":"f3921cb618565bcb2282177bd8d967e836ed88e3","unresolved":false,"context_lines":[{"line_number":19,"context_line":"any_critical\u003d0"},{"line_number":20,"context_line":"for level in CRITICAL ERROR WARNING; do"},{"line_number":21,"context_line":"    all_file\u003d/tmp/logs/kolla/all-${level}.log"},{"line_number":22,"context_line":"    # clear file to avoid collecting duplicates"},{"line_number":23,"context_line":"    echo -n \u003e $all_file"},{"line_number":24,"context_line":"    any_matched\u003d0"},{"line_number":25,"context_line":"    echo \"Checking for $level log messages\""}],"source_content_type":"text/x-sh","patch_set":69,"id":"3fa7e38b_40617a04","line":22,"in_reply_to":"3fa7e38b_1fa682c2","updated":"2019-10-15 19:03:14.000000000","message":"indeed","commit_id":"2983873f2f89b05eac824fa48dbaab8944dbd321"},{"author":{"_account_id":14826,"name":"Mark Goddard","email":"markgoddard86@gmail.com","username":"mgoddard"},"change_message_id":"be4e17c250657201afbbb5b7b3a55cd5eda19e43","unresolved":false,"context_lines":[{"line_number":41,"context_line":"    fi"},{"line_number":42,"context_line":"done"},{"line_number":43,"context_line":""},{"line_number":44,"context_line":"if [[ \"x$KOLLA_POST\" \u003d\u003d \"x\" \u0026\u0026 $any_critical -eq 1 ]]; then"},{"line_number":45,"context_line":"    echo \"Found critical log messages - failing job.\""},{"line_number":46,"context_line":"    exit 1"},{"line_number":47,"context_line":"fi"}],"source_content_type":"text/x-sh","patch_set":69,"id":"3fa7e38b_1f8f622a","line":44,"range":{"start_line":44,"start_character":9,"end_line":44,"end_character":19},"updated":"2019-10-15 17:05:40.000000000","message":"This is to avoid failing prior to the upgrade? Also unrelated","commit_id":"2983873f2f89b05eac824fa48dbaab8944dbd321"},{"author":{"_account_id":30491,"name":"Radosław Piliszek","display_name":"Radek","email":"radek@piliszek.it","username":"yoctozepto","status":"self-employed techologist, collaborating mostly with 7bulls.com"},"change_message_id":"f3921cb618565bcb2282177bd8d967e836ed88e3","unresolved":false,"context_lines":[{"line_number":41,"context_line":"    fi"},{"line_number":42,"context_line":"done"},{"line_number":43,"context_line":""},{"line_number":44,"context_line":"if [[ \"x$KOLLA_POST\" \u003d\u003d \"x\" \u0026\u0026 $any_critical -eq 1 ]]; then"},{"line_number":45,"context_line":"    echo \"Found critical log messages - failing job.\""},{"line_number":46,"context_line":"    exit 1"},{"line_number":47,"context_line":"fi"}],"source_content_type":"text/x-sh","patch_set":69,"id":"3fa7e38b_605cb64a","line":44,"range":{"start_line":44,"start_character":9,"end_line":44,"end_character":19},"in_reply_to":"3fa7e38b_1f8f622a","updated":"2019-10-15 19:03:14.000000000","message":"mhm","commit_id":"2983873f2f89b05eac824fa48dbaab8944dbd321"}],"tools/validate-all-file.py":[{"author":{"_account_id":14826,"name":"Mark Goddard","email":"markgoddard86@gmail.com","username":"mgoddard"},"change_message_id":"be4e17c250657201afbbb5b7b3a55cd5eda19e43","unresolved":false,"context_lines":[{"line_number":99,"context_line":""},{"line_number":100,"context_line":"        if network_name not in KOLLA_NETWORKS:"},{"line_number":101,"context_line":"            raise ValueError(\"{network_name} not in KOLLA_NETWORKS\""},{"line_number":102,"context_line":"                             .format(network_name\u003dnetwork_name))"},{"line_number":103,"context_line":""},{"line_number":104,"context_line":"        return \"127.0.0.1\""},{"line_number":105,"context_line":""}],"source_content_type":"text/x-python","patch_set":69,"id":"3fa7e38b_df6d4a03","line":102,"updated":"2019-10-15 17:05:40.000000000","message":"nice idea","commit_id":"2983873f2f89b05eac824fa48dbaab8944dbd321"},{"author":{"_account_id":30491,"name":"Radosław Piliszek","display_name":"Radek","email":"radek@piliszek.it","username":"yoctozepto","status":"self-employed techologist, collaborating mostly with 7bulls.com"},"change_message_id":"f3921cb618565bcb2282177bd8d967e836ed88e3","unresolved":false,"context_lines":[{"line_number":99,"context_line":""},{"line_number":100,"context_line":"        if network_name not in KOLLA_NETWORKS:"},{"line_number":101,"context_line":"            raise ValueError(\"{network_name} not in KOLLA_NETWORKS\""},{"line_number":102,"context_line":"                             .format(network_name\u003dnetwork_name))"},{"line_number":103,"context_line":""},{"line_number":104,"context_line":"        return \"127.0.0.1\""},{"line_number":105,"context_line":""}],"source_content_type":"text/x-python","patch_set":69,"id":"3fa7e38b_8043f26b","line":102,"in_reply_to":"3fa7e38b_df6d4a03","updated":"2019-10-15 19:03:14.000000000","message":"thanks - it\u0027s a bit limited though as loops are nullified by mocking code","commit_id":"2983873f2f89b05eac824fa48dbaab8944dbd321"}],"zuul.d/base.yaml":[{"author":{"_account_id":14826,"name":"Mark Goddard","email":"markgoddard86@gmail.com","username":"mgoddard"},"change_message_id":"be4e17c250657201afbbb5b7b3a55cd5eda19e43","unresolved":false,"context_lines":[{"line_number":4,"context_line":"    pre-run: tests/pre.yml"},{"line_number":5,"context_line":"    run: tests/run.yml"},{"line_number":6,"context_line":"    post-run: tests/post.yml"},{"line_number":7,"context_line":"    attempts: 5"},{"line_number":8,"context_line":"    timeout: 7200"},{"line_number":9,"context_line":"    required-projects:"},{"line_number":10,"context_line":"      - openstack/kolla-ansible"}],"source_content_type":"text/x-yaml","patch_set":69,"id":"3fa7e38b_ff64c623","line":7,"range":{"start_line":7,"start_character":14,"end_line":7,"end_character":15},"updated":"2019-10-15 17:05:40.000000000","message":"Seems like a good move. Good you extract into a separate change?","commit_id":"2983873f2f89b05eac824fa48dbaab8944dbd321"},{"author":{"_account_id":30491,"name":"Radosław Piliszek","display_name":"Radek","email":"radek@piliszek.it","username":"yoctozepto","status":"self-employed techologist, collaborating mostly with 7bulls.com"},"change_message_id":"f3921cb618565bcb2282177bd8d967e836ed88e3","unresolved":false,"context_lines":[{"line_number":4,"context_line":"    pre-run: tests/pre.yml"},{"line_number":5,"context_line":"    run: tests/run.yml"},{"line_number":6,"context_line":"    post-run: tests/post.yml"},{"line_number":7,"context_line":"    attempts: 5"},{"line_number":8,"context_line":"    timeout: 7200"},{"line_number":9,"context_line":"    required-projects:"},{"line_number":10,"context_line":"      - openstack/kolla-ansible"}],"source_content_type":"text/x-yaml","patch_set":69,"id":"3fa7e38b_a0462e7a","line":7,"range":{"start_line":7,"start_character":14,"end_line":7,"end_character":15},"in_reply_to":"3fa7e38b_ff64c623","updated":"2019-10-15 19:03:14.000000000","message":"sure","commit_id":"2983873f2f89b05eac824fa48dbaab8944dbd321"}],"zuul.d/project.yaml":[{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"3b4ca641afc70703138f95e4604cb5721e140d36","unresolved":false,"context_lines":[{"line_number":1,"context_line":"---"},{"line_number":2,"context_line":"- project:"},{"line_number":3,"context_line":"    templates:"},{"line_number":4,"context_line":"      # - check-requirements"},{"line_number":5,"context_line":"      # - deploy-guide-jobs"},{"line_number":6,"context_line":"      # - openstack-cover-jobs"},{"line_number":7,"context_line":"      # - openstack-lower-constraints-jobs"},{"line_number":8,"context_line":"      # - openstack-python-jobs"},{"line_number":9,"context_line":"      # - openstack-python3-train-jobs"},{"line_number":10,"context_line":"      # - publish-openstack-docs-pti"},{"line_number":11,"context_line":"      # - release-notes-jobs-python3"},{"line_number":12,"context_line":"      # - periodic-stable-jobs"},{"line_number":13,"context_line":"    check:"},{"line_number":14,"context_line":"      jobs:"},{"line_number":15,"context_line":"        # FIXME(yoctozepto): the ipv4 jobs are fine, better not overload CI when WIP"},{"line_number":16,"context_line":"        #  kolla-ansible-centos-source"},{"line_number":17,"context_line":"        #  kolla-ansible-ubuntu-source"},{"line_number":18,"context_line":"        - kolla-ansible-centos-source-ipv6"},{"line_number":19,"context_line":"        - kolla-ansible-ubuntu-source-ipv6"},{"line_number":20,"context_line":"        # - kolla-ansible-ubuntu-source-ceph"},{"line_number":21,"context_line":"        # - kolla-ansible-centos-source-ceph"},{"line_number":22,"context_line":"        - kolla-ansible-ubuntu-source-ceph-ipv6"},{"line_number":23,"context_line":"        - kolla-ansible-centos-source-ceph-ipv6"},{"line_number":24,"context_line":"        # - kolla-ansible-ubuntu-source-cinder-lvm:"},{"line_number":25,"context_line":"        #     files: ^ansible\\/roles\\/(cinder|iscsi)\\/.*"},{"line_number":26,"context_line":"        # - kolla-ansible-centos-source-cinder-lvm:"},{"line_number":27,"context_line":"        #     files: ^ansible\\/roles\\/(cinder|iscsi)\\/.*"},{"line_number":28,"context_line":"        # - kolla-ansible-bifrost-centos-source:"},{"line_number":29,"context_line":"        #     files: ^ansible\\/roles\\/bifrost\\/.*"},{"line_number":30,"context_line":"        # - kolla-ansible-centos-source-zun"},{"line_number":31,"context_line":"        # - kolla-ansible-ubuntu-source-zun"},{"line_number":32,"context_line":"        # - kolla-ansible-centos-source-scenario-nfv:"},{"line_number":33,"context_line":"        #     files:"},{"line_number":34,"context_line":"        #       - ^ansible/roles/(barbican|heat|mistral|redis|tacker)/"},{"line_number":35,"context_line":"        #       - ^tests/test-scenario-nfv.sh"},{"line_number":36,"context_line":"        # - kolla-ansible-ubuntu-source-masakari:"},{"line_number":37,"context_line":"        #     files:"},{"line_number":38,"context_line":"        #       - ^ansible/roles/masakari/"},{"line_number":39,"context_line":"        #       - ^tests/test-masakari.sh"},{"line_number":40,"context_line":"        # - kolla-ansible-centos-source-masakari:"},{"line_number":41,"context_line":"        #     files:"},{"line_number":42,"context_line":"        #       - ^ansible/roles/masakari/"},{"line_number":43,"context_line":"        #       - ^tests/test-masakari.sh"},{"line_number":44,"context_line":"        # - kolla-ansible-centos-source-ironic"},{"line_number":45,"context_line":"        # - kolla-ansible-centos-binary-ironic"},{"line_number":46,"context_line":"        # - kolla-ansible-ubuntu-source-ironic"},{"line_number":47,"context_line":"        # - kolla-ansible-centos-source-upgrade"},{"line_number":48,"context_line":"        # - kolla-ansible-ubuntu-source-upgrade"},{"line_number":49,"context_line":"        # - kolla-ansible-centos-source-upgrade-ceph"},{"line_number":50,"context_line":"        # - kolla-ansible-ubuntu-source-upgrade-ceph"},{"line_number":51,"context_line":"        # - kolla-ansible-centos-binary"},{"line_number":52,"context_line":"        # - kolla-ansible-ubuntu-binary"},{"line_number":53,"context_line":"    gate:"},{"line_number":54,"context_line":"      queue: kolla"},{"line_number":55,"context_line":"      jobs:"},{"line_number":56,"context_line":"        - kolla-ansible-centos-source"},{"line_number":57,"context_line":"        - kolla-ansible-ubuntu-source"},{"line_number":58,"context_line":"        - kolla-ansible-centos-source-upgrade"},{"line_number":59,"context_line":"        - kolla-ansible-ubuntu-source-upgrade"},{"line_number":60,"context_line":"    periodic:"},{"line_number":61,"context_line":"      jobs:"},{"line_number":62,"context_line":"        - kolla-ansible-bifrost-centos-source"},{"line_number":63,"context_line":"        - kolla-ansible-centos-source-zun"},{"line_number":64,"context_line":"        - kolla-ansible-ubuntu-source-zun"},{"line_number":65,"context_line":"        - kolla-ansible-ubuntu-source-masakari"},{"line_number":66,"context_line":"        - kolla-ansible-centos-source-masakari"},{"line_number":67,"context_line":"        - kolla-ansible-centos-source-scenario-nfv"},{"line_number":68,"context_line":"        - kolla-ansible-ubuntu-source-cinder-lvm"},{"line_number":69,"context_line":"        - kolla-ansible-centos-source-cinder-lvm"},{"line_number":70,"context_line":"        - kolla-ansible-centos-source-ironic"},{"line_number":71,"context_line":"        - kolla-ansible-centos-binary-ironic"},{"line_number":72,"context_line":"        - kolla-ansible-ubuntu-source-ironic"},{"line_number":73,"context_line":"        - kolla-ansible-centos-source-upgrade"},{"line_number":74,"context_line":"        - kolla-ansible-ubuntu-source-upgrade"},{"line_number":75,"context_line":"        - kolla-ansible-centos-source-upgrade-ceph"},{"line_number":76,"context_line":"        - kolla-ansible-ubuntu-source-upgrade-ceph"}],"source_content_type":"text/x-yaml","patch_set":25,"id":"3fa7e38b_46e500db","line":76,"range":{"start_line":2,"start_character":2,"end_line":76,"end_character":0},"updated":"2019-09-30 16:28:09.000000000","message":"expected a list for dictionary value @ data[\u0027templates\u0027]","commit_id":"1b6f6ca3b8800f0edcfb94abfd03cb8495b4d779"}]}
