Aller au contenu

🛠️ Création des projets

Un projet est un lieu pour séparer les activités de gestion. Toutes les activités de Sémaphore se déroulent dans le contexte d'un projet.

Les projets sont indépendants les uns des autres, vous pouvez donc les utiliser pour organiser des systèmes non liés au sein d'une seule installation Semaphore. Cela peut être utile pour gérer différentes équipes, infrastructures, environnements ou applications.

Création d'un projet

Depuis le menu en haut à gauche, créez un projet.

projet

Une fois le projet créé, vous avez accès à différents paramètres à configurer :

projet01

Dans le cadre du travail, on peut ajouter ses collègues et leur adjoindre un rôle :

  • Guest : ne peut rien faire à par lister les modèles de tâches, les inventaires... sans pouvoir les visualiser.
  • Task runner : peut lancer des modèles de tâches sans pouvoir visulaiser le contenu et éditer ceux-ci, de mêmes pour les autres paramètres (Dépôts...).
  • Manager : peut tout éditer ou créer, lancer les modèles de tâches mais ne peut pas éditer les paramètres du projet.
  • Owner : peut tout faire.

Ordre de configuration du projet

Pour renseigner les mots de passe (Git, Ansible...) et clés SSH.

Pour renseigner les dépôts comme le dépôt Git dans cet article ou bien un chemin vers un répertoire local.

Pour renseigner les hôtes cibles directement dans Ansible ou depuis un fichier présent sur le dépôt Git.

Pour passer des variables d'environnement Ansible.

Pour créer des tâches qui appelleront les éléments ci-dessus ainsi que le playbook présent sur le dépôt Git.

1. Magasin de clés

Git

Ces creds seront utilisés lors de la configuration du dépôt Git.

Cliquez sur Nouvelle clé puis :

  • Renseignez le nom,
  • Choisissez le type : ici "Connectez-vous avec mot de passe"
  • Connexion : renseignez votre login
  • Mot de passe : le mot de passe correspondant à votre login.
magkey

Une fois les informations saisies et validées, vous ne pouvez plus les récupérer. Si vous avez commis une erreur de saisie, il vous faudra de nouveau renseigner les informations et choisir l'option "remplacer". Seul le nom de la clé est modifiable sans cocher l'option "remplacer".

SSH

Ces creds seront utilisés lors de la création des inventaires, la finalité étant de pouvoir se connecter aux hôtes présents dans celui-ci. Il faudra que votre clé publique SSH ait été au préalable copiée sur les hôtes cibles (ssh-copy-id).

Cliquez sur Nouvelle clé puis :

  • Renseignez le nom.
  • Type : Clé SSH.
  • Nom d'utilisateur : vous pouvez renseigner ici le nom de l'utilisateur qui va se connecter en SSH, c'est le "ansible_user". Semaphore vous laisse l'option de renseigner cette variable ailleurs.
  • Clé privée : renseignez la clé privée SSH.
sshkey

Comme pour la clé précédente, une fois les informations saisies et validées, vous ne pouvez plus les récupérer pour les afficher.

Sudo

Dans le cas où vous utilisez une escalade des privilèges avec sudo et un mot de passe.

Ici je renseigne le mot de passe de l'utilisateur ansibleuser01 sans préciser la case Connexion.

sudo

Vault Password

Il se peut que vous ayez besoin de renseigner des mots de passe dans vos playbooks. Bien évidemment vous les aurez chiffrés avec ansible vault avant.

Afin de les déchiffrer, il vous faudra le mot de passe utilisé. Dans Semaphore ce mot de passe sera appelé depuis un modèle de tâche.

Créez une clé du type "Connectez-vous avec mot de passe"

vault

Mot de passe vide

Il peut être utile de créer une clé du type "Aucune" dans le cas où l'on souhaite par exemple utiliser plus tard un dépôt local situé sur le serveur Semaphore sachant que l'utilisation d'une clé (même vide) est obligatoire lors de la création d'un dépôt.

vide

2. Création d'un dépôt

Rendez-vous dans Dépôts puis cliquez sur "Nouveau référentiel".

gitdepot

3. Inventaire

