Project

General

Profile

Scénario #28966

Ecostation doit fonctionner en version 2.7.1 et etre compatible avec un annuaire de type AD

Added by Emmanuel GARETTE 9 months ago. Updated about 1 month ago.

Status:
Terminé (Sprint)
Priority:
Normal
Assigned To:
Category:
-
Start date:
03/23/2020
Due date:
04/10/2020
% Done:

100%

Story points:
7.0
Remaining (hours):
0.00 hour
Velocity based estimate:
2 days
Release:
Release relationship:
Auto

Description

Il y a plusieurs parties dans ecoStations :
  • 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 via cliscribe.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)

Subtasks

Tâche #29837: Intégrer la mine SaltFerméMatthieu Lamalle

Tâche #29838: Récupérer les machines depuis SaltFerméMatthieu Lamalle

Tâche #29845: Adapter le script pour lancer un arrêt des machinesFerméMatthieu Lamalle

Tâche #29861: Modifier ecostationsFerméEmmanuel GARETTE


Related issues

Related to Distribution EOLE - Tâche #29959: eole-workstation : forcer la mise à jour de la mine au démarrage du minion Fermé 04/20/2020
Related to Distribution EOLE - Tâche #29827: Validation du scénario : Ecostation doit fonctionner en version 2.7.1 et etre compatible avec un annuaire de type AD Fermé 03/31/2020

Associated revisions

Revision a0fe9bb2 (diff)
Added by Matthieu Lamalle 2 months ago

Récupération des machiens depuis salt et arret stations ref #28966

History

#1 Updated by Joël Cuissinat 3 months ago

  • Tracker changed from Demande to Scénario
  • Project changed from ecoStations to Distribution EOLE
  • Start date deleted (09/19/2019)
  • Release set to EOLE 2.7.1.3
  • Story points set to 4.0

#2 Updated by Joël Cuissinat 3 months ago

  • Description updated (diff)

#3 Updated by Joël Cuissinat 3 months ago

  • Description updated (diff)
  • Due date set to 04/10/2020
  • Target version set to Prestation Cadoles MEN 13-15
  • Start date set to 03/23/2020

#4 Updated by Joël Cuissinat 3 months ago

  • Story points changed from 4.0 to 5.0

#5 Updated by Joël Cuissinat 3 months ago

  • Story points changed from 5.0 to 6.0

#6 Updated by Joël Cuissinat 3 months ago

  • Story points changed from 6.0 to 7.0

#7 Updated by Gilles Grandgérard 2 months ago

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 Updated by Gilles Grandgérard 2 months ago

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 Updated by Daniel Dehennin 2 months ago

Pour ce qui est de la mine, je viens de faire un test et ça semble bien fonctionner:

  1. Créer les répertoires personnalisés
    # mkdir -p /srv/{salt,pillar}
    
  2. 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
    
  3. 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
    
  4. rafraichir les pillars
    # salt '*' saltutil.refresh_pillar
    
  5. mettre à jour la mine
    # salt '*' mine.update
    

Il reste à accéder à la mine, il est possible de le faire depuis plusieurs endroit:

  1. 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 '*'
    
  2. Locallement depuis le `master`
    # salt-run mine.get '*' mac_addresses
    
  3. Depuis un autre minion
    # salt-call mine.get '*' file.read
    
  4. Le master demande à un minion d’accéder aux informations de la mine
    # salt 'minion1' mine.get 'minion2' all_grains
    
  5. 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:

  1. 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
  2. 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 Updated by Emmanuel GARETTE about 2 months ago

  • Assigned To set to Matthieu Lamalle

#11 Updated by Daniel Dehennin about 2 months ago

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

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 Updated by Daniel Dehennin about 1 month ago

  • Related to Tâche #29959: eole-workstation : forcer la mise à jour de la mine au démarrage du minion added

#13 Updated by Daniel Dehennin about 1 month ago

  • Related to Tâche #29827: Validation du scénario : Ecostation doit fonctionner en version 2.7.1 et etre compatible avec un annuaire de type AD added

#14 Updated by Fabrice Barconnière about 1 month ago

  • Status changed from Nouveau to Terminé (Sprint)

Also available in: Atom PDF