{"id":3870,"date":"2024-07-08T07:00:00","date_gmt":"2024-07-08T05:00:00","guid":{"rendered":"https:\/\/www.my-it-brain.de\/wordpress\/?p=3870"},"modified":"2024-06-13T20:13:52","modified_gmt":"2024-06-13T18:13:52","slug":"beispiele-fuer-ansibles-var-is-defined","status":"publish","type":"post","link":"https:\/\/www.my-it-brain.de\/wordpress\/beispiele-fuer-ansibles-var-is-defined\/","title":{"rendered":"Beispiele f\u00fcr Ansibles &#8218;var is defined&#8216;"},"content":{"rendered":"\n<p>In diesem Beitrag gebe ich einige Beispiele mit Erkl\u00e4rungen zu <a href=\"https:\/\/docs.ansible.com\/ansible\/2.8\/user_guide\/playbooks_conditionals.html#conditionals\">Ansible Conditionals<\/a>, welche mir in der Dokumentation fehlen. Dieser Artikel dient mir zur Erinnerung und mag Einsteigern helfen, ein besseres Verst\u00e4ndnis der Bedingung <code>is defined<\/code> zu gewinnen.<\/p>\n\n\n\n<p>Wird in einem Task eine Variable verwendet, welche nicht definiert ist, bricht Ansible die Verarbeitung eines Playbooks mit einem Fehler ab. Der folgende Code-Block zeigt ein einfaches Playbook mit anschlie\u00dfender Ausgabe des Playbooklaufs, um dies zu verdeutlichen. Der Task beinhaltet dabei bereits eine Bedingung. Er soll nur dann ausgef\u00fchrt werden, wenn die Variable <code>my_var<\/code> den Wert <code>Hello world!<\/code> enth\u00e4lt.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>]$ cat test_conditionals.yml \n---\n- name: Play around with conditionals\n  hosts: localhost\n  gather_facts: false\n\n  tasks:\n    - name: &gt;-\n        When all conditionals are met, print the variable value using\n        ansible.builtin.debug\n      when:\n        - my_var == \"Hello world!\"\n      ansible.builtin.debug:\n        var: my_var\n\n]$ ansible-playbook -i hosts test_conditionals.yml \n\nPLAY &#91;Play around with conditionals] *******************************************\n\nTASK &#91;When all conditionals are met, print the variable value using ansible.builtin.debug] ***\nfatal: &#91;localhost]: FAILED! =&gt; {\"msg\": \"The conditional check 'my_var == \\\"Hello world!\\\"' failed. The error was: error while evaluating conditional (my_var == \\\"Hello world!\\\"): 'my_var' is undefined. 'my_var' is undefined\\n\\nThe error appears to be in '\/home\/tronde\/ansible\/test_conditionals.yml': line 7, column 7, but may\\nbe elsewhere in the file depending on the exact syntax problem.\\n\\nThe offending line appears to be:\\n\\n  tasks:\\n    - name: &gt;-\\n      ^ here\\n\"}\n\nPLAY RECAP *********************************************************************\nlocalhost                  : ok=0    changed=0    unreachable=0    failed=1    skipped=0    rescued=0    ignored=0<\/code><\/pre>\n\n\n\n<p>Der Text <code>'my_var' is undefined<\/code> in obiger Fehlerausgabe benennt den Grund des Scheiterns.<\/p>\n\n\n\n<p>Nun gibt es F\u00e4lle, in denen Tasks, welche undefinierte Variablen enthalten, nicht zum Abbruch des gesamten Playbooks f\u00fchren sollen. Stattdessen soll der betroffene Task einfach \u00fcbersprungen werden. Dies erreicht man mit der Bedingung `is defined`. Der n\u00e4chste Code-Block liefert wieder ein Beispiel dazu.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>]$ cat test_conditionals.yml\n---\n- name: Play around with conditionals\n  hosts: localhost\n  gather_facts: false\n\n  tasks:\n    - name: &gt;-\n        When all conditionals are met, print the variable value using\n        ansible.builtin.debug\n      when:\n        - my_var is defined\n        - my_var == \"Hello world!\"\n      ansible.builtin.debug:\n        var: my_var\n\n]$ ansible-playbook -i hosts test_conditionals.yml\n\nPLAY &#91;Play around with conditionals] *******************************************\n\nTASK &#91;When all conditionals are met, print the variable value using ansible.builtin.debug] ***\nskipping: &#91;localhost]\n\nPLAY RECAP *********************************************************************\nlocalhost                  : ok=0    changed=0    unreachable=0    failed=0    skipped=1    rescued=0    ignored=0<\/code><\/pre>\n\n\n\n<p>Der Task mit der undefinierten Variable wurde \u00fcbersprungen (skipped) und das Playbook erfolgreich beendet.<\/p>\n\n\n\n<p>Im n\u00e4chsten Beispiel habe ich die Variable <code>my_var<\/code> im Playbook definiert und den passenden Wert zugewiesen.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>]$ cat test_conditionals.yml\n---\n- name: Play around with conditionals\n  hosts: localhost\n  gather_facts: false\n  vars:\n    my_var: Hello world!\n\n  tasks:\n    - name: &gt;-\n        When all conditionals are met, print the variable value using\n        ansible.builtin.debug\n      when:\n        - my_var is defined\n        - my_var == \"Hello world!\"\n      ansible.builtin.debug:\n        var: my_var\n\n]$ ansible-playbook -i hosts test_conditionals.yml\n\nPLAY &#91;Play around with conditionals] *******************************************\n\nTASK &#91;When all conditionals are met, print the variable value using ansible.builtin.debug] ***\nok: &#91;localhost] =&gt; {\n    \"my_var\": \"Hello world!\"\n}\n\nPLAY RECAP *********************************************************************\nlocalhost                  : ok=1    changed=0    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0<\/code><\/pre>\n\n\n\n<p>Das war auch schon alles f\u00fcr heute. Ihr seht, es ist keine Hexerei. Mir hilft es, die Bedeutung von <code>is defined<\/code> zu erinnern, wenn ich es einmal aufgeschrieben habe.<\/p>\n\n\n\n<p>Zum Ende gibt es noch einen Code-Block, der zeigt, dass dies auch mit Dictionaries funktioniert:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>]$ cat test_conditionals.yml\n---\n- name: Play around with conditionals\n  hosts: localhost\n  gather_facts: false\n  vars:\n    my_dict:\n      my_var: Hello world!\n\n  tasks:\n    - name: &gt;-\n        When all conditionals are met, print the variable value using\n        ansible.builtin.debug\n      when:\n        - my_dict.my_var is defined\n        - my_dict.my_var == \"Hello world!\"\n      ansible.builtin.debug:\n        var: my_dict.my_var\n\n]$ ansible-playbook -i hosts test_conditionals.yml\n\nPLAY &#91;Play around with conditionals] *******************************************\n\nTASK &#91;When all conditionals are met, print the variable value using ansible.builtin.debug] ***\nok: &#91;localhost] =&gt; {\n    \"my_dict.my_var\": \"Hello world!\"\n}\n\nPLAY RECAP *********************************************************************\nlocalhost                  : ok=1    changed=0    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0<\/code><\/pre>\n\n\n\n<p>In der Kategorie <a href=\"https:\/\/www.my-it-brain.de\/wordpress\/category\/ansible\/\">Ansible<\/a> findet ihr weitere Artikel rund um Ansible. Viel Spa\u00df beim St\u00f6bern.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>In diesem Beitrag gebe ich einige Beispiele mit Erkl\u00e4rungen zu Ansible Conditionals, welche mir in der Dokumentation fehlen. Dieser Artikel dient mir zur Erinnerung und mag Einsteigern helfen, ein besseres Verst\u00e4ndnis der Bedingung is defined zu gewinnen. Wird in einem Task eine Variable verwendet, welche nicht definiert ist, bricht Ansible die Verarbeitung eines Playbooks mit<span class=\"continue-reading\"> <a href=\"https:\/\/www.my-it-brain.de\/wordpress\/beispiele-fuer-ansibles-var-is-defined\/\">[Weiterlesen&#8230;]<\/a><\/span><\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_metis_text_type":"","_metis_text_length":0,"_post_count":0,"footnotes":""},"categories":[532],"tags":[487,839,838],"class_list":["post-3870","post","type-post","status-publish","format-standard","hentry","category-ansible","tag-conditionals","tag-is-defined","tag-variables"],"_links":{"self":[{"href":"https:\/\/www.my-it-brain.de\/wordpress\/wp-json\/wp\/v2\/posts\/3870","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.my-it-brain.de\/wordpress\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.my-it-brain.de\/wordpress\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.my-it-brain.de\/wordpress\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.my-it-brain.de\/wordpress\/wp-json\/wp\/v2\/comments?post=3870"}],"version-history":[{"count":4,"href":"https:\/\/www.my-it-brain.de\/wordpress\/wp-json\/wp\/v2\/posts\/3870\/revisions"}],"predecessor-version":[{"id":3880,"href":"https:\/\/www.my-it-brain.de\/wordpress\/wp-json\/wp\/v2\/posts\/3870\/revisions\/3880"}],"wp:attachment":[{"href":"https:\/\/www.my-it-brain.de\/wordpress\/wp-json\/wp\/v2\/media?parent=3870"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.my-it-brain.de\/wordpress\/wp-json\/wp\/v2\/categories?post=3870"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.my-it-brain.de\/wordpress\/wp-json\/wp\/v2\/tags?post=3870"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}