)]}'
{"devstack/upgrade/resources.sh":[{"author":{"_account_id":14760,"name":"John L. Villalovos","email":"openstack.org@sodarock.com","username":"jlvillal"},"change_message_id":"ab68a481a2ef5c3d9eebde5550e8c1e5b79b0e2c","unresolved":false,"context_lines":[{"line_number":32,"context_line":"set -o xtrace"},{"line_number":33,"context_line":""},{"line_number":34,"context_line":""},{"line_number":35,"context_line":"function early_create {"},{"line_number":36,"context_line":"    # this builds a default network for other services to use"},{"line_number":37,"context_line":"    local net_id"},{"line_number":38,"context_line":"    net_id\u003d$(neutron net-create --shared $NEUTRON_NET | grep \u0027 id \u0027 | get_field 2)"}],"source_content_type":"text/x-sh","patch_set":3,"id":"bab6814e_dafd120a","line":35,"updated":"2016-05-23 22:43:41.000000000","message":"In general I would like to get a comment on this and why it is needed. Why do we need to create a 2nd network?\n\nI don\u0027t understand the why and maybe others don\u0027t.","commit_id":"7d38b113bef9436c0a205cc78e411d8170a84ac9"},{"author":{"_account_id":14525,"name":"Vasyl Saienko","email":"vsaienko@mirantis.com","username":"vsaienko"},"change_message_id":"c2099a1e49a9091813e0280ba2e47607968574bc","unresolved":false,"context_lines":[{"line_number":32,"context_line":"set -o xtrace"},{"line_number":33,"context_line":""},{"line_number":34,"context_line":""},{"line_number":35,"context_line":"function early_create {"},{"line_number":36,"context_line":"    # this builds a default network for other services to use"},{"line_number":37,"context_line":"    local net_id"},{"line_number":38,"context_line":"    net_id\u003d$(neutron net-create --shared $NEUTRON_NET | grep \u0027 id \u0027 | get_field 2)"}],"source_content_type":"text/x-sh","patch_set":3,"id":"bab6814e_a481ec4f","line":35,"in_reply_to":"bab6814e_dafd120a","updated":"2016-05-24 15:02:03.000000000","message":"Done","commit_id":"7d38b113bef9436c0a205cc78e411d8170a84ac9"},{"author":{"_account_id":18893,"name":"Miles Gould","email":"mgould@redhat.com","username":"pozorvlak"},"change_message_id":"cbddfe2523df3f01264ccd927fcd5bba5c15da20","unresolved":false,"context_lines":[{"line_number":36,"context_line":"    # Ironic requires to have network access to instance during deployment from"},{"line_number":37,"context_line":"    # control plane (ironic-conductor). early_create function creates a new network"},{"line_number":38,"context_line":"    # with unique CIDR, adds a route to this network from ironic-conductor and creates"},{"line_number":39,"context_line":"    # taps between br-int and brbm. It allows to have an access to ironic nodes."},{"line_number":40,"context_line":"    local net_id"},{"line_number":41,"context_line":"    net_id\u003d$(neutron net-create --shared $NEUTRON_NET | grep \u0027 id \u0027 | get_field 2)"},{"line_number":42,"context_line":"    resource_save network net_id $net_id"}],"source_content_type":"text/x-sh","patch_set":4,"id":"9abb7d3a_40ec85c7","line":39,"updated":"2016-05-27 15:02:28.000000000","message":"Nit: \"it allows access\"","commit_id":"d47111f802b4484bfb4564d4e79c4707c0649eaf"},{"author":{"_account_id":6618,"name":"Ruby Loo","email":"opensrloo@gmail.com","username":"rloo"},"change_message_id":"ab69db5acd4e76d252458858fd938ad3e892a032","unresolved":false,"context_lines":[{"line_number":33,"context_line":""},{"line_number":34,"context_line":""},{"line_number":35,"context_line":"function early_create {"},{"line_number":36,"context_line":"    # Ironic requires to have network access to instance during deployment from"},{"line_number":37,"context_line":"    # control plane (ironic-conductor). early_create function creates a new network"},{"line_number":38,"context_line":"    # with unique CIDR, adds a route to this network from ironic-conductor and creates"},{"line_number":39,"context_line":"    # taps between br-int and brbm. It allows to have an access to ironic nodes."}],"source_content_type":"text/x-sh","patch_set":10,"id":"9abb7d3a_f950d00c","line":36,"updated":"2016-06-02 15:37:30.000000000","message":"nit s/requires/needs/","commit_id":"2f2b9fbbf5b50ed06202d7a85c99f8b7b3e99b2f"},{"author":{"_account_id":14525,"name":"Vasyl Saienko","email":"vsaienko@mirantis.com","username":"vsaienko"},"change_message_id":"84528ce10047693b447786cf618dab03b4e626c4","unresolved":false,"context_lines":[{"line_number":33,"context_line":""},{"line_number":34,"context_line":""},{"line_number":35,"context_line":"function early_create {"},{"line_number":36,"context_line":"    # Ironic requires to have network access to instance during deployment from"},{"line_number":37,"context_line":"    # control plane (ironic-conductor). early_create function creates a new network"},{"line_number":38,"context_line":"    # with unique CIDR, adds a route to this network from ironic-conductor and creates"},{"line_number":39,"context_line":"    # taps between br-int and brbm. It allows to have an access to ironic nodes."}],"source_content_type":"text/x-sh","patch_set":10,"id":"7aa08908_4d9f9c03","line":36,"in_reply_to":"9abb7d3a_f950d00c","updated":"2016-06-06 07:24:44.000000000","message":"Done","commit_id":"2f2b9fbbf5b50ed06202d7a85c99f8b7b3e99b2f"},{"author":{"_account_id":6618,"name":"Ruby Loo","email":"opensrloo@gmail.com","username":"rloo"},"change_message_id":"ab69db5acd4e76d252458858fd938ad3e892a032","unresolved":false,"context_lines":[{"line_number":36,"context_line":"    # Ironic requires to have network access to instance during deployment from"},{"line_number":37,"context_line":"    # control plane (ironic-conductor). early_create function creates a new network"},{"line_number":38,"context_line":"    # with unique CIDR, adds a route to this network from ironic-conductor and creates"},{"line_number":39,"context_line":"    # taps between br-int and brbm. It allows to have an access to ironic nodes."},{"line_number":40,"context_line":"    local net_id"},{"line_number":41,"context_line":"    net_id\u003d$(neutron net-create --shared $NEUTRON_NET | grep \u0027 id \u0027 | get_field 2)"},{"line_number":42,"context_line":"    resource_save network net_id $net_id"}],"source_content_type":"text/x-sh","patch_set":10,"id":"9abb7d3a_39453817","line":39,"updated":"2016-06-02 15:37:30.000000000","message":"Instead of the last sentence, how about \u0027ironic-conductor will be able to access the ironic nodes via this new network.\u0027","commit_id":"2f2b9fbbf5b50ed06202d7a85c99f8b7b3e99b2f"},{"author":{"_account_id":14525,"name":"Vasyl Saienko","email":"vsaienko@mirantis.com","username":"vsaienko"},"change_message_id":"84528ce10047693b447786cf618dab03b4e626c4","unresolved":false,"context_lines":[{"line_number":36,"context_line":"    # Ironic requires to have network access to instance during deployment from"},{"line_number":37,"context_line":"    # control plane (ironic-conductor). early_create function creates a new network"},{"line_number":38,"context_line":"    # with unique CIDR, adds a route to this network from ironic-conductor and creates"},{"line_number":39,"context_line":"    # taps between br-int and brbm. It allows to have an access to ironic nodes."},{"line_number":40,"context_line":"    local net_id"},{"line_number":41,"context_line":"    net_id\u003d$(neutron net-create --shared $NEUTRON_NET | grep \u0027 id \u0027 | get_field 2)"},{"line_number":42,"context_line":"    resource_save network net_id $net_id"}],"source_content_type":"text/x-sh","patch_set":10,"id":"7aa08908_edc008e3","line":39,"in_reply_to":"9abb7d3a_39453817","updated":"2016-06-06 07:24:44.000000000","message":"Done","commit_id":"2f2b9fbbf5b50ed06202d7a85c99f8b7b3e99b2f"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"4708b7dc4986923ba958e15f0223dc90cf126136","unresolved":false,"context_lines":[{"line_number":38,"context_line":"    # with unique CIDR, adds a route to this network from ironic-conductor and creates"},{"line_number":39,"context_line":"    # taps between br-int and brbm. It allows to have an access to ironic nodes."},{"line_number":40,"context_line":"    local net_id"},{"line_number":41,"context_line":"    net_id\u003d$(neutron net-create --shared $NEUTRON_NET | grep \u0027 id \u0027 | get_field 2)"},{"line_number":42,"context_line":"    resource_save network net_id $net_id"},{"line_number":43,"context_line":""},{"line_number":44,"context_line":"    local subnet_params\u003d\"\""}],"source_content_type":"text/x-sh","patch_set":10,"id":"9abb7d3a_a07bb128","line":41,"range":{"start_line":41,"start_character":13,"end_line":41,"end_character":81},"updated":"2016-06-02 14:52:29.000000000","message":"this should use OSC command to avoid grep magic:\n\n net_id\u003d$(openstack network create --share $NEUTRON_NET -f value -c id)","commit_id":"2f2b9fbbf5b50ed06202d7a85c99f8b7b3e99b2f"},{"author":{"_account_id":12356,"name":"Vladyslav Drok","email":"vdrok@mirantis.com","username":"vdrok"},"change_message_id":"ca41de14c211022dee166a95f0ca57e9f90ef48f","unresolved":false,"context_lines":[{"line_number":38,"context_line":"    # with unique CIDR, adds a route to this network from ironic-conductor and creates"},{"line_number":39,"context_line":"    # taps between br-int and brbm. It allows to have an access to ironic nodes."},{"line_number":40,"context_line":"    local net_id"},{"line_number":41,"context_line":"    net_id\u003d$(neutron net-create --shared $NEUTRON_NET | grep \u0027 id \u0027 | get_field 2)"},{"line_number":42,"context_line":"    resource_save network net_id $net_id"},{"line_number":43,"context_line":""},{"line_number":44,"context_line":"    local subnet_params\u003d\"\""}],"source_content_type":"text/x-sh","patch_set":10,"id":"9abb7d3a_63150e9a","line":41,"range":{"start_line":41,"start_character":13,"end_line":41,"end_character":81},"in_reply_to":"9abb7d3a_a07bb128","updated":"2016-06-03 14:47:47.000000000","message":"++","commit_id":"2f2b9fbbf5b50ed06202d7a85c99f8b7b3e99b2f"},{"author":{"_account_id":14525,"name":"Vasyl Saienko","email":"vsaienko@mirantis.com","username":"vsaienko"},"change_message_id":"84528ce10047693b447786cf618dab03b4e626c4","unresolved":false,"context_lines":[{"line_number":38,"context_line":"    # with unique CIDR, adds a route to this network from ironic-conductor and creates"},{"line_number":39,"context_line":"    # taps between br-int and brbm. It allows to have an access to ironic nodes."},{"line_number":40,"context_line":"    local net_id"},{"line_number":41,"context_line":"    net_id\u003d$(neutron net-create --shared $NEUTRON_NET | grep \u0027 id \u0027 | get_field 2)"},{"line_number":42,"context_line":"    resource_save network net_id $net_id"},{"line_number":43,"context_line":""},{"line_number":44,"context_line":"    local subnet_params\u003d\"\""}],"source_content_type":"text/x-sh","patch_set":10,"id":"7aa08908_48266a69","line":41,"range":{"start_line":41,"start_character":13,"end_line":41,"end_character":81},"in_reply_to":"9abb7d3a_a07bb128","updated":"2016-06-06 07:24:44.000000000","message":"Done","commit_id":"2f2b9fbbf5b50ed06202d7a85c99f8b7b3e99b2f"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"4708b7dc4986923ba958e15f0223dc90cf126136","unresolved":false,"context_lines":[{"line_number":48,"context_line":"    subnet_params+\u003d\"$net_id $RESOURCES_FIXED_RANGE\""},{"line_number":49,"context_line":""},{"line_number":50,"context_line":"    local subnet_id"},{"line_number":51,"context_line":"    subnet_id\u003d$(neutron subnet-create $subnet_params | grep \u0027 id \u0027 | get_field 2)"},{"line_number":52,"context_line":"    resource_save network subnet_id $subnet_id"},{"line_number":53,"context_line":""},{"line_number":54,"context_line":"    local router_id"}],"source_content_type":"text/x-sh","patch_set":10,"id":"9abb7d3a_80782d2d","line":51,"range":{"start_line":51,"start_character":14,"end_line":51,"end_character":81},"updated":"2016-06-02 14:52:29.000000000","message":"ditto as above","commit_id":"2f2b9fbbf5b50ed06202d7a85c99f8b7b3e99b2f"},{"author":{"_account_id":12356,"name":"Vladyslav Drok","email":"vdrok@mirantis.com","username":"vdrok"},"change_message_id":"ca41de14c211022dee166a95f0ca57e9f90ef48f","unresolved":false,"context_lines":[{"line_number":48,"context_line":"    subnet_params+\u003d\"$net_id $RESOURCES_FIXED_RANGE\""},{"line_number":49,"context_line":""},{"line_number":50,"context_line":"    local subnet_id"},{"line_number":51,"context_line":"    subnet_id\u003d$(neutron subnet-create $subnet_params | grep \u0027 id \u0027 | get_field 2)"},{"line_number":52,"context_line":"    resource_save network subnet_id $subnet_id"},{"line_number":53,"context_line":""},{"line_number":54,"context_line":"    local router_id"}],"source_content_type":"text/x-sh","patch_set":10,"id":"9abb7d3a_83bab2df","line":51,"range":{"start_line":51,"start_character":14,"end_line":51,"end_character":81},"in_reply_to":"9abb7d3a_80782d2d","updated":"2016-06-03 14:47:47.000000000","message":"This command was not present in mitaka openstack client.","commit_id":"2f2b9fbbf5b50ed06202d7a85c99f8b7b3e99b2f"},{"author":{"_account_id":14525,"name":"Vasyl Saienko","email":"vsaienko@mirantis.com","username":"vsaienko"},"change_message_id":"84528ce10047693b447786cf618dab03b4e626c4","unresolved":false,"context_lines":[{"line_number":48,"context_line":"    subnet_params+\u003d\"$net_id $RESOURCES_FIXED_RANGE\""},{"line_number":49,"context_line":""},{"line_number":50,"context_line":"    local subnet_id"},{"line_number":51,"context_line":"    subnet_id\u003d$(neutron subnet-create $subnet_params | grep \u0027 id \u0027 | get_field 2)"},{"line_number":52,"context_line":"    resource_save network subnet_id $subnet_id"},{"line_number":53,"context_line":""},{"line_number":54,"context_line":"    local router_id"}],"source_content_type":"text/x-sh","patch_set":10,"id":"7aa08908_8813325c","line":51,"range":{"start_line":51,"start_character":14,"end_line":51,"end_character":81},"in_reply_to":"9abb7d3a_83bab2df","updated":"2016-06-06 07:24:44.000000000","message":"Right, OSC from Mitaka doesn\u0027t support this.","commit_id":"2f2b9fbbf5b50ed06202d7a85c99f8b7b3e99b2f"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"4708b7dc4986923ba958e15f0223dc90cf126136","unresolved":false,"context_lines":[{"line_number":52,"context_line":"    resource_save network subnet_id $subnet_id"},{"line_number":53,"context_line":""},{"line_number":54,"context_line":"    local router_id"},{"line_number":55,"context_line":"    router_id\u003d$(neutron router-create $NEUTRON_NET | grep \u0027 id \u0027 | get_field 2)"},{"line_number":56,"context_line":"    resource_save network router_id $router_id"},{"line_number":57,"context_line":""},{"line_number":58,"context_line":"    neutron router-interface-add $NEUTRON_NET $subnet_id"}],"source_content_type":"text/x-sh","patch_set":10,"id":"9abb7d3a_00939d50","line":55,"range":{"start_line":55,"start_character":14,"end_line":55,"end_character":79},"updated":"2016-06-02 14:52:29.000000000","message":"ditto as above","commit_id":"2f2b9fbbf5b50ed06202d7a85c99f8b7b3e99b2f"},{"author":{"_account_id":12356,"name":"Vladyslav Drok","email":"vdrok@mirantis.com","username":"vdrok"},"change_message_id":"ca41de14c211022dee166a95f0ca57e9f90ef48f","unresolved":false,"context_lines":[{"line_number":52,"context_line":"    resource_save network subnet_id $subnet_id"},{"line_number":53,"context_line":""},{"line_number":54,"context_line":"    local router_id"},{"line_number":55,"context_line":"    router_id\u003d$(neutron router-create $NEUTRON_NET | grep \u0027 id \u0027 | get_field 2)"},{"line_number":56,"context_line":"    resource_save network router_id $router_id"},{"line_number":57,"context_line":""},{"line_number":58,"context_line":"    neutron router-interface-add $NEUTRON_NET $subnet_id"}],"source_content_type":"text/x-sh","patch_set":10,"id":"9abb7d3a_434a8ac6","line":55,"range":{"start_line":55,"start_character":14,"end_line":55,"end_character":79},"in_reply_to":"9abb7d3a_00939d50","updated":"2016-06-03 14:47:47.000000000","message":"++","commit_id":"2f2b9fbbf5b50ed06202d7a85c99f8b7b3e99b2f"},{"author":{"_account_id":14525,"name":"Vasyl Saienko","email":"vsaienko@mirantis.com","username":"vsaienko"},"change_message_id":"84528ce10047693b447786cf618dab03b4e626c4","unresolved":false,"context_lines":[{"line_number":52,"context_line":"    resource_save network subnet_id $subnet_id"},{"line_number":53,"context_line":""},{"line_number":54,"context_line":"    local router_id"},{"line_number":55,"context_line":"    router_id\u003d$(neutron router-create $NEUTRON_NET | grep \u0027 id \u0027 | get_field 2)"},{"line_number":56,"context_line":"    resource_save network router_id $router_id"},{"line_number":57,"context_line":""},{"line_number":58,"context_line":"    neutron router-interface-add $NEUTRON_NET $subnet_id"}],"source_content_type":"text/x-sh","patch_set":10,"id":"7aa08908_c8037ab7","line":55,"range":{"start_line":55,"start_character":14,"end_line":55,"end_character":79},"in_reply_to":"9abb7d3a_00939d50","updated":"2016-06-06 07:24:44.000000000","message":"Done","commit_id":"2f2b9fbbf5b50ed06202d7a85c99f8b7b3e99b2f"},{"author":{"_account_id":6618,"name":"Ruby Loo","email":"opensrloo@gmail.com","username":"rloo"},"change_message_id":"ab69db5acd4e76d252458858fd938ad3e892a032","unresolved":false,"context_lines":[{"line_number":56,"context_line":"    resource_save network router_id $router_id"},{"line_number":57,"context_line":""},{"line_number":58,"context_line":"    neutron router-interface-add $NEUTRON_NET $subnet_id"},{"line_number":59,"context_line":"    neutron router-gateway-set $NEUTRON_NET public"},{"line_number":60,"context_line":""},{"line_number":61,"context_line":"    # NOTE(vsaeinko) sleep is needed in order to setup route"},{"line_number":62,"context_line":"    sleep 5"}],"source_content_type":"text/x-sh","patch_set":10,"id":"9abb7d3a_b4300fea","line":59,"updated":"2016-06-02 15:37:30.000000000","message":"We should use openstackclient commands whenever we can.","commit_id":"2f2b9fbbf5b50ed06202d7a85c99f8b7b3e99b2f"},{"author":{"_account_id":12356,"name":"Vladyslav Drok","email":"vdrok@mirantis.com","username":"vdrok"},"change_message_id":"ca41de14c211022dee166a95f0ca57e9f90ef48f","unresolved":false,"context_lines":[{"line_number":56,"context_line":"    resource_save network router_id $router_id"},{"line_number":57,"context_line":""},{"line_number":58,"context_line":"    neutron router-interface-add $NEUTRON_NET $subnet_id"},{"line_number":59,"context_line":"    neutron router-gateway-set $NEUTRON_NET public"},{"line_number":60,"context_line":""},{"line_number":61,"context_line":"    # NOTE(vsaeinko) sleep is needed in order to setup route"},{"line_number":62,"context_line":"    sleep 5"}],"source_content_type":"text/x-sh","patch_set":10,"id":"9abb7d3a_03d24200","line":59,"in_reply_to":"9abb7d3a_b4300fea","updated":"2016-06-03 14:47:47.000000000","message":"The problem is that lots of commands are still not there. This two were not in mitaka IIUC looking at the docs.","commit_id":"2f2b9fbbf5b50ed06202d7a85c99f8b7b3e99b2f"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"4708b7dc4986923ba958e15f0223dc90cf126136","unresolved":false,"context_lines":[{"line_number":61,"context_line":"    # NOTE(vsaeinko) sleep is needed in order to setup route"},{"line_number":62,"context_line":"    sleep 5"},{"line_number":63,"context_line":""},{"line_number":64,"context_line":"    # Add a route to network to access instances from ironic-conductor"},{"line_number":65,"context_line":"    local r_net_gateway"},{"line_number":66,"context_line":"    r_net_gateway\u003d$(sudo ip netns exec qrouter-$router_id ip -4 route get 4.2.2.1 |grep dev | awk \u0027{print $7}\u0027)"},{"line_number":67,"context_line":"    sudo ip route replace $RESOURCES_FIXED_RANGE via $r_net_gateway"}],"source_content_type":"text/x-sh","patch_set":10,"id":"9abb7d3a_a025710b","line":64,"range":{"start_line":64,"start_character":4,"end_line":64,"end_character":70},"updated":"2016-06-02 14:52:29.000000000","message":"could you please add a detailed comment on what it does? I can\u0027t understand this code without diving into ip netns and all the things.","commit_id":"2f2b9fbbf5b50ed06202d7a85c99f8b7b3e99b2f"},{"author":{"_account_id":6618,"name":"Ruby Loo","email":"opensrloo@gmail.com","username":"rloo"},"change_message_id":"ab69db5acd4e76d252458858fd938ad3e892a032","unresolved":false,"context_lines":[{"line_number":61,"context_line":"    # NOTE(vsaeinko) sleep is needed in order to setup route"},{"line_number":62,"context_line":"    sleep 5"},{"line_number":63,"context_line":""},{"line_number":64,"context_line":"    # Add a route to network to access instances from ironic-conductor"},{"line_number":65,"context_line":"    local r_net_gateway"},{"line_number":66,"context_line":"    r_net_gateway\u003d$(sudo ip netns exec qrouter-$router_id ip -4 route get 4.2.2.1 |grep dev | awk \u0027{print $7}\u0027)"},{"line_number":67,"context_line":"    sudo ip route replace $RESOURCES_FIXED_RANGE via $r_net_gateway"}],"source_content_type":"text/x-sh","patch_set":10,"id":"9abb7d3a_345b7f30","line":64,"range":{"start_line":64,"start_character":4,"end_line":64,"end_character":70},"in_reply_to":"9abb7d3a_a025710b","updated":"2016-06-02 15:37:30.000000000","message":"++","commit_id":"2f2b9fbbf5b50ed06202d7a85c99f8b7b3e99b2f"},{"author":{"_account_id":14525,"name":"Vasyl Saienko","email":"vsaienko@mirantis.com","username":"vsaienko"},"change_message_id":"84528ce10047693b447786cf618dab03b4e626c4","unresolved":false,"context_lines":[{"line_number":61,"context_line":"    # NOTE(vsaeinko) sleep is needed in order to setup route"},{"line_number":62,"context_line":"    sleep 5"},{"line_number":63,"context_line":""},{"line_number":64,"context_line":"    # Add a route to network to access instances from ironic-conductor"},{"line_number":65,"context_line":"    local r_net_gateway"},{"line_number":66,"context_line":"    r_net_gateway\u003d$(sudo ip netns exec qrouter-$router_id ip -4 route get 4.2.2.1 |grep dev | awk \u0027{print $7}\u0027)"},{"line_number":67,"context_line":"    sudo ip route replace $RESOURCES_FIXED_RANGE via $r_net_gateway"}],"source_content_type":"text/x-sh","patch_set":10,"id":"7aa08908_8820524b","line":64,"range":{"start_line":64,"start_character":4,"end_line":64,"end_character":70},"in_reply_to":"9abb7d3a_a025710b","updated":"2016-06-06 07:24:44.000000000","message":"Done","commit_id":"2f2b9fbbf5b50ed06202d7a85c99f8b7b3e99b2f"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"fa4e7bd268e0ba341fb6b3641c7968cd303166ae","unresolved":false,"context_lines":[{"line_number":38,"context_line":"    # with unique CIDR, adds a route to this network from ironic-conductor and creates"},{"line_number":39,"context_line":"    # taps between br-int and brbm. ironic-conductor will be able to access the ironic"},{"line_number":40,"context_line":"    # nodes via this new network."},{"line_number":41,"context_line":"    # NOTE (vsaienko) use OSC when Neutron commands are supported."},{"line_number":42,"context_line":"    local net_id"},{"line_number":43,"context_line":"    net_id\u003d$(openstack network create --share $NEUTRON_NET -f value -c id)"},{"line_number":44,"context_line":"    resource_save network net_id $net_id"}],"source_content_type":"text/x-sh","patch_set":12,"id":"7aa08908_bdb456f2","line":41,"range":{"start_line":41,"start_character":6,"end_line":41,"end_character":10},"updated":"2016-06-06 15:01:09.000000000","message":"nit: s/NOTE/TODO/","commit_id":"c2f80bb102244b527801b4bd531e25971a5aaff3"},{"author":{"_account_id":6618,"name":"Ruby Loo","email":"opensrloo@gmail.com","username":"rloo"},"change_message_id":"489e6255d6a189d60704982ac20ebc76a901282f","unresolved":false,"context_lines":[{"line_number":63,"context_line":"    # NOTE(vsaeinko) sleep is needed in order to setup route"},{"line_number":64,"context_line":"    sleep 5"},{"line_number":65,"context_line":""},{"line_number":66,"context_line":"    # Add a route to baremetal network via Neutron public router."},{"line_number":67,"context_line":"    # ironic-conductor will be able to access the ironic nodes via this new route."},{"line_number":68,"context_line":"    local r_net_gateway"},{"line_number":69,"context_line":"    r_net_gateway\u003d$(sudo ip netns exec qrouter-$router_id ip -4 route get 4.2.2.1 |grep dev | awk \u0027{print $7}\u0027)"}],"source_content_type":"text/x-sh","patch_set":12,"id":"7aa08908_a7460321","line":66,"updated":"2016-06-06 14:29:16.000000000","message":"I suppose this is better than nothing. I don\u0027t know anything about neutron, but I will assume that someone that does, will understand what line 69 does.","commit_id":"c2f80bb102244b527801b4bd531e25971a5aaff3"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"fa4e7bd268e0ba341fb6b3641c7968cd303166ae","unresolved":false,"context_lines":[{"line_number":63,"context_line":"    # NOTE(vsaeinko) sleep is needed in order to setup route"},{"line_number":64,"context_line":"    sleep 5"},{"line_number":65,"context_line":""},{"line_number":66,"context_line":"    # Add a route to baremetal network via Neutron public router."},{"line_number":67,"context_line":"    # ironic-conductor will be able to access the ironic nodes via this new route."},{"line_number":68,"context_line":"    local r_net_gateway"},{"line_number":69,"context_line":"    r_net_gateway\u003d$(sudo ip netns exec qrouter-$router_id ip -4 route get 4.2.2.1 |grep dev | awk \u0027{print $7}\u0027)"}],"source_content_type":"text/x-sh","patch_set":12,"id":"7aa08908_5d31f2a1","line":66,"in_reply_to":"7aa08908_a7460321","updated":"2016-06-06 15:01:09.000000000","message":"nit: I think this note should be before line 70 for contextual purposes of what that line is doing.  Line 69 imho needs a better explanation.","commit_id":"c2f80bb102244b527801b4bd531e25971a5aaff3"},{"author":{"_account_id":6618,"name":"Ruby Loo","email":"opensrloo@gmail.com","username":"rloo"},"change_message_id":"489e6255d6a189d60704982ac20ebc76a901282f","unresolved":false,"context_lines":[{"line_number":66,"context_line":"    # Add a route to baremetal network via Neutron public router."},{"line_number":67,"context_line":"    # ironic-conductor will be able to access the ironic nodes via this new route."},{"line_number":68,"context_line":"    local r_net_gateway"},{"line_number":69,"context_line":"    r_net_gateway\u003d$(sudo ip netns exec qrouter-$router_id ip -4 route get 4.2.2.1 |grep dev | awk \u0027{print $7}\u0027)"},{"line_number":70,"context_line":"    sudo ip route replace $RESOURCES_FIXED_RANGE via $r_net_gateway"},{"line_number":71,"context_line":""},{"line_number":72,"context_line":"    create_ovs_taps $net_id"}],"source_content_type":"text/x-sh","patch_set":12,"id":"7aa08908_67637bb2","line":69,"updated":"2016-06-06 14:29:16.000000000","message":"where does \u00274.2.2.1\u0027 come from?","commit_id":"c2f80bb102244b527801b4bd531e25971a5aaff3"},{"author":{"_account_id":14525,"name":"Vasyl Saienko","email":"vsaienko@mirantis.com","username":"vsaienko"},"change_message_id":"425a4a5390e10f444ffbe979ee6084e376860de4","unresolved":false,"context_lines":[{"line_number":66,"context_line":"    # Add a route to baremetal network via Neutron public router."},{"line_number":67,"context_line":"    # ironic-conductor will be able to access the ironic nodes via this new route."},{"line_number":68,"context_line":"    local r_net_gateway"},{"line_number":69,"context_line":"    r_net_gateway\u003d$(sudo ip netns exec qrouter-$router_id ip -4 route get 4.2.2.1 |grep dev | awk \u0027{print $7}\u0027)"},{"line_number":70,"context_line":"    sudo ip route replace $RESOURCES_FIXED_RANGE via $r_net_gateway"},{"line_number":71,"context_line":""},{"line_number":72,"context_line":"    create_ovs_taps $net_id"}],"source_content_type":"text/x-sh","patch_set":12,"id":"7aa08908_b4d3ba37","line":69,"in_reply_to":"7aa08908_5dd8d253","updated":"2016-06-06 21:40:15.000000000","message":"Chris, Ruby we can use any external ip in this command.\nip -4 route get \u003cip address\u003e  - returns route information that is used on local machine to forward packets to remote \u003cip address\u003e\nThe default route will be the same for all remote IPs 4.2.2.1, 8.8.8.8, 208.67.222.222. What is the reason do not use 4.2.2.1 here?\n\nit is possible to replace L69 by\next_interface\u003d$(sudo ip netns exec qrouter-$router_id ip route show | awk \u0027/default/ {print $5}\u0027)\nr_net_gateway\u003d$(sudo ip netns exec qrouter-$router_id ip route show $ext_interface | awk \u0027{split($4,a,\"/\");print a[1]}\u0027)","commit_id":"c2f80bb102244b527801b4bd531e25971a5aaff3"},{"author":{"_account_id":6618,"name":"Ruby Loo","email":"opensrloo@gmail.com","username":"rloo"},"change_message_id":"fb5a2d79aa54c7644ad1b93284809d129ea1aca7","unresolved":false,"context_lines":[{"line_number":66,"context_line":"    # Add a route to baremetal network via Neutron public router."},{"line_number":67,"context_line":"    # ironic-conductor will be able to access the ironic nodes via this new route."},{"line_number":68,"context_line":"    local r_net_gateway"},{"line_number":69,"context_line":"    r_net_gateway\u003d$(sudo ip netns exec qrouter-$router_id ip -4 route get 4.2.2.1 |grep dev | awk \u0027{print $7}\u0027)"},{"line_number":70,"context_line":"    sudo ip route replace $RESOURCES_FIXED_RANGE via $r_net_gateway"},{"line_number":71,"context_line":""},{"line_number":72,"context_line":"    create_ovs_taps $net_id"}],"source_content_type":"text/x-sh","patch_set":12,"id":"7aa08908_7b2676bb","line":69,"in_reply_to":"7aa08908_5dd8d253","updated":"2016-06-06 15:18:33.000000000","message":"Vasyl, I\u0027d prefer if we could change it to something that isn\u0027t Google specific, unless there\u0027s a good reason for using the Google one. At the very least, we should document what/which one we are using.","commit_id":"c2f80bb102244b527801b4bd531e25971a5aaff3"},{"author":{"_account_id":14525,"name":"Vasyl Saienko","email":"vsaienko@mirantis.com","username":"vsaienko"},"change_message_id":"ab907ae2ed98c4845a9d5046f63b8e4fe38a6947","unresolved":false,"context_lines":[{"line_number":66,"context_line":"    # Add a route to baremetal network via Neutron public router."},{"line_number":67,"context_line":"    # ironic-conductor will be able to access the ironic nodes via this new route."},{"line_number":68,"context_line":"    local r_net_gateway"},{"line_number":69,"context_line":"    r_net_gateway\u003d$(sudo ip netns exec qrouter-$router_id ip -4 route get 4.2.2.1 |grep dev | awk \u0027{print $7}\u0027)"},{"line_number":70,"context_line":"    sudo ip route replace $RESOURCES_FIXED_RANGE via $r_net_gateway"},{"line_number":71,"context_line":""},{"line_number":72,"context_line":"    create_ovs_taps $net_id"}],"source_content_type":"text/x-sh","patch_set":12,"id":"7aa08908_8763071a","line":69,"in_reply_to":"7aa08908_67637bb2","updated":"2016-06-06 14:37:56.000000000","message":"4.2.2.1 is public google dns server, the command gets an default route in the namespace.","commit_id":"c2f80bb102244b527801b4bd531e25971a5aaff3"},{"author":{"_account_id":14525,"name":"Vasyl Saienko","email":"vsaienko@mirantis.com","username":"vsaienko"},"change_message_id":"425a4a5390e10f444ffbe979ee6084e376860de4","unresolved":false,"context_lines":[{"line_number":66,"context_line":"    # Add a route to baremetal network via Neutron public router."},{"line_number":67,"context_line":"    # ironic-conductor will be able to access the ironic nodes via this new route."},{"line_number":68,"context_line":"    local r_net_gateway"},{"line_number":69,"context_line":"    r_net_gateway\u003d$(sudo ip netns exec qrouter-$router_id ip -4 route get 4.2.2.1 |grep dev | awk \u0027{print $7}\u0027)"},{"line_number":70,"context_line":"    sudo ip route replace $RESOURCES_FIXED_RANGE via $r_net_gateway"},{"line_number":71,"context_line":""},{"line_number":72,"context_line":"    create_ovs_taps $net_id"}],"source_content_type":"text/x-sh","patch_set":12,"id":"7aa08908_d282d993","line":69,"in_reply_to":"7aa08908_7605ebc0","updated":"2016-06-06 21:40:15.000000000","message":"the change from patchset 13 doesn\u0027t work. It return gateway IP address while we need src ip address of outgoing interface. I restored state of 12 patchset.","commit_id":"c2f80bb102244b527801b4bd531e25971a5aaff3"},{"author":{"_account_id":14525,"name":"Vasyl Saienko","email":"vsaienko@mirantis.com","username":"vsaienko"},"change_message_id":"e0d0db2539df4456c8ef5fbc7a0d5603bced47ef","unresolved":false,"context_lines":[{"line_number":66,"context_line":"    # Add a route to baremetal network via Neutron public router."},{"line_number":67,"context_line":"    # ironic-conductor will be able to access the ironic nodes via this new route."},{"line_number":68,"context_line":"    local r_net_gateway"},{"line_number":69,"context_line":"    r_net_gateway\u003d$(sudo ip netns exec qrouter-$router_id ip -4 route get 4.2.2.1 |grep dev | awk \u0027{print $7}\u0027)"},{"line_number":70,"context_line":"    sudo ip route replace $RESOURCES_FIXED_RANGE via $r_net_gateway"},{"line_number":71,"context_line":""},{"line_number":72,"context_line":"    create_ovs_taps $net_id"}],"source_content_type":"text/x-sh","patch_set":12,"id":"7aa08908_7605ebc0","line":69,"in_reply_to":"7aa08908_7b2676bb","updated":"2016-06-06 15:36:37.000000000","message":"Done, launched grenade jobs: https://review.openstack.org/#/c/311109","commit_id":"c2f80bb102244b527801b4bd531e25971a5aaff3"},{"author":{"_account_id":5805,"name":"Chris Krelle","email":"nobodycam@gmail.com","username":"nobodycam"},"change_message_id":"ddfb27f3197f580cdb790733b99675a76c850cd6","unresolved":false,"context_lines":[{"line_number":66,"context_line":"    # Add a route to baremetal network via Neutron public router."},{"line_number":67,"context_line":"    # ironic-conductor will be able to access the ironic nodes via this new route."},{"line_number":68,"context_line":"    local r_net_gateway"},{"line_number":69,"context_line":"    r_net_gateway\u003d$(sudo ip netns exec qrouter-$router_id ip -4 route get 4.2.2.1 |grep dev | awk \u0027{print $7}\u0027)"},{"line_number":70,"context_line":"    sudo ip route replace $RESOURCES_FIXED_RANGE via $r_net_gateway"},{"line_number":71,"context_line":""},{"line_number":72,"context_line":"    create_ovs_taps $net_id"}],"source_content_type":"text/x-sh","patch_set":12,"id":"7aa08908_5dd8d253","line":69,"in_reply_to":"7aa08908_8763071a","updated":"2016-06-06 15:01:44.000000000","message":"I think its Level3, Google is 8.8.8.8, If we have to have a something here might it be better to use one of the OpenDns servers (208.67.222.222, 208.67.220.220)","commit_id":"c2f80bb102244b527801b4bd531e25971a5aaff3"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"fa4e7bd268e0ba341fb6b3641c7968cd303166ae","unresolved":false,"context_lines":[{"line_number":66,"context_line":"    # Add a route to baremetal network via Neutron public router."},{"line_number":67,"context_line":"    # ironic-conductor will be able to access the ironic nodes via this new route."},{"line_number":68,"context_line":"    local r_net_gateway"},{"line_number":69,"context_line":"    r_net_gateway\u003d$(sudo ip netns exec qrouter-$router_id ip -4 route get 4.2.2.1 |grep dev | awk \u0027{print $7}\u0027)"},{"line_number":70,"context_line":"    sudo ip route replace $RESOURCES_FIXED_RANGE via $r_net_gateway"},{"line_number":71,"context_line":""},{"line_number":72,"context_line":"    create_ovs_taps $net_id"}],"source_content_type":"text/x-sh","patch_set":12,"id":"7aa08908_0af9de80","line":69,"in_reply_to":"7aa08908_8763071a","updated":"2016-06-06 15:01:09.000000000","message":"nit: In that case, I think think we need to make an inline note of exactly what the line is doing.  Perhaps \"Identify the default router for the neutron virtual router.\"? \n\nTotal side note that does not matter, for what its worth, this shows as Level3 according to ARIN records, but I can\u0027t query rwhois for some reason to find out who it is assigned to. ;)","commit_id":"c2f80bb102244b527801b4bd531e25971a5aaff3"},{"author":{"_account_id":6618,"name":"Ruby Loo","email":"opensrloo@gmail.com","username":"rloo"},"change_message_id":"2766141d3a1f137272c09baf1ccdfba63ee8aee8","unresolved":false,"context_lines":[{"line_number":66,"context_line":"    # Add a route to baremetal network via Neutron public router."},{"line_number":67,"context_line":"    # ironic-conductor will be able to access the ironic nodes via this new route."},{"line_number":68,"context_line":"    local r_net_gateway"},{"line_number":69,"context_line":"    r_net_gateway\u003d$(sudo ip netns exec qrouter-$router_id ip -4 route get 4.2.2.1 |grep dev | awk \u0027{print $7}\u0027)"},{"line_number":70,"context_line":"    sudo ip route replace $RESOURCES_FIXED_RANGE via $r_net_gateway"},{"line_number":71,"context_line":""},{"line_number":72,"context_line":"    create_ovs_taps $net_id"}],"source_content_type":"text/x-sh","patch_set":12,"id":"7aa08908_4e4abdad","line":69,"in_reply_to":"7aa08908_d282d993","updated":"2016-06-07 01:00:17.000000000","message":"@Vasyl. wrt why I am not fond of Google, it is because it is Google. (Maybe just a personal thing.) OpenDNS is part of Cisco so I guess they are somewhat equivalent for this particular use, so either is fine :)","commit_id":"c2f80bb102244b527801b4bd531e25971a5aaff3"},{"author":{"_account_id":14525,"name":"Vasyl Saienko","email":"vsaienko@mirantis.com","username":"vsaienko"},"change_message_id":"fe98c0f203e520a9c549f06d15128f5c418070e6","unresolved":false,"context_lines":[{"line_number":66,"context_line":"    # Add a route to baremetal network via Neutron public router."},{"line_number":67,"context_line":"    # ironic-conductor will be able to access the ironic nodes via this new route."},{"line_number":68,"context_line":"    local r_net_gateway"},{"line_number":69,"context_line":"    r_net_gateway\u003d$(sudo ip netns exec qrouter-$router_id ip -4 route show | awk \u0027/default/ {print $3}\u0027)"},{"line_number":70,"context_line":"    sudo ip route replace $RESOURCES_FIXED_RANGE via $r_net_gateway"},{"line_number":71,"context_line":""},{"line_number":72,"context_line":"    create_ovs_taps $net_id"}],"source_content_type":"text/x-sh","patch_set":13,"id":"7aa08908_52b549ec","line":69,"range":{"start_line":69,"start_character":58,"end_line":69,"end_character":103},"updated":"2016-06-06 21:21:28.000000000","message":"this return an IP address of gateway, while we need src ip address of outgoing interface","commit_id":"0be2b2b7806c99763116d1743dbec11f6ebe73f4"},{"author":{"_account_id":6618,"name":"Ruby Loo","email":"opensrloo@gmail.com","username":"rloo"},"change_message_id":"e2178ce6a14781a4a8f9361c13877a3d80c7f3cd","unresolved":false,"context_lines":[{"line_number":39,"context_line":"    # from ironic-conductor and creates taps between br-int and brbm."},{"line_number":40,"context_line":"    # ironic-conductor will be able to access the ironic nodes via this new"},{"line_number":41,"context_line":"    # network."},{"line_number":42,"context_line":"    # NOTE (vsaienko) use OSC when Neutron commands are supported in the stable"},{"line_number":43,"context_line":"    # release."},{"line_number":44,"context_line":"    local net_id"},{"line_number":45,"context_line":"    net_id\u003d$(openstack network create --share $NEUTRON_NET -f value -c id)"}],"source_content_type":"text/x-sh","patch_set":16,"id":"7aa08908_ae8fe121","line":42,"updated":"2016-06-07 00:50:54.000000000","message":"carrying forward Julia\u0027s nit, s/NOTE/TODO/","commit_id":"3de027ded56bd7b013aee2da88ad32371bca845f"}]}
