The goal of this project is to enable organizations to deliver solutions that are reliable and easy to build, based on containers. Many software organizations rely on a complex set of command-line tools (CLIs) and configuration files to deliver container-based solutions. This project proposes to make that simpler by building tools focused on two key characteristics:
-
Unified: Help organizations build and publish tools that spans through many service teams through a centralized entrypoint. Just like
aws ec2
,aws s3
, or any other cloud provider CLIs. This allows their customers to execute new workflows reliably by simply updating the tool, instead of installing and configuring new ones. -
Pluggable: Help developers integrate solutions into any system with minimal friction. Existing CLIs and container images can be leveraged without modification, and still be integrated with UP for additional features.
In this repository you'll find the up
CLI, demonstrating the proposed plugin system and integration with popular tools such as ansible
, quarkus
, oc
, and others. See the demos
directory for examples!
This project is at exeperimental stage and all contributions are most welcome.
UP tools are designed on top of modern container tools to leverage the packaging and distribution standards that are widely adopted. However, this project takes innovative approaches in the development and delivery of container-based solutions.
By building a plugin-system that allows organizations to easily integrate their existing containers and command-line solutions into a centralized tool. UP plugins can be simple library packages or even a single configuration file.
By using doclets to integrate scripts with containers, so that they can be executed "as is" or through up tools, adding the settings and hooks defined as comments in the script itself.
Any command prompt can be executed with the up
CLI. Once up
is invoked, with your prompt as argument, it will look up any plugin that provides container configurations for your execution. For example, one could run up ansible --version
even without ansible installed. The ansible plugin will load the correct container and execute your command, printing the ansible version.
$ up ansible --version
In script mode, just like command mode, your script will be executed in a container. However, besides the plugins, it will look for comments in your script that are containerfile instructions such as "FROM", "PORT", "ENV". Those will be parsed and executed as well. For example, the following script could be created to run your ansible commands through a container.
#!/bin/bash
# FROM cytopia/ansible:latest
ansible --version
As a developer, you can use script mode to automate a solution and be assured that it be executed as supposed, with correct dependencies, binaries and settings from the container.
As a organization manager or lead, you can build and distribute your own version of up
, consolidating the deliveries of service teams and allowing customers to experiment new solutions.
So you have 2 options: first: set the volume/port inside the up.yaml
of your plugin, or in the example case the Ansible plugin; or second: pass the volume/port on the command, e.g:
$ up -Xp=8080/tcp:5000 ansible --version # will set the port in the container
$ up -Xv=/home:/mnt/vol3,rw ansible --version # will set the volume in the container
Yes, the current available commands are in plugin
reserved keyword:
$ up plugin list # List all installed plugins
$ up plugin prompts ansible # Shows the prompts from up.yaml of a plugin
$ up plugin details ansible --version # Shows the prompt configuration from up.yaml of a plugin