)]}'
{"setup.cfg":[{"author":{"_account_id":5196,"name":"Matthew Treinish","email":"mtreinish@kortar.org","username":"treinish"},"change_message_id":"5e314effa987f383812fd070329d4c3609607797","unresolved":false,"context_lines":[{"line_number":22,"context_line":"    javelin2 \u003d tempest.cmd.javelin:main"},{"line_number":23,"context_line":"    run-tempest-stress \u003d tempest.cmd.run_stress:main"},{"line_number":24,"context_line":"    tempest-cleanup \u003d tempest.cmd.cleanup:main"},{"line_number":25,"context_line":"    account-generator \u003d tempest.cmd.account_generator:main"},{"line_number":26,"context_line":""},{"line_number":27,"context_line":"oslo.config.opts \u003d"},{"line_number":28,"context_line":"    tempest.config \u003d tempest.config:list_opts"}],"source_content_type":"text/x-ttcn-cfg","patch_set":14,"id":"7a016987_db513064","line":25,"updated":"2015-05-14 23:22:51.000000000","message":"Can you call this tempest-account-generator instead of just account-generator, I think that without tempest it\u0027s too generic a name","commit_id":"3fe845c1d5df9e5752398e71efe7845eb81c43dc"},{"author":{"_account_id":9377,"name":"Sergey Slipushenko","email":"slipushenko@gmail.com","username":"sslypushenko"},"change_message_id":"76f61cecdfcc9999aec9055f2040108d6808cc4d","unresolved":false,"context_lines":[{"line_number":22,"context_line":"    javelin2 \u003d tempest.cmd.javelin:main"},{"line_number":23,"context_line":"    run-tempest-stress \u003d tempest.cmd.run_stress:main"},{"line_number":24,"context_line":"    tempest-cleanup \u003d tempest.cmd.cleanup:main"},{"line_number":25,"context_line":"    account-generator \u003d tempest.cmd.account_generator:main"},{"line_number":26,"context_line":""},{"line_number":27,"context_line":"oslo.config.opts \u003d"},{"line_number":28,"context_line":"    tempest.config \u003d tempest.config:list_opts"}],"source_content_type":"text/x-ttcn-cfg","patch_set":14,"id":"7a016987_43277cb6","line":25,"in_reply_to":"7a016987_db513064","updated":"2015-05-15 14:40:01.000000000","message":"Done","commit_id":"3fe845c1d5df9e5752398e71efe7845eb81c43dc"}],"tempest/cmd/account_generator.py":[{"author":{"_account_id":5196,"name":"Matthew Treinish","email":"mtreinish@kortar.org","username":"treinish"},"change_message_id":"f34eb25bebe091979817c8e57c7a9b5d491c6d37","unresolved":false,"context_lines":[{"line_number":32,"context_line":""},{"line_number":33,"context_line":""},{"line_number":34,"context_line":"def get_random_str(length):"},{"line_number":35,"context_line":"    return \u0027\u0027.join(random.choice(CHARS) for _ in range(length))"},{"line_number":36,"context_line":""},{"line_number":37,"context_line":""},{"line_number":38,"context_line":"def setup_logging():"}],"source_content_type":"text/x-python","patch_set":1,"id":"7aaa499b_0694e5df","line":35,"updated":"2015-04-13 21:15:37.000000000","message":"just use random_name from tempest-lib","commit_id":"3214d5e5b9e230aa2465a6be89170a50f9061b22"},{"author":{"_account_id":5196,"name":"Matthew Treinish","email":"mtreinish@kortar.org","username":"treinish"},"change_message_id":"1ca1db4e2c693ae20957682c008bb94e54ac8fcc","unresolved":false,"context_lines":[{"line_number":68,"context_line":"    )"},{"line_number":69,"context_line":""},{"line_number":70,"context_line":""},{"line_number":71,"context_line":"def create_resources(resources):"},{"line_number":72,"context_line":"    admin \u003d keystone_admin()"},{"line_number":73,"context_line":"    existing \u003d [x[\u0027name\u0027] for x in admin.list_tenants()]"},{"line_number":74,"context_line":"    for tenant in resources[\u0027tenants\u0027]:"}],"source_content_type":"text/x-python","patch_set":6,"id":"dac4157f_94f8154b","line":71,"updated":"2015-04-21 13:56:32.000000000","message":"So this method looks very similar to what we do in isolated_creds.py is there a reason to not just use that? Not that it really matters.","commit_id":"5018e871aac1490d298ab301f00f58edacc3d8f7"},{"author":{"_account_id":9377,"name":"Sergey Slipushenko","email":"slipushenko@gmail.com","username":"sslypushenko"},"change_message_id":"6e2dd4a0716dbb7bec55cc4d7d9e556a42332b89","unresolved":false,"context_lines":[{"line_number":68,"context_line":"    )"},{"line_number":69,"context_line":""},{"line_number":70,"context_line":""},{"line_number":71,"context_line":"def create_resources(resources):"},{"line_number":72,"context_line":"    admin \u003d keystone_admin()"},{"line_number":73,"context_line":"    existing \u003d [x[\u0027name\u0027] for x in admin.list_tenants()]"},{"line_number":74,"context_line":"    for tenant in resources[\u0027tenants\u0027]:"}],"source_content_type":"text/x-python","patch_set":6,"id":"dac4157f_34247fad","line":71,"in_reply_to":"dac4157f_94f8154b","updated":"2015-04-22 10:10:44.000000000","message":"At the first look isolated_creds has a little bit intricate interface. So, it is just for simplicity and additional control. If you insist on isoleted_creds, I can rewite this code.","commit_id":"5018e871aac1490d298ab301f00f58edacc3d8f7"},{"author":{"_account_id":5196,"name":"Matthew Treinish","email":"mtreinish@kortar.org","username":"treinish"},"change_message_id":"1ca1db4e2c693ae20957682c008bb94e54ac8fcc","unresolved":false,"context_lines":[{"line_number":111,"context_line":"                role \u003d filter(lambda r_: r_[\u0027name\u0027] \u003d\u003d r, roles)[0]"},{"line_number":112,"context_line":"            except IndexError:"},{"line_number":113,"context_line":"                LOG.error(\"Role: %s - not found\" % r)"},{"line_number":114,"context_line":"                continue"},{"line_number":115,"context_line":"            try:"},{"line_number":116,"context_line":"                admin.assign_user_role(tenant[\u0027id\u0027],"},{"line_number":117,"context_line":"                                       user[\u0027id\u0027],"}],"source_content_type":"text/x-python","patch_set":6,"id":"dac4157f_948ff5cb","line":114,"updated":"2015-04-21 13:56:32.000000000","message":"Maybe instead of just logging it, we should raise an InvalidConfiguration exception and fail","commit_id":"5018e871aac1490d298ab301f00f58edacc3d8f7"},{"author":{"_account_id":9377,"name":"Sergey Slipushenko","email":"slipushenko@gmail.com","username":"sslypushenko"},"change_message_id":"6e2dd4a0716dbb7bec55cc4d7d9e556a42332b89","unresolved":false,"context_lines":[{"line_number":111,"context_line":"                role \u003d filter(lambda r_: r_[\u0027name\u0027] \u003d\u003d r, roles)[0]"},{"line_number":112,"context_line":"            except IndexError:"},{"line_number":113,"context_line":"                LOG.error(\"Role: %s - not found\" % r)"},{"line_number":114,"context_line":"                continue"},{"line_number":115,"context_line":"            try:"},{"line_number":116,"context_line":"                admin.assign_user_role(tenant[\u0027id\u0027],"},{"line_number":117,"context_line":"                                       user[\u0027id\u0027],"}],"source_content_type":"text/x-python","patch_set":6,"id":"dac4157f_20c67a9a","line":114,"in_reply_to":"dac4157f_948ff5cb","updated":"2015-04-22 10:10:44.000000000","message":"Done","commit_id":"5018e871aac1490d298ab301f00f58edacc3d8f7"},{"author":{"_account_id":5196,"name":"Matthew Treinish","email":"mtreinish@kortar.org","username":"treinish"},"change_message_id":"1ca1db4e2c693ae20957682c008bb94e54ac8fcc","unresolved":false,"context_lines":[{"line_number":127,"context_line":"    spec \u003d [{\u0027number\u0027: 2,"},{"line_number":128,"context_line":"             \u0027prefix\u0027: \u0027default\u0027,"},{"line_number":129,"context_line":"             \u0027roles\u0027: (CONF.auth.tempest_roles +"},{"line_number":130,"context_line":"                       [CONF.object_storage.operator_role])},"},{"line_number":131,"context_line":"            {\u0027number\u0027: 1,"},{"line_number":132,"context_line":"             \u0027prefix\u0027: \u0027swift_admin\u0027,"},{"line_number":133,"context_line":"             \u0027roles\u0027: (CONF.auth.tempest_roles +"}],"source_content_type":"text/x-python","patch_set":6,"id":"dac4157f_145c05ec","line":130,"updated":"2015-04-21 13:56:32.000000000","message":"Shouldn\u0027t the operator role be a separate group? That\u0027s what I did for all of my testing at least, not sure if it matters","commit_id":"5018e871aac1490d298ab301f00f58edacc3d8f7"},{"author":{"_account_id":9377,"name":"Sergey Slipushenko","email":"slipushenko@gmail.com","username":"sslypushenko"},"change_message_id":"6e2dd4a0716dbb7bec55cc4d7d9e556a42332b89","unresolved":false,"context_lines":[{"line_number":127,"context_line":"    spec \u003d [{\u0027number\u0027: 2,"},{"line_number":128,"context_line":"             \u0027prefix\u0027: \u0027default\u0027,"},{"line_number":129,"context_line":"             \u0027roles\u0027: (CONF.auth.tempest_roles +"},{"line_number":130,"context_line":"                       [CONF.object_storage.operator_role])},"},{"line_number":131,"context_line":"            {\u0027number\u0027: 1,"},{"line_number":132,"context_line":"             \u0027prefix\u0027: \u0027swift_admin\u0027,"},{"line_number":133,"context_line":"             \u0027roles\u0027: (CONF.auth.tempest_roles +"}],"source_content_type":"text/x-python","patch_set":6,"id":"dac4157f_40e16efd","line":130,"in_reply_to":"dac4157f_145c05ec","updated":"2015-04-22 10:10:44.000000000","message":"Done","commit_id":"5018e871aac1490d298ab301f00f58edacc3d8f7"},{"author":{"_account_id":5196,"name":"Matthew Treinish","email":"mtreinish@kortar.org","username":"treinish"},"change_message_id":"1ca1db4e2c693ae20957682c008bb94e54ac8fcc","unresolved":false,"context_lines":[{"line_number":149,"context_line":"    resources \u003d {\u0027tenants\u0027: tenants,"},{"line_number":150,"context_line":"                 \u0027users\u0027: []}"},{"line_number":151,"context_line":"    for tenant in tenants:"},{"line_number":152,"context_line":"        for user_group in spec:"},{"line_number":153,"context_line":"            if OPTS.tag:"},{"line_number":154,"context_line":"                users \u003d [data_utils.rand_name("},{"line_number":155,"context_line":"                    \u0027-\u0027.join((OPTS.tag, user_group[\u0027prefix\u0027])))"}],"source_content_type":"text/x-python","patch_set":6,"id":"dac4157f_d408cd2f","line":152,"updated":"2015-04-21 13:56:32.000000000","message":"So this is incorrect, each user needs a separate tenant here. The point of the accounts file is that it provides the same isolation that tenant isolation provides but without dynamic resource creation.","commit_id":"5018e871aac1490d298ab301f00f58edacc3d8f7"},{"author":{"_account_id":9377,"name":"Sergey Slipushenko","email":"slipushenko@gmail.com","username":"sslypushenko"},"change_message_id":"6e2dd4a0716dbb7bec55cc4d7d9e556a42332b89","unresolved":false,"context_lines":[{"line_number":149,"context_line":"    resources \u003d {\u0027tenants\u0027: tenants,"},{"line_number":150,"context_line":"                 \u0027users\u0027: []}"},{"line_number":151,"context_line":"    for tenant in tenants:"},{"line_number":152,"context_line":"        for user_group in spec:"},{"line_number":153,"context_line":"            if OPTS.tag:"},{"line_number":154,"context_line":"                users \u003d [data_utils.rand_name("},{"line_number":155,"context_line":"                    \u0027-\u0027.join((OPTS.tag, user_group[\u0027prefix\u0027])))"}],"source_content_type":"text/x-python","patch_set":6,"id":"dac4157f_208b1ac5","line":152,"in_reply_to":"dac4157f_d408cd2f","updated":"2015-04-22 10:10:44.000000000","message":"Every user should be created in separate tenant? I understand you correctly, do I?\nIt is quite different from from etherpad spec.","commit_id":"5018e871aac1490d298ab301f00f58edacc3d8f7"},{"author":{"_account_id":5196,"name":"Matthew Treinish","email":"mtreinish@kortar.org","username":"treinish"},"change_message_id":"1ca1db4e2c693ae20957682c008bb94e54ac8fcc","unresolved":false,"context_lines":[{"line_number":239,"context_line":"    setup_logging()"},{"line_number":240,"context_line":"    resources \u003d generate_resources()"},{"line_number":241,"context_line":"    dump_accounts(resources)"},{"line_number":242,"context_line":"    create_resources(resources)"},{"line_number":243,"context_line":"    return 0"},{"line_number":244,"context_line":""},{"line_number":245,"context_line":""}],"source_content_type":"text/x-python","patch_set":6,"id":"dac4157f_2f421011","line":242,"updated":"2015-04-21 13:56:32.000000000","message":"Maybe we should only write the yaml file after we\u0027ve created the resources.","commit_id":"5018e871aac1490d298ab301f00f58edacc3d8f7"},{"author":{"_account_id":9377,"name":"Sergey Slipushenko","email":"slipushenko@gmail.com","username":"sslypushenko"},"change_message_id":"6e2dd4a0716dbb7bec55cc4d7d9e556a42332b89","unresolved":false,"context_lines":[{"line_number":239,"context_line":"    setup_logging()"},{"line_number":240,"context_line":"    resources \u003d generate_resources()"},{"line_number":241,"context_line":"    dump_accounts(resources)"},{"line_number":242,"context_line":"    create_resources(resources)"},{"line_number":243,"context_line":"    return 0"},{"line_number":244,"context_line":""},{"line_number":245,"context_line":""}],"source_content_type":"text/x-python","patch_set":6,"id":"dac4157f_f229a08a","line":242,"in_reply_to":"dac4157f_2f421011","updated":"2015-04-22 10:10:44.000000000","message":"Done","commit_id":"5018e871aac1490d298ab301f00f58edacc3d8f7"},{"author":{"_account_id":5196,"name":"Matthew Treinish","email":"mtreinish@kortar.org","username":"treinish"},"change_message_id":"1ca1db4e2c693ae20957682c008bb94e54ac8fcc","unresolved":false,"context_lines":[{"line_number":240,"context_line":"    resources \u003d generate_resources()"},{"line_number":241,"context_line":"    dump_accounts(resources)"},{"line_number":242,"context_line":"    create_resources(resources)"},{"line_number":243,"context_line":"    return 0"},{"line_number":244,"context_line":""},{"line_number":245,"context_line":""},{"line_number":246,"context_line":"if __name__ \u003d\u003d \"__main__\":"}],"source_content_type":"text/x-python","patch_set":6,"id":"dac4157f_74a221b0","line":243,"updated":"2015-04-21 13:56:32.000000000","message":"I\u0027m not sure you need to explicitly return here. It should do that when main exits()","commit_id":"5018e871aac1490d298ab301f00f58edacc3d8f7"},{"author":{"_account_id":9377,"name":"Sergey Slipushenko","email":"slipushenko@gmail.com","username":"sslypushenko"},"change_message_id":"6e2dd4a0716dbb7bec55cc4d7d9e556a42332b89","unresolved":false,"context_lines":[{"line_number":240,"context_line":"    resources \u003d generate_resources()"},{"line_number":241,"context_line":"    dump_accounts(resources)"},{"line_number":242,"context_line":"    create_resources(resources)"},{"line_number":243,"context_line":"    return 0"},{"line_number":244,"context_line":""},{"line_number":245,"context_line":""},{"line_number":246,"context_line":"if __name__ \u003d\u003d \"__main__\":"}],"source_content_type":"text/x-python","patch_set":6,"id":"dac4157f_521e0c64","line":243,"in_reply_to":"dac4157f_74a221b0","updated":"2015-04-22 10:10:44.000000000","message":"Done","commit_id":"5018e871aac1490d298ab301f00f58edacc3d8f7"},{"author":{"_account_id":5803,"name":"Attila Fazekas","email":"afazekas@redhat.com","username":"afazekas"},"change_message_id":"eb3739cd038244879a7a3d896569ed6c049ee240","unresolved":false,"context_lines":[{"line_number":77,"context_line":"                role \u003d filter(lambda r_: r_[\u0027name\u0027] \u003d\u003d r, roles)[0]"},{"line_number":78,"context_line":"                u[\u0027role_ids\u0027] +\u003d [role[\u0027id\u0027]]"},{"line_number":79,"context_line":"            except IndexError:"},{"line_number":80,"context_line":"                raise tempest_lib.exceptions.NotFound(\u0027Role: %s - not found\u0027"},{"line_number":81,"context_line":"                                                      \u0027\u0027 % r)"},{"line_number":82,"context_line":"    existing \u003d [x[\u0027name\u0027] for x in admin.list_tenants()]"},{"line_number":83,"context_line":"    for tenant in resources[\u0027tenants\u0027]:"}],"source_content_type":"text/x-python","patch_set":7,"id":"9abe1de1_7dcecf84","line":80,"updated":"2015-04-27 09:23:26.000000000","message":"The rest client Exceptions are for RestClient.\nYou did not get a real 404 in this case.","commit_id":"5fc48ce741336b9e0ae228a53068148b53f7c3fa"},{"author":{"_account_id":9377,"name":"Sergey Slipushenko","email":"slipushenko@gmail.com","username":"sslypushenko"},"change_message_id":"b1e06a7530bdb95fd6ba34277e52a2e420f36620","unresolved":false,"context_lines":[{"line_number":77,"context_line":"                role \u003d filter(lambda r_: r_[\u0027name\u0027] \u003d\u003d r, roles)[0]"},{"line_number":78,"context_line":"                u[\u0027role_ids\u0027] +\u003d [role[\u0027id\u0027]]"},{"line_number":79,"context_line":"            except IndexError:"},{"line_number":80,"context_line":"                raise tempest_lib.exceptions.NotFound(\u0027Role: %s - not found\u0027"},{"line_number":81,"context_line":"                                                      \u0027\u0027 % r)"},{"line_number":82,"context_line":"    existing \u003d [x[\u0027name\u0027] for x in admin.list_tenants()]"},{"line_number":83,"context_line":"    for tenant in resources[\u0027tenants\u0027]:"}],"source_content_type":"text/x-python","patch_set":7,"id":"9abe1de1_0f879062","line":80,"in_reply_to":"9abe1de1_7dcecf84","updated":"2015-04-27 13:28:00.000000000","message":"Reasonable comment. Thx!","commit_id":"5fc48ce741336b9e0ae228a53068148b53f7c3fa"},{"author":{"_account_id":1192,"name":"David Kranz","email":"dkranz@redhat.com","username":"david-kranz"},"change_message_id":"793adacca4734c92b91a8577ffea74b7e6454318","unresolved":false,"context_lines":[{"line_number":20,"context_line":"from oslo_log import log as logging"},{"line_number":21,"context_line":"import yaml"},{"line_number":22,"context_line":""},{"line_number":23,"context_line":"import tempest.auth"},{"line_number":24,"context_line":"from tempest import config"},{"line_number":25,"context_line":"from tempest import exceptions"},{"line_number":26,"context_line":"from tempest.services.identity.v2.json import identity_client"}],"source_content_type":"text/x-python","patch_set":10,"id":"3acd31a7_9cfa2974","line":23,"updated":"2015-05-05 18:48:01.000000000","message":"This is from tempest_lib now.","commit_id":"120f01ed5b6d771e78e6a910661c704148fa419b"},{"author":{"_account_id":9377,"name":"Sergey Slipushenko","email":"slipushenko@gmail.com","username":"sslypushenko"},"change_message_id":"d057561fa9d6423b36cbb1208d9297db81fddefc","unresolved":false,"context_lines":[{"line_number":20,"context_line":"from oslo_log import log as logging"},{"line_number":21,"context_line":"import yaml"},{"line_number":22,"context_line":""},{"line_number":23,"context_line":"import tempest.auth"},{"line_number":24,"context_line":"from tempest import config"},{"line_number":25,"context_line":"from tempest import exceptions"},{"line_number":26,"context_line":"from tempest.services.identity.v2.json import identity_client"}],"source_content_type":"text/x-python","patch_set":10,"id":"1aca2d91_c73e17b8","line":23,"in_reply_to":"3acd31a7_9cfa2974","updated":"2015-05-06 15:01:27.000000000","message":"Done","commit_id":"120f01ed5b6d771e78e6a910661c704148fa419b"},{"author":{"_account_id":1192,"name":"David Kranz","email":"dkranz@redhat.com","username":"david-kranz"},"change_message_id":"793adacca4734c92b91a8577ffea74b7e6454318","unresolved":false,"context_lines":[{"line_number":96,"context_line":"            continue"},{"line_number":97,"context_line":"        try:"},{"line_number":98,"context_line":"            admin.get_user_by_username(tenant[\u0027id\u0027], u[\u0027name\u0027])"},{"line_number":99,"context_line":"            LOG.warn(\"User \u0027%s\u0027 already exists in this environment\""},{"line_number":100,"context_line":"                     % u[\u0027name\u0027])"},{"line_number":101,"context_line":"        except tempest_lib.exceptions.NotFound:"},{"line_number":102,"context_line":"            admin.create_user("}],"source_content_type":"text/x-python","patch_set":10,"id":"3acd31a7_9c8b49c3","line":99,"updated":"2015-05-05 18:48:01.000000000","message":"This will cause failure in tempest if the user exists but the password is different. Since there is no way to get the password, this code needs to set the password. We could fail the script in that case but that would be unfriendly. I guess this behavior should be documented.","commit_id":"120f01ed5b6d771e78e6a910661c704148fa419b"},{"author":{"_account_id":9377,"name":"Sergey Slipushenko","email":"slipushenko@gmail.com","username":"sslypushenko"},"change_message_id":"d057561fa9d6423b36cbb1208d9297db81fddefc","unresolved":false,"context_lines":[{"line_number":96,"context_line":"            continue"},{"line_number":97,"context_line":"        try:"},{"line_number":98,"context_line":"            admin.get_user_by_username(tenant[\u0027id\u0027], u[\u0027name\u0027])"},{"line_number":99,"context_line":"            LOG.warn(\"User \u0027%s\u0027 already exists in this environment\""},{"line_number":100,"context_line":"                     % u[\u0027name\u0027])"},{"line_number":101,"context_line":"        except tempest_lib.exceptions.NotFound:"},{"line_number":102,"context_line":"            admin.create_user("}],"source_content_type":"text/x-python","patch_set":10,"id":"1aca2d91_02ed1d8b","line":99,"in_reply_to":"3acd31a7_9c8b49c3","updated":"2015-05-06 15:01:27.000000000","message":"Good comment! I think that best behavior here is to generate a new user name and try to create  user  with new name","commit_id":"120f01ed5b6d771e78e6a910661c704148fa419b"},{"author":{"_account_id":1192,"name":"David Kranz","email":"dkranz@redhat.com","username":"david-kranz"},"change_message_id":"58792ed0b4959d19b23a294e8095a9d0f7e481a5","unresolved":false,"context_lines":[{"line_number":139,"context_line":""},{"line_number":140,"context_line":"def generate_resources(opts):"},{"line_number":141,"context_line":"    spec \u003d [{\u0027number\u0027: 2,"},{"line_number":142,"context_line":"             \u0027prefix\u0027: \u0027default\u0027,"},{"line_number":143,"context_line":"             \u0027roles\u0027: CONF.auth.tempest_roles},"},{"line_number":144,"context_line":"            {\u0027number\u0027: 2,"},{"line_number":145,"context_line":"             \u0027prefix\u0027: \u0027swift_operator\u0027,"}],"source_content_type":"text/x-python","patch_set":11,"id":"1aca2d91_0b23f1be","line":142,"updated":"2015-05-06 17:34:51.000000000","message":"It would be a lot easier to debug, and a better transition, if this were one \u0027primary\u0027 and one \u0027alt\u0027 since those are the names used in the tempest code. Is there a reason this was not done?","commit_id":"67d24d2525823acb658f5c1648dc30c55c4826c8"},{"author":{"_account_id":9377,"name":"Sergey Slipushenko","email":"slipushenko@gmail.com","username":"sslypushenko"},"change_message_id":"e1c4bc4b7fd21ef5872aab0a29ac0e4eb344308e","unresolved":false,"context_lines":[{"line_number":139,"context_line":""},{"line_number":140,"context_line":"def generate_resources(opts):"},{"line_number":141,"context_line":"    spec \u003d [{\u0027number\u0027: 2,"},{"line_number":142,"context_line":"             \u0027prefix\u0027: \u0027default\u0027,"},{"line_number":143,"context_line":"             \u0027roles\u0027: CONF.auth.tempest_roles},"},{"line_number":144,"context_line":"            {\u0027number\u0027: 2,"},{"line_number":145,"context_line":"             \u0027prefix\u0027: \u0027swift_operator\u0027,"}],"source_content_type":"text/x-python","patch_set":11,"id":"1aca2d91_4cb0dff4","line":142,"in_reply_to":"1aca2d91_0b23f1be","updated":"2015-05-06 18:34:10.000000000","message":"Any reason. I will do it","commit_id":"67d24d2525823acb658f5c1648dc30c55c4826c8"},{"author":{"_account_id":1192,"name":"David Kranz","email":"dkranz@redhat.com","username":"david-kranz"},"change_message_id":"58792ed0b4959d19b23a294e8095a9d0f7e481a5","unresolved":false,"context_lines":[{"line_number":142,"context_line":"             \u0027prefix\u0027: \u0027default\u0027,"},{"line_number":143,"context_line":"             \u0027roles\u0027: CONF.auth.tempest_roles},"},{"line_number":144,"context_line":"            {\u0027number\u0027: 2,"},{"line_number":145,"context_line":"             \u0027prefix\u0027: \u0027swift_operator\u0027,"},{"line_number":146,"context_line":"             \u0027roles\u0027: (CONF.auth.tempest_roles +"},{"line_number":147,"context_line":"                       [CONF.object_storage.operator_role])},"},{"line_number":148,"context_line":"            {\u0027number\u0027: 1,"}],"source_content_type":"text/x-python","patch_set":11,"id":"1aca2d91_4b17a951","line":145,"updated":"2015-05-06 17:34:51.000000000","message":"Why are there two swift operator?","commit_id":"67d24d2525823acb658f5c1648dc30c55c4826c8"},{"author":{"_account_id":9377,"name":"Sergey Slipushenko","email":"slipushenko@gmail.com","username":"sslypushenko"},"change_message_id":"e1c4bc4b7fd21ef5872aab0a29ac0e4eb344308e","unresolved":false,"context_lines":[{"line_number":142,"context_line":"             \u0027prefix\u0027: \u0027default\u0027,"},{"line_number":143,"context_line":"             \u0027roles\u0027: CONF.auth.tempest_roles},"},{"line_number":144,"context_line":"            {\u0027number\u0027: 2,"},{"line_number":145,"context_line":"             \u0027prefix\u0027: \u0027swift_operator\u0027,"},{"line_number":146,"context_line":"             \u0027roles\u0027: (CONF.auth.tempest_roles +"},{"line_number":147,"context_line":"                       [CONF.object_storage.operator_role])},"},{"line_number":148,"context_line":"            {\u0027number\u0027: 1,"}],"source_content_type":"text/x-python","patch_set":11,"id":"1aca2d91_8ca6f7bf","line":145,"in_reply_to":"1aca2d91_4b17a951","updated":"2015-05-06 18:34:10.000000000","message":"Maybe it is misunderstanding. Matthew Treinish asked about it.","commit_id":"67d24d2525823acb658f5c1648dc30c55c4826c8"},{"author":{"_account_id":5196,"name":"Matthew Treinish","email":"mtreinish@kortar.org","username":"treinish"},"change_message_id":"d7cda188ca263ff649c48f5d7ddf1a1dedff127e","unresolved":false,"context_lines":[{"line_number":142,"context_line":"             \u0027prefix\u0027: \u0027default\u0027,"},{"line_number":143,"context_line":"             \u0027roles\u0027: CONF.auth.tempest_roles},"},{"line_number":144,"context_line":"            {\u0027number\u0027: 2,"},{"line_number":145,"context_line":"             \u0027prefix\u0027: \u0027swift_operator\u0027,"},{"line_number":146,"context_line":"             \u0027roles\u0027: (CONF.auth.tempest_roles +"},{"line_number":147,"context_line":"                       [CONF.object_storage.operator_role])},"},{"line_number":148,"context_line":"            {\u0027number\u0027: 1,"}],"source_content_type":"text/x-python","patch_set":11,"id":"1aca2d91_4020a39b","line":145,"in_reply_to":"1aca2d91_8ca6f7bf","updated":"2015-05-06 18:53:50.000000000","message":"Yeah there are a couple of tests which require 2 swift operators. So preventing any possibility of starvation the worst case where you would need 2 swift operators for each worker to is why this is set to 2. We could just assign the swift operator role to every created user too, which would limit the total number created.","commit_id":"67d24d2525823acb658f5c1648dc30c55c4826c8"},{"author":{"_account_id":1192,"name":"David Kranz","email":"dkranz@redhat.com","username":"david-kranz"},"change_message_id":"58792ed0b4959d19b23a294e8095a9d0f7e481a5","unresolved":false,"context_lines":[{"line_number":157,"context_line":"    if opts.admin:"},{"line_number":158,"context_line":"        spec.append({"},{"line_number":159,"context_line":"            \u0027number\u0027: 1,"},{"line_number":160,"context_line":"            \u0027prefix\u0027: \u0027primary\u0027,"},{"line_number":161,"context_line":"            \u0027roles\u0027: (CONF.auth.tempest_roles +"},{"line_number":162,"context_line":"                      [CONF.identity.admin_role])"},{"line_number":163,"context_line":"        })"}],"source_content_type":"text/x-python","patch_set":11,"id":"1aca2d91_063888d2","line":160,"updated":"2015-05-06 17:34:51.000000000","message":"Why is this not \u0027admin\u0027?","commit_id":"67d24d2525823acb658f5c1648dc30c55c4826c8"},{"author":{"_account_id":9377,"name":"Sergey Slipushenko","email":"slipushenko@gmail.com","username":"sslypushenko"},"change_message_id":"e1c4bc4b7fd21ef5872aab0a29ac0e4eb344308e","unresolved":false,"context_lines":[{"line_number":157,"context_line":"    if opts.admin:"},{"line_number":158,"context_line":"        spec.append({"},{"line_number":159,"context_line":"            \u0027number\u0027: 1,"},{"line_number":160,"context_line":"            \u0027prefix\u0027: \u0027primary\u0027,"},{"line_number":161,"context_line":"            \u0027roles\u0027: (CONF.auth.tempest_roles +"},{"line_number":162,"context_line":"                      [CONF.identity.admin_role])"},{"line_number":163,"context_line":"        })"}],"source_content_type":"text/x-python","patch_set":11,"id":"1aca2d91_4cb9ffe8","line":160,"in_reply_to":"1aca2d91_063888d2","updated":"2015-05-06 18:34:10.000000000","message":"Done","commit_id":"67d24d2525823acb658f5c1648dc30c55c4826c8"},{"author":{"_account_id":5196,"name":"Matthew Treinish","email":"mtreinish@kortar.org","username":"treinish"},"change_message_id":"8274198a88d7319eb17c51f230d1e4748d07532b","unresolved":false,"context_lines":[{"line_number":214,"context_line":"    parser.add_argument(\u0027--os-username\u0027,"},{"line_number":215,"context_line":"                        metavar\u003d\u0027\u003cauth-user-name\u003e\u0027,"},{"line_number":216,"context_line":"                        default\u003dos.environ.get(\u0027OS_USERNAME\u0027),"},{"line_number":217,"context_line":"                        help\u003d\u0027Defaults to env[OS_USERNAME].\u0027)"},{"line_number":218,"context_line":"    parser.add_argument(\u0027--os-password\u0027,"},{"line_number":219,"context_line":"                        metavar\u003d\u0027\u003cauth-password\u003e\u0027,"},{"line_number":220,"context_line":"                        default\u003dos.environ.get(\u0027OS_PASSWORD\u0027),"}],"source_content_type":"text/x-python","patch_set":12,"id":"1aca2d91_c3710678","line":217,"updated":"2015-05-08 18:11:05.000000000","message":"We probably need to mention here or in one of the other help lines that these creds need to have a role that lets them create an account.","commit_id":"22dd210546ec8e04c915c3c7388fe29ea45726aa"},{"author":{"_account_id":9377,"name":"Sergey Slipushenko","email":"slipushenko@gmail.com","username":"sslypushenko"},"change_message_id":"f90d462a9156adf94c6e15f76d828fa4b6154888","unresolved":false,"context_lines":[{"line_number":214,"context_line":"    parser.add_argument(\u0027--os-username\u0027,"},{"line_number":215,"context_line":"                        metavar\u003d\u0027\u003cauth-user-name\u003e\u0027,"},{"line_number":216,"context_line":"                        default\u003dos.environ.get(\u0027OS_USERNAME\u0027),"},{"line_number":217,"context_line":"                        help\u003d\u0027Defaults to env[OS_USERNAME].\u0027)"},{"line_number":218,"context_line":"    parser.add_argument(\u0027--os-password\u0027,"},{"line_number":219,"context_line":"                        metavar\u003d\u0027\u003cauth-password\u003e\u0027,"},{"line_number":220,"context_line":"                        default\u003dos.environ.get(\u0027OS_PASSWORD\u0027),"}],"source_content_type":"text/x-python","patch_set":12,"id":"9a0c5dc1_c7913154","line":217,"in_reply_to":"1aca2d91_c3710678","updated":"2015-05-13 15:06:15.000000000","message":"Done","commit_id":"22dd210546ec8e04c915c3c7388fe29ea45726aa"},{"author":{"_account_id":5196,"name":"Matthew Treinish","email":"mtreinish@kortar.org","username":"treinish"},"change_message_id":"8274198a88d7319eb17c51f230d1e4748d07532b","unresolved":false,"context_lines":[{"line_number":228,"context_line":"                        required\u003dFalse,"},{"line_number":229,"context_line":"                        dest\u003d\u0027tag\u0027,"},{"line_number":230,"context_line":"                        help\u003d\u0027Resources tag\u0027)"},{"line_number":231,"context_line":"    parser.add_argument(\u0027-r\u0027,"},{"line_number":232,"context_line":"                        default\u003d1,"},{"line_number":233,"context_line":"                        type\u003dint,"},{"line_number":234,"context_line":"                        required\u003dTrue,"}],"source_content_type":"text/x-python","patch_set":12,"id":"1aca2d91_23079a19","line":231,"updated":"2015-05-08 18:11:05.000000000","message":"maybe also use --concurrency as the long form.","commit_id":"22dd210546ec8e04c915c3c7388fe29ea45726aa"},{"author":{"_account_id":9377,"name":"Sergey Slipushenko","email":"slipushenko@gmail.com","username":"sslypushenko"},"change_message_id":"f90d462a9156adf94c6e15f76d828fa4b6154888","unresolved":false,"context_lines":[{"line_number":228,"context_line":"                        required\u003dFalse,"},{"line_number":229,"context_line":"                        dest\u003d\u0027tag\u0027,"},{"line_number":230,"context_line":"                        help\u003d\u0027Resources tag\u0027)"},{"line_number":231,"context_line":"    parser.add_argument(\u0027-r\u0027,"},{"line_number":232,"context_line":"                        default\u003d1,"},{"line_number":233,"context_line":"                        type\u003dint,"},{"line_number":234,"context_line":"                        required\u003dTrue,"}],"source_content_type":"text/x-python","patch_set":12,"id":"9a0c5dc1_e796754b","line":231,"in_reply_to":"1aca2d91_23079a19","updated":"2015-05-13 15:06:15.000000000","message":"Done","commit_id":"22dd210546ec8e04c915c3c7388fe29ea45726aa"},{"author":{"_account_id":5196,"name":"Matthew Treinish","email":"mtreinish@kortar.org","username":"treinish"},"change_message_id":"8274198a88d7319eb17c51f230d1e4748d07532b","unresolved":false,"context_lines":[{"line_number":240,"context_line":"                        help\u003d\u0027Create admin in every tenant\u0027)"},{"line_number":241,"context_line":"    parser.add_argument(\u0027accounts\u0027,"},{"line_number":242,"context_line":"                        metavar\u003d\u0027accounts_file.yaml\u0027,"},{"line_number":243,"context_line":"                        help\u003d\u0027Accounts yaml file\u0027)"},{"line_number":244,"context_line":""},{"line_number":245,"context_line":"    opts \u003d parser.parse_args()"},{"line_number":246,"context_line":"    if opts.config_file:"}],"source_content_type":"text/x-python","patch_set":12,"id":"1aca2d91_df08b82f","line":243,"updated":"2015-05-08 18:11:05.000000000","message":"Maybe mention this is the output yaml file, it\u0027s not entirely clear from the help line.","commit_id":"22dd210546ec8e04c915c3c7388fe29ea45726aa"},{"author":{"_account_id":9377,"name":"Sergey Slipushenko","email":"slipushenko@gmail.com","username":"sslypushenko"},"change_message_id":"f90d462a9156adf94c6e15f76d828fa4b6154888","unresolved":false,"context_lines":[{"line_number":240,"context_line":"                        help\u003d\u0027Create admin in every tenant\u0027)"},{"line_number":241,"context_line":"    parser.add_argument(\u0027accounts\u0027,"},{"line_number":242,"context_line":"                        metavar\u003d\u0027accounts_file.yaml\u0027,"},{"line_number":243,"context_line":"                        help\u003d\u0027Accounts yaml file\u0027)"},{"line_number":244,"context_line":""},{"line_number":245,"context_line":"    opts \u003d parser.parse_args()"},{"line_number":246,"context_line":"    if opts.config_file:"}],"source_content_type":"text/x-python","patch_set":12,"id":"9a0c5dc1_e77d551d","line":243,"in_reply_to":"1aca2d91_df08b82f","updated":"2015-05-13 15:06:15.000000000","message":"Done","commit_id":"22dd210546ec8e04c915c3c7388fe29ea45726aa"}]}
