{"id":1248,"date":"2018-06-11T15:01:46","date_gmt":"2018-06-11T23:01:46","guid":{"rendered":"http:\/\/www.developerscloset.com\/?page_id=1248"},"modified":"2018-06-11T15:01:46","modified_gmt":"2018-06-11T23:01:46","slug":"ansible","status":"publish","type":"page","link":"https:\/\/www.developerscloset.com\/?page_id=1248","title":{"rendered":"Ansible"},"content":{"rendered":"<p><a href=\"http:\/\/www.developerscloset.com\/wp-content\/uploads\/2018\/06\/ansible_logo_round.png\"><img loading=\"lazy\" decoding=\"async\" class=\"wp-image-1249 alignnone\" src=\"http:\/\/www.developerscloset.com\/wp-content\/uploads\/2018\/06\/ansible_logo_round-300x300.png\" alt=\"\" width=\"189\" height=\"189\" srcset=\"https:\/\/www.developerscloset.com\/wp-content\/uploads\/2018\/06\/ansible_logo_round-300x300.png 300w, https:\/\/www.developerscloset.com\/wp-content\/uploads\/2018\/06\/ansible_logo_round-150x150.png 150w, https:\/\/www.developerscloset.com\/wp-content\/uploads\/2018\/06\/ansible_logo_round-144x144.png 144w, https:\/\/www.developerscloset.com\/wp-content\/uploads\/2018\/06\/ansible_logo_round.png 700w\" sizes=\"auto, (max-width: 189px) 100vw, 189px\" \/><\/a><\/p>\n<p>Ansible is an IT automation tool. It can configure systems, deploy software, and orchestrate more advanced IT tasks such as continuous deployments or zero downtime rolling updates.\u00a0Ansible manages machines in an agent-less manner. There is never a question of how to upgrade remote daemons or the problem of not being able to manage systems because daemons are uninstalled.<\/p>\n<div class=\"toc-macro client-side-toc-macro conf-macro output-block hidden-outline\">\n<div id=\"ez-toc-container\" class=\"ez-toc-v2_0_79 counter-hierarchy ez-toc-counter ez-toc-grey ez-toc-container-direction\">\n<p class=\"ez-toc-title\" style=\"cursor:inherit\">Table of Contents<\/p>\n<label for=\"ez-toc-cssicon-toggle-item-69ea2270bb655\" class=\"ez-toc-cssicon-toggle-label\"><span class=\"\"><span class=\"eztoc-hide\" style=\"display:none;\">Toggle<\/span><span class=\"ez-toc-icon-toggle-span\"><svg style=\"fill: #999;color:#999\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" class=\"list-377408\" width=\"20px\" height=\"20px\" viewBox=\"0 0 24 24\" fill=\"none\"><path d=\"M6 6H4v2h2V6zm14 0H8v2h12V6zM4 11h2v2H4v-2zm16 0H8v2h12v-2zM4 16h2v2H4v-2zm16 0H8v2h12v-2z\" fill=\"currentColor\"><\/path><\/svg><svg style=\"fill: #999;color:#999\" class=\"arrow-unsorted-368013\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"10px\" height=\"10px\" viewBox=\"0 0 24 24\" version=\"1.2\" baseProfile=\"tiny\"><path d=\"M18.2 9.3l-6.2-6.3-6.2 6.3c-.2.2-.3.4-.3.7s.1.5.3.7c.2.2.4.3.7.3h11c.3 0 .5-.1.7-.3.2-.2.3-.5.3-.7s-.1-.5-.3-.7zM5.8 14.7l6.2 6.3 6.2-6.3c.2-.2.3-.5.3-.7s-.1-.5-.3-.7c-.2-.2-.4-.3-.7-.3h-11c-.3 0-.5.1-.7.3-.2.2-.3.5-.3.7s.1.5.3.7z\"\/><\/svg><\/span><\/span><\/label><input type=\"checkbox\"  id=\"ez-toc-cssicon-toggle-item-69ea2270bb655\"  aria-label=\"Toggle\" \/><nav><ul class='ez-toc-list ez-toc-list-level-1 ' ><li class='ez-toc-page-1 ez-toc-heading-level-1'><a class=\"ez-toc-link ez-toc-heading-1\" href=\"https:\/\/www.developerscloset.com\/?page_id=1248\/#Installing_Ansible\" >Installing Ansible<\/a><ul class='ez-toc-list-level-2' ><li class='ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-2\" href=\"https:\/\/www.developerscloset.com\/?page_id=1248\/#Install_Pre-requisites\" >Install Pre-requisites<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-3\" href=\"https:\/\/www.developerscloset.com\/?page_id=1248\/#Install_Steps\" >Install Steps<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-4\" href=\"https:\/\/www.developerscloset.com\/?page_id=1248\/#Configure_Ansible_Playbooks\" >Configure Ansible Playbooks<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-5\" href=\"https:\/\/www.developerscloset.com\/?page_id=1248\/#Further_Configuration\" >Further Configuration<\/a><\/li><\/ul><\/li><li class='ez-toc-page-1 ez-toc-heading-level-1'><a class=\"ez-toc-link ez-toc-heading-6\" href=\"https:\/\/www.developerscloset.com\/?page_id=1248\/#Create_Ansible_Playbook\" >Create Ansible Playbook<\/a><ul class='ez-toc-list-level-2' ><li class='ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-7\" href=\"https:\/\/www.developerscloset.com\/?page_id=1248\/#Playbook\" >Playbook<\/a><ul class='ez-toc-list-level-3' ><li class='ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-8\" href=\"https:\/\/www.developerscloset.com\/?page_id=1248\/#Hosts\" >Hosts<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-9\" href=\"https:\/\/www.developerscloset.com\/?page_id=1248\/#Roles\" >Roles<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-10\" href=\"https:\/\/www.developerscloset.com\/?page_id=1248\/#Output_Debug_Message\" >Output Debug Message<\/a><\/li><\/ul><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-11\" href=\"https:\/\/www.developerscloset.com\/?page_id=1248\/#Hosts-2\" >Hosts<\/a><ul class='ez-toc-list-level-3' ><li class='ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-12\" href=\"https:\/\/www.developerscloset.com\/?page_id=1248\/#Host_Variable\" >Host Variable<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-13\" href=\"https:\/\/www.developerscloset.com\/?page_id=1248\/#Host_Inventory\" >Host Inventory<\/a><\/li><\/ul><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-14\" href=\"https:\/\/www.developerscloset.com\/?page_id=1248\/#Group_Vars\" >Group Vars<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-15\" href=\"https:\/\/www.developerscloset.com\/?page_id=1248\/#Roles-2\" >Roles<\/a><ul class='ez-toc-list-level-3' ><li class='ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-16\" href=\"https:\/\/www.developerscloset.com\/?page_id=1248\/#Files\" >Files<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-17\" href=\"https:\/\/www.developerscloset.com\/?page_id=1248\/#Tasks\" >Tasks<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-18\" href=\"https:\/\/www.developerscloset.com\/?page_id=1248\/#Run_a_Command_within_a_Task\" >Run a Command within a Task<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-19\" href=\"https:\/\/www.developerscloset.com\/?page_id=1248\/#Defaults\" >Defaults<\/a><\/li><\/ul><\/li><\/ul><\/li><li class='ez-toc-page-1 ez-toc-heading-level-1'><a class=\"ez-toc-link ez-toc-heading-20\" href=\"https:\/\/www.developerscloset.com\/?page_id=1248\/#Example_Commands\" >Example Commands<\/a><ul class='ez-toc-list-level-2' ><li class='ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-21\" href=\"https:\/\/www.developerscloset.com\/?page_id=1248\/#Command_Line\" >Command Line<\/a><ul class='ez-toc-list-level-3' ><li class='ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-22\" href=\"https:\/\/www.developerscloset.com\/?page_id=1248\/#Generic_Ansible_Command_automation_script\" >Generic Ansible Command (automation script)<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-23\" href=\"https:\/\/www.developerscloset.com\/?page_id=1248\/#Add_hostname_to_known_hosts\" >Add hostname to known_hosts<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-24\" href=\"https:\/\/www.developerscloset.com\/?page_id=1248\/#Run_a_command_against_a_host_list\" >Run a command against a host list<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-25\" href=\"https:\/\/www.developerscloset.com\/?page_id=1248\/#Run_a_playbook_against_a_host_pass_encrypted_credentials_on_the_command-line_using_the_password_vault\" >Run a playbook against a host pass encrypted credentials on the command-line using the password vault<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-26\" href=\"https:\/\/www.developerscloset.com\/?page_id=1248\/#Run_a_command_against_an_inventory\" >Run a command against an inventory<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-27\" href=\"https:\/\/www.developerscloset.com\/?page_id=1248\/#Run_a_command_against_a_single_server\" >Run a command against a single server<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-28\" href=\"https:\/\/www.developerscloset.com\/?page_id=1248\/#Run_multiple_Shell_commands\" >Run multiple Shell commands<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-29\" href=\"https:\/\/www.developerscloset.com\/?page_id=1248\/#Run_command_using_the_automation_account\" >Run command using the automation account<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class=\"ez-toc-link ez-toc-heading-30\" href=\"https:\/\/www.developerscloset.com\/?page_id=1248\/#Passing_Variables_On_The_Command_Line\" >Passing Variables On The Command Line<\/a><\/li><\/ul><\/li><\/ul><\/li><\/ul><\/nav><\/div>\n<h1 id=\"Ansible-InstallingAnsible\"><span class=\"ez-toc-section\" id=\"Installing_Ansible\"><\/span>Installing Ansible<span class=\"ez-toc-section-end\"><\/span><\/h1>\n<h2 id=\"Ansible-InstallPre-requisites\"><span class=\"ez-toc-section\" id=\"Install_Pre-requisites\"><\/span>Install Pre-requisites<span class=\"ez-toc-section-end\"><\/span><\/h2>\n<ul>\n<li>Ubuntu Linux environment 14.04+<\/li>\n<li>Setup\u00a0SSH keys<\/li>\n<\/ul>\n<h2 id=\"Ansible-InstallSteps\"><span class=\"ez-toc-section\" id=\"Install_Steps\"><\/span>Install Steps<span class=\"ez-toc-section-end\"><\/span><\/h2>\n<p>While the Ubuntu default repository includes an Ansible package, it is very far behind the upstream project in versioning. Recommend to use the version from the ppa. Instructions taken from\u00a0<a class=\"external-link\" href=\"http:\/\/docs.ansible.com\/ansible\/intro_installation.html#latest-releases-via-apt-ubuntu\" rel=\"nofollow\">http:\/\/docs.ansible.com\/ansible\/intro_installation.html#latest-releases-via-apt-ubuntu<\/a>.<\/p>\n<ol>\n<li>\n<pre>sudo apt-get install software-properties-common<\/pre>\n<\/li>\n<li>\n<pre>sudo apt-add-repository ppa:ansible\/ansible<\/pre>\n<\/li>\n<li>\n<pre>sudo apt-get update<\/pre>\n<\/li>\n<li>\n<pre>sudo apt-get install ansible<\/pre>\n<\/li>\n<\/ol>\n<p>Verify that the installed version is &gt; 2.1 via: ansible &#8211;version<\/p>\n<h2 id=\"Ansible-ConfigureHadoopOpsAnsiblePlaybooks\"><span class=\"ez-toc-section\" id=\"Configure_Ansible_Playbooks\"><\/span>Configure Ansible Playbooks<span class=\"ez-toc-section-end\"><\/span><\/h2>\n<p>Ansible Playbooks run the configurations against the hosts.<\/p>\n<p style=\"padding-left: 30px\">1. Set save credentials:<\/p>\n<div class=\"code panel pdl conf-macro output-block\">\n<div class=\"codeContent panelContent pdl\">\n<div>\n<div id=\"highlighter_4130\" class=\"syntaxhighlighter sh-confluence nogutter bash\">\n<table border=\"0\" cellspacing=\"0\" cellpadding=\"0\">\n<tbody>\n<tr>\n<td class=\"code\">\n<div class=\"container\" title=\"Hint: double-click to select code\">\n<div class=\"line number1 index0 alt2\"><code class=\"bash functions\">export<\/code>\u00a0<code class=\"bash plain\">TF_AUTO_SAVE_CREDENTIALS=1<\/code><\/div>\n<\/div>\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<p class=\"auto-cursor-target\" style=\"padding-left: 30px\">2. <strong>Test:<\/strong>\u00a0run an Ansible Playbook as a test:<\/p>\n<div class=\"code panel pdl conf-macro output-block\">\n<div class=\"codeContent panelContent pdl\">\n<div>\n<div id=\"highlighter_752280\" class=\"syntaxhighlighter sh-confluence nogutter bash\">\n<table border=\"0\" cellspacing=\"0\" cellpadding=\"0\">\n<tbody>\n<tr>\n<td class=\"code\">\n<div class=\"container\" title=\"Hint: double-click to select code\">\n<div class=\"line number3 index2 alt2\"><code class=\"bash comments\"># add host to your ssh known_hosts<\/code><\/div>\n<div class=\"line number4 index3 alt1\"><code class=\"bash functions\">ssh<\/code>\u00a0<code class=\"bash plain\">server-name-01<\/code><\/div>\n<div class=\"line number5 index4 alt2\"><code class=\"bash comments\">#<\/code><\/div>\n<div class=\"line number6 index5 alt1\"><code class=\"bash comments\"># note the setup:<\/code><\/div>\n<div class=\"line number7 index6 alt2\"><code class=\"bash comments\"># 1. Playbook.yml, 2. -i (inventory), 3. pass common vars, including password vault, 4. pass extra vars, including hostname and environment, 5. unlock the password vault<\/code><\/div>\n<div class=\"line number8 index7 alt1\"><code class=\"bash comments\">#<\/code><\/div>\n<div class=\"line number9 index8 alt2\"><code class=\"bash plain\">ansible-playbook configure-apt.yml -i\u00a0<\/code><code class=\"bash string\">\"<code class=\"bash plain\">server-name-01<\/code>,\"<\/code>\u00a0<code class=\"bash plain\">-e @common_vars<\/code><code class=\"bash plain\">\/common_vars<\/code><code class=\"bash plain\">.yml --extra-vars\u00a0<\/code><code class=\"bash string\">'env=local variable_host=<code class=\"bash plain\">server-name-01<\/code>'<\/code>\u00a0<code class=\"bash plain\">-<\/code><code class=\"bash functions\">v<\/code>\u00a0<code class=\"bash plain\">-C --vault-password-<\/code><code class=\"bash functions\">file<\/code>\u00a0<code class=\"bash plain\">~<\/code><code class=\"bash plain\">\/vars\/<\/code><code class=\"bash plain\">.common.txt<\/code><\/div>\n<\/div>\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<ol>\n<li><strong>Optional:<\/strong>\u00a0Test by running an Ansible command\n<ol>\n<li>Ansible role-name &#8211;ssh-extra-args=&#8221;-o PubKeyAuthentication=no -o StrictHostKeyChecking=no&#8221; -m ping -k<\/li>\n<\/ol>\n<\/li>\n<li><strong>Optional:<\/strong>\u00a0Deploy your public ssh key to an Ansible host to test\n<ol>\n<li>Recommend getting someone who already has keys deployed to run the recipe the first time<\/li>\n<li>Otherwise, you&#8217;ll need to connect as a sudo account using password\n<ol>\n<li>In the ansible-playbook command, disable PubKeyAuthentication and StrictHostKeyChecking if running manually as a specific remote_user<\/li>\n<li>&#8211;ssh-extra-args=&#8221;-o PubKeyAuthentication=no -o StrictHostKeyChecking=no&#8221;<\/li>\n<\/ol>\n<\/li>\n<\/ol>\n<\/li>\n<\/ol>\n<h2 id=\"Ansible-FurtherConfiguration\"><span class=\"ez-toc-section\" id=\"Further_Configuration\"><\/span>Further Configuration<span class=\"ez-toc-section-end\"><\/span><\/h2>\n<p>While Ansible will work via ssh and prompting for passwords, it is better practice to use ssh keys for authentication. Use\u00a0a playbook to push SSH keys out to hosts.<\/p>\n<div class=\"WordSection1\">\n<h1 id=\"Ansible-CreateAnsiblePlaybook\"><span class=\"ez-toc-section\" id=\"Create_Ansible_Playbook\"><\/span>Create Ansible Playbook<span class=\"ez-toc-section-end\"><\/span><\/h1>\n<p>The following are various examples to refer to when building an Ansible Playbook:<\/p>\n<h2 id=\"Ansible-Playbook\"><span class=\"ez-toc-section\" id=\"Playbook\"><\/span>Playbook<span class=\"ez-toc-section-end\"><\/span><\/h2>\n<p>Ansible Playbooks require a name, hosts lists the inventory, roles begin a set of tasks.<\/p>\n<h3 id=\"Ansible-Hosts\"><span class=\"ez-toc-section\" id=\"Hosts\"><\/span>Hosts<span class=\"ez-toc-section-end\"><\/span><\/h3>\n<p>Run a specific task against a set of hosts, called a host inventory (note the default):<\/p>\n<div class=\"code panel pdl conf-macro output-block\">\n<div class=\"codeContent panelContent pdl\">\n<div>\n<div id=\"highlighter_306817\" class=\"syntaxhighlighter sh-confluence nogutter bash\">\n<table border=\"0\" cellspacing=\"0\" cellpadding=\"0\">\n<tbody>\n<tr>\n<td class=\"code\">\n<div class=\"container\" title=\"Hint: double-click to select code\">\n<div class=\"line number1 index0 alt2\"><code class=\"bash plain\">---<\/code><\/div>\n<div class=\"line number2 index1 alt1\"><code class=\"bash plain\">- name: Test Playbook to run a shell\u00a0<\/code><code class=\"bash functions\">command<\/code><\/div>\n<div class=\"line number3 index2 alt2\"><code class=\"bash plain\">hosts:\u00a0<\/code><code class=\"bash string\">\"{{ variable_host | default('host-group-name')}}\"<\/code><\/div>\n<div class=\"line number4 index3 alt1\"><code class=\"bash plain\">become:\u00a0<\/code><code class=\"bash functions\">yes<\/code><\/div>\n<div class=\"line number5 index4 alt2\"><code class=\"bash plain\">tasks:<\/code><\/div>\n<div class=\"line number6 index5 alt1\"><code class=\"bash plain\">- name: run this\u00a0<\/code><code class=\"bash functions\">command<\/code>\u00a0<code class=\"bash plain\">and ignore the result<\/code><\/div>\n<div class=\"line number7 index6 alt2\"><code class=\"bash spaces\">\u00a0\u00a0<\/code><code class=\"bash plain\">shell:\u00a0<\/code><code class=\"bash plain\">\/usr\/bin\/somecommand<\/code><\/div>\n<div class=\"line number8 index7 alt1\"><code class=\"bash spaces\">\u00a0\u00a0<\/code><code class=\"bash plain\">ignore_errors: True<\/code><\/div>\n<div class=\"line number9 index8 alt2\"><code class=\"bash plain\">...<\/code><\/div>\n<\/div>\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<p>Pass the host list as a variable:<\/p>\n<div class=\"code panel pdl conf-macro output-block\">\n<div class=\"codeContent panelContent pdl\">\n<div>\n<div id=\"highlighter_326519\" class=\"syntaxhighlighter sh-confluence nogutter bash\">\n<table border=\"0\" cellspacing=\"0\" cellpadding=\"0\">\n<tbody>\n<tr>\n<td class=\"code\">\n<div class=\"container\" title=\"Hint: double-click to select code\">\n<div class=\"line number1 index0 alt2\"><code class=\"bash plain\">hosts:\u00a0<\/code><code class=\"bash string\">\"{{ variable_host | default('web')}}\"<\/code><\/div>\n<div class=\"line number2 index1 alt1\"><\/div>\n<div class=\"line number3 index2 alt2\"><code class=\"bash comments\"># command<\/code><\/div>\n<div class=\"line number4 index3 alt1\"><code class=\"bash plain\">ansible-playbook server.yml --extra-vars\u00a0<\/code><code class=\"bash string\">\"variable_host=server-name-01\"<\/code><\/div>\n<\/div>\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<h3 id=\"Ansible-Roles\"><span class=\"ez-toc-section\" id=\"Roles\"><\/span>Roles<span class=\"ez-toc-section-end\"><\/span><\/h3>\n<p>Use roles instead of tasks:<\/p>\n<div class=\"code panel pdl conf-macro output-block\">\n<div class=\"codeContent panelContent pdl\">\n<div>\n<div id=\"highlighter_137464\" class=\"syntaxhighlighter sh-confluence nogutter bash\">\n<table border=\"0\" cellspacing=\"0\" cellpadding=\"0\">\n<tbody>\n<tr>\n<td class=\"code\">\n<div class=\"container\" title=\"Hint: double-click to select code\">\n<div class=\"line number1 index0 alt2\"><code class=\"bash plain\">---<\/code><\/div>\n<div class=\"line number2 index1 alt1\"><code class=\"bash plain\">- name: Test Playbook to run a role<\/code><\/div>\n<div class=\"line number3 index2 alt2\"><code class=\"bash plain\">hosts: host-group-name<\/code><\/div>\n<div class=\"line number4 index3 alt1\"><code class=\"bash plain\">become:\u00a0<\/code><code class=\"bash functions\">yes<\/code><\/div>\n<div class=\"line number5 index4 alt2\"><code class=\"bash plain\">roles:<\/code><\/div>\n<div class=\"line number6 index5 alt1\"><code class=\"bash plain\">- role-name-of-role<\/code><\/div>\n<div class=\"line number7 index6 alt2\"><code class=\"bash plain\">...<\/code><\/div>\n<\/div>\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<h3 id=\"Ansible-OutputDebugMessage\"><span class=\"ez-toc-section\" id=\"Output_Debug_Message\"><\/span>Output Debug Message<span class=\"ez-toc-section-end\"><\/span><\/h3>\n<div class=\"code panel pdl conf-macro output-block\">\n<div class=\"codeContent panelContent pdl\">\n<div>\n<div id=\"highlighter_969505\" class=\"syntaxhighlighter sh-confluence nogutter bash\">\n<table border=\"0\" cellspacing=\"0\" cellpadding=\"0\">\n<tbody>\n<tr>\n<td class=\"code\">\n<div class=\"container\" title=\"Hint: double-click to select code\">\n<div class=\"line number1 index0 alt2\"><code class=\"bash plain\">- debug:<\/code><\/div>\n<div class=\"line number2 index1 alt1\"><code class=\"bash spaces\">\u00a0\u00a0\u00a0\u00a0<\/code><code class=\"bash plain\">msg:\u00a0<\/code><code class=\"bash string\">\"Host: {{ variable_host }} has a message to output.\"<\/code><\/div>\n<\/div>\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<h2 id=\"Ansible-Hosts.1\"><span class=\"ez-toc-section\" id=\"Hosts-2\"><\/span>Hosts<span class=\"ez-toc-section-end\"><\/span><\/h2>\n<p>Use a host variable, or use a host inventory:<\/p>\n<h3 id=\"Ansible-HostVariable\"><span class=\"ez-toc-section\" id=\"Host_Variable\"><\/span>Host Variable<span class=\"ez-toc-section-end\"><\/span><\/h3>\n<div class=\"code panel pdl conf-macro output-block\">\n<div class=\"codeContent panelContent pdl\">\n<div>\n<div id=\"highlighter_325311\" class=\"syntaxhighlighter sh-confluence nogutter bash\">\n<table border=\"0\" cellspacing=\"0\" cellpadding=\"0\">\n<tbody>\n<tr>\n<td class=\"code\">\n<div class=\"container\" title=\"Hint: double-click to select code\">\n<div class=\"line number1 index0 alt2\"><code class=\"bash plain\">hosts:\u00a0<\/code><code class=\"bash string\">\"{{ variable_host | default('web')}}\"<\/code><\/div>\n<div class=\"line number2 index1 alt1\"><\/div>\n<div class=\"line number3 index2 alt2\"><code class=\"bash comments\"># command<\/code><\/div>\n<div class=\"line number4 index3 alt1\"><code class=\"bash plain\">ansible-playbook server.yml --extra-vars\u00a0<\/code><code class=\"bash string\">\"variable_host=server-name-01\"<\/code><\/div>\n<\/div>\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<h3 id=\"Ansible-HostInventory\"><span class=\"ez-toc-section\" id=\"Host_Inventory\"><\/span>Host Inventory<span class=\"ez-toc-section-end\"><\/span><\/h3>\n<p>\/ansible-playbooks\/ansible_inventory<\/p>\n<p>Lists a host group and list of hosts.<\/p>\n<div class=\"code panel pdl conf-macro output-block\">\n<div class=\"codeContent panelContent pdl\">\n<div>\n<div id=\"highlighter_411362\" class=\"syntaxhighlighter sh-confluence nogutter bash\">\n<table border=\"0\" cellspacing=\"0\" cellpadding=\"0\">\n<tbody>\n<tr>\n<td class=\"code\">\n<div class=\"container\" title=\"Hint: double-click to select code\">\n<div class=\"line number1 index0 alt2\"><code class=\"bash plain\">[host-group-name]<\/code><\/div>\n<div class=\"line number2 index1 alt1\"><code class=\"bash plain\"><code class=\"bash string\">server-name-01<\/code> ansible_host=<code class=\"bash string\">server-name-01.company.com<\/code><\/code><\/div>\n<div class=\"line number3 index2 alt2\"><code class=\"bash plain\"><code class=\"bash string\">server-name-02\u00a0<\/code>ansible_host=<code class=\"bash string\">server-name-02.company.com<\/code><\/code><\/div>\n<div class=\"line number4 index3 alt1\"><code class=\"bash plain\"><code class=\"bash string\">server-name-03\u00a0<\/code>ansible_host=<code class=\"bash string\">server-name-03.company.com<\/code><\/code><\/div>\n<div class=\"line number5 index4 alt2\"><code class=\"bash plain\"><code class=\"bash string\">server-name-04<\/code> ansible_host=<code class=\"bash string\">server-name-04.company.com<\/code><\/code><\/div>\n<\/div>\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<h2 id=\"Ansible-GroupVars\"><span class=\"ez-toc-section\" id=\"Group_Vars\"><\/span>Group Vars<span class=\"ez-toc-section-end\"><\/span><\/h2>\n<p>\/group_vars\/name-of-group.yml<\/p>\n<div class=\"code panel pdl conf-macro output-block\">\n<div class=\"codeContent panelContent pdl\">\n<div>\n<div id=\"highlighter_410452\" class=\"syntaxhighlighter sh-confluence nogutter bash\">\n<table border=\"0\" cellspacing=\"0\" cellpadding=\"0\">\n<tbody>\n<tr>\n<td class=\"code\">\n<div class=\"container\" title=\"Hint: double-click to select code\">\n<div class=\"line number1 index0 alt2\"><code class=\"bash plain\">---<\/code><\/div>\n<div class=\"line number2 index1 alt1\"><code class=\"bash functions\">env<\/code><code class=\"bash plain\">: dev<\/code><\/div>\n<div class=\"line number3 index2 alt2\"><code class=\"bash plain\">variable-name-01:\u00a0<\/code><code class=\"bash string\">\"\/path\/to\/somewhere\"<\/code><\/div>\n<div class=\"line number4 index3 alt1\"><code class=\"bash plain\">variable-name-02:\u00a0<\/code><code class=\"bash string\">\"some variable\"<\/code><\/div>\n<div class=\"line number5 index4 alt2\"><code class=\"bash plain\">variable-name-03:\u00a0<\/code><code class=\"bash string\">\"user name 01\"<\/code><\/div>\n<div class=\"line number6 index5 alt1\"><code class=\"bash plain\">...<\/code><\/div>\n<\/div>\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<h2 id=\"Ansible-Roles.1\"><span class=\"ez-toc-section\" id=\"Roles-2\"><\/span>Roles<span class=\"ez-toc-section-end\"><\/span><\/h2>\n<p>Roles in Ansible build on the idea of include files and combine them to form clean, reusable abstractions. Roles allow you to focus more on the big picture and only dive down into the details when needed.<\/p>\n<p>Within a role:<\/p>\n<h3 id=\"Ansible-Files\"><span class=\"ez-toc-section\" id=\"Files\"><\/span>Files<span class=\"ez-toc-section-end\"><\/span><\/h3>\n<p>For example: \/roles\/role-name\/files\/dev\/file.keytab<\/p>\n<p>Any copy, script, template or include tasks (in the role) can reference files in roles without having to path them relatively or absolutely.<\/p>\n<h3 id=\"Ansible-Tasks\"><span class=\"ez-toc-section\" id=\"Tasks\"><\/span>Tasks<span class=\"ez-toc-section-end\"><\/span><\/h3>\n<p>For example: \/roles\/dsiq-product-dictionary\/tasks\/main.yml<\/p>\n<div class=\"code panel pdl conf-macro output-block\">\n<div class=\"codeContent panelContent pdl\">\n<div>\n<div id=\"highlighter_200341\" class=\"syntaxhighlighter sh-confluence nogutter bash\">\n<table border=\"0\" cellspacing=\"0\" cellpadding=\"0\">\n<tbody>\n<tr>\n<td class=\"code\">\n<div class=\"container\" title=\"Hint: double-click to select code\">\n<div class=\"line number1 index0 alt2\"><code class=\"bash plain\">---<\/code><\/div>\n<div class=\"line number2 index1 alt1\"><code class=\"bash plain\">- name: setup-file-keytab-<\/code><code class=\"bash functions\">dir<\/code><\/div>\n<div class=\"line number3 index2 alt2\"><code class=\"bash spaces\">\u00a0\u00a0<\/code><code class=\"bash functions\">file<\/code><code class=\"bash plain\">:<\/code><\/div>\n<div class=\"line number4 index3 alt1\"><code class=\"bash spaces\">\u00a0\u00a0\u00a0\u00a0<\/code><code class=\"bash plain\">path:\u00a0<\/code><code class=\"bash string\">\"{{ <code class=\"bash plain\">variable-name-01<\/code> }}\"<\/code><\/div>\n<div class=\"line number5 index4 alt2\"><code class=\"bash spaces\">\u00a0\u00a0\u00a0\u00a0<\/code><code class=\"bash plain\">owner:\u00a0<\/code><code class=\"bash string\">\"{{ <code class=\"bash plain\">variable-name-0<span style=\"background-color: #f2f4f5\">2<\/span><\/code>\u00a0}}\"<\/code><\/div>\n<div class=\"line number6 index5 alt1\"><code class=\"bash spaces\">\u00a0\u00a0\u00a0\u00a0<\/code><code class=\"bash plain\">group:\u00a0<\/code><code class=\"bash string\">\"{{ <code class=\"bash plain\">variable-name-0<span style=\"background-color: #f2f4f5\">3<\/span><\/code>\u00a0}}\"<\/code><\/div>\n<div class=\"line number7 index6 alt2\"><code class=\"bash spaces\">\u00a0\u00a0\u00a0\u00a0<\/code><code class=\"bash plain\">mode: 0770<\/code><\/div>\n<div class=\"line number8 index7 alt1\"><code class=\"bash spaces\">\u00a0\u00a0\u00a0\u00a0<\/code><code class=\"bash plain\">state: directory<\/code><\/div>\n<div class=\"line number9 index8 alt2\"><\/div>\n<div class=\"line number10 index9 alt1\"><code class=\"bash plain\">- name: copy-file-keytab-<code class=\"bash functions\">dir<\/code><\/code><\/div>\n<div class=\"line number11 index10 alt2\"><code class=\"bash spaces\">\u00a0\u00a0<\/code><code class=\"bash plain\">copy:<\/code><\/div>\n<div class=\"line number12 index11 alt1\"><code class=\"bash spaces\">\u00a0\u00a0\u00a0\u00a0<\/code><code class=\"bash plain\">dest:\u00a0<\/code><code class=\"bash string\">\"{{ <code class=\"bash plain\">variable-name-01<\/code> }}\"<\/code><\/div>\n<div class=\"line number13 index12 alt2\"><code class=\"bash spaces\">\u00a0\u00a0\u00a0\u00a0<\/code><code class=\"bash plain\">src:\u00a0<\/code><code class=\"bash string\">\"{{ env }}\/\"<\/code><\/div>\n<div class=\"line number14 index13 alt1\"><code class=\"bash spaces\">\u00a0\u00a0\u00a0\u00a0<\/code><code class=\"bash plain\">owner:\u00a0<\/code><code class=\"bash string\">\"{{ <code class=\"bash plain\">variable-name-0<span style=\"background-color: #f2f4f5\">2\u00a0<\/span><\/code>}}\"<\/code><\/div>\n<div class=\"line number15 index14 alt2\"><code class=\"bash spaces\">\u00a0\u00a0\u00a0\u00a0<\/code><code class=\"bash plain\">group:\u00a0<\/code><code class=\"bash string\">\"{{ <code class=\"bash plain\">variable-name-03\u00a0<\/code>}}\"<\/code><\/div>\n<div class=\"line number16 index15 alt1\"><code class=\"bash spaces\">\u00a0\u00a0\u00a0\u00a0<\/code><code class=\"bash plain\">mode: 0770<\/code><\/div>\n<div class=\"line number17 index16 alt2\"><code class=\"bash plain\">...<\/code><\/div>\n<\/div>\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<h3 id=\"Ansible-RunaCommandwithinaTask\"><span class=\"ez-toc-section\" id=\"Run_a_Command_within_a_Task\"><\/span>Run a Command within a Task<span class=\"ez-toc-section-end\"><\/span><\/h3>\n<p>You may find it necessary to run a command on the command-line within a task.<\/p>\n<div class=\"code panel pdl conf-macro output-block\">\n<div class=\"codeContent panelContent pdl\">\n<div>\n<div id=\"highlighter_8803\" class=\"syntaxhighlighter sh-confluence nogutter bash\">\n<table border=\"0\" cellspacing=\"0\" cellpadding=\"0\">\n<tbody>\n<tr>\n<td class=\"code\">\n<div class=\"container\" title=\"Hint: double-click to select code\">\n<div class=\"line number1 index0 alt2\"><code class=\"bash plain\">---<\/code><\/div>\n<div class=\"line number2 index1 alt1\"><code class=\"bash comments\"># playbook to restart a service<\/code><\/div>\n<div class=\"line number3 index2 alt2\"><code class=\"bash plain\">- name: restart-service<\/code><\/div>\n<div class=\"line number4 index3 alt1\"><code class=\"bash spaces\">\u00a0\u00a0<\/code><code class=\"bash plain\">hosts:\u00a0<\/code><code class=\"bash string\">\"{{ variable_host }}\"<\/code><\/div>\n<div class=\"line number5 index4 alt2\"><code class=\"bash spaces\">\u00a0\u00a0<\/code><code class=\"bash plain\">become:\u00a0<\/code><code class=\"bash functions\">yes<\/code><\/div>\n<div class=\"line number6 index5 alt1\"><code class=\"bash spaces\">\u00a0\u00a0<\/code><code class=\"bash plain\">user: root<\/code><\/div>\n<div class=\"line number7 index6 alt2\"><code class=\"bash spaces\">\u00a0\u00a0<\/code><code class=\"bash plain\">tasks:<\/code><\/div>\n<div class=\"line number8 index7 alt1\"><code class=\"bash spaces\">\u00a0\u00a0\u00a0\u00a0<\/code><code class=\"bash plain\">- name: stop-start-<\/code><code class=\"bash keyword\">if<\/code><code class=\"bash plain\">-service<\/code><\/div>\n<div class=\"line number9 index8 alt2\"><code class=\"bash spaces\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0<\/code><code class=\"bash functions\">command<\/code><code class=\"bash plain\">:\u00a0<\/code><code class=\"bash functions\">bash<\/code>\u00a0<code class=\"bash plain\">-c\u00a0<\/code><code class=\"bash string\">\"ifdown eth0 &amp;&amp; ifup eth0\"<\/code><\/div>\n<div class=\"line number10 index9 alt1\"><code class=\"bash plain\">...<\/code><\/div>\n<\/div>\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<h3 id=\"Ansible-Defaults\"><span class=\"ez-toc-section\" id=\"Defaults\"><\/span>Defaults<span class=\"ez-toc-section-end\"><\/span><\/h3>\n<p>Example: \/roles\/role-name\/defaults\/main.yml<\/p>\n<p>To create defaults, simply add a defaults\/main.yml file in your role directory. These variables will have the lowest priority of any variables available, and can be easily overridden by any other variable, including inventory variables.<\/p>\n<div class=\"code panel pdl conf-macro output-block\">\n<div class=\"codeContent panelContent pdl\">\n<div id=\"highlighter_781541\" class=\"syntaxhighlighter sh-confluence nogutter bash\">\n<table border=\"0\" cellspacing=\"0\" cellpadding=\"0\">\n<tbody>\n<tr>\n<td class=\"code\">\n<div class=\"container\" title=\"Hint: double-click to select code\">\n<div class=\"line number1 index0 alt2\"><code class=\"bash plain\">---<\/code><\/div>\n<div class=\"line number2 index1 alt1\"><code class=\"bash functions\">env<\/code><code class=\"bash plain\">: dev<\/code><\/div>\n<div class=\"line number3 index2 alt2\">\n<div class=\"line number3 index2 alt2\"><code class=\"bash plain\">variable-name-01:\u00a0<\/code><code class=\"bash string\">\"\/another\/path\/to\/somewhere\"<\/code><\/div>\n<div class=\"line number4 index3 alt1\"><code class=\"bash plain\">variable-name-02:\u00a0<\/code><code class=\"bash string\">\"another variable\"<\/code><\/div>\n<div class=\"line number5 index4 alt2\"><code class=\"bash plain\">variable-name-03:\u00a0<\/code><code class=\"bash string\">\"override user name 01\"<\/code><\/div>\n<\/div>\n<div class=\"line number6 index5 alt1\"><code class=\"bash plain\">...<\/code><\/div>\n<\/div>\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/div>\n<\/div>\n<\/div>\n<h1 id=\"Ansible-ExampleCommands\"><span class=\"ez-toc-section\" id=\"Example_Commands\"><\/span>Example Commands<span class=\"ez-toc-section-end\"><\/span><\/h1>\n<div class=\"code panel pdl conf-macro output-block\">\n<div class=\"codeContent panelContent pdl\">\n<div>\n<h2 id=\"highlighter_937761\" class=\"syntaxhighlighter sh-confluence nogutter bash\"><span class=\"ez-toc-section\" id=\"Command_Line\"><\/span>Command Line<span class=\"ez-toc-section-end\"><\/span><\/h2>\n<\/div>\n<\/div>\n<\/div>\n<h3 id=\"Ansible-GenericAnsibleCommand(whatyouwouldseeOrchestratorrun)\"><span class=\"ez-toc-section\" id=\"Generic_Ansible_Command_automation_script\"><\/span>Generic Ansible Command (automation script)<span class=\"ez-toc-section-end\"><\/span><\/h3>\n<div class=\"code panel pdl conf-macro output-block\">\n<div class=\"codeContent panelContent pdl\">\n<div>\n<div id=\"highlighter_821442\" class=\"syntaxhighlighter sh-confluence nogutter bash\">\n<table border=\"0\" cellspacing=\"0\" cellpadding=\"0\">\n<tbody>\n<tr>\n<td class=\"code\">\n<div class=\"container\" title=\"Hint: double-click to select code\">\n<div class=\"line number1 index0 alt2\"><code class=\"bash comments\"># browse to your list of playbooks<\/code><\/div>\n<div class=\"line number2 index1 alt1\"><code class=\"bash functions\">cd<\/code>\u00a0<code class=\"bash plain\">\/dir\/<\/code><code class=\"bash plain\">`<\/code><code class=\"bash functions\">whoami<\/code><code class=\"bash plain\">`<\/code><code class=\"bash plain\">\/to\/ansible-playbooks<\/code><\/div>\n<div class=\"line number3 index2 alt2\"><code class=\"bash comments\">#<\/code><\/div>\n<div class=\"line number4 index3 alt1\"><code class=\"bash comments\"># run playbook with validation flag to test host, authentication, and the validity of the playbook itself. Include env and host vars<\/code><\/div>\n<div class=\"line number5 index4 alt2\"><code class=\"bash plain\">ansible-playbook configure-apt.yml -i\u00a0<\/code><code class=\"bash string\">\"server-name-01,\"<\/code>\u00a0<code class=\"bash plain\">-e @common_vars<\/code><code class=\"bash plain\">\/common_vars<\/code><code class=\"bash plain\">.yml --extra-vars\u00a0<\/code><code class=\"bash string\">'env=local variable_host=server-name-01'<\/code>\u00a0<code class=\"bash plain\">-<\/code><code class=\"bash functions\">v<\/code>\u00a0<code class=\"bash plain\">--vault-password-<\/code><code class=\"bash functions\">file<\/code>\u00a0<code class=\"bash plain\">~<\/code><code class=\"bash plain\">\/vars\/<\/code><code class=\"bash plain\">.common.txt<\/code><\/div>\n<\/div>\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<h3 id=\"Ansible-Addhostnametoknown_hosts\"><span class=\"ez-toc-section\" id=\"Add_hostname_to_known_hosts\"><\/span>Add hostname to known_hosts<span class=\"ez-toc-section-end\"><\/span><\/h3>\n<p>Useful for running against a large set of hosts as the playbooks will not be broken apart by the question to add the host to the known_hosts file. Simply call this from your playbook:<\/p>\n<div class=\"code panel pdl conf-macro output-block\">\n<div class=\"codeContent panelContent pdl\">\n<div>\n<div id=\"highlighter_534488\" class=\"syntaxhighlighter sh-confluence nogutter bash\">\n<table border=\"0\" cellspacing=\"0\" cellpadding=\"0\">\n<tbody>\n<tr>\n<td class=\"code\">\n<div class=\"container\" title=\"Hint: double-click to select code\">\n<div class=\"line number1 index0 alt2\"><code class=\"bash plain\">ansible-playbook -i\u00a0<\/code><code class=\"bash string\">\"server-name-01,\"<\/code>\u00a0<code class=\"bash plain\">dsiq-<\/code><code class=\"bash functions\">ssh<\/code><code class=\"bash plain\">-keyscan.yml -<\/code><code class=\"bash functions\">v<\/code><\/div>\n<\/div>\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<h3 id=\"Ansible-Runacommandagainstahostlist\"><span class=\"ez-toc-section\" id=\"Run_a_command_against_a_host_list\"><\/span>Run a command against a host list<span class=\"ez-toc-section-end\"><\/span><\/h3>\n<p>Using -l to indicate host list:<\/p>\n<div class=\"code panel pdl conf-macro output-block\">\n<div class=\"codeContent panelContent pdl\">\n<div>\n<div id=\"highlighter_932622\" class=\"syntaxhighlighter sh-confluence nogutter bash\">\n<table border=\"0\" cellspacing=\"0\" cellpadding=\"0\">\n<tbody>\n<tr>\n<td class=\"code\">\n<div class=\"container\" title=\"Hint: double-click to select code\">\n<div class=\"line number1 index0 alt2\"><code class=\"bash plain\">ansible-playbook configure-<\/code><code class=\"bash functions\">ssh<\/code><code class=\"bash plain\">-keys.yml -l host-names --list-hosts<\/code><\/div>\n<div class=\"line number2 index1 alt1\"><code class=\"bash plain\">ansible-playbook configure-dev.yml -l additional-hosts --list-hosts -C<\/code><\/div>\n<\/div>\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<h3 id=\"Ansible-Runaplaybookagainstahostpassencryptedcredentialsonthecommand-lineusingthepasswordvault\"><span class=\"ez-toc-section\" id=\"Run_a_playbook_against_a_host_pass_encrypted_credentials_on_the_command-line_using_the_password_vault\"><\/span>Run a playbook against a host pass encrypted credentials on the command-line using the password vault<span class=\"ez-toc-section-end\"><\/span><\/h3>\n<p>Using -i to indicate inventory (and host vars to pass the host name to the playbook):<\/p>\n<div class=\"code panel pdl conf-macro output-block\">\n<div class=\"codeContent panelContent pdl\">\n<div>\n<div id=\"highlighter_193037\" class=\"syntaxhighlighter sh-confluence nogutter bash\">\n<table border=\"0\" cellspacing=\"0\" cellpadding=\"0\">\n<tbody>\n<tr>\n<td class=\"code\">\n<div class=\"container\" title=\"Hint: double-click to select code\">\n<div class=\"line number1 index0 alt2\"><code class=\"bash plain\">ansible-playbook configure-apt.yml -i\u00a0<\/code><code class=\"bash string\">\"server-name-01,\"<\/code>\u00a0<code class=\"bash plain\">-e @common_vars<\/code><code class=\"bash plain\">\/common_vars<\/code><code class=\"bash plain\">.yml --extra-vars\u00a0<\/code><code class=\"bash string\">'env=local variable_host=server-name-01'<\/code>\u00a0<code class=\"bash plain\">-<\/code><code class=\"bash functions\">v<\/code>\u00a0<code class=\"bash plain\">-C --vault-password-<\/code><code class=\"bash functions\">file<\/code>\u00a0<code class=\"bash plain\">~<\/code><code class=\"bash plain\">\/vars\/<\/code><code class=\"bash plain\">.common.txt<\/code><\/div>\n<\/div>\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<h3 id=\"Ansible-Runacommandagainstaninventory\"><span class=\"ez-toc-section\" id=\"Run_a_command_against_an_inventory\"><\/span>Run a command against an inventory<span class=\"ez-toc-section-end\"><\/span><\/h3>\n<p>Create a directory, set permissions on the directory, and copy a file:<\/p>\n<div class=\"code panel pdl conf-macro output-block\">\n<div class=\"codeContent panelContent pdl\">\n<div>\n<div id=\"highlighter_724584\" class=\"syntaxhighlighter sh-confluence nogutter bash\">\n<table border=\"0\" cellspacing=\"0\" cellpadding=\"0\">\n<tbody>\n<tr>\n<td class=\"code\">\n<div class=\"container\" title=\"Hint: double-click to select code\">\n<div class=\"line number1 index0 alt2\"><code class=\"bash functions\">cd<\/code>\u00a0<code class=\"bash plain\">\/dir\/to\/ansible-playbooks\/<\/code><\/div>\n<div class=\"line number2 index1 alt1\"><\/div>\n<div class=\"line number3 index2 alt2\"><code class=\"bash comments\"># apply to the hosts-dev group<\/code><\/div>\n<div class=\"line number4 index3 alt1\"><code class=\"bash plain\">ansible hosts-dev-a\u00a0<\/code><code class=\"bash string\">\"sudo mkdir -p \/dir\/name\/ owner=root group=root\"<\/code>\u00a0<code class=\"bash plain\">-<\/code><code class=\"bash functions\">v<\/code><\/div>\n<div class=\"line number5 index4 alt2\"><code class=\"bash plain\">ansible hosts-dev -a\u00a0<\/code><code class=\"bash string\">\"sudo chmod -R 777 \/dir\/name\/\"<\/code>\u00a0<code class=\"bash plain\">-<\/code><code class=\"bash functions\">v<\/code><\/div>\n<div class=\"line number6 index5 alt1\"><code class=\"bash plain\">ansible hosts-dev -a\u00a0<\/code><code class=\"bash string\">\"sudo chown -R root:root \/dir\/name\/\"<\/code>\u00a0<code class=\"bash plain\">-<\/code><code class=\"bash functions\">v<\/code><\/div>\n<div class=\"line number7 index6 alt2\"><code class=\"bash plain\">ansible hosts-dev -m copy -a\u00a0<\/code><code class=\"bash string\">\"src=~\/from\/dir\/name\/file.keytab dest=\/dir\/name\/ mode=700 owner=root group=root\"<\/code>\u00a0<code class=\"bash plain\">-<\/code><code class=\"bash functions\">v<\/code><\/div>\n<div class=\"line number8 index7 alt1\"><code class=\"bash plain\">ansible hosts-dev -a\u00a0<\/code><code class=\"bash string\">\"sudo chmod -R 700 \/dir\/name\/\"<\/code>\u00a0<code class=\"bash plain\">-<\/code><code class=\"bash functions\">v<\/code><\/div>\n<\/div>\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<h3 id=\"Ansible-Runacommandagainstasingleserver\" class=\"auto-cursor-target\"><span class=\"ez-toc-section\" id=\"Run_a_command_against_a_single_server\"><\/span>Run a command against a single server<span class=\"ez-toc-section-end\"><\/span><\/h3>\n<p>There&#8217;s a cute little trick that lets you specify a single host on the command line (or multiple hosts, I guess), without an intermediary inventory:<\/p>\n<div class=\"code panel pdl conf-macro output-block\">\n<div class=\"codeContent panelContent pdl\">\n<div>\n<div id=\"highlighter_536219\" class=\"syntaxhighlighter sh-confluence nogutter bash\">\n<table border=\"0\" cellspacing=\"0\" cellpadding=\"0\">\n<tbody>\n<tr>\n<td class=\"code\">\n<div class=\"container\" title=\"Hint: double-click to select code\">\n<div class=\"line number1 index0 alt2\"><code class=\"bash plain\">ansible\u00a0<\/code><code class=\"bash string\">\"server-name-01,\"<\/code>\u00a0<code class=\"bash plain\">-a\u00a0<\/code><code class=\"bash string\">\"sudo chmod -R 770 \/dir\/name\/\"<\/code>\u00a0<code class=\"bash plain\">-<\/code><code class=\"bash functions\">v<\/code>\u00a0<code class=\"bash plain\">--list-hosts<\/code><\/div>\n<\/div>\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<p>Note the comma (<strong>,<\/strong>) at the end; this signals that it&#8217;s a list, not a file.<\/p>\n<h3 id=\"Ansible-RunmultipleShellcommands\"><span class=\"ez-toc-section\" id=\"Run_multiple_Shell_commands\"><\/span>Run multiple Shell commands<span class=\"ez-toc-section-end\"><\/span><\/h3>\n<div class=\"code panel pdl conf-macro output-block\">\n<div class=\"codeContent panelContent pdl\">\n<div>\n<div id=\"highlighter_923584\" class=\"syntaxhighlighter sh-confluence nogutter bash\">\n<table border=\"0\" cellspacing=\"0\" cellpadding=\"0\">\n<tbody>\n<tr>\n<td class=\"code\">\n<div class=\"container\" title=\"Hint: double-click to select code\">\n<div class=\"line number1 index0 alt2\"><code class=\"bash plain\">ansible\u00a0<\/code><code class=\"bash string\">\"erver-name-01,\"<\/code>\u00a0<code class=\"bash plain\">-m shell -a\u00a0<\/code><code class=\"bash string\">'sudo mkdir -p \/dir\/name\/;sudo chmod -R 777 \/dir\/name\/;'<\/code>\u00a0<code class=\"bash plain\">-<\/code><code class=\"bash functions\">v<\/code><\/div>\n<\/div>\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<h3 id=\"Ansible-Runcommandusingtheautomationaccount\" class=\"auto-cursor-target\"><span class=\"ez-toc-section\" id=\"Run_command_using_the_automation_account\"><\/span>Run command using the automation account<span class=\"ez-toc-section-end\"><\/span><\/h3>\n<p>If you don&#8217;t have permissions to access a server, chances are the automation account does&#8230;<\/p>\n<p>The automation account is used to script ansible commands. The account uses an encrypted password when run as a script and allows ansible access to all servers.<\/p>\n<p>Use the\u00a0&#8211;ask-vault-pass to inject the account &#8211; the password will be asked for on the command line<\/p>\n<div class=\"code panel pdl conf-macro output-block\">\n<div class=\"codeContent panelContent pdl\">\n<div>\n<div id=\"highlighter_636453\" class=\"syntaxhighlighter sh-confluence nogutter bash\">\n<table border=\"0\" cellspacing=\"0\" cellpadding=\"0\">\n<tbody>\n<tr>\n<td class=\"code\">\n<div class=\"container\" title=\"Hint: double-click to select code\">\n<div class=\"line number1 index0 alt2\"><code class=\"bash plain\">ansible hosts-list<\/code>\u00a0<code class=\"bash plain\">-a\u00a0<\/code><code class=\"bash string\">\"sudo mkdir -p \/dir\/name\/\"<\/code>\u00a0<code class=\"bash plain\">-<\/code><code class=\"bash functions\">v<\/code>\u00a0<code class=\"bash plain\">--ask-vault-pass<\/code><\/div>\n<\/div>\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<h3 id=\"Ansible-PassingVariablesOnTheCommandLine\"><span class=\"ez-toc-section\" id=\"Passing_Variables_On_The_Command_Line\"><\/span>Passing Variables On The Command Line<span class=\"ez-toc-section-end\"><\/span><\/h3>\n<p>In addition to vars_prompt and vars_files, it is possible to send variables over the Ansible command line. This is particularly useful when writing a generic release playbook where you may want to pass in the version of the application to deploy:<\/p>\n<div class=\"code panel pdl conf-macro output-block\">\n<div class=\"codeContent panelContent pdl\">\n<div>\n<div id=\"highlighter_120706\" class=\"syntaxhighlighter sh-confluence nogutter bash\">\n<table border=\"0\" cellspacing=\"0\" cellpadding=\"0\">\n<tbody>\n<tr>\n<td class=\"code\">\n<div class=\"container\" title=\"Hint: double-click to select code\">\n<div class=\"line number1 index0 alt2\"><code class=\"bash plain\">ansible-playbook release.yml --extra-vars\u00a0<\/code><code class=\"bash string\">\"version=1.23.45 other_variable=foo\"<\/code><\/div>\n<\/div>\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<p>This is useful, for, among other things, setting the hosts group or the user for the playbook.<\/p>\n<p>Example:<\/p>\n<p>&#8212;<\/p>\n<p>&#8211; hosts: &#8216;{{ hosts }}&#8217;<br \/>\nremote_user: &#8216;{{ user }}&#8217;<\/p>\n<p>tasks:<br \/>\n&#8211;<\/p>\n<p>&#8230;<\/p>\n<div class=\"code panel pdl conf-macro output-block\">\n<div class=\"codeContent panelContent pdl\">\n<div>\n<div id=\"highlighter_402093\" class=\"syntaxhighlighter sh-confluence nogutter bash\">\n<table border=\"0\" cellspacing=\"0\" cellpadding=\"0\">\n<tbody>\n<tr>\n<td class=\"code\">\n<div class=\"container\" title=\"Hint: double-click to select code\">\n<div class=\"line number1 index0 alt2\"><code class=\"bash plain\">ansible-playbook release.yml --extra-vars\u00a0<\/code><code class=\"bash string\">\"hosts=vipers user=starbuck\"<\/code><\/div>\n<\/div>\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n","protected":false},"excerpt":{"rendered":"<p>Ansible is an IT automation tool. It can configure systems, deploy software, and orchestrate more advanced IT tasks such as continuous deployments or zero downtime [&#8230;]<\/p>\n","protected":false},"author":2,"featured_media":0,"parent":0,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"","meta":{"jetpack_post_was_ever_published":false,"footnotes":""},"class_list":["post-1248","page","type-page","status-publish","hentry"],"jetpack_shortlink":"https:\/\/wp.me\/P1BQ8S-k8","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/www.developerscloset.com\/index.php?rest_route=\/wp\/v2\/pages\/1248","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.developerscloset.com\/index.php?rest_route=\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/www.developerscloset.com\/index.php?rest_route=\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/www.developerscloset.com\/index.php?rest_route=\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/www.developerscloset.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=1248"}],"version-history":[{"count":3,"href":"https:\/\/www.developerscloset.com\/index.php?rest_route=\/wp\/v2\/pages\/1248\/revisions"}],"predecessor-version":[{"id":1370,"href":"https:\/\/www.developerscloset.com\/index.php?rest_route=\/wp\/v2\/pages\/1248\/revisions\/1370"}],"wp:attachment":[{"href":"https:\/\/www.developerscloset.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=1248"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}