feat: Create role
This commit is contained in:
parent
d1d57b255e
commit
2b011bf62a
35
README.md
35
README.md
@ -1,3 +1,34 @@
|
||||
# role_modele
|
||||
# role_podman
|
||||
|
||||
Modèle
|
||||
Rôle de déploiement de podman.
|
||||
|
||||
## Pré-requis
|
||||
|
||||
Ce rôle créer un utilisateur à l'aide de ce rôle qu'il faut donc installé lors de l'exécution d'un playbook.<br>
|
||||
Afin d'installer les deux rôles dans un playbook :
|
||||
|
||||
```bash
|
||||
$ cd playbook_podman
|
||||
$ tee <<EOF
|
||||
---
|
||||
|
||||
- name: users
|
||||
scm: git
|
||||
src: ssh://gitea@git.ykn.fr:12393/ansible/role_users.git
|
||||
version: alpha
|
||||
|
||||
- name: podman
|
||||
scm: git
|
||||
src: ssh://gitea@git.ykn.fr:12393/ansible/role_podman.git
|
||||
version: alpha
|
||||
EOF
|
||||
$ ansible-galaxy install -fr requirements_roles.yml
|
||||
```
|
||||
|
||||
## Variables
|
||||
|
||||
### podman_containers
|
||||
|
||||
Définition des conteneurs à déployer.
|
||||
|
||||
<span style="text-decoration: underline">Valeur par défaut:</span> aucune
|
||||
|
15
defaults/main.yml
Normal file
15
defaults/main.yml
Normal file
@ -0,0 +1,15 @@
|
||||
---
|
||||
# defaults file for podman
|
||||
|
||||
podman_containers: {}
|
||||
# Exemple:
|
||||
# - image: docker.io/wallabag/wallabag:latest
|
||||
# name: wallbag
|
||||
# userns: keep-id
|
||||
# volumes:
|
||||
# - wallbag-data:/var/www/wallabag/data
|
||||
# - wallbag-image:/var/www/wallabag/web/assets/images
|
||||
# ports:
|
||||
# - 80:80/tcp
|
||||
# environment_vars:
|
||||
# - SYMFONY__ENV__DOMAIN_NAME=https://wallbag.ykn.fr
|
@ -1,7 +1,7 @@
|
||||
galaxy_info:
|
||||
namespace: ykn
|
||||
author: pulsar89.5
|
||||
description: Rôle modèle
|
||||
description: Rôle de déploiement de podman
|
||||
|
||||
license: GPL-3.0-or-later
|
||||
|
||||
@ -10,6 +10,6 @@ galaxy_info:
|
||||
platforms:
|
||||
- name: Debian
|
||||
versions:
|
||||
- all
|
||||
- sid
|
||||
|
||||
dependencies: []
|
||||
|
55
tasks/configuration.yml
Normal file
55
tasks/configuration.yml
Normal file
@ -0,0 +1,55 @@
|
||||
---
|
||||
# tasks file for podman
|
||||
|
||||
- name: Créer l'utilisateur dédié
|
||||
ansible.builtin.include_role:
|
||||
name: users
|
||||
vars:
|
||||
users:
|
||||
- name: "{{ container_user }}"
|
||||
comment: Dedicated Podman user ({{ container.name }})
|
||||
update_password: on_create
|
||||
password_lock: true
|
||||
shell: /bin/bash
|
||||
|
||||
- name: Créer le chemin de stockage des définitions
|
||||
ansible.builtin.file:
|
||||
path: "{{ container_basepath }}"
|
||||
state: directory
|
||||
owner: "{{ container_user }}"
|
||||
group: "{{ container_user }}"
|
||||
mode: u=rwX,g=rwX,o=
|
||||
become: true
|
||||
|
||||
- name: Créer le volume
|
||||
containers.podman.podman_volume:
|
||||
name: "{{ item.split(':')[0] }}"
|
||||
when: container.volumes | length > 0
|
||||
loop: "{{ container.volumes }}"
|
||||
notify: Redémarrer le conteneur
|
||||
|
||||
- name: Déployer le conteneur
|
||||
ansible.builtin.template:
|
||||
src: podman-quadlet.container.j2
|
||||
dest: "{{ container_basepath }}/{{ container_filename }}"
|
||||
owner: "{{ container_user }}"
|
||||
group: "{{ container_user }}"
|
||||
mode: u=rw,g=rw,o=
|
||||
become: true
|
||||
register: deploy_container
|
||||
|
||||
- name: Activer le lingering
|
||||
ansible.builtin.command:
|
||||
cmd: "loginctl enable-linger {{ container_user }}"
|
||||
creates: /var/lib/systemd/linger/{{ container_user }}
|
||||
become: true
|
||||
|
||||
- name: Démarrer ou redémarrer le conteneur
|
||||
ansible.builtin.systemd_service:
|
||||
name: "{{ container_filename | replace('.container', '.service') }}"
|
||||
state: "{{ 'restarted' if deploy_container.changed else 'started' }}"
|
||||
enabled: true
|
||||
daemon_reload: true
|
||||
scope: user
|
||||
become: true
|
||||
become_user: "{{ container_user }}"
|
13
tasks/installation.yml
Normal file
13
tasks/installation.yml
Normal file
@ -0,0 +1,13 @@
|
||||
---
|
||||
# tasks file for podman
|
||||
|
||||
- name: Installer les paquets
|
||||
ansible.builtin.apt:
|
||||
name:
|
||||
- dbus-user-session
|
||||
- podman
|
||||
- rootlesskit
|
||||
- slirp4netns
|
||||
- systemd-container
|
||||
state: present
|
||||
become: true
|
18
tasks/main.yml
Normal file
18
tasks/main.yml
Normal file
@ -0,0 +1,18 @@
|
||||
---
|
||||
# tasks file for podman
|
||||
|
||||
- name: Importer les tâches d'installation
|
||||
tags: installation
|
||||
ansible.builtin.import_tasks: installation.yml
|
||||
|
||||
- name: Importer les tâches de configuration
|
||||
tags: configuration
|
||||
ansible.builtin.include_tasks: configuration.yml
|
||||
loop: "{{ podman_containers }}"
|
||||
loop_control:
|
||||
label: "{{ container.name }}"
|
||||
loop_var: container
|
||||
vars:
|
||||
container_user: "podman-{{ container.user | default(container.name) }}"
|
||||
container_basepath: "/home/{{ container_user }}/.config/containers/systemd"
|
||||
container_filename: "podman-{{ container.name }}.container"
|
35
templates/podman-quadlet.container.j2
Normal file
35
templates/podman-quadlet.container.j2
Normal file
@ -0,0 +1,35 @@
|
||||
# {{ ansible_managed }}
|
||||
|
||||
[Unit]
|
||||
Description=Wallbag container
|
||||
|
||||
[Container]
|
||||
HostName={{ inventory_hostname }}
|
||||
|
||||
Image={{ container.image }}
|
||||
ContainerName={{ container.name }}
|
||||
|
||||
{% if container.get('userns', '') | length > 0 %}
|
||||
UserNS={{ container.userns }}
|
||||
{% endif %}
|
||||
|
||||
AutoUpdate=registry
|
||||
|
||||
{% for volume in container.get('volumes', []) %}
|
||||
Volume={{ volume }}
|
||||
{% endfor %}
|
||||
|
||||
{% for port in container.get('ports', []) %}
|
||||
PublishPort={{ port }}
|
||||
{% endfor %}
|
||||
|
||||
{% for environment in container.get('environment_vars', []) %}
|
||||
Environment={{ environment }}
|
||||
{% endfor %}
|
||||
|
||||
[Service]
|
||||
Restart=on-failure
|
||||
TimeoutStartSec=900
|
||||
|
||||
[Install]
|
||||
WantedBy=default.target
|
Loading…
Reference in New Issue
Block a user