While thinking about
https://github.com/projectatomic/atomic/issues/43, I also started
looking at how to implement some ideas. The existing `atomic` script
isn't particularly modular, so I ended up rewriting the bulk of the
functionality using Python's "cliff" framework. The results are here:
https://github.com/larsks/atomic-cli/
This is not intended to be either (a) a drop-in replacement or (b)
entirely functional; it's really just meant as a conversation started
about how the tool is implemented.
These are some of the significant changes:
- Because this is implemented using cliff, each subcommand is a
separate Python module. This encourages modularity and makes it
easy to experiment with new commands.
- The existing script was using a combination of the Docker Python API
and the Docker CLI for different operations, which made it hard to
ensure consistent behavior. This isolates all the Docker operations
inside a "atomic.dockerapi" module, which at the moment is
implemented entirely in terms of the "docker" CLI. The dockerapi
module provides high-level abstractions for images and containers,
such that the implementation of most "atomic" subcommands is
relatively simple.
- The ad-hoc templating (for 'NAME=NAME', 'IMAGE=IMAGE', et al) is
replaced with the standard python '...string...'.format() call. In command lines,
'{image}' is replaced with the image name and '{name}' is replaced
with the container name, and it is trivial to add additional values
to the dictionary passed to the format method.
- I tried to write a simple spec to describe the desired behavior.
It's not half complete, but it's hard to write a tool without some
sort of end-goal in site.
--
Lars Kellogg-Stedman <lars redhat com> | larsks @ {freenode,twitter,github}
Cloud Engineering / OpenStack | http://blog.oddbit.com/
Attachment:
signature.asc
Description: PGP signature