)]}'
{"functional/cloud-init.sh":[{"author":{"_account_id":1112,"name":"Everett Toews","email":"everett.toews@rackspace.com","username":"everett-toews"},"change_message_id":"aebff3fa03bd59b6effd6bdb29dd02a8f8ece1ba","unresolved":false,"context_lines":[{"line_number":6,"context_line":"  set -x"},{"line_number":7,"context_line":"  FILENAME\u003d\"${0}\""},{"line_number":8,"context_line":"  BASENAME\u003d$(basename $FILENAME)"},{"line_number":9,"context_line":"  cp ${FILENAME} ~ubuntu/${BASENAME}"},{"line_number":10,"context_line":"  chown ubuntu:ubuntu ~ubuntu/${BASENAME}"},{"line_number":11,"context_line":"  chmod 775 ~ubuntu/${BASENAME}"},{"line_number":12,"context_line":"  sudo -i -u ubuntu /bin/bash ~ubuntu/${BASENAME}"}],"source_content_type":"text/x-sh","patch_set":4,"id":"9a80dd14_7be007fb","line":9,"updated":"2015-03-16 19:27:26.000000000","message":"Can\u0027t assume there\u0027s an ubuntu user.\n\nOne option is...\n\n    if you\u0027re root and ubuntu user doesn\u0027t exist\n        export STACK_USER\u003dubuntu\n        wget create-stack-user.sh [1]\n        chmod u+x create-stack-user.sh\n        ./create-stack-user.sh\n    \n(or something like that) and continue as ubuntu user.\n\n\n[1] http://git.openstack.org/cgit/openstack-dev/devstack/plain/tools/create-stack-user.sh","commit_id":"f880d425565e094a3802e9373fa9e45ef142a988"},{"author":{"_account_id":970,"name":"Dean Troyer","email":"dtroyer@gmail.com","username":"dtroyer"},"change_message_id":"98bf1493b4052d4a1aa5f02fe96672aa4f75a1b4","unresolved":false,"context_lines":[{"line_number":11,"context_line":"  chmod 775 ~ubuntu/${BASENAME}"},{"line_number":12,"context_line":"  sudo -i -u ubuntu /bin/bash ~ubuntu/${BASENAME}"},{"line_number":13,"context_line":"  exit 0"},{"line_number":14,"context_line":"fi"},{"line_number":15,"context_line":"echo \u0027~ubuntu~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\u0027"},{"line_number":16,"context_line":"cd ~ubuntu"},{"line_number":17,"context_line":"PASSWORD\u003d\"PASSWORD_VALUE\""}],"source_content_type":"text/x-sh","patch_set":4,"id":"9a80dd14_413436fb","line":14,"updated":"2015-03-16 19:17:49.000000000","message":"FWIW we gave up trying to make this work in DevStack.  stack.sh now just bails out if you\u0027re root and points to a script to build a user account.","commit_id":"f880d425565e094a3802e9373fa9e45ef142a988"},{"author":{"_account_id":1112,"name":"Everett Toews","email":"everett.toews@rackspace.com","username":"everett-toews"},"change_message_id":"aebff3fa03bd59b6effd6bdb29dd02a8f8ece1ba","unresolved":false,"context_lines":[{"line_number":15,"context_line":"echo \u0027~ubuntu~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\u0027"},{"line_number":16,"context_line":"cd ~ubuntu"},{"line_number":17,"context_line":"PASSWORD\u003d\"PASSWORD_VALUE\""},{"line_number":18,"context_line":""},{"line_number":19,"context_line":"sudo apt-get update"},{"line_number":20,"context_line":"sudo apt-get install -y git"},{"line_number":21,"context_line":"sudo apt-get install -y python-virtualenv"}],"source_content_type":"text/x-sh","patch_set":4,"id":"9a80dd14_1b862b17","line":18,"updated":"2015-03-16 19:27:26.000000000","message":"I think you should explicitly comment on what the dependencies below are for. Otherwise it seems like devstack.sh does install everything it needs.","commit_id":"f880d425565e094a3802e9373fa9e45ef142a988"},{"author":{"_account_id":970,"name":"Dean Troyer","email":"dtroyer@gmail.com","username":"dtroyer"},"change_message_id":"98bf1493b4052d4a1aa5f02fe96672aa4f75a1b4","unresolved":false,"context_lines":[{"line_number":18,"context_line":""},{"line_number":19,"context_line":"sudo apt-get update"},{"line_number":20,"context_line":"sudo apt-get install -y git"},{"line_number":21,"context_line":"sudo apt-get install -y python-virtualenv"},{"line_number":22,"context_line":"sudo apt-get install -y python-pip"},{"line_number":23,"context_line":"sudo apt-get install -y python-dev"},{"line_number":24,"context_line":"sudo apt-get install -y libffi-dev"}],"source_content_type":"text/x-sh","patch_set":4,"id":"9a80dd14_fc8a2d63","line":21,"updated":"2015-03-16 19:17:49.000000000","message":"DevStack will remove the system packages for pip and virtual-env and bootstrap then from PyPI.  We make a log of assumption about having current tooling in too many places as that\u0027s the only way things work.  Python packaging sucks, it sucks a bit less if pip is current.","commit_id":"f880d425565e094a3802e9373fa9e45ef142a988"},{"author":{"_account_id":970,"name":"Dean Troyer","email":"dtroyer@gmail.com","username":"dtroyer"},"change_message_id":"98bf1493b4052d4a1aa5f02fe96672aa4f75a1b4","unresolved":false,"context_lines":[{"line_number":22,"context_line":"sudo apt-get install -y python-pip"},{"line_number":23,"context_line":"sudo apt-get install -y python-dev"},{"line_number":24,"context_line":"sudo apt-get install -y libffi-dev"},{"line_number":25,"context_line":"sudo apt-get install -y libssl-dev"},{"line_number":26,"context_line":""},{"line_number":27,"context_line":"echo \u0027~devstack~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\u0027"},{"line_number":28,"context_line":"git clone https://github.com/openstack-dev/devstack.git"}],"source_content_type":"text/x-sh","patch_set":4,"id":"9a80dd14_1cce21b8","line":25,"updated":"2015-03-16 19:17:49.000000000","message":"DevStack should also get the needed dependencies, try it without these.  If it doesn\u0027t work I probably need to take a look at it.  FWIW, DevStack keeps its distro dependencies in files/debs/* sorted by project.  files/debs/general is always installed.\n\nfiles/debs/devlibs is installed to build a bunch of wheels.  Ugh, except hat hasn\u0027t been backported to stable/juno yet.","commit_id":"f880d425565e094a3802e9373fa9e45ef142a988"},{"author":{"_account_id":970,"name":"Dean Troyer","email":"dtroyer@gmail.com","username":"dtroyer"},"change_message_id":"98bf1493b4052d4a1aa5f02fe96672aa4f75a1b4","unresolved":false,"context_lines":[{"line_number":27,"context_line":"echo \u0027~devstack~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\u0027"},{"line_number":28,"context_line":"git clone https://github.com/openstack-dev/devstack.git"},{"line_number":29,"context_line":"pushd devstack/"},{"line_number":30,"context_line":"git checkout stable/juno"},{"line_number":31,"context_line":"cat \u003elocal.conf \u003c\u003c!"},{"line_number":32,"context_line":"[[local|localrc]]"},{"line_number":33,"context_line":"SCREEN_LOGDIR\u003d/opt/stack/logs/screen"}],"source_content_type":"text/x-sh","patch_set":4,"id":"9a80dd14_7c0c7d3c","line":30,"updated":"2015-03-16 19:17:49.000000000","message":"Do you plan to always use a stable branch here?  This will come up against some of the same issues we hit with a branchless Tempest setup, it ended up need to know a lot about the target system so it didn\u0027t expect tests to pass that shouldn\u0027t pass on that particular OpenStack release.","commit_id":"f880d425565e094a3802e9373fa9e45ef142a988"},{"author":{"_account_id":970,"name":"Dean Troyer","email":"dtroyer@gmail.com","username":"dtroyer"},"change_message_id":"98bf1493b4052d4a1aa5f02fe96672aa4f75a1b4","unresolved":false,"context_lines":[{"line_number":39,"context_line":"SERVICE_PASSWORD\u003d${PASSWORD}"},{"line_number":40,"context_line":"SWIFT_HASH\u003d${PASSWORD}"},{"line_number":41,"context_line":""},{"line_number":42,"context_line":"enable_service s-proxy"},{"line_number":43,"context_line":"enable_service s-object"},{"line_number":44,"context_line":"enable_service s-container"},{"line_number":45,"context_line":"enable_service s-account"}],"source_content_type":"text/x-sh","patch_set":4,"id":"9a80dd14_5c55f9f8","line":42,"updated":"2015-03-16 19:17:49.000000000","message":"You can shorten this a bit wiht multiple services on a single line:\n\n  enable_service s-proxy s-object s-container s-account\n\nI do it by project in my template local.conf so a single comment/uncomment gets a whole project.","commit_id":"f880d425565e094a3802e9373fa9e45ef142a988"}],"functional/devstack.py":[{"author":{"_account_id":1112,"name":"Everett Toews","email":"everett.toews@rackspace.com","username":"everett-toews"},"change_message_id":"aebff3fa03bd59b6effd6bdb29dd02a8f8ece1ba","unresolved":false,"context_lines":[{"line_number":37,"context_line":""},{"line_number":38,"context_line":"def create(conn, name, opts):"},{"line_number":39,"context_line":"    flavor \u003d opts.data.pop(\u0027flavor\u0027, \u0027103\u0027)"},{"line_number":40,"context_line":"    image \u003d opts.data.pop(\u0027image\u0027, \u0027bec3cab5-4722-40b9-a78a-3489218e22fe\u0027)"},{"line_number":41,"context_line":"    network_name \u003d opts.data.pop(\u0027network_name\u0027, name)"},{"line_number":42,"context_line":"    password \u003d opts.data.pop(\u0027password\u0027, \u0027wapiti\u0027)"},{"line_number":43,"context_line":""}],"source_content_type":"text/x-python","patch_set":4,"id":"9a80dd14_9b869bb9","line":40,"updated":"2015-03-16 19:27:26.000000000","message":"I don\u0027t think we should have defaults here at all. These IDs won\u0027t work with every OpenStack cloud and I expect that even these IDs will change over time from the cloud this script was originally written on. Having defaults like this implies that these are special IDs in some way.","commit_id":"f880d425565e094a3802e9373fa9e45ef142a988"},{"author":{"_account_id":1112,"name":"Everett Toews","email":"everett.toews@rackspace.com","username":"everett-toews"},"change_message_id":"aebff3fa03bd59b6effd6bdb29dd02a8f8ece1ba","unresolved":false,"context_lines":[{"line_number":41,"context_line":"    network_name \u003d opts.data.pop(\u0027network_name\u0027, name)"},{"line_number":42,"context_line":"    password \u003d opts.data.pop(\u0027password\u0027, \u0027wapiti\u0027)"},{"line_number":43,"context_line":""},{"line_number":44,"context_line":"    ports \u003d [22, 80, 443, 5000]"},{"line_number":45,"context_line":"    if network_name:"},{"line_number":46,"context_line":"        net \u003d network.create(conn, network_name, opts, ports_to_open\u003dports)"},{"line_number":47,"context_line":""}],"source_content_type":"text/x-python","patch_set":4,"id":"9a80dd14_41ca761b","line":44,"updated":"2015-03-16 19:27:26.000000000","message":"Wouldn\u0027t you need to open many more ports? \n\ne.g. 8774 for nova, 9696 for neutron, 8776 for cinder, etc. etc.","commit_id":"f880d425565e094a3802e9373fa9e45ef142a988"},{"author":{"_account_id":8257,"name":"Brian Curtin","email":"brian@python.org","username":"briancurtin"},"change_message_id":"fe766cccef4a87c9178e9426fa889d957f250c34","unresolved":false,"context_lines":[{"line_number":61,"context_line":"        }"},{"line_number":62,"context_line":"        if network_name:"},{"line_number":63,"context_line":"            args[\"networks\"] \u003d [{\"uuid\": net.id}]"},{"line_number":64,"context_line":"        server \u003d conn.compute.create_server(**args)"},{"line_number":65,"context_line":"    else:"},{"line_number":66,"context_line":"        server \u003d conn.get(server)"},{"line_number":67,"context_line":"    print(str(server))"}],"source_content_type":"text/x-python","patch_set":4,"id":"9a80dd14_d0846db3","line":64,"updated":"2015-03-10 18:33:16.000000000","message":"Could we make this:\n\n create_server(name\u003dname, flavor\u003dflavor, image\u003dimage, key_name\u003dname,\n               user_data\u003db64str, networks\u003dnetworks)\n\nI think we should be promoting using the resource attribute names instead of using the names we\u0027ve hidden (imageRef and flavorRef) and building up a dictionary to make the call.","commit_id":"f880d425565e094a3802e9373fa9e45ef142a988"},{"author":{"_account_id":8736,"name":"Terry Howe","email":"terrylhowe@gmail.com","username":"terrylhowe"},"change_message_id":"e94accf563fe52d351bf54ce1a6544e527dfd322","unresolved":false,"context_lines":[{"line_number":61,"context_line":"        }"},{"line_number":62,"context_line":"        if network_name:"},{"line_number":63,"context_line":"            args[\"networks\"] \u003d [{\"uuid\": net.id}]"},{"line_number":64,"context_line":"        server \u003d conn.compute.create_server(**args)"},{"line_number":65,"context_line":"    else:"},{"line_number":66,"context_line":"        server \u003d conn.get(server)"},{"line_number":67,"context_line":"    print(str(server))"}],"source_content_type":"text/x-python","patch_set":4,"id":"9a80dd14_a2e6c6e6","line":64,"in_reply_to":"9a80dd14_d0846db3","updated":"2015-03-10 20:08:03.000000000","message":"Yeh, good call.  This is copypasta from some old code.","commit_id":"f880d425565e094a3802e9373fa9e45ef142a988"},{"author":{"_account_id":1112,"name":"Everett Toews","email":"everett.toews@rackspace.com","username":"everett-toews"},"change_message_id":"aebff3fa03bd59b6effd6bdb29dd02a8f8ece1ba","unresolved":false,"context_lines":[{"line_number":70,"context_line":"    print(\u0027Server is up.\u0027)"},{"line_number":71,"context_line":""},{"line_number":72,"context_line":"    if len(server.get_floating_ips()) \u003c\u003d 0:"},{"line_number":73,"context_line":"        extnet \u003d conn.network.find_network(\"Ext-Net\")"},{"line_number":74,"context_line":"        ip \u003d conn.network.find_available_ip()"},{"line_number":75,"context_line":"        if ip is None:"},{"line_number":76,"context_line":"            ip \u003d conn.network.create_ip(floating_network_id\u003dextnet.id)"}],"source_content_type":"text/x-python","patch_set":4,"id":"9a80dd14_1c99c1d0","line":73,"updated":"2015-03-16 19:27:26.000000000","message":"I take it Ext-Net is a special network name?","commit_id":"f880d425565e094a3802e9373fa9e45ef142a988"},{"author":{"_account_id":1112,"name":"Everett Toews","email":"everett.toews@rackspace.com","username":"everett-toews"},"change_message_id":"aebff3fa03bd59b6effd6bdb29dd02a8f8ece1ba","unresolved":false,"context_lines":[{"line_number":79,"context_line":"        print(str(port))"},{"line_number":80,"context_line":"        ip \u003d conn.get(ip)"},{"line_number":81,"context_line":"        print(\"ssh -i ~/.ssh/%s ubuntu@%s\" % (name, ip.floating_ip_address))"},{"line_number":82,"context_line":"        print(\"http://%s\" % ip.floating_ip_address)"},{"line_number":83,"context_line":""},{"line_number":84,"context_line":"    return"},{"line_number":85,"context_line":""}],"source_content_type":"text/x-python","patch_set":4,"id":"9a80dd14_3cd3e560","line":82,"updated":"2015-03-16 19:27:26.000000000","message":"Should move these 2 prints out of the if statement.\n\nIf the user is running this script and that devstack server already exisits, it would be nice to get a reminder of the IP.","commit_id":"f880d425565e094a3802e9373fa9e45ef142a988"},{"author":{"_account_id":8257,"name":"Brian Curtin","email":"brian@python.org","username":"briancurtin"},"change_message_id":"fe766cccef4a87c9178e9426fa889d957f250c34","unresolved":false,"context_lines":[{"line_number":101,"context_line":""},{"line_number":102,"context_line":""},{"line_number":103,"context_line":"def run(opts):"},{"line_number":104,"context_line":"    argument \u003d opts.argument"},{"line_number":105,"context_line":"    conn \u003d connection.make_connection(opts)"},{"line_number":106,"context_line":"    name \u003d opts.data.pop(\u0027name\u0027, \u0027devstark\u0027)"},{"line_number":107,"context_line":"    if argument \u003d\u003d \"delete\":"}],"source_content_type":"text/x-python","patch_set":4,"id":"9a80dd14_359a13c6","line":104,"updated":"2015-03-10 18:33:16.000000000","message":"I think this would be better to use common.option_parser() and then add --delete and --create arguments to that parser, then call parse_args, and then go from there. Or better yet, maybe add those as subparsers and have specific arguments on each of them.\n\nI think this would make for cleaner interactions elsewhere instead of the opts.data.pop stuff.","commit_id":"f880d425565e094a3802e9373fa9e45ef142a988"},{"author":{"_account_id":8736,"name":"Terry Howe","email":"terrylhowe@gmail.com","username":"terrylhowe"},"change_message_id":"e94accf563fe52d351bf54ce1a6544e527dfd322","unresolved":false,"context_lines":[{"line_number":101,"context_line":""},{"line_number":102,"context_line":""},{"line_number":103,"context_line":"def run(opts):"},{"line_number":104,"context_line":"    argument \u003d opts.argument"},{"line_number":105,"context_line":"    conn \u003d connection.make_connection(opts)"},{"line_number":106,"context_line":"    name \u003d opts.data.pop(\u0027name\u0027, \u0027devstark\u0027)"},{"line_number":107,"context_line":"    if argument \u003d\u003d \"delete\":"}],"source_content_type":"text/x-python","patch_set":4,"id":"9a80dd14_a29ec605","line":104,"in_reply_to":"9a80dd14_359a13c6","updated":"2015-03-10 20:08:03.000000000","message":"I was wondering if I should have a server directory under example and put a create.py and delete.py under there.  What do you think about that?","commit_id":"f880d425565e094a3802e9373fa9e45ef142a988"},{"author":{"_account_id":1112,"name":"Everett Toews","email":"everett.toews@rackspace.com","username":"everett-toews"},"change_message_id":"aebff3fa03bd59b6effd6bdb29dd02a8f8ece1ba","unresolved":false,"context_lines":[{"line_number":103,"context_line":"def run(opts):"},{"line_number":104,"context_line":"    argument \u003d opts.argument"},{"line_number":105,"context_line":"    conn \u003d connection.make_connection(opts)"},{"line_number":106,"context_line":"    name \u003d opts.data.pop(\u0027name\u0027, \u0027devstark\u0027)"},{"line_number":107,"context_line":"    if argument \u003d\u003d \"delete\":"},{"line_number":108,"context_line":"        return(delete(conn, name, opts))"},{"line_number":109,"context_line":"    return(create(conn, name, opts))"}],"source_content_type":"text/x-python","patch_set":4,"id":"9a80dd14_3c6125a9","line":106,"updated":"2015-03-16 19:27:26.000000000","message":"Intentional misspelling here?","commit_id":"f880d425565e094a3802e9373fa9e45ef142a988"}]}
