Déployer Fusion Inventory avec Ansible
Déployer Fusion Inventory sur les postes et effectuer un inventaire depuis Ansible
Le déploiement se fait en plusieurs étapes :
- Installer fusion inventory avec chocolatey
- Modifier les fichiers de configuration
- Adapter le script de lancement
- Lancer un premier inventaire
- 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 }}