{"id":1498,"date":"2016-08-01T08:30:45","date_gmt":"2016-08-01T06:30:45","guid":{"rendered":"https:\/\/www.my-it-brain.de\/wordpress\/?p=1498"},"modified":"2020-09-27T11:48:57","modified_gmt":"2020-09-27T09:48:57","slug":"ansible-die-module-copy-und-cron","status":"publish","type":"post","link":"https:\/\/www.my-it-brain.de\/wordpress\/ansible-die-module-copy-und-cron\/","title":{"rendered":"Ansible &#8211; Die Module copy und cron"},"content":{"rendered":"<p>In diesem Beitrag zu meiner kleinen Ansible-Reihe besch\u00e4ftige ich mich mit den Modulen <code>copy<\/code>[1. <a href=\"https:\/\/docs.ansible.com\/ansible\/2.9\/modules\/copy_module.html\" target=\"_blank\" rel=\"noopener noreferrer\">Ansible: copy &#8211; Copies files to remote locations<\/a>] und <code>cron<\/code>[2. <a href=\"https:\/\/docs.ansible.com\/ansible\/2.9\/modules\/cron_module.html\" target=\"_blank\" rel=\"noopener noreferrer\">Ansible: cron &#8211; Manage cron.d and crontab entries<\/a>].<\/p>\n<p><b>Hinweis:<\/b> Die folgende Konfiguration ist nicht zur Nachahmung empfohlen. Es handelt sich dabei um meine ersten Schritte mit Ansible. Es ist daher wahrscheinlich, dass die Konfiguration noch Fehler enth\u00e4lt, nicht optimiert ist und ein gro\u00dfes Verbesserungspotenzial besitzt. Die Nachahmung erfolgt ausdr\u00fccklich auf eigene Gefahr. \u00dcber Hinweise, wie man es besser machen kann, freue ich mich jederzeit.<\/p>\n<h2>Anforderungen<\/h2>\n<p>In diesem Szenario sollen Shell-Skripte auf das Zielsystem kopiert werden. Anschlie\u00dfend sind Eintr\u00e4ge in der <code>crontab<\/code> zu erstellen, um diese Shell-Skripte auszuf\u00fchren. Beim Zielsystem handelt es sich um die Gruppe <code>[i-stage]<\/code>, in der sich aktuell nur ein Host namens host-i1.example.com befindet.<\/p>\n<h2>Vorbereitungen<\/h2>\n<p>Die zu verteilenden Skripte werden auf der Ansible-Control-Machine im Verzeichnis <code>\/root\/src\/<\/code> gesammelt. Anschlie\u00dfend wurde eine Rolle f\u00fcr dieses Vorhaben erstellt. Die auf meiner Spielwiese verwendete Verzeichnisstruktur wurde bereits in den vergangenen Beitr\u00e4gen[3. <a href=\"https:\/\/www.my-it-brain.de\/wordpress\/linux-benutzerkonten-mit-ansible-verwalten\/\">Linux-Benutzerkonten mit Ansible verwalten<\/a>] zu dieser Reihe beschrieben.<\/p>\n<h2>Umsetzung<\/h2>\n<p>Zur Umsetzung der Anforderungen wird ein Playbook erstellt, welches die geforderten Tasks ausf\u00fchrt. Der folgende Code-Block listet die ben\u00f6tigten Dateien inkl. ihres kommentierten Inhalts auf:<\/p>\n<pre># Begin of file: local_scripts_i-stage.yml\r\n---\r\n- hosts: i-stage\r\n  roles:\r\n    - local_scripts\r\n# End of file ############################\r\n\r\n# Begin of file: roles\/local_scripts\/tasks\/main.yml\r\n---\r\n## Copy local script files to target hosts\r\n- copy: src=\/root\/src\/sript1.sh dest=\/root\/src\/sript1.sh owner=root group=root mode=755\r\n- copy: src=\/root\/src\/sript2.sh dest=\/root\/src\/sript2.sh owner=root group=root mode=755\r\n\r\n## Create cron jobs for local script files\r\n- cron: name=\"local script1\" minute=\"10\" hour=\"1\" job=\"\/root\/src\/sript1.sh\"\r\n- cron: name=\"local script2\" minute=\"12\" hour=\"1\" job=\"\/root\/src\/sript2.sh\"\r\n# End of file #############################\r\n<\/pre>\n<p>Nach der Ausf\u00fchrung des Playbooks liegen die Skripte auf dem oder den Zielsystemen im gew\u00fcnschten Verzeichnis <code>\/root\/bin\/<\/code>. L\u00e4sst man sich die Crontab des Benutzers root anzeigen, so erkennt man die von Ansible hinzugef\u00fcgten Eintr\u00e4ge:<\/p>\n<pre># crontab -l\r\n# DO NOT EDIT THIS FILE - edit the master and reinstall.\r\n# (\/tmp\/crontabaf5r8i installed on Mon Jul 18 11:52:09 2016)\r\n# (Cronie version 4.2)\r\n#Ansible: local script1\r\n10 1 * * * \/root\/bin\/script1.sh\r\n#Ansible: local script2\r\n12 1 * * * \/root\/bin\/script2.sh\r\n<\/pre>\n<h2>Fazit<\/h2>\n<p>Wieder konnte eine Anforderung schnell und einfach mit Ansible umgesetzt werden. Ob dies bereits der K\u00f6nigsweg ist bzw. ob dieser \u00fcberhaupt existiert, steht jedoch noch nicht fest. Anstatt die Dateien zuerst auf das Ziel zu kopieren und dort Cron-Eintr\u00e4ge f\u00fcr die Ausf\u00fchrung zu erstellen, k\u00f6nnte auch das Modul <code>script<\/code>[4. <a href=\"https:\/\/docs.ansible.com\/ansible\/2.9\/modules\/script_module.html\" target=\"_blank\" rel=\"noopener noreferrer\">Ansible: script &#8211; Runs a local script on a remote node after transferring it<\/a>] genutzt werden. Dieses Modul transferiert ein lokales Skript zum Zielsystem und f\u00fchrt es dort aus.<\/p>\n<p>Bisher habe ich mich gegen den Einsatz des <code>script<\/code>-Moduls entschieden, da mir noch nicht klar ist, ob das Skript auf dem Zielsystem verbleibt oder bei jeder Ausf\u00fchrung erneut \u00fcbertragen wird. Letzteres w\u00e4re bei einer gro\u00dfen Anzahl Zielsysteme nicht unbedingt w\u00fcnschenswert.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>In diesem Beitrag zu meiner kleinen Ansible-Reihe besch\u00e4ftige ich mich mit den Modulen copy[1. Ansible: copy &#8211; Copies files to remote locations] und cron[2. Ansible: cron &#8211; Manage cron.d and crontab entries]. Hinweis: Die folgende Konfiguration ist nicht zur Nachahmung empfohlen. Es handelt sich dabei um meine ersten Schritte mit Ansible. Es ist daher wahrscheinlich,<span class=\"continue-reading\"> <a href=\"https:\/\/www.my-it-brain.de\/wordpress\/ansible-die-module-copy-und-cron\/\">[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,51],"tags":[410,414,413,305],"class_list":["post-1498","post","type-post","status-publish","format-standard","hentry","category-ansible","category-linux","tag-ansible","tag-copy","tag-cron","tag-planet"],"_links":{"self":[{"href":"https:\/\/www.my-it-brain.de\/wordpress\/wp-json\/wp\/v2\/posts\/1498","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=1498"}],"version-history":[{"count":7,"href":"https:\/\/www.my-it-brain.de\/wordpress\/wp-json\/wp\/v2\/posts\/1498\/revisions"}],"predecessor-version":[{"id":2614,"href":"https:\/\/www.my-it-brain.de\/wordpress\/wp-json\/wp\/v2\/posts\/1498\/revisions\/2614"}],"wp:attachment":[{"href":"https:\/\/www.my-it-brain.de\/wordpress\/wp-json\/wp\/v2\/media?parent=1498"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.my-it-brain.de\/wordpress\/wp-json\/wp\/v2\/categories?post=1498"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.my-it-brain.de\/wordpress\/wp-json\/wp\/v2\/tags?post=1498"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}