)]}'
{"monasca_setup/detection/plugins/ovs.py":[{"author":{"_account_id":16168,"name":"Tomasz Trębski","email":"kornicameister@gmail.com","username":"trebskit"},"change_message_id":"ab3c9834329134d037d62451f691221b1db1427c","unresolved":false,"context_lines":[{"line_number":65,"context_line":"        self.available \u003d (process_exist is not None and"},{"line_number":66,"context_line":"                          neutron_conf_valid and has_dependencies)"},{"line_number":67,"context_line":""},{"line_number":68,"context_line":"        self.cmd \u003d process_exist.cmdline()[1:] if process_exist else \u0027\u0027"},{"line_number":69,"context_line":""},{"line_number":70,"context_line":"        if not self.available:"},{"line_number":71,"context_line":"            if not process_exist:"}],"source_content_type":"text/x-python","patch_set":5,"id":"1f013ff3_457ed46b","line":68,"updated":"2017-05-16 21:22:56.000000000","message":"That\u0027s not compatible with older/newer [don\u0027t remember which] version of psutil. Please use the method that returns dict.","commit_id":"d8073168d35a897b9741db7107880821515bf15d"},{"author":{"_account_id":16222,"name":"witek","email":"witold.bedyk@suse.com","username":"witek"},"change_message_id":"830fe673ba634efe65298f1fa896e045449743c6","unresolved":false,"context_lines":[{"line_number":65,"context_line":"        self.available \u003d (process_exist is not None and"},{"line_number":66,"context_line":"                          neutron_conf_valid and has_dependencies)"},{"line_number":67,"context_line":""},{"line_number":68,"context_line":"        self.cmd \u003d process_exist.cmdline()[1:] if process_exist else \u0027\u0027"},{"line_number":69,"context_line":""},{"line_number":70,"context_line":"        if not self.available:"},{"line_number":71,"context_line":"            if not process_exist:"}],"source_content_type":"text/x-python","patch_set":5,"id":"ff0f0b1f_aeecaff3","line":68,"in_reply_to":"1f013ff3_457ed46b","updated":"2017-05-17 13:13:03.000000000","message":"Agree:\n\n  process_exist.as_dict()[\u0027cmdline\u0027]","commit_id":"d8073168d35a897b9741db7107880821515bf15d"},{"author":{"_account_id":16168,"name":"Tomasz Trębski","email":"kornicameister@gmail.com","username":"trebskit"},"change_message_id":"c80160e39640703dcd98723e150c1a8d6a66b6aa","unresolved":false,"context_lines":[{"line_number":65,"context_line":"        self.available \u003d (process_exist is not None and"},{"line_number":66,"context_line":"                          neutron_conf_valid and has_dependencies)"},{"line_number":67,"context_line":""},{"line_number":68,"context_line":"        self.cmd \u003d process_exist.cmdline()[1:] if process_exist else \u0027\u0027"},{"line_number":69,"context_line":""},{"line_number":70,"context_line":"        if not self.available:"},{"line_number":71,"context_line":"            if not process_exist:"}],"source_content_type":"text/x-python","patch_set":5,"id":"ff0f0b1f_bcd29b33","line":68,"in_reply_to":"ff0f0b1f_aeecaff3","updated":"2017-05-17 20:46:05.000000000","message":"Actually:\n\n  process_exist.as_dict([\u0027cmdline\u0027])[\u0027cmdline\u0027]\n\nbecause that\u0027s the only property we\u0027d be interested in in this place.","commit_id":"d8073168d35a897b9741db7107880821515bf15d"},{"author":{"_account_id":16168,"name":"Tomasz Trębski","email":"kornicameister@gmail.com","username":"trebskit"},"change_message_id":"ab3c9834329134d037d62451f691221b1db1427c","unresolved":false,"context_lines":[{"line_number":102,"context_line":"            log.info(\"\\tUsing neutron configuration file {0} for detection\".format( neutron_conf))"},{"line_number":103,"context_line":"            self.neutron_conf \u003d neutron_conf"},{"line_number":104,"context_line":""},{"line_number":105,"context_line":"    def _is_neutron_conf_valid(self, conf_file):"},{"line_number":106,"context_line":"        neutron_cfg \u003d ConfigParser.SafeConfigParser()"},{"line_number":107,"context_line":"        neutron_cfg.read(conf_file)"},{"line_number":108,"context_line":""}],"source_content_type":"text/x-python","patch_set":5,"id":"1f013ff3_c56d4499","line":105,"updated":"2017-05-16 21:22:56.000000000","message":"Do we still need those methods ?","commit_id":"d8073168d35a897b9741db7107880821515bf15d"},{"author":{"_account_id":23735,"name":"sumitjami","email":"sjamgade@suse.com","username":"nthforloop"},"change_message_id":"90cf58cf734d5c4d86d226388970833c643ad4d6","unresolved":false,"context_lines":[{"line_number":102,"context_line":"            log.info(\"\\tUsing neutron configuration file {0} for detection\".format( neutron_conf))"},{"line_number":103,"context_line":"            self.neutron_conf \u003d neutron_conf"},{"line_number":104,"context_line":""},{"line_number":105,"context_line":"    def _is_neutron_conf_valid(self, conf_file):"},{"line_number":106,"context_line":"        neutron_cfg \u003d ConfigParser.SafeConfigParser()"},{"line_number":107,"context_line":"        neutron_cfg.read(conf_file)"},{"line_number":108,"context_line":""}],"source_content_type":"text/x-python","patch_set":5,"id":"ff0f0b1f_1a607d32","line":105,"in_reply_to":"1f013ff3_c56d4499","updated":"2017-05-17 11:26:21.000000000","message":"These methods help answer the question \u0027is_neutron_available\u0027 ?\n\nIdeally I would prefer parsing the \u0027cmdline\u0027 for these[1] options and pass them to oslo_config, and let it figure out if the REQUIRED_CONF_SECTIONS are present.\n\nhttps://docs.openstack.org/developer/oslo.config/builtins.html","commit_id":"d8073168d35a897b9741db7107880821515bf15d"},{"author":{"_account_id":16168,"name":"Tomasz Trębski","email":"kornicameister@gmail.com","username":"trebskit"},"change_message_id":"ab3c9834329134d037d62451f691221b1db1427c","unresolved":false,"context_lines":[{"line_number":112,"context_line":""},{"line_number":113,"context_line":"        return True"},{"line_number":114,"context_line":""},{"line_number":115,"context_line":"    def _get_ovs_config_file(self):"},{"line_number":116,"context_line":"        neutron_conf \u003d None"},{"line_number":117,"context_line":"        if self.args:"},{"line_number":118,"context_line":"            for arg in self.args:"}],"source_content_type":"text/x-python","patch_set":5,"id":"1f013ff3_6508b0d8","line":115,"updated":"2017-05-16 21:22:56.000000000","message":"And that method ?","commit_id":"d8073168d35a897b9741db7107880821515bf15d"},{"author":{"_account_id":16168,"name":"Tomasz Trębski","email":"kornicameister@gmail.com","username":"trebskit"},"change_message_id":"ce4d94e561e0ab8cde2b39ee4166d8ab780dbb28","unresolved":false,"context_lines":[{"line_number":69,"context_line":"            cmdlist \u003d process_exist.as_dict(attrs\u003d[\u0027cmdline\u0027])[\u0027cmdline\u0027][1:]"},{"line_number":70,"context_line":"            self.cmd \u003d \u0027 \u0027.join(cmdlist)"},{"line_number":71,"context_line":""},{"line_number":72,"context_line":"                    "},{"line_number":73,"context_line":""},{"line_number":74,"context_line":"        if not self.available:"},{"line_number":75,"context_line":"            if not process_exist:"}],"source_content_type":"text/x-python","patch_set":6,"id":"ff0f0b1f_b2a3869e","line":72,"updated":"2017-05-21 17:45:08.000000000","message":"whitespace...hate\u0027em :P.\nPlease remove it. Also I think there are two lines too much between 70 and 74. Python permits 2 lines max to separate blocks of code inside method AFAIR.","commit_id":"bac6c1fd066456531423aa13963ead6e7b48f1a5"},{"author":{"_account_id":23735,"name":"sumitjami","email":"sjamgade@suse.com","username":"nthforloop"},"change_message_id":"ce2772286bfa7630afdf77f38c786a3ab86d33a5","unresolved":false,"context_lines":[{"line_number":69,"context_line":"            cmdlist \u003d process_exist.as_dict(attrs\u003d[\u0027cmdline\u0027])[\u0027cmdline\u0027][1:]"},{"line_number":70,"context_line":"            self.cmd \u003d \u0027 \u0027.join(cmdlist)"},{"line_number":71,"context_line":""},{"line_number":72,"context_line":"                    "},{"line_number":73,"context_line":""},{"line_number":74,"context_line":"        if not self.available:"},{"line_number":75,"context_line":"            if not process_exist:"}],"source_content_type":"text/x-python","patch_set":6,"id":"ff0f0b1f_271debbc","line":72,"in_reply_to":"ff0f0b1f_b2a3869e","updated":"2017-05-22 09:09:41.000000000","message":"Done","commit_id":"bac6c1fd066456531423aa13963ead6e7b48f1a5"},{"author":{"_account_id":16168,"name":"Tomasz Trębski","email":"kornicameister@gmail.com","username":"trebskit"},"change_message_id":"d7e4895f4be58b01f872db5aaf616da8dd061f02","unresolved":false,"context_lines":[{"line_number":67,"context_line":"        self.cmd \u003d \u0027\u0027"},{"line_number":68,"context_line":"        if process_exist:"},{"line_number":69,"context_line":"            cmdlist \u003d process_exist.as_dict(attrs\u003d[\u0027cmdline\u0027])[\u0027cmdline\u0027]"},{"line_number":70,"context_line":"            self.cmd \u003d \u0027 \u0027.join(cmdlist)"},{"line_number":71,"context_line":""},{"line_number":72,"context_line":"        if not self.available:"},{"line_number":73,"context_line":"            if not process_exist:"}],"source_content_type":"text/x-python","patch_set":13,"id":"7f231b9d_57f72e5a","line":70,"updated":"2017-06-16 09:33:35.000000000","message":"This won\u0027t work from POV of utility method I\u0027ve added. It requires cmdline as list.","commit_id":"6ae3ae599d5ff66641dc8bb8215dbbb5aba461e5"},{"author":{"_account_id":16168,"name":"Tomasz Trębski","email":"kornicameister@gmail.com","username":"trebskit"},"change_message_id":"d7e4895f4be58b01f872db5aaf616da8dd061f02","unresolved":false,"context_lines":[{"line_number":97,"context_line":"                           \u0027dependence python-neutronclient is \u0027"},{"line_number":98,"context_line":"                           \u0027not installed.\u0027))"},{"line_number":99,"context_line":"        else:"},{"line_number":100,"context_line":"            for_opts \u003d [{\u0027opt\u0027: cfg.StrOpt(\u0027region\u0027, default\u003d\u0027RegionOne\u0027), \u0027group\u0027: \u0027service_auth\u0027},"},{"line_number":101,"context_line":"                        {\u0027opt\u0027: cfg.StrOpt(\u0027region_name\u0027), \u0027group\u0027: \u0027nova\u0027}]"},{"line_number":102,"context_line":"            self.conf \u003d utils.load_oslo_configuration(from_cmd\u003dself.cmd,"},{"line_number":103,"context_line":"                                                      in_project\u003d\u0027neutron\u0027,"}],"source_content_type":"text/x-python","patch_set":13,"id":"7f231b9d_972266b8","line":100,"updated":"2017-06-16 09:33:35.000000000","message":"These are not all the options we need to load. Below you require a several entries from ```keyston_authtoken``` group.\n\nHowever list like that:\n\n  for_opts \u003d [\n    {\u0027opt\u0027: cfg.StrOpt(\u0027region\u0027, default\u003d\u0027RegionOne\u0027), \u0027group\u0027: \u0027service_auth\u0027},\n    {\u0027opt\u0027: cfg.StrOpt(\u0027region_name\u0027), \u0027group\u0027: \u0027nova\u0027},\n    {\u0027opt\u0027: cfg.StrOpt(\u0027username\u0027), \u0027group\u0027: \u0027keystone_authtoken\u0027},\n    {\u0027opt\u0027: cfg.StrOpt(\u0027password\u0027), \u0027group\u0027: \u0027keystone_authtoken\u0027},\n    {\u0027opt\u0027: cfg.StrOpt(\u0027project_name\u0027), \u0027group\u0027: \u0027keystone_authtoken\u0027},\n    {\u0027opt\u0027: cfg.StrOpt(\u0027auth_url\u0027), \u0027group\u0027: \u0027keystone_authtoken\u0027},\n   ]\n\nhas worked for me. I think that we might want to include identity_uri and nova_region_name here as well.","commit_id":"6ae3ae599d5ff66641dc8bb8215dbbb5aba461e5"},{"author":{"_account_id":16168,"name":"Tomasz Trębski","email":"kornicameister@gmail.com","username":"trebskit"},"change_message_id":"d7e4895f4be58b01f872db5aaf616da8dd061f02","unresolved":false,"context_lines":[{"line_number":146,"context_line":"        log.info(\"\\tUsing neutron configuration file {0} and configuration dir\""},{"line_number":147,"context_line":"                 \" {1}\".format(self.conf.default_config_files, self.conf.default_config_dirs))"},{"line_number":148,"context_line":"        cfg_section \u003d \u0027keystone_authtoken\u0027"},{"line_number":149,"context_line":"        cfg_needed \u003d {\u0027username\u0027: \u0027username\u0027,"},{"line_number":150,"context_line":"                      \u0027password\u0027: \u0027password\u0027,"},{"line_number":151,"context_line":"                      \u0027project_name\u0027: \u0027project_name\u0027}"},{"line_number":152,"context_line":""}],"source_content_type":"text/x-python","patch_set":13,"id":"7f231b9d_374f1294","line":149,"updated":"2017-06-16 09:33:35.000000000","message":"Those options weren\u0027t loaded via load_oslo_configuration. Because of that detection fails with ```oslo_config.cfg.NoSuchOptError: no such option keystone_authtoken in group [DEFAULT]\n```.\n\nSee my comment above.","commit_id":"6ae3ae599d5ff66641dc8bb8215dbbb5aba461e5"}]}
