)]}'
{"config_tempest/main.py":[{"author":{"_account_id":12393,"name":"chandan kumar","display_name":"Chandan Kumar","email":"chkumar@redhat.com","username":"chkumar246"},"change_message_id":"adc150ced43841b80c3e754f9e111c274d31bafa","unresolved":false,"context_lines":[{"line_number":322,"context_line":"    )"},{"line_number":323,"context_line":""},{"line_number":324,"context_line":""},{"line_number":325,"context_line":"def config_tempest(create, debug, deployer_input, image_name,"},{"line_number":326,"context_line":"                   image_disk_format, network_id, non_admin, os_cloud,"},{"line_number":327,"context_line":"                   out, overrides, remove, test_accounts, verbose):"},{"line_number":328,"context_line":"    # convert a list of remove values to a dict"},{"line_number":329,"context_line":"    remove \u003d parse_values_to_remove(remove)"},{"line_number":330,"context_line":"    set_logging(debug, verbose)"}],"source_content_type":"text/x-python","patch_set":3,"id":"9f6a8fd7_04a71c0d","line":327,"range":{"start_line":325,"start_character":19,"end_line":327,"end_character":66},"updated":"2018-04-24 07:43:25.000000000","message":"What about replacing this with **kwargs and reusing kwargs value in the code?","commit_id":"3ed035f9f45f875f9c70b6a7875b7e7c5d937a7a"},{"author":{"_account_id":10459,"name":"Luigi Toscano","email":"ltoscano@redhat.com","username":"ltoscano"},"change_message_id":"8a0fa3c3d5a4d4a23b4fbbf3b6629ed547ed02ae","unresolved":false,"context_lines":[{"line_number":210,"context_line":"                        \" together, since creating\" \" resources requires\""},{"line_number":211,"context_line":"                        \" admin rights\")"},{"line_number":212,"context_line":"    args.overrides \u003d parse_overrides(args.overrides)"},{"line_number":213,"context_line":"    cloud \u003d cloud_config.get_one_cloud(argparse\u003dargs)"},{"line_number":214,"context_line":"    return cloud"},{"line_number":215,"context_line":""},{"line_number":216,"context_line":""}],"source_content_type":"text/x-python","patch_set":6,"id":"9f6a8fd7_e7bea0d3","side":"PARENT","line":213,"updated":"2018-04-24 15:14:16.000000000","message":"doesn\u0027t this change the interface exposed by the discover command?","commit_id":"91a9bf7f1b476ae5c957e4969a5c0c09be26927f"},{"author":{"_account_id":22873,"name":"Martin Kopec","email":"mkopec@redhat.com","username":"mkopec"},"change_message_id":"4f87f76623e9d0d26e60564b60606dd17d1f3a1a","unresolved":false,"context_lines":[{"line_number":210,"context_line":"                        \" together, since creating\" \" resources requires\""},{"line_number":211,"context_line":"                        \" admin rights\")"},{"line_number":212,"context_line":"    args.overrides \u003d parse_overrides(args.overrides)"},{"line_number":213,"context_line":"    cloud \u003d cloud_config.get_one_cloud(argparse\u003dargs)"},{"line_number":214,"context_line":"    return cloud"},{"line_number":215,"context_line":""},{"line_number":216,"context_line":""}],"source_content_type":"text/x-python","patch_set":6,"id":"9f6a8fd7_8d6c9ece","side":"PARENT","line":213,"in_reply_to":"9f6a8fd7_e7bea0d3","updated":"2018-04-24 20:59:46.000000000","message":"No, we will do this step, but later in the code.","commit_id":"91a9bf7f1b476ae5c957e4969a5c0c09be26927f"},{"author":{"_account_id":10459,"name":"Luigi Toscano","email":"ltoscano@redhat.com","username":"ltoscano"},"change_message_id":"8a0fa3c3d5a4d4a23b4fbbf3b6629ed547ed02ae","unresolved":false,"context_lines":[{"line_number":304,"context_line":"    if args.os_cloud:"},{"line_number":305,"context_line":"        cloud \u003d cloud.get_one_cloud(args.os_cloud)"},{"line_number":306,"context_line":"    else:"},{"line_number":307,"context_line":"        cloud \u003d cloud.get_one_cloud(argparse\u003dargs)"},{"line_number":308,"context_line":"    config_tempest("},{"line_number":309,"context_line":"        create\u003dargs.create,"},{"line_number":310,"context_line":"        debug\u003dargs.debug,"}],"source_content_type":"text/x-python","patch_set":6,"id":"9f6a8fd7_4798ac73","line":307,"updated":"2018-04-24 15:14:16.000000000","message":"if this is implemented, doesn\u0027t it change (see the previous command) the way CLI arguments are exposed?","commit_id":"c58abbf3ccb67e93f6cc1fb3ac20142ee22119fd"},{"author":{"_account_id":22873,"name":"Martin Kopec","email":"mkopec@redhat.com","username":"mkopec"},"change_message_id":"4f87f76623e9d0d26e60564b60606dd17d1f3a1a","unresolved":false,"context_lines":[{"line_number":304,"context_line":"    if args.os_cloud:"},{"line_number":305,"context_line":"        cloud \u003d cloud.get_one_cloud(args.os_cloud)"},{"line_number":306,"context_line":"    else:"},{"line_number":307,"context_line":"        cloud \u003d cloud.get_one_cloud(argparse\u003dargs)"},{"line_number":308,"context_line":"    config_tempest("},{"line_number":309,"context_line":"        create\u003dargs.create,"},{"line_number":310,"context_line":"        debug\u003dargs.debug,"}],"source_content_type":"text/x-python","patch_set":6,"id":"9f6a8fd7_6a76d572","line":307,"in_reply_to":"9f6a8fd7_4798ac73","updated":"2018-04-24 20:59:46.000000000","message":"I was writing an explanation when I realized, it can be simplified, so thanks :)\n\nWe removed this line:\ncloud_config.register_argparse_arguments(parser, sys.argv)\nwhich means, we can\u0027t use os-client-config\u0027s arguments on CLI (we were using --os-cloud one) anymore, so therefor we added our own --os-cloud argument.\n\nThis call:\ncloud_config.get_one_cloud(argparse\u003dargs)\nmagically registers and parse arguments from argparse. It connects args and cloud variables to an object and provides some methods over them. Therefor we could reference our arguments like for example args.create and also cloud\u0027s variables like args.config.get(\u0027auth\u0027) - which gave us authentication dict from whatever cloud was defined by --os-cloud, or the authentication of the current cloud when --os-cloud wasn\u0027t specified (therefor btw we\u0027re able to pass URI to tempestconf without explicit argument in the CLI - identity.uri $OS_AUTH_URL - it\u0027s used for example in tripleo-ci-centos-7-containers-multinode job).\nThis step we will do at the beginning of config_tempest method, where we\u0027ll put all given arguments, either directly from CLI or elsewhere config_tempest is called from.","commit_id":"c58abbf3ccb67e93f6cc1fb3ac20142ee22119fd"},{"author":{"_account_id":22873,"name":"Martin Kopec","email":"mkopec@redhat.com","username":"mkopec"},"change_message_id":"5fac9b5a567f2adb89923af7c10d1b935c4ddb4c","unresolved":false,"context_lines":[{"line_number":304,"context_line":"    if args.os_cloud:"},{"line_number":305,"context_line":"        cloud \u003d cloud.get_one_cloud(args.os_cloud)"},{"line_number":306,"context_line":"    else:"},{"line_number":307,"context_line":"        cloud \u003d cloud.get_one_cloud(argparse\u003dargs)"},{"line_number":308,"context_line":"    config_tempest("},{"line_number":309,"context_line":"        create\u003dargs.create,"},{"line_number":310,"context_line":"        debug\u003dargs.debug,"}],"source_content_type":"text/x-python","patch_set":6,"id":"9f6a8fd7_4eac37ec","line":307,"in_reply_to":"9f6a8fd7_4dd9a61f","updated":"2018-04-25 06:59:03.000000000","message":"If we import config_tempest somewhere else, parsing arguments is omitted. But we would like to be able to pass cloud name. Also we don\u0027t want to create os-cloud-config object there, we just want to pass the arguments. For these reasons, the os-cloud-config was moved to the body of config_tempest. Then, when we moved os-cloud-config logic away from parsing arguments part, we lost the --os-cloud argument which was provided by the module, therefor we reimplemented it.","commit_id":"c58abbf3ccb67e93f6cc1fb3ac20142ee22119fd"},{"author":{"_account_id":10459,"name":"Luigi Toscano","email":"ltoscano@redhat.com","username":"ltoscano"},"change_message_id":"dba8be00349af7eef647aa901c03985c23127a87","unresolved":false,"context_lines":[{"line_number":304,"context_line":"    if args.os_cloud:"},{"line_number":305,"context_line":"        cloud \u003d cloud.get_one_cloud(args.os_cloud)"},{"line_number":306,"context_line":"    else:"},{"line_number":307,"context_line":"        cloud \u003d cloud.get_one_cloud(argparse\u003dargs)"},{"line_number":308,"context_line":"    config_tempest("},{"line_number":309,"context_line":"        create\u003dargs.create,"},{"line_number":310,"context_line":"        debug\u003dargs.debug,"}],"source_content_type":"text/x-python","patch_set":6,"id":"9f6a8fd7_971c9b78","line":307,"in_reply_to":"9f6a8fd7_4eac37ec","updated":"2018-04-25 13:37:17.000000000","message":"So we can\u0027t keep the object registration because we need to pass only a pure argument list? Uhm. It may be confusing, because now few parameters are not available anymore in the help, even if they are accepted.","commit_id":"c58abbf3ccb67e93f6cc1fb3ac20142ee22119fd"},{"author":{"_account_id":10459,"name":"Luigi Toscano","email":"ltoscano@redhat.com","username":"ltoscano"},"change_message_id":"3514dbdaa0fd8d10d5c738d6bae169520e9a2852","unresolved":false,"context_lines":[{"line_number":304,"context_line":"    if args.os_cloud:"},{"line_number":305,"context_line":"        cloud \u003d cloud.get_one_cloud(args.os_cloud)"},{"line_number":306,"context_line":"    else:"},{"line_number":307,"context_line":"        cloud \u003d cloud.get_one_cloud(argparse\u003dargs)"},{"line_number":308,"context_line":"    config_tempest("},{"line_number":309,"context_line":"        create\u003dargs.create,"},{"line_number":310,"context_line":"        debug\u003dargs.debug,"}],"source_content_type":"text/x-python","patch_set":6,"id":"9f6a8fd7_4dd9a61f","line":307,"in_reply_to":"9f6a8fd7_6a76d572","updated":"2018-04-24 21:06:10.000000000","message":"Doesn\u0027t the integration  (cloud_config.register_argparse_arguments(parser, sys.argv)) already provide an --os-cloud argument? That\u0027s the part I don\u0027t get; if the logic is already provided, there is no need to reimplement it. (I tried to run discover-tempest-config --help for 1.1.4).","commit_id":"c58abbf3ccb67e93f6cc1fb3ac20142ee22119fd"},{"author":{"_account_id":22873,"name":"Martin Kopec","email":"mkopec@redhat.com","username":"mkopec"},"change_message_id":"70e51e6097caff21fc8c02ad965776e584e893aa","unresolved":false,"context_lines":[{"line_number":304,"context_line":"    if args.os_cloud:"},{"line_number":305,"context_line":"        cloud \u003d cloud.get_one_cloud(args.os_cloud)"},{"line_number":306,"context_line":"    else:"},{"line_number":307,"context_line":"        cloud \u003d cloud.get_one_cloud(argparse\u003dargs)"},{"line_number":308,"context_line":"    config_tempest("},{"line_number":309,"context_line":"        create\u003dargs.create,"},{"line_number":310,"context_line":"        debug\u003dargs.debug,"}],"source_content_type":"text/x-python","patch_set":6,"id":"9f6a8fd7_6ae8feb1","line":307,"in_reply_to":"9f6a8fd7_971c9b78","updated":"2018-04-25 13:59:57.000000000","message":"Oh, I see, let me fix that","commit_id":"c58abbf3ccb67e93f6cc1fb3ac20142ee22119fd"},{"author":{"_account_id":12393,"name":"chandan kumar","display_name":"Chandan Kumar","email":"chkumar@redhat.com","username":"chkumar246"},"change_message_id":"40f5a38ffe3e274ddc907beb8aacc8f426ad99e3","unresolved":false,"context_lines":[{"line_number":159,"context_line":""},{"line_number":160,"context_line":"def get_arg_parser():"},{"line_number":161,"context_line":"    parser \u003d argparse.ArgumentParser(__doc__)"},{"line_number":162,"context_line":"    cloud_config \u003d os_client_config.OpenStackConfig()"},{"line_number":163,"context_line":"    cloud_config.register_argparse_arguments(parser, sys.argv)"},{"line_number":164,"context_line":"    parser.add_argument(\u0027--create\u0027, action\u003d\u0027store_true\u0027, default\u003dFalse,"},{"line_number":165,"context_line":"                        help\u003d\u0027create default tempest resources\u0027)"}],"source_content_type":"text/x-python","patch_set":9,"id":"5f7c97a3_4a501e33","line":162,"range":{"start_line":162,"start_character":4,"end_line":162,"end_character":53},"updated":"2018-05-09 10:05:31.000000000","message":"Why it is called twice?","commit_id":"f5859cef2a548eaac1d8746f5d893e51668451c2"},{"author":{"_account_id":10459,"name":"Luigi Toscano","email":"ltoscano@redhat.com","username":"ltoscano"},"change_message_id":"2537c8cf5cb03693f32b12812f2a7d72a217199b","unresolved":false,"context_lines":[{"line_number":323,"context_line":"    # convert all kwargs to a Namespace, so that, they can be passed"},{"line_number":324,"context_line":"    # to os-client-config\u0027s method"},{"line_number":325,"context_line":"    args \u003d argparse.Namespace(**kwargs)"},{"line_number":326,"context_line":"    cloud \u003d cloud.get_one_cloud(argparse\u003dargs)"},{"line_number":327,"context_line":""},{"line_number":328,"context_line":"    # convert a list of remove values to a dict"},{"line_number":329,"context_line":"    remove \u003d parse_values_to_remove(kwargs[\u0027remove\u0027])"}],"source_content_type":"text/x-python","patch_set":9,"id":"5f7c97a3_00cc5a5f","line":326,"updated":"2018-05-08 16:26:24.000000000","message":"Isn\u0027t this basically parsing again the cloud? Can\u0027t we pass the cloud information through kwargs? Or better, do we need the entire cloud variable?\nIn the current version of the code the last argument of set_options is cloud_creds, and the only usage of cloud in set_options is  os_cloud.config.get(\u0027auth\u0027). \nCan\u0027t this simply be passed, so that config_tempest does not know anything about os_client_config (which is not used otherwise)?","commit_id":"f5859cef2a548eaac1d8746f5d893e51668451c2"},{"author":{"_account_id":22873,"name":"Martin Kopec","email":"mkopec@redhat.com","username":"mkopec"},"change_message_id":"0733dd19ff2e28f4b65c66cbd5bd869cb94299ce","unresolved":false,"context_lines":[{"line_number":323,"context_line":"    # convert all kwargs to a Namespace, so that, they can be passed"},{"line_number":324,"context_line":"    # to os-client-config\u0027s method"},{"line_number":325,"context_line":"    args \u003d argparse.Namespace(**kwargs)"},{"line_number":326,"context_line":"    cloud \u003d cloud.get_one_cloud(argparse\u003dargs)"},{"line_number":327,"context_line":""},{"line_number":328,"context_line":"    # convert a list of remove values to a dict"},{"line_number":329,"context_line":"    remove \u003d parse_values_to_remove(kwargs[\u0027remove\u0027])"}],"source_content_type":"text/x-python","patch_set":9,"id":"5f7c97a3_b54b5cae","line":326,"in_reply_to":"5f7c97a3_00cc5a5f","updated":"2018-05-09 06:52:58.000000000","message":"Hm, we can get the cloud credentials earlier, so that we don\u0027t need to pass entire cloud variable to set_options, agreed.\n\nThen the problem here is, how do we want to use config_tempest when we import it to refstack for example.\n\nIf we want to use it from refstack the same way as from the CLI - the same arguments can be passed to config_tempest method,  we need to have lines 322-326 + cloud.config.get(\u0027auth\u0027).\n\nOr I can delete line 322-324, then 325-326 + cloud.config.get(\u0027auth\u0027) can move to main so that we will pass directly cloud credentials to config_tempest. In this case, the interface of imported config_tempest will be a little bit different, because if wanted, the os-client-config will need to be used there, in order to extract cloud credentials.\n\nMaybe it\u0027s fine, I don\u0027t know, so the question is, how we want to use config_tempest (what arguments do we want to pass to it) when it\u0027s imported somewhere else.","commit_id":"f5859cef2a548eaac1d8746f5d893e51668451c2"},{"author":{"_account_id":10459,"name":"Luigi Toscano","email":"ltoscano@redhat.com","username":"ltoscano"},"change_message_id":"7bdf780869c1716e533d8ea146f8414dbe0af51b","unresolved":false,"context_lines":[{"line_number":323,"context_line":"    # convert all kwargs to a Namespace, so that, they can be passed"},{"line_number":324,"context_line":"    # to os-client-config\u0027s method"},{"line_number":325,"context_line":"    args \u003d argparse.Namespace(**kwargs)"},{"line_number":326,"context_line":"    cloud \u003d cloud.get_one_cloud(argparse\u003dargs)"},{"line_number":327,"context_line":""},{"line_number":328,"context_line":"    # convert a list of remove values to a dict"},{"line_number":329,"context_line":"    remove \u003d parse_values_to_remove(kwargs[\u0027remove\u0027])"}],"source_content_type":"text/x-python","patch_set":9,"id":"5f7c97a3_e0d10bcf","line":326,"in_reply_to":"5f7c97a3_2a1b6281","updated":"2018-05-09 11:24:29.000000000","message":"No, it is not the right solution: --os-cloud is *already* handled by the integration with os_client_config. Please recheck my proposal: remove os_client_config reference from config_tempest, move the parsing to a separate place.","commit_id":"f5859cef2a548eaac1d8746f5d893e51668451c2"},{"author":{"_account_id":10459,"name":"Luigi Toscano","email":"ltoscano@redhat.com","username":"ltoscano"},"change_message_id":"a20626da0e326177acd436c682932585ba0d9c14","unresolved":false,"context_lines":[{"line_number":323,"context_line":"    # convert all kwargs to a Namespace, so that, they can be passed"},{"line_number":324,"context_line":"    # to os-client-config\u0027s method"},{"line_number":325,"context_line":"    args \u003d argparse.Namespace(**kwargs)"},{"line_number":326,"context_line":"    cloud \u003d cloud.get_one_cloud(argparse\u003dargs)"},{"line_number":327,"context_line":""},{"line_number":328,"context_line":"    # convert a list of remove values to a dict"},{"line_number":329,"context_line":"    remove \u003d parse_values_to_remove(kwargs[\u0027remove\u0027])"}],"source_content_type":"text/x-python","patch_set":9,"id":"5f7c97a3_c3689922","line":326,"in_reply_to":"5f7c97a3_4050ff32","updated":"2018-05-09 12:11:11.000000000","message":"Generally fine, but see also my last comment in https://review.openstack.org/#/c/541273/30","commit_id":"f5859cef2a548eaac1d8746f5d893e51668451c2"},{"author":{"_account_id":10459,"name":"Luigi Toscano","email":"ltoscano@redhat.com","username":"ltoscano"},"change_message_id":"8dab1f62af28acbb27c84ac5ff546a45f1e25278","unresolved":false,"context_lines":[{"line_number":323,"context_line":"    # convert all kwargs to a Namespace, so that, they can be passed"},{"line_number":324,"context_line":"    # to os-client-config\u0027s method"},{"line_number":325,"context_line":"    args \u003d argparse.Namespace(**kwargs)"},{"line_number":326,"context_line":"    cloud \u003d cloud.get_one_cloud(argparse\u003dargs)"},{"line_number":327,"context_line":""},{"line_number":328,"context_line":"    # convert a list of remove values to a dict"},{"line_number":329,"context_line":"    remove \u003d parse_values_to_remove(kwargs[\u0027remove\u0027])"}],"source_content_type":"text/x-python","patch_set":9,"id":"5f7c97a3_d625bec3","line":326,"in_reply_to":"5f7c97a3_b54b5cae","updated":"2018-05-09 09:26:05.000000000","message":"So, if I understand it correctly, removing the usage of os_client_config from config_tempest, which is going to be the public interface exposed by tempestconf, we would lose the automatic parsing of the cloud options thanks to os_client_config.\n\nI understand that, and on the other side my point of view is that config_tempest should not depend on arguments and command line parsing. It is not just \"config_tempest\".\n\nAlso, is it something that would really impact refstack-client?\n\nLet\u0027s see if it works this way: keep config_tempest without any parsing of the command line parameters. Provide a new method, which will be used by main() and could also be used by consumers of tempestconf-as-library, which uses os_client_config, inject it to the command line and retrieve the cloud credentials (so roughly 322-326). This should avoid code duplication (parameters parsing handled in one point) and leave the interface of config_tempest free from os_client_config and command line arguments.","commit_id":"f5859cef2a548eaac1d8746f5d893e51668451c2"},{"author":{"_account_id":12393,"name":"chandan kumar","display_name":"Chandan Kumar","email":"chkumar@redhat.com","username":"chkumar246"},"change_message_id":"f55efbd26396a83c67bdde9e7ec24b23a988dccf","unresolved":false,"context_lines":[{"line_number":323,"context_line":"    # convert all kwargs to a Namespace, so that, they can be passed"},{"line_number":324,"context_line":"    # to os-client-config\u0027s method"},{"line_number":325,"context_line":"    args \u003d argparse.Namespace(**kwargs)"},{"line_number":326,"context_line":"    cloud \u003d cloud.get_one_cloud(argparse\u003dargs)"},{"line_number":327,"context_line":""},{"line_number":328,"context_line":"    # convert a list of remove values to a dict"},{"line_number":329,"context_line":"    remove \u003d parse_values_to_remove(kwargs[\u0027remove\u0027])"}],"source_content_type":"text/x-python","patch_set":9,"id":"5f7c97a3_2a1b6281","line":326,"in_reply_to":"5f7c97a3_d625bec3","updated":"2018-05-09 10:08:25.000000000","message":"I think introducing --so-cloud arg will fix the issue this is what i have done in https://review.openstack.org/#/c/546115/5/config_tempest/config_tempest.py@139 It is leading to failure in refstack client code also http://logs.openstack.org/73/541273/34/check/refstack-client-devstack-tempestconf/d2b059c/job-output.txt.gz#_2018-05-09_08_53_20_599122 due to dependency on args","commit_id":"f5859cef2a548eaac1d8746f5d893e51668451c2"},{"author":{"_account_id":22873,"name":"Martin Kopec","email":"mkopec@redhat.com","username":"mkopec"},"change_message_id":"2063378a0d48442fdcf470f5a4adf9b670958f4d","unresolved":false,"context_lines":[{"line_number":323,"context_line":"    # convert all kwargs to a Namespace, so that, they can be passed"},{"line_number":324,"context_line":"    # to os-client-config\u0027s method"},{"line_number":325,"context_line":"    args \u003d argparse.Namespace(**kwargs)"},{"line_number":326,"context_line":"    cloud \u003d cloud.get_one_cloud(argparse\u003dargs)"},{"line_number":327,"context_line":""},{"line_number":328,"context_line":"    # convert a list of remove values to a dict"},{"line_number":329,"context_line":"    remove \u003d parse_values_to_remove(kwargs[\u0027remove\u0027])"}],"source_content_type":"text/x-python","patch_set":9,"id":"5f7c97a3_4050ff32","line":326,"in_reply_to":"5f7c97a3_e0d10bcf","updated":"2018-05-09 11:30:28.000000000","message":"Yes, Chandan\u0027s problem was, that he didn\u0027t source credentials, therefor the url was missing - I already commented his change.\nLuigi what do you say on patchset 10?","commit_id":"f5859cef2a548eaac1d8746f5d893e51668451c2"}]}
