)]}'
{"tests/templates/ironic-overrides.j2":[{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"b5a4a86910d5e00cf273db654aa45ade040ca829","unresolved":false,"context_lines":[{"line_number":2,"context_line":"# Enable all fake hardware types and interfaces."},{"line_number":3,"context_line":"enabled_hardware_types \u003d fake-hardware"},{"line_number":4,"context_line":"enabled_boot_interfaces \u003d fake"},{"line_number":5,"context_line":"default_boot_interface \u003d fake"},{"line_number":6,"context_line":"enabled_console_interfaces \u003d ipmitool-socat,no-console"},{"line_number":7,"context_line":"default_console_interface \u003d ipmitool-socat"},{"line_number":8,"context_line":"enabled_deploy_interfaces \u003d fake"}],"source_content_type":"text/x-jinja2","patch_set":58,"id":"9fb8cfa7_1c941744","line":5,"updated":"2019-06-03 08:27:10.000000000","message":"nit: setting default interfaces should not be really needed, except for maybe the network one","commit_id":"8b16f995f487bd3b9f78a6d4159194224abd6503"}],"tests/test-ironic.sh":[{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"b5a4a86910d5e00cf273db654aa45ade040ca829","unresolved":false,"context_lines":[{"line_number":68,"context_line":"    ~/ironic-venv/bin/openstack baremetal node create \\"},{"line_number":69,"context_line":"        --name node-0 \\"},{"line_number":70,"context_line":"        --driver fake-hardware \\"},{"line_number":71,"context_line":"        --boot-interface fake \\"},{"line_number":72,"context_line":"        --deploy-interface fake \\"},{"line_number":73,"context_line":"        --management-interface fake \\"},{"line_number":74,"context_line":"        --network-interface noop \\"},{"line_number":75,"context_line":"        --power-interface fake \\"},{"line_number":76,"context_line":"        --property cpu_arch\u003dx86_64 \\"}],"source_content_type":"text/x-sh","patch_set":58,"id":"9fb8cfa7_1c21774e","line":73,"range":{"start_line":71,"start_character":0,"end_line":73,"end_character":37},"updated":"2019-06-03 08:27:10.000000000","message":"This is redundant","commit_id":"8b16f995f487bd3b9f78a6d4159194224abd6503"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"b5a4a86910d5e00cf273db654aa45ade040ca829","unresolved":false,"context_lines":[{"line_number":72,"context_line":"        --deploy-interface fake \\"},{"line_number":73,"context_line":"        --management-interface fake \\"},{"line_number":74,"context_line":"        --network-interface noop \\"},{"line_number":75,"context_line":"        --power-interface fake \\"},{"line_number":76,"context_line":"        --property cpu_arch\u003dx86_64 \\"},{"line_number":77,"context_line":"        --resource-class rc0"},{"line_number":78,"context_line":"    node_uuid\u003d$(~/ironic-venv/bin/openstack baremetal node show node-0 -f value -c uuid)"}],"source_content_type":"text/x-sh","patch_set":58,"id":"9fb8cfa7_3c1ebb0c","line":75,"range":{"start_line":75,"start_character":0,"end_line":75,"end_character":32},"updated":"2019-06-03 08:27:10.000000000","message":"ditto","commit_id":"8b16f995f487bd3b9f78a6d4159194224abd6503"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"b5a4a86910d5e00cf273db654aa45ade040ca829","unresolved":false,"context_lines":[{"line_number":80,"context_line":"        00:11:22:33:44:55 \\"},{"line_number":81,"context_line":"        --node $node_uuid"},{"line_number":82,"context_line":"    ~/ironic-venv/bin/openstack baremetal node power off node-0"},{"line_number":83,"context_line":"    ~/ironic-venv/bin/openstack baremetal node manage node-0"},{"line_number":84,"context_line":"    ~/ironic-venv/bin/openstack baremetal node provide node-0"},{"line_number":85,"context_line":"    ~/ironic-venv/bin/openstack baremetal node validate node-0"},{"line_number":86,"context_line":""}],"source_content_type":"text/x-sh","patch_set":58,"id":"9fb8cfa7_fc17c3ec","line":83,"range":{"start_line":83,"start_character":0,"end_line":83,"end_character":60},"updated":"2019-06-03 08:27:10.000000000","message":"add --wait otherwise you may see occasional failures","commit_id":"8b16f995f487bd3b9f78a6d4159194224abd6503"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"b5a4a86910d5e00cf273db654aa45ade040ca829","unresolved":false,"context_lines":[{"line_number":81,"context_line":"        --node $node_uuid"},{"line_number":82,"context_line":"    ~/ironic-venv/bin/openstack baremetal node power off node-0"},{"line_number":83,"context_line":"    ~/ironic-venv/bin/openstack baremetal node manage node-0"},{"line_number":84,"context_line":"    ~/ironic-venv/bin/openstack baremetal node provide node-0"},{"line_number":85,"context_line":"    ~/ironic-venv/bin/openstack baremetal node validate node-0"},{"line_number":86,"context_line":""},{"line_number":87,"context_line":"    # Create a bare metal flavor in nova."}],"source_content_type":"text/x-sh","patch_set":58,"id":"9fb8cfa7_bcd70b24","line":84,"updated":"2019-06-03 08:27:10.000000000","message":"even more important here","commit_id":"8b16f995f487bd3b9f78a6d4159194224abd6503"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"b5a4a86910d5e00cf273db654aa45ade040ca829","unresolved":false,"context_lines":[{"line_number":82,"context_line":"    ~/ironic-venv/bin/openstack baremetal node power off node-0"},{"line_number":83,"context_line":"    ~/ironic-venv/bin/openstack baremetal node manage node-0"},{"line_number":84,"context_line":"    ~/ironic-venv/bin/openstack baremetal node provide node-0"},{"line_number":85,"context_line":"    ~/ironic-venv/bin/openstack baremetal node validate node-0"},{"line_number":86,"context_line":""},{"line_number":87,"context_line":"    # Create a bare metal flavor in nova."},{"line_number":88,"context_line":"    openstack flavor create \\"}],"source_content_type":"text/x-sh","patch_set":58,"id":"9fb8cfa7_1ce65718","line":85,"updated":"2019-06-03 08:27:10.000000000","message":"IIRC this command does not fail when some validations report errors. What\u0027s the goal here?","commit_id":"8b16f995f487bd3b9f78a6d4159194224abd6503"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"b5a4a86910d5e00cf273db654aa45ade040ca829","unresolved":false,"context_lines":[{"line_number":101,"context_line":"    # Assumes init-runonce has been executed."},{"line_number":102,"context_line":"    . /etc/kolla/admin-openrc.sh"},{"line_number":103,"context_line":""},{"line_number":104,"context_line":"    # Smoke test ironic API."},{"line_number":105,"context_line":"    ~/ironic-venv/bin/openstack baremetal node list"},{"line_number":106,"context_line":"    ~/ironic-venv/bin/openstack baremetal port list"},{"line_number":107,"context_line":""}],"source_content_type":"text/x-sh","patch_set":58,"id":"9fb8cfa7_bcc06b52","line":104,"range":{"start_line":104,"start_character":0,"end_line":104,"end_character":28},"updated":"2019-06-03 08:27:10.000000000","message":"It\u0027s much better to check for a non-empty driver list, since it hits both API and conductor (while node and port listing only hit the API)","commit_id":"8b16f995f487bd3b9f78a6d4159194224abd6503"},{"author":{"_account_id":23851,"name":"Riccardo Pittau","email":"elfosardo@gmail.com","username":"elfosardo"},"change_message_id":"e794b708b8a88a07170048c21f8ce53b04a44f87","unresolved":false,"context_lines":[{"line_number":35,"context_line":"    for i in $(seq 1 120); do"},{"line_number":36,"context_line":"        # Fetch provider UUIDs from Placement"},{"line_number":37,"context_line":"        local providers"},{"line_number":38,"context_line":"        providers\u003d$(curl -sH \"X-Auth-Token: $token\" $endpoint/resource_providers \\"},{"line_number":39,"context_line":"            | ./jq -r \u0027.resource_providers[].uuid\u0027)"},{"line_number":40,"context_line":""},{"line_number":41,"context_line":"        local p"}],"source_content_type":"text/x-sh","patch_set":60,"id":"9fb8cfa7_f3fe0ead","line":38,"range":{"start_line":38,"start_character":44,"end_line":38,"end_character":50},"updated":"2019-06-03 13:20:32.000000000","message":"to avoid misinterpreting variables I would wrap this in braces, e.g. ${token}\nI would do the same whenever having a variable inside a path, like on lines 49 and 50, or in general when attached to characters that are not part of that variable, like in this case","commit_id":"1805f06e48bf43ccb4fa247df5d52d63ccd448de"},{"author":{"_account_id":14826,"name":"Mark Goddard","email":"markgoddard86@gmail.com","username":"mgoddard"},"change_message_id":"2571a5c5ece6d30fca6e0cf0389284101c61d172","unresolved":false,"context_lines":[{"line_number":35,"context_line":"    for i in $(seq 1 120); do"},{"line_number":36,"context_line":"        # Fetch provider UUIDs from Placement"},{"line_number":37,"context_line":"        local providers"},{"line_number":38,"context_line":"        providers\u003d$(curl -sH \"X-Auth-Token: $token\" $endpoint/resource_providers \\"},{"line_number":39,"context_line":"            | ./jq -r \u0027.resource_providers[].uuid\u0027)"},{"line_number":40,"context_line":""},{"line_number":41,"context_line":"        local p"}],"source_content_type":"text/x-sh","patch_set":60,"id":"9fb8cfa7_13d082f7","line":38,"range":{"start_line":38,"start_character":44,"end_line":38,"end_character":50},"in_reply_to":"9fb8cfa7_f3fe0ead","updated":"2019-06-03 13:32:23.000000000","message":"This code was shamelessly pulled from the ironic devstack plugin :)\n\nThe shell won\u0027t interpret a \" as part of a variable name but I get the point, thanks.","commit_id":"1805f06e48bf43ccb4fa247df5d52d63ccd448de"},{"author":{"_account_id":23851,"name":"Riccardo Pittau","email":"elfosardo@gmail.com","username":"elfosardo"},"change_message_id":"e794b708b8a88a07170048c21f8ce53b04a44f87","unresolved":false,"context_lines":[{"line_number":76,"context_line":"    ~/ironic-venv/bin/openstack baremetal port create \\"},{"line_number":77,"context_line":"        00:11:22:33:44:55 \\"},{"line_number":78,"context_line":"        --node $node_uuid"},{"line_number":79,"context_line":"    ~/ironic-venv/bin/openstack baremetal node power off node-0"},{"line_number":80,"context_line":"    ~/ironic-venv/bin/openstack baremetal node manage node-0 --wait"},{"line_number":81,"context_line":"    ~/ironic-venv/bin/openstack baremetal node provide node-0 --wait"},{"line_number":82,"context_line":""}],"source_content_type":"text/x-sh","patch_set":60,"id":"9fb8cfa7_d31aea15","line":79,"range":{"start_line":79,"start_character":4,"end_line":79,"end_character":31},"updated":"2019-06-03 13:20:32.000000000","message":"might be worth converting the path of the openstack command to a variable","commit_id":"1805f06e48bf43ccb4fa247df5d52d63ccd448de"},{"author":{"_account_id":14826,"name":"Mark Goddard","email":"markgoddard86@gmail.com","username":"mgoddard"},"change_message_id":"2571a5c5ece6d30fca6e0cf0389284101c61d172","unresolved":false,"context_lines":[{"line_number":76,"context_line":"    ~/ironic-venv/bin/openstack baremetal port create \\"},{"line_number":77,"context_line":"        00:11:22:33:44:55 \\"},{"line_number":78,"context_line":"        --node $node_uuid"},{"line_number":79,"context_line":"    ~/ironic-venv/bin/openstack baremetal node power off node-0"},{"line_number":80,"context_line":"    ~/ironic-venv/bin/openstack baremetal node manage node-0 --wait"},{"line_number":81,"context_line":"    ~/ironic-venv/bin/openstack baremetal node provide node-0 --wait"},{"line_number":82,"context_line":""}],"source_content_type":"text/x-sh","patch_set":60,"id":"9fb8cfa7_932a32e5","line":79,"range":{"start_line":79,"start_character":4,"end_line":79,"end_character":31},"in_reply_to":"9fb8cfa7_d31aea15","updated":"2019-06-03 13:32:23.000000000","message":"Or activate the venv.","commit_id":"1805f06e48bf43ccb4fa247df5d52d63ccd448de"},{"author":{"_account_id":23851,"name":"Riccardo Pittau","email":"elfosardo@gmail.com","username":"elfosardo"},"change_message_id":"e794b708b8a88a07170048c21f8ce53b04a44f87","unresolved":false,"context_lines":[{"line_number":81,"context_line":"    ~/ironic-venv/bin/openstack baremetal node provide node-0 --wait"},{"line_number":82,"context_line":""},{"line_number":83,"context_line":"    # Create a bare metal flavor in nova."},{"line_number":84,"context_line":"    openstack flavor create \\"},{"line_number":85,"context_line":"        baremetal \\"},{"line_number":86,"context_line":"        --vcpus 1 \\"},{"line_number":87,"context_line":"        --ram 1024 \\"}],"source_content_type":"text/x-sh","patch_set":60,"id":"9fb8cfa7_73e1befe","line":84,"range":{"start_line":84,"start_character":4,"end_line":84,"end_character":13},"updated":"2019-06-03 13:20:32.000000000","message":"why using different openstack commands?","commit_id":"1805f06e48bf43ccb4fa247df5d52d63ccd448de"},{"author":{"_account_id":14826,"name":"Mark Goddard","email":"markgoddard86@gmail.com","username":"mgoddard"},"change_message_id":"2571a5c5ece6d30fca6e0cf0389284101c61d172","unresolved":false,"context_lines":[{"line_number":81,"context_line":"    ~/ironic-venv/bin/openstack baremetal node provide node-0 --wait"},{"line_number":82,"context_line":""},{"line_number":83,"context_line":"    # Create a bare metal flavor in nova."},{"line_number":84,"context_line":"    openstack flavor create \\"},{"line_number":85,"context_line":"        baremetal \\"},{"line_number":86,"context_line":"        --vcpus 1 \\"},{"line_number":87,"context_line":"        --ram 1024 \\"}],"source_content_type":"text/x-sh","patch_set":60,"id":"9fb8cfa7_33f6e691","line":84,"range":{"start_line":84,"start_character":4,"end_line":84,"end_character":13},"in_reply_to":"9fb8cfa7_73e1befe","updated":"2019-06-03 13:32:23.000000000","message":"We install python-openstackclient to system packages via pip, but can\u0027t install ironicclient because it has a dependency that conflicts with an installed package.\n\nReally we should always use a virtualenv, but I\u0027m being a bit lazy.","commit_id":"1805f06e48bf43ccb4fa247df5d52d63ccd448de"},{"author":{"_account_id":23851,"name":"Riccardo Pittau","email":"elfosardo@gmail.com","username":"elfosardo"},"change_message_id":"287e052fd3cb704309fa35ee63d293d1a1681e89","unresolved":false,"context_lines":[{"line_number":129,"context_line":"    echo \"Testing Ironic\""},{"line_number":130,"context_line":"    test_ironic_logged \u003e /tmp/logs/ansible/test-ironic 2\u003e\u00261"},{"line_number":131,"context_line":"    result\u003d$?"},{"line_number":132,"context_line":"    if [[ $result !\u003d 0 ]]; then"},{"line_number":133,"context_line":"        echo \"Testing Ironic failed. See ansible/test-ironic for details\""},{"line_number":134,"context_line":"    else"},{"line_number":135,"context_line":"        echo \"Successfully tested Ironic. See ansible/test-ironic for details\""}],"source_content_type":"text/x-sh","patch_set":67,"id":"9fb8cfa7_b7579958","line":132,"updated":"2019-06-11 06:32:54.000000000","message":"maybe directly test the command here instead, testing $? is an anti-pattern","commit_id":"12ce3f84b6b2b4848ca801d3b02f319e6ada788f"},{"author":{"_account_id":14826,"name":"Mark Goddard","email":"markgoddard86@gmail.com","username":"mgoddard"},"change_message_id":"004cd76c87a6b7c142752004d4e001b90db77ff8","unresolved":false,"context_lines":[{"line_number":129,"context_line":"    echo \"Testing Ironic\""},{"line_number":130,"context_line":"    test_ironic_logged \u003e /tmp/logs/ansible/test-ironic 2\u003e\u00261"},{"line_number":131,"context_line":"    result\u003d$?"},{"line_number":132,"context_line":"    if [[ $result !\u003d 0 ]]; then"},{"line_number":133,"context_line":"        echo \"Testing Ironic failed. See ansible/test-ironic for details\""},{"line_number":134,"context_line":"    else"},{"line_number":135,"context_line":"        echo \"Successfully tested Ironic. See ansible/test-ironic for details\""}],"source_content_type":"text/x-sh","patch_set":67,"id":"9fb8cfa7_d6280e98","line":132,"in_reply_to":"9fb8cfa7_76f1226b","updated":"2019-06-11 08:38:40.000000000","message":"Thinking again, there is a reason we shouldn\u0027t do this - we \u0027set -o errexit\u0027 above means we\u0027ll never get to the failure message echo. It\u0027s just a logging issue though and we\u0027d need to make that change for all test scripts.","commit_id":"12ce3f84b6b2b4848ca801d3b02f319e6ada788f"},{"author":{"_account_id":14826,"name":"Mark Goddard","email":"markgoddard86@gmail.com","username":"mgoddard"},"change_message_id":"f076330f16346717b6881fdcb257b5ab64270680","unresolved":false,"context_lines":[{"line_number":129,"context_line":"    echo \"Testing Ironic\""},{"line_number":130,"context_line":"    test_ironic_logged \u003e /tmp/logs/ansible/test-ironic 2\u003e\u00261"},{"line_number":131,"context_line":"    result\u003d$?"},{"line_number":132,"context_line":"    if [[ $result !\u003d 0 ]]; then"},{"line_number":133,"context_line":"        echo \"Testing Ironic failed. See ansible/test-ironic for details\""},{"line_number":134,"context_line":"    else"},{"line_number":135,"context_line":"        echo \"Successfully tested Ironic. See ansible/test-ironic for details\""}],"source_content_type":"text/x-sh","patch_set":67,"id":"9fb8cfa7_76f1226b","line":132,"in_reply_to":"9fb8cfa7_b7579958","updated":"2019-06-11 08:30:40.000000000","message":"We use this pattern throughout the test scripts. I don\u0027t think it\u0027s so bad is it?","commit_id":"12ce3f84b6b2b4848ca801d3b02f319e6ada788f"},{"author":{"_account_id":23851,"name":"Riccardo Pittau","email":"elfosardo@gmail.com","username":"elfosardo"},"change_message_id":"ebd161d17cf18aa0a6f41f2705d12aff5d11aa90","unresolved":false,"context_lines":[{"line_number":129,"context_line":"    echo \"Testing Ironic\""},{"line_number":130,"context_line":"    test_ironic_logged \u003e /tmp/logs/ansible/test-ironic 2\u003e\u00261"},{"line_number":131,"context_line":"    result\u003d$?"},{"line_number":132,"context_line":"    if [[ $result !\u003d 0 ]]; then"},{"line_number":133,"context_line":"        echo \"Testing Ironic failed. See ansible/test-ironic for details\""},{"line_number":134,"context_line":"    else"},{"line_number":135,"context_line":"        echo \"Successfully tested Ironic. See ansible/test-ironic for details\""}],"source_content_type":"text/x-sh","patch_set":67,"id":"9fb8cfa7_59720faf","line":132,"in_reply_to":"9fb8cfa7_d6280e98","updated":"2019-06-11 08:46:58.000000000","message":"That\u0027s one of the reasons why it\u0027s an anti-pattern\nMore in general $? is just too easy to be subject to changes by accident\nA good practice if you really want to collect the exit value and test it, do it on the same line as the command itself","commit_id":"12ce3f84b6b2b4848ca801d3b02f319e6ada788f"},{"author":{"_account_id":22629,"name":"Michal Nasiadka","email":"mnasiadka@gmail.com","username":"mnasiadka"},"change_message_id":"cbb3ce007734ff77fd3c74287f92fa32233aebc5","unresolved":false,"context_lines":[{"line_number":16,"context_line":"    local expected_count\u003d1"},{"line_number":17,"context_line":"    local resource_class\u003d\"RC0\""},{"line_number":18,"context_line":""},{"line_number":19,"context_line":"    curl -L -o jq https://github.com/stedolan/jq/releases/download/jq-1.5/jq-linux64"},{"line_number":20,"context_line":"    chmod +x jq"},{"line_number":21,"context_line":""},{"line_number":22,"context_line":"    # TODO(mgoddard): switch to Placement OSC plugin, once it exists"}],"source_content_type":"text/x-sh","patch_set":68,"id":"9fb8cfa7_4eb76c3b","line":19,"updated":"2019-06-13 17:36:52.000000000","message":"Can\u0027t we get it installed from the distro repo? This way we can use openstack infra mirrors...","commit_id":"845040ad3f2a477f5ab823391390e84355dd140e"}],"zuul.d/base.yaml":[{"author":{"_account_id":22629,"name":"Michal Nasiadka","email":"mnasiadka@gmail.com","username":"mnasiadka"},"change_message_id":"30eda77c22f74ba5bae5e75cd4d4ff055e21dbd8","unresolved":false,"context_lines":[{"line_number":34,"context_line":"    name: kolla-ansible-ironic-base"},{"line_number":35,"context_line":"    parent: kolla-ansible-base"},{"line_number":36,"context_line":"    voting: false"},{"line_number":37,"context_line":"    files: ^ansible\\/roles\\/ironic\\/.*"},{"line_number":38,"context_line":"    vars:"},{"line_number":39,"context_line":"      scenario: ironic"}],"source_content_type":"text/x-yaml","patch_set":55,"id":"5fc1f717_7eeeb8ed","line":37,"updated":"2019-03-27 06:26:42.000000000","message":"Would it make sense to add test-ironic.sh and some other dependent files, so if somebody changes those - it gets automatically tested?","commit_id":"cec2d4ec1d82d0ae6f015cee5f784addd9310195"},{"author":{"_account_id":14826,"name":"Mark Goddard","email":"markgoddard86@gmail.com","username":"mgoddard"},"change_message_id":"7d929ec15e2d033c6431659e7be44277cd44d6c1","unresolved":false,"context_lines":[{"line_number":34,"context_line":"    name: kolla-ansible-ironic-base"},{"line_number":35,"context_line":"    parent: kolla-ansible-base"},{"line_number":36,"context_line":"    voting: false"},{"line_number":37,"context_line":"    files: ^ansible\\/roles\\/ironic\\/.*"},{"line_number":38,"context_line":"    vars:"},{"line_number":39,"context_line":"      scenario: ironic"}],"source_content_type":"text/x-yaml","patch_set":55,"id":"5fc1f717_72d82952","line":37,"in_reply_to":"5fc1f717_7eeeb8ed","updated":"2019-03-27 09:55:06.000000000","message":"Probably. Realistically there are lots of files that could affect ironic and other scenario jobs like zun/NFV. I guess we should change it for all those jobs if we do.","commit_id":"cec2d4ec1d82d0ae6f015cee5f784addd9310195"}]}
