6. Utiliser l’API du Serveur WAPT¶
Note
Cette documentation ne décrit pas toutes les APIs disponibles, mais va cependant se concentrer sur les plus utiles.
Toutes les URLs disponibles peuvent être trouvées dans /opt/wapt/waptserver/server.py
.
Les URLs sont formées en utilisant la bonne commande depuis le Serveur WAPT ex : https://srvwapt/command_path
.
Indication
Cette documentation contient des exemples en code Python ou bien en curl.
Avertissement
Depuis la version 2.5, la plupart des URL d’API est protégée par des certificats clients SSL. Vous devrez donc modifier vos scripts (cf. exemples ci-dessous).
6.1. API V1¶
6.1.1. /api/v1/hosts¶
Récupérer les données enregistrées d’un ou de plusieurs postes.
# Args: # has_errors (0/1): filter out hosts with packages errors # need_upgrade (0/1): filter out hosts with outdated packages # groups (csvlist of packages): hosts with packages # columns (csvlist of columns): # uuid (csvlist of uuid): <uuid1[,uuid2,...]>): filter based on uuid # filter (csvlist of field):regular expression: filter based on attributes # not_filter (0,1): # limit (int): 1000 # trusted_certs_sha256 (csvlist): filter out hosts based on their trusted package certs # Returns: # result (dict): {'records':[],'files':[]} # query: # uuid=<uuid> # or # filter=<csvlist of fields>:regular expression # """
Listez tous les postes. Les paramètres disponibles sont :
reachable ;
computer_fqdn ==> computer_name ;
connected_ips ;
mac_addresses.
Cette exemple montre une requête avec des paramètres :
cert_path = (r'C:\Program Files (x86)\wapt\private\71253c6c-f412-455b-a907-93b10ce07490.crt',r'C:\Program Files (x86)\wapt\private\71253c6c-f412-455b-a907-93b10ce07490.pem') advanced_hosts_wapt = wgets('https://%s:%s@%s/api/v1/hosts?columns=reachable,computer_fqdn,connected_ips,mac_addresses&limit=10000' % (wapt_user,wapt_password,wapt_url),verify_cert=False,cert=cert_path) parsed = json.loads(advanced_hosts_wapt) print(json.dumps(parsed, indent=1, sort_keys=True))
Cette exemple est une requête globale :
cert_path = (r'C:\Program Files (x86)\wapt\private\71253c6c-f412-455b-a907-93b10ce07490.crt',r'C:\Program Files (x86)\wapt\private\71253c6c-f412-455b-a907-93b10ce07490.pem') hosts_wapt = wgets('https://%s:%s@%s/api/v1/hosts' % (wapt_user,wapt_password,wapt_url),verify_cert=False,cert=cert_path) parsed = json.loads(hosts_wapt) print(json.dumps(parsed, indent=1, sort_keys=True))
Indication
Voici le même exemple avec une simple requête html :
https://admin:MYPASSWORD@srvwapt.mydomain.lan/api/v1/hosts
Celui-ci donne une requête avec un statut joignable, le nom de la machine, ses IP connectées et ses adresses MAC. La limite d’affichage est de 10000 postes.
https://admin:MYPASSWORD@srvwapt.mydomain.lan/api/v1/hosts?columns=reachable,computer_fqdn,connected_ips,mac_addresses&limit=10000
6.1.2. /api/v1/groups¶
Récupère tous les paquets groupes. Les groupes peuvent être trouvés avec la section groupe dans le paquet :
cert_path = (r'C:\Program Files (x86)\wapt\private\71253c6c-f412-455b-a907-93b10ce07490.crt',r'C:\Program Files (x86)\wapt\private\71253c6c-f412-455b-a907-93b10ce07490.pem') group_wapt = wgets('https://%s:%s@%s/api/v1/groups' % (wapt_user,wapt_password,wapt_url),verify_cert=False,cert=cert_path) parsed = json.loads(group_wapt) print(json.dumps(parsed, indent=1, sort_keys=True))
Indication
Voici le même exemple avec une simple requête html :
https://admin:MYPASSWORD@srvwapt.mydomain.lan/api/v1/groups
6.1.3. /api/v1/host_data¶
6.1.3.1. dmi¶
Récupérez toutes les informations DMI d’un poste :
Note
# # Récupère des données supplémentaires d’un poste # query: # uuid=<uuid> # field=packages, dmi ou softwares
Note
le dmi n’est pas la seule option disponible. Vous pouvez aussi chercher des informations en utilisant installed_packages, wsusupdates ou installed_softwares.
cert_path = (r'C:\Program Files (x86)\wapt\private\71253c6c-f412-455b-a907-93b10ce07490.crt',r'C:\Program Files (x86)\wapt\private\71253c6c-f412-455b-a907-93b10ce07490.pem')
dmi_host_data_wapt = wgets('https://%s:%s@%s/api/v1/host_data?uuid=UUID&field=dmi' % (wapt_user,wapt_password,wapt_url),verify_cert=False,cert=cert_path)
#print(dmi_host_data_wapt)
parsed = json.loads(dmi_host_data_wapt)
print(json.dumps(parsed, indent=1, sort_keys=True))
Indication
Voici le même exemple avec une simple requête html :
https://admin:MYPASSWORD@srvwapt.mydomain.lan/api/v1/host_data?uuid=14F620FF-DE70-9E5B-996A-B597E8F9B4AD&field=dmi
6.1.3.2. installed_packages¶
L’option installed_packages va lister tous les paquets installés sur un poste en particulier.
cert_path = (r'C:\Program Files (x86)\wapt\private\71253c6c-f412-455b-a907-93b10ce07490.crt',r'C:\Program Files (x86)\wapt\private\71253c6c-f412-455b-a907-93b10ce07490.pem')
install_packages_data_wapt = wgets('https://%s:%s@%s/api/v1/host_data?uuid=UUID&field=installed_packages' % (wapt_user,wapt_password,wapt_url),verify_cert=False,cert=cert_path)
parsed = json.loads(install_packages_data_wapt)
print(json.dumps(parsed, indent=1, sort_keys=True))
Indication
Voici le même exemple avec une simple requête html :
https://admin:MYPASSWORD@srvwapt.mydomain.lan/api/v1/host_data?uuid=14F620FF-DE70-9E5B-996A-B597E8F9B4AD&field=installed_packages
6.1.3.3. installed_softwares¶
L’option installed_softwares va lister tous les logiciels installés sur un poste en particulier.
cert_path = (r'C:\Program Files (x86)\wapt\private\71253c6c-f412-455b-a907-93b10ce07490.crt',r'C:\Program Files (x86)\wapt\private\71253c6c-f412-455b-a907-93b10ce07490.pem')
install_softwares_data_wapt = wgets('https://%s:%s@%s/api/v1/host_data?uuid=UUID&field=installed_softwares' % (wapt_user,wapt_password,wapt_url),verify_cert=False,cert=cert_path)
#print(install_softwares_data_wapt)
parsed = json.loads(install_softwares_data_wapt)
print(json.dumps(parsed, indent=1, sort_keys=True))
Indication
Voici le même exemple avec une simple requête html :
https://admin:MYPASSWORD@srvwapt.mydomain.lan/api/v1/host_data?uuid=14F620FF-DE70-9E5B-996A-B597E8F9B4AD&field=installed_softwares
6.1.3.4. wsusupdates¶
L’option wsusupdates va lister toutes les mises à jour installés sur un poste en particulier.
cert_path = (r'C:\Program Files (x86)\wapt\private\71253c6c-f412-455b-a907-93b10ce07490.crt',r'C:\Program Files (x86)\wapt\private\71253c6c-f412-455b-a907-93b10ce07490.pem')
wsusupdates_data_wapt = wgets('https://%s:%s@%s/api/v1/host_data?uuid=UUID&field=wsusupdates' % (wapt_user,wapt_password,wapt_url),verify_cert=False,cert=cert_path)
#print(wsusupdates_data_wapt)
parsed = json.loads(wsusupdates_data_wapt)
print(json.dumps(parsed, indent=1, sort_keys=True))
Indication
Voici le même exemple avec une simple requête html :
https://admin:MYPASSWORD@srvwapt.mydomain.lan/api/v1/host_data?uuid=14F620FF-DE70-9E5B-996A-B597E8F9B4AD&field=wsusupdates
6.1.4. /api/v1/usage_statistics¶
Récupère les statistiques d’usage du Serveur WAPT.
Indication
Cette API est utile si vous avez plusieurs Serveurs WAPT et si vous voulez savoir combien de postes il y a.
cert_path = (r'C:\Program Files (x86)\wapt\private\71253c6c-f412-455b-a907-93b10ce07490.crt',r'C:\Program Files (x86)\wapt\private\71253c6c-f412-455b-a907-93b10ce07490.pem')
usage_statistics_wapt =wgets('https://%s:%s@%s/api/v1/usage_statistics' % (wapt_user,wapt_password,wapt_url),verify_cert=False,cert=cert_path)
#print(usage_statistics_wapt)
parsed = json.loads(usage_statistics_wapt)
print(json.dumps(parsed, indent=1, sort_keys=True))
Indication
Voici le même exemple avec une simple requête html :
https://admin:MYPASSWORD@srvwapt.mydomain.lan/api/v1/usage_statistics
6.2. API V2¶
6.2.1. /api/v2/waptagent_version¶
Affiche la version du waptagent.exe sur le serveur.
waptagent_version = wgets('https://%s:%s@%s/api/v2/waptagent_version' % (wapt_user,wapt_password,wapt_url))
parsed = json.loads(waptagent_version)
print(json.dumps(parsed, indent=1, sort_keys=True))
Indication
Voici le même exemple avec une simple requête html :
https://admin:MYPASSWORD@srvwapt.mydomain.lan/api/v2/waptagent_version
6.3. API V3¶
6.3.1. /api/v3/reporting_exec¶
Voici 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).
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
)
session.cookies.set(t['session_cookies'][0]['Name'], t['session_cookies'][0]['Value'], domain=t['session_cookies'][0]['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())
6.3.2. /api/v3/packages¶
Liste les paquets sur le dépôt privé, il récupère le fichier control
sur les paquets WAPT.
cert_path = (r'C:\Program Files (x86)\wapt\private\71253c6c-f412-455b-a907-93b10ce07490.crt',r'C:\Program Files (x86)\wapt\private\71253c6c-f412-455b-a907-93b10ce07490.pem')
packages_wapt = wgets('https://%s:%s@%s/api/v3/packages' % (wapt_user,wapt_password,wapt_url),verify_cert=False,cert=cert_path)
parsed = json.loads(packages_wapt)
print(json.dumps(parsed, indent=1, sort_keys=True))
Indication
Voici le même exemple avec une simple requête html :
https://admin:MYPASSWORD@srvwapt.mydomain.lan/api/v3/packages
6.3.3. /api/v3/known_packages¶
Liste tous les paquets avec l’information signed_on.
cert_path = (r'C:\Program Files (x86)\wapt\private\71253c6c-f412-455b-a907-93b10ce07490.crt',r'C:\Program Files (x86)\wapt\private\71253c6c-f412-455b-a907-93b10ce07490.pem')
known_packages_wapt = wgets('https://%s:%s@%s/api/v3/known_packages' % (wapt_user,wapt_password,wapt_url),verify_cert=False,cert=cert_path)
parsed = json.loads(known_packages_wapt)
print(json.dumps(parsed, indent=1, sort_keys=True))
Indication
Voici le même exemple avec une simple requête html :
https://admin:MYPASSWORD@srvwapt.mydomain.lan/api/v3/known_packages
6.3.4. /api/v3/trigger_cancel_task¶
Annule une tâche en cours.
cert_path = (r'C:\Program Files (x86)\wapt\private\71253c6c-f412-455b-a907-93b10ce07490.crt',r'C:\Program Files (x86)\wapt\private\71253c6c-f412-455b-a907-93b10ce07490.pem')
trigger_cancel_task = wgets('https://%s:%s@%s/api/v3/trigger_cancel_task' % (wapt_user,wapt_password,wapt_url),verify_cert=False,cert=cert_path)
parsed = json.loads(trigger_cancel_task)
print(json.dumps(parsed, indent=1, sort_keys=True))
6.3.5. /api/v3/get_ad_ou¶
Liste les OU vues par les postes et affichées dans la Console WAPT.
cert_path = (r'C:\Program Files (x86)\wapt\private\71253c6c-f412-455b-a907-93b10ce07490.crt',r'C:\Program Files (x86)\wapt\private\71253c6c-f412-455b-a907-93b10ce07490.pem')
get_ad_ou = wgets('https://%s:%s@%s/api/v3/get_ad_ou' % (wapt_user,wapt_password,wapt_url),verify_cert=False,cert=cert_path)
parsed = json.loads(get_ad_ou)
print(json.dumps(parsed, indent=1, sort_keys=True))
Indication
Voici le même exemple avec une simple requête html :
https://admin:MYPASSWORD@srvwapt.mydomain.lan/api/v3/get_ad_ou
6.3.6. /api/v3/get_ad_sites¶
Liste les sites Active Directory.
cert_path = (r'C:\Program Files (x86)\wapt\private\71253c6c-f412-455b-a907-93b10ce07490.crt',r'C:\Program Files (x86)\wapt\private\71253c6c-f412-455b-a907-93b10ce07490.pem')
get_ad_sites = wgets('https://%s:%s@%s/api/v3/get_ad_sites' % (wapt_user,wapt_password,wapt_url),verify_cert=False,cert=cert_path)
parsed = json.loads(get_ad_sites)
print(json.dumps(parsed, indent=1, sort_keys=True))
Indication
Voici le même exemple avec une simple requête html :
https://admin:MYPASSWORD@srvwapt.mydomain.lan/api/v3/get_ad_sites
6.3.7. /api/v3/hosts_for_package¶
Liste les hôtes avec un packaging spécifique installé.
cert_path = (r'C:\Program Files (x86)\wapt\private\71253c6c-f412-455b-a907-93b10ce07490.crt',r'C:\Program Files (x86)\wapt\private\71253c6c-f412-455b-a907-93b10ce07490.pem')
hosts_for_package = wgets('https://%s:%s@%s/api/v3/hosts_for_package?package=PACKAGE' % (wapt_user,wapt_password,wapt_url),verify_cert=False,cert=cert_path)
parsed = json.loads(hosts_for_package)
print(json.dumps(parsed, indent=1, sort_keys=True))
Indication
Voici le même exemple avec une simple requête html :
https://admin:MYPASSWORD@srvwapt.mydomain.lan/api/v3/hosts_for_package?package=demo-namepackage
6.3.8. /api/v3/host_tasks_status¶
Liste les tâches d’un poste en particulier.
cert_path = (r'C:\Program Files (x86)\wapt\private\71253c6c-f412-455b-a907-93b10ce07490.crt',r'C:\Program Files (x86)\wapt\private\71253c6c-f412-455b-a907-93b10ce07490.pem')
host_tasks_status = wgets('https://%s:%s@%s/api/v3/host_tasks_status?uuid=UUID' % (wapt_user,wapt_password,wapt_url),verify_cert=False,cert=cert_path)
parsed = json.loads(host_tasks_status)
print(json.dumps(parsed, indent=1, sort_keys=True))
Indication
Voici le même exemple avec une simple requête html :
https://admin:MYPASSWORD@srvwapt.mydomain.lan/api/v3/host_tasks_status?uuid=14F620FF-DE70-9E5B-996A-B597E8F9B4AD
Attention
Les API ci-après suivent la méthode POST.
6.3.9. /api/v3/upload_packages¶
À faire
Tests
6.3.10. /api/v3/upload_hosts¶
À faire
Tests
6.3.11. /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.
curl --cert "C:\Program Files (x86)\wapt\private\71253c6c-f412-455b-a907-93b10ce07490.crt" --key "C:\Program Files (x86)\wapt\private\71253c6c-f412-455b-a907-93b10ce07490.pem" --insecure -X POST --data-raw '{"user":"USER","password":"old_password","new_password":"new_password"}' -H "Content-Type: application/json" "https://user:old_password@srvwapt/api/v3/change_password"
6.3.12. /api/v3/login¶
Initialiser une connexion au Serveur WAPT.
curl --insecure -X POST --data-raw '{"user":"admin","password":"MYPASSWORD"}' -H "Content-Type: application/json" "https://srvwapt.mydomain.lan/api/v3/login"
{"msg": "Authentication OK", "result": {"edition": "enterprise", "hosts_count": 6, "version": "1.7.4", "server_domain": "mydomain.lan", "server_uuid": "32464dd6-c261-11e8-87be-cee799b43a00"}, "success": true, "request_time": 0.03377699851989746}
Indication
Nous pouvons faire une connexion avec un formulaire html plutôt que POST : https://admin:MYPASSWORD@srvwapt.mydomain.lan/api/v3/get_ad_sites
6.3.13. /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 :
curl --cert "C:\Program Files (x86)\wapt\private\71253c6c-f412-455b-a907-93b10ce07490.crt" --key "C:\Program Files (x86)\wapt\private\71253c6c-f412-455b-a907-93b10ce07490.pem" --insecure -X POST --data-raw '["demo-libreoffice-stable_5.4.6.2-3_all.wapt"]' -H "Content-Type: application/json" "https://admin:MYPASSWORD@srvwapt.mydomain.lan/api/v3/packages_delete"
6.3.14. /api/v3/reset_hosts_sid¶
Initialiser une connexion àl’hôte.
La syntaxe est : --data-raw : un dictionnaire avec pour clé les uuid
et pour valeur l’UUID du poste.
curl --cert "C:\Program Files (x86)\wapt\private\71253c6c-f412-455b-a907-93b10ce07490.crt" --key "C:\Program Files (x86)\wapt\private\71253c6c-f412-455b-a907-93b10ce07490.pem" --insecure -X POST --data-raw '{"uuids":["UUID"]}' -H "Content-Type: application/json" "https://admin:MYPASSWORD@srvwapt.mydomain.lan/api/v3/reset_hosts_sid"
{"msg": "Hosts connection reset launched for 1 host(s)", "result": {}, "success": true, "request_time": null}
Indication
Si vous voulez plusieurs postes :
curl --cert "C:\Program Files (x86)\wapt\private\71253c6c-f412-455b-a907-93b10ce07490.crt" --key "C:\Program Files (x86)\wapt\private\71253c6c-f412-455b-a907-93b10ce07490.pem" --insecure -X POST --data-raw '{"uuids":["UUID#1","UUID#2"]}' -H "Content-Type: application/json" "https://admin:MYPASSWORD@srvwapt.mydomain.lan/api/v3/reset_hosts_sid"
{"msg": "Hosts connection reset launched for 2 host(s)", "result": {}, "success": true, "request_time": null}
6.3.15. /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é les uuid
et pour valeur l’uuid du poste.
curl --cert "C:\Program Files (x86)\wapt\private\71253c6c-f412-455b-a907-93b10ce07490.crt" --key "C:\Program Files (x86)\wapt\private\71253c6c-f412-455b-a907-93b10ce07490.pem" --insecure -X POST --data-raw '{"uuids":["UUID"]}' -H "Content-Type: application/json" "https://admin:MYPASSWORD@srvwapt.mydomain.lan/api/v3/trigger_wakeonlan"
{"msg": "Wakeonlan packets sent to 1 machines.", "result": [{"computer_fqdn": "computer_fqdn", "mac_addresses": ["mac_addresses"], "uuid": "UUID"}], "success": true, "request_time": null}
Indication
Si vous voulez plusieurs postes :
curl --cert "C:\Program Files (x86)\wapt\private\71253c6c-f412-455b-a907-93b10ce07490.crt" --key "C:\Program Files (x86)\wapt\private\71253c6c-f412-455b-a907-93b10ce07490.pem" --insecure -X POST --data-raw '{"uuids":["UUID#1","UUID#2"]}' -H "Content-Type: application/json" "https://admin:MYPASSWORD@srvwapt.mydomain.lan/api/v3/trigger_wakeonlan"
{"msg": "Wakeonlan packets sent to 2 machines.", "result": [{"computer_fqdn": "computer_fqdn#1", "mac_addresses": ["mac_addresses#1"], "uuid": "UUID#1"}, {"computer_fqdn": "computer_fqdn#2", "mac_addresses": ["mac_addresses#2"], "uuid": "UUID#2"}], "success": true, "request_time": null}
6.3.16. /api/v3/hosts_delete¶
"""Remove one or several hosts from the WAPT Server database and optionnally the host packages
Args:
uuids (list): list of uuids to delete
filter (csvlist of field:regular expression): filter based on attributes
delete_packages (bool): delete host's packages
delete_inventory (bool): delete host's inventory
Returns:
result (dict):
"""
Si vous voulez supprimer un poste de l’inventaire :
curl --cert "C:\Program Files (x86)\wapt\private\71253c6c-f412-455b-a907-93b10ce07490.crt" --key "C:\Program Files (x86)\wapt\private\71253c6c-f412-455b-a907-93b10ce07490.pem" --insecure -X POST --data-raw '{"uuids":["UUID"],"delete_inventory":"True","delete_packages":"True"}' -H "Content-Type: application/json" "https://admin:MYPASSWORD@srvwapt.mydomain.lan/api/v3/hosts_delete"
{"msg": "1 files removed from host repository\n1 hosts removed from DB", "result": {"files": ["/var/www/wapt-host/UUID.wapt"], "records": [{"computer_fqdn": "computer_fqdn", "uuid": "UUID"}]}, "success": true, "request_time": null}
Si vous ne voulez pas le supprimer de l’inventaire du serveur :
curl --cert "C:\Program Files (x86)\wapt\private\71253c6c-f412-455b-a907-93b10ce07490.crt" --key "C:\Program Files (x86)\wapt\private\71253c6c-f412-455b-a907-93b10ce07490.pem" --insecure -X POST --data-raw '{"uuids":["UUID"],"delete_inventory":"False","delete_packages":"False"}' -H "Content-Type: application/json" "https://admin:MYPASSWORD@srvwapt.mydomain.lan/api/v3/hosts_delete"
{"msg": "0 files removed from host repository\n1 hosts removed from DB", "result": {"files": [], "records": [{"computer_fqdn": "computer_fqdn", "uuid": "UUID"}]}, "success": true, "request_time": null}
6.3.17. /api/v3/trigger_host_action¶
À faire
Tests
6.3.18. /api/v3/upload_waptsetup¶
# Upload waptsetup
#Handle the upload of customized waptagent.exe into wapt repository
### DOES NOT WORK
#curl --cert "C:\Program Files (x86)\wapt\private\71253c6c-f412-455b-a907-93b10ce07490.crt" --key "C:\Program Files (x86)\wapt\private\71253c6c-f412-455b-a907-93b10ce07490.pem" --insecure -X POST -H "Content-Type: multipart/form-data" -F 'data=@waptagent.exe' "https://admin:MYPASSWORD@srvwapt.mydomain.lan/upload_waptsetup"
6.3.19. /api/v3/ping¶
Ping va récupérer les informations générales d’un Serveur WAPT.
# https://srvwapt.mydomain.lan/ping
# Lists WAPT Server informations
ping_wapt = wgets('https://%s:%s@%s/ping' % (wapt_user,wapt_password,wapt_url))
parsed = json.loads(ping_wapt)
print(json.dumps(parsed, indent=1, sort_keys=True))