Semui
Table of Contents
Integrare una repo esistente
Data una repo con la classica struttura:
.
├── ansible.cfg # Config for ansible
├── files # Where config files are stored to be copied on the remote
│ └── basic.txt
├── hosts # All hosts and global vars
├── install.yaml # Meta-playbook to execute
├── LICENSE
├── README.md
└── tasks # Where all the tasks are stored
├── basics.yaml
└── hello.yaml
Possiamo integrarla in Ansible Semaphore con i seguenti passaggi:
-
Creare un progetto: non sempre è necessario ma per ordine sarebbe importante farlo. Inoltre i progetti permettono di definire permessi diversi su chi può eseguire e modificare le tasks.
-
Aggiungere una chiave per accedere alla repository. Questo bisogna farlo nella sezione Key Store. Se la repository è pubblica e può essere clonata tramite https bisogna usare la chiave ti tipo
None
. -
Aggiungere la repository nella sezione Repositories.
-
Creare un environment vuoto in quanto le variabili sono definite nel file
hosts
. Per farlo basta andare nella sezione Environment e inserire in entrambi i campi un json vuoto:{}
-
Per eseguire le tasks sarà necessario avere una chiave di accesso verso i server. Generalmente questa chiave è di tipo ssh. Per aggiungere una chiave e necessario:
- Collegarsi alla VM in cui semui viene hostato
- Diventare l’user
semui
con il comandosudo -s su semui -s /bin/bash
- Da qui è necessario vedere se una chiave ssh esiste già (molto probabilmente sì). La home di semui si trova in
/opt/semui
quindi la chiave si troverà in/opt/semui/.ssh/
. Se la chiave esiste non serve ricrearla, se non esiste è necessario crearla con il comandossh-keygen -t ed5519
. - Copiare la chiave pubblica ed inserirla in tutti i server su cui si dovranno eseguire delle tasks
- Dall’account di semui è necessario collegarsi con ssh verso tutti i server su cui si eseguiranno le tasks per aggiungere le loro chiavi ai
known_hosts
. - Copiare la chiave privata ed inserirla in una nuova chiave nella webui sotto la sezione
Key store
.
-
Creare un inventario che sarà collegato al file
hosts
sulla repository. Per farlo basta andare nella sezione Inventory. Per le credenziali bisogna usare la chiave ssh aggiunta nel passo 4. Per il tipo selezionareFile
e scrivere il path del filehosts
nella repo. Se la struttura è come quella presentata all’inizio basta scriverehosts
. -
Essendo che un classico
install.yaml
ha al sui interno tutte le tasks che possono essere eseguite in quella repository, bisogna dividere manualmente le tasks relative agli host in modo da poterle eseguire separatamente. Per farlo si va nella sezione Task Templates.
- Si selezione il tipo
Task
- Come
name
si può mettere quello che si vuole, per essere consistenti andrebbe messo il nome dell’host (es. telegram-bot, dynamik, ecc.) - Per il
Playbook Filename
bisogna mettereinstall.yaml
(sempre se la repository è come quella indicata sopra). - Per l’
Inventory
si mette quello creato in precedenza. - Per l’
Environment
si mette quello creato in precedenza. - Come argomenti aggiuntivi per la CLI dobbiamo specificare su tutto l’install, vogliamo eseguire solo le tasks relative ad un certo hosts (es. dynamik), quindi scriviamo
["--limit", "dynamik"]
Varie note:
- Non clona i sottomoduli di una repo (https://github.com/ansible-semaphore/semaphore/issues/525)
- Clona una repo ogni volta che si lancia una tasks che la riguarda
- Per la chiave ssh è necessario diventare user semui sulla VM e generare coppia di chiavi. Da li per ogni macchina a cui ci si vuole collegare è necessario farlo a mano per la prima volta se no ansible si lamenta che non riesce a verificare la chiave remota.
Permessi sugli users
Semui è configurato con ldap, per accedere quindi si possono usare le proprie credenziali. Purtroppo però se si vuole diventare admin è necessario eseguire sulla macchina il seguente comando:
/opt/semui/semaphore user change-by-login --login {{ user }} --admin
Dove {{ user }}
è il proprio nome utente che corrisponde a ldap