Ansible : Test pour charger un module via modprobe

Résolu

Bonjour,

Je me met a Ansible et j'essaie de tester si le module XFS est chargé et s'il ne l'est pas, je veux qu'il soit chargé. J'ai installé bien sur la collection community.general.

Pour cela j'essaie cela :

- name: Ckeck si le module existe
  shell:
    cmd: lsmod | grep xfs
  register: modulexfs

- name: Check si la sortie de la commande est vide
  debug:
     var: modulexfs.stdout == ""

- name: Add xfs module
  community.general.modprobe:
     name: xfs
     state: present
  when: modulexfs.stdout == ""

J'ai cette erreur :

TASK [filesysdatas : Ckeck si le module existe] **********************************************************************************************************************************************
fatal: FAILED! => {"changed": true, "cmd": "lsmod | grep xfs", "delta": "0:00:00.006878", "end": "2023-10-11 13:13:53.122986", "msg": "non-zero return code", "rc": 1, "start": "2023-10-11 13:13:53.116108", "stderr": "", "stderr_lines": [], "stdout": "", "stdout_lines": []}

PLAY RECAP ***********************************************************************************************************************************************************************************

Une idée?

Merci


Windows / Chrome 117.0.0.0


L'accès au savoir est la première liberté que chaque homme devrait avoir.

6 réponses

  1. Bon ma réponse est tardive mais c'est mieux tard que jamais!

    Voici comment j'ai fait si cela peut aider d'autres personnes.

    - name: Rassembler les infos sur les packages installés
      package_facts:
        manager: auto
    
    - name: Install xfsprogs pour mkfs.xfs s'il n'est pas installé
      package:
         name: xfsprogs
         state: present
      when: '"xfsprogs" not in ansible_facts.packages'
    
    - name: charge module xfs
      community.general.modprobe:
         name: xfs
         state: present
         persistent: present
      when: ansible_facts.mounts | selectattr('fstype', '!=', 'xfs') | length == 0

    1
    1. Modérateur

      Merci pour ton retour :-)

      0
  2. Ce module comme je l'indique et que j'utilise dans mon playbook permet de charger un module mais il ne permet pas de vérifier qu'il est bien chargé!


    0
    1. Modérateur

      Bonjour pcsystemd,

      Il y a quelque chose qui m'échappe dans ce que tu dis. Reprenons cet exemple de la documentation.

      - name: Add the dummy module and make sure it is loaded after reboots
        community.general.modprobe:
          name: dummy
          state: present
          params: 'numdummies=2'
          persistent: present

      Si je comprends bien ce qui est écrit, cela garantit que le module est chargé, il n'y a donc rien à vérifier. Si le module ne peut pas être chargé (par exemple parce qu'il n'existe pas), le workflow va planter, non ?

      En adaptant cet exemple à ton cas, je dirais qu'on obtient :

      - name: Add the xfs module and make sure it is loaded after reboots
        community.general.modprobe:
          name: xfs
          state: present
          persistent: present

      Si ça n'est pas ce que tu cherches à faire, tu peux t'inspirer de cette réponse. Si on l'adapte, on obtient :

      - name: Add the xfs module if not yet loaded
        community.general.modprobe:
           name: xfs
           state: present
        when: modulexfs.stdout | length == 0

      Bonne chance

      0
      1. Merci.

        J'avais déjà testé cette méthode mais j'ai toujours l'erreur.

        Playbook :

        - name: Ckeck si le module existe
          shell:
            cmd: lsmod | grep xfs
          register: modulexfs
        
        - name: Add xfs module si il n'est pas chargé
          community.general.modprobe:
             name: xfs
             state: present
             persistent: present
          when: modulexfs.stdout | length == 0
        

        Erreur :

        TASK [filesysdatas : Ckeck si le module existe] **********************************************************************************************************************************************
        task path: main.yml:14
        fatal: []: FAILED! => {"changed": true, "cmd": "lsmod | grep xfs", "delta": "0:00:00.007166", "end": "2023-10-16 13:12:07.320674", "msg": "non-zero return code", "rc": 1, "start": "2023-10-16 13:12:07.313508", "stderr": "", "stderr_lines": [], "stdout": "", "stdout_lines": []}
        
        

        0
        1. Modérateur

          Bonjour,

          N'utilisant pas ansible, je ne peux pas exactement te dire. Personnellement j'aurais juste utilisé community.general.modprobe. Concernant le test que tu veux mettre en place, peut-être (en se basant sur cette réponse) :

          - hosts: myhosts
            tasks:
            - name: echo hello
              command: lsmod | grep xfs
              register: result
            - command: modprobe xfs
              when: result.stdout == ""
          0