{"id":6110,"date":"2023-08-08T08:10:33","date_gmt":"2023-08-08T08:10:33","guid":{"rendered":"https:\/\/www.devopsschool.com\/blog\/?p=6110"},"modified":"2023-08-08T08:10:36","modified_gmt":"2023-08-08T08:10:36","slug":"ansible-include-scnario-with-list-of-plays-or-tasks","status":"publish","type":"post","link":"https:\/\/www.devopsschool.com\/blog\/ansible-include-scnario-with-list-of-plays-or-tasks\/","title":{"rendered":"Ansible Tutorials: Calling one Play &#038; Tasks from another play in Playbook"},"content":{"rendered":"\n<h2 class=\"wp-block-heading\">import_tasks module<\/h2>\n\n\n\n<p>The Ansible import_tasks module is used to import a list of tasks from a file into the current playbook for subsequent execution. The name of the imported file is specified directly without any other option. Most keywords, including loops and conditionals, only apply to the imported tasks, not to this statement itself. If you need any of those to apply, use ansible.builtin.include_tasks instead.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-1\" data-shcb-language-name=\"CSS\" data-shcb-language-slug=\"css\"><span><code class=\"hljs language-css\"><span class=\"hljs-selector-tag\">-<\/span> <span class=\"hljs-selector-tag\">hosts<\/span>: <span class=\"hljs-selector-tag\">all<\/span>\r\n  <span class=\"hljs-selector-tag\">tasks<\/span>:\r\n    <span class=\"hljs-selector-tag\">-<\/span> <span class=\"hljs-selector-tag\">ansible<\/span><span class=\"hljs-selector-class\">.builtin<\/span><span class=\"hljs-selector-class\">.debug<\/span>:\r\n        <span class=\"hljs-selector-tag\">msg<\/span>: <span class=\"hljs-selector-tag\">task1<\/span>\r\n\r\n    <span class=\"hljs-selector-tag\">-<\/span> <span class=\"hljs-selector-tag\">name<\/span>: <span class=\"hljs-selector-tag\">Include<\/span> <span class=\"hljs-selector-tag\">task<\/span> <span class=\"hljs-selector-tag\">list<\/span> <span class=\"hljs-selector-tag\">in<\/span> <span class=\"hljs-selector-tag\">play<\/span>\r\n      <span class=\"hljs-selector-tag\">ansible<\/span><span class=\"hljs-selector-class\">.builtin<\/span><span class=\"hljs-selector-class\">.import_tasks<\/span>:\r\n        <span class=\"hljs-selector-tag\">file<\/span>: <span class=\"hljs-selector-tag\">stuff<\/span><span class=\"hljs-selector-class\">.yaml<\/span>\r\n\r\n    <span class=\"hljs-selector-tag\">-<\/span> <span class=\"hljs-selector-tag\">ansible<\/span><span class=\"hljs-selector-class\">.builtin<\/span><span class=\"hljs-selector-class\">.debug<\/span>:\r\n        <span class=\"hljs-selector-tag\">msg<\/span>: <span class=\"hljs-selector-tag\">task10<\/span><\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-1\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">CSS<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">css<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">include_tasks module<\/h2>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-2\" data-shcb-language-name=\"CSS\" data-shcb-language-slug=\"css\"><span><code class=\"hljs language-css\"><span class=\"hljs-selector-tag\">The<\/span> <span class=\"hljs-selector-tag\">Ansible<\/span> <span class=\"hljs-selector-tag\">include_tasks<\/span> <span class=\"hljs-selector-tag\">module<\/span> <span class=\"hljs-selector-tag\">is<\/span> <span class=\"hljs-selector-tag\">used<\/span> <span class=\"hljs-selector-tag\">to<\/span> <span class=\"hljs-selector-tag\">dynamically<\/span> <span class=\"hljs-selector-tag\">include<\/span> <span class=\"hljs-selector-tag\">a<\/span> <span class=\"hljs-selector-tag\">task<\/span> <span class=\"hljs-selector-tag\">list<\/span> <span class=\"hljs-selector-tag\">from<\/span> <span class=\"hljs-selector-tag\">a<\/span> <span class=\"hljs-selector-tag\">file<\/span> <span class=\"hljs-selector-tag\">into<\/span> <span class=\"hljs-selector-tag\">the<\/span> <span class=\"hljs-selector-tag\">current<\/span> <span class=\"hljs-selector-tag\">playbook<\/span>. <span class=\"hljs-selector-tag\">This<\/span> <span class=\"hljs-selector-tag\">is<\/span> <span class=\"hljs-selector-tag\">unlike<\/span> <span class=\"hljs-selector-tag\">the<\/span> <span class=\"hljs-selector-tag\">import_tasks<\/span> <span class=\"hljs-selector-tag\">module<\/span>, <span class=\"hljs-selector-tag\">which<\/span> <span class=\"hljs-selector-tag\">imports<\/span> <span class=\"hljs-selector-tag\">a<\/span> <span class=\"hljs-selector-tag\">task<\/span> <span class=\"hljs-selector-tag\">list<\/span> <span class=\"hljs-selector-tag\">from<\/span> <span class=\"hljs-selector-tag\">a<\/span> <span class=\"hljs-selector-tag\">file<\/span> <span class=\"hljs-selector-tag\">without<\/span> <span class=\"hljs-selector-tag\">any<\/span> <span class=\"hljs-selector-tag\">dynamic<\/span> <span class=\"hljs-selector-tag\">features<\/span>.\r\n\r\n<span class=\"hljs-selector-tag\">-<\/span> <span class=\"hljs-selector-tag\">hosts<\/span>: <span class=\"hljs-selector-tag\">all<\/span>\r\n  <span class=\"hljs-selector-tag\">tasks<\/span>:\r\n    <span class=\"hljs-selector-tag\">-<\/span> <span class=\"hljs-selector-tag\">ansible<\/span><span class=\"hljs-selector-class\">.builtin<\/span><span class=\"hljs-selector-class\">.debug<\/span>:\r\n        <span class=\"hljs-selector-tag\">msg<\/span>: <span class=\"hljs-selector-tag\">task1<\/span>\r\n\r\n    <span class=\"hljs-selector-tag\">-<\/span> <span class=\"hljs-selector-tag\">name<\/span>: <span class=\"hljs-selector-tag\">Include<\/span> <span class=\"hljs-selector-tag\">task<\/span> <span class=\"hljs-selector-tag\">list<\/span> <span class=\"hljs-selector-tag\">in<\/span> <span class=\"hljs-selector-tag\">play<\/span>\r\n      <span class=\"hljs-selector-tag\">ansible<\/span><span class=\"hljs-selector-class\">.builtin<\/span><span class=\"hljs-selector-class\">.include_tasks<\/span>:\r\n        <span class=\"hljs-selector-tag\">file<\/span>: <span class=\"hljs-selector-tag\">stuff<\/span><span class=\"hljs-selector-class\">.yaml<\/span>\r\n\r\n    <span class=\"hljs-selector-tag\">-<\/span> <span class=\"hljs-selector-tag\">ansible<\/span><span class=\"hljs-selector-class\">.builtin<\/span><span class=\"hljs-selector-class\">.debug<\/span>:\r\n        <span class=\"hljs-selector-tag\">msg<\/span>: <span class=\"hljs-selector-tag\">task10<\/span><\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-2\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">CSS<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">css<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">import_playbook module<\/h2>\n\n\n\n<p>The Ansible import_playbook module is used to import a playbook from a file into the current playbook for subsequent execution. The name of the imported playbook is specified directly without any other option.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-3\" data-shcb-language-name=\"CSS\" data-shcb-language-slug=\"css\"><span><code class=\"hljs language-css\"><span class=\"hljs-selector-tag\">-<\/span> <span class=\"hljs-selector-tag\">hosts<\/span>: <span class=\"hljs-selector-tag\">localhost<\/span>\r\n  <span class=\"hljs-selector-tag\">tasks<\/span>:\r\n    <span class=\"hljs-selector-tag\">-<\/span> <span class=\"hljs-selector-tag\">ansible<\/span><span class=\"hljs-selector-class\">.builtin<\/span><span class=\"hljs-selector-class\">.debug<\/span>:\r\n        <span class=\"hljs-selector-tag\">msg<\/span>: <span class=\"hljs-selector-tag\">play1<\/span>\r\n\r\n<span class=\"hljs-selector-tag\">-<\/span> <span class=\"hljs-selector-tag\">name<\/span>: <span class=\"hljs-selector-tag\">Include<\/span> <span class=\"hljs-selector-tag\">a<\/span> <span class=\"hljs-selector-tag\">play<\/span> <span class=\"hljs-selector-tag\">after<\/span> <span class=\"hljs-selector-tag\">another<\/span> <span class=\"hljs-selector-tag\">play<\/span>\r\n  <span class=\"hljs-selector-tag\">ansible<\/span><span class=\"hljs-selector-class\">.builtin<\/span><span class=\"hljs-selector-class\">.import_playbook<\/span>: <span class=\"hljs-selector-tag\">otherplays<\/span><span class=\"hljs-selector-class\">.yaml<\/span>\n\n<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-3\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">CSS<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">css<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<p>Are you trying to use include in your playbook and coming across a error somthing like &#8220;A playbook must be a list of plays&#8221;. That means you are at right url.<\/p>\n\n\n\n<p>include help you to Includes a file with a list of plays or tasks to be executed in the current playbook. Files with a list of plays can only be included at the top level. Lists of tasks can only be included where tasks normally run (in play).<\/p>\n\n\n\n<p><strong>With include on the task level Ansible expects a file with tasks only, not a full playbook. <\/strong><\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-4\" data-shcb-language-name=\"PHP\" data-shcb-language-slug=\"php\"><span><code class=\"hljs language-php\">------main.yaml------------\n- hosts: all\n  tasks:\n    - debug:\n        msg: task1\n\n    - name: <span class=\"hljs-keyword\">Include<\/span> task <span class=\"hljs-keyword\">list<\/span> in play\n      <span class=\"hljs-keyword\">include<\/span>: stuff.yaml\n\n------stuff.yaml------------\n---\n- name: http service state\n  service: name=httpd state=started enabled=yes<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-4\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">PHP<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">php<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<p><strong>With include on the task level Ansible expects a file with tasks only, not a full playbook. <\/strong><\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-5\" data-shcb-language-name=\"PHP\" data-shcb-language-slug=\"php\"><span><code class=\"hljs language-php\">------main.yaml------------\n- hosts: all\n  tasks:\n    - debug:\n        msg: task1\n\n    - <span class=\"hljs-keyword\">include<\/span>: stuff.yaml\n\n\n------stuff.yaml------------\n---\n- name: http service state\n  service: name=httpd state=started enabled=yes\n\n<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-5\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">PHP<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">php<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<p><strong>With include on the play level Ansible expects a playbook with hosts\/tasks spec. i.e full playbook. <\/strong><\/p>\n\n\n<pre class=\"wp-block-code\"><span><code class=\"hljs\">------main.yaml------------\n- hosts: all\n  tasks:\n    - debug:\n        msg: task1\n\n- import_playbook: stuff.yaml\n\n\n------stuff.yaml------------\n---\n- hosts: web\n  tasks:\n    - debug:\n        msg: task1\n    - name: http service state\n      service: name=httpd state=started enabled=yes<\/code><\/span><\/pre>\n\n\n<p><strong>Example of include calling common tasks.<\/strong><\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-6\" data-shcb-language-name=\"PHP\" data-shcb-language-slug=\"php\"><span><code class=\"hljs language-php\"><span class=\"hljs-comment\"># my_tasks.yml<\/span>\n- name: Check PID of existing Java process\n  shell: <span class=\"hljs-string\">\"ps -ef | grep &#91;j]ava\"<\/span>\n  register: java_status\n\n  - debug: <span class=\"hljs-keyword\">var<\/span>=java_status.stdout\n\n<span class=\"hljs-comment\"># check_java_pid.yml<\/span>\n---\n- hosts: all\n  gather_facts: no\n\n  tasks:\n    - <span class=\"hljs-keyword\">include<\/span> my_tasks.yml\n\n<span class=\"hljs-comment\"># instance_restart.yml<\/span>\n---\n- hosts: instance_1\n  gather_facts: no\n\n  tasks:\n    - <span class=\"hljs-keyword\">include<\/span>: my_tasks.yml\n<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-6\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">PHP<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">php<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<p><strong>Some of more example&nbsp;using&nbsp;Condition<\/strong><\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-7\" data-shcb-language-name=\"PHP\" data-shcb-language-slug=\"php\"><span><code class=\"hljs language-php\">---\ntasks:\n  - <span class=\"hljs-keyword\">include<\/span> install_postgres.yml\n    when: db == <span class=\"hljs-string\">\"Y\"<\/span><\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-7\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">PHP<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">php<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n<div class=\"epyt-gallery\" data-currpage=\"1\" id=\"epyt_gallery_24726\"><figure class=\"wp-block-embed wp-block-embed-youtube is-type-video is-provider-youtube epyt-figure\"><div class=\"wp-block-embed__wrapper\"><iframe loading=\"lazy\"  id=\"_ytid_99287\"  width=\"760\" height=\"427\"  data-origwidth=\"760\" data-origheight=\"427\" src=\"https:\/\/www.youtube.com\/embed\/?enablejsapi=1&#038;autoplay=0&#038;cc_load_policy=0&#038;cc_lang_pref=&#038;iv_load_policy=1&#038;loop=0&#038;rel=1&#038;fs=1&#038;playsinline=0&#038;autohide=2&#038;theme=dark&#038;color=red&#038;controls=1&#038;disablekb=0&#038;\" class=\"__youtube_prefs__  no-lazyload\" title=\"YouTube player\"  data-epytgalleryid=\"epyt_gallery_24726\"  allow=\"fullscreen; accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share\" referrerpolicy=\"strict-origin-when-cross-origin\" allowfullscreen data-no-lazy=\"1\" data-skipgform_ajax_framebjll=\"\"><\/iframe><\/div><\/figure><div class=\"epyt-gallery-list\"><div>Sorry, there was a YouTube error.<\/div><\/div><\/div>","protected":false},"excerpt":{"rendered":"<p>import_tasks module The Ansible import_tasks module is used to import a list of tasks from a file into the current playbook for subsequent execution. The name of the imported file is specified directly without any other option. Most keywords, including loops and conditionals, only apply to the imported tasks, not to this statement itself. If&#8230;<\/p>\n","protected":false},"author":1,"featured_media":7881,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_kad_post_transparent":"","_kad_post_title":"","_kad_post_layout":"","_kad_post_sidebar_id":"","_kad_post_content_style":"","_kad_post_vertical_padding":"","_kad_post_feature":"","_kad_post_feature_position":"","_kad_post_header":false,"_kad_post_footer":false,"_kad_post_classname":"","_joinchat":[],"footnotes":""},"categories":[5038],"tags":[639,5449,5560,5561,4223],"class_list":["post-6110","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-ansible","tag-ansible","tag-devopsschool","tag-plays","tag-scenario","tag-task"],"_links":{"self":[{"href":"https:\/\/www.devopsschool.com\/blog\/wp-json\/wp\/v2\/posts\/6110","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.devopsschool.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.devopsschool.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.devopsschool.com\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.devopsschool.com\/blog\/wp-json\/wp\/v2\/comments?post=6110"}],"version-history":[{"count":7,"href":"https:\/\/www.devopsschool.com\/blog\/wp-json\/wp\/v2\/posts\/6110\/revisions"}],"predecessor-version":[{"id":37950,"href":"https:\/\/www.devopsschool.com\/blog\/wp-json\/wp\/v2\/posts\/6110\/revisions\/37950"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.devopsschool.com\/blog\/wp-json\/wp\/v2\/media\/7881"}],"wp:attachment":[{"href":"https:\/\/www.devopsschool.com\/blog\/wp-json\/wp\/v2\/media?parent=6110"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.devopsschool.com\/blog\/wp-json\/wp\/v2\/categories?post=6110"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.devopsschool.com\/blog\/wp-json\/wp\/v2\/tags?post=6110"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}