Hi Peter
Welcome!
The tooling that @jdkandersson mentions is probably the most interesting thing for you to look at. Essentially, this is a nice way for someone who has an app that can scale out horizontally (doesnât use local state but rather depends on external databases like Postgres or services like Redis or Kafka) to benefit from the charm ecosystem without themselves having to become a charm expert.
If you dig into that youâll see thereâs a lower layer which handles general issues, and then there is a pluggable upper layer which maps to conventions for specific application development harnesses like Fast API, Flask, Django, Spring Boot etc. At the moment the team is focused on Flask, but it will still give you an idea of how this will feel when they or a Django person build the Django-specific upper layer.
What Juju does nicely is let you consume, as standard parts which you do not have to maintain, the ops code for your external things like databases and message queues. Whether you are in VMs or on K8s, Juju will provide the details to your app to connect to those things, and keep that up to date as those things scale out or failover or get upgraded. Juju does this by having the operational logic of those services encoded as charms, which are like packages of opscode. By using them youâre getting ops as a package, just like apt gives you a kernel as a package
The challenge of course is that you ALSO need a charm for your app.
What this tooling does is recognise that there are many apps which just need some environment variables set to tell them where those services are. The lower layer does all the work for different kinds of services, and the upper layer bridges that into the specifics of a framework like Django. So, if your app is stateless and uses a framework for which there is such a bridging âupper layerâ, then you donât need to write a charm yourself, just use the tooling.
Hope that all makes sense.
As a final comment, for apps which sit nicely inside containers, yes, we are working towards being able to write a single charm which works both on machines and on K8s. A django app would be a good example of that because it probably doesnât need to trawl about on the host filesystem. Some apps, such as monitoring or storage or other low-level system services, DO need to poke about on the host, so those would stay as what we currently call âmachineâ charms.