{"id":22254,"date":"2023-02-05T11:28:30","date_gmt":"2023-02-05T10:28:30","guid":{"rendered":"https:\/\/www.dbi-services.com\/blog\/?p=22254"},"modified":"2024-09-11T15:01:30","modified_gmt":"2024-09-11T13:01:30","slug":"ansible-event-driven-automation","status":"publish","type":"post","link":"https:\/\/www.dbi-services.com\/blog\/ansible-event-driven-automation\/","title":{"rendered":"Ansible Event Driven Automation"},"content":{"rendered":"\n<p>In my previous blogs about Ansible, I covered a few use cases:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><a href=\"https:\/\/www.dbi-services.com\/blog\/starting-with-simple-ansible-playbooks\/\" target=\"_blank\" rel=\"noreferrer noopener\">Simple playbooks<\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/www.dbi-services.com\/blog\/use-ansible-like-a-programming-language\/\" target=\"_blank\" rel=\"noreferrer noopener\">Use Ansible like a Programming Language<\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/www.dbi-services.com\/blog\/ansible-uri-module-and-weblogic-rest-api\/\" target=\"_blank\" rel=\"noreferrer noopener\">REST API calls<\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/www.dbi-services.com\/blog\/ansible-imagination-is-the-limit\/\" target=\"_blank\" rel=\"noreferrer noopener\">Gather logs and runtime information<\/a><\/li>\n\n\n\n<li>Infrastructure as Code with YaK: <a href=\"https:\/\/www.dbi-services.com\/blog\/add-on-premises-host-in-yak-core\/\" target=\"_blank\" rel=\"noreferrer noopener\">on-premise<\/a>, <a href=\"https:\/\/www.dbi-services.com\/blog\/tips-to-develop-a-new-component-on-top-of-yak-core\/\" target=\"_blank\" rel=\"noreferrer noopener\">create a component<\/a>, and two blogs regarding JBoss EAP (<a href=\"https:\/\/www.dbi-services.com\/blog\/jboss-eap-and-wildfly-cli-scripting-via-ansible\/\" target=\"_blank\" rel=\"noreferrer noopener\">here<\/a> and <a href=\"https:\/\/www.dbi-services.com\/blog\/overcome-jboss-cli-limitations-with-ansible\/\" target=\"_blank\" rel=\"noreferrer noopener\">here<\/a>).<\/li>\n<\/ul>\n\n\n\n<p>All these still require a manual trigger to run. With <a href=\"https:\/\/www.ansible.com\/use-cases\/event-driven-automation\" target=\"_blank\" rel=\"noreferrer noopener\">Ansible Event Driven<\/a> (AED), we can be pro-active by running playbooks automatically based on events.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Installation<\/h2>\n\n\n\n<p>To install, it is just a few commands:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Install pip3 and a JDK:<\/li>\n<\/ul>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: bash; title: ; notranslate\" title=\"\">\n sudo apt install python3-pip openjdk-17-jdk maven\n<\/pre><\/div>\n\n\n<ul class=\"wp-block-list\">\n<li>Set variables (or add them in ~\/.bash_profile to make them permanent):<\/li>\n<\/ul>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: bash; title: ; notranslate\" title=\"\">\nexport PATH=$PATH:$HOME\/.local\/bin\nexport JAVA_HOME=\/usr\/lib\/jvm\/java-17-openjdk-amd64\nexport PIP_NO_BINARY=jpy\nexport PATH=\/home\/vagrant\/.local\/bin:$PATH\n<\/pre><\/div>\n\n\n<ul class=\"wp-block-list\">\n<li>lnstall required Python packages:<\/li>\n<\/ul>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: bash; title: ; notranslate\" title=\"\">\npip install wheel ansible-rulebook ansible ansible-runner\n<\/pre><\/div>\n\n\n<ul class=\"wp-block-list\">\n<li>Finally, install eda collection:<\/li>\n<\/ul>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: bash; title: ; notranslate\" title=\"\">\nansible-galaxy collection install community.general ansible.eda\n<\/pre><\/div>\n\n\n<p>Now, we are ready to run our first <strong>rulebook<\/strong>.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Rulebook<\/h2>\n\n\n\n<p>AED introduce a new tool as well as a new type of file: The rulebook which is associated with <code>ansible-rulebook<\/code> command. The rulebook is a yaml file, so we are in a known environment.<\/p>\n\n\n\n<p>This file consists of three sections:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Sources<\/strong>: It defined the <strong>event <\/strong>used as input.<\/li>\n\n\n\n<li><strong>Rules<\/strong>: A filter on event to <strong>determine <\/strong>when to apply actions.<\/li>\n\n\n\n<li><strong>Actions<\/strong>: Playbooks, modules or tasks.<\/li>\n<\/ul>\n\n\n\n<p>Here is simple example from the official <a href=\"https:\/\/github.com\/ansible\/event-driven-ansible\" target=\"_blank\" rel=\"noreferrer noopener\">GitHub repository<\/a> with a webhook:<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: yaml; title: ; notranslate\" title=\"\">\n---\n- name: Listen for events on a webhook\n  hosts: all\n\n  ## Define our source for events\n\n  sources:\n    - ansible.eda.webhook:\n        host: 0.0.0.0\n        port: 5000\n\n  ## Define the conditions we are looking for\n\n  rules:\n    - name: Say Hello\n      condition: event.payload.message == &quot;Ansible is super cool&quot;\n\n  ## Define the action we should take should the condition be met\n\n      action:\n        run_playbook:\n          name: say-what.yml\n<\/pre><\/div>\n\n\n<p>Create a simple inventory (for testing purpose only):<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: yaml; title: ; notranslate\" title=\"\">\nall:\n  hosts:\n    localhost:\n      ansible_connection: local\n<\/pre><\/div>\n\n\n<p>As well as the playbook (say-what.yml) we will run:<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: yaml; title: ; notranslate\" title=\"\">\n- hosts: localhost\n  connection: local\n  tasks:\n    - debug:\n        msg: &quot;Thank you, my friend!&quot;\n<\/pre><\/div>\n\n\n<p>To run it (with verbosity so we can see something):<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: bash; title: ; notranslate\" title=\"\">\nansible-rulebook --rulebook webhook.yml -i inventory.yml --verbose\n<\/pre><\/div>\n\n\n<p>Output:<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: plain; title: ; notranslate\" title=\"\">\n2023-02-03 16:15:30,048 - ansible_rulebook.app - INFO - Starting sources\n2023-02-03 16:15:30,048 - ansible_rulebook.app - INFO - Starting rules\n2023-02-03 16:15:30,048 - ansible_rulebook.engine - INFO - run_ruleset\n2023-02-03 16:15:30,791 - ansible_rulebook.engine - INFO - ruleset define: {&quot;name&quot;: &quot;Listen for events on a webhook&quot;, &quot;hosts&quot;: &#x5B;&quot;all&quot;], &quot;sources&quot;: &#x5B;{&quot;EventSource&quot;: {&quot;name&quot;: &quot;ansible.eda.webhook&quot;, &quot;source_name&quot;: &quot;ansible.eda.webhook&quot;, &quot;source_args&quot;: {&quot;host&quot;: &quot;0.0.0.0&quot;, &quot;port&quot;: 5000}, &quot;source_filters&quot;: &#x5B;]}}], &quot;rules&quot;: &#x5B;{&quot;Rule&quot;: {&quot;name&quot;: &quot;Say Hello&quot;, &quot;condition&quot;: {&quot;AllCondition&quot;: &#x5B;{&quot;EqualsExpression&quot;: {&quot;lhs&quot;: {&quot;Event&quot;: &quot;payload.message&quot;}, &quot;rhs&quot;: {&quot;String&quot;: &quot;Ansible is super cool&quot;}}}]}, &quot;action&quot;: {&quot;Action&quot;: {&quot;action&quot;: &quot;run_playbook&quot;, &quot;action_args&quot;: {&quot;name&quot;: &quot;say-what.yml&quot;}}}, &quot;enabled&quot;: true}}]}\n2023-02-03 16:15:30,793 - ansible_rulebook.engine - INFO - load source\n2023-02-03 16:15:31,294 - ansible_rulebook.engine - INFO - load source filters\n2023-02-03 16:15:31,296 - ansible_rulebook.engine - INFO - Calling main in ansible.eda.webhook\n2023-02-03 16:15:31,298 - ansible_rulebook.engine - INFO - Start a playbook action runner for Listen for events on a webhook\n2023-02-03 16:15:31,299 - ansible_rulebook.engine - INFO - Waiting for actions on events from Listen for events on a webhook\n2023-02-03 16:15:31,302 - ansible_rulebook.engine - INFO - Waiting for events from Listen for events on a webhook\n<\/pre><\/div>\n\n\n<p>Then, with a simple curl command, we will trigger the web hook:<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: bash; title: ; notranslate\" title=\"\">\ncurl -H &#039;Content-Type: application\/json&#039; -d &#039;{&quot;message&quot;: &quot;Ansible is super cool&quot;}&#039; 127.0.0.1:5000\/endpoint\n<\/pre><\/div>\n\n\n<p>In the output of the running command, we will see some new logs as well as something familiar to any ansible developer: The playbook running.<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: bash; highlight: [12,13,14,15,16,17,18,19,20,21,22,23]; title: ; notranslate\" title=\"\">\n2023-02-03 16:24:53,960 - aiohttp.access - INFO - 127.0.0.1 &#x5B;03\/Feb\/2023:16:24:53 +0000] &quot;POST \/endpoint HTTP\/1.1&quot; 200 158 &quot;-&quot; &quot;curl\/7.74.0&quot;\n2023-02-03 16:24:53 962 &#x5B;main] INFO org.drools.ansible.rulebook.integration.api.rulesengine.RegisterOnlyAgendaFilter - Activation of effective rule &quot;Say Hello&quot; with facts: &#x5B;Event DROOLS_PROTOTYPE with values = {meta.headers.Accept=*\/*, meta.headers.Host=127.0.0.1:5000, payload={message=Ansible is super cool}, payload.message=Ansible is super cool, meta={headers={Accept=*\/*, User-Agent=curl\/7.74.0, Host=127.0.0.1:5000, Content-Length=36, Content-Type=application\/json}, endpoint=endpoint}, meta.headers.Content-Type=application\/json, meta.headers.User-Agent=curl\/7.74.0, meta.endpoint=endpoint, meta.headers.Content-Length=36, meta.headers={Accept=*\/*, User-Agent=curl\/7.74.0, Host=127.0.0.1:5000, Content-Length=36, Content-Type=application\/json}}]\n2023-02-03 16:24:53,964 - ansible_rulebook.rule_generator - INFO - calling Say Hello\n2023-02-03 16:24:53,964 - ansible_rulebook.engine - INFO - call_action run_playbook\n2023-02-03 16:24:53,965 - ansible_rulebook.engine - INFO - substitute_variables &#x5B;{&#039;name&#039;: &#039;say-what.yml&#039;}] &#x5B;{&#039;event&#039;: {&#039;payload&#039;: {&#039;message&#039;: &#039;Ansible is super cool&#039;}, &#039;meta&#039;: {&#039;headers&#039;: {&#039;Accept&#039;: &#039;*\/*&#039;, &#039;User-Agent&#039;: &#039;curl\/7.74.0&#039;, &#039;Host&#039;: &#039;127.0.0.1:5000&#039;, &#039;Content-Length&#039;: &#039;36&#039;, &#039;Content-Type&#039;: &#039;application\/json&#039;}, &#039;endpoint&#039;: &#039;endpoint&#039;}}, &#039;fact&#039;: {&#039;payload&#039;: {&#039;message&#039;: &#039;Ansible is super cool&#039;}, &#039;meta&#039;: {&#039;headers&#039;: {&#039;Accept&#039;: &#039;*\/*&#039;, &#039;User-Agent&#039;: &#039;curl\/7.74.0&#039;, &#039;Host&#039;: &#039;127.0.0.1:5000&#039;, &#039;Content-Length&#039;: &#039;36&#039;, &#039;Content-Type&#039;: &#039;application\/json&#039;}, &#039;endpoint&#039;: &#039;endpoint&#039;}}}]\n2023-02-03 16:24:53,966 - ansible_rulebook.engine - INFO - action args: {&#039;name&#039;: &#039;say-what.yml&#039;}\n2023-02-03 16:24:53,967 - ansible_rulebook.engine - INFO - Queue playbook\/module\/job template {&#039;say-what.yml&#039;} for running later\n2023-02-03 16:24:53,967 - ansible_rulebook.builtin - INFO - running Ansible playbook: say-what.yml\n2023-02-03 16:24:53,970 - ansible_rulebook.builtin - INFO - ruleset: Listen for events on a webhook, rule: Say Hello\n2023-02-03 16:24:53,971 - ansible_rulebook.builtin - INFO - Calling Ansible runner\n\nPLAY &#x5B;localhost] ***************************************************************\n\nTASK &#x5B;Gathering Facts] *********************************************************\nok: &#x5B;localhost]\n\nTASK &#x5B;debug] *******************************************************************\nok: &#x5B;localhost] =&gt; {\n    &quot;msg&quot;: &quot;Thank you, my friend!&quot;\n}\n\nPLAY RECAP *********************************************************************\nlocalhost                  : ok=2    changed=0    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0\n<\/pre><\/div>\n\n\n<h2 class=\"wp-block-heading\">Conclusion<\/h2>\n\n\n\n<p>We confirmed that our Ansible Event Driven installation is working. On my next blog, I will integrate it with Apache Kafka, the well know event store and stream-processing platform.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>In my previous blogs about Ansible, I covered a few use cases: All these still require a manual trigger to run. With Ansible Event Driven (AED), we can be pro-active by running playbooks automatically based on events. Installation To install, it is just a few commands: Now, we are ready to run our first rulebook. [&hellip;]<\/p>\n","protected":false},"author":109,"featured_media":0,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"footnotes":""},"categories":[1321],"tags":[150,708],"type_dbi":[],"class_list":["post-22254","post","type-post","status-publish","format-standard","hentry","category-ansible","tag-ansible","tag-automation"],"acf":[],"yoast_head":"<!-- This site is optimized with the Yoast SEO Premium plugin v27.2 (Yoast SEO v27.2) - https:\/\/yoast.com\/product\/yoast-seo-premium-wordpress\/ -->\n<title>Ansible Event Driven Automation - dbi Blog<\/title>\n<meta name=\"description\" content=\"What is Ansible Event Driven Automation and how to set it up.\" \/>\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-event-driven-automation\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Ansible Event Driven Automation\" \/>\n<meta property=\"og:description\" content=\"What is Ansible Event Driven Automation and how to set it up.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.dbi-services.com\/blog\/ansible-event-driven-automation\/\" \/>\n<meta property=\"og:site_name\" content=\"dbi Blog\" \/>\n<meta property=\"article:published_time\" content=\"2023-02-05T10:28:30+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2024-09-11T13:01:30+00:00\" \/>\n<meta name=\"author\" content=\"DevOps\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"DevOps\" \/>\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-event-driven-automation\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/www.dbi-services.com\/blog\/ansible-event-driven-automation\/\"},\"author\":{\"name\":\"DevOps\",\"@id\":\"https:\/\/www.dbi-services.com\/blog\/#\/schema\/person\/4cd1b5f8a3de93f05a16ab8d7d2b7735\"},\"headline\":\"Ansible Event Driven Automation\",\"datePublished\":\"2023-02-05T10:28:30+00:00\",\"dateModified\":\"2024-09-11T13:01:30+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/www.dbi-services.com\/blog\/ansible-event-driven-automation\/\"},\"wordCount\":290,\"commentCount\":0,\"keywords\":[\"Ansible\",\"Automation\"],\"articleSection\":[\"Ansible\"],\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\/\/www.dbi-services.com\/blog\/ansible-event-driven-automation\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/www.dbi-services.com\/blog\/ansible-event-driven-automation\/\",\"url\":\"https:\/\/www.dbi-services.com\/blog\/ansible-event-driven-automation\/\",\"name\":\"Ansible Event Driven Automation - dbi Blog\",\"isPartOf\":{\"@id\":\"https:\/\/www.dbi-services.com\/blog\/#website\"},\"datePublished\":\"2023-02-05T10:28:30+00:00\",\"dateModified\":\"2024-09-11T13:01:30+00:00\",\"author\":{\"@id\":\"https:\/\/www.dbi-services.com\/blog\/#\/schema\/person\/4cd1b5f8a3de93f05a16ab8d7d2b7735\"},\"description\":\"What is Ansible Event Driven Automation and how to set it up.\",\"breadcrumb\":{\"@id\":\"https:\/\/www.dbi-services.com\/blog\/ansible-event-driven-automation\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/www.dbi-services.com\/blog\/ansible-event-driven-automation\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/www.dbi-services.com\/blog\/ansible-event-driven-automation\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Accueil\",\"item\":\"https:\/\/www.dbi-services.com\/blog\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Ansible Event Driven Automation\"}]},{\"@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\/4cd1b5f8a3de93f05a16ab8d7d2b7735\",\"name\":\"DevOps\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/secure.gravatar.com\/avatar\/cdd2dd7441774355062c0f0f68612296b059cd1e2ff6c7af0b15dba0ed64a85f?s=96&d=mm&r=g\",\"url\":\"https:\/\/secure.gravatar.com\/avatar\/cdd2dd7441774355062c0f0f68612296b059cd1e2ff6c7af0b15dba0ed64a85f?s=96&d=mm&r=g\",\"contentUrl\":\"https:\/\/secure.gravatar.com\/avatar\/cdd2dd7441774355062c0f0f68612296b059cd1e2ff6c7af0b15dba0ed64a85f?s=96&d=mm&r=g\",\"caption\":\"DevOps\"},\"url\":\"https:\/\/www.dbi-services.com\/blog\/author\/devops\/\"}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"Ansible Event Driven Automation - dbi Blog","description":"What is Ansible Event Driven Automation and how to set it up.","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-event-driven-automation\/","og_locale":"en_US","og_type":"article","og_title":"Ansible Event Driven Automation","og_description":"What is Ansible Event Driven Automation and how to set it up.","og_url":"https:\/\/www.dbi-services.com\/blog\/ansible-event-driven-automation\/","og_site_name":"dbi Blog","article_published_time":"2023-02-05T10:28:30+00:00","article_modified_time":"2024-09-11T13:01:30+00:00","author":"DevOps","twitter_card":"summary_large_image","twitter_misc":{"Written by":"DevOps","Est. reading time":"4 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/www.dbi-services.com\/blog\/ansible-event-driven-automation\/#article","isPartOf":{"@id":"https:\/\/www.dbi-services.com\/blog\/ansible-event-driven-automation\/"},"author":{"name":"DevOps","@id":"https:\/\/www.dbi-services.com\/blog\/#\/schema\/person\/4cd1b5f8a3de93f05a16ab8d7d2b7735"},"headline":"Ansible Event Driven Automation","datePublished":"2023-02-05T10:28:30+00:00","dateModified":"2024-09-11T13:01:30+00:00","mainEntityOfPage":{"@id":"https:\/\/www.dbi-services.com\/blog\/ansible-event-driven-automation\/"},"wordCount":290,"commentCount":0,"keywords":["Ansible","Automation"],"articleSection":["Ansible"],"inLanguage":"en-US","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/www.dbi-services.com\/blog\/ansible-event-driven-automation\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/www.dbi-services.com\/blog\/ansible-event-driven-automation\/","url":"https:\/\/www.dbi-services.com\/blog\/ansible-event-driven-automation\/","name":"Ansible Event Driven Automation - dbi Blog","isPartOf":{"@id":"https:\/\/www.dbi-services.com\/blog\/#website"},"datePublished":"2023-02-05T10:28:30+00:00","dateModified":"2024-09-11T13:01:30+00:00","author":{"@id":"https:\/\/www.dbi-services.com\/blog\/#\/schema\/person\/4cd1b5f8a3de93f05a16ab8d7d2b7735"},"description":"What is Ansible Event Driven Automation and how to set it up.","breadcrumb":{"@id":"https:\/\/www.dbi-services.com\/blog\/ansible-event-driven-automation\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.dbi-services.com\/blog\/ansible-event-driven-automation\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/www.dbi-services.com\/blog\/ansible-event-driven-automation\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Accueil","item":"https:\/\/www.dbi-services.com\/blog\/"},{"@type":"ListItem","position":2,"name":"Ansible Event Driven Automation"}]},{"@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\/4cd1b5f8a3de93f05a16ab8d7d2b7735","name":"DevOps","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/secure.gravatar.com\/avatar\/cdd2dd7441774355062c0f0f68612296b059cd1e2ff6c7af0b15dba0ed64a85f?s=96&d=mm&r=g","url":"https:\/\/secure.gravatar.com\/avatar\/cdd2dd7441774355062c0f0f68612296b059cd1e2ff6c7af0b15dba0ed64a85f?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/cdd2dd7441774355062c0f0f68612296b059cd1e2ff6c7af0b15dba0ed64a85f?s=96&d=mm&r=g","caption":"DevOps"},"url":"https:\/\/www.dbi-services.com\/blog\/author\/devops\/"}]}},"_links":{"self":[{"href":"https:\/\/www.dbi-services.com\/blog\/wp-json\/wp\/v2\/posts\/22254","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\/109"}],"replies":[{"embeddable":true,"href":"https:\/\/www.dbi-services.com\/blog\/wp-json\/wp\/v2\/comments?post=22254"}],"version-history":[{"count":22,"href":"https:\/\/www.dbi-services.com\/blog\/wp-json\/wp\/v2\/posts\/22254\/revisions"}],"predecessor-version":[{"id":24425,"href":"https:\/\/www.dbi-services.com\/blog\/wp-json\/wp\/v2\/posts\/22254\/revisions\/24425"}],"wp:attachment":[{"href":"https:\/\/www.dbi-services.com\/blog\/wp-json\/wp\/v2\/media?parent=22254"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.dbi-services.com\/blog\/wp-json\/wp\/v2\/categories?post=22254"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.dbi-services.com\/blog\/wp-json\/wp\/v2\/tags?post=22254"},{"taxonomy":"type","embeddable":true,"href":"https:\/\/www.dbi-services.com\/blog\/wp-json\/wp\/v2\/type_dbi?post=22254"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}