# SYNOPSIS
Create quadlet resources.
The list of supported resources:
* container
* network
# INSTALL
$ s6 --install quadlet-resource
# USAGE
## Cli
```
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 simple sleep service
my $s = task-run "sleep service", "quadlet-resource", %(
:type<container>,
:!templated,
:description<my sleep>,
:name<mysleep>,
:containername<mysleep>,
:hostname(""),
:image<registry.access.redhat.com/ubi9-minimal:latest>,
:exec<sleep 1000>,
);
if $s<changed> {
bash "systemctl daemon-reload";
service-start "mysleep";
}
### More examples ###
# create quadlet network
$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>;
# create quadlet container template
# so other containers
# will base on it
$s = task-run "container template 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 container
# based on container template
$s = task-run "app deploy", "quadlet-container-deploy", %(
:name<my-app>,
:version<feature-foo>,
);
bash "systemctl daemon-reload";
service-start "my-app\@feature-foo";
# create regular container
# not based on container template
# using :!template option
$s = task-run "proxy 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. One of: `container|network`
### 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)