All notable changes to this project will be documented in this file.
The format is based on Keep a Changelog, and this project adheres to Semantic Versioning.
0.3.0 - 2024-05-21
Big release for Podlet!
In case you didn't already notice, Podlet is now officially a part of the Containers community! As a part of the transition, a new code of conduct, security policy, and contribution guidelines were added (#76). Additionally, the Podlet container image is now available at ghcr.io/containers/podlet. The existing images at quay.io/k9withabone/podlet and docker.io/k9withabone/podlet are deprecated and will not be receiving updates.
Under the hood, the library used to deserialize Compose files was changed (#73). As a result, only Compose files which follow the Compose specification are supported. The top-level version
field is completely ignored. Most Compose files should still work as before. This was a large change so look out for bugs.
Added support for Quadlet options introduced in Podman v5.0.0 (#75). The headline feature is support for generating Quadlet .pod
files. They can be generated from:
- A Podman command with
podlet podman pod create
. - A Compose file with
podlet compose --pod
. - An existing pod with
podlet generate pod
.- This creates a
.pod
file and a.container
file for each container in the pod.
- This creates a
Note that the existing option for generating Kubernetes Pod YAML from a Compose file was renamed to podlet compose --kube
. Both the --pod
and --kube
options of podlet compose
do not take an argument and instead require the top-level name
field in the Compose file. The name
is used as the name of the pod and in the filename of the created files.
- Add
podlet --binds-to
option. - BREAKING (compose) Rename
podlet compose --pod
topodlet compose --kube
. - (container) Add
Entrypoint=
Quadlet option. - (container) Add
StopTimeout=
Quadlet option. - (container) Support
Notify=healthy
Quadlet option. - (container) Support
no-dereference
option forMount=
. - (container) Add
podman run --preserve-fd
option. - (container) Add
podman run --gpus
option. - (container) Add
podman run --retry
option. - (container) Add
podman run --retry-delay
option. - Add
podman --config
global option. - (pod) Generate
.pod
Quadlet file from command.- Adds the
podlet podman pod create
subcommand. - The
--infra-conmon-pidfile
and--pod-id-file
options were deliberately not implemented as they are set by Quadlet in the generated{name}-pod.service
file and can't be set multiple times.
- Adds the
- BREAKING (compose) Re-add
podlet compose --pod
option.- The
--pod
option causes podlet to create a.pod
Quadlet file in addition to the.container
,.volume
, and.network
files. The containers are linked to the pod and their published ports are moved.
- The
- (generate) Quadlet files from an existing pod and its containers.
- Adds the
podlet generate pod
subcommand.- Runs
podman pod inspect
on the given pod. - Deserializes the output.
- Parses the pod creation command.
- Does the same for each of the pod's containers.
- Runs
- Adds the
- Use Quadlet serializer for
Unit
Display
implementation (#64).- Brings
Unit
inline with the other sections of the generated Quadlet file.
- Brings
- (container) Add
podman run --uts
option. - (container)
--pids-limit
range is-1..=u32::MAX
. - (container) Enforce
--blkio-weight
range10..=1000
. - (container)
--blkio-weight-device
can be specified multiple times. - (container) Don't add empty
PodmanArgs=
when downgrading Podman version. - Correct use of
eyre::bail!()
on non-Unix platforms.
- (clippy) Fix Clippy lint warning for
Idmap
. - (compose)
--kube
help addname
requirement. - Add code of conduct.
- Add security policy.
- Update links to the repository.
- The repository is now at https://github.com/containers/podlet.
- (contributing) Add contribution guidelines.
- Adapted from the Buildah/Podman contribution guidelines.
- Suggests the use of conventional commits and clarifies that the
Signed-off-by
footer is required for a PR to be merged. - Moved and expanded upon the building and continuous integration sections from the
README.md
file to the newCONTRIBUTING.md
file.
- (readme) Update container image location.
- The Podlet container image is now located at ghcr.io/containers/podlet.
- Fix Podman and Quadlet capitalization.
- (readme) Update demo, features, and usage.
- BREAKING (deps) Remove
docker_compose_types
. - BREAKING (compose) Deserialize
compose_spec::Compose
. cli::Unit::is_empty()
- Check each field instead of comparing to the default.
- (compose) Conversion to
quadlet::File
s fromcompose_spec::Compose
. - (compose)
quadlet::Globals
fromcompose_spec::Service
. - (compose) Container Quadlet options from
compose_spec::Service
. - (compose) Container Podman args from
compose_spec::Service
. - (compose)
quadlet::Network
fromcompose_spec::Network
. - (compose)
quadlet::Volume
fromcompose_spec::Volume
. - (compose) Kubernetes YAML from
compose_spec::Compose
. - (container) Destructure in Quadlet option conversion.
- (compose) Move
podlet compose
args into their own struct.
- (deps) Remove
duration-str
dependency.- All usages were replaced with
compose_spec::duration
.
- All usages were replaced with
- Add Podman v5.0.0 to Podman versions.
- Also added v4.9.X aliases to 4.8 and v5.0.X aliases to 5.0.
- (container) Reorder fields to match Quadlet docs.
- (lints) Fix new rust 1.78 clippy lints.
- BREAKING (release-container) Push to ghcr.io/containers/podlet.
- The docker.io/k9withabone/podlet and quay.io/k9withabone/podlet container images will no longer be updated.
- (release-container) Add annotations/labels to manifest/image.
- Adds labels to the Podlet container image and annotations to the multi-arch manifest as suggested by the GitHub packages documentation: https://docs.github.com/en/packages/working-with-a-github-packages-registry/working-with-the-container-registry#labelling-container-images.
- (ci) Bump actions/checkout to v4.
- (ci) Use Buildah container to build Podlet container.
- (deps) Update dependencies.
- (release) Update cargo-dist.
- (release-container) Fix manifest annotation quoting.
- (ci) Use consistent formatting.
- (ci) Add image to manifest when building container.
- (ci) Add
build
job.
0.2.4 - 2024-01-30
- Set compatibility with
--podman-version
(#45) - Add support for Quadlet options introduced in Podman v4.8.0 (#30)
- Container
GIDMap=
ReadOnlyTmpfs=
SubGIDMap=
SubUIDMap=
UIDMap=
- Remove
VolatileTmp=
- Volume
Driver=
Image=
- Image
- Brand new!
- Generate
.image
Quadlet files with:podlet podman image pull
podlet generate image
- All Quadlet file types
ContainersConfModule=
GlobalArgs=
- Container
- Convert relative host paths to absolute paths with
--absolute-host-paths
(#52)- Does not affect paths in the
PodmanArgs=
Quadlet option or Kubernetes YAML files. - As part of the work to implement this, the following Quadlet options are now fully parsed and validated:
AddDevice=
Mount=
Rootfs=
Volume=
DecryptionKey=
- Does not affect paths in the
- Remove ASCII control characters (except whitespace) from container commands
- (readme) Map user into Podlet container (#50, thanks @rugk!)
- (readme) Update demo, features, and usage
- (container) Parse security opts with
str::strip_prefix
- Remove arg serializer's map functionality
- Add Podman v4.9.0 to Podman versions
- Update dependencies
- (ci) Update cargo-dist
0.2.3 - 2023-12-31
- Add support for Quadlet options introduced in Podman v4.7.0 (#29)
- Container
DNS=
DNSOption=
DNSSearch=
PidsLimit=
ShmSize=
Ulimit=
- Kube
AutoUpdate=
- Network
DNS=
- Container
- Add
podlet generate
subcommands for generating Quadlet files from existing:- Containers (#23)
- Networks
- Volumes
- (compose)
network_mode
accept all Podman values (#38)- Improved error message for unsupported values
- (network) Support
<start-IP>-<end-IP>
syntax for--ip-range
- (readme) Podman v4.7.0
- (readme) Update demo and usage
- (ci) Skip container run for conmon v2.1.9
- (lint) Fix new rust 1.75 clippy warnings
- Update dependencies
0.2.2 - 2023-12-15
- Add support for Quadlet options introduced in Podman v4.6.0 (#28)
- (compose) Support volume
driver
field
- (container) Arg
--tls-verify
requires = - (network) Filter out empty
Options=
Quadlet option - Escape newlines in joined Quadlet values (#32)
- (compose) Support
cap_drop
,userns_mode
, andgroup_add
service fields (#31, #34) - (compose) Split
command
string (#36)- When the command is converted to the
Exec=
Quadlet option, it is now properly quoted. When converting to k8s, it is properly split into args.
- When the command is converted to the
- (readme) Podman v4.6.0
- (changelog) Add
git-cliff
configuration
- Use custom serializer for
PodmanArgs=
- Use custom serializer for Quadlet sections
- Update dependencies
0.2.1 - 2023-11-28
- Compose: Read compose file from stdin (#18)
- For
podlet compose
, if a compose file is not provided and stdin is not a terminal, or-
is provided, Podlet will attempt to read a compose file from stdin. - For example
cat compose-example.yaml | podlet compose
orcat compose-example.yaml | podlet compose -
- For
- Truncate when overwriting existing files
- Compose service volumes can be mixed long and short form (#26)
- Readme: Add sample Podlet container usage instructions (#17, thanks @Nitrousoxide!)
- Readme: Update description, add build and local ci instructions
- CI: Update Podman for build and publish of container
- CI: Add container builds to regular checks
- Update dependencies
- CI: Update cargo-dist to v0.5.0
quadlet::writeln_escape_spaces
write to formatter- Consistent use of
eyre::bail
andeyre::ensure
- Add
quadlet::Kube::new()
- Simplify
cli::File::write()
- Split
compose_try_into_quadlet_files()
- Move compose functions into their own module
- Move lints to Cargo.toml, add additional lints
- Fix let-else formatting
0.2.0 - 2023-06-15
- Check for existing systemd unit files with the same name as the service generated by Quadlet from the Podlet generated Quadlet file and throw an error if there is a conflict (#14).
- Use
--skip-services-check
to opt-out.
- Use
- Convert a (docker) compose file (#9) to:
- Multiple Quadlet files
- A pod with a Quadlet kube file and Kubernetes YAML
- Breaking: files are no longer overwritten by default, added
--overwrite
flag if overwriting is desired.
0.1.1 - 2023-04-19
- A container image of Podlet now available on quay.io and docker hub.
- Option flag for outputting to Podman unit directory
--unit-directory
.- Places the generated file in the appropriate directory (i.e.
/etc/containers/systemd
,~/.config/containers/systemd
) for use by Quadlet.
- Places the generated file in the appropriate directory (i.e.
0.1.0 - 2023-04-14
The initial release of Podlet! Designed for Podman v4.5.0 and newer.
- Create Quadlet files:
.container
-podman run
.kube
-podman kube play
.network
-podman network create
.volume
-podman volume create
- Write to stdout, or to a file.
- The file name, if not provided, is pulled from the container name or image, kube file, or network or volume name.
- Options for common systemd unit options
- [Unit]
- Description=
- Wants=
- Requires=
- Before=
- After=
- [Service]
- Restart=
- [Install]
- WantedBy=
- RequiredBy=
- [Unit]