Déployer Fusion Inventory sur les postes et effectuer un inventaire depuis Ansible

Le déploiement se fait en plusieurs étapes :

  1. Installer fusion inventory avec chocolatey
  2. Modifier les fichiers de configuration
  3. Adapter le script de lancement
  4. Lancer un premier inventaire
  5. Créer une tâche planifiée pour lancer des inventaires réguliers.

Installation de Fusion Inventory

Nous utilisons Chocolatey pour installer Fusion Inventory.

Chocolatey est pratique et permet de mettre faillement à jour les paquets installés.

- hosts: windows
  tasks:
   - name: Installation de FusionInventory
     win_chocolatey:
       name: fusioninventory-agent.install
       state: latest

L’installation de Fusion Inventory se fait dans le répertoire “C:\Program Files\FusionInventory-Agent”. Au sein de ce répertoire se trouvent plusieurs fichiers “.bat”, destinés à lancer les inventaires. L’un d’eux, “fusioninventory-agent.bat”, permet de récolter les données du poste et de les envoyer au serveur glpi pour être intégré dans l’inventaire. Ce script s’appuit sur un fichier de configuration (agent.cfg), qui se trouve dans “C:\Program Files\FusionInventory-Agent\etc”.

Configuration du fichier de configuration

Le fichier “agent.cfg” n’existe pas directement. Il y a un fichier .sample à titre d’exemple. Dans notre cas, nous allons copier un fichier “agent.cfg” depuis Ansible. Notons que nous pourrions faire de plusieurs façon, mais que celle-ci à l’avantge d’être plus rapide.

- hosts: windows
  tasks:
   - name : copie du fichier de configuration
     win_copy:
       src: /etc/ansible/sources/agent.cfg
       dest: 'C:\Program Files\FusionInventory-Agent\etc\agent.cfg'
       remote_src: no

***Note : Nous changeons le paramètre “server” dans le fichier “agent.cfg” : ***

server = https://server.domain.tld/plugins/fusioninventory/

Adaptation du script de lancement de l’inventaire

Le script “fusioninventory-agent.bat” se lance avec l’argument “-s https://server.domain.tld/plugins/fusioninventory/". Comme nous avons défini ce paramètre dans le fichier de configuration de l’agent, nous allons l’utiliser. Le script contient la ligne “‘perl.exe fusioninventory-agent %*’” afin d’accepter en paramètre l’url du serveur. Nous la modifions donc pour utiliser directement le fichier “agent.cfg”.

- hosts: windows
   - name : Modification du bat
     win_lineinfile:
       path: C:\Program Files\FusionInventory-Agent\fusioninventory-agent.bat
       regex: '^perl.exe'
       line: 'perl.exe fusioninventory-agent --conf-file="..\..\etc\agent.cfg" %*'

Nous sommes maintenant prêt à lancer un premier inventaire.

Lancement de l’inventaire

Nous utilisons Ansible pour exécuter le script “fusioninventory-agent.bat”.

- hosts: windows
  tasks:
   - name : Lancement inventaire fusion inventory
     win_shell: cmd.exe /c "C:\Program Files\FusionInventory-Agent\fusioninventory-agent.bat"

Nous sommes désormais capable de lancer un inventaire à la demande de nos postes de travail. Cependant, nous aimerions que l’inventaire soit régulièrement mis à jour. Pour cela, nous allons créer une tâche planifiée sur nos postes de travail.

Création de la tâche planifiée

Note : Une tâche planifiée comporte peut-être un risque de détournement. Il faut éprouver le concept avant de mettre en production.

Là encore nous utilisons powershell pour créer une tâche planifiée. Les commandes sont lancées également via un playbook. Une subtilité ici : la création de la tache planifiée demande des identifiants. Pour le pas les mettre en clair dans le playbook, nous utilisons le Vault fourni par Ansible.

Nous commençons donc par créer un vault

$ ansible-vault encrypt_string 'Password' --name 'localpass_pc'

Nous intégrons ensuite le vault à notre playbook :

- hosts: windows
  vars:
     user_password: !vault |
          $ANSIBLE_VAULT;1.1;AES256
          34641465476346713463633336666466306236323764313132613030303131306164316565393261
          6533653136633563363146445646411313746561353165630a663462366433626136383366613138
          66383113654445451233316176333366666333346162313537633030643066303638323038343439
          6431653334346134640a344564654513779636641157666232326337356234643166313134626538
          6330
  tasks:
   - name : Tache planifiée pour Fusion inventory
     win_shell: |
      $action = New-ScheduledTaskAction -Execute '"C:\Program Files\FusionInventory-Agent\fusioninventory-agent.bat"'
      $trigger = New-ScheduledTaskTrigger -AtLogOn
      Register-ScheduledTask -Action $action -Trigger $trigger -TaskName "Inventaire" -Description "Inventaire Fusion inventory" -User "DOM\User" -Password {{ user_password }}