{"id":1984,"date":"2018-02-19T06:00:50","date_gmt":"2018-02-19T05:00:50","guid":{"rendered":"https:\/\/www.my-it-brain.de\/wordpress\/?p=1984"},"modified":"2020-09-27T11:47:21","modified_gmt":"2020-09-27T09:47:21","slug":"ansible-playbook-nur-auf-nodes-laufen-lassen-die-gewissen-kriterien-genuegen","status":"publish","type":"post","link":"https:\/\/www.my-it-brain.de\/wordpress\/ansible-playbook-nur-auf-nodes-laufen-lassen-die-gewissen-kriterien-genuegen\/","title":{"rendered":"Ansible: Playbook nur auf Nodes laufen lassen, die gewissen Kriterien gen\u00fcgen"},"content":{"rendered":"<p>Manchmal m\u00f6chte man ein Playbook bzw. Plays nur auf Hosts laufen lassen, welche gewissen Kriterien entsprechen. In diesem Beitrag m\u00f6chte ich zwei Beispiele geben, wie sich dies umsetzen l\u00e4sst.<\/p>\n<h2>Playbook nur auf Hosts mit Red Hat Betriebssystem ausf\u00fchren<\/h2>\n<p>Das Modul <code>group_by<\/code> <a href=\"https:\/\/www.my-it-brain.de\/wordpress\/ansible-playbook-nur-auf-nodes-laufen-lassen-die-gewissen-kriterien-genuegen#1\">[1]<\/a> wird genutzt, um w\u00e4hrend des Laufs eines Playbooks dynamisch Gruppen von Hosts zu erstellen, auf welche man sp\u00e4ter weitere Plays anwendet.<\/p>\n<pre>---\r\n- hosts: all\r\n\r\n  tasks:\r\n    - name: Group by OS\r\n\r\n      group_by: key=os_{{ ansible_distribution }}\r\n      changed_when: False\r\n\r\n- hosts: os_RedHat\r\n  roles:\r\n    - common\r\n<\/pre>\n<p>Zu Beginn eines Playbook-Laufs wird das Modul <code>setup<\/code> <a href=\"https:\/\/www.my-it-brain.de\/wordpress\/ansible-playbook-nur-auf-nodes-laufen-lassen-die-gewissen-kriterien-genuegen#2\">[2]<\/a> ausgef\u00fchrt, um Variablen mit n\u00fctzlichen Informationen \u00fcber die Nodes zu belegen. Die Variable <code>ansible_distribution<\/code> enth\u00e4lt dabei ein Schl\u00fcsselwort f\u00fcr eine bestimmte Distribution.<\/p>\n<p>In obigen Beispiel wird dabei die Gruppe <code>os_RedHat<\/code> erstellt. Im Folgenden werden dann alle Nodes dieser Gruppe der Rolle <code>common<\/code> zugeordnet.<\/p>\n<p>Dieses Verfahren l\u00e4sst sich nat\u00fcrlich auch f\u00fcr weitere Variablen anwenden. M\u00f6chte man sehen, welche Variablen belegt werden und genutzt werden k\u00f6nnen, kann sich die R\u00fcckgabe von <code>setup<\/code> in der Standardausgabe ansehen, wenn man das Modul manuell auf einigen Nodes ausf\u00fchrt.<\/p>\n<h2>Plays nur auf bestimmten Nodes ausf\u00fchren<\/h2>\n<p>Ein weiteres Beispiel habe ich auf <a href=\"https:\/\/itrig.de\">ITrig<\/a> <a href=\"https:\/\/www.my-it-brain.de\/wordpress\/ansible-playbook-nur-auf-nodes-laufen-lassen-die-gewissen-kriterien-genuegen#4\">[4]<\/a> gefunden:<\/p>\n<pre>---\r\n- name: install open-vm-tools\r\n  hosts: vmwareclients\r\n  gather_facts: True\r\n  become: true\r\n  become_user: root\r\n  tasks:\r\n- name: debian install open-vm-tools\r\n  apt: name=open-vm-tools state=present\r\n  when: ansible_os_family == \"Debian\" and ansible_virtualization_type == \"VMware\"\r\n\r\n- name: centos install open-vm-tools\r\n  yum: name=open-vm-tools state=present\r\n  when: ansible_os_family == \"RedHat\" or ansible_distribution == 'CentOS' and ansible_virtualization_type == \"VMware\"\r\n<\/pre>\n<p>Hier werden Ansible Conditionals <a href=\"https:\/\/www.my-it-brain.de\/wordpress\/ansible-playbook-nur-auf-nodes-laufen-lassen-die-gewissen-kriterien-genuegen#3\">[3]<\/a> verwendet, um zu bestimmen, auf welchen Nodes ein Play ausgef\u00fchrt wird. Auch hier werden wieder Variablen ausgewertet, welche durch das Modul <code>setup<\/code> <a href=\"https:\/\/www.my-it-brain.de\/wordpress\/ansible-playbook-nur-auf-nodes-laufen-lassen-die-gewissen-kriterien-genuegen#2\">[2]<\/a> belegt wurden.<\/p>\n<p>In obigen Beispiel wird dies genutzt, um die <code>open-vm-tools<\/code> mit einem Playbook sowohl auf Debian und RedHat\/CentOS Systemen zu installieren.<\/p>\n<h2>Quellen<\/h2>\n<ol>\n<li id=\"1\"><a href=\"https:\/\/docs.ansible.com\/ansible\/2.9\/modules\/group_by_module.html#group-by-module\" target=\"_blank\" rel=\"noopener noreferrer\">group_by &#8211; Create Ansible groups based on facts<\/a> {en}<\/li>\n<li id=\"2\"><a href=\"https:\/\/docs.ansible.com\/ansible\/2.9\/modules\/setup_module.html\" target=\"_blank\" rel=\"noopener noreferrer\">setup &#8211; Gathers facts about remote hosts<\/a> {en}<\/li>\n<li id=\"3\"><a href=\"http:\/\/docs.ansible.com\/ansible\/latest\/playbooks_conditionals.html\" target=\"_blank\" rel=\"noopener noreferrer\">Conditionals<\/a> {en}<\/li>\n<li id=\"4\"><a href=\"https:\/\/itrig.de\/index.php?\/archives\/2336-Ansible-Playbooks-auf-Servern-mit-SSH-Key-Authentifizierung-verwenden.html\">Ansible Playbooks auf Servern mit SSH Key Authentifizierung verwenden<\/a> {de}<\/li>\n<\/ol>\n","protected":false},"excerpt":{"rendered":"<p>Manchmal m\u00f6chte man ein Playbook bzw. Plays nur auf Hosts laufen lassen, welche gewissen Kriterien entsprechen. In diesem Beitrag m\u00f6chte ich zwei Beispiele geben, wie sich dies umsetzen l\u00e4sst. Playbook nur auf Hosts mit Red Hat Betriebssystem ausf\u00fchren Das Modul group_by [1] wird genutzt, um w\u00e4hrend des Laufs eines Playbooks dynamisch Gruppen von Hosts zu<span class=\"continue-reading\"> <a href=\"https:\/\/www.my-it-brain.de\/wordpress\/ansible-playbook-nur-auf-nodes-laufen-lassen-die-gewissen-kriterien-genuegen\/\">[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":[1,532],"tags":[410,487,484,430,305,485,486],"class_list":["post-1984","post","type-post","status-publish","format-standard","hentry","category-allgemein","category-ansible","tag-ansible","tag-conditionals","tag-group_by","tag-osbn","tag-planet","tag-setup","tag-when"],"_links":{"self":[{"href":"https:\/\/www.my-it-brain.de\/wordpress\/wp-json\/wp\/v2\/posts\/1984","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=1984"}],"version-history":[{"count":6,"href":"https:\/\/www.my-it-brain.de\/wordpress\/wp-json\/wp\/v2\/posts\/1984\/revisions"}],"predecessor-version":[{"id":2611,"href":"https:\/\/www.my-it-brain.de\/wordpress\/wp-json\/wp\/v2\/posts\/1984\/revisions\/2611"}],"wp:attachment":[{"href":"https:\/\/www.my-it-brain.de\/wordpress\/wp-json\/wp\/v2\/media?parent=1984"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.my-it-brain.de\/wordpress\/wp-json\/wp\/v2\/categories?post=1984"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.my-it-brain.de\/wordpress\/wp-json\/wp\/v2\/tags?post=1984"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}