On continue notre exploration “post PoC” de nos futures appliances XtremIO (les deux sont arrivées ! MOM en cours de préparation ;) ). En dehors de l’outil de supervision déjà longuement présenté dans de précédents billets, je vous propose un parcours rapide de l’interface REST d’XtremIO. Tout comme VPlex, l’AFA d’EMC est donc capable d’être interrogée et même pilotée à travers une interface dite RESTful. Le principe est désormais très répandu dans le monde de l’automatisme informatique : vous envoyez un ordre via une requête http à la baie (ou la console de gestion) et en retour vous récupérez un contenu de type json correspondant au résultat (données demandées ou résultat d’une commande).
Dans la pratique, ce type d’interface est particulièrement simple à utiliser, dans le sens ou un banal WGET ou CURL vous permet, moyennant le respect de la syntaxe de construction de l’URL correspondant à l’équipement interrogé, d’effecteur la majorité des opérations normalement accessibles via l’interface d’administration.
Pour XtremIO, la syntaxe est très claire et précise. L’url de base est construite de cette manière :
https://username:password@fqdn/api/json/ ......
Ici, username et password représentent votre user de connexion (identique à celui utilisé pour administrer la baie via l’interface graphique), fqdn représentant l’IP ou le hostname de la management station d’XtremIO.
Par exemple, pour récupérer les différents objets que comprend l’interface RESTful :
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 |
emc@caladan:~$ curl -k -3 "https://admin:xxxxxxx@falcon/api/json/types" { "children": [ { "href": "<strong>https://falcon/api/json/types/target-groups</strong>", "name": "target-groups" }, { "href": "<strong>https://falcon/api/json/types/lun-maps</strong>", "name": "lun-maps" }, { "href": "https://falcon/api/json/types/storage-controllers", "name": "storage-controllers" }, { "href": "https://falcon/api/json/types/ig-folders", "name": "ig-folders" }, { "href": "https://falcon/api/json/types/bricks", "name": "bricks" }, { "href": "https://falcon/api/json/types/volume-folders", "name": "volume-folders" }, { "href": "https://falcon/api/json/types/snapshots", "name": "snapshots" }, { "href": "https://falcon/api/json/types/iscsi-portals", "name": "iscsi-portals" }, { "href": "https://falcon/api/json/types/xenvs", "name": "xenvs" }, { "href": "https://falcon/api/json/types/iscsi-routes", "name": "iscsi-routes" }, { "href": "https://falcon/api/json/types/events", "name": "events" }, { "href": "https://falcon/api/json/types/initiator-groups", "name": "initiator-groups" }, { "href": "https://falcon/api/json/types/volumes", "name": "volumes" }, { "href": "https://falcon/api/json/types/clusters", "name": "clusters" }, { "href": "https://falcon/api/json/types/initiators", "name": "initiators" }, { "href": "https://falcon/api/json/types/ssds", "name": "ssds" }, { "href": "https://falcon/api/json/types/data-protection-groups", "name": "data-protection-groups" }, { "href": "https://falcon/api/json/types/targets", "name": "targets" } ], "links": [ { "href": "https://falcon/api/json/types/", "rel": "self" } ] } |
On continue : pour récupérer la liste des volumes actuellement créés dans l’appliance :
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
emc@caladan:~$ curl -sk -3 "https://admin:Xtrem10@falcon/api/json/types/volumes" { "volumes": [ { "href": "https://falcon/api/json/types/volumes/6", "name": "vplex_rdm_testxio0" } ], "links": [ { "href": "https://falcon/api/json/types/volumes/", "rel": "self" } ] } |
Vous noterez que l’appliance dispose donc d’un seul volume actuellement provisionné : “vplex_rdm_testxio0”. Vous pouvez avoir tous les détails sur ce volume, bien entendu :
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 |
emc@caladan:~$ curl -sk -3 "https://admin:Xtrem10@falcon/api/json/types/volumes/?name=vplex_rdm_testxio0" { "content": { "unaligned-io-alerts": "disabled", "small-io-alerts": "disabled", "small-iops": "0", "dest-snap-list": [], "vol-id": [ "51406b74fae947cab173e9947ae9385a", "vplex_rdm_testxio0", 6 ], "obj-severity": "information", "num-of-lun-mappings": 1, "unaligned-rd-bw": "0", "num-of-dest-snaps": 0, "iops": "0", "acc-num-of-small-wr": "41155459", "alignment-offset": 0, "lb-size": 512, "logical-space-in-use": "420429868", "unaligned-io-ratio-level": "ok", "acc-num-of-rd": "23783093", "index": 6, "small-rd-bw": "0", "naa-name": "514f0c55dd20000e", "acc-size-of-wr": "11055613372", "acc-num-of-small-rd": "23783093", "unaligned-rd-iops": "0", "wr-latency": "0", "snapgrp-id": [ "d44ea5f8731d49968a842675f5ef3a5a", "", 6 ], "ancestor-vol-id": [], "vaai-tp-alerts": "disabled", "creation-time": "2014-06-26 17:02:21", "rd-bw": "0", "xms-id": [ "ce04cc908f224bbc8d503b48fcb400e1", "xms", 1 ], "small-wr-bw": "0", "acc-num-of-unaligned-rd": "0", "lu-name": "", "unaligned-iops": "0", "unaligned-bw": "0", "bw": "0", "small-io-ratio-level": "ok", "lun-mapping-list": [ [ [ "d4aea647fcf348e8b539bff0d1111662", "KrakenTU", 1 ], [ "b8844d6708e44c67a26382ede4c06a09", "Default", 1 ], 5 ] ], "vol-size": "629145600", "wr-iops": "0", "sys-id": [ "f3d876f3b71146f9919b59f959f6af81", "falcon", 1 ], "avg-latency": "0", "rd-latency": "0", "small-wr-iops": "0", "small-bw": "0", "name": "vplex_rdm_testxio0", "acc-num-of-unaligned-wr": "0", "unaligned-wr-iops": "0", "acc-num-of-wr": "41155459", "small-io-ratio": "100", "acc-size-of-rd": "216694976", "unaligned-wr-bw": "0", "small-rd-iops": "0", "unaligned-io-ratio": "0", "rd-iops": "0", "wr-bw": "0" }, "links": [ { "href": "https://falcon/api/json/types/volumes/6", "rel": "self" } ] } |
En matière d’administration, il est également possible de donner des ordres à la baie. Pour ce faire, il ne faut plus utiliser le HTTP GET classique mais le POST. La commande est plus complexe à construire, dans le sens ou il faut envoyer un contenu spécifiquement formatté pour réaliser l’opération, contrairement à l’interrogation ou seule l’URL de la requête suffit à préciser ce que l’on souhaite récupérer.
Pour pouvoir tester cela, il suffit de créer un petit fichier contenant, en format “json”, les paramètres souhaités pour la commande puis de l’envoyer via une commande curl “POST”. Par exemple, pour créer un nouveau volume sur la baie, voici le contenu du fichier :
1 2 3 4 5 |
{ "vol-name":"testvol", "vol-size":"500M", "parent-folder-id":"/" } |
Ensuite, déclenche un curl “POST” avec le fichier (ici “createvol.txt”) :
1 2 3 4 5 6 7 8 9 |
curl -X POST -d @createvol.txt -sk -3 "https://admin:Xtrem10@falcon/api/json/types/volumes" { "links": [ { "href": "https://falcon/api/json/types/volumes/1", "rel": "self" } ] } |
C’est terminé, la commande retour indique que le volume a été créé avec l’id interne “1”, que l’on peut interroger ensuite pour confirmer ses caractéristiques.
XtremIO dispose donc d’une interface RESTful très ouverte et complète, permettant d’envisager tous les usages en matière de supervision et administration. Nous allons travailler de notre coté à l’intégration de nos appliances XtremIO à notre outil de supervision Nagios, comme nous l’avions fait pour VPlex lors de son implantation. Dès que ce sera mûr et en production chez nous, je vous mettrai à disposition les différents scripts associés.