[INFO] Création du rôle #1
101
README.md
101
README.md
@ -1,3 +1,102 @@
|
|||||||
# role_hugo
|
# role_hugo
|
||||||
|
|
||||||
Rôle d'installation de gohugo.io
|
Rôle de déploiement de gohugo.io
|
||||||
|
|
||||||
|
## Fonctionnement
|
||||||
|
|
||||||
|
Ce rôle prends en charge le serveur intégré ou l'utilisation de nginx pour servir le site.<br />
|
||||||
|
Afin de ne pas utiliser le serveur intégré, mettre la variable `hugo_nginx_enabled` à `true`.
|
||||||
|
|
||||||
|
## Variables
|
||||||
|
|
||||||
|
### hugo_os
|
||||||
|
|
||||||
|
Nécessaire pour télécharger le bon paquet depuis github.com.
|
||||||
|
|
||||||
|
<span style="text-decoration: underline">Valeur par défaut:</span> `linux`
|
||||||
|
|
||||||
|
|
||||||
|
### hugo_architecture
|
||||||
|
|
||||||
|
Nécessaire pour télécharger le bon paquet depuis github.com.<br />
|
||||||
|
Les architectures disponbiles sont *amd64* et *arm64*.
|
||||||
|
|
||||||
|
<span style="text-decoration: underline">Valeur par défaut:</span> `arm64`
|
||||||
|
|
||||||
|
### hugo_latest_url
|
||||||
|
|
||||||
|
URL pointant vers l'API de github.com fournissant le lien de téléchargement du paquet.
|
||||||
|
|
||||||
|
<span style="text-decoration: underline">Valeur par défaut:</span> `https://api.github.com/repos/gohugoio/hugo/releases/latest`
|
||||||
|
|
||||||
|
### hugo_version
|
||||||
|
|
||||||
|
Version qui sera installée.
|
||||||
|
|
||||||
|
<span style="text-decoration: underline">Valeur par défaut:</span> `latest`
|
||||||
|
|
||||||
|
### hugo_installation_type
|
||||||
|
|
||||||
|
Type d'installation souhaitée (`deb` ou `archive`).
|
||||||
|
|
||||||
|
<span style="text-decoration: underline">Valeur par défaut:</span> `archive`
|
||||||
|
|
||||||
|
### hugo_binary_path
|
||||||
|
|
||||||
|
Emplacement où sera déployer le binaire.
|
||||||
|
|
||||||
|
<span style="text-decoration: underline">Valeur par défaut:</span> `/opt/hugo`
|
||||||
|
|
||||||
|
### hugo_install_command
|
||||||
|
|
||||||
|
Ajouter la commande `hugo` dans le PATH.
|
||||||
|
|
||||||
|
<span style="text-decoration: underline">Valeur par défaut:</span> `false`
|
||||||
|
|
||||||
|
### hugo_data_path
|
||||||
|
|
||||||
|
Emplacement où seront stockées les données.
|
||||||
|
|
||||||
|
<span style="text-decoration: underline">Valeur par défaut:</span> `/srv/hugo`
|
||||||
|
|
||||||
|
### hugo_timer_enabled
|
||||||
|
|
||||||
|
Activer la génération automatique régulière des fichiers statiques.
|
||||||
|
|
||||||
|
<span style="text-decoration: underline">Valeur par défaut:</span> `true`
|
||||||
|
|
||||||
|
### hugo_base_url
|
||||||
|
|
||||||
|
URL utilisée dans la génération des fichiers statiques.
|
||||||
|
|
||||||
|
<span style="text-decoration: underline">Valeur par défaut:</span> aucune
|
||||||
|
|
||||||
|
### hugo_server_listen
|
||||||
|
|
||||||
|
Adresse IP d'écoute du serveur intégré.
|
||||||
|
|
||||||
|
<span style="text-decoration: underline">Valeur par défaut:</span> `0.0.0.0`
|
||||||
|
|
||||||
|
### hugo_server_port
|
||||||
|
|
||||||
|
Port d'écoute du serveur intégré.
|
||||||
|
|
||||||
|
<span style="text-decoration: underline">Valeur par défaut:</span> `8080`
|
||||||
|
|
||||||
|
### hugo_timer_enabled
|
||||||
|
|
||||||
|
Activer la génération automatique tous les jours (`daily`).
|
||||||
|
|
||||||
|
<span style="text-decoration: underline">Valeur par défaut:</span> `true`
|
||||||
|
|
||||||
|
### hugo_nginx_enabled
|
||||||
|
|
||||||
|
Ne pas utiliser le serveur intégré pour servir les fichiers statiques.
|
||||||
|
|
||||||
|
<span style="text-decoration: underline">Valeur par défaut:</span> `false`
|
||||||
|
|
||||||
|
### hugo_nginx_docroot
|
||||||
|
|
||||||
|
Emplacement où les fichiers statiques seront générés pour nginx.
|
||||||
|
|
||||||
|
<span style="text-decoration: underline">Valeur par défaut:</span> `/var/www/hugo`
|
||||||
|
20
defaults/main.yml
Normal file
20
defaults/main.yml
Normal file
@ -0,0 +1,20 @@
|
|||||||
|
---
|
||||||
|
# defaults file for hugo
|
||||||
|
|
||||||
|
hugo_os: linux
|
||||||
|
hugo_architecture: arm64
|
||||||
|
hugo_latest_url: https://api.github.com/repos/gohugoio/hugo/releases/latest
|
||||||
|
hugo_version: latest
|
||||||
|
|
||||||
|
hugo_binary_path: /opt/hugo
|
||||||
|
hugo_install_command: false
|
||||||
|
|
||||||
|
hugo_data_path: /srv/hugo
|
||||||
|
hugo_base_url: ""
|
||||||
|
|
||||||
|
hugo_server_listen: 0.0.0.0
|
||||||
|
hugo_server_port: 8080
|
||||||
|
hugo_timer_enabled: true
|
||||||
|
|
||||||
|
hugo_nginx_enabled: false
|
||||||
|
hugo_nginx_docroot: /var/www/hugo
|
23
handlers/main.yml
Normal file
23
handlers/main.yml
Normal file
@ -0,0 +1,23 @@
|
|||||||
|
---
|
||||||
|
# handlers file for hugo
|
||||||
|
|
||||||
|
- name: Installer la commande
|
||||||
|
ansible.builtin.command:
|
||||||
|
cmd: install -t /usr/local/bin /opt/hugo/hugo
|
||||||
|
become: true
|
||||||
|
|
||||||
|
- name: Redémarrer le service
|
||||||
|
ansible.builtin.systemd:
|
||||||
|
enabled: false
|
||||||
|
daemon_reload: true
|
||||||
|
state: restarted
|
||||||
|
name: hugo.service
|
||||||
|
become: true
|
||||||
|
|
||||||
|
- name: Activer et exécuter la planification
|
||||||
|
ansible.builtin.systemd:
|
||||||
|
enabled: "{{ hugo_timer_enabled }}"
|
||||||
|
daemon_reload: true
|
||||||
|
state: started
|
||||||
|
name: hugo.timer
|
||||||
|
become: true
|
19
meta/main.yml
Normal file
19
meta/main.yml
Normal file
@ -0,0 +1,19 @@
|
|||||||
|
galaxy_info:
|
||||||
|
author: pulsar89.5
|
||||||
|
description: Rôle de déploiement de gohugo.io
|
||||||
|
|
||||||
|
license: GPL-3.0-or-later
|
||||||
|
|
||||||
|
min_ansible_version: 2.1
|
||||||
|
|
||||||
|
platforms:
|
||||||
|
- name: Debian (LXD)
|
||||||
|
versions:
|
||||||
|
- 11
|
||||||
|
|
||||||
|
galaxy_tags:
|
||||||
|
- gohugo.io
|
||||||
|
- hugo
|
||||||
|
- web
|
||||||
|
|
||||||
|
dependencies: []
|
48
tasks/configuration.yml
Normal file
48
tasks/configuration.yml
Normal file
@ -0,0 +1,48 @@
|
|||||||
|
---
|
||||||
|
# tasks file for hugo
|
||||||
|
|
||||||
|
- name: Récupérer les informations sur le dossier des données
|
||||||
|
ansible.builtin.stat:
|
||||||
|
path: "{{ hugo_data_path }}"
|
||||||
|
become: true
|
||||||
|
register: data_path_infos
|
||||||
|
|
||||||
|
- name: Créer l'emplacement des données
|
||||||
|
ansible.builtin.file:
|
||||||
|
state: directory
|
||||||
|
path: "{{ hugo_data_path }}"
|
||||||
|
owner: root
|
||||||
|
group: root
|
||||||
|
mode: u=rw,g=r,o=
|
||||||
|
when: not data_path_infos.stat.exists
|
||||||
|
become: true
|
||||||
|
|
||||||
|
- name: Déployer le service
|
||||||
|
ansible.builtin.template:
|
||||||
|
owner: root
|
||||||
|
group: root
|
||||||
|
mode: u=rw,g=r,o=r
|
||||||
|
src: hugo.service.j2
|
||||||
|
dest: /etc/systemd/system/hugo.service
|
||||||
|
become: true
|
||||||
|
notify: Redémarrer le service
|
||||||
|
|
||||||
|
- name: Activer le service
|
||||||
|
ansible.builtin.systemd:
|
||||||
|
enabled: true
|
||||||
|
daemon_reload: true
|
||||||
|
state: restarted
|
||||||
|
name: hugo.service
|
||||||
|
when: hugo_timer_enabled
|
||||||
|
become: true
|
||||||
|
|
||||||
|
- name: Déployer la planification
|
||||||
|
ansible.builtin.template:
|
||||||
|
owner: root
|
||||||
|
group: root
|
||||||
|
mode: u=rw,g=r,o=r
|
||||||
|
src: hugo.timer.j2
|
||||||
|
dest: /etc/systemd/system/hugo.timer
|
||||||
|
when: hugo_timer_enabled
|
||||||
|
become: true
|
||||||
|
notify: Activer et exécuter la planification
|
49
tasks/installation.yml
Normal file
49
tasks/installation.yml
Normal file
@ -0,0 +1,49 @@
|
|||||||
|
---
|
||||||
|
# tasks file for hugo
|
||||||
|
|
||||||
|
- name: Créer l'emplacement de stockage du binaire
|
||||||
|
ansible.builtin.file:
|
||||||
|
state: directory
|
||||||
|
path: "{{ hugo_binary_path }}"
|
||||||
|
mode: u=rwX,g=rX,o=rX
|
||||||
|
become: true
|
||||||
|
|
||||||
|
- name: Modifier l'URL pour pointer vers la version souhaitée
|
||||||
|
ansible.builtin.set_fact:
|
||||||
|
hugo_latest_url: "{{ hugo_latest_url | replace('latest', version) }}"
|
||||||
|
when: hugo_version != "latest"
|
||||||
|
vars:
|
||||||
|
version: "tags/v{{ hugo_version }}"
|
||||||
|
|
||||||
|
- name: Récupérer le contenu du fichier de version
|
||||||
|
ansible.builtin.uri:
|
||||||
|
url: "{{ hugo_latest_url }}"
|
||||||
|
return_content: true
|
||||||
|
follow_redirects: all
|
||||||
|
register: releases
|
||||||
|
|
||||||
|
- name: Extraire l'URL du paquet
|
||||||
|
ansible.builtin.set_fact:
|
||||||
|
browser_download_url: >
|
||||||
|
{{
|
||||||
|
releases.json.assets |
|
||||||
|
selectattr('browser_download_url', 'search', '.tar.gz') |
|
||||||
|
selectattr('browser_download_url', 'search', hugo_os) |
|
||||||
|
selectattr('browser_download_url', 'search', hugo_architecture) |
|
||||||
|
map(attribute='browser_download_url')
|
||||||
|
}}
|
||||||
|
|
||||||
|
- name: Extraire l'archive
|
||||||
|
ansible.builtin.unarchive:
|
||||||
|
src: "{{ browser_download_url | first }}"
|
||||||
|
dest: "{{ hugo_binary_path }}"
|
||||||
|
remote_src: true
|
||||||
|
list_files: true
|
||||||
|
mode: u=rwX,g=rX,o=rX
|
||||||
|
become: true
|
||||||
|
|
||||||
|
- name: Installer la commande
|
||||||
|
ansible.builtin.command:
|
||||||
|
cmd: install -t /usr/local/bin /opt/hugo/hugo
|
||||||
|
when: hugo_install_command
|
||||||
|
become: true
|
9
tasks/main.yml
Normal file
9
tasks/main.yml
Normal file
@ -0,0 +1,9 @@
|
|||||||
|
---
|
||||||
|
# tasks file for hugo
|
||||||
|
|
||||||
|
- name: Importer les tâches d'installation
|
||||||
|
ansible.builtin.import_tasks: installation.yml
|
||||||
|
|
||||||
|
- name: Importer les tâches de configuration
|
||||||
|
ansible.builtin.import_tasks: configuration.yml
|
||||||
|
when: hugo_install_command
|
24
templates/hugo.service.j2
Normal file
24
templates/hugo.service.j2
Normal file
@ -0,0 +1,24 @@
|
|||||||
|
# {{ ansible_managed }}
|
||||||
|
|
||||||
|
[Unit]
|
||||||
|
Description=HuGO project {{ hugo_base_url }}
|
||||||
|
After=syslog.target
|
||||||
|
After=network.target
|
||||||
|
ConditionFileNotEmpty={{ hugo_data_path }}/config.yaml
|
||||||
|
|
||||||
|
[Service]
|
||||||
|
User=root
|
||||||
|
WorkingDirectory={{ hugo_data_path }}
|
||||||
|
{% if hugo_nginx_enabled %}
|
||||||
|
Type=oneshot
|
||||||
|
ExecStart=/usr/local/bin/hugo --cleanDestinationDir --baseURL {{ hugo_base_url }}
|
||||||
|
ExecStartPost=/usr/bin/rsync --delete-after --recursive --partial {{ hugo_data_path }}/public/ {{ hugo_nginx_docroot }}/
|
||||||
|
{% else %}
|
||||||
|
Type=simple
|
||||||
|
ExecStart=/usr/local/bin/hugo server --cleanDestinationDir --appendPort=false --bind={{ hugo_server_listen }} --port={{ hugo_server_port }} --baseURL={{ hugo_base_url }}
|
||||||
|
Restart=always
|
||||||
|
RestartSec=2s
|
||||||
|
{% endif %}
|
||||||
|
|
||||||
|
[Install]
|
||||||
|
WantedBy=multi-user.target
|
12
templates/hugo.timer.j2
Normal file
12
templates/hugo.timer.j2
Normal file
@ -0,0 +1,12 @@
|
|||||||
|
# {{ ansible_managed }}
|
||||||
|
|
||||||
|
[Unit]
|
||||||
|
Description=HuGO to reload {{ hugo_base_url }}
|
||||||
|
ConditionFileNotEmpty={{ hugo_data_path }}/config.yaml
|
||||||
|
|
||||||
|
[Timer]
|
||||||
|
OnCalendar=daily
|
||||||
|
Persistent=true
|
||||||
|
|
||||||
|
[Install]
|
||||||
|
WantedBy=timers.target
|
Loading…
Reference in New Issue
Block a user