)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":5805,"name":"Chris Krelle","email":"nobodycam@gmail.com","username":"nobodycam"},"change_message_id":"a7097e7fbeb0a3bd7bbfdf53c1c2b3b1b32a0513","unresolved":false,"context_lines":[{"line_number":4,"context_line":"Commit:     Alexander Gordeev \u003cagordeev@mirantis.com\u003e"},{"line_number":5,"context_line":"CommitDate: 2014-02-12 18:54:46 +0400"},{"line_number":6,"context_line":""},{"line_number":7,"context_line":"WIP. Ironic devstack testing part"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"Add ability to create/register qemu vms for Ironic functional testing purposes"},{"line_number":10,"context_line":""}],"source_content_type":"text/x-gerrit-commit-message","patch_set":6,"id":"AAAAUX%2F%2FUmo%3D","line":7,"updated":"2014-02-14 00:14:10.000000000","message":"WIP not needed here setting status is enough.\nA better description line would be good.","commit_id":"ef800d14dc465da74861232dc81194f33239a512"},{"author":{"_account_id":5805,"name":"Chris Krelle","email":"nobodycam@gmail.com","username":"nobodycam"},"change_message_id":"fd1ef7449d6e12028fcdd18356807029fe03bc11","unresolved":false,"context_lines":[{"line_number":8,"context_line":""},{"line_number":9,"context_line":"Add ability to create/register qemu vms for Ironic functional testing purposes"},{"line_number":10,"context_line":""},{"line_number":11,"context_line":"https://etherpad.openstack.org/p/IronicDevstackTesting"},{"line_number":12,"context_line":""},{"line_number":13,"context_line":"Change-Id: If452438fcc0ff562531b33a36cd189b235654b48"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":8,"id":"AAAAUX%2F%2BqJg%3D","line":11,"updated":"2014-02-19 23:29:26.000000000","message":"please replace link with tag \"implements bp:deprecate-baremetal-driver\"","commit_id":"ec7c2eb46f09dc83a8bbcc44de9dc1c4c6d23545"}],"extras.d/50-ironic.sh":[{"author":{"_account_id":2750,"name":"Sean Dague","email":"sean@dague.net","username":"sdague"},"change_message_id":"5fd36c7afc21bf4d53f48d0692a76233feb1b7c2","unresolved":false,"context_lines":[{"line_number":25,"context_line":"        echo_summary \"Starting Ironic\""},{"line_number":26,"context_line":"        start_ironic"},{"line_number":27,"context_line":""},{"line_number":28,"context_line":"        if is_service_enabled g-api g-reg ir-api ir-cond n-api n-cond n-cpu q-svc q-dhcp q-agt key; then"},{"line_number":29,"context_line":"            if [[ \"$IRONIC_BAREMETAL_BASIC_OPS\" \u003d \"True\" ]]; then"},{"line_number":30,"context_line":"                TOKEN\u003d$(keystone token-get | grep \u0027 id \u0027 | get_field 2)"},{"line_number":31,"context_line":"                die_if_not_set $LINENO TOKEN \"Keystone fail to get token\""}],"source_content_type":"text/x-sh","patch_set":11,"id":"AAAAU3%2F%2Fj%2B0%3D","line":28,"updated":"2014-02-25 22:32:25.000000000","message":"is_service_enabled is an or, so I\u0027m sure this list should be shorter than this.","commit_id":"00aa6de8b72035cb6f092ef6a8e40cb615e1e3c9"},{"author":{"_account_id":2750,"name":"Sean Dague","email":"sean@dague.net","username":"sdague"},"change_message_id":"ebcbae9e2853cf4c86adfe9a731d5f2cd3638817","unresolved":false,"context_lines":[{"line_number":25,"context_line":"        echo_summary \"Starting Ironic\""},{"line_number":26,"context_line":"        start_ironic"},{"line_number":27,"context_line":""},{"line_number":28,"context_line":"        if is_service_enabled g-api g-reg ir-api ir-cond n-api n-cond n-cpu q-svc q-dhcp q-agt key; then"},{"line_number":29,"context_line":"            if [[ \"$IRONIC_BAREMETAL_BASIC_OPS\" \u003d \"True\" ]]; then"},{"line_number":30,"context_line":"                TOKEN\u003d$(keystone token-get | grep \u0027 id \u0027 | get_field 2)"},{"line_number":31,"context_line":"                die_if_not_set $LINENO TOKEN \"Keystone fail to get token\""}],"source_content_type":"text/x-sh","patch_set":11,"id":"AAAAVX%2F%2F%2BwM%3D","line":28,"in_reply_to":"AAAAU3%2F%2Ff5s%3D","updated":"2014-02-27 01:40:30.000000000","message":"right, the point is it\u0027s an \u0027or\u0027, which means that as written if only keystone is enabled, then ironic gets configured. Even if Ironic is not enabled.","commit_id":"00aa6de8b72035cb6f092ef6a8e40cb615e1e3c9"},{"author":{"_account_id":8003,"name":"Aleksandr Gordeev","email":"agordeev@mirantis.com","username":"agordeev"},"change_message_id":"ae5b6d876e7f8f74c8669a858fe258ca4e21d29b","unresolved":false,"context_lines":[{"line_number":25,"context_line":"        echo_summary \"Starting Ironic\""},{"line_number":26,"context_line":"        start_ironic"},{"line_number":27,"context_line":""},{"line_number":28,"context_line":"        if is_service_enabled g-api g-reg ir-api ir-cond n-api n-cond n-cpu q-svc q-dhcp q-agt key; then"},{"line_number":29,"context_line":"            if [[ \"$IRONIC_BAREMETAL_BASIC_OPS\" \u003d \"True\" ]]; then"},{"line_number":30,"context_line":"                TOKEN\u003d$(keystone token-get | grep \u0027 id \u0027 | get_field 2)"},{"line_number":31,"context_line":"                die_if_not_set $LINENO TOKEN \"Keystone fail to get token\""}],"source_content_type":"text/x-sh","patch_set":11,"id":"AAAAU3%2F%2Ff5s%3D","line":28,"in_reply_to":"AAAAU3%2F%2Fj%2B0%3D","updated":"2014-02-26 14:22:16.000000000","message":"all that services are really necessary for ironic testing. Ironic needs glance, keystone, nova and neutron as well. \n\nDo you have an idea how to shorten this list?","commit_id":"00aa6de8b72035cb6f092ef6a8e40cb615e1e3c9"},{"author":{"_account_id":970,"name":"Dean Troyer","email":"dtroyer@gmail.com","username":"dtroyer"},"change_message_id":"2530a04cf53b9ccbc086d6a344f072b2b5b9e5d8","unresolved":false,"context_lines":[{"line_number":25,"context_line":"        echo_summary \"Starting Ironic\""},{"line_number":26,"context_line":"        start_ironic"},{"line_number":27,"context_line":""},{"line_number":28,"context_line":"        if is_service_enabled g-api g-reg ir-api ir-cond n-api n-cond n-cpu q-svc q-dhcp q-agt key; then"},{"line_number":29,"context_line":"            if [[ \"$IRONIC_BAREMETAL_BASIC_OPS\" \u003d \"True\" ]]; then"},{"line_number":30,"context_line":"                TOKEN\u003d$(keystone token-get | grep \u0027 id \u0027 | get_field 2)"},{"line_number":31,"context_line":"                die_if_not_set $LINENO TOKEN \"Keystone fail to get token\""}],"source_content_type":"text/x-sh","patch_set":11,"id":"AAAAU3%2F%2FjcE%3D","line":28,"in_reply_to":"AAAAU3%2F%2Fj%2B0%3D","updated":"2014-02-26 20:51:38.000000000","message":"it also still supports aliases, so you could just test for \u0027glance ironic nova neutron key\u0027","commit_id":"00aa6de8b72035cb6f092ef6a8e40cb615e1e3c9"},{"author":{"_account_id":6618,"name":"Ruby Loo","email":"opensrloo@gmail.com","username":"rloo"},"change_message_id":"47f76a7aa4340f1b9543de03870d109e2a84faf6","unresolved":false,"context_lines":[{"line_number":40,"context_line":"                    upload_baremetal_image $image_url $TOKEN"},{"line_number":41,"context_line":"                done"},{"line_number":42,"context_line":""},{"line_number":43,"context_line":"                create_brigde_and_vms"},{"line_number":44,"context_line":"                enroll_vms"},{"line_number":45,"context_line":"            fi"},{"line_number":46,"context_line":"        fi"}],"source_content_type":"text/x-sh","patch_set":11,"id":"AAAAVX%2F%2F%2FAE%3D","line":43,"updated":"2014-02-27 01:25:07.000000000","message":"maybe it could be \u0027create_bridge_and_vms\u0027?","commit_id":"00aa6de8b72035cb6f092ef6a8e40cb615e1e3c9"},{"author":{"_account_id":970,"name":"Dean Troyer","email":"dtroyer@gmail.com","username":"dtroyer"},"change_message_id":"2530a04cf53b9ccbc086d6a344f072b2b5b9e5d8","unresolved":false,"context_lines":[{"line_number":49,"context_line":"    if [[ \"$1\" \u003d\u003d \"unstack\" ]]; then"},{"line_number":50,"context_line":"        stop_ironic"},{"line_number":51,"context_line":"        rm -f $IRONIC_VM_MACS_CSV_FILE"},{"line_number":52,"context_line":"        sudo pkill atftpd"},{"line_number":53,"context_line":"    fi"},{"line_number":54,"context_line":""},{"line_number":55,"context_line":"    if [[ \"$1\" \u003d\u003d \"clean\" ]]; then"}],"source_content_type":"text/x-sh","patch_set":11,"id":"AAAAU3%2F%2FZuo%3D","line":52,"updated":"2014-02-26 20:51:38.000000000","message":"Is there not a system-level command to do this?  ie:\n\n service atftpd stop","commit_id":"00aa6de8b72035cb6f092ef6a8e40cb615e1e3c9"}],"files/apts/ironic":[{"author":{"_account_id":2889,"name":"Aeva Black","email":"aeva.online@gmail.com","username":"tenbrae"},"change_message_id":"73555ebc16d7484ef4df077372c833b6ba52377b","unresolved":false,"context_lines":[{"line_number":1,"context_line":"uuid-runtime"},{"line_number":2,"context_line":"openssh-client"},{"line_number":3,"context_line":"virtinst"}],"source_content_type":"application/octet-stream","patch_set":6,"id":"AAAAUX%2F%2B9zc%3D","line":3,"updated":"2014-02-17 23:15:21.000000000","message":"need to add \"syslinux\" to get pxelinux.0 file","commit_id":"ef800d14dc465da74861232dc81194f33239a512"},{"author":{"_account_id":970,"name":"Dean Troyer","email":"dtroyer@gmail.com","username":"dtroyer"},"change_message_id":"2530a04cf53b9ccbc086d6a344f072b2b5b9e5d8","unresolved":false,"context_lines":[{"line_number":1,"context_line":"uuid-runtime"},{"line_number":2,"context_line":"openssh-client"},{"line_number":3,"context_line":"syslinux"},{"line_number":4,"context_line":"atftpd"}],"source_content_type":"application/octet-stream","patch_set":11,"id":"AAAAU3%2F%2FZyA%3D","line":1,"updated":"2014-02-26 20:51:38.000000000","message":"Sort these please","commit_id":"00aa6de8b72035cb6f092ef6a8e40cb615e1e3c9"},{"author":{"_account_id":7419,"name":"Imre Farkas","email":"farkas.imre@gmail.com","username":"ifarkas"},"change_message_id":"721d67efe10f9836303d8a247050f92a48ab0cfc","unresolved":false,"context_lines":[{"line_number":7,"context_line":"python-libvirt"},{"line_number":8,"context_line":"syslinux"},{"line_number":9,"context_line":"tftpd-hpa"},{"line_number":10,"context_line":"xinetd"}],"source_content_type":"application/octet-stream","patch_set":23,"id":"AAAAWH%2F%2Fzvg%3D","line":10,"updated":"2014-03-13 17:14:27.000000000","message":"The file files/rpms/ironic is missing with similar content.","commit_id":"cb284fef06ebe7aeb221b153f038b588338c8936"}],"lib/baremetal":[{"author":{"_account_id":8106,"name":"Haomeng,Wang","email":"wanghaomeng@gmail.com","username":"whaom"},"change_message_id":"c30bab9ffe5722fccbdebb74ea25566d63075998","unresolved":false,"context_lines":[{"line_number":256,"context_line":"        BM_DEPLOY_KERNEL\u003dbm-deploy.kernel"},{"line_number":257,"context_line":"        BM_DEPLOY_RAMDISK\u003dbm-deploy.initramfs"},{"line_number":258,"context_line":"        if [ ! -e \"$TOP_DIR/files/$BM_DEPLOY_KERNEL\" -o ! -e \"$TOP_DIR/files/$BM_DEPLOY_RAMDISK\" ]; then"},{"line_number":259,"context_line":"            $BM_IMAGE_BUILD_DIR/bin/ramdisk-image-create $BM_DEPLOY_FLAVOR \\"},{"line_number":260,"context_line":"                -o $TOP_DIR/files/bm-deploy"},{"line_number":261,"context_line":"        fi"},{"line_number":262,"context_line":"    fi"}],"source_content_type":"application/octet-stream","patch_set":16,"id":"AAAAVn%2F%2Flhg%3D","line":259,"updated":"2014-03-05 07:56:56.000000000","message":"I can not find where scripts we are installing diskimage-builder? I try this script, can not find \u0027/opt/stack/diskimage-builder/bin/ramdisk-image-create\u0027 command.","commit_id":"427a334df2fe3a77025161c9a38980312f1bdc97"},{"author":{"_account_id":8003,"name":"Aleksandr Gordeev","email":"agordeev@mirantis.com","username":"agordeev"},"change_message_id":"b725da9448f046e658abc99db66dd1e369ca0b59","unresolved":false,"context_lines":[{"line_number":256,"context_line":"        BM_DEPLOY_KERNEL\u003dbm-deploy.kernel"},{"line_number":257,"context_line":"        BM_DEPLOY_RAMDISK\u003dbm-deploy.initramfs"},{"line_number":258,"context_line":"        if [ ! -e \"$TOP_DIR/files/$BM_DEPLOY_KERNEL\" -o ! -e \"$TOP_DIR/files/$BM_DEPLOY_RAMDISK\" ]; then"},{"line_number":259,"context_line":"            $BM_IMAGE_BUILD_DIR/bin/ramdisk-image-create $BM_DEPLOY_FLAVOR \\"},{"line_number":260,"context_line":"                -o $TOP_DIR/files/bm-deploy"},{"line_number":261,"context_line":"        fi"},{"line_number":262,"context_line":"    fi"}],"source_content_type":"application/octet-stream","patch_set":16,"id":"AAAAVn%2F%2FkcM%3D","line":259,"in_reply_to":"AAAAVn%2F%2Flhg%3D","updated":"2014-03-05 10:19:31.000000000","message":"Done","commit_id":"427a334df2fe3a77025161c9a38980312f1bdc97"},{"author":{"_account_id":7419,"name":"Imre Farkas","email":"farkas.imre@gmail.com","username":"ifarkas"},"change_message_id":"b252e7d756a8447c9692e532c998c02a17aab455","unresolved":false,"context_lines":[{"line_number":217,"context_line":"    token\u003d$1"},{"line_number":218,"context_line":""},{"line_number":219,"context_line":"    if [ \"$BM_BUILD_DEPLOY_RAMDISK\" \u003d \"True\" ]; then"},{"line_number":220,"context_line":"        BM_DEPLOY_KERNEL\u003dbm-deploy.kernel"},{"line_number":221,"context_line":"        BM_DEPLOY_RAMDISK\u003dbm-deploy.initramfs"},{"line_number":222,"context_line":"        if [ ! -e \"$TOP_DIR/files/$BM_DEPLOY_KERNEL\" -o ! -e \"$TOP_DIR/files/$BM_DEPLOY_RAMDISK\" ]; then"},{"line_number":223,"context_line":"            $BM_IMAGE_BUILD_DIR/bin/ramdisk-image-create $BM_DEPLOY_FLAVOR \\"}],"source_content_type":"application/octet-stream","patch_set":20,"id":"AAAAVn%2F%2FCfM%3D","line":220,"updated":"2014-03-10 18:53:33.000000000","message":"Shouldn\u0027t both bm-deploy.initramfs and bm-deploy.kernel be cleaned up with unstack.sh?","commit_id":"b4a2ce136950852b2ed8ba9e61e2aa4abce5e9ec"},{"author":{"_account_id":8003,"name":"Aleksandr Gordeev","email":"agordeev@mirantis.com","username":"agordeev"},"change_message_id":"f0de899e8660aa4cab124fb58a8e4f48a944e083","unresolved":false,"context_lines":[{"line_number":217,"context_line":"    token\u003d$1"},{"line_number":218,"context_line":""},{"line_number":219,"context_line":"    if [ \"$BM_BUILD_DEPLOY_RAMDISK\" \u003d \"True\" ]; then"},{"line_number":220,"context_line":"        BM_DEPLOY_KERNEL\u003dbm-deploy.kernel"},{"line_number":221,"context_line":"        BM_DEPLOY_RAMDISK\u003dbm-deploy.initramfs"},{"line_number":222,"context_line":"        if [ ! -e \"$TOP_DIR/files/$BM_DEPLOY_KERNEL\" -o ! -e \"$TOP_DIR/files/$BM_DEPLOY_RAMDISK\" ]; then"},{"line_number":223,"context_line":"            $BM_IMAGE_BUILD_DIR/bin/ramdisk-image-create $BM_DEPLOY_FLAVOR \\"}],"source_content_type":"application/octet-stream","patch_set":20,"id":"AAAAVn%2F%2B7Nw%3D","line":220,"in_reply_to":"AAAAVn%2F%2FCfM%3D","updated":"2014-03-11 10:51:51.000000000","message":"I\u0027m not sure since it\u0027s taking additional minutes for building those images","commit_id":"b4a2ce136950852b2ed8ba9e61e2aa4abce5e9ec"},{"author":{"_account_id":2889,"name":"Aeva Black","email":"aeva.online@gmail.com","username":"tenbrae"},"change_message_id":"cbe824026c424bafb2ac9db256fd26ad42f5c6fd","unresolved":false,"context_lines":[{"line_number":140,"context_line":""},{"line_number":141,"context_line":"# If you need to add any extra flavors to the deploy ramdisk image"},{"line_number":142,"context_line":"# eg, specific network drivers, specify them here"},{"line_number":143,"context_line":"BM_DEPLOY_FLAVOR\u003d${BM_DEPLOY_FLAVOR:-deploy}"},{"line_number":144,"context_line":""},{"line_number":145,"context_line":"# set URL and version for google shell-in-a-box"},{"line_number":146,"context_line":"BM_SHELL_IN_A_BOX\u003d${BM_SHELL_IN_A_BOX:-http://shellinabox.googlecode.com/files/shellinabox-2.14.tar.gz}"}],"source_content_type":"application/octet-stream","patch_set":22,"id":"AAAAWH%2F%2F0p8%3D","line":143,"updated":"2014-03-13 15:33:41.000000000","message":"I think this needs to include a dist name now, eg. \"fedora\" or \"ubuntu\", depending on what the host is","commit_id":"ea489de2fa01dd46cc21ae98532cf39dfff52d2a"},{"author":{"_account_id":2889,"name":"Aeva Black","email":"aeva.online@gmail.com","username":"tenbrae"},"change_message_id":"cbe824026c424bafb2ac9db256fd26ad42f5c6fd","unresolved":false,"context_lines":[{"line_number":219,"context_line":"    if [ \"$BM_BUILD_DEPLOY_RAMDISK\" \u003d \"True\" ]; then"},{"line_number":220,"context_line":"        BM_DEPLOY_KERNEL\u003dbm-deploy.kernel"},{"line_number":221,"context_line":"        BM_DEPLOY_RAMDISK\u003dbm-deploy.initramfs"},{"line_number":222,"context_line":"        if [ ! -e \"$TOP_DIR/files/$BM_DEPLOY_KERNEL\" -o ! -e \"$TOP_DIR/files/$BM_DEPLOY_RAMDISK\" ]; then"},{"line_number":223,"context_line":"            $BM_IMAGE_BUILD_DIR/bin/ramdisk-image-create $BM_DEPLOY_FLAVOR \\"},{"line_number":224,"context_line":"                -o $TOP_DIR/files/bm-deploy"},{"line_number":225,"context_line":"        fi"}],"source_content_type":"application/octet-stream","patch_set":22,"id":"AAAAWH%2F%2F0pk%3D","line":222,"updated":"2014-03-13 15:33:41.000000000","message":"please add a check here for $OFFLINE -- if True, and the target files do not exist, devstack should die() since it can not honor both requirements. Building the deploy ramdisk is not possible without network access, even if diskimage-builder has cached the base image already.\n\nThe remainder of upload_baremetal_deploy() should continue to work in OFFLINE mode, as long as $BM_DEPLOY_KERNEL and $BM_DEPLOY_RAMDISK exist.","commit_id":"ea489de2fa01dd46cc21ae98532cf39dfff52d2a"}],"lib/ironic":[{"author":{"_account_id":2889,"name":"Aeva Black","email":"aeva.online@gmail.com","username":"tenbrae"},"change_message_id":"c833044cf5a149b638a288396a839ec8257455f4","unresolved":false,"context_lines":[{"line_number":40,"context_line":"TRIPLEO_INCUBATOR_DIR\u003d${TRIPLEO_INCUBATOR_DIR:-$DEST/tripleo-incubator}"},{"line_number":41,"context_line":"TRIPLEO_INCUBATOR_BRANCH\u003d${TRIPLEO_INCUBATOR_BRANCH:-master}"},{"line_number":42,"context_line":"IRONIC_BAREMETAL_BASIC_OPS\u003d$(trueorfalse False $IRONIC_BAREMETAL_BASIC_OPS)"},{"line_number":43,"context_line":"IRONIC_SSH_USERNAME\u003d${IRONIC_SSH_USERNAME:-root}"},{"line_number":44,"context_line":"IRONIC_SSH_KEY_DIR\u003d${IRONIC_SSH_KEY_DIR:-$DEST/ssh_keys}"},{"line_number":45,"context_line":"IRONIC_SSH_KEY_FILENAME\u003d${IRONIC_SSH_KEY_FILENAME:-ironic_key}"},{"line_number":46,"context_line":"IRONIC_VM_SSH_PORT\u003d${IRONIC_VM_SSH_PORT:-2222}"}],"source_content_type":"application/octet-stream","patch_set":1,"id":"AAAAUH%2F98SI%3D","line":43,"updated":"2014-01-31 20:48:18.000000000","message":"I think the default should be `whoami`, not \"root\"","commit_id":"635da82dfa8eefc320dc36197164da935553a53c"},{"author":{"_account_id":2889,"name":"Aeva Black","email":"aeva.online@gmail.com","username":"tenbrae"},"change_message_id":"c833044cf5a149b638a288396a839ec8257455f4","unresolved":false,"context_lines":[{"line_number":262,"context_line":"    sudo chmod 777 /tftpboot"},{"line_number":263,"context_line":"    sudo mkdir -p /tftpboot/pxelinux.cfg"},{"line_number":264,"context_line":""},{"line_number":265,"context_line":"    PXEBIN\u003d/usr/share/syslinux/pxelinux.0"},{"line_number":266,"context_line":"    if [ ! -f $PXEBIN ]; then"},{"line_number":267,"context_line":"        PXEBIN\u003d/usr/lib/syslinux/pxelinux.0"},{"line_number":268,"context_line":"        if [ ! -f $PXEBIN ]; then"}],"source_content_type":"application/octet-stream","patch_set":1,"id":"AAAAUH%2F98VM%3D","line":265,"updated":"2014-01-31 20:48:18.000000000","message":"this is dist-specific. On ubuntu, it is /usr/lib/syslinux/pxelinux.0","commit_id":"635da82dfa8eefc320dc36197164da935553a53c"},{"author":{"_account_id":2889,"name":"Aeva Black","email":"aeva.online@gmail.com","username":"tenbrae"},"change_message_id":"c833044cf5a149b638a288396a839ec8257455f4","unresolved":false,"context_lines":[{"line_number":276,"context_line":""},{"line_number":277,"context_line":"function create_brigde_and_vms() {"},{"line_number":278,"context_line":""},{"line_number":279,"context_line":"    git_clone $TRIPLEO_INCUBATOR_REPO $TRIPLEO_INCUBATOR_DIR $TRIPLEO_INCUBATOR_BRANCH "},{"line_number":280,"context_line":""},{"line_number":281,"context_line":"    $TRIPLEO_INCUBATOR_DIR/scripts/setup-network"},{"line_number":282,"context_line":""}],"source_content_type":"application/octet-stream","patch_set":1,"id":"AAAAUH%2F98V0%3D","line":279,"updated":"2014-01-31 20:48:18.000000000","message":"whitespace","commit_id":"635da82dfa8eefc320dc36197164da935553a53c"},{"author":{"_account_id":2889,"name":"Aeva Black","email":"aeva.online@gmail.com","username":"tenbrae"},"change_message_id":"c833044cf5a149b638a288396a839ec8257455f4","unresolved":false,"context_lines":[{"line_number":303,"context_line":"            --boot network,hd \\"},{"line_number":304,"context_line":"            --noreboot \\"},{"line_number":305,"context_line":"            --noautoconsole"},{"line_number":306,"context_line":"    done  "},{"line_number":307,"context_line":""},{"line_number":308,"context_line":"}"},{"line_number":309,"context_line":""}],"source_content_type":"application/octet-stream","patch_set":1,"id":"AAAAUH%2F98VI%3D","line":306,"updated":"2014-01-31 20:48:18.000000000","message":"whitespace","commit_id":"635da82dfa8eefc320dc36197164da935553a53c"},{"author":{"_account_id":2889,"name":"Aeva Black","email":"aeva.online@gmail.com","username":"tenbrae"},"change_message_id":"c833044cf5a149b638a288396a839ec8257455f4","unresolved":false,"context_lines":[{"line_number":342,"context_line":"function configure_ironic_ssh_keypair() {"},{"line_number":343,"context_line":"    # Generating ssh key pair for stack user"},{"line_number":344,"context_line":"    if [[ ! -d $IRONIC_SSH_KEY_DIR ]]; then"},{"line_number":345,"context_line":"        sudo mkdir -p $IRONIC_SSH_KEY_DIR"},{"line_number":346,"context_line":"    fi"},{"line_number":347,"context_line":"    echo -e \u0027n\\n\u0027 | ssh-keygen -q -t rsa -P \u0027\u0027 -f $IRONIC_SSH_KEY_DIR/$IRONIC_SSH_KEY_FILENAME"},{"line_number":348,"context_line":"    if [[ ! -d /root/.ssh ]]; then"}],"source_content_type":"application/octet-stream","patch_set":1,"id":"AAAAUH%2F98Ss%3D","line":345,"updated":"2014-01-31 20:48:18.000000000","message":"dir should be chown\u0027d to ironic","commit_id":"635da82dfa8eefc320dc36197164da935553a53c"},{"author":{"_account_id":2889,"name":"Aeva Black","email":"aeva.online@gmail.com","username":"tenbrae"},"change_message_id":"c833044cf5a149b638a288396a839ec8257455f4","unresolved":false,"context_lines":[{"line_number":345,"context_line":"        sudo mkdir -p $IRONIC_SSH_KEY_DIR"},{"line_number":346,"context_line":"    fi"},{"line_number":347,"context_line":"    echo -e \u0027n\\n\u0027 | ssh-keygen -q -t rsa -P \u0027\u0027 -f $IRONIC_SSH_KEY_DIR/$IRONIC_SSH_KEY_FILENAME"},{"line_number":348,"context_line":"    if [[ ! -d /root/.ssh ]]; then"},{"line_number":349,"context_line":"        sudo mkdir -p /root/.ssh"},{"line_number":350,"context_line":"        sudo chmod 700 /root/.ssh"},{"line_number":351,"context_line":"    fi"}],"source_content_type":"application/octet-stream","patch_set":1,"id":"AAAAUH%2F98SU%3D","line":348,"updated":"2014-01-31 20:48:18.000000000","message":"I think it would be better to SSH as the current user (whoever is running stack.sh) rather than as root.\n\nThis step should ensure the current user has the necessary privileges, eg. to start/stop/list VMs.","commit_id":"635da82dfa8eefc320dc36197164da935553a53c"},{"author":{"_account_id":2889,"name":"Aeva Black","email":"aeva.online@gmail.com","username":"tenbrae"},"change_message_id":"c833044cf5a149b638a288396a839ec8257455f4","unresolved":false,"context_lines":[{"line_number":356,"context_line":"function configure_ironic_sshd() {"},{"line_number":357,"context_line":"    # Ensure sshd server accepts connections from localhost only"},{"line_number":358,"context_line":"    sudo sed -i -e \u00270,/ListenAddress/s/ListenAddress.*/ListenAddress 127.0.0.1:2222/\u0027 /etc/ssh/sshd_config"},{"line_number":359,"context_line":"    #TODO(agordeev): use IRONIC_VM_SSH_PORT"},{"line_number":360,"context_line":"    #sudo sed -i -e \u0027s/\\s*[#]Port.*/Port 2222/g\u0027 /etc/ssh/sshd_config"},{"line_number":361,"context_line":"    #TODO(agordeev): add using $SSH_SERVICE_NAME for different linux distros"},{"line_number":362,"context_line":"    restart_service ssh"}],"source_content_type":"application/octet-stream","patch_set":1,"id":"AAAAUH%2F98Rw%3D","line":359,"updated":"2014-01-31 20:48:18.000000000","message":"This TODO needs to be done before landing this patch","commit_id":"635da82dfa8eefc320dc36197164da935553a53c"},{"author":{"_account_id":2889,"name":"Aeva Black","email":"aeva.online@gmail.com","username":"tenbrae"},"change_message_id":"4447bb387c3fde14f7aad61fc7b93063ee8fcad9","unresolved":false,"context_lines":[{"line_number":279,"context_line":""},{"line_number":280,"context_line":"function start_dnsmasq_for_vms() {"},{"line_number":281,"context_line":""},{"line_number":282,"context_line":"    if ! ps -e | grep dnsmasq | grep /tftpboot; then"},{"line_number":283,"context_line":"        sudo dnsmasq --conf-file\u003d --port\u003d69 --enable-tftp --tftp-root\u003d/tftpboot --dhcp-boot\u003dpxelinux.0 --pid-file\u003d/var/run/dnsmasq.pid --interface\u003d$IRONIC_VM_NETWORK_BRIDGE --dhcp-range\u003d$IRONIC_VM_NETWORK_DHCP_RANGE"},{"line_number":284,"context_line":"    fi"},{"line_number":285,"context_line":""}],"source_content_type":"application/octet-stream","patch_set":3,"id":"AAAAUH%2F9t80%3D","line":282,"updated":"2014-02-05 22:29:46.000000000","message":"Manually running dnsmasq is not compatible with using Neutron for DHCP. I suspect you copied this from the old baremetal code, which predated our integration with Neutron. \n\nI think this section should be removed, as the PXE driver depends on Neutron for DHCP BOOT support.","commit_id":"80bd10dee05c4a30fee4d69537065a835baa8226"},{"author":{"_account_id":8003,"name":"Aleksandr Gordeev","email":"agordeev@mirantis.com","username":"agordeev"},"change_message_id":"03096c1d99110eba7e6426cbaf72e093acb17994","unresolved":false,"context_lines":[{"line_number":279,"context_line":""},{"line_number":280,"context_line":"function start_dnsmasq_for_vms() {"},{"line_number":281,"context_line":""},{"line_number":282,"context_line":"    if ! ps -e | grep dnsmasq | grep /tftpboot; then"},{"line_number":283,"context_line":"        sudo dnsmasq --conf-file\u003d --port\u003d69 --enable-tftp --tftp-root\u003d/tftpboot --dhcp-boot\u003dpxelinux.0 --pid-file\u003d/var/run/dnsmasq.pid --interface\u003d$IRONIC_VM_NETWORK_BRIDGE --dhcp-range\u003d$IRONIC_VM_NETWORK_DHCP_RANGE"},{"line_number":284,"context_line":"    fi"},{"line_number":285,"context_line":""}],"source_content_type":"application/octet-stream","patch_set":3,"id":"AAAAUX%2F%2FiyU%3D","line":282,"in_reply_to":"AAAAUH%2F9t80%3D","updated":"2014-02-12 13:42:07.000000000","message":"You are absolutely right. I\u0027ll add this into TODO-list","commit_id":"80bd10dee05c4a30fee4d69537065a835baa8226"},{"author":{"_account_id":2889,"name":"Aeva Black","email":"aeva.online@gmail.com","username":"tenbrae"},"change_message_id":"4447bb387c3fde14f7aad61fc7b93063ee8fcad9","unresolved":false,"context_lines":[{"line_number":287,"context_line":""},{"line_number":288,"context_line":"function create_brigde_and_vms() {"},{"line_number":289,"context_line":""},{"line_number":290,"context_line":"    sudo brctl addbr $IRONIC_VM_NETWORK_BRIDGE"},{"line_number":291,"context_line":"    sudo ip addr add $IRONIC_VM_NETWORK_BRIDGE_ADDRESS dev $IRONIC_VM_NETWORK_BRIDGE"},{"line_number":292,"context_line":""},{"line_number":293,"context_line":"    cp /dev/null $DEST/ironic_macs.csv"}],"source_content_type":"application/octet-stream","patch_set":3,"id":"AAAAUH%2F9t6Q%3D","line":290,"updated":"2014-02-05 22:29:46.000000000","message":"it may be better to use neutron here, rather than brctl","commit_id":"80bd10dee05c4a30fee4d69537065a835baa8226"},{"author":{"_account_id":2889,"name":"Aeva Black","email":"aeva.online@gmail.com","username":"tenbrae"},"change_message_id":"4447bb387c3fde14f7aad61fc7b93063ee8fcad9","unresolved":false,"context_lines":[{"line_number":290,"context_line":"    sudo brctl addbr $IRONIC_VM_NETWORK_BRIDGE"},{"line_number":291,"context_line":"    sudo ip addr add $IRONIC_VM_NETWORK_BRIDGE_ADDRESS dev $IRONIC_VM_NETWORK_BRIDGE"},{"line_number":292,"context_line":""},{"line_number":293,"context_line":"    cp /dev/null $DEST/ironic_macs.csv"},{"line_number":294,"context_line":""},{"line_number":295,"context_line":"    for i in `seq $IRONIC_VM_COUNT`"},{"line_number":296,"context_line":"    do"}],"source_content_type":"application/octet-stream","patch_set":3,"id":"AAAAUH%2F9t8o%3D","line":293,"updated":"2014-02-05 22:29:46.000000000","message":"I would use \u0027touch\u0027 instead of \u0027cp /dev/null\u0027\n\nAlso, the file name should be configurable via an ENV var","commit_id":"80bd10dee05c4a30fee4d69537065a835baa8226"},{"author":{"_account_id":8003,"name":"Aleksandr Gordeev","email":"agordeev@mirantis.com","username":"agordeev"},"change_message_id":"03096c1d99110eba7e6426cbaf72e093acb17994","unresolved":false,"context_lines":[{"line_number":290,"context_line":"    sudo brctl addbr $IRONIC_VM_NETWORK_BRIDGE"},{"line_number":291,"context_line":"    sudo ip addr add $IRONIC_VM_NETWORK_BRIDGE_ADDRESS dev $IRONIC_VM_NETWORK_BRIDGE"},{"line_number":292,"context_line":""},{"line_number":293,"context_line":"    cp /dev/null $DEST/ironic_macs.csv"},{"line_number":294,"context_line":""},{"line_number":295,"context_line":"    for i in `seq $IRONIC_VM_COUNT`"},{"line_number":296,"context_line":"    do"}],"source_content_type":"application/octet-stream","patch_set":3,"id":"AAAAUX%2F%2Fiz8%3D","line":293,"in_reply_to":"AAAAUH%2F9t8o%3D","updated":"2014-02-12 13:42:07.000000000","message":"Done","commit_id":"80bd10dee05c4a30fee4d69537065a835baa8226"},{"author":{"_account_id":2889,"name":"Aeva Black","email":"aeva.online@gmail.com","username":"tenbrae"},"change_message_id":"4447bb387c3fde14f7aad61fc7b93063ee8fcad9","unresolved":false,"context_lines":[{"line_number":347,"context_line":""},{"line_number":348,"context_line":"        ironic node-update $NODE_ID replace instance_uuid\u003d`uuidgen`"},{"line_number":349,"context_line":""},{"line_number":350,"context_line":"    done \u003c $DEST/ironic_macs.csv"},{"line_number":351,"context_line":"}"},{"line_number":352,"context_line":""},{"line_number":353,"context_line":""}],"source_content_type":"application/octet-stream","patch_set":3,"id":"AAAAUH%2F9t7s%3D","line":350,"updated":"2014-02-05 22:29:46.000000000","message":"file name needs to be configurable so that other test runners can pass in a list of their own devices here, eg. for testing with real hardware","commit_id":"80bd10dee05c4a30fee4d69537065a835baa8226"},{"author":{"_account_id":8003,"name":"Aleksandr Gordeev","email":"agordeev@mirantis.com","username":"agordeev"},"change_message_id":"03096c1d99110eba7e6426cbaf72e093acb17994","unresolved":false,"context_lines":[{"line_number":347,"context_line":""},{"line_number":348,"context_line":"        ironic node-update $NODE_ID replace instance_uuid\u003d`uuidgen`"},{"line_number":349,"context_line":""},{"line_number":350,"context_line":"    done \u003c $DEST/ironic_macs.csv"},{"line_number":351,"context_line":"}"},{"line_number":352,"context_line":""},{"line_number":353,"context_line":""}],"source_content_type":"application/octet-stream","patch_set":3,"id":"AAAAUX%2F%2Fiz4%3D","line":350,"in_reply_to":"AAAAUH%2F9t7s%3D","updated":"2014-02-12 13:42:07.000000000","message":"Done","commit_id":"80bd10dee05c4a30fee4d69537065a835baa8226"},{"author":{"_account_id":5805,"name":"Chris Krelle","email":"nobodycam@gmail.com","username":"nobodycam"},"change_message_id":"a7097e7fbeb0a3bd7bbfdf53c1c2b3b1b32a0513","unresolved":false,"context_lines":[{"line_number":300,"context_line":""},{"line_number":301,"context_line":"function create_brigde_and_vms() {"},{"line_number":302,"context_line":""},{"line_number":303,"context_line":"    #TODO(agordeev): remove this once neutron integration becomes ready"},{"line_number":304,"context_line":"    sudo brctl addbr $IRONIC_VM_NETWORK_BRIDGE"},{"line_number":305,"context_line":"    sudo ip addr add $IRONIC_VM_NETWORK_BRIDGE_ADDRESS dev $IRONIC_VM_NETWORK_BRIDGE"},{"line_number":306,"context_line":""}],"source_content_type":"application/octet-stream","patch_set":6,"id":"AAAAUX%2F%2FUk0%3D","line":303,"updated":"2014-02-14 00:14:10.000000000","message":"I believe neutron support has landed in Ironic:\n\nhttps://review.openstack.org/#/c/66071/\nhttps://review.openstack.org/#/c/70468/","commit_id":"ef800d14dc465da74861232dc81194f33239a512"},{"author":{"_account_id":2750,"name":"Sean Dague","email":"sean@dague.net","username":"sdague"},"change_message_id":"5fd36c7afc21bf4d53f48d0692a76233feb1b7c2","unresolved":false,"context_lines":[{"line_number":137,"context_line":"    iniset $IRONIC_CONF_FILE keystone_authtoken signing_dir $IRONIC_AUTH_CACHE_DIR/api"},{"line_number":138,"context_line":""},{"line_number":139,"context_line":"    #FIXME(agordeev): need to know tftp address"},{"line_number":140,"context_line":"    iniset $IRONIC_CONF_FILE pxe tftp_server\u003d10.0.0.3"},{"line_number":141,"context_line":""},{"line_number":142,"context_line":"    cp -p $IRONIC_DIR/etc/ironic/policy.json $IRONIC_POLICY_JSON"},{"line_number":143,"context_line":"}"}],"source_content_type":"application/octet-stream","patch_set":11,"id":"AAAAU3%2F%2Fj%2BU%3D","line":140,"updated":"2014-02-25 22:32:25.000000000","message":"this should be set to SERVICE_HOST as a default","commit_id":"00aa6de8b72035cb6f092ef6a8e40cb615e1e3c9"},{"author":{"_account_id":970,"name":"Dean Troyer","email":"dtroyer@gmail.com","username":"dtroyer"},"change_message_id":"2530a04cf53b9ccbc086d6a344f072b2b5b9e5d8","unresolved":false,"context_lines":[{"line_number":137,"context_line":"    iniset $IRONIC_CONF_FILE keystone_authtoken signing_dir $IRONIC_AUTH_CACHE_DIR/api"},{"line_number":138,"context_line":""},{"line_number":139,"context_line":"    #FIXME(agordeev): need to know tftp address"},{"line_number":140,"context_line":"    iniset $IRONIC_CONF_FILE pxe tftp_server\u003d10.0.0.3"},{"line_number":141,"context_line":""},{"line_number":142,"context_line":"    cp -p $IRONIC_DIR/etc/ironic/policy.json $IRONIC_POLICY_JSON"},{"line_number":143,"context_line":"}"}],"source_content_type":"application/octet-stream","patch_set":11,"id":"AAAAU3%2F%2FZ0k%3D","line":140,"in_reply_to":"AAAAU3%2F%2Ffyg%3D","updated":"2014-02-26 20:51:38.000000000","message":"Hard-coding it is also a bad idea.  Presumably this IP is based on _something_ configurable, like the public or private network address?","commit_id":"00aa6de8b72035cb6f092ef6a8e40cb615e1e3c9"},{"author":{"_account_id":2750,"name":"Sean Dague","email":"sean@dague.net","username":"sdague"},"change_message_id":"ebcbae9e2853cf4c86adfe9a731d5f2cd3638817","unresolved":false,"context_lines":[{"line_number":137,"context_line":"    iniset $IRONIC_CONF_FILE keystone_authtoken signing_dir $IRONIC_AUTH_CACHE_DIR/api"},{"line_number":138,"context_line":""},{"line_number":139,"context_line":"    #FIXME(agordeev): need to know tftp address"},{"line_number":140,"context_line":"    iniset $IRONIC_CONF_FILE pxe tftp_server\u003d10.0.0.3"},{"line_number":141,"context_line":""},{"line_number":142,"context_line":"    cp -p $IRONIC_DIR/etc/ironic/policy.json $IRONIC_POLICY_JSON"},{"line_number":143,"context_line":"}"}],"source_content_type":"application/octet-stream","patch_set":11,"id":"AAAAVX%2F%2F%2Bv8%3D","line":140,"in_reply_to":"AAAAU3%2F%2Ffyg%3D","updated":"2014-02-27 01:40:30.000000000","message":"so if it can\u0027t be SERVICE_HOST, then this can *never* work in the gate. Which was kind of the point of getting this in now, right?","commit_id":"00aa6de8b72035cb6f092ef6a8e40cb615e1e3c9"},{"author":{"_account_id":8003,"name":"Aleksandr Gordeev","email":"agordeev@mirantis.com","username":"agordeev"},"change_message_id":"ae5b6d876e7f8f74c8669a858fe258ca4e21d29b","unresolved":false,"context_lines":[{"line_number":137,"context_line":"    iniset $IRONIC_CONF_FILE keystone_authtoken signing_dir $IRONIC_AUTH_CACHE_DIR/api"},{"line_number":138,"context_line":""},{"line_number":139,"context_line":"    #FIXME(agordeev): need to know tftp address"},{"line_number":140,"context_line":"    iniset $IRONIC_CONF_FILE pxe tftp_server\u003d10.0.0.3"},{"line_number":141,"context_line":""},{"line_number":142,"context_line":"    cp -p $IRONIC_DIR/etc/ironic/policy.json $IRONIC_POLICY_JSON"},{"line_number":143,"context_line":"}"}],"source_content_type":"application/octet-stream","patch_set":11,"id":"AAAAU3%2F%2Ffyg%3D","line":140,"in_reply_to":"AAAAU3%2F%2Fj%2BU%3D","updated":"2014-02-26 14:22:16.000000000","message":"Tftp-server should be easily available inside of neutron network. It seems to be very tricky to let particular instance to get access from inside of neutron network to SERVICE_HOST. \n\nSetting tftp_server to SERVICE_HOST just will perform SNAT from private network to router IP when instance will be trying to boot. It seems this breaks tftp :(","commit_id":"00aa6de8b72035cb6f092ef6a8e40cb615e1e3c9"},{"author":{"_account_id":2889,"name":"Aeva Black","email":"aeva.online@gmail.com","username":"tenbrae"},"change_message_id":"5be26fdeb1d44562495bf865d5fa05aaaaa45068","unresolved":false,"context_lines":[{"line_number":137,"context_line":"    iniset $IRONIC_CONF_FILE keystone_authtoken signing_dir $IRONIC_AUTH_CACHE_DIR/api"},{"line_number":138,"context_line":""},{"line_number":139,"context_line":"    #FIXME(agordeev): need to know tftp address"},{"line_number":140,"context_line":"    iniset $IRONIC_CONF_FILE pxe tftp_server\u003d10.0.0.3"},{"line_number":141,"context_line":""},{"line_number":142,"context_line":"    cp -p $IRONIC_DIR/etc/ironic/policy.json $IRONIC_POLICY_JSON"},{"line_number":143,"context_line":"}"}],"source_content_type":"application/octet-stream","patch_set":11,"id":"AAAAVX%2F%2F%2Bow%3D","line":140,"in_reply_to":"AAAAVX%2F%2F%2Bv8%3D","updated":"2014-02-27 02:04:19.000000000","message":"So, we need to create a local network bridge and some VMs and assign those VMs NICs to that bridge. See line 348 for where tftpd is started. It should be the same IP in both places, and an ENV var should be used.\n\nBut, I want to be clear -- this is *not* the SERVICE_HOST IP. We are creating a separate network bridge and should only be serving images over tftp on that IP.","commit_id":"00aa6de8b72035cb6f092ef6a8e40cb615e1e3c9"},{"author":{"_account_id":5805,"name":"Chris Krelle","email":"nobodycam@gmail.com","username":"nobodycam"},"change_message_id":"4f55bdf3826a32d565d633293489f31725ca1d58","unresolved":false,"context_lines":[{"line_number":266,"context_line":"    sudo mkdir -p /var/lib/ironic"},{"line_number":267,"context_line":"    sudo mkdir -p /tftpboot"},{"line_number":268,"context_line":"    sudo chmod 777 /var/lib/ironic"},{"line_number":269,"context_line":"    sudo chmod 777 /tftpboot"},{"line_number":270,"context_line":"    sudo mkdir -p /tftpboot/pxelinux.cfg"},{"line_number":271,"context_line":""},{"line_number":272,"context_line":"    if is_ubuntu; then"}],"source_content_type":"application/octet-stream","patch_set":11,"id":"AAAAU3%2F%2FbsA%3D","line":269,"updated":"2014-02-26 20:11:31.000000000","message":"is 777 required? you chown below the directory below.","commit_id":"00aa6de8b72035cb6f092ef6a8e40cb615e1e3c9"},{"author":{"_account_id":2750,"name":"Sean Dague","email":"sean@dague.net","username":"sdague"},"change_message_id":"5fd36c7afc21bf4d53f48d0692a76233feb1b7c2","unresolved":false,"context_lines":[{"line_number":284,"context_line":""},{"line_number":285,"context_line":"function create_brigde_and_vms() {"},{"line_number":286,"context_line":""},{"line_number":287,"context_line":"    sudo PATH\u003d$PATH:$IRONIC_SCRIPTS_DIR $IRONIC_SCRIPTS_DIR/setup-network"},{"line_number":288,"context_line":""},{"line_number":289,"context_line":"    touch $IRONIC_VM_MACS_CSV_FILE"},{"line_number":290,"context_line":""}],"source_content_type":"application/octet-stream","patch_set":11,"id":"AAAAU3%2F%2Fj%2BE%3D","line":287,"updated":"2014-02-25 22:32:25.000000000","message":"why aren\u0027t these getting installed into something usable by the system without the path change?","commit_id":"00aa6de8b72035cb6f092ef6a8e40cb615e1e3c9"},{"author":{"_account_id":970,"name":"Dean Troyer","email":"dtroyer@gmail.com","username":"dtroyer"},"change_message_id":"2530a04cf53b9ccbc086d6a344f072b2b5b9e5d8","unresolved":false,"context_lines":[{"line_number":284,"context_line":""},{"line_number":285,"context_line":"function create_brigde_and_vms() {"},{"line_number":286,"context_line":""},{"line_number":287,"context_line":"    sudo PATH\u003d$PATH:$IRONIC_SCRIPTS_DIR $IRONIC_SCRIPTS_DIR/setup-network"},{"line_number":288,"context_line":""},{"line_number":289,"context_line":"    touch $IRONIC_VM_MACS_CSV_FILE"},{"line_number":290,"context_line":""}],"source_content_type":"application/octet-stream","patch_set":11,"id":"AAAAU3%2F%2FZyQ%3D","line":287,"in_reply_to":"AAAAU3%2F%2FdXE%3D","updated":"2014-02-26 20:51:38.000000000","message":"They should be written so they do not need to have the PATH set to find the other scripts, if that is required.  Other scripts in tools/ have examples of this.","commit_id":"00aa6de8b72035cb6f092ef6a8e40cb615e1e3c9"},{"author":{"_account_id":8003,"name":"Aleksandr Gordeev","email":"agordeev@mirantis.com","username":"agordeev"},"change_message_id":"ae5b6d876e7f8f74c8669a858fe258ca4e21d29b","unresolved":false,"context_lines":[{"line_number":284,"context_line":""},{"line_number":285,"context_line":"function create_brigde_and_vms() {"},{"line_number":286,"context_line":""},{"line_number":287,"context_line":"    sudo PATH\u003d$PATH:$IRONIC_SCRIPTS_DIR $IRONIC_SCRIPTS_DIR/setup-network"},{"line_number":288,"context_line":""},{"line_number":289,"context_line":"    touch $IRONIC_VM_MACS_CSV_FILE"},{"line_number":290,"context_line":""}],"source_content_type":"application/octet-stream","patch_set":11,"id":"AAAAU3%2F%2FdXE%3D","line":287,"in_reply_to":"AAAAU3%2F%2Fj%2BE%3D","updated":"2014-02-26 14:22:16.000000000","message":"ok, i\u0027ll fix path issue.","commit_id":"00aa6de8b72035cb6f092ef6a8e40cb615e1e3c9"},{"author":{"_account_id":2750,"name":"Sean Dague","email":"sean@dague.net","username":"sdague"},"change_message_id":"5fd36c7afc21bf4d53f48d0692a76233feb1b7c2","unresolved":false,"context_lines":[{"line_number":292,"context_line":""},{"line_number":293,"context_line":"}"},{"line_number":294,"context_line":""},{"line_number":295,"context_line":"function enroll_vms() {"},{"line_number":296,"context_line":""},{"line_number":297,"context_line":"    SOURCE_IMAGE_ID\u003d$(glance image-list | grep $DEFAULT_IMAGE_NAME -m1 | get_field 1)"},{"line_number":298,"context_line":""}],"source_content_type":"application/octet-stream","patch_set":11,"id":"AAAAU3%2F%2Fj9c%3D","line":295,"updated":"2014-02-25 22:32:25.000000000","message":"so this is a lot of logic that I\u0027m surprised isn\u0027t an ironic tool","commit_id":"00aa6de8b72035cb6f092ef6a8e40cb615e1e3c9"},{"author":{"_account_id":2889,"name":"Aeva Black","email":"aeva.online@gmail.com","username":"tenbrae"},"change_message_id":"5be26fdeb1d44562495bf865d5fa05aaaaa45068","unresolved":false,"context_lines":[{"line_number":292,"context_line":""},{"line_number":293,"context_line":"}"},{"line_number":294,"context_line":""},{"line_number":295,"context_line":"function enroll_vms() {"},{"line_number":296,"context_line":""},{"line_number":297,"context_line":"    SOURCE_IMAGE_ID\u003d$(glance image-list | grep $DEFAULT_IMAGE_NAME -m1 | get_field 1)"},{"line_number":298,"context_line":""}],"source_content_type":"application/octet-stream","patch_set":11,"id":"AAAAVX%2F%2F%2BoI%3D","line":295,"in_reply_to":"AAAAU3%2F%2FdXc%3D","updated":"2014-02-27 02:04:19.000000000","message":"This is just using the ironic API to enroll some hardware. The expectation is that an operator will do this ahead of time.\n\nAlso, fwiw, tempest is already exercising this functionality of Ironic with the \"fake\" driver. What we\u0027re doing here complements that by using the \"pxe_ssh\" driver and actually testing a deploy.","commit_id":"00aa6de8b72035cb6f092ef6a8e40cb615e1e3c9"},{"author":{"_account_id":8003,"name":"Aleksandr Gordeev","email":"agordeev@mirantis.com","username":"agordeev"},"change_message_id":"ae5b6d876e7f8f74c8669a858fe258ca4e21d29b","unresolved":false,"context_lines":[{"line_number":292,"context_line":""},{"line_number":293,"context_line":"}"},{"line_number":294,"context_line":""},{"line_number":295,"context_line":"function enroll_vms() {"},{"line_number":296,"context_line":""},{"line_number":297,"context_line":"    SOURCE_IMAGE_ID\u003d$(glance image-list | grep $DEFAULT_IMAGE_NAME -m1 | get_field 1)"},{"line_number":298,"context_line":""}],"source_content_type":"application/octet-stream","patch_set":11,"id":"AAAAU3%2F%2FdXc%3D","line":295,"in_reply_to":"AAAAU3%2F%2Fj9c%3D","updated":"2014-02-26 14:22:16.000000000","message":"right. But this tool (or the another script with the same functionality)  is necessasy for performing ironic integration testing. If i put them in non correct directory, let me know where is better place to put them. Thanks!","commit_id":"00aa6de8b72035cb6f092ef6a8e40cb615e1e3c9"},{"author":{"_account_id":6618,"name":"Ruby Loo","email":"opensrloo@gmail.com","username":"rloo"},"change_message_id":"47f76a7aa4340f1b9543de03870d109e2a84faf6","unresolved":false,"context_lines":[{"line_number":313,"context_line":"            -i ssh_key_filename\u003d$IRONIC_SSH_KEY_DIR/$IRONIC_SSH_KEY_FILENAME \\"},{"line_number":314,"context_line":"            -i pxe_deploy_ramdisk\u003d$BM_DEPLOY_RAMDISK_ID \\"},{"line_number":315,"context_line":"            -i pxe_deploy_kernel\u003d$BM_DEPLOY_KERNEL_ID \\"},{"line_number":316,"context_line":"            -i pxe_instance_name\u003d$DOMAIN_NAME \\"},{"line_number":317,"context_line":"            -i pxe_image_source\u003d$SOURCE_IMAGE_ID \\"},{"line_number":318,"context_line":"            -i pxe_root_gb\u003d$IRONIC_VM_SPECS_DISK \\"},{"line_number":319,"context_line":"            | grep \" uuid \" | get_field 2)"}],"source_content_type":"application/octet-stream","patch_set":11,"id":"AAAAVX%2F%2F%2B7M%3D","line":316,"updated":"2014-02-27 01:25:07.000000000","message":"pxe_instance_name has been removed (it wasn\u0027t used), so this isn\u0027t needed any more. https://review.openstack.org/#/c/75098/","commit_id":"00aa6de8b72035cb6f092ef6a8e40cb615e1e3c9"},{"author":{"_account_id":2889,"name":"Aeva Black","email":"aeva.online@gmail.com","username":"tenbrae"},"change_message_id":"5be26fdeb1d44562495bf865d5fa05aaaaa45068","unresolved":false,"context_lines":[{"line_number":314,"context_line":"            -i pxe_deploy_ramdisk\u003d$BM_DEPLOY_RAMDISK_ID \\"},{"line_number":315,"context_line":"            -i pxe_deploy_kernel\u003d$BM_DEPLOY_KERNEL_ID \\"},{"line_number":316,"context_line":"            -i pxe_instance_name\u003d$DOMAIN_NAME \\"},{"line_number":317,"context_line":"            -i pxe_image_source\u003d$SOURCE_IMAGE_ID \\"},{"line_number":318,"context_line":"            -i pxe_root_gb\u003d$IRONIC_VM_SPECS_DISK \\"},{"line_number":319,"context_line":"            | grep \" uuid \" | get_field 2)"},{"line_number":320,"context_line":""}],"source_content_type":"application/octet-stream","patch_set":11,"id":"AAAAVX%2F%2F%2Bno%3D","line":317,"updated":"2014-02-27 02:04:19.000000000","message":"image_source and root_gb should be passed in by Nova, not here. Please remove them","commit_id":"00aa6de8b72035cb6f092ef6a8e40cb615e1e3c9"},{"author":{"_account_id":2889,"name":"Aeva Black","email":"aeva.online@gmail.com","username":"tenbrae"},"change_message_id":"5be26fdeb1d44562495bf865d5fa05aaaaa45068","unresolved":false,"context_lines":[{"line_number":321,"context_line":"        ironic port-create --address $MAC --node_uuid $NODE_ID --extra vif_port_id\u003d$VIF_ID"},{"line_number":322,"context_line":""},{"line_number":323,"context_line":"        ironic node-validate $NODE_ID | grep \" power \" | get_field 2 | grep result | grep True || die $LINENO \"Wrong driver power result\""},{"line_number":324,"context_line":"        ironic node-validate $NODE_ID | grep \" deploy \" | get_field 2 | grep result | grep True || die $LINENO \"Wrong driver deploy result\""},{"line_number":325,"context_line":""},{"line_number":326,"context_line":"        ironic node-update $NODE_ID replace instance_uuid\u003d`uuidgen`"},{"line_number":327,"context_line":""}],"source_content_type":"application/octet-stream","patch_set":11,"id":"AAAAVX%2F%2F%2BnY%3D","line":324,"updated":"2014-02-27 02:04:19.000000000","message":"Do not check the \u0027deploy\u0027 validation. These nodes are not ready to be deployed yet -- that\u0027s Nova\u0027s job.\n\nIn fact, please remove all the validation here. It\u0027s not necessary for the setup.","commit_id":"00aa6de8b72035cb6f092ef6a8e40cb615e1e3c9"},{"author":{"_account_id":2889,"name":"Aeva Black","email":"aeva.online@gmail.com","username":"tenbrae"},"change_message_id":"5be26fdeb1d44562495bf865d5fa05aaaaa45068","unresolved":false,"context_lines":[{"line_number":345,"context_line":"    #TODO(agordeev): add distro specific logic"},{"line_number":346,"context_line":"    stop_service atftpd"},{"line_number":347,"context_line":"    sudo pkill atftpd"},{"line_number":348,"context_line":"    sudo ip netns exec qdhcp-${IRONIC_NET_ID} atftpd --port 69 --bind-address 0.0.0.0 --pcre /tftpboot/map-file -t 60 -m 50 --daemon --user $STACK_USER /tftpboot"},{"line_number":349,"context_line":"}"},{"line_number":350,"context_line":""},{"line_number":351,"context_line":""}],"source_content_type":"application/octet-stream","patch_set":11,"id":"AAAAVX%2F%2F%2Bm0%3D","line":348,"updated":"2014-02-27 02:04:19.000000000","message":"this should bind to the same address on line 140","commit_id":"00aa6de8b72035cb6f092ef6a8e40cb615e1e3c9"},{"author":{"_account_id":7419,"name":"Imre Farkas","email":"farkas.imre@gmail.com","username":"ifarkas"},"change_message_id":"679402bd56d0108091b77849c76069c79647bb56","unresolved":false,"context_lines":[{"line_number":273,"context_line":"        die $LINENO \"pxelinux.0 (from SYSLINUX) not found.\""},{"line_number":274,"context_line":"    fi"},{"line_number":275,"context_line":""},{"line_number":276,"context_line":"    sudo cp_it $PXEBIN /tftpboot/"},{"line_number":277,"context_line":"    sudo chown -R $STACK_USER:$LIBVIRT_GROUP /tftpboot"},{"line_number":278,"context_line":"}"},{"line_number":279,"context_line":""}],"source_content_type":"application/octet-stream","patch_set":15,"id":"AAAAVn%2F%2F50U%3D","line":276,"updated":"2014-03-03 14:54:33.000000000","message":"As discussed on IRC, this line fails for me. Here\u0027s the error message: http://paste.openstack.org/show/71735/","commit_id":"e69c4774254a42e1d828ed51965c3902623ff4c7"},{"author":{"_account_id":8003,"name":"Aleksandr Gordeev","email":"agordeev@mirantis.com","username":"agordeev"},"change_message_id":"05ccfbd571477ed2213f0e198cb75d56dc5ee843","unresolved":false,"context_lines":[{"line_number":273,"context_line":"        die $LINENO \"pxelinux.0 (from SYSLINUX) not found.\""},{"line_number":274,"context_line":"    fi"},{"line_number":275,"context_line":""},{"line_number":276,"context_line":"    sudo cp_it $PXEBIN /tftpboot/"},{"line_number":277,"context_line":"    sudo chown -R $STACK_USER:$LIBVIRT_GROUP /tftpboot"},{"line_number":278,"context_line":"}"},{"line_number":279,"context_line":""}],"source_content_type":"application/octet-stream","patch_set":15,"id":"AAAAVn%2F%2Fu2M%3D","line":276,"in_reply_to":"AAAAVn%2F%2F50U%3D","updated":"2014-03-04 12:33:29.000000000","message":"Done","commit_id":"e69c4774254a42e1d828ed51965c3902623ff4c7"},{"author":{"_account_id":7419,"name":"Imre Farkas","email":"farkas.imre@gmail.com","username":"ifarkas"},"change_message_id":"679402bd56d0108091b77849c76069c79647bb56","unresolved":false,"context_lines":[{"line_number":352,"context_line":"        mkdir -p $IRONIC_SSH_KEY_DIR"},{"line_number":353,"context_line":"    fi"},{"line_number":354,"context_line":"    # avoid overwriting already existent keypair"},{"line_number":355,"context_line":"    echo -e \u0027n\\n\u0027 | ssh-keygen -q -t rsa -P \u0027\u0027 -f $IRONIC_SSH_KEY_DIR/$IRONIC_SSH_KEY_FILENAME"},{"line_number":356,"context_line":"    if [[ ! -d $HOME/.ssh ]]; then"},{"line_number":357,"context_line":"        mkdir -p $HOME/.ssh"},{"line_number":358,"context_line":"        chmod 700 $HOME/.ssh"}],"source_content_type":"application/octet-stream","patch_set":15,"id":"AAAAVn%2F%2F5w4%3D","line":355,"updated":"2014-03-03 14:54:33.000000000","message":"If you re-run stack.sh this line will throw an error as ironic_key already exists. It would be better to check for existence and delete it before generating the keys. Or maybe adding a cleanup hook to unstack.sh? (That might just be a wild suggestion, I am not really familiar with devstack)","commit_id":"e69c4774254a42e1d828ed51965c3902623ff4c7"},{"author":{"_account_id":8003,"name":"Aleksandr Gordeev","email":"agordeev@mirantis.com","username":"agordeev"},"change_message_id":"05ccfbd571477ed2213f0e198cb75d56dc5ee843","unresolved":false,"context_lines":[{"line_number":352,"context_line":"        mkdir -p $IRONIC_SSH_KEY_DIR"},{"line_number":353,"context_line":"    fi"},{"line_number":354,"context_line":"    # avoid overwriting already existent keypair"},{"line_number":355,"context_line":"    echo -e \u0027n\\n\u0027 | ssh-keygen -q -t rsa -P \u0027\u0027 -f $IRONIC_SSH_KEY_DIR/$IRONIC_SSH_KEY_FILENAME"},{"line_number":356,"context_line":"    if [[ ! -d $HOME/.ssh ]]; then"},{"line_number":357,"context_line":"        mkdir -p $HOME/.ssh"},{"line_number":358,"context_line":"        chmod 700 $HOME/.ssh"}],"source_content_type":"application/octet-stream","patch_set":15,"id":"AAAAVn%2F%2Fu2U%3D","line":355,"in_reply_to":"AAAAVn%2F%2F5w4%3D","updated":"2014-03-04 12:33:29.000000000","message":"Done","commit_id":"e69c4774254a42e1d828ed51965c3902623ff4c7"},{"author":{"_account_id":970,"name":"Dean Troyer","email":"dtroyer@gmail.com","username":"dtroyer"},"change_message_id":"34a3fc3f551f23e528a658964fea1ddd84deac8d","unresolved":false,"context_lines":[{"line_number":39,"context_line":"IRONIC_SCRIPTS_DIR\u003d${IRONIC_SCRIPTS_DIR:-$TOP_DIR/tools/ironic/scripts}"},{"line_number":40,"context_line":"IRONIC_BAREMETAL_BASIC_OPS\u003d$(trueorfalse False $IRONIC_BAREMETAL_BASIC_OPS)"},{"line_number":41,"context_line":"IRONIC_SSH_USERNAME\u003d${IRONIC_SSH_USERNAME:-`whoami`}"},{"line_number":42,"context_line":"IRONIC_SSH_KEY_DIR\u003d${IRONIC_SSH_KEY_DIR:-$DEST/ssh_keys}"},{"line_number":43,"context_line":"IRONIC_SSH_KEY_FILENAME\u003d${IRONIC_SSH_KEY_FILENAME:-ironic_key}"},{"line_number":44,"context_line":"IRONIC_VM_SSH_PORT\u003d${IRONIC_VM_SSH_PORT:-2222}"},{"line_number":45,"context_line":"IRONIC_VM_SSH_ADDRESS\u003d${IRONIC_VM_SSH_ADDRESS:-127.0.0.1}"}],"source_content_type":"application/octet-stream","patch_set":17,"id":"AAAAVn%2F%2Ff%2BY%3D","line":42,"updated":"2014-03-05 19:15:24.000000000","message":"This should not be in $DEST directly, but in $DATA_DIR/ironic or just $DATA_DIR if it is shared with other services.","commit_id":"8f77879a1e9cb496fb0c3951c92d1b5d6a87ebe0"},{"author":{"_account_id":8003,"name":"Aleksandr Gordeev","email":"agordeev@mirantis.com","username":"agordeev"},"change_message_id":"2cbf3f3fffd359f4c5ab6885be49a85aa9069b03","unresolved":false,"context_lines":[{"line_number":39,"context_line":"IRONIC_SCRIPTS_DIR\u003d${IRONIC_SCRIPTS_DIR:-$TOP_DIR/tools/ironic/scripts}"},{"line_number":40,"context_line":"IRONIC_BAREMETAL_BASIC_OPS\u003d$(trueorfalse False $IRONIC_BAREMETAL_BASIC_OPS)"},{"line_number":41,"context_line":"IRONIC_SSH_USERNAME\u003d${IRONIC_SSH_USERNAME:-`whoami`}"},{"line_number":42,"context_line":"IRONIC_SSH_KEY_DIR\u003d${IRONIC_SSH_KEY_DIR:-$DEST/ssh_keys}"},{"line_number":43,"context_line":"IRONIC_SSH_KEY_FILENAME\u003d${IRONIC_SSH_KEY_FILENAME:-ironic_key}"},{"line_number":44,"context_line":"IRONIC_VM_SSH_PORT\u003d${IRONIC_VM_SSH_PORT:-2222}"},{"line_number":45,"context_line":"IRONIC_VM_SSH_ADDRESS\u003d${IRONIC_VM_SSH_ADDRESS:-127.0.0.1}"}],"source_content_type":"application/octet-stream","patch_set":17,"id":"AAAAVn%2F%2FZ8c%3D","line":42,"in_reply_to":"AAAAVn%2F%2Ff%2BY%3D","updated":"2014-03-07 12:56:17.000000000","message":"Done","commit_id":"8f77879a1e9cb496fb0c3951c92d1b5d6a87ebe0"},{"author":{"_account_id":970,"name":"Dean Troyer","email":"dtroyer@gmail.com","username":"dtroyer"},"change_message_id":"34a3fc3f551f23e528a658964fea1ddd84deac8d","unresolved":false,"context_lines":[{"line_number":42,"context_line":"IRONIC_SSH_KEY_DIR\u003d${IRONIC_SSH_KEY_DIR:-$DEST/ssh_keys}"},{"line_number":43,"context_line":"IRONIC_SSH_KEY_FILENAME\u003d${IRONIC_SSH_KEY_FILENAME:-ironic_key}"},{"line_number":44,"context_line":"IRONIC_VM_SSH_PORT\u003d${IRONIC_VM_SSH_PORT:-2222}"},{"line_number":45,"context_line":"IRONIC_VM_SSH_ADDRESS\u003d${IRONIC_VM_SSH_ADDRESS:-127.0.0.1}"},{"line_number":46,"context_line":"IRONIC_VM_COUNT\u003d${IRONIC_VM_COUNT:-1}"},{"line_number":47,"context_line":"IRONIC_VM_SPECS_CPU\u003d${IRONIC_VM_SPECS_CPU:-1}"},{"line_number":48,"context_line":"IRONIC_VM_SPECS_RAM\u003d${IRONIC_VM_SPECS_RAM:-256}"}],"source_content_type":"application/octet-stream","patch_set":17,"id":"AAAAVn%2F%2Ff9Q%3D","line":45,"updated":"2014-03-05 19:15:24.000000000","message":"If you can use $SERVICE_HOSt or $HOST_IP here that would be better.  In multi-host setups, SERVICE_HOST points to the controller while HOST_IP is always the current host.","commit_id":"8f77879a1e9cb496fb0c3951c92d1b5d6a87ebe0"},{"author":{"_account_id":8003,"name":"Aleksandr Gordeev","email":"agordeev@mirantis.com","username":"agordeev"},"change_message_id":"2cbf3f3fffd359f4c5ab6885be49a85aa9069b03","unresolved":false,"context_lines":[{"line_number":42,"context_line":"IRONIC_SSH_KEY_DIR\u003d${IRONIC_SSH_KEY_DIR:-$DEST/ssh_keys}"},{"line_number":43,"context_line":"IRONIC_SSH_KEY_FILENAME\u003d${IRONIC_SSH_KEY_FILENAME:-ironic_key}"},{"line_number":44,"context_line":"IRONIC_VM_SSH_PORT\u003d${IRONIC_VM_SSH_PORT:-2222}"},{"line_number":45,"context_line":"IRONIC_VM_SSH_ADDRESS\u003d${IRONIC_VM_SSH_ADDRESS:-127.0.0.1}"},{"line_number":46,"context_line":"IRONIC_VM_COUNT\u003d${IRONIC_VM_COUNT:-1}"},{"line_number":47,"context_line":"IRONIC_VM_SPECS_CPU\u003d${IRONIC_VM_SPECS_CPU:-1}"},{"line_number":48,"context_line":"IRONIC_VM_SPECS_RAM\u003d${IRONIC_VM_SPECS_RAM:-256}"}],"source_content_type":"application/octet-stream","patch_set":17,"id":"AAAAVn%2F%2FZ7E%3D","line":45,"in_reply_to":"AAAAVn%2F%2Ff9Q%3D","updated":"2014-03-07 12:56:17.000000000","message":"Done","commit_id":"8f77879a1e9cb496fb0c3951c92d1b5d6a87ebe0"},{"author":{"_account_id":970,"name":"Dean Troyer","email":"dtroyer@gmail.com","username":"dtroyer"},"change_message_id":"34a3fc3f551f23e528a658964fea1ddd84deac8d","unresolved":false,"context_lines":[{"line_number":50,"context_line":"IRONIC_VM_EMULATOR\u003d${IRONIC_VM_EMULATOR:-/usr/bin/qemu-system-x86_64}"},{"line_number":51,"context_line":"IRONIC_VM_NETWORK_BRIDGE\u003d${IRONIC_VM_NETWORK_BRIDGE:-brbm}"},{"line_number":52,"context_line":"IRONIC_VM_NETWORK_RANGE\u003d${IRONIC_VM_NETWORK_RANGE:-192.0.2.0/24}"},{"line_number":53,"context_line":"IRONIC_VM_MACS_CSV_FILE\u003d${IRONIC_VM_MACS_CSV_FILE:-$DEST/ironic_macs.csv}"},{"line_number":54,"context_line":""},{"line_number":55,"context_line":"# Support entry points installation of console scripts"},{"line_number":56,"context_line":"IRONIC_BIN_DIR\u003d$(get_python_exec_prefix)"}],"source_content_type":"application/octet-stream","patch_set":17,"id":"AAAAVn%2F%2Ff88%3D","line":53,"updated":"2014-03-05 19:15:24.000000000","message":"This should not be in $DEST directly, but in $DATA_DIR/ironic or just $DATA_DIR if it is shared with other services.","commit_id":"8f77879a1e9cb496fb0c3951c92d1b5d6a87ebe0"},{"author":{"_account_id":8003,"name":"Aleksandr Gordeev","email":"agordeev@mirantis.com","username":"agordeev"},"change_message_id":"2cbf3f3fffd359f4c5ab6885be49a85aa9069b03","unresolved":false,"context_lines":[{"line_number":50,"context_line":"IRONIC_VM_EMULATOR\u003d${IRONIC_VM_EMULATOR:-/usr/bin/qemu-system-x86_64}"},{"line_number":51,"context_line":"IRONIC_VM_NETWORK_BRIDGE\u003d${IRONIC_VM_NETWORK_BRIDGE:-brbm}"},{"line_number":52,"context_line":"IRONIC_VM_NETWORK_RANGE\u003d${IRONIC_VM_NETWORK_RANGE:-192.0.2.0/24}"},{"line_number":53,"context_line":"IRONIC_VM_MACS_CSV_FILE\u003d${IRONIC_VM_MACS_CSV_FILE:-$DEST/ironic_macs.csv}"},{"line_number":54,"context_line":""},{"line_number":55,"context_line":"# Support entry points installation of console scripts"},{"line_number":56,"context_line":"IRONIC_BIN_DIR\u003d$(get_python_exec_prefix)"}],"source_content_type":"application/octet-stream","patch_set":17,"id":"AAAAVn%2F%2FZ7A%3D","line":53,"in_reply_to":"AAAAVn%2F%2Ff88%3D","updated":"2014-03-07 12:56:17.000000000","message":"Done","commit_id":"8f77879a1e9cb496fb0c3951c92d1b5d6a87ebe0"},{"author":{"_account_id":3099,"name":"David Shrewsbury","email":"dshrewsb@redhat.com","username":"dshrews"},"change_message_id":"0eff6c79725402bf309fd34b8de89e490e884f70","unresolved":false,"context_lines":[{"line_number":259,"context_line":"function configure_ironic_dirs {"},{"line_number":260,"context_line":"    # ensure /tftpboot is prepared"},{"line_number":261,"context_line":""},{"line_number":262,"context_line":"    #TODO(agordeev): chown to ironic\u0027s user"},{"line_number":263,"context_line":"    sudo mkdir -p /var/lib/ironic"},{"line_number":264,"context_line":"    sudo mkdir -p /tftpboot"},{"line_number":265,"context_line":"    sudo mkdir -p /tftpboot/pxelinux.cfg"}],"source_content_type":"application/octet-stream","patch_set":17,"id":"AAAAVn%2F%2FVGE%3D","line":262,"updated":"2014-03-06 19:42:15.000000000","message":"This TODO needs to be implemented. Otherwise the deploy fails with:\n\nFailed to deploy. Error: [Errno 13] Permission denied: \u0027/var/lib/ironic/images\u0027","commit_id":"8f77879a1e9cb496fb0c3951c92d1b5d6a87ebe0"},{"author":{"_account_id":8003,"name":"Aleksandr Gordeev","email":"agordeev@mirantis.com","username":"agordeev"},"change_message_id":"2cbf3f3fffd359f4c5ab6885be49a85aa9069b03","unresolved":false,"context_lines":[{"line_number":259,"context_line":"function configure_ironic_dirs {"},{"line_number":260,"context_line":"    # ensure /tftpboot is prepared"},{"line_number":261,"context_line":""},{"line_number":262,"context_line":"    #TODO(agordeev): chown to ironic\u0027s user"},{"line_number":263,"context_line":"    sudo mkdir -p /var/lib/ironic"},{"line_number":264,"context_line":"    sudo mkdir -p /tftpboot"},{"line_number":265,"context_line":"    sudo mkdir -p /tftpboot/pxelinux.cfg"}],"source_content_type":"application/octet-stream","patch_set":17,"id":"AAAAVn%2F%2FPho%3D","line":262,"in_reply_to":"AAAAVn%2F%2FVGE%3D","updated":"2014-03-07 12:56:17.000000000","message":"Done","commit_id":"8f77879a1e9cb496fb0c3951c92d1b5d6a87ebe0"},{"author":{"_account_id":10656,"name":"Adam Gandelman","username":"agandelman","inactive":true},"change_message_id":"29f056e40e2963e3e304fa88401dae3f4a3925e7","unresolved":false,"context_lines":[{"line_number":283,"context_line":""},{"line_number":284,"context_line":"    touch $IRONIC_VM_MACS_CSV_FILE"},{"line_number":285,"context_line":""},{"line_number":286,"context_line":"    $IRONIC_SCRIPTS_DIR/create-nodes $IRONIC_VM_SPECS_CPU $IRONIC_VM_SPECS_RAM $IRONIC_VM_SPECS_DISK amd64 $IRONIC_VM_COUNT $IRONIC_VM_NETWORK_BRIDGE $IRONIC_VM_EMULATOR | tee -a $IRONIC_VM_MACS_CSV_FILE"},{"line_number":287,"context_line":""},{"line_number":288,"context_line":"}"},{"line_number":289,"context_line":""}],"source_content_type":"application/octet-stream","patch_set":17,"id":"AAAAVn%2F%2Ff%2Fo%3D","line":286,"updated":"2014-03-05 19:24:23.000000000","message":"For some reason this ended up producing an empty macs file, causing enroll_vm\u0027s to not create the ironic nodes.  I noticed I had no libvirt domains defined.  Perhaps there should be some validation here or modification to create-nodes to fail fatally if it does not produce any nodes?","commit_id":"8f77879a1e9cb496fb0c3951c92d1b5d6a87ebe0"},{"author":{"_account_id":2889,"name":"Aeva Black","email":"aeva.online@gmail.com","username":"tenbrae"},"change_message_id":"47e1c82f50b05a773e7036b54799d3e96b70e36c","unresolved":false,"context_lines":[{"line_number":283,"context_line":""},{"line_number":284,"context_line":"    touch $IRONIC_VM_MACS_CSV_FILE"},{"line_number":285,"context_line":""},{"line_number":286,"context_line":"    $IRONIC_SCRIPTS_DIR/create-nodes $IRONIC_VM_SPECS_CPU $IRONIC_VM_SPECS_RAM $IRONIC_VM_SPECS_DISK amd64 $IRONIC_VM_COUNT $IRONIC_VM_NETWORK_BRIDGE $IRONIC_VM_EMULATOR | tee -a $IRONIC_VM_MACS_CSV_FILE"},{"line_number":287,"context_line":""},{"line_number":288,"context_line":"}"},{"line_number":289,"context_line":""}],"source_content_type":"application/octet-stream","patch_set":17,"id":"AAAAVn%2F%2Fe4M%3D","line":286,"in_reply_to":"AAAAVn%2F%2Ff%2Fo%3D","updated":"2014-03-05 20:30:32.000000000","message":"if $DEST is not set, then $IRONIC_VM_MACS_CSV_FILE will be \"/ironic-macs.csv\" which will not be writable. This is due to the problem on line 53.\n\nAlso, there needs to be error handling here. this script should abort rather than fail silently","commit_id":"8f77879a1e9cb496fb0c3951c92d1b5d6a87ebe0"},{"author":{"_account_id":5805,"name":"Chris Krelle","email":"nobodycam@gmail.com","username":"nobodycam"},"change_message_id":"47988515e63853581667749d6893471a0e12c243","unresolved":false,"context_lines":[{"line_number":299,"context_line":"    while read MAC; do"},{"line_number":300,"context_line":""},{"line_number":301,"context_line":"        NODE_ID\u003d$(ironic node-create --chassis_uuid $CHASSIS_ID --driver pxe_ssh \\"},{"line_number":302,"context_line":"            -i ssh_virt_type\u003dvirsh \\"},{"line_number":303,"context_line":"            -i ssh_address\u003d$IRONIC_VM_SSH_ADDRESS \\"},{"line_number":304,"context_line":"            -i ssh_port\u003d$IRONIC_VM_SSH_PORT \\"},{"line_number":305,"context_line":"            -i ssh_username\u003d$IRONIC_SSH_USERNAME \\"}],"source_content_type":"application/octet-stream","patch_set":17,"id":"AAAAVn%2F%2FWAo%3D","line":302,"updated":"2014-03-06 18:12:19.000000000","message":"Virt_type should configurable for those running vmware.","commit_id":"8f77879a1e9cb496fb0c3951c92d1b5d6a87ebe0"},{"author":{"_account_id":8003,"name":"Aleksandr Gordeev","email":"agordeev@mirantis.com","username":"agordeev"},"change_message_id":"2cbf3f3fffd359f4c5ab6885be49a85aa9069b03","unresolved":false,"context_lines":[{"line_number":299,"context_line":"    while read MAC; do"},{"line_number":300,"context_line":""},{"line_number":301,"context_line":"        NODE_ID\u003d$(ironic node-create --chassis_uuid $CHASSIS_ID --driver pxe_ssh \\"},{"line_number":302,"context_line":"            -i ssh_virt_type\u003dvirsh \\"},{"line_number":303,"context_line":"            -i ssh_address\u003d$IRONIC_VM_SSH_ADDRESS \\"},{"line_number":304,"context_line":"            -i ssh_port\u003d$IRONIC_VM_SSH_PORT \\"},{"line_number":305,"context_line":"            -i ssh_username\u003d$IRONIC_SSH_USERNAME \\"}],"source_content_type":"application/octet-stream","patch_set":17,"id":"AAAAVn%2F%2FO0Y%3D","line":302,"in_reply_to":"AAAAVn%2F%2FWAo%3D","updated":"2014-03-07 12:56:17.000000000","message":"Done","commit_id":"8f77879a1e9cb496fb0c3951c92d1b5d6a87ebe0"},{"author":{"_account_id":8106,"name":"Haomeng,Wang","email":"wanghaomeng@gmail.com","username":"whaom"},"change_message_id":"ceee9c055ab08591f033736be9a21b0b0c3c04fc","unresolved":false,"context_lines":[{"line_number":354,"context_line":"        mkdir -p $IRONIC_SSH_KEY_DIR"},{"line_number":355,"context_line":"    fi"},{"line_number":356,"context_line":"    # avoid overwriting already existent keypair"},{"line_number":357,"context_line":"    echo -e \u0027n\\n\u0027 | ssh-keygen -q -t rsa -P \u0027\u0027 -f $IRONIC_SSH_KEY_DIR/$IRONIC_SSH_KEY_FILENAME || true"},{"line_number":358,"context_line":"    if [[ ! -d $HOME/.ssh ]]; then"},{"line_number":359,"context_line":"        mkdir -p $HOME/.ssh"},{"line_number":360,"context_line":"        chmod 700 $HOME/.ssh"}],"source_content_type":"application/octet-stream","patch_set":17,"id":"AAAAVn%2F%2FjAk%3D","line":357,"updated":"2014-03-05 13:49:17.000000000","message":"It is better we remove the existing /opt/stack/ssh_keys/ironic_key file to avoid breaking here.","commit_id":"8f77879a1e9cb496fb0c3951c92d1b5d6a87ebe0"},{"author":{"_account_id":8003,"name":"Aleksandr Gordeev","email":"agordeev@mirantis.com","username":"agordeev"},"change_message_id":"2cbf3f3fffd359f4c5ab6885be49a85aa9069b03","unresolved":false,"context_lines":[{"line_number":354,"context_line":"        mkdir -p $IRONIC_SSH_KEY_DIR"},{"line_number":355,"context_line":"    fi"},{"line_number":356,"context_line":"    # avoid overwriting already existent keypair"},{"line_number":357,"context_line":"    echo -e \u0027n\\n\u0027 | ssh-keygen -q -t rsa -P \u0027\u0027 -f $IRONIC_SSH_KEY_DIR/$IRONIC_SSH_KEY_FILENAME || true"},{"line_number":358,"context_line":"    if [[ ! -d $HOME/.ssh ]]; then"},{"line_number":359,"context_line":"        mkdir -p $HOME/.ssh"},{"line_number":360,"context_line":"        chmod 700 $HOME/.ssh"}],"source_content_type":"application/octet-stream","patch_set":17,"id":"AAAAVn%2F%2FO2k%3D","line":357,"in_reply_to":"AAAAVn%2F%2Ff5U%3D","updated":"2014-03-07 12:56:17.000000000","message":"Done","commit_id":"8f77879a1e9cb496fb0c3951c92d1b5d6a87ebe0"},{"author":{"_account_id":970,"name":"Dean Troyer","email":"dtroyer@gmail.com","username":"dtroyer"},"change_message_id":"34a3fc3f551f23e528a658964fea1ddd84deac8d","unresolved":false,"context_lines":[{"line_number":354,"context_line":"        mkdir -p $IRONIC_SSH_KEY_DIR"},{"line_number":355,"context_line":"    fi"},{"line_number":356,"context_line":"    # avoid overwriting already existent keypair"},{"line_number":357,"context_line":"    echo -e \u0027n\\n\u0027 | ssh-keygen -q -t rsa -P \u0027\u0027 -f $IRONIC_SSH_KEY_DIR/$IRONIC_SSH_KEY_FILENAME || true"},{"line_number":358,"context_line":"    if [[ ! -d $HOME/.ssh ]]; then"},{"line_number":359,"context_line":"        mkdir -p $HOME/.ssh"},{"line_number":360,"context_line":"        chmod 700 $HOME/.ssh"}],"source_content_type":"application/octet-stream","patch_set":17,"id":"AAAAVn%2F%2Ff5U%3D","line":357,"in_reply_to":"AAAAVn%2F%2Fh2Y%3D","updated":"2014-03-05 19:15:24.000000000","message":"FWIW, Devstack does make the assumption that each run of stack.sh re-creates all data; all databases are re-initialized for example.  You will want to be consistent with that and not expect things to persist between runs.","commit_id":"8f77879a1e9cb496fb0c3951c92d1b5d6a87ebe0"},{"author":{"_account_id":8003,"name":"Aleksandr Gordeev","email":"agordeev@mirantis.com","username":"agordeev"},"change_message_id":"2cbf3f3fffd359f4c5ab6885be49a85aa9069b03","unresolved":false,"context_lines":[{"line_number":354,"context_line":"        mkdir -p $IRONIC_SSH_KEY_DIR"},{"line_number":355,"context_line":"    fi"},{"line_number":356,"context_line":"    # avoid overwriting already existent keypair"},{"line_number":357,"context_line":"    echo -e \u0027n\\n\u0027 | ssh-keygen -q -t rsa -P \u0027\u0027 -f $IRONIC_SSH_KEY_DIR/$IRONIC_SSH_KEY_FILENAME || true"},{"line_number":358,"context_line":"    if [[ ! -d $HOME/.ssh ]]; then"},{"line_number":359,"context_line":"        mkdir -p $HOME/.ssh"},{"line_number":360,"context_line":"        chmod 700 $HOME/.ssh"}],"source_content_type":"application/octet-stream","patch_set":17,"id":"AAAAVn%2F%2FO2o%3D","line":357,"in_reply_to":"AAAAVn%2F%2FjAk%3D","updated":"2014-03-07 12:56:17.000000000","message":"Done","commit_id":"8f77879a1e9cb496fb0c3951c92d1b5d6a87ebe0"},{"author":{"_account_id":8003,"name":"Aleksandr Gordeev","email":"agordeev@mirantis.com","username":"agordeev"},"change_message_id":"f1861dd7c8e38467bf7e8b3351617b2c69b32ebd","unresolved":false,"context_lines":[{"line_number":354,"context_line":"        mkdir -p $IRONIC_SSH_KEY_DIR"},{"line_number":355,"context_line":"    fi"},{"line_number":356,"context_line":"    # avoid overwriting already existent keypair"},{"line_number":357,"context_line":"    echo -e \u0027n\\n\u0027 | ssh-keygen -q -t rsa -P \u0027\u0027 -f $IRONIC_SSH_KEY_DIR/$IRONIC_SSH_KEY_FILENAME || true"},{"line_number":358,"context_line":"    if [[ ! -d $HOME/.ssh ]]; then"},{"line_number":359,"context_line":"        mkdir -p $HOME/.ssh"},{"line_number":360,"context_line":"        chmod 700 $HOME/.ssh"}],"source_content_type":"application/octet-stream","patch_set":17,"id":"AAAAVn%2F%2Fh2Y%3D","line":357,"in_reply_to":"AAAAVn%2F%2FjAk%3D","updated":"2014-03-05 15:46:00.000000000","message":"Sorry, I couldn’t agree with you, I don\u0027t think so.\n\nRight after creating new keypair it populates file with authorized_keys, but old keypair won\u0027t be deleted from authorized_keys. \nSimply, there is no need of keypair re-creating on every ./stack.sh run. Does that make sense?","commit_id":"8f77879a1e9cb496fb0c3951c92d1b5d6a87ebe0"},{"author":{"_account_id":970,"name":"Dean Troyer","email":"dtroyer@gmail.com","username":"dtroyer"},"change_message_id":"34a3fc3f551f23e528a658964fea1ddd84deac8d","unresolved":false,"context_lines":[{"line_number":367,"context_line":""},{"line_number":368,"context_line":"}"},{"line_number":369,"context_line":""},{"line_number":370,"context_line":"function _ssh_check {"},{"line_number":371,"context_line":"    local KEY_FILE\u003d$1"},{"line_number":372,"context_line":"    local FLOATING_IP\u003d$2"},{"line_number":373,"context_line":"    local PORT\u003d$3"}],"source_content_type":"application/octet-stream","patch_set":17,"id":"AAAAVn%2F%2Ff5A%3D","line":370,"updated":"2014-03-05 19:15:24.000000000","message":"since the function namespace is global, this name should be more unique, add \u0027ironic\u0027 to it maybe?","commit_id":"8f77879a1e9cb496fb0c3951c92d1b5d6a87ebe0"},{"author":{"_account_id":8003,"name":"Aleksandr Gordeev","email":"agordeev@mirantis.com","username":"agordeev"},"change_message_id":"2cbf3f3fffd359f4c5ab6885be49a85aa9069b03","unresolved":false,"context_lines":[{"line_number":367,"context_line":""},{"line_number":368,"context_line":"}"},{"line_number":369,"context_line":""},{"line_number":370,"context_line":"function _ssh_check {"},{"line_number":371,"context_line":"    local KEY_FILE\u003d$1"},{"line_number":372,"context_line":"    local FLOATING_IP\u003d$2"},{"line_number":373,"context_line":"    local PORT\u003d$3"}],"source_content_type":"application/octet-stream","patch_set":17,"id":"AAAAVn%2F%2FZ%2BY%3D","line":370,"in_reply_to":"AAAAVn%2F%2Ff5A%3D","updated":"2014-03-07 12:56:17.000000000","message":"Done","commit_id":"8f77879a1e9cb496fb0c3951c92d1b5d6a87ebe0"},{"author":{"_account_id":970,"name":"Dean Troyer","email":"dtroyer@gmail.com","username":"dtroyer"},"change_message_id":"34a3fc3f551f23e528a658964fea1ddd84deac8d","unresolved":false,"context_lines":[{"line_number":387,"context_line":"        echo \"ListenAddress $HOST_PORT\" | sudo tee -a $SSH_CONFIG"},{"line_number":388,"context_line":"    fi"},{"line_number":389,"context_line":""},{"line_number":390,"context_line":"    restart_service ssh"},{"line_number":391,"context_line":""},{"line_number":392,"context_line":"    _ssh_check $IRONIC_SSH_KEY_DIR/$IRONIC_SSH_KEY_FILENAME $IRONIC_VM_SSH_ADDRESS $IRONIC_VM_SSH_PORT $IRONIC_SSH_USERNAME 10"},{"line_number":393,"context_line":""}],"source_content_type":"application/octet-stream","patch_set":17,"id":"AAAAVn%2F%2Ff4I%3D","line":390,"updated":"2014-03-05 19:15:24.000000000","message":"IIRC this service name differs between Fedora and Ubuntu","commit_id":"8f77879a1e9cb496fb0c3951c92d1b5d6a87ebe0"},{"author":{"_account_id":8003,"name":"Aleksandr Gordeev","email":"agordeev@mirantis.com","username":"agordeev"},"change_message_id":"2cbf3f3fffd359f4c5ab6885be49a85aa9069b03","unresolved":false,"context_lines":[{"line_number":387,"context_line":"        echo \"ListenAddress $HOST_PORT\" | sudo tee -a $SSH_CONFIG"},{"line_number":388,"context_line":"    fi"},{"line_number":389,"context_line":""},{"line_number":390,"context_line":"    restart_service ssh"},{"line_number":391,"context_line":""},{"line_number":392,"context_line":"    _ssh_check $IRONIC_SSH_KEY_DIR/$IRONIC_SSH_KEY_FILENAME $IRONIC_VM_SSH_ADDRESS $IRONIC_VM_SSH_PORT $IRONIC_SSH_USERNAME 10"},{"line_number":393,"context_line":""}],"source_content_type":"application/octet-stream","patch_set":17,"id":"AAAAVn%2F%2FO0k%3D","line":390,"in_reply_to":"AAAAVn%2F%2Ff4I%3D","updated":"2014-03-07 12:56:17.000000000","message":"Done","commit_id":"8f77879a1e9cb496fb0c3951c92d1b5d6a87ebe0"},{"author":{"_account_id":8106,"name":"Haomeng,Wang","email":"wanghaomeng@gmail.com","username":"whaom"},"change_message_id":"20693e56b0a175fc26af44a7dfa71bcd8068e21e","unresolved":false,"context_lines":[{"line_number":389,"context_line":""},{"line_number":390,"context_line":"    restart_service ssh"},{"line_number":391,"context_line":""},{"line_number":392,"context_line":"    _ssh_check $IRONIC_SSH_KEY_DIR/$IRONIC_SSH_KEY_FILENAME $IRONIC_VM_SSH_ADDRESS $IRONIC_VM_SSH_PORT $IRONIC_SSH_USERNAME 10"},{"line_number":393,"context_line":""},{"line_number":394,"context_line":"}"},{"line_number":395,"context_line":""}],"source_content_type":"application/octet-stream","patch_set":17,"id":"AAAAVn%2F%2Fa7o%3D","line":392,"updated":"2014-03-06 06:51:07.000000000","message":"It is better we sleep 1-2 seconds to wait sshd service started beforeing checking the ssh connection, else we check ssh connection immediately, will get a break with error message \"server didn\u0027t become ssh-able\" .","commit_id":"8f77879a1e9cb496fb0c3951c92d1b5d6a87ebe0"},{"author":{"_account_id":8003,"name":"Aleksandr Gordeev","email":"agordeev@mirantis.com","username":"agordeev"},"change_message_id":"2cbf3f3fffd359f4c5ab6885be49a85aa9069b03","unresolved":false,"context_lines":[{"line_number":389,"context_line":""},{"line_number":390,"context_line":"    restart_service ssh"},{"line_number":391,"context_line":""},{"line_number":392,"context_line":"    _ssh_check $IRONIC_SSH_KEY_DIR/$IRONIC_SSH_KEY_FILENAME $IRONIC_VM_SSH_ADDRESS $IRONIC_VM_SSH_PORT $IRONIC_SSH_USERNAME 10"},{"line_number":393,"context_line":""},{"line_number":394,"context_line":"}"},{"line_number":395,"context_line":""}],"source_content_type":"application/octet-stream","patch_set":17,"id":"AAAAVn%2F%2FO0g%3D","line":392,"in_reply_to":"AAAAVn%2F%2Fa7o%3D","updated":"2014-03-07 12:56:17.000000000","message":"Done","commit_id":"8f77879a1e9cb496fb0c3951c92d1b5d6a87ebe0"},{"author":{"_account_id":970,"name":"Dean Troyer","email":"dtroyer@gmail.com","username":"dtroyer"},"change_message_id":"34a3fc3f551f23e528a658964fea1ddd84deac8d","unresolved":false,"context_lines":[{"line_number":414,"context_line":"    SERVICE_DIR\u003d${SERVICE_DIR:-${DEST}/status}"},{"line_number":415,"context_line":""},{"line_number":416,"context_line":"    # stop all nova services"},{"line_number":417,"context_line":"    for srv in api compute conductor cert scheduler novncproxy xvpvncproxy consoleauth objectstore; do"},{"line_number":418,"context_line":"        killall nova-${srv} || true"},{"line_number":419,"context_line":"    done"},{"line_number":420,"context_line":""}],"source_content_type":"application/octet-stream","patch_set":17,"id":"AAAAVn%2F%2Ff3g%3D","line":417,"updated":"2014-03-05 19:15:24.000000000","message":"Please use the existing stop_nova() functions","commit_id":"8f77879a1e9cb496fb0c3951c92d1b5d6a87ebe0"},{"author":{"_account_id":8003,"name":"Aleksandr Gordeev","email":"agordeev@mirantis.com","username":"agordeev"},"change_message_id":"2cbf3f3fffd359f4c5ab6885be49a85aa9069b03","unresolved":false,"context_lines":[{"line_number":414,"context_line":"    SERVICE_DIR\u003d${SERVICE_DIR:-${DEST}/status}"},{"line_number":415,"context_line":""},{"line_number":416,"context_line":"    # stop all nova services"},{"line_number":417,"context_line":"    for srv in api compute conductor cert scheduler novncproxy xvpvncproxy consoleauth objectstore; do"},{"line_number":418,"context_line":"        killall nova-${srv} || true"},{"line_number":419,"context_line":"    done"},{"line_number":420,"context_line":""}],"source_content_type":"application/octet-stream","patch_set":17,"id":"AAAAVn%2F%2FaBg%3D","line":417,"in_reply_to":"AAAAVn%2F%2Ff3g%3D","updated":"2014-03-07 12:56:17.000000000","message":"Done","commit_id":"8f77879a1e9cb496fb0c3951c92d1b5d6a87ebe0"},{"author":{"_account_id":8106,"name":"Haomeng,Wang","email":"wanghaomeng@gmail.com","username":"whaom"},"change_message_id":"7674d3de9500c207cd6f27883d8574e619236762","unresolved":false,"context_lines":[{"line_number":445,"context_line":"    # build and upload separate deploy kernel \u0026 ramdisk"},{"line_number":446,"context_line":"    upload_baremetal_deploy $TOKEN"},{"line_number":447,"context_line":""},{"line_number":448,"context_line":"    create_bridge_and_vms"},{"line_number":449,"context_line":"    enroll_vms"},{"line_number":450,"context_line":"}"},{"line_number":451,"context_line":""}],"source_content_type":"application/octet-stream","patch_set":20,"id":"AAAAVn%2F%2FKFA%3D","line":448,"updated":"2014-03-08 00:42:27.000000000","message":"we need to check the return code here and break if create_bridge_and_vms call failed, else, no any bridges and vms are created as well and continue to do the rest actions to complete.","commit_id":"b4a2ce136950852b2ed8ba9e61e2aa4abce5e9ec"},{"author":{"_account_id":8003,"name":"Aleksandr Gordeev","email":"agordeev@mirantis.com","username":"agordeev"},"change_message_id":"f0de899e8660aa4cab124fb58a8e4f48a944e083","unresolved":false,"context_lines":[{"line_number":445,"context_line":"    # build and upload separate deploy kernel \u0026 ramdisk"},{"line_number":446,"context_line":"    upload_baremetal_deploy $TOKEN"},{"line_number":447,"context_line":""},{"line_number":448,"context_line":"    create_bridge_and_vms"},{"line_number":449,"context_line":"    enroll_vms"},{"line_number":450,"context_line":"}"},{"line_number":451,"context_line":""}],"source_content_type":"application/octet-stream","patch_set":20,"id":"AAAAVn%2F%2B6j4%3D","line":448,"in_reply_to":"AAAAVn%2F%2FKFA%3D","updated":"2014-03-11 10:51:51.000000000","message":"Done","commit_id":"b4a2ce136950852b2ed8ba9e61e2aa4abce5e9ec"},{"author":{"_account_id":1420,"name":"Adam Gandelman","email":"adamg@ubuntu.com","username":"gandelman-a"},"change_message_id":"a76321c47ed4b156011e4edc22316b6a33ae0766","unresolved":false,"context_lines":[{"line_number":445,"context_line":"    # build and upload separate deploy kernel \u0026 ramdisk"},{"line_number":446,"context_line":"    upload_baremetal_deploy $TOKEN"},{"line_number":447,"context_line":""},{"line_number":448,"context_line":"    create_bridge_and_vms"},{"line_number":449,"context_line":"    enroll_vms"},{"line_number":450,"context_line":"}"},{"line_number":451,"context_line":""}],"source_content_type":"application/octet-stream","patch_set":20,"id":"AAAAVn%2F%2FJ70%3D","line":448,"in_reply_to":"AAAAVn%2F%2FKFA%3D","updated":"2014-03-08 01:45:13.000000000","message":"The external script tools/ironic/scripts/create-nodes should fail fatally on error now, and \u0027set +o pipefail\u0027 should cause the command at line 296 to to abort stack.sh if the external script has failed.   It was previously succeeding on error because tee was returning 0, even if create-nodes failed and it created an empty IRONIC_VM_MACS_CSV_FILE.  Alternatively, if depending on set -e is not enough, we could inspect the IRONIC_VM_MACS_CSV somewhere and assert it actually contains some MACs for node creation.","commit_id":"b4a2ce136950852b2ed8ba9e61e2aa4abce5e9ec"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"cc46b3cd684e48f276312585aadf0ae05e03058c","unresolved":false,"context_lines":[{"line_number":388,"context_line":"        chmod 700 $HOME/.ssh"},{"line_number":389,"context_line":"    fi"},{"line_number":390,"context_line":"    echo -e \u0027n\\n\u0027 | ssh-keygen -q -t rsa -P \u0027\u0027 -f $IRONIC_KEY_FILE"},{"line_number":391,"context_line":"    cat $IRONIC_KEY_FILE.pub | tee -a $IRONIC_AUTHORIZED_KEYS_FILE"},{"line_number":392,"context_line":"}"},{"line_number":393,"context_line":""},{"line_number":394,"context_line":"function ironic_ssh_check {"}],"source_content_type":"application/octet-stream","patch_set":22,"id":"AAAAWH%2F%2F0EE%3D","line":391,"updated":"2014-03-13 16:47:05.000000000","message":"Please add here:\nchmod 0600 $IRONIC_AUTHORIZED_KEYS_FILE \notherwise authorized keys file can be assigned wrong permissions and ssh won\u0027t work","commit_id":"ea489de2fa01dd46cc21ae98532cf39dfff52d2a"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"cc46b3cd684e48f276312585aadf0ae05e03058c","unresolved":false,"context_lines":[{"line_number":472,"context_line":"    if [ -f $IRONIC_KEY_FILE ]; then"},{"line_number":473,"context_line":"        KEY\u003d`cat $IRONIC_KEY_FILE.pub`"},{"line_number":474,"context_line":"        # remove public key from authorized_keys"},{"line_number":475,"context_line":"        grep -v \"$KEY\" $IRONIC_AUTHORIZED_KEYS_FILE \u003e temp \u0026\u0026 mv temp $IRONIC_AUTHORIZED_KEYS_FILE"},{"line_number":476,"context_line":"    fi"},{"line_number":477,"context_line":"    sudo rm -rf $IRONIC_DATA_DIR $IRONIC_STATE_PATH"},{"line_number":478,"context_line":"    sudo su $STACK_USER -c \"tools/ironic/scripts/cleanup-nodes $IRONIC_VM_COUNT $IRONIC_VM_NETWORK_BRIDGE\""}],"source_content_type":"application/octet-stream","patch_set":22,"id":"AAAAWH%2F%2F0D8%3D","line":475,"updated":"2014-03-13 16:47:05.000000000","message":"Please add here:\nchmod 0600 $IRONIC_AUTHORIZED_KEYS_FILE \notherwise authorized keys file can be assigned wrong permissions and ssh won\u0027t work","commit_id":"ea489de2fa01dd46cc21ae98532cf39dfff52d2a"},{"author":{"_account_id":970,"name":"Dean Troyer","email":"dtroyer@gmail.com","username":"dtroyer"},"change_message_id":"2925dc2d27cb80a49c38cffbb0de785b04e6237d","unresolved":false,"context_lines":[{"line_number":21,"context_line":"# Save trace setting"},{"line_number":22,"context_line":"XTRACE\u003d$(set +o | grep xtrace)"},{"line_number":23,"context_line":"set +o xtrace"},{"line_number":24,"context_line":"set +o pipefail"},{"line_number":25,"context_line":""},{"line_number":26,"context_line":"# Defaults"},{"line_number":27,"context_line":"# --------"}],"source_content_type":"application/octet-stream","patch_set":25,"id":"AAAAWH%2F%2FpNM%3D","line":24,"updated":"2014-03-14 19:52:24.000000000","message":"the pipefail setting needs to be saved and restored at the bottom of the file similar to xtrace","commit_id":"a61bc5feedae2666e5c3034991a7c1be5af4e232"},{"author":{"_account_id":970,"name":"Dean Troyer","email":"dtroyer@gmail.com","username":"dtroyer"},"change_message_id":"2925dc2d27cb80a49c38cffbb0de785b04e6237d","unresolved":false,"context_lines":[{"line_number":476,"context_line":"        chmod 0600 $IRONIC_AUTHORIZED_KEYS_FILE"},{"line_number":477,"context_line":"    fi"},{"line_number":478,"context_line":"    sudo rm -rf $IRONIC_DATA_DIR $IRONIC_STATE_PATH"},{"line_number":479,"context_line":"    sudo su $STACK_USER -c \"tools/ironic/scripts/cleanup-nodes $IRONIC_VM_COUNT $IRONIC_VM_NETWORK_BRIDGE\""},{"line_number":480,"context_line":"    sudo rm -rf /etc/xinetd.d/tftp /etc/init/tftpd-hpa.override"},{"line_number":481,"context_line":"    restart_service xinetd"},{"line_number":482,"context_line":"}"}],"source_content_type":"application/octet-stream","patch_set":25,"id":"AAAAWH%2F%2FpJw%3D","line":479,"updated":"2014-03-14 19:52:24.000000000","message":"This path should include $TOP_DIR\n\n  ... -c \"$TOP_DIR/tools/ironic/scripts ...","commit_id":"a61bc5feedae2666e5c3034991a7c1be5af4e232"}],"lib/nova_plugins/hypervisor-ironic":[{"author":{"_account_id":7419,"name":"Imre Farkas","email":"farkas.imre@gmail.com","username":"ifarkas"},"change_message_id":"679402bd56d0108091b77849c76069c79647bb56","unresolved":false,"context_lines":[{"line_number":36,"context_line":""},{"line_number":37,"context_line":"    iniset $NOVA_CONF ironic sql_connection `database_connection_url nova_bm`"},{"line_number":38,"context_line":"    LIBVIRT_FIREWALL_DRIVER\u003d${LIBVIRT_FIREWALL_DRIVER:-\"nova.virt.firewall.NoopFirewallDriver\"}"},{"line_number":39,"context_line":"    iniset $NOVA_CONF DEFAULT compute_driver nova.virt.ironic.IronicDriver"},{"line_number":40,"context_line":"    iniset $NOVA_CONF DEFAULT firewall_driver $LIBVIRT_FIREWALL_DRIVER"},{"line_number":41,"context_line":"    iniset $NOVA_CONF DEFAULT scheduler_host_manager nova.scheduler.ironic_host_manager.IronicHostManager"},{"line_number":42,"context_line":"    iniset $NOVA_CONF DEFAULT ram_allocation_ratio 1.0"}],"source_content_type":"application/octet-stream","patch_set":15,"id":"AAAAVn%2F%2F51U%3D","line":39,"updated":"2014-03-03 14:54:33.000000000","message":"Even if the value set here, I can\u0027t see it in my nova.conf and nova-compute fails with: http://paste.openstack.org/show/71759/","commit_id":"e69c4774254a42e1d828ed51965c3902623ff4c7"},{"author":{"_account_id":8003,"name":"Aleksandr Gordeev","email":"agordeev@mirantis.com","username":"agordeev"},"change_message_id":"05ccfbd571477ed2213f0e198cb75d56dc5ee843","unresolved":false,"context_lines":[{"line_number":36,"context_line":""},{"line_number":37,"context_line":"    iniset $NOVA_CONF ironic sql_connection `database_connection_url nova_bm`"},{"line_number":38,"context_line":"    LIBVIRT_FIREWALL_DRIVER\u003d${LIBVIRT_FIREWALL_DRIVER:-\"nova.virt.firewall.NoopFirewallDriver\"}"},{"line_number":39,"context_line":"    iniset $NOVA_CONF DEFAULT compute_driver nova.virt.ironic.IronicDriver"},{"line_number":40,"context_line":"    iniset $NOVA_CONF DEFAULT firewall_driver $LIBVIRT_FIREWALL_DRIVER"},{"line_number":41,"context_line":"    iniset $NOVA_CONF DEFAULT scheduler_host_manager nova.scheduler.ironic_host_manager.IronicHostManager"},{"line_number":42,"context_line":"    iniset $NOVA_CONF DEFAULT ram_allocation_ratio 1.0"}],"source_content_type":"application/octet-stream","patch_set":15,"id":"AAAAVn%2F%2Fv2c%3D","line":39,"in_reply_to":"AAAAVn%2F%2F51U%3D","updated":"2014-03-04 12:33:29.000000000","message":"Was VIRT_DRIVER\u003dironic added to your localrc ?","commit_id":"e69c4774254a42e1d828ed51965c3902623ff4c7"},{"author":{"_account_id":7419,"name":"Imre Farkas","email":"farkas.imre@gmail.com","username":"ifarkas"},"change_message_id":"c92aea7d087379ac13558f9dc809e4672b40438a","unresolved":false,"context_lines":[{"line_number":36,"context_line":""},{"line_number":37,"context_line":"    iniset $NOVA_CONF ironic sql_connection `database_connection_url nova_bm`"},{"line_number":38,"context_line":"    LIBVIRT_FIREWALL_DRIVER\u003d${LIBVIRT_FIREWALL_DRIVER:-\"nova.virt.firewall.NoopFirewallDriver\"}"},{"line_number":39,"context_line":"    iniset $NOVA_CONF DEFAULT compute_driver nova.virt.ironic.IronicDriver"},{"line_number":40,"context_line":"    iniset $NOVA_CONF DEFAULT firewall_driver $LIBVIRT_FIREWALL_DRIVER"},{"line_number":41,"context_line":"    iniset $NOVA_CONF DEFAULT scheduler_host_manager nova.scheduler.ironic_host_manager.IronicHostManager"},{"line_number":42,"context_line":"    iniset $NOVA_CONF DEFAULT ram_allocation_ratio 1.0"}],"source_content_type":"application/octet-stream","patch_set":15,"id":"AAAAVn%2F%2FjsY%3D","line":39,"in_reply_to":"AAAAVn%2F%2Fv2c%3D","updated":"2014-03-05 12:20:24.000000000","message":"I found what caused the issue. I used your localrc from your guide: http://paste.openstack.org/raw/70625/, so yes it originally contained the VIRT_DRIVER\u003dironic line. But then devstack added the SERVICE_TOKEN line without newline character and that\u0027s caused the failure.\n\nSo it works, thanks!","commit_id":"e69c4774254a42e1d828ed51965c3902623ff4c7"},{"author":{"_account_id":970,"name":"Dean Troyer","email":"dtroyer@gmail.com","username":"dtroyer"},"change_message_id":"34a3fc3f551f23e528a658964fea1ddd84deac8d","unresolved":false,"context_lines":[{"line_number":44,"context_line":"    # ironic section"},{"line_number":45,"context_line":"    iniset $NOVA_CONF ironic admin_username admin"},{"line_number":46,"context_line":"    iniset $NOVA_CONF ironic admin_password $ADMIN_PASSWORD"},{"line_number":47,"context_line":"    iniset $NOVA_CONF ironic admin_url http://$SERVICE_HOST:35357/v2.0"},{"line_number":48,"context_line":"    iniset $NOVA_CONF ironic admin_tenant_name demo"},{"line_number":49,"context_line":"    iniset $NOVA_CONF ironic api_endpoint http://$SERVICE_HOST:6358/v1"},{"line_number":50,"context_line":""}],"source_content_type":"application/octet-stream","patch_set":17,"id":"AAAAVn%2F%2FfzU%3D","line":47,"updated":"2014-03-05 19:15:24.000000000","message":"This URL needs to be built from $KEYSTONE_AUTH_PROTOCOL://$KEYSTONE_AUTH_HOST:$KEYSTONE_AUTH_PORT","commit_id":"8f77879a1e9cb496fb0c3951c92d1b5d6a87ebe0"},{"author":{"_account_id":8003,"name":"Aleksandr Gordeev","email":"agordeev@mirantis.com","username":"agordeev"},"change_message_id":"2cbf3f3fffd359f4c5ab6885be49a85aa9069b03","unresolved":false,"context_lines":[{"line_number":44,"context_line":"    # ironic section"},{"line_number":45,"context_line":"    iniset $NOVA_CONF ironic admin_username admin"},{"line_number":46,"context_line":"    iniset $NOVA_CONF ironic admin_password $ADMIN_PASSWORD"},{"line_number":47,"context_line":"    iniset $NOVA_CONF ironic admin_url http://$SERVICE_HOST:35357/v2.0"},{"line_number":48,"context_line":"    iniset $NOVA_CONF ironic admin_tenant_name demo"},{"line_number":49,"context_line":"    iniset $NOVA_CONF ironic api_endpoint http://$SERVICE_HOST:6358/v1"},{"line_number":50,"context_line":""}],"source_content_type":"application/octet-stream","patch_set":17,"id":"AAAAVn%2F%2FaFE%3D","line":47,"in_reply_to":"AAAAVn%2F%2FfzU%3D","updated":"2014-03-07 12:56:17.000000000","message":"Done","commit_id":"8f77879a1e9cb496fb0c3951c92d1b5d6a87ebe0"},{"author":{"_account_id":2889,"name":"Aeva Black","email":"aeva.online@gmail.com","username":"tenbrae"},"change_message_id":"6d912382e8eb7c5de2145a3340e8aa72ba863a1f","unresolved":false,"context_lines":[{"line_number":36,"context_line":""},{"line_number":37,"context_line":"    iniset $NOVA_CONF ironic sql_connection `database_connection_url nova_bm`"},{"line_number":38,"context_line":"    LIBVIRT_FIREWALL_DRIVER\u003d${LIBVIRT_FIREWALL_DRIVER:-\"nova.virt.firewall.NoopFirewallDriver\"}"},{"line_number":39,"context_line":"    iniset $NOVA_CONF DEFAULT compute_driver nova.virt.ironic.IronicDriver"},{"line_number":40,"context_line":"    iniset $NOVA_CONF DEFAULT firewall_driver $LIBVIRT_FIREWALL_DRIVER"},{"line_number":41,"context_line":"    iniset $NOVA_CONF DEFAULT scheduler_host_manager nova.scheduler.ironic_host_manager.IronicHostManager"},{"line_number":42,"context_line":"    iniset $NOVA_CONF DEFAULT ram_allocation_ratio 1.0"}],"source_content_type":"application/octet-stream","patch_set":19,"id":"AAAAVn%2F%2FNrI%3D","line":39,"updated":"2014-03-07 15:46:14.000000000","message":"With the \"ironic\" driver in our tree instead of Nova\u0027s, this line should now be:\n\n  initset $NOVA_CONF DEFAULT compute_driver ironic.nova.virt.ironic.IronicDriver","commit_id":"a62c01dde460f85a591375432aa798c29b734359"},{"author":{"_account_id":2889,"name":"Aeva Black","email":"aeva.online@gmail.com","username":"tenbrae"},"change_message_id":"6d912382e8eb7c5de2145a3340e8aa72ba863a1f","unresolved":false,"context_lines":[{"line_number":38,"context_line":"    LIBVIRT_FIREWALL_DRIVER\u003d${LIBVIRT_FIREWALL_DRIVER:-\"nova.virt.firewall.NoopFirewallDriver\"}"},{"line_number":39,"context_line":"    iniset $NOVA_CONF DEFAULT compute_driver nova.virt.ironic.IronicDriver"},{"line_number":40,"context_line":"    iniset $NOVA_CONF DEFAULT firewall_driver $LIBVIRT_FIREWALL_DRIVER"},{"line_number":41,"context_line":"    iniset $NOVA_CONF DEFAULT scheduler_host_manager nova.scheduler.ironic_host_manager.IronicHostManager"},{"line_number":42,"context_line":"    iniset $NOVA_CONF DEFAULT ram_allocation_ratio 1.0"},{"line_number":43,"context_line":"    iniset $NOVA_CONF DEFAULT reserved_host_memory_mb 0"},{"line_number":44,"context_line":"    # ironic section"}],"source_content_type":"application/octet-stream","patch_set":19,"id":"AAAAVn%2F%2FNrE%3D","line":41,"updated":"2014-03-07 15:46:14.000000000","message":"ditto","commit_id":"a62c01dde460f85a591375432aa798c29b734359"},{"author":{"_account_id":7419,"name":"Imre Farkas","email":"farkas.imre@gmail.com","username":"ifarkas"},"change_message_id":"deb85c804c3b78ea35abd0448144131a2bcff39a","unresolved":false,"context_lines":[{"line_number":38,"context_line":"    LIBVIRT_FIREWALL_DRIVER\u003d${LIBVIRT_FIREWALL_DRIVER:-\"nova.virt.firewall.NoopFirewallDriver\"}"},{"line_number":39,"context_line":"    iniset $NOVA_CONF DEFAULT compute_driver ironic.nova.virt.ironic.IronicDriver"},{"line_number":40,"context_line":"    iniset $NOVA_CONF DEFAULT firewall_driver $LIBVIRT_FIREWALL_DRIVER"},{"line_number":41,"context_line":"    iniset $NOVA_CONF DEFAULT scheduler_host_manager ironic.nova.scheduler.ironic_host_manager.IronicHostManager"},{"line_number":42,"context_line":"    iniset $NOVA_CONF DEFAULT ram_allocation_ratio 1.0"},{"line_number":43,"context_line":"    iniset $NOVA_CONF DEFAULT reserved_host_memory_mb 0"},{"line_number":44,"context_line":"    # ironic section"}],"source_content_type":"application/octet-stream","patch_set":20,"id":"AAAAVn%2F%2FChI%3D","line":41,"updated":"2014-03-10 14:13:23.000000000","message":"This line seems to be correct but stack.sh fails to start nova-scheduler: \n\nCRITICAL nova [-] ImportError: No module named nova.scheduler.ironic_host_manager","commit_id":"b4a2ce136950852b2ed8ba9e61e2aa4abce5e9ec"},{"author":{"_account_id":970,"name":"Dean Troyer","email":"dtroyer@gmail.com","username":"dtroyer"},"change_message_id":"2925dc2d27cb80a49c38cffbb0de785b04e6237d","unresolved":false,"context_lines":[{"line_number":48,"context_line":"    iniset $NOVA_CONF ironic admin_tenant_name demo"},{"line_number":49,"context_line":"    iniset $NOVA_CONF ironic api_endpoint http://$SERVICE_HOST:6358/v1"},{"line_number":50,"context_line":""},{"line_number":51,"context_line":"    # Define extra ironic nova conf flags by defining the array ``EXTRA_IRONIC_OPTS``."},{"line_number":52,"context_line":"    for I in \"${EXTRA_IRONIC_OPTS[@]}\"; do"},{"line_number":53,"context_line":"        # Attempt to convert flags to options"},{"line_number":54,"context_line":"        iniset $NOVA_CONF ironic ${I/\u003d/ }"}],"source_content_type":"application/octet-stream","patch_set":25,"id":"AAAAWH%2F%2FpI4%3D","line":51,"updated":"2014-03-14 19:52:24.000000000","message":"The use of EXTRA_xxx_OPTS is deprecated, this can be handled directly in local.conf now.","commit_id":"a61bc5feedae2666e5c3034991a7c1be5af4e232"}],"stack.sh":[{"author":{"_account_id":2889,"name":"Aeva Black","email":"aeva.online@gmail.com","username":"tenbrae"},"change_message_id":"c833044cf5a149b638a288396a839ec8257455f4","unresolved":false,"context_lines":[{"line_number":1287,"context_line":"        echo_summary \"Creating and uploading baremetal images for ironic\""},{"line_number":1288,"context_line":"    "},{"line_number":1289,"context_line":"        BM_BUILD_DEPLOY_RAMDISK\u003dTrue"},{"line_number":1290,"context_line":"        BM_DEPLOY_FLAVOR\u003d\"-a amd64 fedora deploy-ironic\""},{"line_number":1291,"context_line":"        # build and upload separate deploy kernel \u0026 ramdisk"},{"line_number":1292,"context_line":"        upload_baremetal_deploy $TOKEN"},{"line_number":1293,"context_line":"    "}],"source_content_type":"text/x-sh","patch_set":1,"id":"AAAAUH%2F98QA%3D","line":1290,"updated":"2014-01-31 20:48:18.000000000","message":"you should read these options from ENV vars, and override based on the current arch and distro, instead of hard-coding to fedora. See functions for GetDistro().\n\nAlso, lots of whitespace issues here","commit_id":"635da82dfa8eefc320dc36197164da935553a53c"},{"author":{"_account_id":2889,"name":"Aeva Black","email":"aeva.online@gmail.com","username":"tenbrae"},"change_message_id":"4447bb387c3fde14f7aad61fc7b93063ee8fcad9","unresolved":false,"context_lines":[{"line_number":1279,"context_line":"    screen_it baremetal \"cd ; nova-baremetal-deploy-helper\""},{"line_number":1280,"context_line":"fi"},{"line_number":1281,"context_line":""},{"line_number":1282,"context_line":"if is_service_enabled g-reg ir-api ir-cond; then"},{"line_number":1283,"context_line":"    if [[ \"$IRONIC_BAREMETAL_BASIC_OPS\" \u003d \"True\" ]]; then"},{"line_number":1284,"context_line":"        TOKEN\u003d$(keystone token-get | grep \u0027 id \u0027 | get_field 2)"},{"line_number":1285,"context_line":"        die_if_not_set $LINENO TOKEN \"Keystone fail to get token\""}],"source_content_type":"text/x-sh","patch_set":3,"id":"AAAAUH%2F9t6s%3D","line":1282,"updated":"2014-02-05 22:29:46.000000000","message":"also check for neutron and nova and keystone","commit_id":"80bd10dee05c4a30fee4d69537065a835baa8226"},{"author":{"_account_id":8003,"name":"Aleksandr Gordeev","email":"agordeev@mirantis.com","username":"agordeev"},"change_message_id":"03096c1d99110eba7e6426cbaf72e093acb17994","unresolved":false,"context_lines":[{"line_number":1279,"context_line":"    screen_it baremetal \"cd ; nova-baremetal-deploy-helper\""},{"line_number":1280,"context_line":"fi"},{"line_number":1281,"context_line":""},{"line_number":1282,"context_line":"if is_service_enabled g-reg ir-api ir-cond; then"},{"line_number":1283,"context_line":"    if [[ \"$IRONIC_BAREMETAL_BASIC_OPS\" \u003d \"True\" ]]; then"},{"line_number":1284,"context_line":"        TOKEN\u003d$(keystone token-get | grep \u0027 id \u0027 | get_field 2)"},{"line_number":1285,"context_line":"        die_if_not_set $LINENO TOKEN \"Keystone fail to get token\""}],"source_content_type":"text/x-sh","patch_set":3,"id":"AAAAUX%2F%2Fixo%3D","line":1282,"in_reply_to":"AAAAUH%2F9t6s%3D","updated":"2014-02-12 13:42:07.000000000","message":"Done","commit_id":"80bd10dee05c4a30fee4d69537065a835baa8226"},{"author":{"_account_id":5805,"name":"Chris Krelle","email":"nobodycam@gmail.com","username":"nobodycam"},"change_message_id":"a7097e7fbeb0a3bd7bbfdf53c1c2b3b1b32a0513","unresolved":false,"context_lines":[{"line_number":1277,"context_line":"            upload_baremetal_image $image_url $TOKEN"},{"line_number":1278,"context_line":"        done"},{"line_number":1279,"context_line":""},{"line_number":1280,"context_line":"        #TODO(agordeev): add neutron support"},{"line_number":1281,"context_line":"        create_brigde_and_vms"},{"line_number":1282,"context_line":"        start_dnsmasq_for_vms"},{"line_number":1283,"context_line":"        enroll_vms"}],"source_content_type":"text/x-sh","patch_set":6,"id":"AAAAUX%2F%2FUks%3D","line":1280,"updated":"2014-02-14 00:14:10.000000000","message":"I believe neutron support has landed in Ironic:\nsee comment in lib/ironic","commit_id":"ef800d14dc465da74861232dc81194f33239a512"}],"tools/ironic/scripts/create-nodes":[{"author":{"_account_id":10656,"name":"Adam Gandelman","username":"agandelman","inactive":true},"change_message_id":"29f056e40e2963e3e304fa88401dae3f4a3925e7","unresolved":false,"context_lines":[{"line_number":29,"context_line":""},{"line_number":30,"context_line":"# define the default storage pool if its not there yet"},{"line_number":31,"context_line":"(virsh pool-list --all | grep -q default) || ("},{"line_number":32,"context_line":"virsh pool-define-as --name default dir --target /var/lib/libvirt/images; virsh pool-autostart default; virsh pool-start default) \u003e\u00262"},{"line_number":33,"context_line":""},{"line_number":34,"context_line":"PREALLOC\u003d"},{"line_number":35,"context_line":"if [ -f /etc/debian_version ]; then"}],"source_content_type":"application/octet-stream","patch_set":17,"id":"AAAAVn%2F%2Ffps%3D","line":32,"updated":"2014-03-05 19:24:23.000000000","message":"This only starts the pool if its being defined for the first time and does not activate a pool that may be present but not active.","commit_id":"8f77879a1e9cb496fb0c3951c92d1b5d6a87ebe0"}],"tools/ironic/templates/brbm.xml":[{"author":{"_account_id":8106,"name":"Haomeng,Wang","email":"wanghaomeng@gmail.com","username":"whaom"},"change_message_id":"c5addc2a637ce82dfb6b17dc7156d1d2860be0a4","unresolved":false,"context_lines":[{"line_number":2,"context_line":"  \u003cname\u003ebrbm\u003c/name\u003e"},{"line_number":3,"context_line":"  \u003cforward mode\u003d\u0027bridge\u0027/\u003e"},{"line_number":4,"context_line":"  \u003cbridge name\u003d\u0027brbm\u0027/\u003e"},{"line_number":5,"context_line":"  \u003cvirtualport type\u003d\u0027openvswitch\u0027/\u003e"},{"line_number":6,"context_line":"\u003c/network\u003e"}],"source_content_type":"application/xml","patch_set":18,"id":"AAAAVn%2F%2FSUQ%3D","line":5,"updated":"2014-03-07 02:02:58.000000000","message":"this \u0027virtualport\u0027 option required libvirt  1.1.* version, so we have to ensure it is ready in the env.","commit_id":"7c322ad6c2820d225933ed1e8344fece27cc92a1"}]}
