{"id":15252,"date":"2020-11-25T07:35:41","date_gmt":"2020-11-25T06:35:41","guid":{"rendered":"https:\/\/www.dbi-services.com\/blog\/ansible-custom-interactive-dynamic-inventory\/"},"modified":"2020-11-25T07:35:41","modified_gmt":"2020-11-25T06:35:41","slug":"ansible-custom-interactive-dynamic-inventory","status":"publish","type":"post","link":"https:\/\/www.dbi-services.com\/blog\/ansible-custom-interactive-dynamic-inventory\/","title":{"rendered":"Ansible Custom Interactive Dynamic Inventory"},"content":{"rendered":"<p>When working with an Ansible dynamic inventory, you may want to update it from your playbook on the fly. For instance, you may want to create a server and then install an application on it without calling a second playbook or developing specific code to create a runtime group (e.g. &#8220;add_host&#8221; module). Or you may want to update the inventory on the fly without having to wait for an asynchronous mechanism to be triggered. This all this project is about: providing you a simple, fully encrypted, interactive dynamic inventory made to measure for your environment.<\/p>\n<h2>Back-end setup<\/h2>\n<h3>1) Install the database software:<\/h3>\n<p>This will serve as a data storage for your Ansible inventory data (More details <a href=\"https:\/\/siodb.io\" rel=\"noopener noreferrer\" target=\"_blank\">here<\/a>)<\/p>\n<pre class=\"brush: bash; gutter: true; first-line: 1\">\nwget https:\/\/siodb.io\/packages\/InstallSiodb.sh\nchmod u+x .\/InstallSiodb.sh\nsudo .\/InstallSiodb.sh\n<\/pre>\n<h3>2) Get the last version of the dynamic inventory:<\/h3>\n<pre class=\"brush: bash; gutter: true; first-line: 1\">\ngit clone https:\/\/github.com\/siodb\/ansible-dynamic-inventory.git\ncd ansible-dynamic-inventory\n<\/pre>\n<h3>3) Create the inventory data model and the database user:<\/h3>\n<pre class=\"brush: bash; gutter: true; first-line: 1\">\nsudo -i -u siodb siocli --user root &lt; sio_inv_data_model.sql\nsudo -i -u siodb siocli --user root &lt; sio_inv_user.sql\n<\/pre>\n<h3>4) Create your groups, groupvars, hosts and hostvars:<\/h3>\n<p>On this step, you can add your groups, groupvars, hosts and hostvars by inserting them into the correct table. Also, you can link them together using the columns:<\/p>\n<ul>\n<li>groups_variables.group_id: to link variables to a group from the group table.<\/li>\n<li>hosts.group_id: to link a group from the group table.<\/li>\n<li>hosts_variables.host_id: to link variables to a host from the hosts table.<\/li>\n<\/ul>\n<p>Here is a overview of the data model used for this inventory (red number indicating the order in which to insert data):<\/p>\n<p><a href=\"https:\/\/www.dbi-services.com\/blog\/wp-content\/uploads\/sites\/2\/2022\/04\/sioinv_dm_v1-1.jpg\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/www.dbi-services.com\/blog\/wp-content\/uploads\/sites\/2\/2022\/04\/sioinv_dm_v1-1.jpg\" alt=\"\" width=\"835\" height=\"592\" class=\"alignnone size-full wp-image-45332\" \/><\/a><\/p>\n<p>So, first connect to the database freshly installed from step 1):<\/p>\n<pre class=\"brush: bash; gutter: true; first-line: 1\">\nsudo -i -u siodb siocli --user root\n<\/pre>\n<p>Then insert your data. For instance:<\/p>\n<pre class=\"brush: sql; gutter: true; first-line: 1\">\nuse database sioinv ;\ninsert into groups\nvalues\n    ( 'production' ),\n    ( 'test' ),\n    ( 'development' )\n;\ninsert into groups_variables\nvalues\n    ( 1, 'domain_name', 'company.com' ),\n    ( 2, 'environment_name', 'production' ),\n    ( 2, 'subnet', '10.10.0.0\/16' ),\n    ( 3, 'environment_name', 'test' ),\n    ( 3, 'subnet', '10.20.0.0\/16' ),\n    ( 4, 'environment_name', 'development' ),\n    ( 4, 'subnet', '10.30.0.0\/16' )\n;\n\ninsert into hosts\nvalues\n    ( 2, 'server-01', CURRENT_TIMESTAMP ),\n    ( 3, 'server-02', CURRENT_TIMESTAMP ),\n    ( 4, 'server-03', CURRENT_TIMESTAMP )\n;\n\ninsert into hosts_variables\nvalues\n    ( 1, 'public_ip', '0.1.2.3' ),\n    ( 1, 'application', 'app01' ),\n    ( 2, 'public_ip', '0.1.2.4' ),\n    ( 2, 'application', 'app02' ),\n    ( 3, 'public_ip', '0.1.2.4' ),\n    ( 3, 'application', 'app02' )\n;\n<\/pre>\n<h2>Configure the inventory<\/h2>\n<p>You must tell the inventory script where to lookup for its data. That is done configuring the file sio_inv.ini:<\/p>\n<pre class=\"brush: ini; gutter: true; first-line: 1\">\n[sio_inv]\nsiodb_rest_ip = localhost\nsiodb_rest_port = 50443\nsiodb_rest_user = sioinv\nsiodb_rest_token = [token-generated-from-script-sio_inv_user.sql]\nsiodb_rest_tls_verify_certificate = no\n<\/pre>\n<h2>Validate the inventory<\/h2>\n<p>Use the command <a href=\"https:\/\/docs.ansible.com\/ansible\/latest\/cli\/ansible-inventory.html\" rel=\"noopener noreferrer\" target=\"_blank\">ansible-inventory<\/a> to validate your inventory. For instance:<\/p>\n<pre class=\"brush: bash; gutter: true; first-line: 1\">\n$ ansible-inventory -i .\/sio_inv.py  --graph --vars\n@all:\n  |--@development:\n  |  |--server-03\n  |  |  |--{domain_name = company.com}\n  |  |  |--{environment_name = development}\n  |  |  |--{subnet = 10.30.0.0\/16}\n  |  |--{environment_name = development}\n  |  |--{subnet = 10.30.0.0\/16}\n  |--@production:\n  |  |--hypervisor-01\n  |  |  |--{domain_name = company.com}\n  |  |  |--{environment_name = production}\n  |  |  |--{subnet = 10.10.0.0\/16}\n  |  |--hypervisor-02\n  |  |  |--{domain_name = company.com}\n  |  |  |--{environment_name = production}\n  |  |  |--{subnet = 10.10.0.0\/16}\n  |  |--server-01\n  |  |  |--{application = app01}\n  |  |  |--{domain_name = company.com}\n  |  |  |--{environment_name = production}\n  |  |  |--{public_ip = 0.1.2.3}\n  |  |  |--{subnet = 10.10.0.0\/16}\n  |  |--server-04\n  |  |  |--{domain_name = company.com}\n  |  |  |--{environment_name = production}\n  |  |  |--{subnet = 10.10.0.0\/16}\n  |  |--{environment_name = production}\n  |  |--{subnet = 10.10.0.0\/16}\n  |--@test:\n  |  |--server-02\n  |  |  |--{application = app02}\n  |  |  |--{domain_name = company.com}\n  |  |  |--{environment_name = test}\n  |  |  |--{public_ip = 0.1.2.4}\n  |  |  |--{subnet = 10.20.0.0\/16}\n  |  |--server-05\n  |  |  |--{domain_name = company.com}\n  |  |  |--{environment_name = test}\n  |  |  |--{subnet = 10.20.0.0\/16}\n  |  |--{environment_name = test}\n  |  |--{subnet = 10.20.0.0\/16}\n  |--@ungrouped:\n  |--{domain_name = company.com}\n<\/pre>\n<h2>Example of playbook<\/h2>\n<p>Here is an example of how to interactively deal with the dynamic inventory while the playbook is running<br \/>\n(Set the variable {{ sioinv_user_token }} where it makes sense for you and store the token in Ansible Vault):<\/p>\n<pre class=\"brush: yaml; gutter: true; first-line: 1\">\n\n---\n- name: Full Stack Service creation\n  hosts: hypervisor-01\n  tasks:\n\n    - name: Create machine\n      shell: &gt;\n        echo \"Module or command to create a new Virtual Machine {{ vm_name }}\"\n\n    - name: Update the custom dynamic inventory on the fly with the just-created vm\n      uri:\n        url: https:\/\/localhost:50443\/databases\/sioinv\/tables\/hosts\/rows\n        validate_certs: false\n        user: sioinv\n        password: \"{{ sioinv_user_token }}\"\n        method: POST\n        body: &gt;\n          [{\n            \"name\": \"{{ vm_name }}\"\n          }]\n        force_basic_auth: yes\n        status_code: 201\n        body_format: json\n      register: r_vm_post\n\n    - name: Add hostvars on the fly to the just-created vm\n      uri:\n        url: https:\/\/localhost:50443\/databases\/sioinv\/tables\/hosts_variables\/rows\n        validate_certs: false\n        user: sioinv\n        password: \"{{ sioinv_user_token }}\"\n        method: POST\n        body: &gt;\n          [{\n            \"host_id\": {{ r_vm_post.json.trids[0] }},\n            \"name\": \"ip_address\",\n            \"value\": \"10.10.0.0\"\n          }]\n        force_basic_auth: yes\n        status_code: 201\n        body_format: json\n\n    - name: Refresh the inventory in current run to include the new VM and its variables before moving to the next play\n      meta: refresh_inventory\n\n- name: Full Stack Service creation\n  hosts: \"{{ vm_name }}\"\n  tasks:\n\n    - name: Create the new database on the new VM\n      shell: &gt;\n        echo \"Module or command to create a new database on {{ vm_name }}\"\n\n<\/pre>\n<h2>Last words before you go<\/h2>\n<p>The inventory is the foundation of your Ansible strategy. It must be dynamic as possible and avoiding complexity to ensure smooth maintenance in the future. Modifying the inventory may lead you to change all your roles and playbooks and is something you may want to avoid. With this simple inventory describe here, you&#8217;ll have a strong foundation for your Ansible automation.<\/p>\n<p>I hope this helps you, and please do contact us or comment below if you need more details.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>When working with an Ansible dynamic inventory, you may want to update it from your playbook on the fly. For instance, you may want to create a server and then install an application on it without calling a second playbook or developing specific code to create a runtime group (e.g. &#8220;add_host&#8221; module). Or you may [&hellip;]<\/p>\n","protected":false},"author":27,"featured_media":15253,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"footnotes":""},"categories":[955,368,525],"tags":[],"type_dbi":[],"class_list":["post-15252","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-cloud","category-development-performance","category-enterprise-content-management"],"acf":[],"yoast_head":"<!-- This site is optimized with the Yoast SEO Premium plugin v27.2 (Yoast SEO v27.5) - https:\/\/yoast.com\/product\/yoast-seo-premium-wordpress\/ -->\n<title>Ansible Custom Interactive Dynamic Inventory - dbi Blog<\/title>\n<meta name=\"description\" content=\"Ansible custom interactive dynamic inventory: the inventory is the foundation of your Ansible strategy. With this simple inventory, you&#039;ll have a strong foundation for your Ansible automation.\" \/>\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.dbi-services.com\/blog\/ansible-custom-interactive-dynamic-inventory\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Ansible Custom Interactive Dynamic Inventory\" \/>\n<meta property=\"og:description\" content=\"Ansible custom interactive dynamic inventory: the inventory is the foundation of your Ansible strategy. With this simple inventory, you&#039;ll have a strong foundation for your Ansible automation.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.dbi-services.com\/blog\/ansible-custom-interactive-dynamic-inventory\/\" \/>\n<meta property=\"og:site_name\" content=\"dbi Blog\" \/>\n<meta property=\"article:published_time\" content=\"2020-11-25T06:35:41+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/www.dbi-services.com\/blog\/wp-content\/uploads\/sites\/2\/2022\/04\/sioinv_dm_v1-1.jpg\" \/>\n\t<meta property=\"og:image:width\" content=\"835\" \/>\n\t<meta property=\"og:image:height\" content=\"592\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/jpeg\" \/>\n<meta name=\"author\" content=\"Oracle Team\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"Oracle Team\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"4 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\\\/\\\/www.dbi-services.com\\\/blog\\\/ansible-custom-interactive-dynamic-inventory\\\/#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/www.dbi-services.com\\\/blog\\\/ansible-custom-interactive-dynamic-inventory\\\/\"},\"author\":{\"name\":\"Oracle Team\",\"@id\":\"https:\\\/\\\/www.dbi-services.com\\\/blog\\\/#\\\/schema\\\/person\\\/66ab87129f2d357f09971bc7936a77ee\"},\"headline\":\"Ansible Custom Interactive Dynamic Inventory\",\"datePublished\":\"2020-11-25T06:35:41+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/www.dbi-services.com\\\/blog\\\/ansible-custom-interactive-dynamic-inventory\\\/\"},\"wordCount\":414,\"commentCount\":0,\"image\":{\"@id\":\"https:\\\/\\\/www.dbi-services.com\\\/blog\\\/ansible-custom-interactive-dynamic-inventory\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/www.dbi-services.com\\\/blog\\\/wp-content\\\/uploads\\\/sites\\\/2\\\/2022\\\/04\\\/sioinv_dm_v1-1.jpg\",\"articleSection\":[\"Cloud\",\"Development &amp; Performance\",\"Enterprise content management\"],\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\\\/\\\/www.dbi-services.com\\\/blog\\\/ansible-custom-interactive-dynamic-inventory\\\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/www.dbi-services.com\\\/blog\\\/ansible-custom-interactive-dynamic-inventory\\\/\",\"url\":\"https:\\\/\\\/www.dbi-services.com\\\/blog\\\/ansible-custom-interactive-dynamic-inventory\\\/\",\"name\":\"Ansible Custom Interactive Dynamic Inventory - dbi Blog\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/www.dbi-services.com\\\/blog\\\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\\\/\\\/www.dbi-services.com\\\/blog\\\/ansible-custom-interactive-dynamic-inventory\\\/#primaryimage\"},\"image\":{\"@id\":\"https:\\\/\\\/www.dbi-services.com\\\/blog\\\/ansible-custom-interactive-dynamic-inventory\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/www.dbi-services.com\\\/blog\\\/wp-content\\\/uploads\\\/sites\\\/2\\\/2022\\\/04\\\/sioinv_dm_v1-1.jpg\",\"datePublished\":\"2020-11-25T06:35:41+00:00\",\"author\":{\"@id\":\"https:\\\/\\\/www.dbi-services.com\\\/blog\\\/#\\\/schema\\\/person\\\/66ab87129f2d357f09971bc7936a77ee\"},\"description\":\"Ansible custom interactive dynamic inventory: the inventory is the foundation of your Ansible strategy. With this simple inventory, you'll have a strong foundation for your Ansible automation.\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/www.dbi-services.com\\\/blog\\\/ansible-custom-interactive-dynamic-inventory\\\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/www.dbi-services.com\\\/blog\\\/ansible-custom-interactive-dynamic-inventory\\\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/www.dbi-services.com\\\/blog\\\/ansible-custom-interactive-dynamic-inventory\\\/#primaryimage\",\"url\":\"https:\\\/\\\/www.dbi-services.com\\\/blog\\\/wp-content\\\/uploads\\\/sites\\\/2\\\/2022\\\/04\\\/sioinv_dm_v1-1.jpg\",\"contentUrl\":\"https:\\\/\\\/www.dbi-services.com\\\/blog\\\/wp-content\\\/uploads\\\/sites\\\/2\\\/2022\\\/04\\\/sioinv_dm_v1-1.jpg\",\"width\":835,\"height\":592},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/www.dbi-services.com\\\/blog\\\/ansible-custom-interactive-dynamic-inventory\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Accueil\",\"item\":\"https:\\\/\\\/www.dbi-services.com\\\/blog\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Ansible Custom Interactive Dynamic Inventory\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/www.dbi-services.com\\\/blog\\\/#website\",\"url\":\"https:\\\/\\\/www.dbi-services.com\\\/blog\\\/\",\"name\":\"dbi Blog\",\"description\":\"\",\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/www.dbi-services.com\\\/blog\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-US\"},{\"@type\":\"Person\",\"@id\":\"https:\\\/\\\/www.dbi-services.com\\\/blog\\\/#\\\/schema\\\/person\\\/66ab87129f2d357f09971bc7936a77ee\",\"name\":\"Oracle Team\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/f711f7cd2c9b09bf2627133755b569fb5be0694810cfd33033bdd095fedba86d?s=96&d=mm&r=g\",\"url\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/f711f7cd2c9b09bf2627133755b569fb5be0694810cfd33033bdd095fedba86d?s=96&d=mm&r=g\",\"contentUrl\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/f711f7cd2c9b09bf2627133755b569fb5be0694810cfd33033bdd095fedba86d?s=96&d=mm&r=g\",\"caption\":\"Oracle Team\"},\"url\":\"https:\\\/\\\/www.dbi-services.com\\\/blog\\\/author\\\/oracle-team\\\/\"}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"Ansible Custom Interactive Dynamic Inventory - dbi Blog","description":"Ansible custom interactive dynamic inventory: the inventory is the foundation of your Ansible strategy. With this simple inventory, you'll have a strong foundation for your Ansible automation.","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.dbi-services.com\/blog\/ansible-custom-interactive-dynamic-inventory\/","og_locale":"en_US","og_type":"article","og_title":"Ansible Custom Interactive Dynamic Inventory","og_description":"Ansible custom interactive dynamic inventory: the inventory is the foundation of your Ansible strategy. With this simple inventory, you'll have a strong foundation for your Ansible automation.","og_url":"https:\/\/www.dbi-services.com\/blog\/ansible-custom-interactive-dynamic-inventory\/","og_site_name":"dbi Blog","article_published_time":"2020-11-25T06:35:41+00:00","og_image":[{"width":835,"height":592,"url":"https:\/\/www.dbi-services.com\/blog\/wp-content\/uploads\/sites\/2\/2022\/04\/sioinv_dm_v1-1.jpg","type":"image\/jpeg"}],"author":"Oracle Team","twitter_card":"summary_large_image","twitter_misc":{"Written by":"Oracle Team","Est. reading time":"4 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/www.dbi-services.com\/blog\/ansible-custom-interactive-dynamic-inventory\/#article","isPartOf":{"@id":"https:\/\/www.dbi-services.com\/blog\/ansible-custom-interactive-dynamic-inventory\/"},"author":{"name":"Oracle Team","@id":"https:\/\/www.dbi-services.com\/blog\/#\/schema\/person\/66ab87129f2d357f09971bc7936a77ee"},"headline":"Ansible Custom Interactive Dynamic Inventory","datePublished":"2020-11-25T06:35:41+00:00","mainEntityOfPage":{"@id":"https:\/\/www.dbi-services.com\/blog\/ansible-custom-interactive-dynamic-inventory\/"},"wordCount":414,"commentCount":0,"image":{"@id":"https:\/\/www.dbi-services.com\/blog\/ansible-custom-interactive-dynamic-inventory\/#primaryimage"},"thumbnailUrl":"https:\/\/www.dbi-services.com\/blog\/wp-content\/uploads\/sites\/2\/2022\/04\/sioinv_dm_v1-1.jpg","articleSection":["Cloud","Development &amp; Performance","Enterprise content management"],"inLanguage":"en-US","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/www.dbi-services.com\/blog\/ansible-custom-interactive-dynamic-inventory\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/www.dbi-services.com\/blog\/ansible-custom-interactive-dynamic-inventory\/","url":"https:\/\/www.dbi-services.com\/blog\/ansible-custom-interactive-dynamic-inventory\/","name":"Ansible Custom Interactive Dynamic Inventory - dbi Blog","isPartOf":{"@id":"https:\/\/www.dbi-services.com\/blog\/#website"},"primaryImageOfPage":{"@id":"https:\/\/www.dbi-services.com\/blog\/ansible-custom-interactive-dynamic-inventory\/#primaryimage"},"image":{"@id":"https:\/\/www.dbi-services.com\/blog\/ansible-custom-interactive-dynamic-inventory\/#primaryimage"},"thumbnailUrl":"https:\/\/www.dbi-services.com\/blog\/wp-content\/uploads\/sites\/2\/2022\/04\/sioinv_dm_v1-1.jpg","datePublished":"2020-11-25T06:35:41+00:00","author":{"@id":"https:\/\/www.dbi-services.com\/blog\/#\/schema\/person\/66ab87129f2d357f09971bc7936a77ee"},"description":"Ansible custom interactive dynamic inventory: the inventory is the foundation of your Ansible strategy. With this simple inventory, you'll have a strong foundation for your Ansible automation.","breadcrumb":{"@id":"https:\/\/www.dbi-services.com\/blog\/ansible-custom-interactive-dynamic-inventory\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.dbi-services.com\/blog\/ansible-custom-interactive-dynamic-inventory\/"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.dbi-services.com\/blog\/ansible-custom-interactive-dynamic-inventory\/#primaryimage","url":"https:\/\/www.dbi-services.com\/blog\/wp-content\/uploads\/sites\/2\/2022\/04\/sioinv_dm_v1-1.jpg","contentUrl":"https:\/\/www.dbi-services.com\/blog\/wp-content\/uploads\/sites\/2\/2022\/04\/sioinv_dm_v1-1.jpg","width":835,"height":592},{"@type":"BreadcrumbList","@id":"https:\/\/www.dbi-services.com\/blog\/ansible-custom-interactive-dynamic-inventory\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Accueil","item":"https:\/\/www.dbi-services.com\/blog\/"},{"@type":"ListItem","position":2,"name":"Ansible Custom Interactive Dynamic Inventory"}]},{"@type":"WebSite","@id":"https:\/\/www.dbi-services.com\/blog\/#website","url":"https:\/\/www.dbi-services.com\/blog\/","name":"dbi Blog","description":"","potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/www.dbi-services.com\/blog\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"},{"@type":"Person","@id":"https:\/\/www.dbi-services.com\/blog\/#\/schema\/person\/66ab87129f2d357f09971bc7936a77ee","name":"Oracle Team","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/secure.gravatar.com\/avatar\/f711f7cd2c9b09bf2627133755b569fb5be0694810cfd33033bdd095fedba86d?s=96&d=mm&r=g","url":"https:\/\/secure.gravatar.com\/avatar\/f711f7cd2c9b09bf2627133755b569fb5be0694810cfd33033bdd095fedba86d?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/f711f7cd2c9b09bf2627133755b569fb5be0694810cfd33033bdd095fedba86d?s=96&d=mm&r=g","caption":"Oracle Team"},"url":"https:\/\/www.dbi-services.com\/blog\/author\/oracle-team\/"}]}},"_links":{"self":[{"href":"https:\/\/www.dbi-services.com\/blog\/wp-json\/wp\/v2\/posts\/15252","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.dbi-services.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.dbi-services.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.dbi-services.com\/blog\/wp-json\/wp\/v2\/users\/27"}],"replies":[{"embeddable":true,"href":"https:\/\/www.dbi-services.com\/blog\/wp-json\/wp\/v2\/comments?post=15252"}],"version-history":[{"count":0,"href":"https:\/\/www.dbi-services.com\/blog\/wp-json\/wp\/v2\/posts\/15252\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.dbi-services.com\/blog\/wp-json\/wp\/v2\/media\/15253"}],"wp:attachment":[{"href":"https:\/\/www.dbi-services.com\/blog\/wp-json\/wp\/v2\/media?parent=15252"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.dbi-services.com\/blog\/wp-json\/wp\/v2\/categories?post=15252"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.dbi-services.com\/blog\/wp-json\/wp\/v2\/tags?post=15252"},{"taxonomy":"type","embeddable":true,"href":"https:\/\/www.dbi-services.com\/blog\/wp-json\/wp\/v2\/type_dbi?post=15252"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}