Driver API (import-context-graph)¶
Info
Disponible uniquement en édition Pro.
Canopsis embarque un programme permettant d'interroger une API externe afin de compléter son référentiel interne. Il peut être exécuté grâce à une ligne de commande ou via un conteneur Docker.
Ce programme se situe :
- à l'emplacement 
/opt/canopsis/bin/import-context-graphlors d'une installation par paquets. - dans le conteneur 
pro/import-context-graphen Docker. 
Table des matières¶
Utilisation¶
Options¶
| Option | Argument | Description | 
|---|---|---|
-help | 
Lister toutes les options acceptées | |
-d | 
Activer le mode debug | |
-c | 
/chemin/du/fichier.yml | 
Indiquer le chemin complet du fichier de configuration | 
Variables d'environnement¶
L'identifiant et le mot de passe de connexion à l'API sont définis via des variables d'environnement :
EXTERNAL_API_USERNAMEpour l'identifiantEXTERNAL_API_PASSWORDpour le mot de passe
Seule l'authentification basique est supportée.
Configuration¶
Le format de fichier de configuration est le YAML. Il doit être entièrement rédigé à partir du JSON retourné par l'API externe.
Un exemple de fichier de configuration est disponible sur le dépôt Canopsis Pro. Un exemple donné à titre indicatif est également disponible ci-après.
Ce fichier de configuration doit comprendre trois sections :
apiqui permet d'indiquer les propriétés de la requête HTTP à envoyer à l'API.importqui permet de spécifier les paramètres de l'import.mappingqui permet de spécifier les associations entre les champs de l'entité dans Canopsis et la réponse de l'API.
Concernant les types d'actions d'import :
action: Action effectuée sur l'entité reçue dans la réponse de l'APIcreate: Création de l'entité en baseset: La même chose quecreatemais peut être partielle si l'API ne retourne pas tous les champsupdate: Mise à jour de l'entité en base. Si l'entité n'existe pas, aucune modification ne sera appliquéeenable: Active l'entité (passage àtruedu champenablede l'entité en base)
missing_action: Action effectuée sur les entités manquantes de la réponse de l'APIdelete: Suppression de l'entité en basedisable: Désactive l'entité (action inverse de l'actionenable)- (chaîne vide) : le paramètre 
missing_actionpeut ne pas avoir d'action et donc ne rien faire 
Pour plus de détails, référez-vous à la documentation d'import de contexte disponible dans Swagger.
Exemple¶
Prenons l'exemple d'une API externe retournant le JSON ci-dessous :
[
    {
        "ci": "composant1",
        "nom": "composant 1",
        "societe": "CAPENSIS",
        "statut": "actif",
        "responsable": "Service technique",
        "localisation": "DC1",
        "commentaire": "Il s agit du composant 1",
        "impact": 5
    }
]
Le fichier de configuration avec les commentaires explicatifs :
# Ce bloc permet de spécifier les propriétés de la requête HTTP à envoyer à l'API externe.
api:
  # Spécifier l'URL de l'API
  url: http://mon.api/?filtre=filtre1
  # Spécifier le type de requête HTTP (GET, POST, PUT etc)
  method: GET
  # Spécifier les en-têtes de la requête
  headers:
  # Le payload contient le body
  body:
    key: value
  # Activer (false) ou désactiver (true) la vérification de la chaîne de certification TLS du serveur
  insecure_skip_verify: false
# Ce bloc spécifie les paramètres de l'import
import:
  # Définit la source de l'import à l'entité
  source: import-context-graph
  # Définit le type d'action à effectuer sur les entités reçues de la réponse de l'API
  # Valeurs possibles : create, set, update, enable
  action: create
  # Définit le type d'action à effectuer sur les entités manquantes de la réponse de l'API
  # Les entités manquantes sont trouvées par source d'import
  # Valeurs possibles : delete, disable. Si rien n’est défini, les entités manquantes ne seront pas mises à jour.
  missing_action: disable
# Ce bloc spécifie l'association entre les champs de l'entité et la réponse de l'API
# Le champ _id est requis, les autres champs sont optionnels
# Seul le JSON qui contient un tableau d'objets est pris en charge
mapping:
  # path spécifie le chemin d’où importer les données
  # Par exemple, "data.nested" si la réponse est {"data": {"nested": [ {...}, {...} ]}}.
  # Peut être vide.
  path:
  # is_map spécifie le type des données importées.
  # Devrait être false si la réponse est array [ {...}, {...} ].
  # Devrait être true si la réponse est map {"key1": {...}, "key2": {...}}.
  is_map: false
  # Association de l'ID de l'entité
  _id: ci
  # Association de la description
  description: commentaire
  # Association du niveau d'impact
  impact_level: impact
  # Association d'informations complémentaires
  infos:
    nom:
      value: nom
      description: nom
    societe:
      value: societe
      description: societe
    statut:
      value: statut
      description: statut
    responsable:
      value: responsable
      description: responsable
Exemple pour ITop :
api:
  url: http://mon.itop/webservices/rest.php?version=1.3
  method: POST
Exécution¶
Attention
Ces exemples d'exécution ne répondent pas aux bonnes pratiques de sécurité. Veillez donc à bien adapter cette exécution selon votre politique de sécurité interne.
Dans le cadre d'un usage via Docker, il est conseillé d'utiliser "Docker Secrets" ou une autre solution de coffre-fort.
Programme installé par packets :¶
export EXTERNAL_API_USERNAME=test
export EXTERNAL_API_PASSWORD=test
/opt/canopsis/bin/import-context-graph -c import-context-api.yml 
2021-09-29T10:39:46+02:00 INF git.canopsis.net/canopsis/canopsis-pro/pro/go-engines-pro/cmd/import-context-graph/main.go:65 > import finished deleted=0 exec_time=3.784369ms updated=1
Programme dans Docker :¶
docker run \
-e EXTERNAL_API_USERNAME='[testuser]' \
-e EXTERNAL_API_PASSWORD='[testpassword]' \
-e CPS_MONGO_URL='mongodb://cpsmongo:canopsis@mongodb/canopsis' \
-e 'CPS_AMQP_URL=amqp://cpsrabbit:canopsis@rabbitmq/canopsis' \
-e CPS_POSTGRES_URL='postgresql://cpspostgres:canopsis@timescaledb:5432/canopsis' \
--network=canopsis-pro_default -it --rm -v \
"[/chemin/vers]/pro/deployment/canopsis/docker/files/api.yml:/opt/canopsis/share/config/import-context-graph/api.yml" \
docker.canopsis.net/docker/pro/import-context-graph:'[4.5]'
2022-02-18T14:10:15Z INF git.canopsis.net/canopsis/canopsis-pro/pro/go-engines-pro/cmd/import-context-graph/main.go:78 > import finished deleted=0 exec_time=16.775252ms updated=3
Résultats dans Canopsis :¶


