Projet

Général

Profil

Scénario #28966

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

Ajouté par Emmanuel GARETTE il y a plus de 4 ans. Mis à jour il y a presque 4 ans.

Statut:
Terminé (Sprint)
Priorité:
Normal
Assigné à:
Catégorie:
-
Début:
23/03/2020
Echéance:
10/04/2020
% réalisé:

100%

Points de scénarios:
7.0
Restant à faire (heures):
0.00 heure
Estimation basée sur la vélocité:
Release:
Liens avec la release:
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)

Sous-tâches

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


Demandes liées

Lié à Distribution EOLE - Tâche #29959: eole-workstation : forcer la mise à jour de la mine au démarrage du minion Fermé 20/04/2020
Lié à 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é 31/03/2020

Révisions associées

Révision a0fe9bb2 (diff)
Ajouté par Matthieu Lamalle il y a environ 4 ans

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/2019 supprimé
  • 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:

  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 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

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)

Formats disponibles : Atom PDF