plugins

Home

Examples

Plugins

Source

Blog

quadlet-resource

version: 0.0.20 |  date: 08/26/2025 |  Manages Linux quadlets |  source code

# SYNOPSIS

Create quadlet resources.

The list of supported resources:

* container
* network
* volume (tbd)

# INSTALL

    $ s6 --install quadlet-resource

# USAGE

## Cli

```
s6 --plg-run quadlet-resource@type=network,name=my-app,rootless
s6 --plg-run quadlet-resource@type=container,name=my-app,rootless,expose=4000,network=my-app.network,add_capability=NET_ADMIN
```

## Raku

```raku
#!raku

# create quadlet network
my $s = task-run "podman network", "quadlet-resource", %(
  :type<network>, 
  :description<podman network>,
  :name<my-app>,
  :subnet<10.10.0.0/24>,
  :gateway<10.10.0.1>,
  :dns<9.9.9.9>,
);

bash "systemctl daemon-reload" if $s<changed>;

# install container quadlet
$s = task-run "app quadlet", "quadlet-resource", %(
  :type<container>, 
  :description<app server>,
  :name<my-app>,
  :containername<my-app-%i>,
  :hostname<my-app-%i>,
  :expose<4000>,
  :image<my-app:%i>,
  :network<my-app.network>,
  :label<app=my-app>,
);

bash "systemctl daemon-reload" if $s<changed>;

# deploy new version of application
bash "ln -s my-app\@.container my-app\@feature-foo.container", %(
  :cwd</etc/containers/systemd>,
);

bash "systemctl daemon-reload";

service-start "my-app\@feature-foo";


# Create regular container, without container template

# install container quadlet
$s = task-run "app quadlet", "quadlet-resource", %(
  :type<container>, 
  :!templated,
  :description<proxy>,
  :name<proxy>,
  :containername<proxy>,
  :hostname(""),
  publish_port => [ "80:80", "443:443", "443:443/udp"],
  :image<ghcr.io/caddybuilds/caddy-cloudflare:alpine>,
  :network<my-app.network>,
  :label<app=my-app,type=proxy>,
  :environment_file</etc/default/proxy>,
  volume => [
      "/etc/caddy.d:/etc/caddy.d:ro,Z",
      "caddy-data:/data:Z",
      "caddy-config:/config:Z",
  ],
  :add_capability<NET_ADMIN>,
  exec_reload => "/usr/bin/podman exec proxy caddy reload --config /etc/caddy/Caddyfile --force",
  :restart<always>,
);

if $s<changed> {
  bash "systemctl daemon-reload";
  service-start "proxy.service";
}

```

# Parameters

## Common parameters

### type

A quadlet resource type

### name

A quadlet resource name. For type=container it corresponds to template name

### description

A quadlet resource description

### rootless

Boolean. Use rootless mode. Optional. Default is `False` 

## Container resource parameters

### templated

Create resource as quadlet template. Optional, default value is `True`

### containername

A quadlet container name. Applicable for type=container

### hostname

A quadlet resource hostname. Applicable for type=container. Default value is `app_%i`.

### image

Container image, applicable for type=container

### publish_port

publish_ports exposed, applicable for type=container, default value is ``, could be List or String 

### network

Pod network, applicable for type=container. Optional. Default value is `host`

### restart

default value is ``

### expose

default value is ``

### volume

default value is ``, could be List or String

### add_capability

default value is ``, could be List or String

### environment_file

default value is ``

### exec_reload

default value is ``

## Network resource parameters

### dns

Optional. Default value is ``

### gateway

Optional. Default value is ``

### subnet

Optional. Default value is ``

# Author

[Alexey Melezhik](mailto:melezhik@gmail.com)