)]}'
{"specs/tempest-external-plugin-interface.rst":[{"author":{"_account_id":7872,"name":"Marc Koderer","email":"marc@koderer.com","username":"mkoderer"},"change_message_id":"05e237b47ffa11784d73cc9ab445bc7e30a1e221","unresolved":false,"context_lines":[{"line_number":13,"context_line":"https://blueprints.launchpad.net/tempest/+spec/external-plugin-interface"},{"line_number":14,"context_line":""},{"line_number":15,"context_line":"Create an external plugin interface to enable loading additional tempest-like"},{"line_number":16,"context_line":"tests from out of tree to enable "},{"line_number":17,"context_line":""},{"line_number":18,"context_line":""},{"line_number":19,"context_line":"Problem description"}],"source_content_type":"text/x-rst","patch_set":1,"id":"7a016987_c2c74394","line":16,"updated":"2015-05-23 05:31:47.000000000","message":"blank","commit_id":"50b34e99aa8c2b36252380b5c455443263ce274b"},{"author":{"_account_id":5196,"name":"Matthew Treinish","email":"mtreinish@kortar.org","username":"treinish"},"change_message_id":"f551242c76eb49cde96512c07e4d68c1d825af50","unresolved":false,"context_lines":[{"line_number":13,"context_line":"https://blueprints.launchpad.net/tempest/+spec/external-plugin-interface"},{"line_number":14,"context_line":""},{"line_number":15,"context_line":"Create an external plugin interface to enable loading additional tempest-like"},{"line_number":16,"context_line":"tests from out of tree to enable "},{"line_number":17,"context_line":""},{"line_number":18,"context_line":""},{"line_number":19,"context_line":"Problem description"}],"source_content_type":"text/x-rst","patch_set":1,"id":"7a016987_7f08ef91","line":16,"in_reply_to":"7a016987_c2c74394","updated":"2015-05-26 18:55:22.000000000","message":"Done","commit_id":"50b34e99aa8c2b36252380b5c455443263ce274b"},{"author":{"_account_id":7872,"name":"Marc Koderer","email":"marc@koderer.com","username":"mkoderer"},"change_message_id":"05e237b47ffa11784d73cc9ab445bc7e30a1e221","unresolved":false,"context_lines":[{"line_number":21,"context_line":""},{"line_number":22,"context_line":"As part of the recent governance change to rework OpenStack under a big tent"},{"line_number":23,"context_line":"the QA program needs to be able to handle an influx of \"OpenStack\" projects."},{"line_number":24,"context_line":"A missing piece"},{"line_number":25,"context_line":""},{"line_number":26,"context_line":"Proposed change"},{"line_number":27,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"}],"source_content_type":"text/x-rst","patch_set":1,"id":"7a016987_c2b2a34b","line":24,"updated":"2015-05-23 05:31:47.000000000","message":"Incomplete sentence.","commit_id":"50b34e99aa8c2b36252380b5c455443263ce274b"},{"author":{"_account_id":5196,"name":"Matthew Treinish","email":"mtreinish@kortar.org","username":"treinish"},"change_message_id":"f551242c76eb49cde96512c07e4d68c1d825af50","unresolved":false,"context_lines":[{"line_number":21,"context_line":""},{"line_number":22,"context_line":"As part of the recent governance change to rework OpenStack under a big tent"},{"line_number":23,"context_line":"the QA program needs to be able to handle an influx of \"OpenStack\" projects."},{"line_number":24,"context_line":"A missing piece"},{"line_number":25,"context_line":""},{"line_number":26,"context_line":"Proposed change"},{"line_number":27,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"}],"source_content_type":"text/x-rst","patch_set":1,"id":"7a016987_5f341349","line":24,"in_reply_to":"7a016987_c2b2a34b","updated":"2015-05-26 18:55:22.000000000","message":"Done","commit_id":"50b34e99aa8c2b36252380b5c455443263ce274b"},{"author":{"_account_id":7872,"name":"Marc Koderer","email":"marc@koderer.com","username":"mkoderer"},"change_message_id":"05e237b47ffa11784d73cc9ab445bc7e30a1e221","unresolved":false,"context_lines":[{"line_number":58,"context_line":"   will provide all the necessary information to tempest to execute the plugin"},{"line_number":59,"context_line":"   remotely and second the additional configuration options"},{"line_number":60,"context_line":" * tests is the dir which will contain the tests the example above used 2"},{"line_number":61,"context_line":"   subdirs for api tests and scenario tests, but that isn\u0027t a hard requiement."},{"line_number":62,"context_line":"   Any organization of tests can be used"},{"line_number":63,"context_line":" * services will contain the additional api clients based on the RestClient"},{"line_number":64,"context_line":"   from tempest-lib"}],"source_content_type":"text/x-rst","patch_set":1,"id":"7a016987_42ec7329","line":61,"updated":"2015-05-23 05:31:47.000000000","message":"s/requiement/requirement/","commit_id":"50b34e99aa8c2b36252380b5c455443263ce274b"},{"author":{"_account_id":5196,"name":"Matthew Treinish","email":"mtreinish@kortar.org","username":"treinish"},"change_message_id":"f551242c76eb49cde96512c07e4d68c1d825af50","unresolved":false,"context_lines":[{"line_number":58,"context_line":"   will provide all the necessary information to tempest to execute the plugin"},{"line_number":59,"context_line":"   remotely and second the additional configuration options"},{"line_number":60,"context_line":" * tests is the dir which will contain the tests the example above used 2"},{"line_number":61,"context_line":"   subdirs for api tests and scenario tests, but that isn\u0027t a hard requiement."},{"line_number":62,"context_line":"   Any organization of tests can be used"},{"line_number":63,"context_line":" * services will contain the additional api clients based on the RestClient"},{"line_number":64,"context_line":"   from tempest-lib"}],"source_content_type":"text/x-rst","patch_set":1,"id":"7a016987_7f646f48","line":61,"in_reply_to":"7a016987_42ec7329","updated":"2015-05-26 18:55:22.000000000","message":"Done","commit_id":"50b34e99aa8c2b36252380b5c455443263ce274b"},{"author":{"_account_id":7872,"name":"Marc Koderer","email":"marc@koderer.com","username":"mkoderer"},"change_message_id":"05e237b47ffa11784d73cc9ab445bc7e30a1e221","unresolved":false,"context_lines":[{"line_number":66,"context_line":"It is also worth noting that we should strive to make these plugins be able to"},{"line_number":67,"context_line":"fully self execute on their own with a traditional test runner without any need"},{"line_number":68,"context_line":"to use tempest. The use of the plugin is only to enable easier integration with"},{"line_number":69,"context_line":"the wider test suite for other projects.."},{"line_number":70,"context_line":""},{"line_number":71,"context_line":"Additional tempest-lib pieces will be needed to handle the registration of"},{"line_number":72,"context_line":"new config options as well. Traditionally we have said not to rely on config"}],"source_content_type":"text/x-rst","patch_set":1,"id":"7a016987_42d35360","line":69,"updated":"2015-05-23 05:31:47.000000000","message":"I suggest to add a tempest-plugin-cookiecutter repo for that. This would ease the setup.","commit_id":"50b34e99aa8c2b36252380b5c455443263ce274b"},{"author":{"_account_id":5196,"name":"Matthew Treinish","email":"mtreinish@kortar.org","username":"treinish"},"change_message_id":"f551242c76eb49cde96512c07e4d68c1d825af50","unresolved":false,"context_lines":[{"line_number":66,"context_line":"It is also worth noting that we should strive to make these plugins be able to"},{"line_number":67,"context_line":"fully self execute on their own with a traditional test runner without any need"},{"line_number":68,"context_line":"to use tempest. The use of the plugin is only to enable easier integration with"},{"line_number":69,"context_line":"the wider test suite for other projects.."},{"line_number":70,"context_line":""},{"line_number":71,"context_line":"Additional tempest-lib pieces will be needed to handle the registration of"},{"line_number":72,"context_line":"new config options as well. Traditionally we have said not to rely on config"}],"source_content_type":"text/x-rst","patch_set":1,"id":"7a016987_115b2f30","line":69,"in_reply_to":"7a016987_42d35360","updated":"2015-05-26 18:55:22.000000000","message":"Done","commit_id":"50b34e99aa8c2b36252380b5c455443263ce274b"},{"author":{"_account_id":7872,"name":"Marc Koderer","email":"marc@koderer.com","username":"mkoderer"},"change_message_id":"05e237b47ffa11784d73cc9ab445bc7e30a1e221","unresolved":false,"context_lines":[{"line_number":111,"context_line":"----------"},{"line_number":112,"context_line":""},{"line_number":113,"context_line":"- Add interface to tempest-lib to add"},{"line_number":114,"context_line":"- Create documentationfor using plugins"},{"line_number":115,"context_line":""},{"line_number":116,"context_line":""},{"line_number":117,"context_line":"Dependencies"}],"source_content_type":"text/x-rst","patch_set":1,"id":"7a016987_02c9dbab","line":114,"updated":"2015-05-23 05:31:47.000000000","message":"blank missing \"documentation for\"","commit_id":"50b34e99aa8c2b36252380b5c455443263ce274b"},{"author":{"_account_id":5196,"name":"Matthew Treinish","email":"mtreinish@kortar.org","username":"treinish"},"change_message_id":"f551242c76eb49cde96512c07e4d68c1d825af50","unresolved":false,"context_lines":[{"line_number":111,"context_line":"----------"},{"line_number":112,"context_line":""},{"line_number":113,"context_line":"- Add interface to tempest-lib to add"},{"line_number":114,"context_line":"- Create documentationfor using plugins"},{"line_number":115,"context_line":""},{"line_number":116,"context_line":""},{"line_number":117,"context_line":"Dependencies"}],"source_content_type":"text/x-rst","patch_set":1,"id":"7a016987_31f2ab07","line":114,"in_reply_to":"7a016987_02c9dbab","updated":"2015-05-26 18:55:22.000000000","message":"Done","commit_id":"50b34e99aa8c2b36252380b5c455443263ce274b"},{"author":{"_account_id":8556,"name":"Ghanshyam Maan","display_name":"Ghanshyam Maan","email":"gmaan.os14@gmail.com","username":"ghanshyam"},"change_message_id":"04963c970243533ec68fe84c2fa0d154b09fe276","unresolved":false,"context_lines":[{"line_number":41,"context_line":""},{"line_number":42,"context_line":"    [entry_points]"},{"line_number":43,"context_line":"    tempest.test_plugins \u003d"},{"line_number":44,"context_line":"        plugin_name \u003d plugin_dir.config:load_plugin"},{"line_number":45,"context_line":""},{"line_number":46,"context_line":"This will register a new plugin to tempest to use the additional testing."},{"line_number":47,"context_line":"Stevedore will probably be leveraged on the tempest side in the new cli"}],"source_content_type":"text/x-rst","patch_set":2,"id":"7a016987_c9b5d831","line":44,"updated":"2015-05-27 09:29:16.000000000","message":"In case of multiple plugin it is list ?- \ntempest.test_plugins \u003d\n    [plugin_name1 \u003d plugin_dir.config:load_plugin,\n     plugin_name2 \u003d plugin_dir.config:load_plugin]","commit_id":"2829879787dc9cc3bd43ca81b8082445b03e7c35"},{"author":{"_account_id":6167,"name":"Ken\u0027ichi Ohmichi","email":"ken1ohmichi@gmail.com","username":"oomichi"},"change_message_id":"f4a943a8486c559bad4e981c393ff2aabcba8c7b","unresolved":false,"context_lines":[{"line_number":41,"context_line":""},{"line_number":42,"context_line":"    [entry_points]"},{"line_number":43,"context_line":"    tempest.test_plugins \u003d"},{"line_number":44,"context_line":"        plugin_name \u003d plugin_dir.config:load_plugin"},{"line_number":45,"context_line":""},{"line_number":46,"context_line":"This will register a new plugin to tempest to use the additional testing."},{"line_number":47,"context_line":"Stevedore will probably be leveraged on the tempest side in the new cli"}],"source_content_type":"text/x-rst","patch_set":2,"id":"fa32b979_a864e6e4","line":44,"in_reply_to":"7a016987_09f642f9","updated":"2015-06-16 08:29:51.000000000","message":"Ironic and ironic-inspector guy would need multiple plugins as Ghanshyam said.\nand Matt\u0027s explanation is nice for me also.","commit_id":"2829879787dc9cc3bd43ca81b8082445b03e7c35"},{"author":{"_account_id":5196,"name":"Matthew Treinish","email":"mtreinish@kortar.org","username":"treinish"},"change_message_id":"bc8c3f39d5351c354199d9ea4db738bced81f779","unresolved":false,"context_lines":[{"line_number":41,"context_line":""},{"line_number":42,"context_line":"    [entry_points]"},{"line_number":43,"context_line":"    tempest.test_plugins \u003d"},{"line_number":44,"context_line":"        plugin_name \u003d plugin_dir.config:load_plugin"},{"line_number":45,"context_line":""},{"line_number":46,"context_line":"This will register a new plugin to tempest to use the additional testing."},{"line_number":47,"context_line":"Stevedore will probably be leveraged on the tempest side in the new cli"}],"source_content_type":"text/x-rst","patch_set":2,"id":"7a016987_09f642f9","line":44,"in_reply_to":"7a016987_c9b5d831","updated":"2015-05-27 14:35:58.000000000","message":"You\u0027re expecting there to be multiple plugins in a single repo? I\u0027m not sure there\u0027s much of a use case for that. But if there was the syntax would be:\n\n  [entry_points]\n  tempest.test_plugins \u003d\n      plugin_name \u003d plugin_dir.config:load_plugin\n      plugin_name2 \u003d  plugin_dir2.config:load_plugin\n\nlike other setup.cfg entry_points.","commit_id":"2829879787dc9cc3bd43ca81b8082445b03e7c35"},{"author":{"_account_id":6167,"name":"Ken\u0027ichi Ohmichi","email":"ken1ohmichi@gmail.com","username":"oomichi"},"change_message_id":"887766ed5405dcf3d66e9196dc4cb52a8ceacee9","unresolved":false,"context_lines":[{"line_number":23,"context_line":"As part of the recent governance change to rework OpenStack under a big tent"},{"line_number":24,"context_line":"the QA program needs to be able to handle an influx of \"OpenStack\" projects."},{"line_number":25,"context_line":"As part of this pivot most QA projects are shifting from directly supporting"},{"line_number":26,"context_line":"every project in-tree to moving towards providing projects to self service"},{"line_number":27,"context_line":"A missing piece of this was the tempest external plugin model, all the other"},{"line_number":28,"context_line":"QA projects contain support for extending functionality with out of tree"},{"line_number":29,"context_line":"plugins but tempest was putting the burden on the user for constructing this."}],"source_content_type":"text/x-rst","patch_set":3,"id":"3afb71cf_5b492eb6","line":26,"updated":"2015-06-16 06:35:36.000000000","message":"nit: need . at the end of the line26.","commit_id":"6cb4f3e28785cd4fc1482b2c16d5b26c3bb36ee8"},{"author":{"_account_id":5196,"name":"Matthew Treinish","email":"mtreinish@kortar.org","username":"treinish"},"change_message_id":"86f85b29836dfe7e29bd97d87e05e75408044f32","unresolved":false,"context_lines":[{"line_number":23,"context_line":"As part of the recent governance change to rework OpenStack under a big tent"},{"line_number":24,"context_line":"the QA program needs to be able to handle an influx of \"OpenStack\" projects."},{"line_number":25,"context_line":"As part of this pivot most QA projects are shifting from directly supporting"},{"line_number":26,"context_line":"every project in-tree to moving towards providing projects to self service"},{"line_number":27,"context_line":"A missing piece of this was the tempest external plugin model, all the other"},{"line_number":28,"context_line":"QA projects contain support for extending functionality with out of tree"},{"line_number":29,"context_line":"plugins but tempest was putting the burden on the user for constructing this."}],"source_content_type":"text/x-rst","patch_set":3,"id":"fa32b979_0fc87c21","line":26,"in_reply_to":"3afb71cf_5b492eb6","updated":"2015-06-16 07:45:07.000000000","message":"Done","commit_id":"6cb4f3e28785cd4fc1482b2c16d5b26c3bb36ee8"},{"author":{"_account_id":8851,"name":"Valeriy Ponomaryov","email":"kiparis.kh@gmail.com","username":"vponomaryov"},"change_message_id":"08384205a25c1c4dacdd224e0685e49a1562ab92","unresolved":false,"context_lines":[{"line_number":33,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"},{"line_number":34,"context_line":""},{"line_number":35,"context_line":"The first step for the plugin interface is to handle the discovery of the"},{"line_number":36,"context_line":"additional tests. To do this registering an entry point that tempest will"},{"line_number":37,"context_line":"be able to load as part of it\u0027s run command."},{"line_number":38,"context_line":""},{"line_number":39,"context_line":"You would register the entrypoint when using pbr by adding an entry to"}],"source_content_type":"text/x-rst","patch_set":3,"id":"5afe65bd_7e2d3094","line":36,"updated":"2015-06-04 11:25:29.000000000","message":"Discovering only tests? Tempest should be able to discover every part of it - clients, exceptions, config, etc...","commit_id":"6cb4f3e28785cd4fc1482b2c16d5b26c3bb36ee8"},{"author":{"_account_id":5196,"name":"Matthew Treinish","email":"mtreinish@kortar.org","username":"treinish"},"change_message_id":"fe076bad959747a3a5aa3f2d374421ac2a13cc74","unresolved":false,"context_lines":[{"line_number":33,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"},{"line_number":34,"context_line":""},{"line_number":35,"context_line":"The first step for the plugin interface is to handle the discovery of the"},{"line_number":36,"context_line":"additional tests. To do this registering an entry point that tempest will"},{"line_number":37,"context_line":"be able to load as part of it\u0027s run command."},{"line_number":38,"context_line":""},{"line_number":39,"context_line":"You would register the entrypoint when using pbr by adding an entry to"}],"source_content_type":"text/x-rst","patch_set":3,"id":"fa32b979_cd62d1d8","line":36,"in_reply_to":"3afb71cf_6945bab1","updated":"2015-06-15 09:09:59.000000000","message":"Yes, In this context it means a very specific thing it\u0027s only unittest discovery. On the next respin I\u0027ll add some more words to make it clearer","commit_id":"6cb4f3e28785cd4fc1482b2c16d5b26c3bb36ee8"},{"author":{"_account_id":7872,"name":"Marc Koderer","email":"marc@koderer.com","username":"mkoderer"},"change_message_id":"470ab1c06dc4e449b6da0b5a8f1f73ba873ef127","unresolved":false,"context_lines":[{"line_number":33,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"},{"line_number":34,"context_line":""},{"line_number":35,"context_line":"The first step for the plugin interface is to handle the discovery of the"},{"line_number":36,"context_line":"additional tests. To do this registering an entry point that tempest will"},{"line_number":37,"context_line":"be able to load as part of it\u0027s run command."},{"line_number":38,"context_line":""},{"line_number":39,"context_line":"You would register the entrypoint when using pbr by adding an entry to"}],"source_content_type":"text/x-rst","patch_set":3,"id":"3afb71cf_6945bab1","line":36,"in_reply_to":"5afe65bd_7e2d3094","updated":"2015-06-08 05:56:06.000000000","message":"I think this is just a wording issue. You don\u0027t need to discover new clients, exceptions or config since it\u0027s just used by the test.","commit_id":"6cb4f3e28785cd4fc1482b2c16d5b26c3bb36ee8"},{"author":{"_account_id":8851,"name":"Valeriy Ponomaryov","email":"kiparis.kh@gmail.com","username":"vponomaryov"},"change_message_id":"08384205a25c1c4dacdd224e0685e49a1562ab92","unresolved":false,"context_lines":[{"line_number":62,"context_line":"      tests/"},{"line_number":63,"context_line":"        api/"},{"line_number":64,"context_line":"        scenario/"},{"line_number":65,"context_line":"      services/"},{"line_number":66,"context_line":""},{"line_number":67,"context_line":"The various pieces here:"},{"line_number":68,"context_line":" * config.py will contain 2 things first is the registration method which"}],"source_content_type":"text/x-rst","patch_set":3,"id":"5afe65bd_def0a493","line":65,"updated":"2015-06-04 11:25:29.000000000","message":"+ exceptions?","commit_id":"6cb4f3e28785cd4fc1482b2c16d5b26c3bb36ee8"},{"author":{"_account_id":12024,"name":"Tong Liu","email":"tongl@vmware.com","username":"tong101"},"change_message_id":"1e35f59a0d63f066c4c6020686b5264faf27cf3c","unresolved":false,"context_lines":[{"line_number":62,"context_line":"      tests/"},{"line_number":63,"context_line":"        api/"},{"line_number":64,"context_line":"        scenario/"},{"line_number":65,"context_line":"      services/"},{"line_number":66,"context_line":""},{"line_number":67,"context_line":"The various pieces here:"},{"line_number":68,"context_line":" * config.py will contain 2 things first is the registration method which"}],"source_content_type":"text/x-rst","patch_set":3,"id":"3afb71cf_df425c68","line":65,"updated":"2015-06-11 17:58:09.000000000","message":"We may also need a lib/ directory to store the plugin specific library files.","commit_id":"6cb4f3e28785cd4fc1482b2c16d5b26c3bb36ee8"},{"author":{"_account_id":8851,"name":"Valeriy Ponomaryov","email":"kiparis.kh@gmail.com","username":"vponomaryov"},"change_message_id":"bbc7e09e3b92408695b07c75c953a1dc24137d1d","unresolved":false,"context_lines":[{"line_number":62,"context_line":"      tests/"},{"line_number":63,"context_line":"        api/"},{"line_number":64,"context_line":"        scenario/"},{"line_number":65,"context_line":"      services/"},{"line_number":66,"context_line":""},{"line_number":67,"context_line":"The various pieces here:"},{"line_number":68,"context_line":" * config.py will contain 2 things first is the registration method which"}],"source_content_type":"text/x-rst","patch_set":3,"id":"3afb71cf_a0e535a9","line":65,"in_reply_to":"3afb71cf_24dbb21d","updated":"2015-06-05 11:00:53.000000000","message":"Why addon of exceptions is called \" modify, any tempest behavior.\" ? It is still \"add/extend\" operation.","commit_id":"6cb4f3e28785cd4fc1482b2c16d5b26c3bb36ee8"},{"author":{"_account_id":5196,"name":"Matthew Treinish","email":"mtreinish@kortar.org","username":"treinish"},"change_message_id":"fe076bad959747a3a5aa3f2d374421ac2a13cc74","unresolved":false,"context_lines":[{"line_number":62,"context_line":"      tests/"},{"line_number":63,"context_line":"        api/"},{"line_number":64,"context_line":"        scenario/"},{"line_number":65,"context_line":"      services/"},{"line_number":66,"context_line":""},{"line_number":67,"context_line":"The various pieces here:"},{"line_number":68,"context_line":" * config.py will contain 2 things first is the registration method which"}],"source_content_type":"text/x-rst","patch_set":3,"id":"fa32b979_4dfec16c","line":65,"in_reply_to":"3afb71cf_df425c68","updated":"2015-06-15 09:09:59.000000000","message":"This is just an example dir structure, it doesn\u0027t include every file or directory that anyone would possibly put in the plugin. Part, of what I\u0027m trying to say here is that anyone can write the plugin as they want. This is just what I think a sane starting point would be (which would be cookiecuttered)\n\nI really don\u0027t feel we need to call out things that people would just be using in their specific plugin implementations for this spec. (like additional exceptions or a lib dir) It\u0027s not the place of this to dictate that, just outline the common pieces that define the plugin interface.","commit_id":"6cb4f3e28785cd4fc1482b2c16d5b26c3bb36ee8"},{"author":{"_account_id":1192,"name":"David Kranz","email":"dkranz@redhat.com","username":"david-kranz"},"change_message_id":"9170f624375cfea56ea894bc33a33938ddb2fe7d","unresolved":false,"context_lines":[{"line_number":62,"context_line":"      tests/"},{"line_number":63,"context_line":"        api/"},{"line_number":64,"context_line":"        scenario/"},{"line_number":65,"context_line":"      services/"},{"line_number":66,"context_line":""},{"line_number":67,"context_line":"The various pieces here:"},{"line_number":68,"context_line":" * config.py will contain 2 things first is the registration method which"}],"source_content_type":"text/x-rst","patch_set":3,"id":"3afb71cf_24dbb21d","line":65,"in_reply_to":"5afe65bd_def0a493","updated":"2015-06-04 19:00:23.000000000","message":"I could be wrong, but I think the idea is that services is needed so that the Manager class can be extended. Whether that is true or not, any new exceptions would only be referenced by the code in the plugin. I think there is a possible confusion between this proposal and a previous one to make tempest pluggable. Pluggability as envisioned by this proposal is intended to only add, not modify, any tempest behavior.","commit_id":"6cb4f3e28785cd4fc1482b2c16d5b26c3bb36ee8"},{"author":{"_account_id":5196,"name":"Matthew Treinish","email":"mtreinish@kortar.org","username":"treinish"},"change_message_id":"86f85b29836dfe7e29bd97d87e05e75408044f32","unresolved":false,"context_lines":[{"line_number":62,"context_line":"      tests/"},{"line_number":63,"context_line":"        api/"},{"line_number":64,"context_line":"        scenario/"},{"line_number":65,"context_line":"      services/"},{"line_number":66,"context_line":""},{"line_number":67,"context_line":"The various pieces here:"},{"line_number":68,"context_line":" * config.py will contain 2 things first is the registration method which"}],"source_content_type":"text/x-rst","patch_set":3,"id":"fa32b979_f27f3f64","line":65,"in_reply_to":"fa32b979_0251340e","updated":"2015-06-16 07:45:07.000000000","message":"Yeah I did that on purpose, I think from a discovery mechanism pov it\u0027ll be easier to just use a single directory from each plugin so when we load the plugins with stevedore there will just be a single path we have to deal with, especially if there are different testing sub categories that the plugin wants to use. \n\nThe alternative I was thinking about was that we return a list from the plugin load and then append each entry to the discovery mechanism. But, the disadvantage there was that we\u0027d be putting a bigger burden on the plugin writer to get all the subpaths to use for test discovery correct.","commit_id":"6cb4f3e28785cd4fc1482b2c16d5b26c3bb36ee8"},{"author":{"_account_id":6167,"name":"Ken\u0027ichi Ohmichi","email":"ken1ohmichi@gmail.com","username":"oomichi"},"change_message_id":"887766ed5405dcf3d66e9196dc4cb52a8ceacee9","unresolved":false,"context_lines":[{"line_number":62,"context_line":"      tests/"},{"line_number":63,"context_line":"        api/"},{"line_number":64,"context_line":"        scenario/"},{"line_number":65,"context_line":"      services/"},{"line_number":66,"context_line":""},{"line_number":67,"context_line":"The various pieces here:"},{"line_number":68,"context_line":" * config.py will contain 2 things first is the registration method which"}],"source_content_type":"text/x-rst","patch_set":3,"id":"fa32b979_0251340e","line":65,"in_reply_to":"fa32b979_4dfec16c","updated":"2015-06-16 06:35:36.000000000","message":"I am fine to write here as a sample, sometimes the details would make confusions when knowing overviews of features.\n\nBTW, the above directory structure is different from current Tempest one.\n\n Tempest one is:\n     config.py\n     api/\n     scenario/\n     services/\n\nso api/ and scenario/ are not under tests/.\nis that intentional?\nmaybe the working area of discovery is necessary to be limited?","commit_id":"6cb4f3e28785cd4fc1482b2c16d5b26c3bb36ee8"},{"author":{"_account_id":6167,"name":"Ken\u0027ichi Ohmichi","email":"ken1ohmichi@gmail.com","username":"oomichi"},"change_message_id":"d4b37681a3a6d202f0423334897c733a1bc18345","unresolved":false,"context_lines":[{"line_number":62,"context_line":"      tests/"},{"line_number":63,"context_line":"        api/"},{"line_number":64,"context_line":"        scenario/"},{"line_number":65,"context_line":"      services/"},{"line_number":66,"context_line":""},{"line_number":67,"context_line":"The various pieces here:"},{"line_number":68,"context_line":" * config.py will contain 2 things first is the registration method which"}],"source_content_type":"text/x-rst","patch_set":3,"id":"fa32b979_48f2fad3","line":65,"in_reply_to":"fa32b979_f27f3f64","updated":"2015-06-16 08:39:24.000000000","message":"My thinking was Tempest original tests also would be discovered with the same manner and \"tests\" directory of current Tempest is for unittests. Maybe line 53 of the latest mention about that, but I\u0027m not sure the meaning yet.","commit_id":"6cb4f3e28785cd4fc1482b2c16d5b26c3bb36ee8"},{"author":{"_account_id":8851,"name":"Valeriy Ponomaryov","email":"kiparis.kh@gmail.com","username":"vponomaryov"},"change_message_id":"08384205a25c1c4dacdd224e0685e49a1562ab92","unresolved":false,"context_lines":[{"line_number":65,"context_line":"      services/"},{"line_number":66,"context_line":""},{"line_number":67,"context_line":"The various pieces here:"},{"line_number":68,"context_line":" * config.py will contain 2 things first is the registration method which"},{"line_number":69,"context_line":"   will provide all the necessary information to tempest to execute the plugin"},{"line_number":70,"context_line":"   remotely and second the additional configuration options"},{"line_number":71,"context_line":" * Tests is the dir which will contain the tests the example above used 2"}],"source_content_type":"text/x-rst","patch_set":3,"id":"5afe65bd_be72880f","line":68,"updated":"2015-06-04 11:25:29.000000000","message":"Note, that we need to be able to add new config options to existing config groups in addition to just adding new config groups.","commit_id":"6cb4f3e28785cd4fc1482b2c16d5b26c3bb36ee8"},{"author":{"_account_id":8851,"name":"Valeriy Ponomaryov","email":"kiparis.kh@gmail.com","username":"vponomaryov"},"change_message_id":"bbc7e09e3b92408695b07c75c953a1dc24137d1d","unresolved":false,"context_lines":[{"line_number":65,"context_line":"      services/"},{"line_number":66,"context_line":""},{"line_number":67,"context_line":"The various pieces here:"},{"line_number":68,"context_line":" * config.py will contain 2 things first is the registration method which"},{"line_number":69,"context_line":"   will provide all the necessary information to tempest to execute the plugin"},{"line_number":70,"context_line":"   remotely and second the additional configuration options"},{"line_number":71,"context_line":" * Tests is the dir which will contain the tests the example above used 2"}],"source_content_type":"text/x-rst","patch_set":3,"id":"3afb71cf_e0268d15","line":68,"in_reply_to":"3afb71cf_04ef96b1","updated":"2015-06-05 11:00:53.000000000","message":"Same about duplication of config groups. Nothing different, in this case we just get \"DuplicationError\". Extending existing group is useful, for example, for group \"service_available\" with project that is added using plugin. And we do not expect here some duplications.","commit_id":"6cb4f3e28785cd4fc1482b2c16d5b26c3bb36ee8"},{"author":{"_account_id":5196,"name":"Matthew Treinish","email":"mtreinish@kortar.org","username":"treinish"},"change_message_id":"fe076bad959747a3a5aa3f2d374421ac2a13cc74","unresolved":false,"context_lines":[{"line_number":65,"context_line":"      services/"},{"line_number":66,"context_line":""},{"line_number":67,"context_line":"The various pieces here:"},{"line_number":68,"context_line":" * config.py will contain 2 things first is the registration method which"},{"line_number":69,"context_line":"   will provide all the necessary information to tempest to execute the plugin"},{"line_number":70,"context_line":"   remotely and second the additional configuration options"},{"line_number":71,"context_line":" * Tests is the dir which will contain the tests the example above used 2"}],"source_content_type":"text/x-rst","patch_set":3,"id":"fa32b979_f800b5ac","line":68,"in_reply_to":"3afb71cf_89dc7613","updated":"2015-06-15 09:09:59.000000000","message":"So the interface I had in mind for this was just having a defined register_config() method which will be called when the entry-point is being loaded. This will make any oslo config registration calls the plugin says. (This will be called in the right place during normal config loading) There isn\u0027t anything really different about being part of a new group or an existing group in that case. I was trying not to put too many implementation specific things in this spec because I\u0027m sure after code review that won\u0027t match what I had in mind necessarily.\n\nFor duplicate options, I don\u0027t think worrying about them is something we actually need to care about here. If people are using 2 tempest plugins which add the same options as each other, that\u0027s a bug for 1 or both of the plugins. Also, I would expect/hope for this to be a relative rarirty the config options should be very specific to the thing being tested. \n\nAs for things like the service_available options if there are multiple things trying to add a service available plugin I would imagine that the direction those plugins should take is define a dependency between them so if you depend on knowing whether an external service is available (which isn\u0027t in the base tempest set) you\u0027d have to depend on the other plugin to be explicit in that relationship. This dependency will also probably help with deduplication of things like client methods since you can use them from the other pliugin. \n\nBut, either way I feel this is something that is in the domain of the plugins to rationaliize themselves. We can probably provide some recommendations in docs about writing plugins, but we really can\u0027t dictate the each plugin\u0027s implementation.","commit_id":"6cb4f3e28785cd4fc1482b2c16d5b26c3bb36ee8"},{"author":{"_account_id":7872,"name":"Marc Koderer","email":"marc@koderer.com","username":"mkoderer"},"change_message_id":"470ab1c06dc4e449b6da0b5a8f1f73ba873ef127","unresolved":false,"context_lines":[{"line_number":65,"context_line":"      services/"},{"line_number":66,"context_line":""},{"line_number":67,"context_line":"The various pieces here:"},{"line_number":68,"context_line":" * config.py will contain 2 things first is the registration method which"},{"line_number":69,"context_line":"   will provide all the necessary information to tempest to execute the plugin"},{"line_number":70,"context_line":"   remotely and second the additional configuration options"},{"line_number":71,"context_line":" * Tests is the dir which will contain the tests the example above used 2"}],"source_content_type":"text/x-rst","patch_set":3,"id":"3afb71cf_89dc7613","line":68,"in_reply_to":"3afb71cf_e0268d15","updated":"2015-06-08 05:56:06.000000000","message":"service_available is a very good spot. We also need this for the@test.services decorator. There must be at least parts where existing config can be adapted.","commit_id":"6cb4f3e28785cd4fc1482b2c16d5b26c3bb36ee8"},{"author":{"_account_id":1192,"name":"David Kranz","email":"dkranz@redhat.com","username":"david-kranz"},"change_message_id":"9170f624375cfea56ea894bc33a33938ddb2fe7d","unresolved":false,"context_lines":[{"line_number":65,"context_line":"      services/"},{"line_number":66,"context_line":""},{"line_number":67,"context_line":"The various pieces here:"},{"line_number":68,"context_line":" * config.py will contain 2 things first is the registration method which"},{"line_number":69,"context_line":"   will provide all the necessary information to tempest to execute the plugin"},{"line_number":70,"context_line":"   remotely and second the additional configuration options"},{"line_number":71,"context_line":" * Tests is the dir which will contain the tests the example above used 2"}],"source_content_type":"text/x-rst","patch_set":3,"id":"3afb71cf_04ef96b1","line":68,"in_reply_to":"5afe65bd_be72880f","updated":"2015-06-04 19:00:23.000000000","message":"That is problematic when multiple plugins are being used. How would we make sure that two plugins don\u0027t try to add the same key inside an existing group?","commit_id":"6cb4f3e28785cd4fc1482b2c16d5b26c3bb36ee8"},{"author":{"_account_id":8851,"name":"Valeriy Ponomaryov","email":"kiparis.kh@gmail.com","username":"vponomaryov"},"change_message_id":"08384205a25c1c4dacdd224e0685e49a1562ab92","unresolved":false,"context_lines":[{"line_number":102,"context_line":"tempest run you would specify a list of plugins to load at the same time."},{"line_number":103,"context_line":"The disadvantage of this approach is that it requires the user to know where"},{"line_number":104,"context_line":"the plugins are located on the system. While using an entrypoint only requires"},{"line_number":105,"context_line":"the additional code to be installed an then tempest will use external location"},{"line_number":106,"context_line":"automatically."},{"line_number":107,"context_line":""},{"line_number":108,"context_line":""}],"source_content_type":"text/x-rst","patch_set":3,"id":"5afe65bd_3e7fb867","line":105,"updated":"2015-06-04 11:25:29.000000000","message":"s/an/and/","commit_id":"6cb4f3e28785cd4fc1482b2c16d5b26c3bb36ee8"},{"author":{"_account_id":5196,"name":"Matthew Treinish","email":"mtreinish@kortar.org","username":"treinish"},"change_message_id":"fe076bad959747a3a5aa3f2d374421ac2a13cc74","unresolved":false,"context_lines":[{"line_number":102,"context_line":"tempest run you would specify a list of plugins to load at the same time."},{"line_number":103,"context_line":"The disadvantage of this approach is that it requires the user to know where"},{"line_number":104,"context_line":"the plugins are located on the system. While using an entrypoint only requires"},{"line_number":105,"context_line":"the additional code to be installed an then tempest will use external location"},{"line_number":106,"context_line":"automatically."},{"line_number":107,"context_line":""},{"line_number":108,"context_line":""}],"source_content_type":"text/x-rst","patch_set":3,"id":"fa32b979_4d41e10a","line":105,"in_reply_to":"5afe65bd_3e7fb867","updated":"2015-06-15 09:09:59.000000000","message":"Done","commit_id":"6cb4f3e28785cd4fc1482b2c16d5b26c3bb36ee8"},{"author":{"_account_id":8556,"name":"Ghanshyam Maan","display_name":"Ghanshyam Maan","email":"gmaan.os14@gmail.com","username":"ghanshyam"},"change_message_id":"8ec16fd4dc4f463197f9f10afbc308a21bba47b8","unresolved":false,"context_lines":[{"line_number":38,"context_line":"an entry point that tempest will be able to load as part of it\u0027s run command"},{"line_number":39,"context_line":"will be used. This will enable any installed python package which contains a"},{"line_number":40,"context_line":"tempest entry point to be seamlessly discovered and used as part of a wider"},{"line_number":41,"context_line":"\"Tempest\" test suite."},{"line_number":42,"context_line":""},{"line_number":43,"context_line":"You would register the entrypoint when using pbr by adding an entry to"},{"line_number":44,"context_line":"your setup.cfg like::"}],"source_content_type":"text/x-rst","patch_set":4,"id":"fa32b979_43414637","line":41,"updated":"2015-06-17 07:49:25.000000000","message":"How we will avoid \u0027conflict\u0027 situation between Tempest and external plugin tests.\n\nFor example-\n Admin compute quota tests in Tempest updates compute quota and currently all other quota tests in Tempest are being isolated with those admin tests through locking mechanism. \n\nHow we are going to handle such situation among plugin tests and Tempest tests?","commit_id":"4b35459fc4f16042584a82316ffb57fb3b6f0724"},{"author":{"_account_id":8556,"name":"Ghanshyam Maan","display_name":"Ghanshyam Maan","email":"gmaan.os14@gmail.com","username":"ghanshyam"},"change_message_id":"a5813379d42c0bd04c9ec9d5f483eb86457ff5a9","unresolved":false,"context_lines":[{"line_number":38,"context_line":"an entry point that tempest will be able to load as part of it\u0027s run command"},{"line_number":39,"context_line":"will be used. This will enable any installed python package which contains a"},{"line_number":40,"context_line":"tempest entry point to be seamlessly discovered and used as part of a wider"},{"line_number":41,"context_line":"\"Tempest\" test suite."},{"line_number":42,"context_line":""},{"line_number":43,"context_line":"You would register the entrypoint when using pbr by adding an entry to"},{"line_number":44,"context_line":"your setup.cfg like::"}],"source_content_type":"text/x-rst","patch_set":4,"id":"fa32b979_df54c9ff","line":41,"in_reply_to":"fa32b979_3f8af91b","updated":"2015-06-26 06:46:49.000000000","message":"Yea, I think it is fine as that can be managed and monitored manually for plugins tests.","commit_id":"4b35459fc4f16042584a82316ffb57fb3b6f0724"},{"author":{"_account_id":1192,"name":"David Kranz","email":"dkranz@redhat.com","username":"david-kranz"},"change_message_id":"1dea0df20c6420471dc81a95b8ff1f79aca0a11c","unresolved":false,"context_lines":[{"line_number":38,"context_line":"an entry point that tempest will be able to load as part of it\u0027s run command"},{"line_number":39,"context_line":"will be used. This will enable any installed python package which contains a"},{"line_number":40,"context_line":"tempest entry point to be seamlessly discovered and used as part of a wider"},{"line_number":41,"context_line":"\"Tempest\" test suite."},{"line_number":42,"context_line":""},{"line_number":43,"context_line":"You would register the entrypoint when using pbr by adding an entry to"},{"line_number":44,"context_line":"your setup.cfg like::"}],"source_content_type":"text/x-rst","patch_set":4,"id":"fa32b979_3f8af91b","line":41,"in_reply_to":"fa32b979_43414637","updated":"2015-06-17 18:21:53.000000000","message":"I don\u0027t see much alternative to saying that tests for other projects should not use resources that tempest is locking. Perhaps we need to document those but I don\u0027t see why another project would need to do this.","commit_id":"4b35459fc4f16042584a82316ffb57fb3b6f0724"},{"author":{"_account_id":5803,"name":"Attila Fazekas","email":"afazekas@redhat.com","username":"afazekas"},"change_message_id":"47fdaf19864b50a0a678f7bbcfb718c4b523e69e","unresolved":false,"context_lines":[{"line_number":45,"context_line":""},{"line_number":46,"context_line":"    [entry_points]"},{"line_number":47,"context_line":"    tempest.test_plugins \u003d"},{"line_number":48,"context_line":"        plugin_name \u003d plugin_dir.config:load_plugin"},{"line_number":49,"context_line":""},{"line_number":50,"context_line":"This will register a new plugin to tempest to use the additional testing."},{"line_number":51,"context_line":"Stevedore will probably be leveraged on the tempest side in the new cli"}],"source_content_type":"text/x-rst","patch_set":4,"id":"fa32b979_4c2d80a7","line":48,"updated":"2015-06-25 22:53:05.000000000","message":"I guess the load_plugin is a method since it is not Camel case.\n\nAnyway, the expected type should be part of this spec, and described briefly.","commit_id":"4b35459fc4f16042584a82316ffb57fb3b6f0724"},{"author":{"_account_id":6167,"name":"Ken\u0027ichi Ohmichi","email":"ken1ohmichi@gmail.com","username":"oomichi"},"change_message_id":"3a9ca3519815cd0e7bdd8d9bd6067f4be383739f","unresolved":false,"context_lines":[{"line_number":64,"context_line":""},{"line_number":65,"context_line":"    plugin_dir/"},{"line_number":66,"context_line":"      config.py"},{"line_number":67,"context_line":"      tests/"},{"line_number":68,"context_line":"        api/"},{"line_number":69,"context_line":"        scenario/"},{"line_number":70,"context_line":"      services/"}],"source_content_type":"text/x-rst","patch_set":4,"id":"fa32b979_28d184fa","line":67,"updated":"2015-06-17 05:26:00.000000000","message":"How about \"integration_tests/\" instead of \"tests/\" ?\n\nTempest is an integration test suite, and good to avoid conflict the directory name of unittests in Tempest itself.\n\nThe problem is that refstack seems to use still test paths instead of UUIDs, so we need to wait for refstack change before changing test paths in Tempest.","commit_id":"4b35459fc4f16042584a82316ffb57fb3b6f0724"}]}