Rendez-vous sur Inventaire, cliquez sur Nouvel Inventaire puis renseignez les informations :

  • Le nom de votre inventaire qui sera appelé plus tard par le "modèle de base".
  • L'identifiant utilisateur : ici ce sera la clé SSH pour se connecter sur les hôtes de notre inventaire.
  • l'identifiant Sudo : ici nous sélectionnons la clé Sudo. Si vous utilisez sudo sans mot de passe, ne renseignez rien.
  • Type : ici j'ai choisi le Static YAML.
vide

L'inventaire en lui-même est le même que celui utilisé de manière classique avec Ansible. Exemple :

all:
  vars:
    unmotdepasse: !vault |
          $ANSIBLE_VAULT;1.1;AES256
          31..................................................
          ....................................................
          ....................................................
          ..................................................33
debian:
  hosts:
    srv-deb01:
    srv-deb02:
    srv-de03:
      ansible_port: 12003
    srv-deb04:
      ansible_port: 11004

Notez qu'ici j'ai précisé :

  • la variable "unmotdepasse" contenant un mot de passe chiffré avec Ansible Vault.

  • les ports SSH de connexion pour certains hôtes cibles n'utilisant pas le port 22.

L'inventaire renseigné directement dans l'application sert principalement à des tests. Il peut vite s'avérer fastidieux de le renseigner ou de le maintenir à jour directement dans l'application. Vous pouvez utiliser un fichier externe stocké localement ou sur une dépôt Git. Par exemple, vous pouvez créer un fichier inventaire inventory.yaml contenu dans invs/linux/ sur votre dépôt Git puis créer un inventaire dans Sempahore appelant ce fichier :

vide

4. Environnement

Vous devez renseignez un environnement même si celui-ci est vide.

env01

Exemple avec la variable permettant d'éviter le "host key checking" :

env02

5. Création d'un modèle de tâches

Création des vues

Façon de ne pas mélanger tous mes modèles, je vais créer trois vues :

  • Test : pour tester des modèles non finalisés
  • Maintenance : pour contenir mes modèles permettant de mettre à jour mes hôtes cibles (màj sys, applicative...)
  • Déploiement : pour le déploiement de configurations, d'applications, d'utilisateurs....

Cliquez sur le crayon situé à côté de "Tous" puis créez les vues. Validez chaque vue en cliquant du l'icône check puis fermez ensuite en cliquant sur la croix à côté de "Modifier les vues".

modeles

Création d'un modèle

Cliquez sur "Nouveau modèle" puis renseignez comme ci-dessous :

modele

Notez ici que j'appelle le playbook debian-update.yml qui doit exister sur le dépôt Git.

Une fois cela fait, cliquez sur "Run" et cochez l'option "Simulation". Si vous avez des erreurs, celles-ci apparaîtront comme avec l'utilisation d'Ansible en mode CLI. Vous pouvez également activer l'option Debug si besoin de plus de précisions.

Si votre test est réussi, vous pouvez modifier le modèle en modifiant la vue en "Maintenance" puis planifier la tâche. Dans mon exemple à 3h00 du matin tous les jours, juste après les sauvegardes.

modele02

Conseil : ce n'est pas à lié à Semaphore mais pensez à faire plusieurs lots de serveurs avec des updates programmés de manière espacé. Ainsi en cas de mise à jour foireuse, cela permet de limiter la casse.

Les alertes par mail

Les alertes mails ne vous sont adressées uniquement en cas d'un échec partiel (par exemple un hôte qui n'a pas répondu) ou total.

Vous devez configurer le compte mail dans /etc/semaphore/config.json. Exemple :

(...)
    "email_alert": true,
    "email_sender": "semaphore@domain.tld",
    "email_host": "smtp.domain.tld",
    "email_port": "587",
    "email_username": "semaphore@domain.tld",
    "email_password": "MOTDEPASSE",
    "email_secure": true,
(...)

Autorisez les alertes dans la paramètres du projet :

alerts

Enfin, cochez la case pour les utilisateurs concernés en cliquant en bas sur votre login puis "Utilisateurs".

Conclusion

Personnellement, j'ai adopté cette solution au travail après l'avoir testé quelques temps à la maison. Si je trouve le temps, je ferai d'autres articles avec cette fois-ci Windows et OPNSense comme hôtes cibles et voire un troisième article sur la configuration du SSO avec le protocole OpenID Connect. À noter que vous pouvez également faire du CI/CD avec Semaphore UI.

Sources