Hide navigation sidebar
Hide table of contents sidebar
Skip to content
Quickstart Official documentation Setuphelpers Changelog FAQ
Back to top
View this page
Toggle table of contents sidebar

# 6. Utiliser l’API du Serveur WAPT

## 6.1. Aperçu de l’API

Note

Cette documentation ne décrit pas toutes les API (Application Programming Interfaces) disponibles. Elle se concentre sur les plus utiles.

Actuellement, il n’est possible d’utiliser que du code Python pour interagir avec l’interface utilisateur API.

La plupart des API disponibles se trouvent dans le fichier `server.py` situé dans `/opt/wapt/waptserver/server.py` sur Debian.

Des API supplémentaires sont disponibles dans d’autres fichiers tels que `enterprise.py`, `repositories.py`, `wads.py`, etc.

Avertissement

Depuis la version 2.5, la plupart des URL d’API sont protégées par des certificats clients SSL. Par conséquent, il n’est plus possible d’utiliser des requêtes HTML telles que : https://admin:MYPASSWORD@srvwapt.mydomain.lan/api/v1/hosts.

## 6.2. Utiliser l’API du Serveur WAPT

### 6.2.1. Prérequis :

1- Créer un utilisateur WAPT et lui attribuer l’ACL « launch requests » (Il est recommandé de créer un nouvel utilisateur pour les requêtes car le mot de passe est inclus dans la requête).

> Dans la console wapt : Allez dans Server > Gestion des utilisateurs et des droits de Wapt.

> Nouveau compte > `F2` nom comme reporting. (1) & (2)

> Changer le mot de passe de l’utilisateur. (3)

> Cliquez sur « Run Reports » ACL et cliquez sur « Allow ». (4) & (5)

> > Créer un utilisateur de rapport.

2- En fonction de la demande, il peut être nécessaire d’ajouter des ACL sur l’utilisateur déclarant. Ceci peut être vu dans le fichier de requête. Vous pouvez voir ceci dans la requête dans le fichier source de l’api.

>     For Example: On server.py file, you can read this at the begin of the API's resquest groups.

>       Example:
>       @app.route('/api/v3/groups')
>       @app.route('/api/v1/groups')
>       @requires_auth(['admin','view']) Requires either the "admin" or "view" ACL (Access Control List) permissions. Having either one or both of these permissions is sufficient to access this endpoint.

### 6.2.2. Mode opératoire :

Il existe deux méthodes principales pour effectuer une requête api, la méthode en ligne de commande et la méthode basée sur un script.

Tout agent Wapt peut lancer une API.

#### 6.2.2.1. Méthode de la ligne de commande

La méthode de la ligne de commande consiste à exécuter les demandes d’API directement à partir de l’interface de ligne de commande (CLI) à l’aide d’outils tels que cmd sous Windows ou bash sur les systèmes Unix. Cette méthode est rapide et efficace pour les demandes simples ou ponctuelles.

Exemple : Sur un CLI ou bash

    wapt-get server-request "/api/v1/hosts" -c /opt/wapt/wapt-get.ini --wapt-server-user=user --wapt-server-passwd=password

#### 6.2.2.2. Méthode basée sur les scripts

La méthode basée sur les scripts nécessite la création d’un script Python (fichier .py) pour définir et exécuter la demande d’API. Cette méthode est plus souple et plus puissante, car elle permet une logique complexe, la gestion des erreurs et le traitement des données.

1. Se connecter à un agent WAPT Windows.

2. Créez un répertoire nommé `waptdev` à la racine de votre disque, comme c:waptdevAPI_request.

3. Créez un fichier `.py` dans ce répertoire pour éditer la requête, comme api-1.py.

4. Copiez le script python ci-dessous et personnalisez le mot de passe pour votre utilisateur « reporting » et l’API désirée.

5. Exécutez le fichier à l’aide de la commande suivante : & »C:\Program Files (x86)\wapt\wapt-get.exe » c:\waptdev\API_request\api-1.py.

6. La sortie peut être affichée au format CSV : cat api-1.csv.

1. Se connecter à un agent WAPT Linux.

