)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":16233,"name":"Mauricio Lima","email":"mauriciolimab@gmail.com","username":"limamauricio"},"change_message_id":"ca22cb5b1a4fff38b8aaf2374a9026032571015e","unresolved":false,"context_lines":[{"line_number":9,"context_line":"rewrite kolla-ansible using python"},{"line_number":10,"context_line":""},{"line_number":11,"context_line":"Change-Id: I1aa234468817eaa2e9dfdce4671aa01f99e102ef"},{"line_number":12,"context_line":"Closes-Bug: #1534426"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":8,"id":"1af94dfe_d1bf7d5e","line":12,"range":{"start_line":12,"start_character":0,"end_line":12,"end_character":20},"updated":"2016-03-16 17:22:51.000000000","message":"This isn\u0027t a bug, maybe a new blueprint.","commit_id":"3c726aa0e17555b4c6d547836760673ab458b644"},{"author":{"_account_id":18009,"name":"Md Nadeem","email":"mail2nadeem92@gmail.com","username":"mail2nadeem92"},"change_message_id":"8d8906c73a9a0fecdfeb6e3b388912e185e167ee","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":8,"id":"1af94dfe_b6f69a5a","line":13,"updated":"2016-03-19 02:58:45.000000000","message":"Agree with Mauricio Lima, create a bp for it.","commit_id":"3c726aa0e17555b4c6d547836760673ab458b644"}],"kolla/cmd/kolla-ansible.py":[{"author":{"_account_id":11105,"name":"Swapnil Kulkarni","email":"coolsvap@gmail.com","username":"coolsvap"},"change_message_id":"92d9f259be66dcce81001a5fb3d0decbe61a445d","unresolved":false,"context_lines":[{"line_number":15,"context_line":"import argparse"},{"line_number":16,"context_line":"import os"},{"line_number":17,"context_line":"import sys"},{"line_number":18,"context_line":"from subprocess import check_call"},{"line_number":19,"context_line":""},{"line_number":20,"context_line":"import utils"},{"line_number":21,"context_line":""}],"source_content_type":"text/x-python","patch_set":4,"id":"da6ed579_c400a204","line":18,"updated":"2016-01-15 07:47:44.000000000","message":"Update the imports using guidelines at http://docs.openstack.org/developer/hacking/#import-order-template","commit_id":"c38e6a7b9e60023b6d84075a3bda84a2459ac3c4"},{"author":{"_account_id":7488,"name":"Jeffrey Zhang","email":"zhang.lei.fly@gmail.com","username":"Jeffrey4l"},"change_message_id":"0f90510bc950a7daab138eba5ec377792f62cdde","unresolved":false,"context_lines":[{"line_number":14,"context_line":""},{"line_number":15,"context_line":"import argparse"},{"line_number":16,"context_line":"import os"},{"line_number":17,"context_line":"from subprocess import check_call"},{"line_number":18,"context_line":""},{"line_number":19,"context_line":"import utils"},{"line_number":20,"context_line":""}],"source_content_type":"text/x-python","patch_set":5,"id":"da6ed579_78b87a75","line":17,"updated":"2016-01-15 08:18:16.000000000","message":"pls import module rather than function.\n\nhttp://docs.openstack.org/developer/hacking/#imports","commit_id":"564338b32f2c7152ae7e52b59736a0e55b154efb"},{"author":{"_account_id":13747,"name":"Kuo-tung Kao","email":"jelly.k@inwinstack.com","username":"coding1314"},"change_message_id":"6d2b6848d88ebb156421047023fcd02f6224d99c","unresolved":false,"context_lines":[{"line_number":14,"context_line":""},{"line_number":15,"context_line":"import argparse"},{"line_number":16,"context_line":"import os"},{"line_number":17,"context_line":"from subprocess import check_call"},{"line_number":18,"context_line":""},{"line_number":19,"context_line":"import utils"},{"line_number":20,"context_line":""}],"source_content_type":"text/x-python","patch_set":5,"id":"da6ed579_fb00e403","line":17,"in_reply_to":"da6ed579_78b87a75","updated":"2016-01-15 08:43:00.000000000","message":"fix it in next patch","commit_id":"564338b32f2c7152ae7e52b59736a0e55b154efb"},{"author":{"_account_id":7488,"name":"Jeffrey Zhang","email":"zhang.lei.fly@gmail.com","username":"Jeffrey4l"},"change_message_id":"0f90510bc950a7daab138eba5ec377792f62cdde","unresolved":false,"context_lines":[{"line_number":49,"context_line":"                        default\u003dDEFAULT_INVENTORY_PATH,"},{"line_number":50,"context_line":"                        help\u003d\u0027inventory path\u0027)"},{"line_number":51,"context_line":""},{"line_number":52,"context_line":"    subparsers \u003d parser.add_subparsers()"},{"line_number":53,"context_line":""},{"line_number":54,"context_line":"    add_parser(subparsers, \u0027deploy\u0027)"},{"line_number":55,"context_line":"    add_parser(subparsers, \u0027pull\u0027)"}],"source_content_type":"text/x-python","patch_set":5,"id":"da6ed579_5b56d006","line":52,"updated":"2016-01-15 08:18:16.000000000","message":"is there any necessary to add sub parsers here? \n\nThe positional argument should be enough.[0]\n\non the other hand, could we reuse the oslo.config library? it is already introduced into kolla.\n\n[0] https://docs.python.org/2/library/argparse.html#name-or-flags","commit_id":"564338b32f2c7152ae7e52b59736a0e55b154efb"},{"author":{"_account_id":13747,"name":"Kuo-tung Kao","email":"jelly.k@inwinstack.com","username":"coding1314"},"change_message_id":"6d2b6848d88ebb156421047023fcd02f6224d99c","unresolved":false,"context_lines":[{"line_number":49,"context_line":"                        default\u003dDEFAULT_INVENTORY_PATH,"},{"line_number":50,"context_line":"                        help\u003d\u0027inventory path\u0027)"},{"line_number":51,"context_line":""},{"line_number":52,"context_line":"    subparsers \u003d parser.add_subparsers()"},{"line_number":53,"context_line":""},{"line_number":54,"context_line":"    add_parser(subparsers, \u0027deploy\u0027)"},{"line_number":55,"context_line":"    add_parser(subparsers, \u0027pull\u0027)"}],"source_content_type":"text/x-python","patch_set":5,"id":"da6ed579_4e6dacca","line":52,"in_reply_to":"da6ed579_5b56d006","updated":"2016-01-15 08:43:00.000000000","message":"The reason why I use sub parsers is that maybe the script will support something like remove-container, remove-image, etc.","commit_id":"564338b32f2c7152ae7e52b59736a0e55b154efb"},{"author":{"_account_id":14119,"name":"Sam Yaple","email":"sam+git@yaple.net","username":"SamYaple"},"change_message_id":"fc2123c181fa54442f09b1bed314411560d704d7","unresolved":false,"context_lines":[{"line_number":48,"context_line":""},{"line_number":49,"context_line":"    deploy_parser.add_argument(\u0027-p\u0027, \u0027--playbook\u0027, type\u003dstr,"},{"line_number":50,"context_line":"                               default\u003dDEFAULT_PLAYBOOK_PATH,"},{"line_number":51,"context_line":"                               help\u003d\u0027playbookk\u0027)"},{"line_number":52,"context_line":""},{"line_number":53,"context_line":""},{"line_number":54,"context_line":"def main():"}],"source_content_type":"text/x-python","patch_set":6,"id":"da6ed579_bfb0a28c","line":51,"updated":"2016-01-18 15:59:07.000000000","message":"typo","commit_id":"20dd22c44614343ae247208abecbc43f05f423c7"},{"author":{"_account_id":13747,"name":"Kuo-tung Kao","email":"jelly.k@inwinstack.com","username":"coding1314"},"change_message_id":"3ebb513007b25d61f4764e03270a9dbfb10e7718","unresolved":false,"context_lines":[{"line_number":48,"context_line":""},{"line_number":49,"context_line":"    deploy_parser.add_argument(\u0027-p\u0027, \u0027--playbook\u0027, type\u003dstr,"},{"line_number":50,"context_line":"                               default\u003dDEFAULT_PLAYBOOK_PATH,"},{"line_number":51,"context_line":"                               help\u003d\u0027playbookk\u0027)"},{"line_number":52,"context_line":""},{"line_number":53,"context_line":""},{"line_number":54,"context_line":"def main():"}],"source_content_type":"text/x-python","patch_set":6,"id":"ba63e191_efa3034e","line":51,"in_reply_to":"da6ed579_bfb0a28c","updated":"2016-01-19 02:29:23.000000000","message":"fix in next patchset","commit_id":"20dd22c44614343ae247208abecbc43f05f423c7"},{"author":{"_account_id":14119,"name":"Sam Yaple","email":"sam+git@yaple.net","username":"SamYaple"},"change_message_id":"fc2123c181fa54442f09b1bed314411560d704d7","unresolved":false,"context_lines":[{"line_number":58,"context_line":"                        default\u003dDEFAULT_INVENTORY_PATH,"},{"line_number":59,"context_line":"                        help\u003d\u0027inventory path\u0027)"},{"line_number":60,"context_line":""},{"line_number":61,"context_line":"    subparsers \u003d parser.add_subparsers()"},{"line_number":62,"context_line":""},{"line_number":63,"context_line":"    add_parser(subparsers, \u0027deploy\u0027)"},{"line_number":64,"context_line":"    add_parser(subparsers, \u0027pull\u0027)"}],"source_content_type":"text/x-python","patch_set":6,"id":"da6ed579_9f7b5d7b","line":61,"updated":"2016-01-18 15:59:07.000000000","message":"still unsure about subparsers here even with your explanation. We add alot of stuff here that will only grow as we add more options and the only thing we are really changing is \u0027action\u003dargs.action\u0027 since they all run off the same playbook (site.yml)\n\nThere is an exception for pre/post-deploy but not for each individual action like this","commit_id":"20dd22c44614343ae247208abecbc43f05f423c7"},{"author":{"_account_id":13747,"name":"Kuo-tung Kao","email":"jelly.k@inwinstack.com","username":"coding1314"},"change_message_id":"3ebb513007b25d61f4764e03270a9dbfb10e7718","unresolved":false,"context_lines":[{"line_number":58,"context_line":"                        default\u003dDEFAULT_INVENTORY_PATH,"},{"line_number":59,"context_line":"                        help\u003d\u0027inventory path\u0027)"},{"line_number":60,"context_line":""},{"line_number":61,"context_line":"    subparsers \u003d parser.add_subparsers()"},{"line_number":62,"context_line":""},{"line_number":63,"context_line":"    add_parser(subparsers, \u0027deploy\u0027)"},{"line_number":64,"context_line":"    add_parser(subparsers, \u0027pull\u0027)"}],"source_content_type":"text/x-python","patch_set":6,"id":"ba63e191_afad0b33","line":61,"in_reply_to":"da6ed579_9f7b5d7b","updated":"2016-01-19 02:29:23.000000000","message":"Using subparsers or not is based on how many thing the script can do.\n\nI used subparsers before because I tried to use the script to remove containers. And the function doesn\u0027t use playbook. So I use subparser.\n\nhttps://review.openstack.org/#/c/264584/3/tools/kolla-ansible","commit_id":"20dd22c44614343ae247208abecbc43f05f423c7"},{"author":{"_account_id":7488,"name":"Jeffrey Zhang","email":"zhang.lei.fly@gmail.com","username":"Jeffrey4l"},"change_message_id":"5195a79d010b8155d2be5445766bad689896bb34","unresolved":false,"context_lines":[{"line_number":73,"context_line":"def main():"},{"line_number":74,"context_line":"    parser \u003d argparse.ArgumentParser(description\u003d\u0027kolla-ansible\u0027)"},{"line_number":75,"context_line":""},{"line_number":76,"context_line":"    parser.add_argument(\u0027-i\u0027, \u0027--inventory\u0027, type\u003dstr,"},{"line_number":77,"context_line":"                        default\u003dDEFAULT_INVENTORY_PATH,"},{"line_number":78,"context_line":"                        help\u003d\u0027inventory path\u0027)"},{"line_number":79,"context_line":""}],"source_content_type":"text/x-python","patch_set":8,"id":"9a68dd71_fe76373d","line":76,"updated":"2016-01-21 08:15:07.000000000","message":"I still expect we can re-use the oslo.config library, which has been added.","commit_id":"3c726aa0e17555b4c6d547836760673ab458b644"}],"kolla/cmd/utils.py":[{"author":{"_account_id":11105,"name":"Swapnil Kulkarni","email":"coolsvap@gmail.com","username":"coolsvap"},"change_message_id":"92d9f259be66dcce81001a5fb3d0decbe61a445d","unresolved":false,"context_lines":[{"line_number":1,"context_line":"# You may obtain a copy of the License at"},{"line_number":2,"context_line":"#"},{"line_number":3,"context_line":"#     http://www.apache.org/licenses/LICENSE-2.0"},{"line_number":4,"context_line":"#"}],"source_content_type":"text/x-python","patch_set":4,"id":"da6ed579_a9fb0746","line":1,"updated":"2016-01-15 07:47:44.000000000","message":"Licence not copied. First two lines missed.","commit_id":"c38e6a7b9e60023b6d84075a3bda84a2459ac3c4"},{"author":{"_account_id":11105,"name":"Swapnil Kulkarni","email":"coolsvap@gmail.com","username":"coolsvap"},"change_message_id":"92d9f259be66dcce81001a5fb3d0decbe61a445d","unresolved":false,"context_lines":[{"line_number":20,"context_line":"    else:"},{"line_number":21,"context_line":"        base_dir \u003d os.path.join(dir_path, \u0027../..\u0027)"},{"line_number":22,"context_line":"    return base_dir"},{"line_number":23,"context_line":""}],"source_content_type":"text/x-python","patch_set":4,"id":"da6ed579_29b5d77c","line":23,"updated":"2016-01-15 07:47:44.000000000","message":"two blank lines at end of file i think","commit_id":"c38e6a7b9e60023b6d84075a3bda84a2459ac3c4"},{"author":{"_account_id":7488,"name":"Jeffrey Zhang","email":"zhang.lei.fly@gmail.com","username":"Jeffrey4l"},"change_message_id":"0f90510bc950a7daab138eba5ec377792f62cdde","unresolved":false,"context_lines":[{"line_number":1,"context_line":"# Licensed under the Apache License, Version 2.0 (the \"License\");"},{"line_number":2,"context_line":"# you may not use this file except in compliance with the License."},{"line_number":3,"context_line":"# You may obtain a copy of the License at"},{"line_number":4,"context_line":"#"}],"source_content_type":"text/x-python","patch_set":5,"id":"da6ed579_d875e631","line":1,"updated":"2016-01-15 08:18:16.000000000","message":"pls move the this file to kolla folder, where is more reasonable.","commit_id":"564338b32f2c7152ae7e52b59736a0e55b154efb"},{"author":{"_account_id":13747,"name":"Kuo-tung Kao","email":"jelly.k@inwinstack.com","username":"coding1314"},"change_message_id":"d3757e9f5f69c379372bfbeed1423f29a8fe3f5a","unresolved":false,"context_lines":[{"line_number":1,"context_line":"# Licensed under the Apache License, Version 2.0 (the \"License\");"},{"line_number":2,"context_line":"# you may not use this file except in compliance with the License."},{"line_number":3,"context_line":"# You may obtain a copy of the License at"},{"line_number":4,"context_line":"#"}],"source_content_type":"text/x-python","patch_set":5,"id":"da6ed579_6e9bd066","line":1,"in_reply_to":"da6ed579_4e25ac59","updated":"2016-01-15 08:47:18.000000000","message":"Sorry. I misunderstand.","commit_id":"564338b32f2c7152ae7e52b59736a0e55b154efb"},{"author":{"_account_id":7488,"name":"Jeffrey Zhang","email":"zhang.lei.fly@gmail.com","username":"Jeffrey4l"},"change_message_id":"63a50fb3506ecf696fb04f29694e54b8743d70bf","unresolved":false,"context_lines":[{"line_number":1,"context_line":"# Licensed under the Apache License, Version 2.0 (the \"License\");"},{"line_number":2,"context_line":"# you may not use this file except in compliance with the License."},{"line_number":3,"context_line":"# You may obtain a copy of the License at"},{"line_number":4,"context_line":"#"}],"source_content_type":"text/x-python","patch_set":5,"id":"da6ed579_4e25ac59","line":1,"in_reply_to":"da6ed579_8ed3a45f","updated":"2016-01-15 08:44:32.000000000","message":"I means the utils.py file. move utils.py file to kolla/utils.py rather then kolla/cmd/utils.py","commit_id":"564338b32f2c7152ae7e52b59736a0e55b154efb"},{"author":{"_account_id":13747,"name":"Kuo-tung Kao","email":"jelly.k@inwinstack.com","username":"coding1314"},"change_message_id":"6d2b6848d88ebb156421047023fcd02f6224d99c","unresolved":false,"context_lines":[{"line_number":1,"context_line":"# Licensed under the Apache License, Version 2.0 (the \"License\");"},{"line_number":2,"context_line":"# you may not use this file except in compliance with the License."},{"line_number":3,"context_line":"# You may obtain a copy of the License at"},{"line_number":4,"context_line":"#"}],"source_content_type":"text/x-python","patch_set":5,"id":"da6ed579_8ed3a45f","line":1,"in_reply_to":"da6ed579_d875e631","updated":"2016-01-15 08:43:00.000000000","message":"It seems that all python file starts with license text in OpenStack project.","commit_id":"564338b32f2c7152ae7e52b59736a0e55b154efb"},{"author":{"_account_id":7488,"name":"Jeffrey Zhang","email":"zhang.lei.fly@gmail.com","username":"Jeffrey4l"},"change_message_id":"0f90510bc950a7daab138eba5ec377792f62cdde","unresolved":false,"context_lines":[{"line_number":14,"context_line":"import os.path"},{"line_number":15,"context_line":""},{"line_number":16,"context_line":""},{"line_number":17,"context_line":"def find_base_dir():"},{"line_number":18,"context_line":"    dir_path \u003d os.path.realpath(os.path.dirname(__file__))"},{"line_number":19,"context_line":"    if dir_path \u003d\u003d \u0027/usr/bin\u0027:"},{"line_number":20,"context_line":"        base_dir \u003d \u0027/usr/share/kolla\u0027"}],"source_content_type":"text/x-python","patch_set":5,"id":"da6ed579_98920e4b","line":17,"updated":"2016-01-15 08:18:16.000000000","message":"this logical should be not work with python virtual environment. Pls check the get_image_dir function in build.py[0]\n\n[0] https://github.com/openstack/kolla/blob/master/kolla/cmd/build.py#L332","commit_id":"564338b32f2c7152ae7e52b59736a0e55b154efb"},{"author":{"_account_id":13747,"name":"Kuo-tung Kao","email":"jelly.k@inwinstack.com","username":"coding1314"},"change_message_id":"6d2b6848d88ebb156421047023fcd02f6224d99c","unresolved":false,"context_lines":[{"line_number":14,"context_line":"import os.path"},{"line_number":15,"context_line":""},{"line_number":16,"context_line":""},{"line_number":17,"context_line":"def find_base_dir():"},{"line_number":18,"context_line":"    dir_path \u003d os.path.realpath(os.path.dirname(__file__))"},{"line_number":19,"context_line":"    if dir_path \u003d\u003d \u0027/usr/bin\u0027:"},{"line_number":20,"context_line":"        base_dir \u003d \u0027/usr/share/kolla\u0027"}],"source_content_type":"text/x-python","patch_set":5,"id":"da6ed579_2ec3988a","line":17,"in_reply_to":"da6ed579_98920e4b","updated":"2016-01-15 08:43:00.000000000","message":"fix it in next patch.","commit_id":"564338b32f2c7152ae7e52b59736a0e55b154efb"}],"tools/kolla-ansible":[{"author":{"_account_id":14119,"name":"Sam Yaple","email":"sam+git@yaple.net","username":"SamYaple"},"change_message_id":"91fd7169515287fb36ed10893b6e47a5f5e49228","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":3,"id":"da6ed579_b81a1c6d","updated":"2016-01-12 16:04:47.000000000","message":"Since we are full fleged python here, we should really be in kolla/kolla/cmd/* and reusing other Kolla bits","commit_id":"859fb2c62072fbde6f77461e01ddb39c84775218"},{"author":{"_account_id":13747,"name":"Kuo-tung Kao","email":"jelly.k@inwinstack.com","username":"coding1314"},"change_message_id":"a524b25a923dd1437f0faba322c4d5bc95fcf2d2","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":3,"id":"da6ed579_4346ec7b","in_reply_to":"da6ed579_b81a1c6d","updated":"2016-01-15 06:02:15.000000000","message":"Done","commit_id":"859fb2c62072fbde6f77461e01ddb39c84775218"},{"author":{"_account_id":14119,"name":"Sam Yaple","email":"sam+git@yaple.net","username":"SamYaple"},"change_message_id":"91fd7169515287fb36ed10893b6e47a5f5e49228","unresolved":false,"context_lines":[{"line_number":1,"context_line":"#! /usr/bin/env python"},{"line_number":2,"context_line":""},{"line_number":3,"context_line":"# Licensed under the Apache License, Version 2.0 (the \"License\");"},{"line_number":4,"context_line":"# you may not use this file except in compliance with the License."}],"source_content_type":"application/octet-stream","patch_set":3,"id":"da6ed579_fd7406d0","line":1,"updated":"2016-01-12 16:04:47.000000000","message":"should not havea space after the #!\n\n    #!/usr/bin/env python","commit_id":"859fb2c62072fbde6f77461e01ddb39c84775218"},{"author":{"_account_id":13747,"name":"Kuo-tung Kao","email":"jelly.k@inwinstack.com","username":"coding1314"},"change_message_id":"a524b25a923dd1437f0faba322c4d5bc95fcf2d2","unresolved":false,"context_lines":[{"line_number":1,"context_line":"#! /usr/bin/env python"},{"line_number":2,"context_line":""},{"line_number":3,"context_line":"# Licensed under the Apache License, Version 2.0 (the \"License\");"},{"line_number":4,"context_line":"# you may not use this file except in compliance with the License."}],"source_content_type":"application/octet-stream","patch_set":3,"id":"da6ed579_e3612006","line":1,"in_reply_to":"da6ed579_fd7406d0","updated":"2016-01-15 06:02:15.000000000","message":"Done","commit_id":"859fb2c62072fbde6f77461e01ddb39c84775218"},{"author":{"_account_id":14119,"name":"Sam Yaple","email":"sam+git@yaple.net","username":"SamYaple"},"change_message_id":"91fd7169515287fb36ed10893b6e47a5f5e49228","unresolved":false,"context_lines":[{"line_number":18,"context_line":"from subprocess import check_call"},{"line_number":19,"context_line":""},{"line_number":20,"context_line":""},{"line_number":21,"context_line":"def find_base_dir():"},{"line_number":22,"context_line":"    dir_path \u003d os.path.realpath(os.path.dirname(__file__))"},{"line_number":23,"context_line":"    if dir_path \u003d\u003d \u0027/usr/bin\u0027:"},{"line_number":24,"context_line":"        base_dir \u003d \u0027/usr/share/kolla\u0027"}],"source_content_type":"application/octet-stream","patch_set":3,"id":"da6ed579_fd096632","line":21,"updated":"2016-01-12 16:04:47.000000000","message":"this should be the same method as finding root in the build script.\n\nIf that means a refactor to reuse code from build, thats probably a good thing.","commit_id":"859fb2c62072fbde6f77461e01ddb39c84775218"},{"author":{"_account_id":13747,"name":"Kuo-tung Kao","email":"jelly.k@inwinstack.com","username":"coding1314"},"change_message_id":"a524b25a923dd1437f0faba322c4d5bc95fcf2d2","unresolved":false,"context_lines":[{"line_number":18,"context_line":"from subprocess import check_call"},{"line_number":19,"context_line":""},{"line_number":20,"context_line":""},{"line_number":21,"context_line":"def find_base_dir():"},{"line_number":22,"context_line":"    dir_path \u003d os.path.realpath(os.path.dirname(__file__))"},{"line_number":23,"context_line":"    if dir_path \u003d\u003d \u0027/usr/bin\u0027:"},{"line_number":24,"context_line":"        base_dir \u003d \u0027/usr/share/kolla\u0027"}],"source_content_type":"application/octet-stream","patch_set":3,"id":"da6ed579_c352dc34","line":21,"in_reply_to":"da6ed579_fd096632","updated":"2016-01-15 06:02:15.000000000","message":"I will refactor build.py in another patchset.","commit_id":"859fb2c62072fbde6f77461e01ddb39c84775218"},{"author":{"_account_id":14119,"name":"Sam Yaple","email":"sam+git@yaple.net","username":"SamYaple"},"change_message_id":"91fd7169515287fb36ed10893b6e47a5f5e49228","unresolved":false,"context_lines":[{"line_number":36,"context_line":"                                      \u0027inventory\u0027, \u0027all-in-one\u0027)"},{"line_number":37,"context_line":""},{"line_number":38,"context_line":""},{"line_number":39,"context_line":"def deploy_or_pull(args):"},{"line_number":40,"context_line":"    cmd \u003d [\u0027ansible-playbook\u0027, \u0027-i\u0027, args.inventory, \u0027-e\u0027,"},{"line_number":41,"context_line":"           \u0027@/etc/kolla/globals.yml\u0027, \u0027-e\u0027, \u0027@/etc/kolla/passwords.yml\u0027,"},{"line_number":42,"context_line":"           args.playbook, \u0027-e\u0027, \u0027action\u003d%s\u0027 % args.action]"}],"source_content_type":"application/octet-stream","patch_set":3,"id":"da6ed579_9834f8de","line":39,"updated":"2016-01-12 16:04:47.000000000","message":"this should be more dynamically named. We will ahve deploy, pull, upgrade, possibly remove, etc","commit_id":"859fb2c62072fbde6f77461e01ddb39c84775218"},{"author":{"_account_id":13747,"name":"Kuo-tung Kao","email":"jelly.k@inwinstack.com","username":"coding1314"},"change_message_id":"a524b25a923dd1437f0faba322c4d5bc95fcf2d2","unresolved":false,"context_lines":[{"line_number":36,"context_line":"                                      \u0027inventory\u0027, \u0027all-in-one\u0027)"},{"line_number":37,"context_line":""},{"line_number":38,"context_line":""},{"line_number":39,"context_line":"def deploy_or_pull(args):"},{"line_number":40,"context_line":"    cmd \u003d [\u0027ansible-playbook\u0027, \u0027-i\u0027, args.inventory, \u0027-e\u0027,"},{"line_number":41,"context_line":"           \u0027@/etc/kolla/globals.yml\u0027, \u0027-e\u0027, \u0027@/etc/kolla/passwords.yml\u0027,"},{"line_number":42,"context_line":"           args.playbook, \u0027-e\u0027, \u0027action\u003d%s\u0027 % args.action]"}],"source_content_type":"application/octet-stream","patch_set":3,"id":"da6ed579_433d8cdb","line":39,"in_reply_to":"da6ed579_9834f8de","updated":"2016-01-15 06:02:15.000000000","message":"Done","commit_id":"859fb2c62072fbde6f77461e01ddb39c84775218"},{"author":{"_account_id":13039,"name":"Martin André","email":"m.andre@redhat.com","username":"mandre"},"change_message_id":"d0cc45fcdd6d259bbee9a48962f26db82ebeeaec","unresolved":false,"context_lines":[{"line_number":37,"context_line":""},{"line_number":38,"context_line":""},{"line_number":39,"context_line":"def deploy_or_pull(args):"},{"line_number":40,"context_line":"    cmd \u003d [\u0027ansible-playbook\u0027, \u0027-i\u0027, args.inventory, \u0027-e\u0027,"},{"line_number":41,"context_line":"           \u0027@/etc/kolla/globals.yml\u0027, \u0027-e\u0027, \u0027@/etc/kolla/passwords.yml\u0027,"},{"line_number":42,"context_line":"           args.playbook, \u0027-e\u0027, \u0027action\u003d%s\u0027 % args.action]"},{"line_number":43,"context_line":"    check_call(cmd)"}],"source_content_type":"application/octet-stream","patch_set":3,"id":"da6ed579_090dfc8f","line":40,"updated":"2016-01-13 04:48:10.000000000","message":"We should be importing the \u0027ansible\u0027 module and call the ansible API if possible rather than shelling out.","commit_id":"859fb2c62072fbde6f77461e01ddb39c84775218"},{"author":{"_account_id":14119,"name":"Sam Yaple","email":"sam+git@yaple.net","username":"SamYaple"},"change_message_id":"0fdcfa451e67afca12a76b025ef57467ab43ee24","unresolved":false,"context_lines":[{"line_number":37,"context_line":""},{"line_number":38,"context_line":""},{"line_number":39,"context_line":"def deploy_or_pull(args):"},{"line_number":40,"context_line":"    cmd \u003d [\u0027ansible-playbook\u0027, \u0027-i\u0027, args.inventory, \u0027-e\u0027,"},{"line_number":41,"context_line":"           \u0027@/etc/kolla/globals.yml\u0027, \u0027-e\u0027, \u0027@/etc/kolla/passwords.yml\u0027,"},{"line_number":42,"context_line":"           args.playbook, \u0027-e\u0027, \u0027action\u003d%s\u0027 % args.action]"},{"line_number":43,"context_line":"    check_call(cmd)"}],"source_content_type":"application/octet-stream","patch_set":3,"id":"da6ed579_c5d7a921","line":40,"in_reply_to":"da6ed579_090dfc8f","updated":"2016-01-13 15:39:02.000000000","message":"We absolutely should not. This has come up a few times and we can discuss it further, but at this stage I am -2 on an implementation that tries to use python to import ansible.\n\nA big problem with this is Ansible was never meant to be importable like that. As such they don\u0027t have a stable \"api\" into the module. It changes from one version to the next (even minor versions). And finally there is no resemblance at all between the 1.x and 2.x branch.\n\nIf we are ever going to \"import ansible\" then it will have to be, at earliest, when everything is using ansible 2.0","commit_id":"859fb2c62072fbde6f77461e01ddb39c84775218"},{"author":{"_account_id":14119,"name":"Sam Yaple","email":"sam+git@yaple.net","username":"SamYaple"},"change_message_id":"91fd7169515287fb36ed10893b6e47a5f5e49228","unresolved":false,"context_lines":[{"line_number":39,"context_line":"def deploy_or_pull(args):"},{"line_number":40,"context_line":"    cmd \u003d [\u0027ansible-playbook\u0027, \u0027-i\u0027, args.inventory, \u0027-e\u0027,"},{"line_number":41,"context_line":"           \u0027@/etc/kolla/globals.yml\u0027, \u0027-e\u0027, \u0027@/etc/kolla/passwords.yml\u0027,"},{"line_number":42,"context_line":"           args.playbook, \u0027-e\u0027, \u0027action\u003d%s\u0027 % args.action]"},{"line_number":43,"context_line":"    check_call(cmd)"},{"line_number":44,"context_line":""},{"line_number":45,"context_line":""}],"source_content_type":"application/octet-stream","patch_set":3,"id":"da6ed579_984b9859","line":42,"updated":"2016-01-12 16:04:47.000000000","message":"please use .format()\n\n    \u0027action\u003d{}\u0027.format(args.action)","commit_id":"859fb2c62072fbde6f77461e01ddb39c84775218"},{"author":{"_account_id":13747,"name":"Kuo-tung Kao","email":"jelly.k@inwinstack.com","username":"coding1314"},"change_message_id":"a524b25a923dd1437f0faba322c4d5bc95fcf2d2","unresolved":false,"context_lines":[{"line_number":39,"context_line":"def deploy_or_pull(args):"},{"line_number":40,"context_line":"    cmd \u003d [\u0027ansible-playbook\u0027, \u0027-i\u0027, args.inventory, \u0027-e\u0027,"},{"line_number":41,"context_line":"           \u0027@/etc/kolla/globals.yml\u0027, \u0027-e\u0027, \u0027@/etc/kolla/passwords.yml\u0027,"},{"line_number":42,"context_line":"           args.playbook, \u0027-e\u0027, \u0027action\u003d%s\u0027 % args.action]"},{"line_number":43,"context_line":"    check_call(cmd)"},{"line_number":44,"context_line":""},{"line_number":45,"context_line":""}],"source_content_type":"application/octet-stream","patch_set":3,"id":"da6ed579_c3297c9c","line":42,"in_reply_to":"da6ed579_984b9859","updated":"2016-01-15 06:02:15.000000000","message":"Done","commit_id":"859fb2c62072fbde6f77461e01ddb39c84775218"},{"author":{"_account_id":14119,"name":"Sam Yaple","email":"sam+git@yaple.net","username":"SamYaple"},"change_message_id":"91fd7169515287fb36ed10893b6e47a5f5e49228","unresolved":false,"context_lines":[{"line_number":43,"context_line":"    check_call(cmd)"},{"line_number":44,"context_line":""},{"line_number":45,"context_line":""},{"line_number":46,"context_line":"def remove_containers(args):"},{"line_number":47,"context_line":"    script_path \u003d os.path.join(PROJECT_ROOT, \u0027tools\u0027, \u0027cleanup-containers\u0027)"},{"line_number":48,"context_line":"    call_remove_script(script_path, args)"},{"line_number":49,"context_line":""}],"source_content_type":"application/octet-stream","patch_set":3,"id":"da6ed579_58e9a019","line":46,"updated":"2016-01-12 16:04:47.000000000","message":"this should be a separate patchset (where this one is a refactor of teh existing into python)\n\nAdditionally, this should call an ansible cleanup script rather than the one in tools","commit_id":"859fb2c62072fbde6f77461e01ddb39c84775218"},{"author":{"_account_id":13747,"name":"Kuo-tung Kao","email":"jelly.k@inwinstack.com","username":"coding1314"},"change_message_id":"a524b25a923dd1437f0faba322c4d5bc95fcf2d2","unresolved":false,"context_lines":[{"line_number":43,"context_line":"    check_call(cmd)"},{"line_number":44,"context_line":""},{"line_number":45,"context_line":""},{"line_number":46,"context_line":"def remove_containers(args):"},{"line_number":47,"context_line":"    script_path \u003d os.path.join(PROJECT_ROOT, \u0027tools\u0027, \u0027cleanup-containers\u0027)"},{"line_number":48,"context_line":"    call_remove_script(script_path, args)"},{"line_number":49,"context_line":""}],"source_content_type":"application/octet-stream","patch_set":3,"id":"da6ed579_2311785d","line":46,"in_reply_to":"da6ed579_58e9a019","updated":"2016-01-15 06:02:15.000000000","message":"Done","commit_id":"859fb2c62072fbde6f77461e01ddb39c84775218"},{"author":{"_account_id":14119,"name":"Sam Yaple","email":"sam+git@yaple.net","username":"SamYaple"},"change_message_id":"91fd7169515287fb36ed10893b6e47a5f5e49228","unresolved":false,"context_lines":[{"line_number":48,"context_line":"    call_remove_script(script_path, args)"},{"line_number":49,"context_line":""},{"line_number":50,"context_line":""},{"line_number":51,"context_line":"def remove_images(args):"},{"line_number":52,"context_line":"    script_path \u003d os.path.join(PROJECT_ROOT, \u0027tools\u0027, \u0027cleanup-images\u0027)"},{"line_number":53,"context_line":"    call_remove_script(script_path, args)"},{"line_number":54,"context_line":""}],"source_content_type":"application/octet-stream","patch_set":3,"id":"da6ed579_78eee423","line":51,"updated":"2016-01-12 16:04:47.000000000","message":"same as above","commit_id":"859fb2c62072fbde6f77461e01ddb39c84775218"},{"author":{"_account_id":13747,"name":"Kuo-tung Kao","email":"jelly.k@inwinstack.com","username":"coding1314"},"change_message_id":"a524b25a923dd1437f0faba322c4d5bc95fcf2d2","unresolved":false,"context_lines":[{"line_number":48,"context_line":"    call_remove_script(script_path, args)"},{"line_number":49,"context_line":""},{"line_number":50,"context_line":""},{"line_number":51,"context_line":"def remove_images(args):"},{"line_number":52,"context_line":"    script_path \u003d os.path.join(PROJECT_ROOT, \u0027tools\u0027, \u0027cleanup-images\u0027)"},{"line_number":53,"context_line":"    call_remove_script(script_path, args)"},{"line_number":54,"context_line":""}],"source_content_type":"application/octet-stream","patch_set":3,"id":"da6ed579_4314ac4b","line":51,"in_reply_to":"da6ed579_78eee423","updated":"2016-01-15 06:02:15.000000000","message":"Done","commit_id":"859fb2c62072fbde6f77461e01ddb39c84775218"},{"author":{"_account_id":14119,"name":"Sam Yaple","email":"sam+git@yaple.net","username":"SamYaple"},"change_message_id":"91fd7169515287fb36ed10893b6e47a5f5e49228","unresolved":false,"context_lines":[{"line_number":53,"context_line":"    call_remove_script(script_path, args)"},{"line_number":54,"context_line":""},{"line_number":55,"context_line":""},{"line_number":56,"context_line":"def call_remove_script(script_path, args):"},{"line_number":57,"context_line":"    cmd \u003d [\u0027ansible\u0027, args.host_pattern, \u0027-i\u0027, args.inventory,"},{"line_number":58,"context_line":"           \u0027-m\u0027, \u0027script\u0027, \u0027-a\u0027, \u0027\"%s\"\u0027 % (script_path), \u0027-b\u0027]"},{"line_number":59,"context_line":"    check_call(cmd)"}],"source_content_type":"application/octet-stream","patch_set":3,"id":"da6ed579_38f86ce5","line":56,"updated":"2016-01-12 16:04:47.000000000","message":"same as above","commit_id":"859fb2c62072fbde6f77461e01ddb39c84775218"},{"author":{"_account_id":13747,"name":"Kuo-tung Kao","email":"jelly.k@inwinstack.com","username":"coding1314"},"change_message_id":"a524b25a923dd1437f0faba322c4d5bc95fcf2d2","unresolved":false,"context_lines":[{"line_number":53,"context_line":"    call_remove_script(script_path, args)"},{"line_number":54,"context_line":""},{"line_number":55,"context_line":""},{"line_number":56,"context_line":"def call_remove_script(script_path, args):"},{"line_number":57,"context_line":"    cmd \u003d [\u0027ansible\u0027, args.host_pattern, \u0027-i\u0027, args.inventory,"},{"line_number":58,"context_line":"           \u0027-m\u0027, \u0027script\u0027, \u0027-a\u0027, \u0027\"%s\"\u0027 % (script_path), \u0027-b\u0027]"},{"line_number":59,"context_line":"    check_call(cmd)"}],"source_content_type":"application/octet-stream","patch_set":3,"id":"da6ed579_e30fe034","line":56,"in_reply_to":"da6ed579_38f86ce5","updated":"2016-01-15 06:02:15.000000000","message":"Done","commit_id":"859fb2c62072fbde6f77461e01ddb39c84775218"},{"author":{"_account_id":14119,"name":"Sam Yaple","email":"sam+git@yaple.net","username":"SamYaple"},"change_message_id":"91fd7169515287fb36ed10893b6e47a5f5e49228","unresolved":false,"context_lines":[{"line_number":59,"context_line":"    check_call(cmd)"},{"line_number":60,"context_line":""},{"line_number":61,"context_line":""},{"line_number":62,"context_line":"def add_deploy_parser(subparsers):"},{"line_number":63,"context_line":"    deploy_parser \u003d subparsers.add_parser(\u0027deploy\u0027)"},{"line_number":64,"context_line":"    deploy_parser.set_defaults(action\u003d\u0027deploy\u0027)"},{"line_number":65,"context_line":""}],"source_content_type":"application/octet-stream","patch_set":3,"id":"da6ed579_d8f910ca","line":62,"updated":"2016-01-12 16:04:47.000000000","message":"I do not see why you need seperate parsers like this when only the action is changing (pull vs deploy vs upgrade) all the other code (like tags and filters) would be shared.","commit_id":"859fb2c62072fbde6f77461e01ddb39c84775218"},{"author":{"_account_id":13747,"name":"Kuo-tung Kao","email":"jelly.k@inwinstack.com","username":"coding1314"},"change_message_id":"a524b25a923dd1437f0faba322c4d5bc95fcf2d2","unresolved":false,"context_lines":[{"line_number":59,"context_line":"    check_call(cmd)"},{"line_number":60,"context_line":""},{"line_number":61,"context_line":""},{"line_number":62,"context_line":"def add_deploy_parser(subparsers):"},{"line_number":63,"context_line":"    deploy_parser \u003d subparsers.add_parser(\u0027deploy\u0027)"},{"line_number":64,"context_line":"    deploy_parser.set_defaults(action\u003d\u0027deploy\u0027)"},{"line_number":65,"context_line":""}],"source_content_type":"application/octet-stream","patch_set":3,"id":"da6ed579_1e084b27","line":62,"in_reply_to":"da6ed579_d8f910ca","updated":"2016-01-15 06:02:15.000000000","message":"Done","commit_id":"859fb2c62072fbde6f77461e01ddb39c84775218"},{"author":{"_account_id":14119,"name":"Sam Yaple","email":"sam+git@yaple.net","username":"SamYaple"},"change_message_id":"91fd7169515287fb36ed10893b6e47a5f5e49228","unresolved":false,"context_lines":[{"line_number":68,"context_line":"                               help\u003d\u0027playbookk\u0027)"},{"line_number":69,"context_line":""},{"line_number":70,"context_line":""},{"line_number":71,"context_line":"def add_pull_parser(subparsers):"},{"line_number":72,"context_line":"    pull_parser \u003d subparsers.add_parser(\u0027pull\u0027)"},{"line_number":73,"context_line":"    pull_parser.set_defaults(action\u003d\u0027pull\u0027)"},{"line_number":74,"context_line":""}],"source_content_type":"application/octet-stream","patch_set":3,"id":"da6ed579_f8f654d6","line":71,"updated":"2016-01-12 16:04:47.000000000","message":"same as above","commit_id":"859fb2c62072fbde6f77461e01ddb39c84775218"},{"author":{"_account_id":13747,"name":"Kuo-tung Kao","email":"jelly.k@inwinstack.com","username":"coding1314"},"change_message_id":"a524b25a923dd1437f0faba322c4d5bc95fcf2d2","unresolved":false,"context_lines":[{"line_number":68,"context_line":"                               help\u003d\u0027playbookk\u0027)"},{"line_number":69,"context_line":""},{"line_number":70,"context_line":""},{"line_number":71,"context_line":"def add_pull_parser(subparsers):"},{"line_number":72,"context_line":"    pull_parser \u003d subparsers.add_parser(\u0027pull\u0027)"},{"line_number":73,"context_line":"    pull_parser.set_defaults(action\u003d\u0027pull\u0027)"},{"line_number":74,"context_line":""}],"source_content_type":"application/octet-stream","patch_set":3,"id":"da6ed579_3e0bcf25","line":71,"in_reply_to":"da6ed579_f8f654d6","updated":"2016-01-15 06:02:15.000000000","message":"Done","commit_id":"859fb2c62072fbde6f77461e01ddb39c84775218"},{"author":{"_account_id":14119,"name":"Sam Yaple","email":"sam+git@yaple.net","username":"SamYaple"},"change_message_id":"91fd7169515287fb36ed10893b6e47a5f5e49228","unresolved":false,"context_lines":[{"line_number":77,"context_line":"                             help\u003d\u0027playbookk\u0027)"},{"line_number":78,"context_line":""},{"line_number":79,"context_line":""},{"line_number":80,"context_line":"def add_remove_containers_parser(subparsers):"},{"line_number":81,"context_line":"    remove_containers_parser \u003d subparsers.add_parser(\u0027remove-containers\u0027)"},{"line_number":82,"context_line":""},{"line_number":83,"context_line":"    remove_containers_parser.add_argument(\u0027--host-pattern\u0027, type\u003dstr,"}],"source_content_type":"application/octet-stream","patch_set":3,"id":"da6ed579_b8ee9cea","line":80,"updated":"2016-01-12 16:04:47.000000000","message":"please move this to a new patchset and review comments above\n\nbut on this note, there should be a safegaurd in here to prevent accidental removal. Whether special long option names, or a promt of some kind or both","commit_id":"859fb2c62072fbde6f77461e01ddb39c84775218"},{"author":{"_account_id":13747,"name":"Kuo-tung Kao","email":"jelly.k@inwinstack.com","username":"coding1314"},"change_message_id":"a524b25a923dd1437f0faba322c4d5bc95fcf2d2","unresolved":false,"context_lines":[{"line_number":77,"context_line":"                             help\u003d\u0027playbookk\u0027)"},{"line_number":78,"context_line":""},{"line_number":79,"context_line":""},{"line_number":80,"context_line":"def add_remove_containers_parser(subparsers):"},{"line_number":81,"context_line":"    remove_containers_parser \u003d subparsers.add_parser(\u0027remove-containers\u0027)"},{"line_number":82,"context_line":""},{"line_number":83,"context_line":"    remove_containers_parser.add_argument(\u0027--host-pattern\u0027, type\u003dstr,"}],"source_content_type":"application/octet-stream","patch_set":3,"id":"da6ed579_de16334b","line":80,"in_reply_to":"da6ed579_b8ee9cea","updated":"2016-01-15 06:02:15.000000000","message":"Done","commit_id":"859fb2c62072fbde6f77461e01ddb39c84775218"},{"author":{"_account_id":14119,"name":"Sam Yaple","email":"sam+git@yaple.net","username":"SamYaple"},"change_message_id":"fc2123c181fa54442f09b1bed314411560d704d7","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":6,"id":"da6ed579_bfcc21bc","updated":"2016-01-18 15:59:07.000000000","message":"instead of removing this file, convert it to a symlink pointing to ../kolla/cmd/kolla-ansible.py so its still useable in its current location","commit_id":"20dd22c44614343ae247208abecbc43f05f423c7"},{"author":{"_account_id":13747,"name":"Kuo-tung Kao","email":"jelly.k@inwinstack.com","username":"coding1314"},"change_message_id":"3ebb513007b25d61f4764e03270a9dbfb10e7718","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":6,"id":"ba63e191_af742bcf","in_reply_to":"da6ed579_bfcc21bc","updated":"2016-01-19 02:29:23.000000000","message":"It\u0027s strange. It was a symbol link already. I don\u0027t know why the web ui doesn\u0027t show it.","commit_id":"20dd22c44614343ae247208abecbc43f05f423c7"}]}
