Skip to main content

Flexible command line tool to manage fullstack development projects.

Project description

Untropy

Untropy is a flexible command line tool to manage full stack polyglot projects.

Features

  • Centralized project configuration with multiple environments and deployment tiers.
  • Powerful plugin system to wrap and configure external tools.
  • Cookiecutter based templates auto-configured from the project configuration.
  • ...

Sequence of commands

> untropy init
> untropy plugin add untropy-externaltool
> untropy plugin create untropy-localtool
> untropy cookie project_template -o awesome_microsvc
> untropy wrapper command ...
...

Rationale

Modern software development solutions are made up a fair amount of technologies and the number of tools involved can get huge. To cite some that are very common:

  • Terraform
  • Packer
  • Helm
  • Kustomize
  • Kubectl
  • Yarn
  • Pip
  • Docker
  • Vault
  • Ansible
  • ...

TODO Give some examples (Mattermost ?)

The configuration and execution of all these tools generates a lot a entropy, understood as the quantity of information needed to completely describe the system:

  • Configuration files in different formats.
  • Bits of information duplicated across tool configuration.
  • Mixed scripting languages (shell, python, ...).

To manage this complexity, development teams sometimes code several script based tools to ease different use cases (CI, command line, ...). Guided by the DRY principle, they group those disparate tools into one command, managed into one project.

Soon, this swiss army knife tool becomes a monolith the whole team depends on but don't wan't to touch. While they are doing independent microservices otherwise, they need to manage them with one big CI/CD monolith.

Developers and Devops that got on board early continue to add value to the tool while newbies and haters try at all cost to avoid it.

Untropy is an attempt to have the benefits of sharing a common set of tools and good practices while avoiding the maintenance nightmare.

Each tool/wrapper can be developped indepently from the others and integrated in the projects that make use of them.

Untropy leverages the power and maturity of the python ecosystem and some of its most interesting libraries and tools:

  • pip For package and dependency management.
  • pipx for keeping the Untropy Python Virtual environment separate from your development environment. This is useful when python is used in the project to avoid the dependencies version nightmare.
  • Pydantic for configuration management.
  • Click and Typer for command execution. Adding an existing typer or click based command to untropy is done with one command.

History

Untropy is inspired by Yinn, a tool I created while working at Unowhy. It started as an Ansible wrapper in shell and became a click based python CLI. More CI/CD related tools were then integrated into it. The python package ended containing the Ansible deployment roles of the common services used by different solutions of the company. As the package was multi-purpose and monolithic, it was facing a lot of releases. It became really hard to track the changes and to avoid regressions on client projects.

As it was based on Ansible, it had its versatility and power, in particular in templating files and wrapping existing tools. But it also had its flaws, like not being able to run or even being installed on Windows.

Credits

Inspiration comes from:

Terraform

Terraform is a declarative tools, not an imperative one as untropy is but it defines a common interface for providers and data sources. With terraform, as providers are Go compiled programs, if you want to have your own custom provider, you need to have the Go runtime installed, build your provider and upload it to hashicorp public registry or hashicorp cloud private one. It's uneasy to have a custom provider along your project. With Untropy, as python is interpreted, a custom plugin living in your project can be run from your project source code. You also keep the ability to publish your plugins to the cheese chop or your private repository.

The drawbacks are of course the need for the python runtime and the possible uncompatibility of libraries used by different plugins.

Composition with Terraform is also uneasy, needing some external tools like Terragrunt.

Docker compose

The similarity of untropy with docker compose is that you can compose Off the Shelf components with custom ones, each of them configured according to the use you make of them.

In Untropy, the Off The Shelf components would be the Pypi plugins that you use, and the custom ones are the ones you have in source code form in your project or the ones you download from a private package registry. As with docker-compose, you can configure each component (plugin) to your need.

Docker is both the build tool and the runtime execution tools. With untropy and python, you have the same way or working.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

untropy-0.1.0.tar.gz (27.1 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

untropy-0.1.0-py3-none-any.whl (25.3 kB view details)

Uploaded Python 3

File details

Details for the file untropy-0.1.0.tar.gz.

File metadata

  • Download URL: untropy-0.1.0.tar.gz
  • Upload date:
  • Size: 27.1 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: python-requests/2.27.1

File hashes

Hashes for untropy-0.1.0.tar.gz
Algorithm Hash digest
SHA256 c6e605643346a9861a2ed4c974ad00f1d3ded1cbc967b35a8722247d4cb9b25c
MD5 8a66acc5b9a448a82052a64565f2712f
BLAKE2b-256 9ca83d67e938a3af339a1e186aec1a6ef4e247cd9ce45fcce4ca7509473012ca

See more details on using hashes here.

File details

Details for the file untropy-0.1.0-py3-none-any.whl.

File metadata

  • Download URL: untropy-0.1.0-py3-none-any.whl
  • Upload date:
  • Size: 25.3 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: python-requests/2.27.1

File hashes

Hashes for untropy-0.1.0-py3-none-any.whl
Algorithm Hash digest
SHA256 e80bf046b8b76485a7c83f2c3597471fae8046c88b34104162ae512a5fe262dd
MD5 f27e4e67e65a4106836608ebdcfc4a9d
BLAKE2b-256 f3356355665aff03c7504a8c8fa9eab193fee74a46f79d5e3e925b20ccab96e1

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page