Scénario #28966
Ecostation doit fonctionner en version 2.7.1 et etre compatible avec un annuaire de type AD
100%
Description
- l'interface web, qui historiquement allait chercher la liste des stations dans le fichier machines.db puis en base MySQL via la commande
manage_stations.py --list-all
- le scripts perl
arret_stations.pl
pour gérer l'arrêt des stations viacliscribe.py
- le scripts perl
start_stations.pl
pour gérer le réveil des stations utilisant (entre-autres)wakeonlan
- le script
annule-ecostation.exe
: pour annuler l'arrêt programmé lorsque l'on est connecté sur un poste impacté (#26483)
Une partie des commandes utilisant l'ancien client Scribe peut être directement remplacée par des commandes salt comme cela a été fait pour la gestion des clients dans l'EAD : #28153
On me signale qu'on doit pouvoir récupérer les adresses MAC dans les grains :
root@scribe:~# salt 'PC-326472.dompedago.etb1.lan' grains.get hwaddr_interfaces PC-326472.dompedago.etb1.lan: ---------- Realtek RTL8139C+ Fast Ethernet NIC: 02:00:0A:01:02:65
Mais cela nécessite que les stations répondent, il faudra à terme envisager la publication de certaines informations dans la mine
Solutions à mettre en œuvre¶
- Pour EOLE >= 2.7.1 (NB : vérifier ensemble les branches git utilisées)
- Dans un premier temps, on se concentrera sur :
- la liste des stations et leur gestion dans l'interface
- l'arrêt programmé des stations
- Si il reste du temps, faire des propositions pour :
- le réveil des stations
- le script d'annulation de l'arrêt
Critères d'acceptation¶
- l'application web ecoStations est fonctionnelle sur Scribe 2.7.1
- l'arrêt des stations est fonctionnel sur Scribe 2.7.1
- le test squash SCRIBE-T10-003 - ecoStations est passant (il ne va pas jusqu'au réveil "réel des stations)
Sous-tâches
Demandes liées
Révisions associées
Récupération des machiens depuis salt et arret stations ref #28966
Historique
#1 Mis à jour par Joël Cuissinat il y a environ 4 ans
- Tracker changé de Demande à Scénario
- Projet changé de ecoStations à Distribution EOLE
- Début
19/09/2019supprimé - Release mis à EOLE 2.7.1.3
- Points de scénarios mis à 4.0
#2 Mis à jour par Joël Cuissinat il y a environ 4 ans
- Description mis à jour (diff)
#3 Mis à jour par Joël Cuissinat il y a environ 4 ans
- Description mis à jour (diff)
- Echéance mis à 10/04/2020
- Version cible mis à Prestation Cadoles MEN 13-15
- Début mis à 23/03/2020
#4 Mis à jour par Joël Cuissinat il y a environ 4 ans
- Points de scénarios changé de 4.0 à 5.0
#5 Mis à jour par Joël Cuissinat il y a environ 4 ans
- Points de scénarios changé de 5.0 à 6.0
#6 Mis à jour par Joël Cuissinat il y a environ 4 ans
- Points de scénarios changé de 6.0 à 7.0
#7 Mis à jour par Gilles Grandgérard il y a environ 4 ans
Effectivement, nous ne pouvons pas exécuter de commande Salt vers une machine "offline".
Cela implique :
- Du'il faut avoir (maintenir) la liste des machines/MAC "à côté" de Salt (voir avec Dad quelle serait la meilleur option pour obtenir cette liste). Garder à l'esprit que les machines doivent être rattachée à salt au moins une fois avant de pouvoir être visible dans ecoStation.
- pour redémarrer la station : utiliser cette liste sans appel à Salt
- Pour l'arrêt: pas de problème Salt peut le faire.
#8 Mis à jour par Gilles Grandgérard il y a environ 4 ans
pour toutes les interfaces: salt 'minion' grains.get hwaddr_interfaces
pour une seul interface dont on connait le nom: salt 'minion' grains.get 'hwaddr_interfaces:enp3s0f0'
ça veut dire qu’il faut que les minions pousse cette information dans la mine. https://docs.saltstack.com/en/latest/topics/mine/index.html
#9 Mis à jour par Daniel Dehennin il y a environ 4 ans
Pour ce qui est de la mine, je viens de faire un test et ça semble bien fonctionner:
- Créer les répertoires personnalisés
# mkdir -p /srv/{salt,pillar}
- Définir un pillar pour les minions avec ce que l’on souhaite, créer le fichier `/srv/pillar/mine.sls` contenant:
mine_functions: test.ping: [] file.read: # This is really dangerous - /etc/passwd # We can't have several dict key with the same name # So we define a good name mac_addresses mac_addresses: - mine_function: grains.get - hwaddr_interfaces # all_grains contains all the grains but we need to parse the output all_grains: - mine_function: grains.items
- associer ce pillar aux minions
# cp /usr/share/eole/saltstack/pillar/top.sls /srv/pillar/top.sls # cat >> /srv/pillar/top.sls <<EOF '*': - mine EOF
- rafraichir les pillars
# salt '*' saltutil.refresh_pillar
- mettre à jour la mine
# salt '*' mine.update
Il reste à accéder à la mine, il est possible de le faire depuis plusieurs endroit:
- Accès directe au cache depuis le master qui renvoit toutes les informations de la mine pour un minion (ou plusieurs)
# salt-run cache.mine '*'
- Locallement depuis le `master`
# salt-run mine.get '*' mac_addresses
- Depuis un autre minion
# salt-call mine.get '*' file.read
- Le master demande à un minion d’accéder aux informations de la mine
# salt 'minion1' mine.get 'minion2' all_grains
- Depuis un template `jinja2`
{%- set macs = salt['mine.get']('*', 'mac_addresses') %} {%- for minion_id, mac_addresses in macs.items() %} The minion {{ minion_id }} has the following MAC addresses: {%- for interface, mac_address in mac_addresses.items() %} - for interface {{ interface }}, the MAC address is {{ mac_address }} {%- endfor %} {%- endfor %}
Il semble donc qu’il faille:
- ajouter un ciblage de pillar pour les stations clients: https://dev-eole.ac-dijon.fr/projects/eole-workstation/repository/revisions/master/entry/saltstack/pillar/top.sls
- ajouter un fichier pillar avec les informations que l’on souhaite voire remonter
La mine sera donc mise à jour directement par le minion environ toutes les 60 minutes ou alors nous pouvons ajouter un state
qui forcera sa mise à jour, par exemple:
Update mine for minion {{ grains['id'] }}:
module.run:
- name: mine.update
Qui serait exécuté à la fin de la formula.
#10 Mis à jour par Emmanuel GARETTE il y a environ 4 ans
- Assigné à mis à Matthieu Lamalle
#11 Mis à jour par Daniel Dehennin il y a environ 4 ans
La mise à jour des pillars sur le minion se fait :
- automatiquement
- lors du démarrage du minion (donc au boot de la machine)
- lors de l’exécution de la commande :
salt 'minion' state.apply
- lors de l’exécution de la commande :
salt 'minion' pillar.items
- manuellement
- lors de l’exécution de la commande :
salt 'minion' saltutil.refresh_pillar
- lors de l’exécution de la commande :
La mine, en revanche, est mise à jour indépendamment toutes les 60 minutes par défaut.
Ainsi, si le pillar est en place avant l’appareillement d’un minion au master, il n’y a rien d’autre à faire.
Pour diagnostiquer une absence dans la mine, il faut :
- Vérifier si le pillar est en place grâce à la commande :
salt 'minion' pillar.get mine_functions
- Vérifier si la mine est à jour pour le minion avec la commande :
salt-run cache.mine 'minion'
Si la mine n’est pas encore à jour lorsque vous souhaitez l’utiliser c’est que le délais n’est pas arrivé à son terme, exécutez la commande suivante : salt 'minion' mine.update
.
Il est possible de diminuer l’intervalle de la première mise à jour de la mine en ajoutant un state
dédié à la fin du highstate
qui est exécuté au démarrage du minion.
#12 Mis à jour par Daniel Dehennin il y a presque 4 ans
- Lié à Tâche #29959: eole-workstation : forcer la mise à jour de la mine au démarrage du minion ajouté
#13 Mis à jour par Daniel Dehennin il y a presque 4 ans
- Lié à Tâche #29827: Validation du scénario : Ecostation doit fonctionner en version 2.7.1 et etre compatible avec un annuaire de type AD ajouté
#14 Mis à jour par Fabrice Barconnière il y a presque 4 ans
- Statut changé de Nouveau à Terminé (Sprint)