[Pulp-dev] Pulp3 CLI Proof of Concept

Bihan Zhang bizhang at redhat.com
Mon Jun 11 17:20:07 UTC 2018

After gathering some initial user stories[0] and feedback from Pulp
users[1], the Pulp CLI mini-team[2] has been exploring implementation
options. In doing so, we've spent a few days creating a prototype that we'd
like the Pulp community to review and test. This proof of concept is
available at the following repository:


This PoC provides an autogenerated set of commands for each endpoint
available by the REST API schema. Having an autogenerated CLI means it
automatically supports all plugins and provides complete feature parity
with our REST API.

Another highlight of the PoC's design is that it's easy to extend. One of
the feedback items we got from pulp users is that they use scripts to
automate their usage of the CLI, while other teams like RHUI have their own
CLI. With this PoC design, users will be able to write their own custom
commands and functionality in Python. This will also allow us (the Pulp
team) to provide more complex commands and workflows in the future too.


To see information about how to install and use the PoC CLI, check out the



- Auto-generated CLI commands with one command for each API endpoint
- Support for plugins
- Pagination support
- Lookup via resource UUIDs or names
- Help screens
- Task polling
- Autocompletion for commands and arguments
- Extensibility
  - Support in the future to create our own complex commands/workflows
  - Users/plugin writers can create their own commands and ship their own
cli plugins


We first began by exploring pre-existing solutions like openapi-cli-client
and coreapi-cli. The former, openapli-cli-client, was unmaintained and
didn't seem to work with our API. The coreapi-cli package seemed promising
but we found it hard to extend and it lacked some of the features we wanted
to support in our initial set of user stories (e.g. pagination, task
polling, etc). We realized that it was a rather small codebase that merely
integrated the coreapi python package[3] with the cli package, click[4].

So next we began investigating writing our own CLI using coreapi and click.
Doing so was easy and it only required a few lines of code. We were then
able to add on more features like task polling with little effort. We also
explored using an alternative to click called argparse[5] but found it very
hard to work with.

Next Steps

We first want to get feedback on this PoC. If we decide to move forward
with it, there are a few things we'd like to do to prepare this CLI for an

- Provide docs for how to extend the CLI and write custom commands
- Better error handling
- Fix resource lookup for master/detail routes
- Progress reporting when polling tasks
- Support for file uploads
- Authentication and configuration
- Format of responses
- Swich out coreapi for openapi

All CLI-related tasks will be tracked through this redmine Epic:

Before we proceed though, we'd like to get feedback. So please review and
test out our PoC. Let us know if you have any comments and suggestions.

[0] https://www.redhat.com/archives/pulp-dev/2018-May/msg00004.html
[1] https://www.redhat.com/archives/pulp-list/2018-May/msg00007.html
[2] asmacdo, bizhang, daviddavis, dawalker, and dkliban
[3] https://github.com/core-api/python-client
[4] http://click.pocoo.org/5/
[5] https://docs.python.org/3/library/argparse.html
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://listman.redhat.com/archives/pulp-dev/attachments/20180611/c40e1239/attachment.htm>

More information about the Pulp-dev mailing list