2. Créez un répertoire nommé `waptdev` à la racine de votre disque, comme /wapdev/.

3. Créez un fichier `.py` dans ce répertoire pour éditer la requête, comme api-1.py.

4. Copiez le script python ci-dessous et personnalisez le mot de passe pour votre utilisateur « reporting » et l’API désirée.

5. Exécutez le fichier avec la commande suivante : /opt/wapt/wapt-get.bin /wapdev/api-1.py.

6. La sortie peut être affichée au format CSV : cat api-1.csv.

1. Se connecter à un agent WAPT Linux.

2. Créez un répertoire nommé `waptdev` à la racine de votre disque, comme /wapdev/.

3. Créez un fichier `.py` dans ce répertoire pour éditer la requête, comme api-1.py.

4. Copiez le script python ci-dessous et personnalisez le mot de passe pour votre utilisateur « reporting » et l’API désirée.

5. Exécutez le fichier avec la commande suivante : /opt/wapt/wapt-get.bin /wapdev/api-1.py.

6. La sortie peut être affichée au format CSV : cat api-1.csv.

Le Script Python

    import json
    import waptlicences
    import csv
    import sys
    sys.path.append('/opt/wapt')

    from common import Wapt
    WAPT = Wapt()
    ini_wapt_path = WAPT.config_filename

    user = "reporting"
    password = "[Enter the password for user reporting]"

    def run_report():
        auth_context = waptlicences.waptserver_login(ini_wapt_path, user=user, password=password)
        try:
            res = waptlicences.waptserver_request(ini_wapt_path, action='[enter the desired api like /api/v1/hosts]', auth_context=auth_context)
            if res['http_status'] == 200:
                data = json.loads(res['content'])['result']

                # Debugging: Print the raw data received from the API
                print("Raw data from API:", json.dumps(data, indent=2))

                # Check if data is not empty
                if not data:
                    print("No data received from the API.")
                    return []

                # Check if the first element of data is a list
                if isinstance(data[0], list):
                    for row in data:
                        # Assuming row is a list of strings
                        for i, value in enumerate(row):
                            if isinstance(value, list):
                                row[i] = '|'.join(value)

                    with open('test.csv', 'w', newline='', encoding='utf-8') as csvfile:
                        fieldnames = data[0]
                        writer = csv.writer(csvfile, delimiter=';')
                        writer.writerow(fieldnames)
                        writer.writerows(data[1:])  # Write the rest of the data
                else:
                    print("Unexpected data format. First element is not a list.")
                    return []

                return data
            else:
                raise Exception('Request failed with status %s : %s' % (res['http_status'], res['content']))
        finally:
            waptlicences.waptserver_logout(ini_wapt_path)

    # Call the function and print the returned data
    data = run_report()
    print(repr(data))

## 6.3. Plusieurs exemples de requête API

### 6.3.1. API V1

#### 6.3.1.1. /api/v1/hosts

Récupérer les données enregistrées d’un ou de plusieurs postes.

    wapt-get server-request "/api/v1/hosts" -c /opt/wapt/wapt-get.ini --wapt-server-user=user --wapt-server-passwd=password

Listez tous les postes. Les paramètres disponibles sont :

> - reachable ;

> - computer_fqdn ==> computer_name ;

> - connected_ips ;

> - mac_addresses.

Exemple :

    wapt-get server-request "/api/v1/hosts?columns=reachable,computer_fqdn,connected_ips,mac_addresses&limit=10000" -c /opt/wapt/wapt-get.ini --wapt-server-user=user --wapt-server-passwd=password

#### 6.3.1.2. /api/v1/groups

Obtenir toutes les dépendances qui sont directement affectées à un paquetage de machine.

    wapt-get server-request "api/v1/groups" -c /opt/wapt/wapt-get.ini --wapt-server-user=user --wapt-server-passwd=password

#### 6.3.1.3. /api/v1/host_data

champ dmi

Récupérez toutes les informations DMI d’un poste :

    wapt-get server-request "api/v1/host_data?uuid=[UUID OF THE COMPUTER]&field=[DMI FIELD DESIRED]" -c /opt/wapt/wapt-get.ini --wapt-server-user=user --wapt-server-passwd=password

