Description
Les sources n'offrent pas de solution pour supprimer des éléments. Cela peut être utile dans un environnement cloud, lorsque certains équipements sont utilisés un certain laps de temps puis sont supprimés.
Pour pallier à ce problème, une API accessible par une URL est disponible. Elle permet de supprimer tous les types d'éléments de la configuration du Synchronizer.
Les hôtes seront définitivement supprimés même s'il existent en Zone de Travail et en Staging.
Pré-requis
Afin de supprimer un élément de la configuration du synchronizer il faut :
- Avoir un compte avec les droits Shinken Administrateur
- Connaitre l'UUID de l'élément en question
- Connaître son item_type.
Paramétrage du synchronizer
Par défaut, l'URL est désactivée sur le synchronizer. Pour l'activer il faut ajouter un paramètre dans le fichier de configuration du synchronizer. Il est conseillé de modifier le fichier suivant :
/etc/shinken-user/configuration/daemons/synchronizers/synchronizer_cfg_overload.cfg api_item_enabled=1 |
Mettre ce paramètre à 0 désactivera l'URL.
Après modification de ce paramètre, il convient de redémarrer le Synchronizer pour que le changement soit pris en compte.
Supprimer des éléments en staging et en zone de travail
URL
L'URL est la suivante :
http://localhost:7765/item-api/v1/delete-items-in-staging-and-working-area
Paramètres
Cette URL a besoin des paramètres suivants :
| Option | Exemple | Description |
|---|---|---|
| login | login=mon-user | Le nom du contact utilisé pour se connecter |
| password | password=VGVzdF8wMQ== | Le mot de passe du contact, en base 64 |
| item_type | item_type=hosts | Le type de l'élément. Voir note ci-dessous |
| uuids | uuids=50589d91a4ff11e7b9eff8bc12640001,50589d91a4ff11e7b9eff8bc12640002 | Les uuids des éléments à supprimer, séparé par une virgule. Dans cet exemple deux éléments seront supprimés |
Les item_type utilisés sont les suivants :
- clusters
- clustertpls
- hosts
- hosttpls
- hostgroups
- serviceshosts
- serviceshosttpls
- servicesclusters
- servicesclustertpls
- servicetpls
- contacts
- contacttpls
- contactgroups
- escalations
- notificationways
- commands
- businessimpactmodulations
- macromodulations
- resultmodulations
- timeperiods
En shell le base64 du mot de passe peut être obtenu à l'aide de la commande suivante : echo -ne "password" | base64
Format de retour
L'appel retourne un code 200 et un json avec les données suivantes:
- "msg" : un message de retour qui indique si tout les éléments ont été supprimés
- "deleted_items" qui contient
- "list" : la liste des éléments qui ont été supprimés
- "nb" : le nombre d'éléments supprimés
- "not_deleted_items" qui contient
- "list" : la liste des éléments qui n'ont pas été supprimés
- "nb" : le nombre d'élément qui n'ont pas été supprimés
Voici un exemple de retour :
{
"msg": "OK all items were deleted",
"not_deleted_items": {
"nb": 0,
"list": []
},
"deleted_items": {
"nb": 3,
"list": ["c74d4b594249473997530fec6c1989fa", "1e093816492c4575b19df1cf34e53fd6", "a9a5223471e1406ab117af91502c24cf"]
}
}
Si plusieurs éléments doivent être supprimés et que l'un d'eux cause une erreur, les autres suppressions ne seront pas impactées par cette erreur.
Les logs d'erreur seront présents dans le fichier de log du synchronizer : /var/log/shinken/synchronizerd.log
Voici les erreurs qui peuvent être rencontrées à la suppression d'éléments :
| Code | Message | Raisons |
|---|---|---|
| 400 | Missing parameters : <parameters> | Des paramètres obligatoires n'ont pas été saisis |
| 400 | Invalid parameter item_type | L'item_type saisis ne correspond à aucun item_type existant. |
| 504 | Syncui is not ready for the moment, need to retry in a few moment | Le synchronizer est en train de redémarrer et n'est pas prêt. Vous pouvez réessayer dans quelques instants |
Exemples
Voici un exemple pour la suppression de deux hôtes
root@shinken: ~/ 15:59 : $ curl "http://localhost:7765/item-api/v1/delete-items-in-staging-and-working-area?password=YWRtaW4=&login=admin&item_type=hosts&uuids=50589d91a4ff11e7b9eff8bc12640001,50589d91a4ff11e7b9eff8bc12640002"
{"msg": "OK all items were deleted","not_deleted_items": {"nb": 0,"list": []},"deleted_items": {"nb": 2,"list": ["50589d91a4ff11e7b9eff8bc12640001", "50589d91a4ff11e7b9eff8bc12640002"]}}
root@shinken: ~/ 15:59 : $
Supprimer des éléments en production
Pour appliquer la suppression en production , cet appel redémarrera l'Arbiter si la nouvelle configuration est valide.
URL
L'URL est la suivante :
http://localhost:7765/item-api/v1/delete-items-in-production
Paramètres
Cette URL a besoin des paramètres suivants :
| Option | Exemple | Description |
|---|---|---|
| login | login=mon-user | Le nom du contact utilisé pour se connecter |
| password | password=VGVzdF8wMQ== | Le mot de passe du contact, en base 64 |
| item_type | item_type=hosts | Le type de l'élément. Voir note ci-dessous |
| uuids | uuids=50589d91a4ff11e7b9eff8bc12640001,50589d91a4ff11e7b9eff8bc12640002 | Les uuids des éléments à supprimer, séparé par une virgule. Dans cet exemple deux éléments seront supprimés |
Actuellement seul le type item_type "hosts" est supporté dans la suppression en production
En shell le base64 du mot de passe peut être obtenu à l'aide de la commande suivante : echo -ne "password" | base64
Format de retour
L'appel retourne un code 200 et un json avec les données suivantes:
- "msg" : un message de retour qui indique si tout les éléments ont été supprimés
- "deleted_items" qui contient
- "list" : la liste des éléments qui ont été supprimés
- "nb" : le nombre d'éléments supprimés
- "not_deleted_items" qui contient
- "list" : la liste des éléments qui n'ont pas été supprimés
- "nb" : le nombre d'élément qui n'ont pas été supprimés
Voici un exemple de retour :
{
"msg": "arbiter reload OK",
"not_deleted_items": {
"nb": 0,
"list": []
},
"deleted_items": {
"nb": 3,
"list": ["c74d4b594249473997530fec6c1989fa", "1e093816492c4575b19df1cf34e53fd6", "a9a5223471e1406ab117af91502c24cf"]
}
}
Si plusieurs éléments doivent être supprimés et que l'un d'eux cause une erreur, les autres suppressions ne seront pas impactées par cette erreur.
Les logs d'erreur seront présents dans le fichier de log du synchronizer : /var/log/shinken/synchronizerd.log
Voici les erreurs qui peuvent être rencontrées à la suppression d'éléments :
| Code | Message | Raisons |
|---|---|---|
| 400 | Missing parameters : <parameters> | Des paramètres obligatoires n'ont pas été saisis |
| 400 | Invalid parameter item_type | L'item_type saisis ne correspond à aucun item_type existant. |
| 504 | Syncui is not ready for the moment, need to retry in a few moment | Le synchronizer est en train de redémarrer et n'est pas prêt. Vous pouvez réessayer dans quelques instants |
| 500 | This item_type is not yet implemented | Actuellement seul les éléments de type hôte sont supportés |
| 505 | Arbiter is reloading a new configuration | L'arbiter est en train de recharger une configuration ( redémarrage du démon ou application de la configuration sur l'interface de configuration) |
| 503 | Arbiter is not reachable | L'arbiter est injoignable. |
| 510 | <configuration_error> | La configuration est incorrecte. L'erreur complète est indiquée dans le message. |
Exemples
Voici un exemple pour la suppression de deux hôtes
root@shinken: ~/ 15:59 : $ curl "http://localhost:7765/item-api/v1/delete-items-in-production?password=YWRtaW4=&login=admin&item_type=hosts&uuids=50589d91a4ff11e7b9eff8bc12640001,50589d91a4ff11e7b9eff8bc12640002"
{"msg": "arbiter reload OK","not_deleted_items": {"nb": 0,"list": []},"deleted_items": {"nb": 2,"list": ["50589d91a4ff11e7b9eff8bc12640001", "50589d91a4ff11e7b9eff8bc12640002"]}}
root@shinken: ~/ 15:59 : $