mydevops classic confinement request

name: mydevops

description: mydevops is a personal DevOps CLI that orchestrates provisioning, server configuration, and application deployment across arbitrary infrastructure — VPS providers (Hetzner, OVH, AWS, Azure, GCP, DigitalOcean, Scaleway, Linode, Alibaba, Proxmox, vSphere), Docker, and Kubernetes (EKS or self-hosted). A single mydevops.yml file per project drives the whole pipeline: provisioning, server config, build, deploy, SSL, monitoring, backups, and CI/CD generation. It is a thin orchestration layer over pre-installed system tools (docker, git, ssh, terraform, ansible, kubectl, rsync…) — none of these are bundled in the snap; mydevops just shells out to whichever ones the user already has.

snapcraft: https://github.com/Ronaldo-F-dev/mydevops/blob/main/snapcraft.yaml

upstream: https://github.com/Ronaldo-F-dev/mydevops

upstream-relation: I am the sole author and maintainer of the upstream project.

supported-category: public cloud agents

reasoning: mydevops orchestrates deployment and provisioning against multiple public cloud providers (AWS, GCP, Azure, Hetzner, OVH, DigitalOcean, Scaleway, Linode, Alibaba) plus Kubernetes (EKS or self-hosted) and arbitrary Docker hosts, by shelling out to each provider’s own CLI/SDK-backed tooling (terraform, ansible, kubectl, aws/az/gcloud where relevant) and to git/ssh for deploying to the user’s own servers. That requires the same class of broad, statically-unknowable filesystem access that justifies classic for the cloud provider CLIs themselves (aws-cli, google-cloud-sdk, azure-cli):

  • Cloud provider credentials/config in their standard per-provider locations (~/.aws/, ~/.config/gcloud/, Terraform state and provider caches, etc.), read by the tools mydevops shells out to on the user’s behalf.
  • SSH private keys anywhere under the user’s home (~/.ssh/ or a path the user names in mydevops.yml) used to connect to the user’s own deployed servers.
  • Arbitrary project directories: mydevops is invoked from wherever the user’s project lives — there is no fixed location to scope access to, and it writes generated artifacts (Dockerfiles, CI pipelines, Terraform modules, Ansible playbooks) directly into that project tree.

None of these paths are knowable at snap build time — they’re determined per-invocation by the user’s own project layout and by which cloud provider(s)/servers a given mydevops.yml targets.

I understand that strict confinement is generally preferred over classic.

I’ve tried the existing interfaces to make the snap work under strict confinement: home only covers $HOME itself, not arbitrary project directories mounted or checked out elsewhere; ssh-keys covers ~/.ssh but not a user-specified key path from mydevops.yml, nor the cloud-provider config directories above; personal-files/system-files require enumerating exact paths in advance, which doesn’t work here since the paths (project directory, SSH key location, which cloud provider’s config directory is relevant) are chosen by the user’s own config file at runtime, not fixed at build time.

This request has been added to the queue for review by the @reviewers team.

Hey @Ronaldodev :slight_smile:

While the justification provided seems reasonable, classic confinement is a sensitive matter and it is reserved for mature, well-known applications published by mature, well-known entities. As of today, I believe that mydevops doesn’t meet this criteria because of the following reasons:

  • The project seems to be very fresh, according to the upstream repository
  • The projects seems to have little/none community around according to upstream repository (contributors, issues, PRs, etc.)
  • I could not find evidences that the project has a strong enough user base currently

Thus, considering these factors, I think mydevops should not get classic confinement as of now.