{"id":754,"date":"2021-04-01T06:24:45","date_gmt":"2021-04-01T05:24:45","guid":{"rendered":"https:\/\/www.netexpertise.eu\/fr\/?p=754"},"modified":"2021-08-10T06:56:24","modified_gmt":"2021-08-10T05:56:24","slug":"inventory-ansible-dynamique-des-serveurs-ibm-cloud","status":"publish","type":"post","link":"http:\/\/www.netexpertise.eu\/fr\/devops\/ansible\/inventory-ansible-dynamique-des-serveurs-ibm-cloud.html","title":{"rendered":"Inventaire Ansible Dynamique des Serveurs IBM Cloud"},"content":{"rendered":"\n<p>IBM Cloud repose sur l&rsquo;<a href=\"https:\/\/sldn.softlayer.com\/article\/getting-started\/\">API Softlayer<\/a> &#8211; aussi appel\u00e9e IBM Classic Infrastructure &#8211; pour automatiser les actions. L&rsquo;API est disponible en diff\u00e9rents langages comme Python, Go, Java ou PHP et nous permettra de g\u00e9n\u00e9rer un inventaire Ansible.<br><br><\/p>\n\n\n\n<div class=\"wp-block-image\"><figure class=\"aligncenter size-large\"><img src=\"\/uploads\/duck-meet-ducks-rubber-ducks-3325701.jpg\" alt=\"\"\/><\/figure><\/div>\n\n\n\n<p><br>Je vais g\u00e9n\u00e9rer un inventaire dynamique des serveurs r\u00e9cup\u00e9r\u00e9s sur mon compte IBM Cloud directement utilisable par <a href=\"\/fr\/category\/devops\/ansible\">Ansible<\/a>. Je vais aussi g\u00e9n\u00e9rer des groupes correspondants aux datacenters. Vous aimeriez aussi regrouper les serveurs dans toutes sortes de cat\u00e9gories comme Databases, Mysql, Linux, Web, etc&#8230; Pas d&rsquo;inqui\u00e9tude, on peut aussi faire ca de fa\u00e7on tr\u00e8s simple.<br>On peut y parvenir en ajoutant des tags aux hosts dans le <a href=\"http:\/\/cloud.ibm.com\">portail IBM Cloud<\/a> et un host peut avoir plusieurs tags \u00e9videmment et appartenir aux groupes Ansible correspondants \u00e0 ces tags\/\u00e9tiquettes.<\/p>\n\n\n\n<p>Une fois que ces groupes ont \u00e9t\u00e9 d\u00e9clar\u00e9s dans le fichier inventory, vous pouvez lancer les playbooks Ansible comme l&rsquo;installation des paquets Apache sur les serveurs appartenant au groupe \u00ab\u00a0Web\u00a0\u00bb par exemple.<\/p>\n\n\n\n<p><br>Vous devez d&rsquo;abord ajouter votre API key dans un fichier shell \u00e0 ex\u00e9cuter avant de lancer le script. Ca pourrait faire partie du script, mais cella permet \u00e0 chaque utilisateur d&rsquo;utiliser sa propre cl\u00e9. La cl\u00e9 d&rsquo;API peut \u00eatre g\u00e9n\u00e9r\u00e9e ou trouv\u00e9e sur le <a href=\"https:\/\/cloud.ibm.com\" target=\"_blank\" rel=\"noreferrer noopener\">portail IBM Cloud<\/a>.<br><br><\/p>\n\n\n\n<pre class=\"wp-block-code\"><code lang=\"bash\" class=\"language-bash\">export SL_USERNAME=nom_utilisateur\nexport SL_API_KEY=a1b2c3[...]3456<\/code><\/pre>\n\n\n\n<p><br>Lancez <em>. .\/IBM_SL_env.sh<\/em> tout d&rsquo;abord pour ajouter le username et l&rsquo;API key dans des variables d&rsquo;environnement qui seront lues par le script Python ci-dessous.<br><br><\/p>\n\n\n\n<pre class=\"wp-block-code\"><code lang=\"python\" class=\"language-python\">#!\/usr\/bin\/env python3 &nbsp;\nimport os\nimport SoftLayer\n \nHOST_VARS_DIR&nbsp; = \"host_vars\"\nINVENTORY_FILE = \"inventory\"\n \nclass Inventory:\n &nbsp; def __init__(self):\n &nbsp; &nbsp; &nbsp;# Variables\n &nbsp; &nbsp; &nbsp;self.categories = {}\n &nbsp; &nbsp; &nbsp;self.datacenter = {}\n &nbsp; &nbsp; &nbsp;self.servers = {}\n \n &nbsp; &nbsp; &nbsp;# Create Softlayer connection\n &nbsp; &nbsp; &nbsp;self.client = SoftLayer.create_client_from_env()\n \n &nbsp; &nbsp; &nbsp;# Init Methods\n &nbsp; &nbsp; &nbsp;self.get_server_list()\n &nbsp; &nbsp; &nbsp;self.write_inventory()\n \n\n &nbsp; def short_host_name(self, host):\n &nbsp; &nbsp; &nbsp;return host['fullyQualifiedDomainName'][:host['fullyQualifiedDomainName'].find('.mydomain.')]\n \n\n &nbsp; def add_host_to_cat(self, host, cat):\n &nbsp; &nbsp; &nbsp;if cat == \"ibm-kubernetes-service\": cat = \"kube\"\n &nbsp; &nbsp; &nbsp;if cat not in self.categories:\n &nbsp; &nbsp; &nbsp; &nbsp; self.categories[cat] = [host]\n &nbsp; &nbsp; &nbsp;else:\n &nbsp; &nbsp; &nbsp; &nbsp; self.categories[cat].append(host)\n \n\n &nbsp; def add_server_to_list(self, host):\n &nbsp; &nbsp; &nbsp;try:\n &nbsp; &nbsp; &nbsp; &nbsp; host[\"primaryBackendIpAddress\"]\n &nbsp; &nbsp; &nbsp;except KeyError:\n &nbsp; &nbsp; &nbsp; &nbsp; pass\n &nbsp; &nbsp; &nbsp;else:\n &nbsp; &nbsp; &nbsp; &nbsp; host[\"ShortHostname\"] = self.short_host_name(host)\n &nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;\n &nbsp; &nbsp; &nbsp; &nbsp; # Build server Categories list\n &nbsp; &nbsp; &nbsp; &nbsp; if host[\"tagReferences\"] != []:\n &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;for tagRef in host[\"tagReferences\"]:\n &nbsp; &nbsp; &nbsp; &nbsp;       self.add_host_to_cat(host[\"ShortHostname\"], tagRef[\"tag\"][\"name\"].strip())\n &nbsp; &nbsp; &nbsp; &nbsp;  &nbsp; &nbsp;\n &nbsp; &nbsp; &nbsp; &nbsp; # Build datacenter lists\n &nbsp; &nbsp; &nbsp; &nbsp; if host[\"datacenter\"][\"name\"] not in self.datacenter:\n &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;self.datacenter[host[\"datacenter\"][\"name\"]] = [host[\"ShortHostname\"]]\n &nbsp; &nbsp; &nbsp; &nbsp; else:\n &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;self.datacenter[host[\"datacenter\"][\"name\"]].append(host[\"ShortHostname\"])\n &nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;\n &nbsp; &nbsp; &nbsp; &nbsp; # Build server attribute list\n &nbsp; &nbsp; &nbsp; &nbsp; serverAttributes = {}\n &nbsp; &nbsp; &nbsp; &nbsp; serverAttributes['IP'] = host[\"primaryBackendIpAddress\"]\n &nbsp; &nbsp; &nbsp; &nbsp; self.servers[host[\"ShortHostname\"]] = serverAttributes\n &nbsp;&nbsp; &nbsp;\n\n &nbsp; def get_server_list(self):\n &nbsp; &nbsp; &nbsp;object_mask = \"mask[id,fullyQualifiedDomainName,\" \\\n &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;\"primaryBackendIpAddress,\" \\\n &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;\"tagReferences[tag[name]],\" \\\n &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;\"datacenter]\"\n \n &nbsp; &nbsp; &nbsp;# Get virtual server list\n &nbsp; &nbsp; &nbsp;mgr = SoftLayer.VSManager(self.client)\n &nbsp; &nbsp; &nbsp;for vs in mgr.list_instances(mask=object_mask):\n &nbsp; &nbsp; &nbsp; &nbsp; self.add_server_to_list(vs)\n \n &nbsp; &nbsp; &nbsp;# Get bare metal servers\n &nbsp; &nbsp; &nbsp;hsl = SoftLayer.HardwareManager(self.client)\n &nbsp; &nbsp; &nbsp;for hs in hsl.list_hardware(mask=object_mask):\n &nbsp; &nbsp; &nbsp; &nbsp; self.add_server_to_list(hs)\n \n\n &nbsp; def write_inventory(self):\n &nbsp; &nbsp; &nbsp;# host_vars structure\n &nbsp; &nbsp; &nbsp;if not os.path.exists(HOST_VARS_DIR):\n &nbsp; &nbsp; &nbsp; &nbsp; os.makedirs(HOST_VARS_DIR)\n \n &nbsp; &nbsp; &nbsp;inventoryFile = open(INVENTORY_FILE,\"w\")\n \n &nbsp; &nbsp; &nbsp;for cat in self.categories.keys():\n &nbsp; &nbsp; &nbsp; &nbsp; if cat != \"kube\":\n &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;inventoryFile.write(\"[\" + cat + \"]\\n\")\n &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;for host in self.categories[cat]:\n &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; # write host vars\n &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; inventoryFile.write(host + \"\\n\")\n &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; file = open(HOST_VARS_DIR+\"\/\"+host,\"w\")\n &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; file.write(\"ansible_host: \" + self.servers[host]['IP'] + \"\\n\")\n &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; file.close() &nbsp; &nbsp; &nbsp; &nbsp;\n &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;inventoryFile.write(\"\\n\")\n &nbsp; &nbsp; &nbsp;for dc in self.datacenter.keys():\n &nbsp; &nbsp; &nbsp; &nbsp; inventoryFile.write(\"[\" + dc + \"]\\n\")\n &nbsp; &nbsp; &nbsp; &nbsp; for host in self.datacenter[dc]:\n &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;if not host.startswith(\"kube\"):\n &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; inventoryFile.write(host + \"\\n\")\n &nbsp; &nbsp; &nbsp; &nbsp; inventoryFile.write(\"\\n\")\n &nbsp; &nbsp; &nbsp;inventoryFile.close()\n\nif __name__ == \"__main__\":\n &nbsp; exit(Inventory())<\/code><\/pre>\n\n\n\n<p><br>Quelques notes:<br><br>Les nodes Kubernetes manag\u00e9s sont visibles dans l&rsquo;infrastructure classique d&rsquo;IBM comme n&rsquo;importe quelle VM (VSI dans la terminologie IBM) mais vous ne pouvez pas vous y connecter. Ils sont donc ajout\u00e9s \u00e0 la cat\u00e9gorie \u00ab\u00a0Kube\u00a0\u00bb avant d&rsquo;\u00eatre ignor\u00e9s.<\/p>\n\n\n\n<p><br>Un fichier distinct est cr\u00e9\u00e9 dans hosts_var pour chaque serveur contenant son address IP. Vous pourriez y ajouter d&rsquo;autres variables comme les param\u00e8tres iSCSI, etc&#8230;<\/p>\n\n\n\n<p><br>Le script r\u00e9cup\u00e8re les machines virtuelles ainsi que les machines physique bare metal. Vous pouvez commenter l&rsquo;une de ces sections si vous n&rsquo;en avez pas besoin, \u00e9pargnant un appel \u00e0 IBM.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>IBM Cloud repose sur l&rsquo;API Softlayer &#8211; aussi appel\u00e9e IBM Classic Infrastructure &#8211; pour automatiser les actions. L&rsquo;API est disponible en diff\u00e9rents langages comme Python, Go, Java ou PHP et nous permettra de g\u00e9n\u00e9rer un inventaire Ansible. Je vais g\u00e9n\u00e9rer un inventaire dynamique des serveurs r\u00e9cup\u00e9r\u00e9s sur mon compte IBM Cloud directement utilisable par Ansible. [&hellip;]<\/p>\n","protected":false},"author":2,"featured_media":0,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"_mi_skip_tracking":false},"categories":[441,446],"tags":[444,396,453,447],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v19.13 - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>Netexpertise - Inventaire Ansible Dynamique des Serveurs IBM Cloud<\/title>\n<meta name=\"description\" content=\"Cr\u00e9ez un inventaire dynamique Ansible des serveurs IBM Cloud en Python avec les API Softlayer\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/www.netexpertise.eu\/fr\/devops\/ansible\/inventory-ansible-dynamique-des-serveurs-ibm-cloud.html\" \/>\n<meta property=\"og:locale\" content=\"fr_FR\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Netexpertise - Inventaire Ansible Dynamique des Serveurs IBM Cloud\" \/>\n<meta property=\"og:description\" content=\"Cr\u00e9ez un inventaire dynamique Ansible des serveurs IBM Cloud en Python avec les API Softlayer\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.netexpertise.eu\/fr\/devops\/ansible\/inventory-ansible-dynamique-des-serveurs-ibm-cloud.html\" \/>\n<meta property=\"og:site_name\" content=\"Netexpertise\" \/>\n<meta property=\"article:published_time\" content=\"2021-04-01T05:24:45+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2021-08-10T05:56:24+00:00\" \/>\n<meta name=\"author\" content=\"dave\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:creator\" content=\"@netexpertise\" \/>\n<meta name=\"twitter:site\" content=\"@netexpertise\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"WebPage\",\"@id\":\"https:\/\/www.netexpertise.eu\/fr\/devops\/ansible\/inventory-ansible-dynamique-des-serveurs-ibm-cloud.html\",\"url\":\"https:\/\/www.netexpertise.eu\/fr\/devops\/ansible\/inventory-ansible-dynamique-des-serveurs-ibm-cloud.html\",\"name\":\"Netexpertise - Inventaire Ansible Dynamique des Serveurs IBM Cloud\",\"isPartOf\":{\"@id\":\"https:\/\/www.netexpertise.eu\/fr\/#website\"},\"datePublished\":\"2021-04-01T05:24:45+00:00\",\"dateModified\":\"2021-08-10T05:56:24+00:00\",\"author\":{\"@id\":\"https:\/\/www.netexpertise.eu\/fr\/#\/schema\/person\/e398f0307e2b167f6b884c4953be2632\"},\"description\":\"Cr\u00e9ez un inventaire dynamique Ansible des serveurs IBM Cloud en Python avec les API Softlayer\",\"breadcrumb\":{\"@id\":\"https:\/\/www.netexpertise.eu\/fr\/devops\/ansible\/inventory-ansible-dynamique-des-serveurs-ibm-cloud.html#breadcrumb\"},\"inLanguage\":\"fr-FR\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/www.netexpertise.eu\/fr\/devops\/ansible\/inventory-ansible-dynamique-des-serveurs-ibm-cloud.html\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/www.netexpertise.eu\/fr\/devops\/ansible\/inventory-ansible-dynamique-des-serveurs-ibm-cloud.html#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Accueil\",\"item\":\"https:\/\/www.netexpertise.eu\/fr\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Inventaire Ansible Dynamique des Serveurs IBM Cloud\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/www.netexpertise.eu\/fr\/#website\",\"url\":\"https:\/\/www.netexpertise.eu\/fr\/\",\"name\":\"Netexpertise\",\"description\":\"Syst\u00e8mes \/ R\u00e9seaux \/ DevOps\",\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/www.netexpertise.eu\/fr\/?s={search_term_string}\"},\"query-input\":\"required name=search_term_string\"}],\"inLanguage\":\"fr-FR\"},{\"@type\":\"Person\",\"@id\":\"https:\/\/www.netexpertise.eu\/fr\/#\/schema\/person\/e398f0307e2b167f6b884c4953be2632\",\"name\":\"dave\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"fr-FR\",\"@id\":\"https:\/\/www.netexpertise.eu\/fr\/#\/schema\/person\/image\/\",\"url\":\"http:\/\/1.gravatar.com\/avatar\/1129916e1f4955bd632f27f836f64e55?s=96&d=mm&r=g\",\"contentUrl\":\"http:\/\/1.gravatar.com\/avatar\/1129916e1f4955bd632f27f836f64e55?s=96&d=mm&r=g\",\"caption\":\"dave\"},\"sameAs\":[\"http:\/\/www.netexpertise.eu\"]}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Netexpertise - Inventaire Ansible Dynamique des Serveurs IBM Cloud","description":"Cr\u00e9ez un inventaire dynamique Ansible des serveurs IBM Cloud en Python avec les API Softlayer","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/www.netexpertise.eu\/fr\/devops\/ansible\/inventory-ansible-dynamique-des-serveurs-ibm-cloud.html","og_locale":"fr_FR","og_type":"article","og_title":"Netexpertise - Inventaire Ansible Dynamique des Serveurs IBM Cloud","og_description":"Cr\u00e9ez un inventaire dynamique Ansible des serveurs IBM Cloud en Python avec les API Softlayer","og_url":"https:\/\/www.netexpertise.eu\/fr\/devops\/ansible\/inventory-ansible-dynamique-des-serveurs-ibm-cloud.html","og_site_name":"Netexpertise","article_published_time":"2021-04-01T05:24:45+00:00","article_modified_time":"2021-08-10T05:56:24+00:00","author":"dave","twitter_card":"summary_large_image","twitter_creator":"@netexpertise","twitter_site":"@netexpertise","schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"WebPage","@id":"https:\/\/www.netexpertise.eu\/fr\/devops\/ansible\/inventory-ansible-dynamique-des-serveurs-ibm-cloud.html","url":"https:\/\/www.netexpertise.eu\/fr\/devops\/ansible\/inventory-ansible-dynamique-des-serveurs-ibm-cloud.html","name":"Netexpertise - Inventaire Ansible Dynamique des Serveurs IBM Cloud","isPartOf":{"@id":"https:\/\/www.netexpertise.eu\/fr\/#website"},"datePublished":"2021-04-01T05:24:45+00:00","dateModified":"2021-08-10T05:56:24+00:00","author":{"@id":"https:\/\/www.netexpertise.eu\/fr\/#\/schema\/person\/e398f0307e2b167f6b884c4953be2632"},"description":"Cr\u00e9ez un inventaire dynamique Ansible des serveurs IBM Cloud en Python avec les API Softlayer","breadcrumb":{"@id":"https:\/\/www.netexpertise.eu\/fr\/devops\/ansible\/inventory-ansible-dynamique-des-serveurs-ibm-cloud.html#breadcrumb"},"inLanguage":"fr-FR","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.netexpertise.eu\/fr\/devops\/ansible\/inventory-ansible-dynamique-des-serveurs-ibm-cloud.html"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/www.netexpertise.eu\/fr\/devops\/ansible\/inventory-ansible-dynamique-des-serveurs-ibm-cloud.html#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Accueil","item":"https:\/\/www.netexpertise.eu\/fr"},{"@type":"ListItem","position":2,"name":"Inventaire Ansible Dynamique des Serveurs IBM Cloud"}]},{"@type":"WebSite","@id":"https:\/\/www.netexpertise.eu\/fr\/#website","url":"https:\/\/www.netexpertise.eu\/fr\/","name":"Netexpertise","description":"Syst\u00e8mes \/ R\u00e9seaux \/ DevOps","potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/www.netexpertise.eu\/fr\/?s={search_term_string}"},"query-input":"required name=search_term_string"}],"inLanguage":"fr-FR"},{"@type":"Person","@id":"https:\/\/www.netexpertise.eu\/fr\/#\/schema\/person\/e398f0307e2b167f6b884c4953be2632","name":"dave","image":{"@type":"ImageObject","inLanguage":"fr-FR","@id":"https:\/\/www.netexpertise.eu\/fr\/#\/schema\/person\/image\/","url":"http:\/\/1.gravatar.com\/avatar\/1129916e1f4955bd632f27f836f64e55?s=96&d=mm&r=g","contentUrl":"http:\/\/1.gravatar.com\/avatar\/1129916e1f4955bd632f27f836f64e55?s=96&d=mm&r=g","caption":"dave"},"sameAs":["http:\/\/www.netexpertise.eu"]}]}},"_links":{"self":[{"href":"http:\/\/www.netexpertise.eu\/fr\/wp-json\/wp\/v2\/posts\/754"}],"collection":[{"href":"http:\/\/www.netexpertise.eu\/fr\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"http:\/\/www.netexpertise.eu\/fr\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"http:\/\/www.netexpertise.eu\/fr\/wp-json\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"http:\/\/www.netexpertise.eu\/fr\/wp-json\/wp\/v2\/comments?post=754"}],"version-history":[{"count":0,"href":"http:\/\/www.netexpertise.eu\/fr\/wp-json\/wp\/v2\/posts\/754\/revisions"}],"wp:attachment":[{"href":"http:\/\/www.netexpertise.eu\/fr\/wp-json\/wp\/v2\/media?parent=754"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"http:\/\/www.netexpertise.eu\/fr\/wp-json\/wp\/v2\/categories?post=754"},{"taxonomy":"post_tag","embeddable":true,"href":"http:\/\/www.netexpertise.eu\/fr\/wp-json\/wp\/v2\/tags?post=754"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}