{"id":6115,"date":"2019-07-03T11:31:01","date_gmt":"2019-07-03T11:31:01","guid":{"rendered":"https:\/\/www.devopsschool.com\/blog\/?p=6115"},"modified":"2023-07-20T13:08:23","modified_gmt":"2023-07-20T13:08:23","slug":"how-can-i-pass-variable-to-ansible-playbook-in-the-command-line","status":"publish","type":"post","link":"https:\/\/www.devopsschool.com\/blog\/how-can-i-pass-variable-to-ansible-playbook-in-the-command-line\/","title":{"rendered":"Ansible Variable: How can I pass variable to ansible playbook in the command line?"},"content":{"rendered":"\n<p>It is possible to set variables at the command line using the &#8211;extra-vars (or -e) argument. Variables can be defined using a single quoted string (containing one or more variables) using one of the formats below.<\/p>\n\n\n\n<blockquote class=\"wp-block-quote is-layout-flow wp-block-quote-is-layout-flow\">\n<p>key=value<\/p>\n<\/blockquote>\n\n\n\n<p><strong>Method 1<\/strong><\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-1\" data-shcb-language-name=\"JavaScript\" data-shcb-language-slug=\"javascript\"><span><code class=\"hljs language-javascript\">$ ansible-playbook release.yml --extra-vars <span class=\"hljs-string\">\"version=1.23.45 other_variable=foo\"<\/span>\n$ ansible-playbook release.yml -e <span class=\"hljs-string\">\"version=1.23.45 other_variable=foo\"<\/span>\n\nIn your yml file you assign these to scoped ansible variables by doing something like:\n\nvars:\n    my_version: <span class=\"hljs-string\">\"{{ version }}\"<\/span>\n    <span class=\"hljs-attr\">my_other_variable<\/span>: {{ other_variable }}\n<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-1\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">JavaScript<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">javascript<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<p><strong>Method 2<\/strong><br> An alternative to using command line args is to utilise environmental variables that are already defined within your session, you can reference these within your ansible yml files like this:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-2\" data-shcb-language-name=\"PHP\" data-shcb-language-slug=\"php\"><span><code class=\"hljs language-php\"><span class=\"hljs-comment\"># To set a environmental variables<\/span>\n$ export version=<span class=\"hljs-number\">1.23<\/span><span class=\"hljs-number\">.45<\/span>\n$ export other_variable=foo<span class=\"hljs-string\">\"\n\nvars:\n    my_version: \"<\/span>{{ lookup(<span class=\"hljs-string\">'env'<\/span>, <span class=\"hljs-string\">'version'<\/span>) }}<span class=\"hljs-string\">\"\n    my_other_variable: {{ lookup('env', 'other_variable') }}\n<\/span><\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-2\"><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>Method 3<\/strong><br> If you are passing variables from a file, you need a second &#8211;extra-vars flag to pass variables.<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-3\" data-shcb-language-name=\"JavaScript\" data-shcb-language-slug=\"javascript\"><span><code class=\"hljs language-javascript\">$ ansible-playbook release.yml --extra-vars <span class=\"hljs-string\">\"@some_file.json\"<\/span>\n$ ansible-playbook release.yml -e <span class=\"hljs-string\">\"@some_file.json\"<\/span>\n$ ansible-playbook release.yml --extra-vars <span class=\"hljs-string\">\"version=1.23.45 other_variable=foo\"<\/span> --extra-vars <span class=\"hljs-string\">\"@some_file.json\"<\/span>\n$ ansible-playbook release.yml -e <span class=\"hljs-string\">\"version=1.23.45 other_variable=foo\"<\/span> --extra-vars <span class=\"hljs-string\">\"@some_file.json\"<\/span><\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-3\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">JavaScript<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">javascript<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<p><strong>Method 4<\/strong><br> How can I pass yaml array to &#8211;extra-vars in Ansible playbook?<\/p>\n\n\n\n<p>To answer your first question &#8220;How can I pass yaml array to &#8211;extra-vars in Ansible playbook.&#8221; you can pass in a json formatted string to extra-vars.<\/p>\n\n\n\n<p>Here is an example play:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-4\" data-shcb-language-name=\"JavaScript\" data-shcb-language-slug=\"javascript\"><span><code class=\"hljs language-javascript\">- hosts: all\n  <span class=\"hljs-attr\">gather_facts<\/span>: no\n  <span class=\"hljs-attr\">tasks<\/span>:\n    - debug: <span class=\"hljs-keyword\">var<\/span>=test_list\n\nAnd how to pass <span class=\"hljs-keyword\">in<\/span> test_list to ansible-playbook:\n$ ansible-playbook -c local -i localhost, test.yml --extra-vars=<span class=\"hljs-string\">'{\"test_list\": &#91;1,2,3]}'<\/span><\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-4\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">JavaScript<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">javascript<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<p><strong>Method 5 &#8211; PASSING MULTIPLE VARIABLES.<\/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\">$ ansible-playbook extra_var_multiple.yml --extra-<span class=\"hljs-keyword\">var<\/span> <span class=\"hljs-string\">\"my_var1=CoolVar1 my_var2=WarmVar2\"<\/span>\n\nPASSING VARIABLES CONTAINING SPACES.\n$ ansible-playbook extra_var_single.yml -e <span class=\"hljs-string\">\"my_var='Very Hot Var with spaces'\"<\/span>\n\n<span class=\"hljs-comment\">#PASSING INTEGER, BOOL, LIST, OR ANY OTHER NON-STRING VALUES.<\/span>\nansible-playbook extra_var_json.yml -e <span class=\"hljs-string\">'{\"my_float\": 1.618, \"my_list\": &#91;\"HGTTG\", 42], \"my_string\": \"Time is an illusion.\"}'<\/span>\n\n<span class=\"hljs-comment\">#PASSING JSON FORMATTED VARIABLES SAVED IN A FILE<\/span>\n&#91;przemek@quasar extra_var]$ cat extra_vars.json\n{<span class=\"hljs-string\">\"my_float\"<\/span>: <span class=\"hljs-number\">1.618<\/span>, <span class=\"hljs-string\">\"my_list\"<\/span>: &#91;<span class=\"hljs-string\">\"HGTTG\"<\/span>, <span class=\"hljs-number\">42<\/span>], <span class=\"hljs-string\">\"my_string\"<\/span>: <span class=\"hljs-string\">\"Time is an illusion.\"<\/span>}\n\nansible-playbook extra_var_json.yml -e <span class=\"hljs-string\">\"@extra_vars.json\"<\/span>\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>Reference<\/strong><br> <a href=\"https:\/\/docs.ansible.com\/ansible\/2.5\/user_guide\/playbooks_variables.html#passing-variables-on-the-command-line\" target=\"_blank\" rel=\"noopener\">https:\/\/docs.ansible.com\/ansible\/2.5\/user_guide\/playbooks_variables.html#passing-variables-on-the-command-line<\/a><\/p>\n\n\n\n<p><a href=\"https:\/\/ttl255.com\/ansible-pass-extra-variables-to-playbook\/\" target=\"_blank\" rel=\"noopener\">https:\/\/ttl255.com\/ansible-pass-extra-variables-to-playbook\/<\/a><\/p>\n\n\n<div class=\"epyt-gallery\" data-currpage=\"1\" id=\"epyt_gallery_38308\"><iframe loading=\"lazy\"  id=\"_ytid_15603\"  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_38308\"  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 class=\"epyt-gallery-list\"><div>Sorry, there was a YouTube error.<\/div><\/div><\/div>","protected":false},"excerpt":{"rendered":"<p>It is possible to set variables at the command line using the &#8211;extra-vars (or -e) argument. Variables can be defined using a single quoted string (containing one or more variables)&#8230; <\/p>\n","protected":false},"author":1,"featured_media":7806,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_joinchat":[],"footnotes":""},"categories":[5038],"tags":[639,5547,5449,5040,317],"class_list":["post-6115","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-ansible","tag-ansible","tag-commandline","tag-devopsschool","tag-playbook","tag-variables"],"_links":{"self":[{"href":"https:\/\/www.devopsschool.com\/blog\/wp-json\/wp\/v2\/posts\/6115","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=6115"}],"version-history":[{"count":5,"href":"https:\/\/www.devopsschool.com\/blog\/wp-json\/wp\/v2\/posts\/6115\/revisions"}],"predecessor-version":[{"id":37159,"href":"https:\/\/www.devopsschool.com\/blog\/wp-json\/wp\/v2\/posts\/6115\/revisions\/37159"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.devopsschool.com\/blog\/wp-json\/wp\/v2\/media\/7806"}],"wp:attachment":[{"href":"https:\/\/www.devopsschool.com\/blog\/wp-json\/wp\/v2\/media?parent=6115"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.devopsschool.com\/blog\/wp-json\/wp\/v2\/categories?post=6115"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.devopsschool.com\/blog\/wp-json\/wp\/v2\/tags?post=6115"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}