)]}'
{"specs/pike/approved/move-nova-cmds-to-click.rst":[{"author":{"_account_id":11564,"name":"Chris Dent","email":"cdent@anticdent.org","username":"chdent"},"change_message_id":"bb6070c3cbfccd5c1eb1cf1d42dca2c102a99eb3","unresolved":false,"context_lines":[{"line_number":5,"context_line":" http://creativecommons.org/licenses/by/3.0/legalcode"},{"line_number":6,"context_line":""},{"line_number":7,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"},{"line_number":8,"context_line":"Example Spec - The title of your blueprint"},{"line_number":9,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"},{"line_number":10,"context_line":""},{"line_number":11,"context_line":"Include the URL of your launchpad blueprint:"}],"source_content_type":"text/x-rst","patch_set":1,"id":"fa31d9ce_66950e3f","line":8,"updated":"2017-02-17 16:07:09.000000000","message":"real title","commit_id":"fb7c63cb2547bc075e81ee63925dd70ed580dd37"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"8807379d38c0dc1ac41d90ebd3a41adc8ed45ca3","unresolved":false,"context_lines":[{"line_number":5,"context_line":" http://creativecommons.org/licenses/by/3.0/legalcode"},{"line_number":6,"context_line":""},{"line_number":7,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"},{"line_number":8,"context_line":"Example Spec - The title of your blueprint"},{"line_number":9,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"},{"line_number":10,"context_line":""},{"line_number":11,"context_line":"Include the URL of your launchpad blueprint:"}],"source_content_type":"text/x-rst","patch_set":1,"id":"da36d5c6_ae861ab7","line":8,"in_reply_to":"fa31d9ce_66950e3f","updated":"2017-02-20 19:47:47.000000000","message":"Done","commit_id":"fb7c63cb2547bc075e81ee63925dd70ed580dd37"},{"author":{"_account_id":11564,"name":"Chris Dent","email":"cdent@anticdent.org","username":"chdent"},"change_message_id":"bb6070c3cbfccd5c1eb1cf1d42dca2c102a99eb3","unresolved":false,"context_lines":[{"line_number":8,"context_line":"Example Spec - The title of your blueprint"},{"line_number":9,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"},{"line_number":10,"context_line":""},{"line_number":11,"context_line":"Include the URL of your launchpad blueprint:"},{"line_number":12,"context_line":""},{"line_number":13,"context_line":"https://blueprints.launchpad.net/nova/+spec/click-integration"},{"line_number":14,"context_line":""}],"source_content_type":"text/x-rst","patch_set":1,"id":"fa31d9ce_86904250","line":11,"updated":"2017-02-17 16:07:09.000000000","message":"can go?","commit_id":"fb7c63cb2547bc075e81ee63925dd70ed580dd37"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"8807379d38c0dc1ac41d90ebd3a41adc8ed45ca3","unresolved":false,"context_lines":[{"line_number":8,"context_line":"Example Spec - The title of your blueprint"},{"line_number":9,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"},{"line_number":10,"context_line":""},{"line_number":11,"context_line":"Include the URL of your launchpad blueprint:"},{"line_number":12,"context_line":""},{"line_number":13,"context_line":"https://blueprints.launchpad.net/nova/+spec/click-integration"},{"line_number":14,"context_line":""}],"source_content_type":"text/x-rst","patch_set":1,"id":"da36d5c6_2ec14ae5","line":11,"in_reply_to":"fa31d9ce_86904250","updated":"2017-02-20 19:47:47.000000000","message":"Done","commit_id":"fb7c63cb2547bc075e81ee63925dd70ed580dd37"},{"author":{"_account_id":11564,"name":"Chris Dent","email":"cdent@anticdent.org","username":"chdent"},"change_message_id":"bb6070c3cbfccd5c1eb1cf1d42dca2c102a99eb3","unresolved":false,"context_lines":[{"line_number":15,"context_line":"The custom CLI library nova uses for nova-manage and other tools doesn\u0027t do"},{"line_number":16,"context_line":"enough for us. Let\u0027s build upon the shoulders of giants and use an existing,"},{"line_number":17,"context_line":"well-maintained CLI library to minimize the maintenance overhead of these"},{"line_number":18,"context_line":"tools."},{"line_number":19,"context_line":""},{"line_number":20,"context_line":"Problem description"},{"line_number":21,"context_line":"\u003d\u003d\u003d\u003d\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":"fa31d9ce_a69f065e","line":18,"updated":"2017-02-17 16:07:09.000000000","message":"oh, yes please","commit_id":"fb7c63cb2547bc075e81ee63925dd70ed580dd37"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"c0998708c9e9b52ae89a89f81e5f39885e1ed51a","unresolved":false,"context_lines":[{"line_number":31,"context_line":"---------"},{"line_number":32,"context_line":""},{"line_number":33,"context_line":"- As an operator, I want to know what the various `nova-` commands do and why I"},{"line_number":34,"context_line":"  should use them"},{"line_number":35,"context_line":""},{"line_number":36,"context_line":"- As a developer, I want to be able to produce my documentation from my code"},{"line_number":37,"context_line":"  and ensure it stays up-to-date"}],"source_content_type":"text/x-rst","patch_set":1,"id":"da36d5c6_4b72037e","line":34,"updated":"2017-02-19 20:28:45.000000000","message":"Since click seems to be aimed at the full CLI experience and not just docs, this doesn\u0027t seem to be a very compelling use case for rewriting the tools. When I got here after reading the first paragraph above, I hadn\u0027t recognized that documentation was the main thread you were pulling.","commit_id":"fb7c63cb2547bc075e81ee63925dd70ed580dd37"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"8807379d38c0dc1ac41d90ebd3a41adc8ed45ca3","unresolved":false,"context_lines":[{"line_number":31,"context_line":"---------"},{"line_number":32,"context_line":""},{"line_number":33,"context_line":"- As an operator, I want to know what the various `nova-` commands do and why I"},{"line_number":34,"context_line":"  should use them"},{"line_number":35,"context_line":""},{"line_number":36,"context_line":"- As a developer, I want to be able to produce my documentation from my code"},{"line_number":37,"context_line":"  and ensure it stays up-to-date"}],"source_content_type":"text/x-rst","patch_set":1,"id":"da36d5c6_0488e721","line":34,"in_reply_to":"da36d5c6_4b72037e","updated":"2017-02-20 19:47:47.000000000","message":"Correct - documentation is my main bugbear, but taking a holistic view of the \u0027nova-\u0027 commands provides a number of benefits. Hopefully that\u0027s more accurately reflected now.","commit_id":"fb7c63cb2547bc075e81ee63925dd70ed580dd37"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"c0998708c9e9b52ae89a89f81e5f39885e1ed51a","unresolved":false,"context_lines":[{"line_number":34,"context_line":"  should use them"},{"line_number":35,"context_line":""},{"line_number":36,"context_line":"- As a developer, I want to be able to produce my documentation from my code"},{"line_number":37,"context_line":"  and ensure it stays up-to-date"},{"line_number":38,"context_line":""},{"line_number":39,"context_line":"Proposed change"},{"line_number":40,"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":"da36d5c6_6b6fc792","line":37,"updated":"2017-02-19 20:28:45.000000000","message":"TBH, the documentation thing seems like a rather weak argument for \"rewrite a thing and add a new dependency.\n\nI\u0027m not opposed to this, but doing all the work under the guise of \"generates man pages\" seems kinda silly. Perhaps we could just write this spec as \"rewrite in click so that we can have all the amazingness that click provides, such as...\" and list those things?","commit_id":"fb7c63cb2547bc075e81ee63925dd70ed580dd37"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"8807379d38c0dc1ac41d90ebd3a41adc8ed45ca3","unresolved":false,"context_lines":[{"line_number":34,"context_line":"  should use them"},{"line_number":35,"context_line":""},{"line_number":36,"context_line":"- As a developer, I want to be able to produce my documentation from my code"},{"line_number":37,"context_line":"  and ensure it stays up-to-date"},{"line_number":38,"context_line":""},{"line_number":39,"context_line":"Proposed change"},{"line_number":40,"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":"da36d5c6_6487e30f","line":37,"in_reply_to":"da36d5c6_6b6fc792","updated":"2017-02-20 19:47:47.000000000","message":"See above. Rewriting to use click is maybe secondary to the overall goal of cleaning up the nova- commands","commit_id":"fb7c63cb2547bc075e81ee63925dd70ed580dd37"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"c0998708c9e9b52ae89a89f81e5f39885e1ed51a","unresolved":false,"context_lines":[{"line_number":41,"context_line":""},{"line_number":42,"context_line":"- Rewrite the `nova-` commands to use `click`"},{"line_number":43,"context_line":""},{"line_number":44,"context_line":"- Deprecate some non-standard aliases, such as `nova-manage help`, in favour of"},{"line_number":45,"context_line":"  standard equivalents, like `nova-manage --help`"},{"line_number":46,"context_line":""},{"line_number":47,"context_line":"Alternatives"}],"source_content_type":"text/x-rst","patch_set":1,"id":"da36d5c6_eb09f7de","line":44,"range":{"start_line":44,"start_character":17,"end_line":44,"end_character":29},"updated":"2017-02-19 20:28:45.000000000","message":"Non-standard says who? I know plenty of tools that have \"help\" as a proper subcommand :)","commit_id":"fb7c63cb2547bc075e81ee63925dd70ed580dd37"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"8807379d38c0dc1ac41d90ebd3a41adc8ed45ca3","unresolved":false,"context_lines":[{"line_number":41,"context_line":""},{"line_number":42,"context_line":"- Rewrite the `nova-` commands to use `click`"},{"line_number":43,"context_line":""},{"line_number":44,"context_line":"- Deprecate some non-standard aliases, such as `nova-manage help`, in favour of"},{"line_number":45,"context_line":"  standard equivalents, like `nova-manage --help`"},{"line_number":46,"context_line":""},{"line_number":47,"context_line":"Alternatives"}],"source_content_type":"text/x-rst","patch_set":1,"id":"da36d5c6_f12c77ad","line":44,"range":{"start_line":44,"start_character":17,"end_line":44,"end_character":29},"in_reply_to":"da36d5c6_eb09f7de","updated":"2017-02-20 19:47:47.000000000","message":"Says StackOverflow [1] and GNU [2] :) I think \u0027help\u0027 as a subcommand is a Ruby thing? Silly Ruby.\n\n[1] http://softwareengineering.stackexchange.com/a/307472/106804\n[2] https://www.gnu.org/prep/standards/html_node/Command_002dLine-Interfaces.html","commit_id":"fb7c63cb2547bc075e81ee63925dd70ed580dd37"},{"author":{"_account_id":11564,"name":"Chris Dent","email":"cdent@anticdent.org","username":"chdent"},"change_message_id":"bb6070c3cbfccd5c1eb1cf1d42dca2c102a99eb3","unresolved":false,"context_lines":[{"line_number":54,"context_line":"  of `click`. This would avoid having to add a new dependency, but these"},{"line_number":55,"context_line":"  libraries are lacking in either community support (`click` is extensible and"},{"line_number":56,"context_line":"  has a lot of community extensions published [5]_) and/or features that we"},{"line_number":57,"context_line":"  want, such as automated manpage generation."},{"line_number":58,"context_line":""},{"line_number":59,"context_line":"- Extend the existing code to add new features. This would appear to be case of"},{"line_number":60,"context_line":"  reinventing the wheel and would keep the burden of maintenance within the"}],"source_content_type":"text/x-rst","patch_set":1,"id":"fa31d9ce_e68e5e26","line":57,"updated":"2017-02-17 16:07:09.000000000","message":"I think click is a fine choice, but it would be handy to have a bit more info on why it instead of cliff.","commit_id":"fb7c63cb2547bc075e81ee63925dd70ed580dd37"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"8807379d38c0dc1ac41d90ebd3a41adc8ed45ca3","unresolved":false,"context_lines":[{"line_number":54,"context_line":"  of `click`. This would avoid having to add a new dependency, but these"},{"line_number":55,"context_line":"  libraries are lacking in either community support (`click` is extensible and"},{"line_number":56,"context_line":"  has a lot of community extensions published [5]_) and/or features that we"},{"line_number":57,"context_line":"  want, such as automated manpage generation."},{"line_number":58,"context_line":""},{"line_number":59,"context_line":"- Extend the existing code to add new features. This would appear to be case of"},{"line_number":60,"context_line":"  reinventing the wheel and would keep the burden of maintenance within the"}],"source_content_type":"text/x-rst","patch_set":1,"id":"da36d5c6_b382fefe","line":57,"in_reply_to":"da36d5c6_6bf6e7d8","updated":"2017-02-20 19:47:47.000000000","message":"cliff has a couple of bugs that would limit our ability to implement a like-for-like replacement of the existing CLI. These bugs are basically unfixable without a significant rework of cliff. I\u0027ve described these in v2. Why cliff was written instead of using click is a discussion for another day (NIH syndrome?)\n\nFWIW, there are other big-tent projects using click at the moment (gluon, solar, fuel, ...), so perhaps it could be future g-r addition?","commit_id":"fb7c63cb2547bc075e81ee63925dd70ed580dd37"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"c0998708c9e9b52ae89a89f81e5f39885e1ed51a","unresolved":false,"context_lines":[{"line_number":54,"context_line":"  of `click`. This would avoid having to add a new dependency, but these"},{"line_number":55,"context_line":"  libraries are lacking in either community support (`click` is extensible and"},{"line_number":56,"context_line":"  has a lot of community extensions published [5]_) and/or features that we"},{"line_number":57,"context_line":"  want, such as automated manpage generation."},{"line_number":58,"context_line":""},{"line_number":59,"context_line":"- Extend the existing code to add new features. This would appear to be case of"},{"line_number":60,"context_line":"  reinventing the wheel and would keep the burden of maintenance within the"}],"source_content_type":"text/x-rst","patch_set":1,"id":"da36d5c6_6bf6e7d8","line":57,"in_reply_to":"fa31d9ce_e68e5e26","updated":"2017-02-19 20:28:45.000000000","message":"Yeah, TBH, if we already have something in g-r that does what you want, I\u0027d say the justification for adding another needs to be fairly good. People that deploy cinder and nova and neutron on a single machine have to deploy three libraries that do the same thing is kinda silly (just an example, I dunno if the others have these requirements currently).","commit_id":"fb7c63cb2547bc075e81ee63925dd70ed580dd37"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"c0998708c9e9b52ae89a89f81e5f39885e1ed51a","unresolved":false,"context_lines":[{"line_number":61,"context_line":"  nova project itself, rather than allowing us to offload to another project."},{"line_number":62,"context_line":""},{"line_number":63,"context_line":"- Do nothing and continue to maintain documentation separately from code and"},{"line_number":64,"context_line":"  to maintain the custom CLI library ourselves."},{"line_number":65,"context_line":""},{"line_number":66,"context_line":"Data model impact"},{"line_number":67,"context_line":"-----------------"}],"source_content_type":"text/x-rst","patch_set":1,"id":"da36d5c6_ab00dfab","line":64,"updated":"2017-02-19 20:28:45.000000000","message":"FWIW, we had a rash of new nova-manage commands come in with the cells stuff, but I think we have gone many cycles in the past without adding or changing any. So while I\u0027d never argue with the premise of \"re-use before re-create\", I\u0027m not sure I agree with the implied extra amount of work that maintaining what we have brings in this case.","commit_id":"fb7c63cb2547bc075e81ee63925dd70ed580dd37"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"8807379d38c0dc1ac41d90ebd3a41adc8ed45ca3","unresolved":false,"context_lines":[{"line_number":61,"context_line":"  nova project itself, rather than allowing us to offload to another project."},{"line_number":62,"context_line":""},{"line_number":63,"context_line":"- Do nothing and continue to maintain documentation separately from code and"},{"line_number":64,"context_line":"  to maintain the custom CLI library ourselves."},{"line_number":65,"context_line":""},{"line_number":66,"context_line":"Data model impact"},{"line_number":67,"context_line":"-----------------"}],"source_content_type":"text/x-rst","patch_set":1,"id":"da36d5c6_732c064b","line":64,"in_reply_to":"da36d5c6_ab00dfab","updated":"2017-02-20 19:47:47.000000000","message":"I\u0027m thinking more in the long term through minimization of tech debt. The cells stuff is the first addition in a while but I doubt it\u0027s the last time we\u0027ll mess with \u0027nova-manage\u0027. Hopefully this is clearer now.","commit_id":"fb7c63cb2547bc075e81ee63925dd70ed580dd37"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"c0998708c9e9b52ae89a89f81e5f39885e1ed51a","unresolved":false,"context_lines":[{"line_number":103,"context_line":""},{"line_number":104,"context_line":"- Deployment tools that make use of the `nova-` commands should update these"},{"line_number":105,"context_line":"  commands to remove references to any deprecated subcommands like `nova manage"},{"line_number":106,"context_line":"  help`"},{"line_number":107,"context_line":""},{"line_number":108,"context_line":"Developer impact"},{"line_number":109,"context_line":"----------------"}],"source_content_type":"text/x-rst","patch_set":1,"id":"da36d5c6_0b264b68","line":106,"updated":"2017-02-19 20:28:45.000000000","message":"This is a substantial ask and again needs to be justified I think. What user-visible changes do you think will come out of this work?","commit_id":"fb7c63cb2547bc075e81ee63925dd70ed580dd37"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"8807379d38c0dc1ac41d90ebd3a41adc8ed45ca3","unresolved":false,"context_lines":[{"line_number":103,"context_line":""},{"line_number":104,"context_line":"- Deployment tools that make use of the `nova-` commands should update these"},{"line_number":105,"context_line":"  commands to remove references to any deprecated subcommands like `nova manage"},{"line_number":106,"context_line":"  help`"},{"line_number":107,"context_line":""},{"line_number":108,"context_line":"Developer impact"},{"line_number":109,"context_line":"----------------"}],"source_content_type":"text/x-rst","patch_set":1,"id":"da36d5c6_3321aefc","line":106,"in_reply_to":"da36d5c6_0b264b68","updated":"2017-02-20 19:47:47.000000000","message":"Done","commit_id":"fb7c63cb2547bc075e81ee63925dd70ed580dd37"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"c0998708c9e9b52ae89a89f81e5f39885e1ed51a","unresolved":false,"context_lines":[{"line_number":129,"context_line":"Switching the commands to use click would be a three stage process:"},{"line_number":130,"context_line":""},{"line_number":131,"context_line":"1. Move command operations into their own functions, allowing us to somewhat"},{"line_number":132,"context_line":"   separate content from presentation"},{"line_number":133,"context_line":""},{"line_number":134,"context_line":"2. Develop new versions of the CLI using click and different namespaces, e.g."},{"line_number":135,"context_line":"   `nova-manage2`"}],"source_content_type":"text/x-rst","patch_set":1,"id":"da36d5c6_cb2b5332","line":132,"updated":"2017-02-19 20:28:45.000000000","message":"The existing functions we have are callable outside of the CLI such as from our unit tests. Couldn\u0027t we build the new presentation layer on top of these to avoid the arguably gross steps two and three below? Later, just removing the old infrastructure around the existing functions would turn them into the generic/centralized versions.","commit_id":"fb7c63cb2547bc075e81ee63925dd70ed580dd37"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"8807379d38c0dc1ac41d90ebd3a41adc8ed45ca3","unresolved":false,"context_lines":[{"line_number":129,"context_line":"Switching the commands to use click would be a three stage process:"},{"line_number":130,"context_line":""},{"line_number":131,"context_line":"1. Move command operations into their own functions, allowing us to somewhat"},{"line_number":132,"context_line":"   separate content from presentation"},{"line_number":133,"context_line":""},{"line_number":134,"context_line":"2. Develop new versions of the CLI using click and different namespaces, e.g."},{"line_number":135,"context_line":"   `nova-manage2`"}],"source_content_type":"text/x-rst","patch_set":1,"id":"da36d5c6_3359ae5b","line":132,"in_reply_to":"da36d5c6_cb2b5332","updated":"2017-02-20 19:47:47.000000000","message":"I wanted to do this this way to avoid having to migrate the entire nova-manage command in one huge change while still being able to test it manually. However, we can use unit tests to do this testing for us making this unnecessary. I\u0027ve clarified the wording to reflect this (I hope)","commit_id":"fb7c63cb2547bc075e81ee63925dd70ed580dd37"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"c0998708c9e9b52ae89a89f81e5f39885e1ed51a","unresolved":false,"context_lines":[{"line_number":148,"context_line":""},{"line_number":149,"context_line":"Existing tests for the commands will be ported to use click. This should be"},{"line_number":150,"context_line":"easier to do as the operation of the command will now be separated from their"},{"line_number":151,"context_line":"presentation."},{"line_number":152,"context_line":""},{"line_number":153,"context_line":"Documentation Impact"},{"line_number":154,"context_line":"\u003d\u003d\u003d\u003d\u003d\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":"da36d5c6_eb3017a1","line":151,"updated":"2017-02-19 20:28:45.000000000","message":"I\u0027m not sure I get what gain click brings here. We currently test these commands without much impact from their presentation, unless I\u0027m misunderstanding what you\u0027re saying here.","commit_id":"fb7c63cb2547bc075e81ee63925dd70ed580dd37"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"8807379d38c0dc1ac41d90ebd3a41adc8ed45ca3","unresolved":false,"context_lines":[{"line_number":148,"context_line":""},{"line_number":149,"context_line":"Existing tests for the commands will be ported to use click. This should be"},{"line_number":150,"context_line":"easier to do as the operation of the command will now be separated from their"},{"line_number":151,"context_line":"presentation."},{"line_number":152,"context_line":""},{"line_number":153,"context_line":"Documentation Impact"},{"line_number":154,"context_line":"\u003d\u003d\u003d\u003d\u003d\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":"da36d5c6_b6202c9d","line":151,"in_reply_to":"da36d5c6_eb3017a1","updated":"2017-02-20 19:47:47.000000000","message":"I was thinking more that we could test the presentation itself, which we don\u0027t appear to do right now (do certain incompatible flags get rejected). In hindsight, the value of this is probably low so I\u0027ve removed this.","commit_id":"fb7c63cb2547bc075e81ee63925dd70ed580dd37"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"23ab0714af89829a4a58e1c4fe295728be9510c0","unresolved":false,"context_lines":[{"line_number":33,"context_line":"- Tools vary in scope and purpose"},{"line_number":34,"context_line":""},{"line_number":35,"context_line":"  nova-manage is able to configure various DB properties, configure"},{"line_number":36,"context_line":"  nova-network support, do something called \"agent building\" (?). By"},{"line_number":37,"context_line":"  comparison, the nova-policy and nova-status tools, for example, do exactly"},{"line_number":38,"context_line":"  one thing each: allows you to configure policy and check the upgrade status"},{"line_number":39,"context_line":"  of an entire nova deployment, respectively. Compare this to the single,"}],"source_content_type":"text/x-rst","patch_set":2,"id":"da36d5c6_b885d2cf","line":36,"range":{"start_line":36,"start_character":24,"end_line":36,"end_character":65},"updated":"2017-02-24 20:34:54.000000000","message":"We\u0027ve slowly dropped some garbage out of nova-manage when it no longer makes sense to have it, like if it exists in the REST API and doesn\u0027t rely on direct access to the database (like before nova-api is running). I think agent builds probably falls into this category so we could just remove those commands (ask John Garbutt first about that one).","commit_id":"847a03d98c2db2f35c6d52af3ad7cce83318cc21"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"952e253f6ec230c2bf0ad61b994228a3fd6b0707","unresolved":false,"context_lines":[{"line_number":33,"context_line":"- Tools vary in scope and purpose"},{"line_number":34,"context_line":""},{"line_number":35,"context_line":"  nova-manage is able to configure various DB properties, configure"},{"line_number":36,"context_line":"  nova-network support, do something called \"agent building\" (?). By"},{"line_number":37,"context_line":"  comparison, the nova-policy and nova-status tools, for example, do exactly"},{"line_number":38,"context_line":"  one thing each: allows you to configure policy and check the upgrade status"},{"line_number":39,"context_line":"  of an entire nova deployment, respectively. Compare this to the single,"}],"source_content_type":"text/x-rst","patch_set":2,"id":"da36d5c6_a1a64951","line":36,"range":{"start_line":36,"start_character":24,"end_line":36,"end_character":65},"in_reply_to":"da36d5c6_b885d2cf","updated":"2017-02-27 18:17:19.000000000","message":"Sounds good. Will do","commit_id":"847a03d98c2db2f35c6d52af3ad7cce83318cc21"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"23ab0714af89829a4a58e1c4fe295728be9510c0","unresolved":false,"context_lines":[{"line_number":78,"context_line":"- Deprecate some non-standard aliases, such as `nova-manage help`, in favour of"},{"line_number":79,"context_line":"  standard equivalents, like `nova-manage --help`"},{"line_number":80,"context_line":""},{"line_number":81,"context_line":"- Unify the various, non-service executables like `nova-status` and"},{"line_number":82,"context_line":"  `nova-policy` under the `nova-manage` tent, providing aliases for some"},{"line_number":83,"context_line":"  as-yet-to-be-determined period of time"},{"line_number":84,"context_line":""},{"line_number":85,"context_line":"Alternatives"}],"source_content_type":"text/x-rst","patch_set":2,"id":"da36d5c6_b85cf27d","line":82,"range":{"start_line":81,"start_character":2,"end_line":82,"end_character":44},"updated":"2017-02-24 20:34:54.000000000","message":"When we wrote nova-status there was fairly long discussion between several cores about whether or not nova-status upgrade check should live in nova-manage, and we agreed that we didn\u0027t want to keep adding more new commands to the glut that is nova-manage, which is why it was written as a separate thing, I don\u0027t think we want to lump it back in.","commit_id":"847a03d98c2db2f35c6d52af3ad7cce83318cc21"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"952e253f6ec230c2bf0ad61b994228a3fd6b0707","unresolved":false,"context_lines":[{"line_number":78,"context_line":"- Deprecate some non-standard aliases, such as `nova-manage help`, in favour of"},{"line_number":79,"context_line":"  standard equivalents, like `nova-manage --help`"},{"line_number":80,"context_line":""},{"line_number":81,"context_line":"- Unify the various, non-service executables like `nova-status` and"},{"line_number":82,"context_line":"  `nova-policy` under the `nova-manage` tent, providing aliases for some"},{"line_number":83,"context_line":"  as-yet-to-be-determined period of time"},{"line_number":84,"context_line":""},{"line_number":85,"context_line":"Alternatives"}],"source_content_type":"text/x-rst","patch_set":2,"id":"da36d5c6_c12fbda5","line":82,"range":{"start_line":81,"start_character":2,"end_line":82,"end_character":44},"in_reply_to":"da36d5c6_b85cf27d","updated":"2017-02-27 18:17:19.000000000","message":"Hmm, so I wonder if this is something we could re-evaluate given things will have changed (for one, we\u0027ll be able to put all commands into their own file, if necessary)","commit_id":"847a03d98c2db2f35c6d52af3ad7cce83318cc21"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"952e253f6ec230c2bf0ad61b994228a3fd6b0707","unresolved":false,"context_lines":[{"line_number":91,"context_line":"  requirements, or `argparse`, which is part of the standard library, in place"},{"line_number":92,"context_line":"  of `click`. These libraries are lacking in a few key areas:"},{"line_number":93,"context_line":""},{"line_number":94,"context_line":"  - `cliff` doesn\u0027t handle nested subcommands properly and assumes too much."},{"line_number":95,"context_line":"    For example, the ``api_db sync`` command takes a ``--version`` parameter,"},{"line_number":96,"context_line":"    but it is not possible to override the ``--version`` parameter using"},{"line_number":97,"context_line":"    `click` [6]_.  Similarly, `cliff` replaces underscores in command names"},{"line_number":98,"context_line":"    with spaces, meaning it\u0027s not possible to define an ``api_db`` command (you"},{"line_number":99,"context_line":"    will need to use ``api db``). These are inherent flaws in the design of"},{"line_number":100,"context_line":"    `cliff` that would not be fixable without a major rewrite. We would need to"},{"line_number":101,"context_line":"    change the CLI and could not provide aliases to work around these issues."},{"line_number":102,"context_line":""},{"line_number":103,"context_line":"  - `argparse` is too low level, hence the availability of libraries like"},{"line_number":104,"context_line":"    `cliff` and `click`. We actually use `argparse` under the hood now and have"}],"source_content_type":"text/x-rst","patch_set":2,"id":"da36d5c6_bcfd900a","line":101,"range":{"start_line":94,"start_character":0,"end_line":101,"end_character":77},"updated":"2017-02-27 18:17:19.000000000","message":"This is a big deal. IMO, cliffs argument parsing is broken and we shouldn\u0027t be using it. I also don\u0027t see why I would go fix it when more mature alternatives exist. I doubt I could get openstackclient to switch now (they have bigger fish to fry and have presumably worked around these limitations) but that doesn\u0027t mean we should repeat the same mistakes :)","commit_id":"847a03d98c2db2f35c6d52af3ad7cce83318cc21"}],"specs/pike/approved/move-nova-cmds-to-cliff.rst":[{"author":{"_account_id":8864,"name":"Artom Lifshitz","email":"notartom@gmail.com","username":"artom"},"change_message_id":"30fdf1982094183666395fac26aabeed970d1027","unresolved":false,"context_lines":[{"line_number":143,"context_line":""},{"line_number":144,"context_line":"- Some slight changes in the commands will occur, such as a `nova-manage api_db"},{"line_number":145,"context_line":"  --version` being replaced by `nova-manage api_db [VERSION]`. It will not be"},{"line_number":146,"context_line":"  possible to provide aliases for these due to design decisions made in the"},{"line_number":147,"context_line":"  underlying `cliff` library"},{"line_number":148,"context_line":""},{"line_number":149,"context_line":"Performance Impact"}],"source_content_type":"text/x-rst","patch_set":3,"id":"dfeb2761_ce43e212","line":146,"updated":"2017-04-04 16:26:05.000000000","message":"You\u0027re saying we\u0027re going to lose backwards compatibility? I don\u0027t know cliff, but I can understand that it doesn\u0027t allow us to set up backwards-compatible aliases, but I think we need to find a way to not break existing tooling that\u0027s in the wild, even if that means keeping the existing nova-* tools as is and redirecting them to a new nova-admin (for example) command that then does all the real work.","commit_id":"bdda0d569512a682085db52db080871d22b5cc6f"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"3abf99a213b1d63c8f921b33fa51c0fbccdafc1e","unresolved":false,"context_lines":[{"line_number":143,"context_line":""},{"line_number":144,"context_line":"- Some slight changes in the commands will occur, such as a `nova-manage api_db"},{"line_number":145,"context_line":"  --version` being replaced by `nova-manage api_db [VERSION]`. It will not be"},{"line_number":146,"context_line":"  possible to provide aliases for these due to design decisions made in the"},{"line_number":147,"context_line":"  underlying `cliff` library"},{"line_number":148,"context_line":""},{"line_number":149,"context_line":"Performance Impact"}],"source_content_type":"text/x-rst","patch_set":3,"id":"bff0334d_fd514064","line":146,"in_reply_to":"dfeb2761_ce43e212","updated":"2017-04-05 16:21:00.000000000","message":"Correct. I\u0027m going to add aliases during this cycle and warn if users use the older versions. This will allow us to remove the aliases in the next version.","commit_id":"bdda0d569512a682085db52db080871d22b5cc6f"}],"specs/queens/approved/move-nova-cmds-to-cliff.rst":[{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"7ff47b2020cd527567a4f5401d97eba56586272b","unresolved":false,"context_lines":[{"line_number":8,"context_line":"Move nova-* commands to cliff"},{"line_number":9,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"},{"line_number":10,"context_line":""},{"line_number":11,"context_line":"https://blueprints.launchpad.net/nova/+spec/cliff-integration"},{"line_number":12,"context_line":""},{"line_number":13,"context_line":"The custom CLI library nova uses for nova-manage and other tools doesn\u0027t do"},{"line_number":14,"context_line":"enough for us. Let\u0027s build upon the shoulders of giants and use an existing,"}],"source_content_type":"text/x-rst","patch_set":5,"id":"7f515b1d_6c77cf0a","line":11,"range":{"start_line":11,"start_character":44,"end_line":11,"end_character":61},"updated":"2017-10-03 14:38:43.000000000","message":"wrong link","commit_id":"118285cc6fbe2404a8462289b0a361e5d3a3dd86"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"d445d0a1b9741535b9d0b227d3b80c80150257d3","unresolved":false,"context_lines":[{"line_number":8,"context_line":"Move nova-* commands to cliff"},{"line_number":9,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"},{"line_number":10,"context_line":""},{"line_number":11,"context_line":"https://blueprints.launchpad.net/nova/+spec/cliff-integration"},{"line_number":12,"context_line":""},{"line_number":13,"context_line":"The custom CLI library nova uses for nova-manage and other tools doesn\u0027t do"},{"line_number":14,"context_line":"enough for us. Let\u0027s build upon the shoulders of giants and use an existing,"}],"source_content_type":"text/x-rst","patch_set":5,"id":"7f515b1d_5a63a5b2","line":11,"range":{"start_line":11,"start_character":44,"end_line":11,"end_character":61},"in_reply_to":"7f515b1d_6c77cf0a","updated":"2017-10-03 16:20:19.000000000","message":"Done","commit_id":"118285cc6fbe2404a8462289b0a361e5d3a3dd86"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"7ff47b2020cd527567a4f5401d97eba56586272b","unresolved":false,"context_lines":[{"line_number":41,"context_line":""},{"line_number":42,"context_line":"- Things are not consistently scriptable"},{"line_number":43,"context_line":""},{"line_number":44,"context_line":"  While some commands support return codes, what these return aren\u0027t"},{"line_number":45,"context_line":"  consistently defined."},{"line_number":46,"context_line":""},{"line_number":47,"context_line":"- Implementing the commands themselves are crufty"}],"source_content_type":"text/x-rst","patch_set":5,"id":"7f515b1d_6c60ef36","line":44,"range":{"start_line":44,"start_character":62,"end_line":44,"end_character":68},"updated":"2017-10-03 14:38:43.000000000","message":"what these return codes are isn\u0027t consistently defined?","commit_id":"118285cc6fbe2404a8462289b0a361e5d3a3dd86"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"d445d0a1b9741535b9d0b227d3b80c80150257d3","unresolved":false,"context_lines":[{"line_number":41,"context_line":""},{"line_number":42,"context_line":"- Things are not consistently scriptable"},{"line_number":43,"context_line":""},{"line_number":44,"context_line":"  While some commands support return codes, what these return aren\u0027t"},{"line_number":45,"context_line":"  consistently defined."},{"line_number":46,"context_line":""},{"line_number":47,"context_line":"- Implementing the commands themselves are crufty"}],"source_content_type":"text/x-rst","patch_set":5,"id":"7f515b1d_ba6bb983","line":44,"range":{"start_line":44,"start_character":62,"end_line":44,"end_character":68},"in_reply_to":"7f515b1d_6c60ef36","updated":"2017-10-03 16:20:19.000000000","message":"Maybe I don\u0027t have this worded correctly: I mean we can\u0027t produce something like the \u0027RETURN VALUE\u0027 in [1]. This is definitely one of the weaker points tho\n\n[1] http://man7.org/linux/man-pages/man1/tar.1.html","commit_id":"118285cc6fbe2404a8462289b0a361e5d3a3dd86"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"8d2e83b1162d67201d7ea3cb60a253c5c47e63a9","unresolved":false,"context_lines":[{"line_number":47,"context_line":"- Implementing the commands themselves are crufty"},{"line_number":48,"context_line":""},{"line_number":49,"context_line":"  There\u0027s no clearly defined approach to deprecating commands. Nesting of"},{"line_number":50,"context_line":"  subcommands are not supported. Why are some errors logged to stdout, while"},{"line_number":51,"context_line":"  others log to stderr? Should I log or print? How can I output longer output"},{"line_number":52,"context_line":"  via a pager?"},{"line_number":53,"context_line":""}],"source_content_type":"text/x-rst","patch_set":5,"id":"7f515b1d_8c020b0b","line":50,"range":{"start_line":50,"start_character":14,"end_line":50,"end_character":17},"updated":"2017-10-03 14:50:12.000000000","message":"Nesting ... is not supported?","commit_id":"118285cc6fbe2404a8462289b0a361e5d3a3dd86"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"d445d0a1b9741535b9d0b227d3b80c80150257d3","unresolved":false,"context_lines":[{"line_number":47,"context_line":"- Implementing the commands themselves are crufty"},{"line_number":48,"context_line":""},{"line_number":49,"context_line":"  There\u0027s no clearly defined approach to deprecating commands. Nesting of"},{"line_number":50,"context_line":"  subcommands are not supported. Why are some errors logged to stdout, while"},{"line_number":51,"context_line":"  others log to stderr? Should I log or print? How can I output longer output"},{"line_number":52,"context_line":"  via a pager?"},{"line_number":53,"context_line":""}],"source_content_type":"text/x-rst","patch_set":5,"id":"7f515b1d_7a0301c0","line":50,"range":{"start_line":50,"start_character":14,"end_line":50,"end_character":17},"in_reply_to":"7f515b1d_8c020b0b","updated":"2017-10-03 16:20:19.000000000","message":"Done","commit_id":"118285cc6fbe2404a8462289b0a361e5d3a3dd86"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"7ff47b2020cd527567a4f5401d97eba56586272b","unresolved":false,"context_lines":[{"line_number":51,"context_line":"  others log to stderr? Should I log or print? How can I output longer output"},{"line_number":52,"context_line":"  via a pager?"},{"line_number":53,"context_line":""},{"line_number":54,"context_line":"- nova is a compute controller, not a CLI library"},{"line_number":55,"context_line":""},{"line_number":56,"context_line":"  For what it\u0027s worth, the CLI code is fairly extensive and has to be"},{"line_number":57,"context_line":"  maintained. We\u0027re not doing anything so special that we need to keep our own"},{"line_number":58,"context_line":"  CLI library in-tree."},{"line_number":59,"context_line":""},{"line_number":60,"context_line":"Use Cases"},{"line_number":61,"context_line":"---------"}],"source_content_type":"text/x-rst","patch_set":5,"id":"7f515b1d_cc500362","line":58,"range":{"start_line":54,"start_character":2,"end_line":58,"end_character":22},"updated":"2017-10-03 14:38:43.000000000","message":"What does this have to do with migrating the code to use cliff? Are you proposing that we split nova-manage out of nova and into it\u0027s own library? It\u0027s in-tree because of direct db access.","commit_id":"118285cc6fbe2404a8462289b0a361e5d3a3dd86"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"d445d0a1b9741535b9d0b227d3b80c80150257d3","unresolved":false,"context_lines":[{"line_number":51,"context_line":"  others log to stderr? Should I log or print? How can I output longer output"},{"line_number":52,"context_line":"  via a pager?"},{"line_number":53,"context_line":""},{"line_number":54,"context_line":"- nova is a compute controller, not a CLI library"},{"line_number":55,"context_line":""},{"line_number":56,"context_line":"  For what it\u0027s worth, the CLI code is fairly extensive and has to be"},{"line_number":57,"context_line":"  maintained. We\u0027re not doing anything so special that we need to keep our own"},{"line_number":58,"context_line":"  CLI library in-tree."},{"line_number":59,"context_line":""},{"line_number":60,"context_line":"Use Cases"},{"line_number":61,"context_line":"---------"}],"source_content_type":"text/x-rst","patch_set":5,"id":"7f515b1d_7ad1c12f","line":58,"range":{"start_line":54,"start_character":2,"end_line":58,"end_character":22},"in_reply_to":"7f515b1d_af1a596c","updated":"2017-10-03 16:20:19.000000000","message":"\u003e It\u0027s so obvious it looks out of place (and could be removed, IMHO).\n\nI\u0027m not sure if you\u0027re referring to this point or the code, so I\u0027ve replaced with your explanation to handle both cases","commit_id":"118285cc6fbe2404a8462289b0a361e5d3a3dd86"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"8d2e83b1162d67201d7ea3cb60a253c5c47e63a9","unresolved":false,"context_lines":[{"line_number":51,"context_line":"  others log to stderr? Should I log or print? How can I output longer output"},{"line_number":52,"context_line":"  via a pager?"},{"line_number":53,"context_line":""},{"line_number":54,"context_line":"- nova is a compute controller, not a CLI library"},{"line_number":55,"context_line":""},{"line_number":56,"context_line":"  For what it\u0027s worth, the CLI code is fairly extensive and has to be"},{"line_number":57,"context_line":"  maintained. We\u0027re not doing anything so special that we need to keep our own"},{"line_number":58,"context_line":"  CLI library in-tree."},{"line_number":59,"context_line":""},{"line_number":60,"context_line":"Use Cases"},{"line_number":61,"context_line":"---------"}],"source_content_type":"text/x-rst","patch_set":5,"id":"7f515b1d_af1a596c","line":58,"range":{"start_line":54,"start_character":2,"end_line":58,"end_character":22},"in_reply_to":"7f515b1d_cc500362","updated":"2017-10-03 14:50:12.000000000","message":"I think he means rolling our own CLI routines is not our primary business, we\u0027re not innovating on CLI awesomeness, so we should just use a pre-made library. It\u0027s so obvious it looks out of place (and could be removed, IMHO).","commit_id":"118285cc6fbe2404a8462289b0a361e5d3a3dd86"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"7ff47b2020cd527567a4f5401d97eba56586272b","unresolved":false,"context_lines":[{"line_number":85,"context_line":""},{"line_number":86,"context_line":"- Use a different library such as `click` [5]_, which is mature and widely"},{"line_number":87,"context_line":"  used, `docopt`, which is plain cool, or `argparse`, which is part of the"},{"line_number":88,"context_line":"  standard library, in place of `cliff`. There are a few issues with this these"},{"line_number":89,"context_line":"  libraries:"},{"line_number":90,"context_line":""},{"line_number":91,"context_line":"  - `click` isn\u0027t included in the global requirements, and most other OpenStack"}],"source_content_type":"text/x-rst","patch_set":5,"id":"7f515b1d_2ccf972a","line":88,"range":{"start_line":88,"start_character":69,"end_line":88,"end_character":79},"updated":"2017-10-03 14:38:43.000000000","message":"typo","commit_id":"118285cc6fbe2404a8462289b0a361e5d3a3dd86"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"d445d0a1b9741535b9d0b227d3b80c80150257d3","unresolved":false,"context_lines":[{"line_number":85,"context_line":""},{"line_number":86,"context_line":"- Use a different library such as `click` [5]_, which is mature and widely"},{"line_number":87,"context_line":"  used, `docopt`, which is plain cool, or `argparse`, which is part of the"},{"line_number":88,"context_line":"  standard library, in place of `cliff`. There are a few issues with this these"},{"line_number":89,"context_line":"  libraries:"},{"line_number":90,"context_line":""},{"line_number":91,"context_line":"  - `click` isn\u0027t included in the global requirements, and most other OpenStack"}],"source_content_type":"text/x-rst","patch_set":5,"id":"7f515b1d_1ae08dfa","line":88,"range":{"start_line":88,"start_character":69,"end_line":88,"end_character":79},"in_reply_to":"7f515b1d_2ccf972a","updated":"2017-10-03 16:20:19.000000000","message":"Done","commit_id":"118285cc6fbe2404a8462289b0a361e5d3a3dd86"},{"author":{"_account_id":11303,"name":"Markus Zoeller (markus_z)","email":"mzoeller@linux.vnet.ibm.com","username":"mzoeller"},"change_message_id":"81d2f1f5fd8c7635a23a4d24256d10403c07caab","unresolved":false,"context_lines":[{"line_number":88,"context_line":"  standard library, in place of `cliff`. There are a few issues with this these"},{"line_number":89,"context_line":"  libraries:"},{"line_number":90,"context_line":""},{"line_number":91,"context_line":"  - `click` isn\u0027t included in the global requirements, and most other OpenStack"},{"line_number":92,"context_line":"    projects (think: `python-*client` variants) use `cliff`."},{"line_number":93,"context_line":""},{"line_number":94,"context_line":"  - `argparse` is too low level, hence the availability of libraries like"}],"source_content_type":"text/x-rst","patch_set":5,"id":"5f2577a7_abfbd876","line":91,"updated":"2017-09-14 20:50:55.000000000","message":"I made good experiences with \"click\", but \"cliff\" looks good as well. IMO, there is no strong argument to use click if the other projects already use cliff.","commit_id":"118285cc6fbe2404a8462289b0a361e5d3a3dd86"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"7ff47b2020cd527567a4f5401d97eba56586272b","unresolved":false,"context_lines":[{"line_number":97,"context_line":""},{"line_number":98,"context_line":"  - `docopt` doesn\u0027t scale [6]_."},{"line_number":99,"context_line":""},{"line_number":100,"context_line":"- Extend the existing code to add new features. This would appear to be case of"},{"line_number":101,"context_line":"  reinventing the wheel and would keep the burden of maintenance within the"},{"line_number":102,"context_line":"  nova project itself, rather than allowing us to offload to another project."},{"line_number":103,"context_line":"  We should focus on what we\u0027re good at and offload the rest."},{"line_number":104,"context_line":""},{"line_number":105,"context_line":"- Do nothing, assuming the tools are good enough as is. Perhaps hack together"},{"line_number":106,"context_line":"  some patches to ensure consistent output and return codes [7]_, add"}],"source_content_type":"text/x-rst","patch_set":5,"id":"7f515b1d_6ceeaf8c","line":103,"range":{"start_line":100,"start_character":2,"end_line":103,"end_character":61},"updated":"2017-10-03 14:38:43.000000000","message":"When I first read this, I read it as moving the nova-* commands outside of nova, but now I get that you\u0027re just talking about the CLI framework.","commit_id":"118285cc6fbe2404a8462289b0a361e5d3a3dd86"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"d445d0a1b9741535b9d0b227d3b80c80150257d3","unresolved":false,"context_lines":[{"line_number":97,"context_line":""},{"line_number":98,"context_line":"  - `docopt` doesn\u0027t scale [6]_."},{"line_number":99,"context_line":""},{"line_number":100,"context_line":"- Extend the existing code to add new features. This would appear to be case of"},{"line_number":101,"context_line":"  reinventing the wheel and would keep the burden of maintenance within the"},{"line_number":102,"context_line":"  nova project itself, rather than allowing us to offload to another project."},{"line_number":103,"context_line":"  We should focus on what we\u0027re good at and offload the rest."},{"line_number":104,"context_line":""},{"line_number":105,"context_line":"- Do nothing, assuming the tools are good enough as is. Perhaps hack together"},{"line_number":106,"context_line":"  some patches to ensure consistent output and return codes [7]_, add"}],"source_content_type":"text/x-rst","patch_set":5,"id":"7f515b1d_dae1d5fe","line":103,"range":{"start_line":100,"start_character":2,"end_line":103,"end_character":61},"in_reply_to":"7f515b1d_6ceeaf8c","updated":"2017-10-03 16:20:19.000000000","message":"I kept this as-is because I didn\u0027t know how else to word it. Open to suggestions here.","commit_id":"118285cc6fbe2404a8462289b0a361e5d3a3dd86"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"7ff47b2020cd527567a4f5401d97eba56586272b","unresolved":false,"context_lines":[{"line_number":137,"context_line":""},{"line_number":138,"context_line":"- Some slight changes in the commands will occur, such as a `nova-manage api_db"},{"line_number":139,"context_line":"  --version` being replaced by `nova-manage api_db [VERSION]`. While aliases"},{"line_number":140,"context_line":"  were provided in the last cycle, it will not be possible possible to continue"},{"line_number":141,"context_line":"  providing these due to design decisions made in the underlying `cliff`"},{"line_number":142,"context_line":"  library"},{"line_number":143,"context_line":""}],"source_content_type":"text/x-rst","patch_set":5,"id":"7f515b1d_4c98931a","line":140,"range":{"start_line":140,"start_character":50,"end_line":140,"end_character":67},"updated":"2017-10-03 14:38:43.000000000","message":"typo","commit_id":"118285cc6fbe2404a8462289b0a361e5d3a3dd86"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"d445d0a1b9741535b9d0b227d3b80c80150257d3","unresolved":false,"context_lines":[{"line_number":137,"context_line":""},{"line_number":138,"context_line":"- Some slight changes in the commands will occur, such as a `nova-manage api_db"},{"line_number":139,"context_line":"  --version` being replaced by `nova-manage api_db [VERSION]`. While aliases"},{"line_number":140,"context_line":"  were provided in the last cycle, it will not be possible possible to continue"},{"line_number":141,"context_line":"  providing these due to design decisions made in the underlying `cliff`"},{"line_number":142,"context_line":"  library"},{"line_number":143,"context_line":""}],"source_content_type":"text/x-rst","patch_set":5,"id":"7f515b1d_faced159","line":140,"range":{"start_line":140,"start_character":50,"end_line":140,"end_character":67},"in_reply_to":"7f515b1d_4c98931a","updated":"2017-10-03 16:20:19.000000000","message":"Done","commit_id":"118285cc6fbe2404a8462289b0a361e5d3a3dd86"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"8d2e83b1162d67201d7ea3cb60a253c5c47e63a9","unresolved":false,"context_lines":[{"line_number":140,"context_line":"  were provided in the last cycle, it will not be possible possible to continue"},{"line_number":141,"context_line":"  providing these due to design decisions made in the underlying `cliff`"},{"line_number":142,"context_line":"  library"},{"line_number":143,"context_line":""},{"line_number":144,"context_line":"Performance Impact"},{"line_number":145,"context_line":"------------------"},{"line_number":146,"context_line":""}],"source_content_type":"text/x-rst","patch_set":5,"id":"7f515b1d_cf6475e8","line":143,"updated":"2017-10-03 14:50:12.000000000","message":"So, we\u0027re going to break a lot of upgrade and deployment tools with this...just sayin.","commit_id":"118285cc6fbe2404a8462289b0a361e5d3a3dd86"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"d445d0a1b9741535b9d0b227d3b80c80150257d3","unresolved":false,"context_lines":[{"line_number":140,"context_line":"  were provided in the last cycle, it will not be possible possible to continue"},{"line_number":141,"context_line":"  providing these due to design decisions made in the underlying `cliff`"},{"line_number":142,"context_line":"  library"},{"line_number":143,"context_line":""},{"line_number":144,"context_line":"Performance Impact"},{"line_number":145,"context_line":"------------------"},{"line_number":146,"context_line":""}],"source_content_type":"text/x-rst","patch_set":5,"id":"7f515b1d_7adb0121","line":143,"in_reply_to":"7f515b1d_cf6475e8","updated":"2017-10-03 16:20:19.000000000","message":"But not as many as I first thought! It turns out that my initial statement about commands not being allowed to have underscores (go back a few patchsets) was mitigable, and I made sure the \u0027api_db --version\u0027 deprecation patch was landed last cycle to provide enough time for a switch-over. I\u0027ve reworded to emphasize this","commit_id":"118285cc6fbe2404a8462289b0a361e5d3a3dd86"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"7ff47b2020cd527567a4f5401d97eba56586272b","unresolved":false,"context_lines":[{"line_number":149,"context_line":"Other deployer impact"},{"line_number":150,"context_line":"---------------------"},{"line_number":151,"context_line":""},{"line_number":152,"context_line":"- A number of commands, like `nova-status` will be moved to `nova-manage`"},{"line_number":153,"context_line":"  subcommands, allowing us to provide a consistent CLI tool a la"},{"line_number":154,"context_line":"  `openstack-client`. Aliases will be provided, but deployment tools should be"},{"line_number":155,"context_line":"  updated to use the new command to allow us to eventually remove these aliases"},{"line_number":156,"context_line":"  and the corresponding code."},{"line_number":157,"context_line":""},{"line_number":158,"context_line":"- Some subcommands will now return a unique, documented return code. Deployment"},{"line_number":159,"context_line":"  tools that use these commands should be updated to use this return code where"}],"source_content_type":"text/x-rst","patch_set":5,"id":"7f515b1d_8c8d6bd5","line":156,"range":{"start_line":152,"start_character":2,"end_line":156,"end_character":29},"updated":"2017-10-03 14:38:43.000000000","message":"I\u0027m not very keen on this point. When we talked about writing nova-status, one option I said was to make it a subcommand in nova-manage, and people were against that because they wanted a clean break from nova-manage, similar to nova-policy. Now we\u0027d be going back on that decision.","commit_id":"118285cc6fbe2404a8462289b0a361e5d3a3dd86"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"d445d0a1b9741535b9d0b227d3b80c80150257d3","unresolved":false,"context_lines":[{"line_number":149,"context_line":"Other deployer impact"},{"line_number":150,"context_line":"---------------------"},{"line_number":151,"context_line":""},{"line_number":152,"context_line":"- A number of commands, like `nova-status` will be moved to `nova-manage`"},{"line_number":153,"context_line":"  subcommands, allowing us to provide a consistent CLI tool a la"},{"line_number":154,"context_line":"  `openstack-client`. Aliases will be provided, but deployment tools should be"},{"line_number":155,"context_line":"  updated to use the new command to allow us to eventually remove these aliases"},{"line_number":156,"context_line":"  and the corresponding code."},{"line_number":157,"context_line":""},{"line_number":158,"context_line":"- Some subcommands will now return a unique, documented return code. Deployment"},{"line_number":159,"context_line":"  tools that use these commands should be updated to use this return code where"}],"source_content_type":"text/x-rst","patch_set":5,"id":"7f515b1d_5a1725a5","line":156,"range":{"start_line":152,"start_character":2,"end_line":156,"end_character":29},"in_reply_to":"7f515b1d_8c8d6bd5","updated":"2017-10-03 16:20:19.000000000","message":"Yeah, you\u0027ve pointed out this issue before. My thinking is based on django-admin [1], which I imagine nova-manage was initially based on. Based on this, I\u0027d like to see commands like the following:\n\n    nova-manage status\n    nova-manage sync\n    nova-manage ...\n\nThis is a nice-to-have usability thing though, and I would of course have to keep aliases around for a long time. As such I\u0027ve dropped it from this spec so we can land the bulk of these changes and worry about these little things later.\n\n[1] https://docs.djangoproject.com/en/1.11/ref/django-admin/","commit_id":"118285cc6fbe2404a8462289b0a361e5d3a3dd86"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"7ff47b2020cd527567a4f5401d97eba56586272b","unresolved":false,"context_lines":[{"line_number":178,"context_line":"-----------"},{"line_number":179,"context_line":""},{"line_number":180,"context_line":"Primary assignee:"},{"line_number":181,"context_line":"  sfinucan"},{"line_number":182,"context_line":""},{"line_number":183,"context_line":"Work Items"},{"line_number":184,"context_line":"----------"}],"source_content_type":"text/x-rst","patch_set":5,"id":"7f515b1d_4cc1b3e4","line":181,"range":{"start_line":181,"start_character":2,"end_line":181,"end_character":10},"updated":"2017-10-03 14:38:43.000000000","message":"uh stephenfin now?","commit_id":"118285cc6fbe2404a8462289b0a361e5d3a3dd86"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"d445d0a1b9741535b9d0b227d3b80c80150257d3","unresolved":false,"context_lines":[{"line_number":178,"context_line":"-----------"},{"line_number":179,"context_line":""},{"line_number":180,"context_line":"Primary assignee:"},{"line_number":181,"context_line":"  sfinucan"},{"line_number":182,"context_line":""},{"line_number":183,"context_line":"Work Items"},{"line_number":184,"context_line":"----------"}],"source_content_type":"text/x-rst","patch_set":5,"id":"7f515b1d_fa6a5119","line":181,"range":{"start_line":181,"start_character":2,"end_line":181,"end_character":10},"in_reply_to":"7f515b1d_2fa30903","updated":"2017-10-03 16:20:19.000000000","message":"Correct, which means it should be stephen-finucane. oops","commit_id":"118285cc6fbe2404a8462289b0a361e5d3a3dd86"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"8d2e83b1162d67201d7ea3cb60a253c5c47e63a9","unresolved":false,"context_lines":[{"line_number":178,"context_line":"-----------"},{"line_number":179,"context_line":""},{"line_number":180,"context_line":"Primary assignee:"},{"line_number":181,"context_line":"  sfinucan"},{"line_number":182,"context_line":""},{"line_number":183,"context_line":"Work Items"},{"line_number":184,"context_line":"----------"}],"source_content_type":"text/x-rst","patch_set":5,"id":"7f515b1d_2fa30903","line":181,"range":{"start_line":181,"start_character":2,"end_line":181,"end_character":10},"in_reply_to":"7f515b1d_4cc1b3e4","updated":"2017-10-03 14:50:12.000000000","message":"This is supposed to be his launchpad id, IIRC :)","commit_id":"118285cc6fbe2404a8462289b0a361e5d3a3dd86"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"7ff47b2020cd527567a4f5401d97eba56586272b","unresolved":false,"context_lines":[{"line_number":195,"context_line":"Dependencies"},{"line_number":196,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"},{"line_number":197,"context_line":""},{"line_number":198,"context_line":"N/A."},{"line_number":199,"context_line":""},{"line_number":200,"context_line":"Testing"},{"line_number":201,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d"}],"source_content_type":"text/x-rst","patch_set":5,"id":"7f515b1d_8ca68b53","line":198,"range":{"start_line":198,"start_character":0,"end_line":198,"end_character":4},"updated":"2017-10-03 14:38:43.000000000","message":"None","commit_id":"118285cc6fbe2404a8462289b0a361e5d3a3dd86"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"d445d0a1b9741535b9d0b227d3b80c80150257d3","unresolved":false,"context_lines":[{"line_number":195,"context_line":"Dependencies"},{"line_number":196,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"},{"line_number":197,"context_line":""},{"line_number":198,"context_line":"N/A."},{"line_number":199,"context_line":""},{"line_number":200,"context_line":"Testing"},{"line_number":201,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d"}],"source_content_type":"text/x-rst","patch_set":5,"id":"7f515b1d_fa01313b","line":198,"range":{"start_line":198,"start_character":0,"end_line":198,"end_character":4},"in_reply_to":"7f515b1d_8ca68b53","updated":"2017-10-03 16:20:19.000000000","message":"Done","commit_id":"118285cc6fbe2404a8462289b0a361e5d3a3dd86"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"7ff47b2020cd527567a4f5401d97eba56586272b","unresolved":false,"context_lines":[{"line_number":200,"context_line":"Testing"},{"line_number":201,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d"},{"line_number":202,"context_line":""},{"line_number":203,"context_line":"Existing tests for the commands will be ported to use cliff."},{"line_number":204,"context_line":""},{"line_number":205,"context_line":"Documentation Impact"},{"line_number":206,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"}],"source_content_type":"text/x-rst","patch_set":5,"id":"7f515b1d_6c4a2f84","line":203,"range":{"start_line":203,"start_character":0,"end_line":203,"end_character":60},"updated":"2017-10-03 14:38:43.000000000","message":"So I think if you\u0027re going to go to the effort of doing this, you need to address the big gap we have in testing nova-manage commands, which is the existing tests just call the methods directly, they don\u0027t call it like a command line like the novaclient unit tests do - which means we don\u0027t actually test any of the argument parsing and we frequently screw that up and have to fix it, e.g. https://review.openstack.org/#/c/502236/\n\nSo would you be able to address that as part of this large change too?","commit_id":"118285cc6fbe2404a8462289b0a361e5d3a3dd86"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"d445d0a1b9741535b9d0b227d3b80c80150257d3","unresolved":false,"context_lines":[{"line_number":200,"context_line":"Testing"},{"line_number":201,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d"},{"line_number":202,"context_line":""},{"line_number":203,"context_line":"Existing tests for the commands will be ported to use cliff."},{"line_number":204,"context_line":""},{"line_number":205,"context_line":"Documentation Impact"},{"line_number":206,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"}],"source_content_type":"text/x-rst","patch_set":5,"id":"7f515b1d_1aed2d8b","line":203,"range":{"start_line":203,"start_character":0,"end_line":203,"end_character":60},"in_reply_to":"7f515b1d_6c4a2f84","updated":"2017-10-03 16:20:19.000000000","message":"Yup, that\u0027s the plan. Noted.","commit_id":"118285cc6fbe2404a8462289b0a361e5d3a3dd86"},{"author":{"_account_id":2750,"name":"Sean Dague","email":"sean@dague.net","username":"sdague"},"change_message_id":"c6c2c798ae886b28767811d26a5314896cb63f2f","unresolved":false,"context_lines":[{"line_number":76,"context_line":""},{"line_number":77,"context_line":"- Unify the various, non-service executables like `nova-status` and"},{"line_number":78,"context_line":"  `nova-policy` under the `nova-manage` tent, providing aliases for some"},{"line_number":79,"context_line":"  as-yet-to-be-determined period of time"},{"line_number":80,"context_line":""},{"line_number":81,"context_line":"Alternatives"},{"line_number":82,"context_line":"------------"}],"source_content_type":"text/x-rst","patch_set":6,"id":"7f515b1d_c0d8c21f","line":79,"updated":"2017-10-03 17:23:57.000000000","message":"Actually, I don\u0027t know that unification here is all that useful. It\u0027s kind of nice to have these be dedicated tools.","commit_id":"6cf42a44ebf49c073cd67e0b915f75825227aa9e"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"cb18188b0c0b0270a72888723da53d8fcd3a7365","unresolved":false,"context_lines":[{"line_number":76,"context_line":""},{"line_number":77,"context_line":"- Unify the various, non-service executables like `nova-status` and"},{"line_number":78,"context_line":"  `nova-policy` under the `nova-manage` tent, providing aliases for some"},{"line_number":79,"context_line":"  as-yet-to-be-determined period of time"},{"line_number":80,"context_line":""},{"line_number":81,"context_line":"Alternatives"},{"line_number":82,"context_line":"------------"}],"source_content_type":"text/x-rst","patch_set":6,"id":"7f515b1d_c999ff79","line":79,"in_reply_to":"7f515b1d_604fce92","updated":"2017-10-04 08:20:46.000000000","message":"I thought I\u0027d dropped this. Let\u0027s go again","commit_id":"6cf42a44ebf49c073cd67e0b915f75825227aa9e"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"8bb125af491f5dead3ee60be20e702fb80c518cb","unresolved":false,"context_lines":[{"line_number":76,"context_line":""},{"line_number":77,"context_line":"- Unify the various, non-service executables like `nova-status` and"},{"line_number":78,"context_line":"  `nova-policy` under the `nova-manage` tent, providing aliases for some"},{"line_number":79,"context_line":"  as-yet-to-be-determined period of time"},{"line_number":80,"context_line":""},{"line_number":81,"context_line":"Alternatives"},{"line_number":82,"context_line":"------------"}],"source_content_type":"text/x-rst","patch_set":6,"id":"7f515b1d_604fce92","line":79,"in_reply_to":"7f515b1d_c0d8c21f","updated":"2017-10-03 17:39:55.000000000","message":"And as Matt already said, unifying nova-status isn\u0027t desirable, although I can see it being useful to be able to run \"nova-manage status\" and have it just exec nova-status (a la git) for convenience.","commit_id":"6cf42a44ebf49c073cd67e0b915f75825227aa9e"},{"author":{"_account_id":7166,"name":"Sylvain Bauza","email":"sbauza@redhat.com","username":"sbauza"},"change_message_id":"d7ae19f348d07e73ecd635bd4d755ffcf74cfc47","unresolved":false,"context_lines":[{"line_number":18,"context_line":"Problem description"},{"line_number":19,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"},{"line_number":20,"context_line":""},{"line_number":21,"context_line":"Despite intentions to the contrary [1]_, it would appear that the nova-manage"},{"line_number":22,"context_line":"tool isn\u0027t going away any time soon. However, nova-manage and the other,"},{"line_number":23,"context_line":"assorted nova-* commands have mostly been cobbled together over the years"},{"line_number":24,"context_line":"without a focus on end-user experience. This presents a couple of issues:"},{"line_number":25,"context_line":""}],"source_content_type":"text/x-rst","patch_set":7,"id":"3f4b6375_57591a58","line":22,"range":{"start_line":21,"start_character":0,"end_line":22,"end_character":36},"updated":"2017-10-19 08:53:32.000000000","message":"Honestly, I think the wikipage is just too old and we should just remove it because the consensus is now clearly to keep nova-manage for very specific commands. Please remove that phrase.","commit_id":"3a5afa0c8ae0bfdeb4eca134e175a291d151cc9b"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"5e46525eefebe6468a4433cc42d00f087e980c0a","unresolved":false,"context_lines":[{"line_number":18,"context_line":"Problem description"},{"line_number":19,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"},{"line_number":20,"context_line":""},{"line_number":21,"context_line":"Despite intentions to the contrary [1]_, it would appear that the nova-manage"},{"line_number":22,"context_line":"tool isn\u0027t going away any time soon. However, nova-manage and the other,"},{"line_number":23,"context_line":"assorted nova-* commands have mostly been cobbled together over the years"},{"line_number":24,"context_line":"without a focus on end-user experience. This presents a couple of issues:"},{"line_number":25,"context_line":""}],"source_content_type":"text/x-rst","patch_set":7,"id":"3f4b6375_0f2b8a94","line":22,"range":{"start_line":21,"start_character":0,"end_line":22,"end_character":36},"in_reply_to":"3f4b6375_57591a58","updated":"2017-10-19 10:19:26.000000000","message":"Done","commit_id":"3a5afa0c8ae0bfdeb4eca134e175a291d151cc9b"},{"author":{"_account_id":7166,"name":"Sylvain Bauza","email":"sbauza@redhat.com","username":"sbauza"},"change_message_id":"d7ae19f348d07e73ecd635bd4d755ffcf74cfc47","unresolved":false,"context_lines":[{"line_number":23,"context_line":"assorted nova-* commands have mostly been cobbled together over the years"},{"line_number":24,"context_line":"without a focus on end-user experience. This presents a couple of issues:"},{"line_number":25,"context_line":""},{"line_number":26,"context_line":"- Things aren\u0027t documented, or are documented incorrectly"},{"line_number":27,"context_line":""},{"line_number":28,"context_line":"  As things stand, all docs must be written and updated manually [2]_, meaning"},{"line_number":29,"context_line":"  they frequently get out of date and/or contain different information from the"}],"source_content_type":"text/x-rst","patch_set":7,"id":"3f4b6375_a2692ebf","line":26,"updated":"2017-10-19 08:53:32.000000000","message":"I\u0027m confused, we already have https://docs.openstack.org/nova/latest/cli/nova-manage.html right?","commit_id":"3a5afa0c8ae0bfdeb4eca134e175a291d151cc9b"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"5e46525eefebe6468a4433cc42d00f087e980c0a","unresolved":false,"context_lines":[{"line_number":23,"context_line":"assorted nova-* commands have mostly been cobbled together over the years"},{"line_number":24,"context_line":"without a focus on end-user experience. This presents a couple of issues:"},{"line_number":25,"context_line":""},{"line_number":26,"context_line":"- Things aren\u0027t documented, or are documented incorrectly"},{"line_number":27,"context_line":""},{"line_number":28,"context_line":"  As things stand, all docs must be written and updated manually [2]_, meaning"},{"line_number":29,"context_line":"  they frequently get out of date and/or contain different information from the"}],"source_content_type":"text/x-rst","patch_set":7,"id":"3f4b6375_cf1e926f","line":26,"in_reply_to":"3f4b6375_a2692ebf","updated":"2017-10-19 10:19:26.000000000","message":"We do, and it\u0027s missing loads of info...","commit_id":"3a5afa0c8ae0bfdeb4eca134e175a291d151cc9b"},{"author":{"_account_id":7166,"name":"Sylvain Bauza","email":"sbauza@redhat.com","username":"sbauza"},"change_message_id":"d7ae19f348d07e73ecd635bd4d755ffcf74cfc47","unresolved":false,"context_lines":[{"line_number":28,"context_line":"  As things stand, all docs must be written and updated manually [2]_, meaning"},{"line_number":29,"context_line":"  they frequently get out of date and/or contain different information from the"},{"line_number":30,"context_line":"  commands themselves [3]_. Why should I care about the \u0027nova-policy\u0027 tool, for"},{"line_number":31,"context_line":"  example?"},{"line_number":32,"context_line":""},{"line_number":33,"context_line":"- Tools vary in scope and purpose"},{"line_number":34,"context_line":""}],"source_content_type":"text/x-rst","patch_set":7,"id":"3f4b6375_82abd2d4","line":31,"updated":"2017-10-19 08:53:32.000000000","message":"I think it\u0027s maybe a review problem. We ask for relnotes when you provide a new configuration option, why couldn\u0027t we just ask for modifying the nova-manage documentation too ?","commit_id":"3a5afa0c8ae0bfdeb4eca134e175a291d151cc9b"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"5e46525eefebe6468a4433cc42d00f087e980c0a","unresolved":false,"context_lines":[{"line_number":28,"context_line":"  As things stand, all docs must be written and updated manually [2]_, meaning"},{"line_number":29,"context_line":"  they frequently get out of date and/or contain different information from the"},{"line_number":30,"context_line":"  commands themselves [3]_. Why should I care about the \u0027nova-policy\u0027 tool, for"},{"line_number":31,"context_line":"  example?"},{"line_number":32,"context_line":""},{"line_number":33,"context_line":"- Tools vary in scope and purpose"},{"line_number":34,"context_line":""}],"source_content_type":"text/x-rst","patch_set":7,"id":"3f4b6375_0f04aa16","line":31,"in_reply_to":"3f4b6375_82abd2d4","updated":"2017-10-19 10:19:26.000000000","message":"...and I\u0027m of the opinion that if something can be automated, then it _should_ be automated. This is the reason I added the \u0027cliff.sphinxext\u0027 Sphinx extension [1] and started migrating \u0027python-openstackclient\u0027 to it [2]. Humans forget stuff but scripts do not :)","commit_id":"3a5afa0c8ae0bfdeb4eca134e175a291d151cc9b"},{"author":{"_account_id":7166,"name":"Sylvain Bauza","email":"sbauza@redhat.com","username":"sbauza"},"change_message_id":"d7ae19f348d07e73ecd635bd4d755ffcf74cfc47","unresolved":false,"context_lines":[{"line_number":37,"context_line":"  comparison, the `nova-policy` and `nova-status` tools, for example, do"},{"line_number":38,"context_line":"  exactly one thing each: allows you to configure policy and check the upgrade"},{"line_number":39,"context_line":"  status of an entire nova deployment, respectively. Compare this to the"},{"line_number":40,"context_line":"  single, consistent CLI presented by the OpenStack client."},{"line_number":41,"context_line":""},{"line_number":42,"context_line":"- Things are not consistently scriptable"},{"line_number":43,"context_line":""}],"source_content_type":"text/x-rst","patch_set":7,"id":"3f4b6375_22d2de5d","line":40,"updated":"2017-10-19 08:53:32.000000000","message":"Sure, but that\u0027s something we can change without using Cliff, right?","commit_id":"3a5afa0c8ae0bfdeb4eca134e175a291d151cc9b"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"5e46525eefebe6468a4433cc42d00f087e980c0a","unresolved":false,"context_lines":[{"line_number":37,"context_line":"  comparison, the `nova-policy` and `nova-status` tools, for example, do"},{"line_number":38,"context_line":"  exactly one thing each: allows you to configure policy and check the upgrade"},{"line_number":39,"context_line":"  status of an entire nova deployment, respectively. Compare this to the"},{"line_number":40,"context_line":"  single, consistent CLI presented by the OpenStack client."},{"line_number":41,"context_line":""},{"line_number":42,"context_line":"- Things are not consistently scriptable"},{"line_number":43,"context_line":""}],"source_content_type":"text/x-rst","patch_set":7,"id":"3f4b6375_0f7dcab0","line":40,"in_reply_to":"3f4b6375_22d2de5d","updated":"2017-10-19 10:19:26.000000000","message":"Correct, and that\u0027s what has been done. This spec is called \u0027move-nova-cmds-to-cliff\u0027, but I\u0027ve included this stuff in here so I have a way to group all these various improvements under the one banner/topic. This may not have been the correct thing to do, but all of these items are pre-requisites. I\u0027ll reword","commit_id":"3a5afa0c8ae0bfdeb4eca134e175a291d151cc9b"},{"author":{"_account_id":7166,"name":"Sylvain Bauza","email":"sbauza@redhat.com","username":"sbauza"},"change_message_id":"d7ae19f348d07e73ecd635bd4d755ffcf74cfc47","unresolved":false,"context_lines":[{"line_number":42,"context_line":"- Things are not consistently scriptable"},{"line_number":43,"context_line":""},{"line_number":44,"context_line":"  While some commands support return codes, what these return aren\u0027t"},{"line_number":45,"context_line":"  consistently defined."},{"line_number":46,"context_line":""},{"line_number":47,"context_line":"- Implementing the commands themselves are crufty"},{"line_number":48,"context_line":""}],"source_content_type":"text/x-rst","patch_set":7,"id":"3f4b6375_42bcba04","line":45,"updated":"2017-10-19 08:53:32.000000000","message":"Again, we can fix that nope ?","commit_id":"3a5afa0c8ae0bfdeb4eca134e175a291d151cc9b"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"5e46525eefebe6468a4433cc42d00f087e980c0a","unresolved":false,"context_lines":[{"line_number":42,"context_line":"- Things are not consistently scriptable"},{"line_number":43,"context_line":""},{"line_number":44,"context_line":"  While some commands support return codes, what these return aren\u0027t"},{"line_number":45,"context_line":"  consistently defined."},{"line_number":46,"context_line":""},{"line_number":47,"context_line":"- Implementing the commands themselves are crufty"},{"line_number":48,"context_line":""}],"source_content_type":"text/x-rst","patch_set":7,"id":"3f4b6375_ef4b8e84","line":45,"in_reply_to":"3f4b6375_42bcba04","updated":"2017-10-19 10:19:26.000000000","message":"Ditto","commit_id":"3a5afa0c8ae0bfdeb4eca134e175a291d151cc9b"},{"author":{"_account_id":7166,"name":"Sylvain Bauza","email":"sbauza@redhat.com","username":"sbauza"},"change_message_id":"d7ae19f348d07e73ecd635bd4d755ffcf74cfc47","unresolved":false,"context_lines":[{"line_number":53,"context_line":""},{"line_number":54,"context_line":"- nova is a compute controller, not a CLI library"},{"line_number":55,"context_line":""},{"line_number":56,"context_line":"  Rolling our own CLI routines is not our primary business, we\u0027re not"},{"line_number":57,"context_line":"  innovating on CLI awesomeness, so we should just use a pre-made library. Less"},{"line_number":58,"context_line":"  lines of code means lower maintenance cost."},{"line_number":59,"context_line":""},{"line_number":60,"context_line":"Use Cases"},{"line_number":61,"context_line":"---------"}],"source_content_type":"text/x-rst","patch_set":7,"id":"3f4b6375_22609ea5","line":58,"range":{"start_line":56,"start_character":0,"end_line":58,"end_character":45},"updated":"2017-10-19 08:53:32.000000000","message":"That is honestly to me the only motivation for using Cliff. The other points are something we can fix with the current nova-manage module.","commit_id":"3a5afa0c8ae0bfdeb4eca134e175a291d151cc9b"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"5e46525eefebe6468a4433cc42d00f087e980c0a","unresolved":false,"context_lines":[{"line_number":53,"context_line":""},{"line_number":54,"context_line":"- nova is a compute controller, not a CLI library"},{"line_number":55,"context_line":""},{"line_number":56,"context_line":"  Rolling our own CLI routines is not our primary business, we\u0027re not"},{"line_number":57,"context_line":"  innovating on CLI awesomeness, so we should just use a pre-made library. Less"},{"line_number":58,"context_line":"  lines of code means lower maintenance cost."},{"line_number":59,"context_line":""},{"line_number":60,"context_line":"Use Cases"},{"line_number":61,"context_line":"---------"}],"source_content_type":"text/x-rst","patch_set":7,"id":"3f4b6375_cf50d235","line":58,"range":{"start_line":56,"start_character":0,"end_line":58,"end_character":45},"in_reply_to":"3f4b6375_22609ea5","updated":"2017-10-19 10:19:26.000000000","message":"Ditto","commit_id":"3a5afa0c8ae0bfdeb4eca134e175a291d151cc9b"},{"author":{"_account_id":7166,"name":"Sylvain Bauza","email":"sbauza@redhat.com","username":"sbauza"},"change_message_id":"d7ae19f348d07e73ecd635bd4d755ffcf74cfc47","unresolved":false,"context_lines":[{"line_number":61,"context_line":"---------"},{"line_number":62,"context_line":""},{"line_number":63,"context_line":"- As an operator, I want a consistent, well-documented `nova-manage` tool that"},{"line_number":64,"context_line":"  I can use to configure all aspects of nova that are not configurable via API."},{"line_number":65,"context_line":""},{"line_number":66,"context_line":"- As a developer, I want to take advantage of the goodness that a mature,"},{"line_number":67,"context_line":"  well-maintained, CLI library brings, such as automated man page/documentation"}],"source_content_type":"text/x-rst","patch_set":7,"id":"3f4b6375_426a7a80","line":64,"updated":"2017-10-19 08:53:32.000000000","message":"I don\u0027t see how a pure internal framework refactoring would help users of that tool. To me, we can really only discuss about developer use cases.","commit_id":"3a5afa0c8ae0bfdeb4eca134e175a291d151cc9b"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"5e46525eefebe6468a4433cc42d00f087e980c0a","unresolved":false,"context_lines":[{"line_number":61,"context_line":"---------"},{"line_number":62,"context_line":""},{"line_number":63,"context_line":"- As an operator, I want a consistent, well-documented `nova-manage` tool that"},{"line_number":64,"context_line":"  I can use to configure all aspects of nova that are not configurable via API."},{"line_number":65,"context_line":""},{"line_number":66,"context_line":"- As a developer, I want to take advantage of the goodness that a mature,"},{"line_number":67,"context_line":"  well-maintained, CLI library brings, such as automated man page/documentation"}],"source_content_type":"text/x-rst","patch_set":7,"id":"3f4b6375_8f4ada7d","line":64,"in_reply_to":"3f4b6375_426a7a80","updated":"2017-10-19 10:19:26.000000000","message":"Again, the title of this spec is misleading. This is a catch all \"fix the nova-* utilities\" spec, but migrating to cliff is the biggest aspect of this","commit_id":"3a5afa0c8ae0bfdeb4eca134e175a291d151cc9b"},{"author":{"_account_id":7166,"name":"Sylvain Bauza","email":"sbauza@redhat.com","username":"sbauza"},"change_message_id":"d7ae19f348d07e73ecd635bd4d755ffcf74cfc47","unresolved":false,"context_lines":[{"line_number":65,"context_line":""},{"line_number":66,"context_line":"- As a developer, I want to take advantage of the goodness that a mature,"},{"line_number":67,"context_line":"  well-maintained, CLI library brings, such as automated man page/documentation"},{"line_number":68,"context_line":"  generation, easy nesting of subcommands, and sane testing tooling."},{"line_number":69,"context_line":""},{"line_number":70,"context_line":"Proposed change"},{"line_number":71,"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":7,"id":"3f4b6375_c2130a0d","line":68,"updated":"2017-10-19 08:53:32.000000000","message":"++","commit_id":"3a5afa0c8ae0bfdeb4eca134e175a291d151cc9b"},{"author":{"_account_id":7166,"name":"Sylvain Bauza","email":"sbauza@redhat.com","username":"sbauza"},"change_message_id":"d7ae19f348d07e73ecd635bd4d755ffcf74cfc47","unresolved":false,"context_lines":[{"line_number":70,"context_line":"Proposed change"},{"line_number":71,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"},{"line_number":72,"context_line":""},{"line_number":73,"context_line":"- Rewrite the `nova-` commands to use `cliff` [4]_"},{"line_number":74,"context_line":""},{"line_number":75,"context_line":"- Document each and every command"},{"line_number":76,"context_line":""}],"source_content_type":"text/x-rst","patch_set":7,"id":"3f4b6375_22d3fe3a","line":73,"updated":"2017-10-19 08:53:32.000000000","message":"The problem is the transition between what you said \"wrong behaviour\" and the new cliff module.\n\nFor example, you said we have confusing return codes so we should use cliff for that. Fine, but since we would modify the CLI, customers using that CLI for scripting would see a behavioural change they need to avoid.\nHow do you imagine the upgrade path to them ?","commit_id":"3a5afa0c8ae0bfdeb4eca134e175a291d151cc9b"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"5e46525eefebe6468a4433cc42d00f087e980c0a","unresolved":false,"context_lines":[{"line_number":70,"context_line":"Proposed change"},{"line_number":71,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"},{"line_number":72,"context_line":""},{"line_number":73,"context_line":"- Rewrite the `nova-` commands to use `cliff` [4]_"},{"line_number":74,"context_line":""},{"line_number":75,"context_line":"- Document each and every command"},{"line_number":76,"context_line":""}],"source_content_type":"text/x-rst","patch_set":7,"id":"3f4b6375_6f243ec7","line":73,"in_reply_to":"3f4b6375_22d3fe3a","updated":"2017-10-19 10:19:26.000000000","message":"I don\u0027t have one at the moment. I\u0027m mostly hoping that folks are using the equivalent of \u0027if not return_code\u0027 (Python) or \u0027[ -z $RETURN_CODE ]\u0027 (Bash), but there\u0027s no way I can ascertain how every deployment tool is working. All I can promise is that we will still return non-zero error codes but these will now be unique. I can include this in deployer impact","commit_id":"3a5afa0c8ae0bfdeb4eca134e175a291d151cc9b"},{"author":{"_account_id":7166,"name":"Sylvain Bauza","email":"sbauza@redhat.com","username":"sbauza"},"change_message_id":"d7ae19f348d07e73ecd635bd4d755ffcf74cfc47","unresolved":false,"context_lines":[{"line_number":112,"context_line":"  term but it ultimately kicks the can down the road. The same problems (tech"},{"line_number":113,"context_line":"  debt) seen when introducing the cells v2 commands will pop up for cells v3"},{"line_number":114,"context_line":"  (heaven forbid) or whatever the next extension to `nova-manage` ends up"},{"line_number":115,"context_line":"  being."},{"line_number":116,"context_line":""},{"line_number":117,"context_line":"Data model impact"},{"line_number":118,"context_line":"-----------------"}],"source_content_type":"text/x-rst","patch_set":7,"id":"3f4b6375_228ade1a","line":115,"updated":"2017-10-19 08:53:32.000000000","message":"Honestly, I think all your points are valid and we should somehow document the gaps you mention (either as bugs or something else). Then we could fix some gaps by using the existing module and see what should be needing too much time so just using Cliff would help us.\n\nIt\u0027s all about the costs vs. benefits balance. Transitioning to a very different framework has some price we need to pay and I need to be convinced that the benefits I will get are worth the price I pay.","commit_id":"3a5afa0c8ae0bfdeb4eca134e175a291d151cc9b"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"5e46525eefebe6468a4433cc42d00f087e980c0a","unresolved":false,"context_lines":[{"line_number":112,"context_line":"  term but it ultimately kicks the can down the road. The same problems (tech"},{"line_number":113,"context_line":"  debt) seen when introducing the cells v2 commands will pop up for cells v3"},{"line_number":114,"context_line":"  (heaven forbid) or whatever the next extension to `nova-manage` ends up"},{"line_number":115,"context_line":"  being."},{"line_number":116,"context_line":""},{"line_number":117,"context_line":"Data model impact"},{"line_number":118,"context_line":"-----------------"}],"source_content_type":"text/x-rst","patch_set":7,"id":"3f4b6375_2f2e46a5","line":115,"in_reply_to":"3f4b6375_228ade1a","updated":"2017-10-19 10:19:26.000000000","message":"That raises a good point - do I even need a spec for this work? It\u0027s not necessarily a new feature but rather a refactor. Perhaps this whole thing is unnecessary?","commit_id":"3a5afa0c8ae0bfdeb4eca134e175a291d151cc9b"},{"author":{"_account_id":11564,"name":"Chris Dent","email":"cdent@anticdent.org","username":"chdent"},"change_message_id":"30e98da0cc3e889d407d3800ee0aba842b58a756","unresolved":false,"context_lines":[{"line_number":149,"context_line":""},{"line_number":150,"context_line":"- Some subcommands will now return a unique, documented return code. Deployment"},{"line_number":151,"context_line":"  tools that use these commands and check for specific values, as opposed to"},{"line_number":152,"context_line":"  simply non-zero values, should be updated to use this return code."},{"line_number":153,"context_line":""},{"line_number":154,"context_line":"Developer impact"},{"line_number":155,"context_line":"----------------"}],"source_content_type":"text/x-rst","patch_set":8,"id":"3f4b6375_65ae9de8","line":152,"updated":"2017-10-19 11:12:49.000000000","message":"This feels like a pretty big deal. There are many deployment tools shared and homegrown. I would assume that it is generally rare to check response codes of cli tools (instead of success/fail) but do we know?","commit_id":"f06017eeae3e420698a9fc4f1c75c583cd46fa9e"},{"author":{"_account_id":11564,"name":"Chris Dent","email":"cdent@anticdent.org","username":"chdent"},"change_message_id":"30e98da0cc3e889d407d3800ee0aba842b58a756","unresolved":false,"context_lines":[{"line_number":193,"context_line":""},{"line_number":194,"context_line":"Existing tests for the commands will be ported to use cliff. These tests will"},{"line_number":195,"context_line":"be extended to close gaps such as validation of the argument parsing code,"},{"line_number":196,"context_line":"which is currently poorly tests [8]_."},{"line_number":197,"context_line":""},{"line_number":198,"context_line":"Documentation Impact"},{"line_number":199,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"}],"source_content_type":"text/x-rst","patch_set":8,"id":"3f4b6375_a57db56f","line":196,"range":{"start_line":196,"start_character":26,"end_line":196,"end_character":31},"updated":"2017-10-19 11:12:49.000000000","message":"tested","commit_id":"f06017eeae3e420698a9fc4f1c75c583cd46fa9e"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"10933169af99fc6c3dbae0c6eff6448646d8d236","unresolved":false,"context_lines":[{"line_number":193,"context_line":""},{"line_number":194,"context_line":"Existing tests for the commands will be ported to use cliff. These tests will"},{"line_number":195,"context_line":"be extended to close gaps such as validation of the argument parsing code,"},{"line_number":196,"context_line":"which is currently poorly tests [8]_."},{"line_number":197,"context_line":""},{"line_number":198,"context_line":"Documentation Impact"},{"line_number":199,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"}],"source_content_type":"text/x-rst","patch_set":8,"id":"5f93b717_9d730481","line":196,"range":{"start_line":196,"start_character":26,"end_line":196,"end_character":31},"in_reply_to":"3f4b6375_a57db56f","updated":"2018-01-26 10:03:26.000000000","message":"Done","commit_id":"f06017eeae3e420698a9fc4f1c75c583cd46fa9e"}]}
