Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.

...

  • How does a multi-service dev env know which local git repositories (as filesystem directories) correspond to which dependencies?

    • Tilt has you decide for yourself, but suggests that all repositories be checked out under the same parent directory, as we do with devstack.

    • Coder probably manages all of this for you (since I don’t think it even lets you check out the code locally – all editing seems to be done in the workspace)

  • We should check into whether any of these make it easier/harder to use pip install -e when working with libraries in an IDA.

  • Things that would improve devstack now, and that would still help us in any new system:

    • Removing Ansible from our image-building, because our approach to Ansible is currently complicated by our re-use strategy, and because our Ansible reads from a config repo as it runs—whereas base Docker images would be config-free and would work across dev, stage, and prod.

    • Better auto-reloading (migrations, static assets, requirements)

  • Tools not assessed: Ambassador Telepresence, Garden, Skaffold

Features and Facets

  • It was hard to evaluate the options for cloud dev env management without knowing exactly what we want to replace from our dev environment (or add to it)

  • We created a feature breakdown of Open edX dev environments at https://docs.google.com/spreadsheets/d/1XAipznjIcTaE2H454M74No2Ro_9VftbolfV4YVv-B9I/edit#gid=0 , and wrote https://github.com/edx/edx-arch-experiments/issues/203 for refining it

  • Once we had a list of features, we started finding categories of them; essentially different facets of a complete development environment:

    • Standardization - Things we can get just by standardizing across our repos

    • Selection - Things needed to specify a desired subset of services and make sure common development tasks operate on exactly that subset

    • Orchestration - Things that are closely tied to the container orchestration system (typically docker-compose or Kubernetes)

    • Deployment - Things that are closely tied to how/where an environment is deployed: Docker Desktop (local), EC2 (cloud), EKS, etc.

    • Integration - Things that serve as glue for features in the other categories: do X for every repo in a particular set, do X for every service currently running, etc.

  • Some of the tools are Kubernetes-only

  • Spitballing:

    • Selection - go with Tutor plugins

    • Orchestration - Kubernetes preferred, but support docker-compose if possible

    • Deployment - find the best thing to smooth the Kubernetes learning curve, make it an option for Tutor

    • Integration - Tutor CLI?

  • For comparison:

    • Tutor with problematic areas replaced/supplemented with another tool

    • Go with another tool from the ground up

      • Possibilities

        • Devspace