Update functionality
This commit is contained in:
83
README.md
83
README.md
@@ -222,6 +222,89 @@ podman_pods:
|
|||||||
restart_policy: "always"
|
restart_policy: "always"
|
||||||
```
|
```
|
||||||
|
|
||||||
|
### Systemd Service Generation
|
||||||
|
|
||||||
|
The role can automatically generate systemd service files for containers and pods. This functionality helps in managing container lifecycle through systemd.
|
||||||
|
|
||||||
|
* `podman_generate_systemd`: Enable systemd service generation (default: `true`)
|
||||||
|
* `podman_systemd_dir`: Directory for generated service files (default: `/etc/systemd/system`)
|
||||||
|
|
||||||
|
**Global Systemd Options** (`podman_systemd_options`):
|
||||||
|
|
||||||
|
```yaml
|
||||||
|
podman_systemd_options:
|
||||||
|
new: true # Generate new service files
|
||||||
|
force: true # Overwrite existing files
|
||||||
|
restart_policy: unless-stopped # Default restart policy
|
||||||
|
time: 120 # Stop timeout in seconds
|
||||||
|
no_header: false # Include header in service files
|
||||||
|
wants: [] # Systemd unit Wants
|
||||||
|
after: [] # Systemd unit After
|
||||||
|
requires: [] # Systemd unit Requires
|
||||||
|
container_prefix: "" # Prefix for container service names
|
||||||
|
pod_prefix: "" # Prefix for pod service names
|
||||||
|
restart_sec: 30 # Restart delay in seconds
|
||||||
|
```
|
||||||
|
|
||||||
|
**Per-Container/Pod Configuration:**
|
||||||
|
|
||||||
|
You can override global systemd options for individual containers or pods:
|
||||||
|
|
||||||
|
```yaml
|
||||||
|
podman_containers:
|
||||||
|
- name: webapp
|
||||||
|
image: nginx:latest
|
||||||
|
systemd:
|
||||||
|
restart_policy: always
|
||||||
|
after: ["network.target"]
|
||||||
|
wants: ["network-online.target"]
|
||||||
|
restart_sec: 10
|
||||||
|
|
||||||
|
podman_pods:
|
||||||
|
- name: database
|
||||||
|
systemd:
|
||||||
|
restart_policy: on-failure
|
||||||
|
requires: ["network.target"]
|
||||||
|
time: 180
|
||||||
|
```
|
||||||
|
|
||||||
|
When `systemd` is defined for a container or pod, the role will:
|
||||||
|
1. Generate a systemd service file
|
||||||
|
2. Place it in the specified directory
|
||||||
|
3. Reload systemd daemon
|
||||||
|
4. (Optional) Enable and start the service
|
||||||
|
|
||||||
|
**Note:** Container/pod-specific options take precedence over global options defined in `podman_systemd_options`.
|
||||||
|
|
||||||
|
### Resource Pruning
|
||||||
|
|
||||||
|
The role can automatically clean up unused Podman resources to free up disk space and maintain system hygiene.
|
||||||
|
|
||||||
|
* `podman_prune_enabled`: Enable automatic pruning of unused resources (default: `true`)
|
||||||
|
* `podman_prune_options`: Configuration for what should be pruned
|
||||||
|
|
||||||
|
```yaml
|
||||||
|
podman_prune_options:
|
||||||
|
container: true # Remove stopped containers
|
||||||
|
image: true # Remove unused images
|
||||||
|
network: true # Remove unused networks
|
||||||
|
system: true # Prune all unused data
|
||||||
|
system_all: true # Prune all unused data including build cache
|
||||||
|
volume: true # Remove unused volumes
|
||||||
|
```
|
||||||
|
|
||||||
|
You can selectively disable certain types of pruning by setting their values to `false`:
|
||||||
|
|
||||||
|
```yaml
|
||||||
|
podman_prune_options:
|
||||||
|
container: true # Still remove containers
|
||||||
|
image: false # Keep all images
|
||||||
|
network: true # Remove unused networks
|
||||||
|
system: false # Keep system data
|
||||||
|
system_all: false # Keep build cache
|
||||||
|
volume: false # Keep all volumes
|
||||||
|
```
|
||||||
|
|
||||||
Dependencies
|
Dependencies
|
||||||
------------
|
------------
|
||||||
|
|
||||||
|
|||||||
@@ -601,3 +601,41 @@ podman_pods: []
|
|||||||
# generate_systemd:
|
# generate_systemd:
|
||||||
# path: "/etc/systemd/system"
|
# path: "/etc/systemd/system"
|
||||||
# restart_policy: "always"
|
# restart_policy: "always"
|
||||||
|
# stop_timeout: 120
|
||||||
|
# names: true
|
||||||
|
# container_prefix: "container"
|
||||||
|
# new: false
|
||||||
|
# no_header: false
|
||||||
|
# wants:
|
||||||
|
# - "network-online.target"
|
||||||
|
# after:
|
||||||
|
# - "network-online.target"
|
||||||
|
# requires:
|
||||||
|
# - "postgresql.service"
|
||||||
|
|
||||||
|
# Systemd service generation configuration
|
||||||
|
podman_generate_systemd: true
|
||||||
|
podman_systemd_dir: /etc/systemd/system
|
||||||
|
podman_systemd_options:
|
||||||
|
new: true
|
||||||
|
force: true
|
||||||
|
restart_policy: unless-stopped
|
||||||
|
time: 120
|
||||||
|
no_header: false
|
||||||
|
separator: ""
|
||||||
|
wants: []
|
||||||
|
after: []
|
||||||
|
requires: []
|
||||||
|
container_prefix: ""
|
||||||
|
pod_prefix: ""
|
||||||
|
restart_sec: 30
|
||||||
|
|
||||||
|
### Prune Configuration
|
||||||
|
podman_prune_enabled: true
|
||||||
|
podman_prune_options:
|
||||||
|
container: true # Remove stopped containers
|
||||||
|
image: true # Remove unused images
|
||||||
|
network: true # Remove unused networks
|
||||||
|
system: true # Prune all unused data
|
||||||
|
system_all: true # Prune all unused data including build cache
|
||||||
|
volume: true # Remove unused volumes
|
||||||
|
|||||||
@@ -6,3 +6,7 @@
|
|||||||
name: podman
|
name: podman
|
||||||
state: restarted
|
state: restarted
|
||||||
listen: restart podman
|
listen: restart podman
|
||||||
|
|
||||||
|
- name: Reload systemd
|
||||||
|
ansible.builtin.systemd:
|
||||||
|
daemon_reload: true
|
||||||
|
|||||||
@@ -46,3 +46,16 @@
|
|||||||
tags:
|
tags:
|
||||||
- podman
|
- podman
|
||||||
- podman-containers
|
- podman-containers
|
||||||
|
|
||||||
|
- name: Generate systemd services
|
||||||
|
ansible.builtin.include_tasks: systemd.yml
|
||||||
|
when: podman_generate_systemd | bool
|
||||||
|
tags:
|
||||||
|
- podman
|
||||||
|
- podman-systemd
|
||||||
|
|
||||||
|
- name: Prune unused resources
|
||||||
|
ansible.builtin.include_tasks: prune.yml
|
||||||
|
tags:
|
||||||
|
- podman
|
||||||
|
- podman-prune
|
||||||
|
|||||||
12
tasks/prune.yml
Normal file
12
tasks/prune.yml
Normal file
@@ -0,0 +1,12 @@
|
|||||||
|
---
|
||||||
|
# Prune unused Podman resources
|
||||||
|
|
||||||
|
- name: Prune Podman resources
|
||||||
|
containers.podman.podman_prune:
|
||||||
|
container: "{{ podman_prune_options.container }}"
|
||||||
|
image: "{{ podman_prune_options.image }}"
|
||||||
|
network: "{{ podman_prune_options.network }}"
|
||||||
|
system: "{{ podman_prune_options.system }}"
|
||||||
|
system_all: "{{ podman_prune_options.system_all }}"
|
||||||
|
volume: "{{ podman_prune_options.volume }}"
|
||||||
|
when: podman_prune_enabled | bool
|
||||||
50
tasks/systemd.yml
Normal file
50
tasks/systemd.yml
Normal file
@@ -0,0 +1,50 @@
|
|||||||
|
---
|
||||||
|
# Generate systemd service files for Podman containers and pods
|
||||||
|
|
||||||
|
- name: Generate systemd service files for containers
|
||||||
|
containers.podman.podman_generate_systemd:
|
||||||
|
name: "{{ item.name }}"
|
||||||
|
dest: "{{ podman_systemd_dir }}"
|
||||||
|
new: "{{ podman_systemd_options.new }}"
|
||||||
|
force: "{{ podman_systemd_options.force }}"
|
||||||
|
restart_policy: "{{ item.systemd.restart_policy | default(podman_systemd_options.restart_policy) }}"
|
||||||
|
time: "{{ item.systemd.time | default(podman_systemd_options.time) }}"
|
||||||
|
no_header: "{{ item.systemd.no_header | default(podman_systemd_options.no_header) }}"
|
||||||
|
separator: "{{ item.systemd.separator | default(podman_systemd_options.separator) }}"
|
||||||
|
wants: "{{ item.systemd.wants | default(podman_systemd_options.wants) }}"
|
||||||
|
after: "{{ item.systemd.after | default(podman_systemd_options.after) }}"
|
||||||
|
requires: "{{ item.systemd.requires | default(podman_systemd_options.requires) }}"
|
||||||
|
container_prefix: "{{ item.systemd.container_prefix | default(podman_systemd_options.container_prefix) }}"
|
||||||
|
pod_prefix: "{{ item.systemd.pod_prefix | default(podman_systemd_options.pod_prefix) }}"
|
||||||
|
loop: "{{ podman_containers | selectattr('systemd', 'defined') | list }}"
|
||||||
|
loop_control:
|
||||||
|
label: "{{ item.name }}"
|
||||||
|
when:
|
||||||
|
- podman_generate_systemd | bool
|
||||||
|
- podman_containers is defined
|
||||||
|
- podman_containers | length > 0
|
||||||
|
notify: Reload systemd
|
||||||
|
|
||||||
|
- name: Generate systemd service files for pods
|
||||||
|
containers.podman.podman_generate_systemd:
|
||||||
|
name: "{{ item.name }}"
|
||||||
|
dest: "{{ podman_systemd_dir }}"
|
||||||
|
new: "{{ podman_systemd_options.new }}"
|
||||||
|
force: "{{ podman_systemd_options.force }}"
|
||||||
|
restart_policy: "{{ item.systemd.restart_policy | default(podman_systemd_options.restart_policy) }}"
|
||||||
|
time: "{{ item.systemd.time | default(podman_systemd_options.time) }}"
|
||||||
|
no_header: "{{ item.systemd.no_header | default(podman_systemd_options.no_header) }}"
|
||||||
|
separator: "{{ item.systemd.separator | default(podman_systemd_options.separator) }}"
|
||||||
|
wants: "{{ item.systemd.wants | default(podman_systemd_options.wants) }}"
|
||||||
|
after: "{{ item.systemd.after | default(podman_systemd_options.after) }}"
|
||||||
|
requires: "{{ item.systemd.requires | default(podman_systemd_options.requires) }}"
|
||||||
|
container_prefix: "{{ item.systemd.container_prefix | default(podman_systemd_options.container_prefix) }}"
|
||||||
|
pod_prefix: "{{ item.systemd.pod_prefix | default(podman_systemd_options.pod_prefix) }}"
|
||||||
|
loop: "{{ podman_pods | selectattr('systemd', 'defined') | list }}"
|
||||||
|
loop_control:
|
||||||
|
label: "{{ item.name }}"
|
||||||
|
when:
|
||||||
|
- podman_generate_systemd | bool
|
||||||
|
- podman_pods is defined
|
||||||
|
- podman_pods | length > 0
|
||||||
|
notify: Reload systemd
|
||||||
Reference in New Issue
Block a user