[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
 | 
				
			||||||
		Reference in New Issue
	
	Block a user