Exemple pour le champ dmi « os_name » :

    wapt-get server-request "api/v1/host_data?uuid=CDAB699D-CA52-98B6-3AC2-749E66B04841&field=os_name" -c /opt/wapt/wapt-get.ini --wapt-server-user=user --wapt-server-passwd=password

installed_packages

L’option installed_packages va lister tous les paquets installés sur un poste en particulier.

Exemple :

    wapt-get server-request "api/v1/host_data?uuid=CDAB699D-CA52-98B6-3AC2-749E66B04841&field=installed_packages" -c /opt/wapt/wapt-get.ini --wapt-server-user=user --wapt-server-passwd=password

installed_softwares

L’option installed_softwares va lister tous les logiciels installés sur un poste en particulier.

Exemple :

    wapt-get server-request "api/v1/host_data?uuid=CDAB699D-CA52-98B6-3AC2-749E66B04841&field=installed_softwares" -c /opt/wapt/wapt-get.ini --wapt-server-user=user --wapt-server-passwd=password

wsusupdates

L’option wsusupdates va lister toutes les mises à jour installés sur un poste en particulier.

Exemple :

    wapt-get server-request "api/v1/host_data?uuid=CDAB699D-CA52-98B6-3AC2-749E66B04841&field=wsusupdates" -c /opt/wapt/wapt-get.ini --wapt-server-user=user --wapt-server-passwd=password

#### 6.3.1.4. /api/v1/usage_statistics

Récupère les statistiques d’usage du Serveur WAPT.

    wapt-get server-request "api/v1/usage_statistics" -c /opt/wapt/wapt-get.ini --wapt-server-user=user --wapt-server-passwd=password

Note

Cette API est utile si vous avez plusieurs Serveurs WAPT et si vous voulez savoir combien de postes il y a.

### 6.3.2. API V2

#### 6.3.2.1. /api/v2/waptagent_version

Affiche la version du waptagent.exe sur le serveur.

    wapt-get server-request "/api/v2/waptagent_version" -c /opt/wapt/wapt-get.ini --wapt-server-user=user --wapt-server-passwd=password

### 6.3.3. API V3

#### 6.3.3.1. /api/v3/packages

Liste les paquets sur le dépôt privé, il récupère le fichier `control` sur les paquets WAPT.

    wapt-get server-request "/api/v3/packages" -c /opt/wapt/wapt-get.ini --wapt-server-user=user --wapt-server-passwd=password

#### 6.3.3.2. /api/v3/known_packages

Liste tous les paquets avec l’information signed_on.

    wapt-get server-request "/api/v3/known_packages" -c /opt/wapt/wapt-get.ini --wapt-server-user=user --wapt-server-passwd=password

#### 6.3.3.3. /api/v3/trigger_cancel_task

Annule une tâche en cours.

    wapt-get server-request "/api/v3/trigger_cancel_task" -c /opt/wapt/wapt-get.ini --wapt-server-user=user --wapt-server-passwd=password

#### 6.3.3.4. /api/v3/get_ad_ou

Liste les OU vues par les postes et affichées dans la Console WAPT.

    wapt-get server-request "/api/v3/get_ad_ou" -c /opt/wapt/wapt-get.ini --wapt-server-user=user --wapt-server-passwd=password

#### 6.3.3.5. /api/v3/get_ad_sites

Liste les sites Active Directory.

    wapt-get server-request "/api/v3/get_ad_sites" -c /opt/wapt/wapt-get.ini --wapt-server-user=user --wapt-server-passwd=password

#### 6.3.3.6. /api/v3/hosts_for_package

Liste les hôtes avec un packaging spécifique installé.

    wapt-get server-request "/api/v3/hosts_for_package?package=[name of your package like tis-paint]" -c /opt/wapt/wapt-get.ini --wapt-server-user=user --wapt-server-passwd=password

#### 6.3.3.7. /api/v3/ping

Ping va récupérer les informations générales d’un Serveur WAPT.

Exemple :

    wapt-get server-request /api/v3/ping -c /opt/wapt/wapt-get.ini --wapt-server-user=user --wapt-server-passwd=password

