containers / podlet

Generate Podman Quadlet files from a Podman command, compose file, or existing object
https://crates.io/crates/podlet
Mozilla Public License 2.0
422 stars 12 forks source link

Support for Interpolation in Compose Files #81

Open Koli0842 opened 4 months ago

Koli0842 commented 4 months ago

I am trying to create systemd unit files for my Immich deployment from their provided docker-compose file, in which an env_file is specified and some variables are referenced by the ${VAR_NAME} syntax. Looks like podlet does not attempt to resolve them, resulting in errors like

Error:
   0: error converting compose file
   1: error reading compose file
   2: File `docker-compose.yml` is not a valid compose file
   3: services.immich-server.image: invalid image tag: image tag contains invalid character '$', tags must only contain ASCII letters (a-z, A-Z), digits (0-9), dots (.), underscores (_), and dashes (-) at line 16 column 12

While I am not sure systemd supports loading an env file and resolve variables within the unit files, it could already be a step forward to resolve the variables within podlet and have the unit files generated with static values at the time of running the command, along with perhaps a warning to the user that further changes to the env_file will not get automatically picked up by systemd units

k9withabone commented 4 months ago

I think what you are looking for is interpolation. As mentioned in the README, this is not yet supported by Podlet. It's on my list of things to do for the compose_spec library, see k9withabone/compose_spec_rs#3.

The env_file field of a Compose service is already supported. It is translated to the EnvironmentFile= Quadlet option.

Koli0842 commented 4 months ago

That is correct, sorry for my redundancy!

akostadinov commented 1 week ago

IMHO the implementation should include adding support to quadlet. Because otherwise one would have to remember runnig podlet on change of environment which will be frustrating.

k9withabone commented 1 week ago

the implementation should include adding support to quadlet.

You should create an issue in the Podman repo as Quadlet is developed there.