#### 6.3.3.8. /api/v3/reporting_exec

Ci-dessous un script python qui exécute une requête avec un identifiant spécifique à partir de l’onglet Rapports de la console WAPT. Dans ce script, l’utilisateur « reporting » doit avoir l’ACL « Run reports ». Ce script fonctionne sur toutes les plateformes (agents windows, linux et mac).

Le Script Python

    import os
    import json
    import logging
    import waptlicences
    import requests
    import sys
    sys.path.append('/opt/wapt')
    from common import get_requests_client_cert_session
    from common import Wapt

    WAPT = Wapt()
    ini_wapt_path = WAPT.config_filename
    w = Wapt(config_filename=ini_wapt_path)

    # WAPT Conf
    wapt_url = w.waptserver.server_url

    user = "reporting"
    password = "password"

    def run_report():

        t = waptlicences.waptserver_login(ini_wapt_path,user,password)
        session = get_requests_client_cert_session(wapt_url,
        cert=(t['client_certificate'],t['client_private_key'],t['client_private_key_password']),
        verify=w.waptserver.verify_cert
        )
        if not 'session' in t['session_cookies']:
          session_cookies = [u for u in t['session_cookies'] if u['Domain'] == WAPT.waptserver.server_url.split('://')[-1]][0]
        else:
          session_cookies = t['session_cookies']['session']
          session_cookies['Name'] = 'session'

        session.cookies.set(session_cookies['Name'], session_cookies['Value'], domain=session_cookies['Domain'])
        t= None

        url = f'{wapt_url}/api/v3/reporting_exec?id=19'
        response = session.get(url)
        data = response.json()

        return data['result']

    print(run_report())

Danger

Quelques exemple d’API utilisant la méthode POST.

#### 6.3.3.9. /api/v3/change_password

Change le mot de passe du compte admin [ce compte uniquement]. La requête doit être un dictionnaire python {}. Les clés doivent être :

- user;

- old_password;

- new_password.

Exemple :

    wapt-get server-request /api/v3/change_password --method=POST --data="{'user':'USER','password':'old_password',''new_password':'new_password'}"

#### 6.3.3.10. /api/v3/hosts_delete

Suppression de machines avec un uuid spécifique. Requiert l’ACL admin ou désinscrire la machine.

    wapt-get server-request /api/v3/hosts_delete --method=POST --data="{'uuids': ['f76f1c44-ba82-714b-9241-5ad0ed671cb1', 'f76ffgh4-ba82-714b-9241-5ad0dfdfe1rt6'], 'delete_packages': 'True', 'delete_inventory': 'True'}"  --wapt-server-user=admin --wapt-server-passwd=password

#### 6.3.3.11. /api/v3/packages_delete

Supprime un paquet d’une version précise. La requête doit être une liste []. Elle peut prendre plusieurs paquets séparés par des virgules ,.

Exemple :

    wapt-get server-request /api/v3/packages_delete --method=POST --data="['ht-wapt-debian-gui_2.6.0.16977-2_0fce3ca2b61ebdbdc9b4b065cfe87176_PROD.wapt']" -c /opt/wapt/wapt-get.ini --wapt-server-user=user --wapt-server-passwd=password

#### 6.3.3.12. /api/v3/trigger_wakeonlan

Si les postes ont le WakeOnLan d’activé, cette API est utile.

La syntaxe est `--data-raw` : un dictionnaire avec pour clé uuids et une liste d’uuid pour valeur.

Exemple :

    wapt-get server-request /api/v3/trigger_wakeonlan --method=POST --data="{'uuids':['C74B68E2-CB63-BC4D-B6DB-74110DD4E535']}" -c /opt/wapt/wapt-get.ini --wapt-server-user=user --wapt-server-passwd=password

Danger

Exemple d’API utilisant la méthode de suppression (delete method).

#### 6.3.3.13. /api/v3/delete_unused_driver_files

Exemple :

    wapt-get server-request /api/v3/delete_unused_driver_files --wapt-server-user=user --wapt-server-passwd=password --method=DELETE