https://wiki.kif.rocks/w/api.php?action=feedcontributions&user=2003%3AC8%3A6F12%3A4200%3A31A4%3AEB2F%3A8FC8%3A321C&feedformat=atom KIF - Benutzerbeiträge [de] 2024-03-28T13:47:43Z Benutzerbeiträge MediaWiki 1.40.1 https://wiki.kif.rocks/w/index.php?title=KIF485:Resolutionen/Datenschutzrechtliche_Zul%C3%A4ssigkeit_von_Zoom&diff=45381 KIF485:Resolutionen/Datenschutzrechtliche Zulässigkeit von Zoom 2021-05-20T12:11:56Z <p>2003:C8:6F12:4200:31A4:EB2F:8FC8:321C: /* Begründung */ kritischer Rechtschreibfehler: Leere statt Lehre</p> <hr /> <div>= Resolution =<br /> <br /> Die {{KIF|48,5}} fordert die Datenschutzbeauftragten des Bundes und der Länder auf, die datenschutzrechtliche Zulässigkeit der Nutzung der Videokonferenzsoftware Zoom zu prüfen und öffentlich dazu Stellung zu beziehen.<br /> Sollten die Datenschutzbeauftragten die Unzulässigkeit feststellen, fordern wir sie zudem auf, gegen die Nutzung, insbesondere im Lehrbetrieb an Bildungseinrichtungen, konsequent vorzugehen.<br /> <br /> == Begründung ==<br /> <br /> Die Videokonferenzsoftware Zoom wird in der aktuellen Pandemiesituation von sehr vielen Hochschulen, insbesondere zum Zweck der digitalen Lehre, eingesetzt. Bereits seit Beginn der aktuellen Pandemie sind Probleme mit der Software Zoom bekannt; diese wurden, insbesondere in Hinblick auf den zeitkritischen Handlungsdruck, von diversen Stellen geduldet. Die {{KIF|48,0}} hat bereits Anforderungen an Software für digitale Lehre gestellt.<br /> <br /> In einer Kurzanalyse hat die Landesbeauftragte für Datenschutz und Informationsfreiheit (LfDI) Berlin bereits gravierende Mängel in dem Auftragsdatenverarbeitungsvertrag (ADV) von Zoom aufgezeigt und Zweifel an der Vertrauenswürdigkeit geäußert.<br /> Diese Kurzanalyse wurde von der LfDI dann in einer Analyse der ADVen weiterer Anbieter von Videokonferenzsoftware nochmals bestätigt&lt;ref&gt;https://www.datenschutz-berlin.de/fileadmin/user_upload/pdf/orientierungshilfen/2020-BlnBDI-Hinweise_Berliner_Verantwortliche_zu_Anbietern_Videokonferenz-Dienste.pdf&lt;/ref&gt;.<br /> Durch die aktuelle Entscheidung des EuGH&lt;ref&gt;https://curia.europa.eu/jcms/upload/docs/application/pdf/2020-07/cp200091de.pdf&lt;/ref&gt; zum Privacy Shield hat sich hier die datenschutzrechtliche Situation noch einmal verschärft.<br /> Nach Anfrage von Privatpersonen, hat Zoom Video Communications, Inc. hierzu Stellung bezogen und fällt laut eigener Aussage unter FISA, welches der DSGVO widerspricht.<br /> Die Einschätzung der LfDI Berlin sowie die Änderung der rechtlichen Situation hat allerdings keine sichtbare Reaktion der Datenschutzbehörden in Bezug auf die Nutzung von Zoom für digitale Lehre ausgelöst.<br /> <br /> Die Hochschulen setzen weiterhin auf Zoom, auch unter Missachtung von Datenschutzbedenken und -beschwerden, die von verschiedenen Seiten, meist von Studierenden, an sie herangetragen wurden.<br /> Dabei ist Zoom keinesfalls die einzige Lösung und die anhaltende Situation hat den Hochschulen hier ausreichend Zeit geboten, datenschutzfreundliche Alternativen zu erproben und für den Produktivbetrieb vorzubereiten.<br /> <br /> '''Im Konsens angenommen'''</div> 2003:C8:6F12:4200:31A4:EB2F:8FC8:321C https://wiki.kif.rocks/w/index.php?title=Liste_unserer_Fachschaften&diff=45351 Liste unserer Fachschaften 2021-05-18T10:52:02Z <p>2003:C8:6F12:4200:31A4:EB2F:8FC8:321C: properly sort görlitz in list, correct faculty</p> <hr /> <div>Eine Übersicht über alle Informatik-Fachschaften war im &lt;!--[http://sfinf.fsinf.de/suche.php?enTyp=fs Studienführer Informatik]--&gt; Studienführer Informatik zu finden, dieser wurde jedoch inzwischen deaktiviert, da er nicht mehr aktualisiert wurde.<br /> <br /> Diese Liste wird sporadisch gepflegt und beinhaltet Fachschaften, die bereits an der KIF teilgenommen haben oder an dieser teilnehmen sollten. Aus dieser Liste werden auch die Einladungen zur nächsten KIF verschickt, bitte das Format beibehalten.<br /> <br /> Für die teilnehmenden Fachschaften der aktuellen KIF schaue bitte auf die Anmeldeseite der jeweiligen KIF.<br /> <br /> {| class=&quot;prettytable sortable&quot;<br /> <br /> !Stadt<br /> !Uni<br /> !Anschrift (Post)<br /> !Besucheradresse<br /> !Kontakt<br /> &lt;!--<br /> <br /> Bitte das Template wie hier nutzen, da daraus Adressen und E-Mails für die KIF-Einladungen extrahiert werden. Leere Einträge können auch weggelassen werden. email_domains beinhaltet alle Domains von der und dessen Subdomains E-Mails von euren Studierenden kommen könnten.<br /> <br /> {{FSListe Zeile<br /> | stadt=Musterstadt<br /> | hochschule=[[Uni Musterstadt]]<br /> | anschrift=<br /> Fachschaft Informatik&lt;br/&gt;<br /> Musterstr. 123&lt;br/&gt;<br /> 56789 Musterstadt<br /> | besucheradresse=<br /> Musterstr. 123&lt;br/&gt;<br /> 56789 Musterstadt&lt;br/&gt;<br /> Raum 1023<br /> | fon=+49-000-000-0000<br /> | fax=+49-000-000-0000<br /> | email=fsinfo@informatik.uni-musterstadt.de<br /> | link1=https://fsinfo.informatik.uni-musterstadt.de<br /> | email_domains=uni-musterstadt.de,uni-musterstadt.edu<br /> }}<br /> <br /> --&gt;<br /> <br /> {{FSListe Zeile<br /> | stadt=Aachen<br /> | hochschule=[[RWTH Aachen]]<br /> | anschrift=<br /> Fachschaft I/1 Mathematik/Physik/Informatik an der RWTH Aachen&lt;br&gt;<br /> Templergraben 55&lt;br&gt;<br /> 52056 Aachen<br /> | besucheradresse=<br /> Campus Mitte:&lt;br&gt;<br /> Augustinerbach 2a&lt;br&gt;<br /> 52062 Aachen<br /> <br /> Informatikzentrum:&lt;br&gt;<br /> Ahornstraße 55&lt;br&gt;<br /> Raum 2014/2015&lt;br&gt;<br /> 52074 Aachen<br /> | fon=+49-241-80-94506 Campus Mitte<br /> | fon1=+49-241-80-26741 Informatikzentrum<br /> | email=fs (ät) fsmpi.rwth-aachen.de<br /> | link1=[https://www.fsmpi.rwth-aachen.de Homepage FSMPI]<br /> | email_domains=rwth-aachen.de,fsmpi.eu<br /> }}<br /> <br /> {{FSListe Zeile<br /> | stadt=Aachen<br /> | hochschule=[[FH Aachen]]<br /> | anschrift=Fachschaft Elektro- und Informationstechnik&lt;br&gt;<br /> FH Aachen&lt;br&gt;<br /> Eupenerstrasse 70&lt;br&gt;<br /> 52066 Aachen<br /> | fon=+49-241-6009-52180<br /> | email=fsr-fb5 (ät) fh-aachen.de<br /> }}<br /> <br /> {{FSListe Zeile<br /> | stadt=Aachen<br /> | hochschule=[[FH Aachen]]<br /> | anschrift=Fachschaft Medizintechnik und Techno­mathematik&lt;br&gt;<br /> FH Aachen&lt;br&gt;<br /> Heinrich-Mußmann-Str 1&lt;br&gt;<br /> 52428 Jülich<br /> | fon=+49-241-6009-53786<br /> | email=fsr-9 (ät) fh-aachen.de<br /> }}<br /> <br /> <br /> {{FSListe Zeile<br /> | stadt=Amberg<br /> | hochschule=[[OTH Amberg-Weiden]]<br /> | anschrift=<br /> | besucheradresse=<br /> | email=Kontaktformular auf HP<br /> | link1=[https://www.oth-aw.de//informieren-und-entdecken/hochschule/studierendenvertretung/gremien/#fachschaft Homepage]<br /> }}<br /> <br /> {{FSListe Zeile<br /> | stadt=Augsburg<br /> | hochschule=[[Uni Augsburg]]<br /> | anschrift=<br /> Universität Augsburg&lt;br&gt;<br /> Studierendenvereinigung Informatik&lt;br&gt;<br /> 86135 Augsburg<br /> | besucheradresse=<br /> Gebäude N - Raum 1007&lt;br&gt;<br /> Universitätsstr. 6a&lt;br&gt;<br /> 86159 Augsburg&lt;br&gt;<br /> | fon=+49-821-598-2255<br /> | email=hallo (ät) fachschaft-info.de<br /> }}<br /> <br /> {{FSListe Zeile<br /> | stadt=Augsburg<br /> | hochschule=[[HAW Augsburg]]<br /> | anschrift=<br /> <br /> | besucheradresse=<br /> <br /> <br /> | email=svi (ät) hs-augsburg.de<br /> | link1=[https://www.hs-augsburg.de/Studentische-Vertretung/Fakultaetsraete.html Homepage FSRI]<br /> }}<br /> <br /> {{FSListe Zeile<br /> | stadt=Bamberg<br /> | hochschule=[[Otto-Friedrich-Universität Bamberg]]<br /> | anschrift=<br /> Fachschaft WIAI&lt;br&gt;<br /> An der Weberei 5&lt;br&gt;<br /> 96047 Bamberg<br /> | besucheradresse=<br /> Raum WE5/02.104&lt;br&gt;<br /> An der Weberei 5&lt;br&gt;<br /> 96047 Bamberg<br /> | fon=+49-951-863-1219<br /> | email=fachschaft-wiai.stuve (ät) uni-bamberg.de<br /> | link1=[https://wiai.de Homepage WIAI]<br /> | link2=[https://www.facebook.com/wiai.de/ Facebook]<br /> | link3=[https://twitter.com/fachschaftwiai Twitter]<br /> | email_domains=uni-bamberg.de<br /> }}<br /> <br /> {{FSListe Zeile<br /> | stadt=Bayeruth<br /> | hochschule=[[Uni Bayeruth]]<br /> | anschrift=<br /> Fachschaft MPI&lt;br&gt;<br /> Universität Bayreuth&lt;br&gt;<br /> NW II&lt;br&gt;<br /> Universitätsstraße 30&lt;br&gt;<br /> 95447 Bayreuth<br /> | besucheradresse=<br /> | fon=+49-0921-55-3101<br /> | email=fsmpi (ät) uni-bayreuth.de<br /> | link1=[https://fsmpi.uni-bayreuth.de/ Homepage FSMPI]<br /> | link2=[https://www.facebook.com/fsmpi/ Facebook]<br /> | link3=[https://www.instagram.com/fachschaft_mpi/ Instagram]<br /> | email_domains=uni-bayeruth.de<br /> }}<br /> <br /> <br /> {{FSListe Zeile<br /> | stadt=Berlin<br /> | hochschule=[[FU Berlin]]<br /> | anschrift=<br /> Raum K08, FSI Informatik&lt;br&gt;<br /> Institut für Informatik&lt;br&gt;<br /> Takustraße 9&lt;br&gt;<br /> 14195 Berlin<br /> | besucheradresse=<br /> | fon=+49-30-8387-5076<br /> | email=fsi (ät) lists.spline.de<br /> | link1=[http://fsi.spline.de/ Homepage FSI]<br /> | email_domains=fu-berlin.de,spline.de<br /> }}<br /> <br /> {{FSListe Zeile<br /> | stadt=Berlin<br /> | hochschule=[[HU Berlin]]<br /> | anschrift=<br /> Fachschaft Informatik&lt;br&gt;<br /> Humboldt-Universität zu Berlin&lt;br&gt;<br /> Unter den Linden 6&lt;br&gt;<br /> 10099 Berlin<br /> | besucheradresse=<br /> Raum 3.104&lt;br&gt;<br /> Johann-von-Neumann-Haus&lt;br&gt;<br /> Rudower Chaussee 25&lt;br&gt;<br /> 12489 Berlin‎<br /> | fon=+49-30-2093-3161<br /> | email=fsini (ät) informatik.hu-berlin.de<br /> | email_domains=hu-berlin.de<br /> }}<br /> <br /> {{FSListe Zeile<br /> | stadt=Berlin<br /> | hochschule=[[Beuth-Hochschule für Technik Berlin]]<br /> | anschrift=<br /> Beuth-Hochschule für Technik Berlin&lt;br&gt; <br /> Fachschaftsrat VI Informatik &amp; Medien&lt;br&gt; <br /> Luxemburger Straße 10&lt;br&gt; <br /> 13353 Berlin&lt;br&gt; <br /> | besucheradresse=<br /> | fon=+49-30-4504-2318<br /> | email=fsrvi (ät) beuth-hochschule.de<br /> | link1=[http://www.fsrvi.de/ Homepage FSR VI]<br /> | link2=[http://www.facebook.com/fsrvi/ Facebook]<br /> | link3=[http://twitter.com/fsr6bht Twitter]<br /> | email_domains=beuth-hochschule.de<br /> }}<br /> <br /> {{FSListe Zeile<br /> | stadt=Berlin<br /> | hochschule=[[TU Berlin]]<br /> | anschrift=<br /> Studierendeninitiative Freitagsrunde&lt;br&gt;<br /> Technische Universität Berlin&lt;br&gt;<br /> Fakultät IV - Elektrotechnik und Informatik&lt;br&gt;<br /> Sekretariat MAR 6-1&lt;br&gt;<br /> Marchstraße 23&lt;br&gt;<br /> 10587 Berlin<br /> | email=info@freitagsrunde.org<br /> | link1=[https://wiki.freitagsrunde.org/Hauptseite Homepage Freitagsrunde]<br /> | link2=[http://wiki.freitagsrunde.org/Kontakt Kontakt Freitagsrunde]<br /> | email_domains=tu-berlin.de,tu.berlin<br /> }}<br /> <br /> {{FSListe Zeile<br /> | stadt=Berlin<br /> | hochschule=[[HTW Berlin]]<br /> | anschrift=<br /> Fachschaftsrat 4 der HTW Berlin&lt;br/&gt;<br /> Wilhelminenhofstr. 75 A&lt;br/&gt;<br /> 12459 Berlin<br /> | besucheradresse=<br /> | fon=+49-030-50193365<br /> | email=fsr-4@lists.htw-berlin.de<br /> | link1=https://www.facebook.com/fsr4.htw/<br /> | link2=https://www.instagram.com/fsr4.htwberlin/<br /> | email_domains=students-htw.de,htw-berlin.de<br /> }}<br /> <br /> <br /> {{FSListe Zeile<br /> | stadt=Bielefeld<br /> | hochschule=[[FH Bielefeld Campus Minden]]<br /> | anschrift=<br /> Fachschaftrat Campus Minden&lt;br&gt;<br /> Fachhochschule Bielefeld&lt;br&gt;<br /> Artilleriestraße 9&lt;br&gt;<br /> Gebäude H, Raum H12-15&lt;br&gt;<br /> 32427 Minden<br /> | fon=+49-571-8385-273<br /> | email=fsr-minden (ät) fh-asta.de<br /> | link1=[https://www.fh-bielefeld.de/minden/ueber-uns/gremien-und-beauftragte/fsr Homepage]<br /> }}<br /> <br /> {{FSListe Zeile<br /> | stadt=Bielefeld<br /> | hochschule=[[Uni Bielefeld]]<br /> | anschrift=<br /> Universität Bielefeld&lt;br&gt;<br /> Universitätsstraße 25&lt;br&gt;<br /> Postfach 100131&lt;br&gt;<br /> D-33615 Bielefeld&lt;br&gt;<br /> | fon=+49-521-106-3468<br /> | email=info (at) fachschaft.techfak.de<br /> | email_domains=uni-bielefeld.de,techfak.de<br /> | link1=[https://Fachschaft.techfak.de Homepage]<br /> }}<br /> <br /> {{FSListe Zeile<br /> | stadt=Bochum<br /> | hochschule=[[Ruhr-Universität Bochum]]<br /> | anschrift=<br /> Fachschaft Angewandte Informatik &lt;/br&gt;<br /> Postfach 6 Raum 05/162 &lt;/br&gt;<br /> Gebäude ID &lt;/br&gt;<br /> Universitätsstr. 150 &lt;/br&gt;<br /> 44801 Bochum<br /> | fon= 0234-3223444<br /> | email=fsrai@rub.de<br /> | email_domains=rub.de,ruhr-uni-bochum.de<br /> | link1=[https://blog.ai-rub.de/ Homepage]<br /> }}<br /> <br /> {{FSListe Zeile<br /> | stadt=Bochum<br /> | hochschule=[[Ruhr-Universität Bochum]]<br /> | anschrift=<br /> Fachschaftsrat Mathematik &lt;/br&gt;<br /> Raum IB 01/105, Postfach 88 &lt;/br&gt;<br /> Universitätsstr. 150 &lt;/br&gt;<br /> 44801 Bochum<br /> | fon= 0234-3223465<br /> | email=matheberatung-fachschaft@lists.rub.de<br /> | email_domains=rub.de,ruhr-uni-bochum.de<br /> | link1=[https://www.ruhr-uni-bochum.de/fsr-mathe/ Homepage]<br /> }}<br /> <br /> {{FSListe Zeile<br /> | stadt=Bochum<br /> | hochschule=[[HS Bochum - Fachbereich Elektrotechnik und Informatik]]<br /> | anschrift=<br /> | fon=+49-234-32-10529<br /> | email=fachschaft.geodaesie (ät) hs-bochum.de<br /> | link1=[http://fsg-bochum.de/ Homepage]<br /> | link2=[https://www.facebook.com/FSG.BO/ Facebook]<br /> }}<br /> <br /> <br /> {{FSListe Zeile<br /> | stadt=Bochum<br /> | hochschule=[[HS Bochum - Fachbereich Elektrotechnik und Informatik]]<br /> | anschrift=<br /> Hochschule Bochum&lt;br&gt;<br /> Bauteil C, Ebene 5,&lt;br&gt;<br /> Raum 26 (C5-26)&lt;br&gt;<br /> Lennershofstr. 140&lt;br&gt;<br /> 44801 Bochum<br /> | fon=+49-234-32-10353<br /> | email=fachschaft.eundi (ät) hs-bochum.de<br /> | link1=[https://www.hochschule-bochum.de/fbe/gremien/fachschaftsrat-elektrotechnik-informatik-nachhaltigkeit/ Homepage FSR EundI]<br /> | link2=[https://www.facebook.com/fachschafteinehsbochum/ Facebook]<br /> <br /> }}<br /> <br /> {{FSListe Zeile<br /> | stadt=Bochum<br /> | hochschule=[[HS Bochum - Campus Velbert/Heiligenhaus]]<br /> | anschrift=<br /> | email=fachschaft.cvh (ät) hs-bochum.de<br /> | link1=[https://www.hochschule-bochum.de/die-bo/hochschule/campus-velbert-heiligenhaus/service/fachschaft-cvh/ Homepage FS CVH]<br /> <br /> }}<br /> <br /> <br /> {{FSListe Zeile<br /> | stadt=Boon<br /> | hochschule=[[Rheinische Friedrich-Wilhelms-Universität Boon]]<br /> | anschrift=<br /> Fachschaft Informatik&lt;br&gt;<br /> Endenicher Allee 19a&lt;br&gt;<br /> 53115 Bonn<br /> | fon=+49-228-73-4317<br /> | fax=+49-228-73-60267<br /> | email=fs (ät) fachschaft.info<br /> | email_domains=uni-bonn.de,fachschaft.info<br /> }}<br /> <br /> {{FSListe Zeile<br /> | stadt=Branderburg<br /> | hochschule=[[TH Branderburg]]<br /> | anschrift=<br /> | fon= +49-3381-355-209<br /> | email=astachef(ät)th-brandenburg.de<br /> | link1=[https://stuve.th-brandenburg.de/wir/fachschaftsraete/ Homepage FSR]<br /> }}<br /> <br /> {{FSListe Zeile<br /> | stadt=Braunschweig<br /> | hochschule=[[Technische Universität Braunschweig]]<br /> | anschrift=<br /> Fachgruppenrat Informatik&lt;br&gt;<br /> c/o AStA der TU Braunschweig&lt;br&gt;<br /> Katharinenstr. 1&lt;br&gt;<br /> 38106 Braunschweig<br /> | besucheradresse=<br /> Fachgruppenrat Informatik (Schild: Fachschaft)&lt;br&gt;<br /> TU Braunschweig / Informatikzentrum&lt;br&gt;<br /> Mülenfortstr. 23&lt;br&gt;<br /> 38106 Braunschweig<br /> | fon=+49-531-391-4569<br /> | email=fginfo (at) tu-bs.de<br /> | link1=[http://fginfo.cs.tu-bs.de Homepage fginfo]<br /> | email_domains=tu-bs.de,tu-braunschweig.de<br /> }}<br /> <br /> {{FSListe Zeile<br /> | stadt=Bremen<br /> | hochschule=[[Uni Bremen]]<br /> | anschrift=<br /> Studiengangsausschuss Informatik&lt;br&gt;<br /> Bibliothekstr. 1 / MZH&lt;br&gt;<br /> Postfach 114&lt;br&gt;<br /> 28359 Bremen<br /> | besucheradresse=<br /> Studiengangsausschuss Informatik&lt;br&gt;<br /> Bibliothekstr. 5&lt;br&gt;<br /> MZH, Raum 1196&lt;br&gt;<br /> 28359 Bremen<br /> | fon=+49-421-218-63535<br /> | email=inf (ät) stugen.de<br /> | link1=[https://inf.stugen.de Homepage StugA Informatik]<br /> | email_domains=uni-bremen.de,tzi.de,tzi.org,stugen.de,fbmi.de<br /> }}<br /> <br /> {{FSListe Zeile<br /> | stadt=Bremen<br /> | hochschule=[[HS Bremen]]<br /> | anschrift=<br /> Hochschule Bremen&lt;br&gt;<br /> Neustadtswall 30&lt;br&gt;<br /> Raum E302a&lt;br&gt;<br /> 28199 Bremen <br /> | email=fachschaft4 (ät) hs-bremen.de<br /> | link1=[http://fachschaften-hsb.de/fachschaft4/ Homepage FS4]<br /> }}<br /> <br /> {{FSListe Zeile<br /> | stadt=Bremerhaven<br /> | hochschule=[[HS Bremerhaven]]<br /> | anschrift=<br /> AStA der Hochschule Bremerhaven&lt;br&gt;<br /> Haus K Raum 1.01&lt;br&gt;<br /> An der Karlstadt 8&lt;br&gt;<br /> 27568 Bremerhaven<br /> | fon=+49-471-4823-266<br /> | email=asta (ät) hs-bremerhaven.de<br /> | link1=[https://www.astaonline.de/ Homepage AStA Bremerhaven]<br /> | link2=[https://www.facebook.com/astabhv Facebook]<br /> | link3=[https://www.instagram.com/astabhv/ Instagram]<br /> }}<br /> <br /> {{FSListe Zeile<br /> | stadt=Chemnitz<br /> | hochschule=[[TU Chemnitz]]<br /> | anschrift=<br /> Technische Universität Chemnitz&lt;br&gt;<br /> Fachschaftsrat Informatik&lt;br&gt;<br /> Straße der Nationen 62&lt;br&gt;<br /> 09111 Chemnitz<br /> | besucheradresse=<br /> Raum 1/344&lt;br&gt;<br /> Straße der Nationen 62 (Mittelbau)&lt;br&gt;<br /> 09111 Chemnitz<br /> | fon=+49-371-531-16500<br /> | fax=+49-371-531-16509<br /> | email=fsrif (ät) tu-chemnitz.de<br /> | link1=[http://www.tu-chemnitz.de/fsrif Homepage FSR:IF]<br /> | email_domains=tu-chemnitz.de<br /> }}<br /> <br /> {{FSListe Zeile<br /> | stadt=Clausthal-Zellerfled<br /> | hochschule=[[TU Clausthal]]<br /> | anschrift=<br /> Fachschaftsrat Mathematik und Informatik der TU Clausthal&lt;br&gt;<br /> Silberstraße 1&lt;br&gt;<br /> 38678 Clausthal-Zellerfeld&lt;br&gt;<br /> | besucheradresse=<br /> | fax=+49-5323-72-3809 (vom AStA)<br /> | email=fs-mi (ät) tu-clausthal.de<br /> | link1=[https://www.fs-mi.tu-clausthal.de/ Homepage FS MI]<br /> | link2=[https://www.facebook.com/groups/237589836383559/ Facebook]<br /> | email_domains=u-clausthal.de<br /> }}<br /> <br /> {{FSListe Zeile<br /> | stadt=Coburg<br /> | hochschule=[[HS Coburg]]<br /> | anschrift=<br /> | email=feif-fachschaft(ät)hs-coburg.de<br /> | link1=[https://www.facebook.com/feif.hscoburg/ Facebook]<br /> }}<br /> <br /> {{FSListe Zeile<br /> | stadt=Cottbus und Senftenberg<br /> | hochschule=[[BTU Cottbus]]<br /> | anschrift=<br /> Brandenburgische Technische Universität Cottbus-Senftenberg (Standort Cottbus)&lt;br&gt;<br /> Postfach 101344&lt;br&gt;<br /> 03013 Cottbus<br /> | besucheradresse=<br /> Brandenburgische Technische Universität Cottbus-Senftenberg (Standort Cottbus)&lt;br&gt;<br /> Platz der Deutschen Einheit 1&lt;br&gt;<br /> 03046 Cottbus<br /> | email=fsr-informatik@b-tu.de<br /> | link1=[https://www.b-tu.de/fsr-informatik/ Homepage]<br /> }}<br /> <br /> {{FSListe Zeile<br /> | stadt=Darmstadt<br /> | hochschule=[[TU Darmstadt]]<br /> | anschrift=<br /> Fachschaft Informatik&lt;br&gt;<br /> TU Darmstadt&lt;br&gt;<br /> Hochschulstr. 10&lt;br&gt;<br /> 64289 Darmstadt<br /> | besucheradresse=<br /> <br /> | fon=+49-6151-16-25522<br /> | email=wir (ät) D120.de<br /> | link1=[https://d120.de/de/ Homepage D120]<br /> | email_domains=d120.de,tu-darmstadt.de<br /> }}<br /> <br /> {{FSListe Zeile<br /> | stadt=Darmstadt<br /> | hochschule=[[Hochschule Darmstadt]]<br /> | anschrift=<br /> Fachschaft Informatik&lt;br&gt;<br /> Hochschule Darmstadt&lt;br&gt;<br /> Schöfferstraße 8b&lt;br&gt;<br /> 64295 Darmstadt<br /> | besucheradresse=<br /> <br /> | fon=<br /> | fax=<br /> | email=fachschaft (ät) fbihome.de<br /> | link1=[http://fbihome.de fbihome.de]<br /> }}<br /> <br /> {{FSListe Zeile<br /> | stadt=Dortmund<br /> | hochschule=[[TU Dortmund]]<br /> | anschrift=<br /> Fachschaft Informatik&lt;br/&gt;<br /> Universität Dortmund&lt;br/&gt;<br /> Otto-Hahn-Str. 14&lt;br/&gt;<br /> 44221 Dortmund<br /> | fon=+49-231-755-2048<br /> | fax=<br /> | email=fs-informatik@tu-dortmund.de<br /> | link1=[https://fsinfo.cs.tu-dortmund.de Homepage FSInfo TU Dortmund]<br /> | email_domains=tu-dortmund.de,uni-dortmund.de,udo.edu,oh14.de,fachschaften.org<br /> }}<br /> <br /> {{FSListe Zeile<br /> | stadt=Dortmund<br /> | hochschule=[[FH Dortmund]]<br /> | anschrift=<br /> Fachhochschule Dortmund&lt;br/&gt;<br /> Fachschaftsrat Informatik&lt;br/&gt;<br /> Emil-Figge-Straße 42&lt;br/&gt;<br /> 44227 Dortmund<br /> | email=info@fsrfb4.de<br /> | link1=[https://www.fsrfb4.de Homepage]<br /> | email_domains=fh-dortmund.de<br /> }}<br /> <br /> {{FSListe Zeile<br /> | stadt=Dresden<br /> | hochschule=[[HTW Dresden]]<br /> | anschrift=<br /> : StuRa&amp;nbsp;HTW&amp;nbsp;Dresden&lt;!--<br /> :: FAK&amp;nbsp;I/M--&gt;<br /> : Friedrich-List-Platz&amp;nbsp;1<br /> : 01069&amp;nbsp;Dresden<br /> | besucheradresse=<br /> : StuRa&amp;nbsp;HTW&amp;nbsp;Dresden&lt;!--<br /> :: Fakultätsarbeitskreis Informatik/Mathematik--&gt;<br /> : Andreas-Schubert-Straße 23<br /> : A101-A109 (A001-A004)<br /> : 01069&amp;nbsp;Dresden<br /> | fon=+49-351-462-3249<br /> | fax=+49-351-462-3240<br /> | email=im@stura.htw-dresden.de<br /> | link1=[http://www.stura.htw-dresden.de/stura/fak/im/ Seite ''FAK I/M (StuRa HTW Dresden)'']<br /> | email_domains=htw-dresden.de<br /> }}<br /> <br /> {{FSListe Zeile<br /> | stadt=Dresden<br /> | hochschule=[[TU Dresden]]<br /> | anschrift=<br /> Technische Universität Dresden&lt;br&gt;<br /> Fakultät Informatik&lt;br&gt;<br /> Fachschaftsrat&lt;br&gt;<br /> 01062 Dresden<br /> | besucheradresse=<br /> Fakultät Informatik&lt;br&gt;<br /> Nöthnitzer Str. 46&lt;br&gt;<br /> Raum E017&lt;br&gt;<br /> 01187 Dresden<br /> | fon=+49-351-463-38-226<br /> | fax=<br /> | email=fsr(ät)ifsr.de<br /> | link1=[http://www.ifsr.de/ Homepage]<br /> | link2=[http://twitter.com/ifsr Twitter]<br /> | link3=[http://www.facebook.com/iFSR.de Facebook]<br /> | email_domains=ifsr.de,tu-dresden.de<br /> }}<br /> <br /> {{FSListe Zeile<br /> | stadt=Duisburg-Essen<br /> | hochschule=[[Uni Duisburg-Essen]]<br /> | anschrift=<br /> Fachschaftsrat Informatik (Duisburg)&lt;br&gt;<br /> Lotharstr 65&lt;br&gt;<br /> 47057 Duisburg<br /> | fon=+49-203-379-1257<br /> | fax=<br /> | email=kontakt(at)fsri.uni-due.de<br /> | email_domains=uni-due.de<br /> | link1=[http://fsri.uni-due.de Homepage]<br /> | link2=[https://twitter.com/FSRi_mumble Twitter]<br /> }}<br /> <br /> {{FSListe Zeile<br /> | stadt=Düsseldorf<br /> | hochschule=[[Heinrich-Heine-Universität Düsseldorf]]<br /> | anschrift=<br /> Fachschaft Informatik&lt;br&gt;<br /> Institut für Informatik&lt;br&gt;<br /> Raumnummer: 25.12.01.18&lt;br&gt;<br /> Universitätsstraße 1&lt;br&gt;<br /> 40225 Düsseldorf<br /> | fon=+49-211-81-14846<br /> | fax=<br /> | email=fscs(at)uni-duesseldorf.de<br /> | email_domains=uni-duesseldorf.de,hhu.de<br /> | link1=[https://fscs.hhu.de Homepage]<br /> }}<br /> <br /> {{FSListe Zeile<br /> | stadt=Düsseldorf<br /> | hochschule=[[HS Düsseldorf]]<br /> | anschrift=<br /> Fachhochschule Düsseldorf&lt;br&gt;<br /> Fachschaft Elektro- und Informationstechnik&lt;br&gt;<br /> Münsterstraße 156&lt;br&gt;<br /> 40476 Düsseldorf&lt;br&gt;<br /> Raum: 05.2.00​9 / 05.2.010&lt;br&gt;<br /> | email=fsr.ei​​ (ät) hs-duesseldorf.de​​<br /> | link1=[https://ei.hs-duesseldorf.de/gremien/fachschaftsrat Homepage FSR EI]<br /> }}<br /> <br /> {{FSListe Zeile<br /> | stadt=Emden<br /> | hochschule=[[Hochschule Emden/Leer]]<br /> | anschrift=<br /> FSR Elektrotechnik/Medientechnik/Informatik&lt;br&gt;<br /> Hochschule Emden/Leer&lt;br&gt;<br /> Constantiaplatz 4&lt;br&gt;<br /> 26723 Emden<br /> | fon=+49-4921-807-1871<br /> | email=fsr-emi@hs-emden-leer.de<br /> | email_domains=hs-emden-leer.de<br /> <br /> }}<br /> <br /> {{FSListe Zeile<br /> | stadt=Erfurt<br /> | hochschule=[[FH Erfurt]]<br /> | anschrift=<br /> Fachschaft Angewandte Informatik&lt;br&gt;<br /> Haus 3, Raum 3.1.23&lt;br&gt;<br /> Altonaer Straße 25&lt;br&gt;<br /> 99085 Erfurt<br /> | fon=+49-6700-752<br /> | email=fsai@fh-erfurt.de<br /> | link1=[https://www.ai.fh-erfurt.de/studium/allgemeine-informationen-zum-studium/fachschaft/ Homepage]<br /> | email_domains=fh-erfurt.de<br /> }}<br /> <br /> {{FSListe Zeile<br /> | stadt=Erlangen<br /> | hochschule=[[FAU Erlangen-Nürnberg]]<br /> | anschrift=<br /> FSI Informatik&lt;br&gt;<br /> Raum 02.150-113&lt;br&gt;<br /> Martensstr. 3&lt;br&gt;<br /> 91058 Erlangen<br /> | fon=+49-9131-85-27939<br /> | email=fsi@cs.fau.de<br /> | link1=[https://fsi.cs.fau.de/ Homepage]<br /> | email_domains=fau.de,uni-erlangen.de<br /> }}<br /> <br /> {{FSListe Zeile<br /> | stadt=Esslingen<br /> | hochschule=[[FH Esslingen]]<br /> | anschrift=<br /> Raum F 01.-208&lt;br&gt;<br /> Flandernstraße 101&lt;br&gt;<br /> 73728 Esslingen&lt;br&gt;<br /> | email=fachschaft.it (ät) hs-esslingen.de<br /> | link1=[https://www.hs-esslingen.de/informatik-und-informationstechnik/personen/fakultaetskontakte/fachschaft/ Homepage]<br /> <br /> }}<br /> <br /> {{FSListe Zeile<br /> | stadt=[[Flensburg]]<br /> | link1=http://fs-inf.fh-flensburg.de<br /> }}<br /> <br /> {{FSListe Zeile<br /> | stadt=Frankfurt am Main<br /> | hochschule=[[Goethe-Uni Frankfurt|Goethe-Universität]]<br /> | anschrift=<br /> Fachschaft Informatik&lt;br&gt;<br /> Goethe-Universität, FB 12&lt;br&gt;<br /> Robert-Mayer-Str. 11-15&lt;br&gt; <br /> 60325 Frankfurt a. M.<br /> | email=fsinf (ät) uni-frankfurt.de<br /> | link1=[http://fs.cs.uni-frankfurt.de Homepage]<br /> }}<br /> <br /> {{FSListe Zeile<br /> | stadt=Frankfurt am Main<br /> | hochschule=[[Frankfurt UAS]]<br /> | anschrift=<br /> | email=post(ät)fachschaft2.de<br /> | link1=[https://www.frankfurt-university.de/de/hochschule/fachbereich-2-informatik-und-ingenieurwissenschaften/einrichtungen-services/fachschaft-2/ Homepage FS2]<br /> | link2=[https://www.facebook.com/Fachschaft.02/ Facebook]<br /> }}<br /> <br /> <br /> {{FSListe Zeile<br /> | stadt=Freiberg<br /> | hochschule=[[TU Bergakademie Freiberg]]<br /> | anschrift=<br /> FSR1&lt;br&gt;<br /> Nonnengasse 22, Zi. D-14&lt;br&gt;<br /> 09599 Freiberg<br /> | fon=+49-3731-393462<br /> | fax=<br /> | email=fsr1 (ät) stura.tu-freiberg.de<br /> | link1=[http://www.fsr1.tu-freiberg.de/ Homepage]<br /> | link2=[http://twitter.com/FSR_1 Twitter]<br /> | link3=[http://www.facebook.com/Fachschaftsrat1 Facebook]<br /> | email_domains=tu-freiberg.de<br /> }}<br /> <br /> {{FSListe Zeile<br /> | stadt= Freiburg<br /> | hochschule=[[Albert-Ludwigs-Universität Freiburg]]<br /> | anschrift=<br /> Fachschaft Technische Fakultät&lt;br&gt;<br /> Georges-Köhler-Allee 051&lt;br&gt;<br /> 79110 Freiburg<br /> | email=fs (ät) fachschaft.tf.uni-freiburg.de<br /> | link1=[http://fachschaft.tf.uni-freiburg.de Homepage]<br /> | email_domains=uni-freiburg.de<br /> }}<br /> <br /> {{FSListe Zeile<br /> | stadt=Friedberg<br /> | hochschule=[[TH Mittelhessen - Campus Friedberg]]<br /> | anschrift=<br /> | link1=[https://www.facebook.com/fachschaftIEM Facebook]<br /> }}<br /> <br /> {{FSListe Zeile<br /> | stadt= Fulda<br /> | hochschule=[[HS Fulda]]<br /> | anschrift=<br /> | fon=+49-661-9640-3480<br /> | email=fsr (ät) ai.hs-fulda.org<br /> | link1=[https://fsr.informatik.hs-fulda.de/kontakt/ Homepage FSRI]<br /> | link2=[https://www.facebook.com/FSRAIFulda/ Facebook]<br /> }}<br /> <br /> {{FSListe Zeile<br /> | stadt= Furtwagen<br /> | hochschule=[[HS Furtwagen]]<br /> | anschrift=<br /> | fon=+49-661-9640-3480<br /> | email=fachschaft-in (ät) hs-furtwangen.de<br /> | link1=[https://www.hs-furtwangen.de/gremien-und-organe/fachschaften/ Homepage Fachschaften]<br /> | link2=[https://www.facebook.com/HfuFachschaftInformatik Facebook]<br /> }}<br /> <br /> {{FSListe Zeile<br /> | stadt=Gelsenkirchen<br /> | hochschule=[[Westfälische Hochschule]]<br /> | anschrift=<br /> Westfälische Hochschule Standort Gelsenkirchen&lt;br&gt;<br /> Fachschaft Informatik&lt;br&gt;<br /> Neidenburger Str. 43&lt;br&gt;<br /> D-45897 Gelsenkirchen<br /> | email=kontakt (ät) fachschaftinformatik (punkt) de<br /> }}<br /> <br /> {{FSListe Zeile<br /> | stadt=Gießen<br /> | hochschule=[[TH Mittelhessen - Campus Gießen]]<br /> | anschrift=<br /> | fon=+49-641-30-92353<br /> | link1=[https://fsmni.thm.de/site/ Homepage]<br /> | link2=[https://www.instagram.com/fachschaftmni/ Instagram]<br /> }}<br /> <br /> <br /> <br /> {{FSListe Zeile<br /> | stadt=Görlitz<br /> | hochschule=[[Hochschule Zittau/Görlitz]]<br /> | anschrift=<br /> Hochschule Zittau/Görlitz&lt;br&gt;<br /> Fachschaftsrat Informatik&lt;br&gt;<br /> Haus G II&lt;br&gt;<br /> Brückenstraße 1&lt;br&gt;<br /> 02826 Görlitz<br /> | besucheradresse=<br /> Fakultät Elektrotechnik und Informatik&lt;br&gt;<br /> Brückenstraße 1&lt;br&gt;<br /> Haus G II, Raum 055&lt;br&gt;<br /> 02826 Görlitz<br /> | fon=<br /> | fax=<br /> | email=fsi@hszg.de<br /> | email_domains=hszg.de,fsr-i.de<br /> }}<br /> <br /> {{FSListe Zeile<br /> | stadt=Göttingen<br /> | hochschule=[[Georg-August-Universität Göttingen]]<br /> | anschrift=<br /> Fachgruppe Informatik&lt;br&gt;<br /> Goldschmidtstraße 7&lt;br&gt;<br /> 37077 Göttingen <br /> | email=fachgruppe (ät) informatik.uni-goettingen.de<br /> | link1=[https://fg.informatik.uni-goettingen.de Homepage]<br /> | email_domains=uni-goettingen.de<br /> }}<br /> <br /> {{FSListe Zeile<br /> | stadt=Graz<br /> | hochschule=[[TU Graz]]<br /> | anschrift=<br /> Technische Universität Graz&lt;br&gt;<br /> Basisgruppe Informatik &amp; Softwareentwicklung&lt;br&gt;<br /> Basisgruppe Information &amp; Computer Engineering&lt;br&gt;<br /> Inffeldgasse 16b&lt;br&gt;<br /> A-8010 Graz<br /> | fon=+43-316-873-4477 (BIS)<br /> | fon1=+43-316-873-4134 (ICE)<br /> | email=bits (ät) htu.tugraz.at<br /> | link1=[http://bis.htu.tugraz.at Homepage BIS]<br /> | link2=[http://ice.htu.tugraz.at Homepage ICE]<br /> }}<br /> <br /> {{FSListe Zeile<br /> | stadt=Hagen<br /> | hochschule=[[FernUniversität Hagen]]<br /> | anschrift=<br /> Studierendenschaft der FernUniversität in Hagen&lt;br&gt;<br /> Fachschaftsrat Meti&lt;br&gt;<br /> Roggenkamp 10&lt;br&gt;<br /> 58093 Hagen<br /> | email=kontakt@meti.fsr-fernuni.de<br /> | link1=[https://www.fernuni-hagen.de/FACHSCHINF// Homepage]<br /> }}<br /> <br /> {{FSListe Zeile<br /> | stadt=Halle(Saale) und Wittenberg<br /> | hochschule=[[Martin-Luther-Universität Halle-Wittenberg]]<br /> | anschrift=<br /> Raum 0.31&lt;br&gt;<br /> Von-Seckendorff-Platz 1&lt;br&gt;<br /> (Institut für Informatik)&lt;br&gt;<br /> 06120 Halle (Saale)&lt;br&gt;<br /> | besucheradresse=<br /> | fon=+49-345-55-24605<br /> | email=fachschaft (ät) mathinf.uni-halle.de<br /> | link1=[https://fachschaft.mathinf.uni-halle.de/ Homepage FSR M/I]<br /> | link2=[https://www.instagram.com/fsrmatheinfo/ Instagram]<br /> | link3=[https://www.facebook.com/fsrmatheinfo/ Facebook]<br /> | email_domains=uni-halle.de<br /> }}<br /> <br /> {{FSListe Zeile<br /> | stadt=Hamburg<br /> | hochschule=[[Uni Hamburg]]<br /> | anschrift=<br /> Universität Hamburg&lt;br&gt;<br /> Fachschaftsrat Informatik&lt;br&gt;<br /> Vogt-Kölln-Straße 30&lt;br&gt;<br /> D-22527 Hamburg<br /> | fon=+49-40-428-83-2243<br /> | email=fsr ( ät ) informatik (punkt) uni (strich) hamburg ( punkt ) de<br /> | link1=[https://mafiasi.de/dashboard/ Mafiasi Homepage]<br /> | email_domains=uni-hamburg.de<br /> }}<br /> <br /> {{FSListe Zeile<br /> | stadt=Hamburg<br /> | hochschule=[[TU Hamburg]]<br /> | anschrift=<br /> FSR ET/IT der TUHH&lt;br&gt;<br /> Am Schwarzenberg-Campus 3&lt;br&gt;<br /> 21073 Hamburg<br /> | fon=+49-40-42878-2975<br /> | email=fsr (strich) etit ( ät ) tuhh ( punkt ) de<br /> | link1=https://fsr-etit.de<br /> }}<br /> <br /> {{FSListe Zeile<br /> | stadt=Hamburg<br /> | hochschule=[[HAW Hamburg]]<br /> | link1=https://www.myhaw.net/informations-und-elektrotechnik-informatik/fsr/<br /> }}<br /> <br /> {{FSListe Zeile<br /> | stadt=Hannover<br /> | hochschule=[[Uni Hannover]]<br /> | anschrift=<br /> Leibniz Universität Hannover&lt;br&gt;<br /> Fachrat Informatik&lt;br&gt;<br /> Appelstraße 9a&lt;br&gt;<br /> 30167 Hannover<br /> | email=fr (ät) finf.uni-hannover.de<br /> | link1=[http://www.finf.uni-hannover.de/ Homepage]<br /> | link2=[irc://irc.hackint.org/9999/#inf IRC]<br /> }}<br /> <br /> <br /> {{FSListe Zeile<br /> | stadt=Hannover<br /> | hochschule=[[HS Hannover]]<br /> | anschrift=<br /> Fachschaftsrat Informatik der Hochschule Hannover&lt;br&gt;<br /> Raum: 1J.0.29 (derzeitig pandemiebedingt geschlossen)&lt;br&gt;<br /> Ricklinger Stadtweg 120 &lt;br&gt;<br /> 30459 Hannover<br /> | email=F4-I-Fachschaftsrat (ät) stud.hs-hannover.de<br /> | link1=[https://fsri.de/ Homepage FSRI]<br /> | link2=[https://www.facebook.com/fsrihsh Facebook]<br /> | link3=[https://www.instagram.com/fsri_hannover/ Instagram]<br /> | link4=[https://t.me/fsri_hsh Telegram]<br /> }}<br /> <br /> {{FSListe Zeile<br /> | stadt=Hamm<br /> | hochschule=[[HS Hamm-Lippstadt]]<br /> | anschrift=<br /> | email= info-fachschaft.ais (ät) hshl.de<br /> | link1=[https://asta.hshl.de/fachschaften/ Homepage Fachschaften]<br /> | link2=[https://www.instagram.com/fsr_ais_hshl/ Instagram]<br /> }}<br /> <br /> {{FSListe Zeile<br /> | stadt=Hamm<br /> | hochschule=[[HS Hamm-Lippstadt]]<br /> | anschrift=<br /> | email= info-fachschaft.ais (ät) hshl.de<br /> | link1=[https://asta.hshl.de/fachschaften/ Homepage Fachschaften]<br /> | link2=[https://www.instagram.com/fsr_ais_hshl/ Instagram]<br /> }}<br /> <br /> <br /> {{FSListe Zeile<br /> | stadt=Harz und Wernigerode<br /> | hochschule=[[HS Harz/Wernigerode]]<br /> | anschrift=<br /> StuRa-Büro Wohnheim IV - Raum 2.034&lt;br&gt;<br /> Hochschule Harz Friedrichstraße 57-59&lt;br&gt;<br /> 38855 Wernigerode <br /> | email= stura (ät) hs-harz.de<br /> | link1=[https://www.hs-harz.de/studium/studierendenservice/leben/studentisches-engagement/ Homepage StuRa]<br /> | link2=[https://www.facebook.com/stura.hsharz Facebook]<br /> }}<br /> <br /> {{FSListe Zeile<br /> | stadt=Heidelberg<br /> | hochschule=[[Uni Heidelberg]]<br /> | anschrift=<br /> Universität Heidelberg&lt;br&gt;<br /> Fachschaft Informatik&lt;br&gt;<br /> Im Neuenheimer Feld 205, Raum 01.301&lt;br&gt;<br /> 69120 Heidelberg<br /> | fon=+49-6221-54-14999<br /> | fax=+49-6221-54-16114999<br /> | email=fsinformatik ( ät ) mathphys (punkt) stura (punkt) uni (strich) heidelberg (punkt) de<br /> | link1=[https://mathphys.fsk.uni-heidelberg.de/ Homepage]<br /> }}<br /> <br /> {{FSListe Zeile<br /> | stadt=Heilbronn<br /> | hochschule=[[HS Heilbronn]]<br /> | anschrift=<br /> | email= fachschaft-it (ät) asta.hs-heilbronn.de<br /> | link1=[https://asta.hs-heilbronn.de/fachschaften/fachschaft-it/ Homepage]<br /> }}<br /> <br /> {{FSListe Zeile<br /> | stadt=Giessen<br /> | hochschule=[[TH Mittelhessen]]<br /> | anschrift=<br /> THM&lt;br&gt;<br /> Fachschaft MNI&lt;br&gt;<br /> Wiesenstraße 14&lt;br&gt;<br /> D-35390 Giessen<br /> | besucheradresse=<br /> <br /> | fon=+49-641-309-2353 <br /> | fon1=<br /> | fax=<br /> | email=Fachschaft-Informatik (ät) mni (punkt) fh (strich) giessen (punkt) de<br /> | link1=[https://th-mittelerde.de FS MNI]<br /> | email_domains=thm.de,th-mittelhessen.de,fh-giessen-friedberg.de,fh-giessen.de<br /> }}<br /> <br /> {{FSListe Zeile<br /> | stadt= Friedberg<br /> | hochschule=[[TH Mittelhessen]]<br /> | anschrift=<br /> THM&lt;br&gt;<br /> Fachschaft MND&lt;br&gt;<br /> Wilhelm-Leuschner-Str. 13&lt;br&gt;<br /> D-61169 Friedberg<br /> | besucheradresse=<br /> <br /> | fon=<br /> | fon1=<br /> | fax=<br /> | email=Fachschaft (ät) mnd (punkt) thm (punkt) de<br /> | link1=[http://go.thm.de/fachschaft-mnd FS MND]<br /> | email_domains=thm.de,th-mittelhessen.de,fh-giessen-friedberg.de,fh-friedberg.de<br /> }}<br /> <br /> {{FSListe Zeile<br /> | stadt= Friedberg<br /> | hochschule=[[TH Mittelhessen]]<br /> | anschrift=<br /> THM&lt;br&gt;<br /> Fachschaft IEM&lt;br&gt;<br /> Wilhelm-Leuschner-Str. 13&lt;br&gt;<br /> D-61169 Friedberg<br /> | besucheradresse=<br /> <br /> | fon=<br /> | fon1=<br /> | fax=<br /> | email=Fachschaft (ät) iem (punkt) thm (punkt) de<br /> | email_domains=thm.de,th-mittelhessen.de,fh-giessen-friedberg.de,fh-friedberg.de<br /> }}<br /> <br /> <br /> {{FSListe Zeile<br /> | stadt=Ilmenau<br /> | hochschule=[[TU Ilmenau]]<br /> | anschrift=<br /> FachschaftsRat IA&lt;br&gt;<br /> TU Ilmenau&lt;br&gt;<br /> 98693 Ilmenau<br /> | besucheradresse=<br /> <br /> | fon=<br /> | fon1=<br /> | fax=<br /> | email=fachschaftsrat-ia@tu-ilmenau.de<br /> | link1=[https://www.tu-ilmenau.de/fsr-ia/ Homepage]<br /> | email_domains=tu-ilmenau.de<br /> }}<br /> <br /> {{FSListe Zeile<br /> | stadt=Ingolstadt<br /> | hochschule=[[TH Ingolstadt]]<br /> | anschrift=<br /> | fon=+ +49-841-9348-2060 <br /> | email= studver (ät) thi.de<br /> | link1=[https://www.thi.de/hochschule/ueber-uns/hochschulgremien/studierendenvertretung Homepage Studierendenvertretung]<br /> }}<br /> <br /> {{FSListe Zeile<br /> | stadt=Jena<br /> | hochschule=[[FSU Jena]]<br /> | anschrift=<br /> Friedrich-Schiller-Universität Jena&lt;br&gt;<br /> Fachschaftsrat Informatik&lt;br&gt;<br /> Raum 3227 (2. Stock)&lt;br&gt;<br /> Ernst-Abbe-Platz 2&lt;br&gt;<br /> D-07743 Jena <br /> | besucheradresse=<br /> <br /> | fon=+49-3641-946-411<br /> | fon1=<br /> | fax=<br /> | email=fsrinfo(at)uni(minus)jena(punkt)de<br /> | link1=[https://fsrinfo.fmi.uni-jena.de/studium/kontakt/ Webseite]<br /> | email_domains=uni-jena.de<br /> }}<br /> <br /> {{FSListe Zeile<br /> | stadt=Kaiserslautern<br /> | hochschule=[[Fachschaft Informatik Kaiserslautern | TU Kaiserslautern]]<br /> | anschrift=<br /> Technische Universität Kaiserslautern&lt;br&gt;<br /> Fachschaft Informatik&lt;br&gt;<br /> Bau 48, Raum 464&lt;br&gt;<br /> Erwin-Schrödinger-Straße&lt;br&gt;<br /> D-67663 Kaiserslautern<br /> | fon=+49-631-205-2553<br /> | email=info (ät) fachschaft.informatik.uni-kl.de<br /> | email_domains=uni-kl.de,fsin.fo<br /> }}<br /> <br /> {{FSListe Zeile<br /> | stadt=Kaiserslautern<br /> | hochschule=[[Fachhochschule Kaiserslautern Standort Zweibrücken|FH Kaiserslautern Standort Zweibrücken]]<br /> | anschrift=<br /> Fachhochschule Kaiserslautern&lt;br&gt;<br /> Standort Zweibrücken&lt;br&gt;<br /> Fachschaftsrat Informatik &amp; Mikrosystemtechnik&lt;br&gt;<br /> Gebäude A, Raum A 126&lt;br&gt;<br /> Amerikastr. 1&lt;br&gt;<br /> D-66482 Zweibrücken<br /> | fon=+49-631-3724-5186<br /> | email=fsimst (et) eurefachschaft.de<br /> }}<br /> <br /> {{FSListe Zeile<br /> | stadt=Karlsruhe<br /> | hochschule=[[Hochschule Karlsruhe|HS Karlsruhe]]<br /> | anschrift=<br /> Hochschule Karlsruhe&lt;br&gt;<br /> Fachschaft Informatik&lt;br&gt;<br /> Moltkestr. 30&lt;br&gt;<br /> 76133 Karlsruhe<br /> | besucheradresse=<br /> Fachschaft Informatik&lt;br&gt;<br /> Raum E012&lt;br&gt;<br /> Moltkestr. 30&lt;br&gt;<br /> 76133 Karlsruhe<br /> | fon=+49 721 925-1449<br /> | fax=<br /> | email=kontakt (ät) hska.info<br /> | link1=http://hska.info<br /> | email_domains=hs-karlsruhe.de<br /> }}<br /> <br /> {{FSListe Zeile<br /> | stadt=Karlsruhe<br /> | hochschule=[[Uni Karlsruhe (TH)|KIT]]<br /> | anschrift=<br /> Fachschaft Informatik&lt;br&gt;<br /> Gebäude 50.34, Raum -124&lt;br&gt;<br /> Karlsruher Institut für Technologie&lt;br&gt;<br /> Am Fasanengarten 5&lt;br&gt;<br /> 76131 Karlsruhe<br /> | fon=+49-721-608-43974<br /> | fax=+49-7210-608-46964<br /> | email=info (ät) fsmi.uni-karlsruhe.de<br /> | link1=<br /> | email_domains=kit.edu,uni-karlsruhe.de<br /> }}<br /> <br /> <br /> {{FSListe Zeile<br /> | stadt=Karlsruhe<br /> | hochschule=[[FH Karlsruhe]]<br /> | anschrift=<br /> Moltkestraße 30&lt;br&gt;<br /> 76133 Karlsruhe&lt;br&gt;<br /> Raum E013<br /> | fon=+49-721-925-2949<br /> | email=kontakt (ät) iwi-hka.de<br /> | link1=[https://iwi-hka.de/ Homepage FS IWI]<br /> }}<br /> <br /> <br /> <br /> {{FSListe Zeile<br /> | stadt=Kassel<br /> | hochschule=[[Uni Kassel]]<br /> | anschrift=<br /> Universität Kassel&lt;br&gt;<br /> Fachbereich Elektrotechnik/Informatik&lt;br&gt;<br /> Wilhelmshöher Allee 71 - 73&lt;br&gt;<br /> D-34121 Kassel&lt;br&gt;<br /> | besucheradresse=<br /> | email= fsr16 (ät) uni-kassel.de<br /> | link1=[https://www.uni-kassel.de/eecs/fachschaft.html Homepage FS FB16]<br /> | link2=[https://www.facebook.com/fachschaft16/ Facebook]<br /> | email_domains=uni-kassel.de<br /> }}<br /> <br /> <br /> {{FSListe Zeile<br /> | stadt=Kempten<br /> | hochschule=[[HS Kempten]]<br /> | anschrift=<br /> Hochschule Kempten - BlackBox&lt;br&gt;<br /> Bahnhofstraße 61&lt;br&gt;<br /> 87435 Kempten<br /> | fon=++49-721-925-2949<br /> | email=kontakt (ät) iwi-hka.de<br /> | link1=[https://iwi-hka.de/ Homepage FS IWI]<br /> }}<br /> <br /> <br /> {{FSListe Zeile<br /> | stadt=Kiel<br /> | hochschule=[[FH Kiel]]<br /> | anschrift=<br /> Fachschaft Informatik und Elektrotechnik der Fachhochschule Kiel&lt;br/&gt;<br /> Grenzstr. 7&lt;br/&gt;<br /> 24149 Kiel<br /> | besucheradresse=<br /> Grenzstr. 5&lt;br/&gt;<br /> 24149 Kiel&lt;br/&gt;<br /> Raum C13-1.19<br /> | fon=+49-831-2523-481<br /> | email=vorstand.sv (ät) hs-kempten.de<br /> | link1=[https://sv-hke.de/ Homepage Studirendenvertretung]<br /> }}<br /> <br /> {{FSListe Zeile<br /> | stadt=Kiel<br /> | hochschule=CAU Kiel<br /> | anschrift=<br /> Fachschaften Informatik &amp; Mathematik&lt;br&gt;<br /> Ludwig-Meyn-Straße 6&lt;br&gt;<br /> Rechts neben Raum 10 (Steinitz-Hörsaal)&lt;br&gt;<br /> 24098 Kiel<br /> | besucheradresse=<br /> <br /> | fon= +49-431-880-1497<br /> | fon1=<br /> | fax=<br /> | email=fachschaft(ät) fs-infmath.uni-kiel.de<br /> | link1=http://www.fs-infmath.uni-kiel.de/<br /> | email_domains=uni-kiel.de<br /> }}<br /> <br /> {{FSListe Zeile<br /> | stadt=Koblenz und Landau<br /> | hochschule=[[Universität Koblenz-Landau]]<br /> | anschrift=<br /> Fachschaft Informatik &amp; Computervisualistik Universität Koblenz&lt;br&gt;<br /> Universitätsstr. 1&lt;br&gt;<br /> 56070 Koblenz&lt;br&gt;<br /> | besucheradresse=<br /> | email= fsinfcv (ät) uni-koblenz.de<br /> | link1=[https://www.uni-koblenz-landau.de/de/koblenz/fachschaften/fsvs/infcv Homepage FS INFCV]<br /> | link2=[https://www.facebook.com/inforakel/ Facebook]<br /> | email_domains=uni-koblenz.de<br /> }}<br /> <br /> {{FSListe Zeile<br /> | stadt=Koblenz<br /> | hochschule=[[HS Koblenz]]<br /> | anschrift=<br /> Koblenz Karthause&lt;br&gt;<br /> Konrad-Zuse-Straße 1&lt;br&gt;<br /> Raum C028&lt;br&gt;<br /> 56075 Koblenz<br /> | besucheradresse=<br /> | fon=+49-261-9528-373<br /> | email= fastra-iw (ät) hs-koblenz.de<br /> | link1=[https://www.hs-koblenz.de/rmc/fachbereiche/ingenieurwesen/elektrotechnik-und-informationstechnik/fachschaft Homepage FS EI ]<br /> }}<br /> <br /> {{FSListe Zeile<br /> | stadt=Konstanz<br /> | hochschule=[[Uni Konstanz]]<br /> | anschrift=<br /> Fachschaft Informatik&lt;br&gt;<br /> Universität Konstanz&lt;br&gt;<br /> 78457 Konstanz<br /> | email=fachschaft (ät) inf.uni-konstanz.de<br /> | link1=https://www.fachschaft.inf.uni-konstanz.de<br /> | email_domains=uni.kn<br /> }}<br /> <br /> {{FSListe Zeile<br /> | stadt=Konstanz<br /> | hochschule=[[HTWG Konstanz]]<br /> | anschrift=<br /> | email=fachschaft-in (ät) htwg-konstanz.de <br /> | link1=[https://www.htwg-konstanz.de/hochschule/studierendenvertretung/fachschaft-in/willkommen/ Homepage FS]<br /> | link2=[https://www.facebook.com/fs.in.htwg Facebook]<br /> }}<br /> <br /> {{FSListe Zeile<br /> | stadt=Köln<br /> | hochschule=[[TH Köln]]<br /> | anschrift=<br /> Technische Hochschule Köln&lt;br&gt;<br /> Campus Gummersbach&lt;br&gt;<br /> Steinmüllerallee 1&lt;br&gt;<br /> 51643 Gummersbach&lt;br&gt;<br /> Raum 1.123<br /> | fon= +49-2261-8196-6503 <br /> | email=info(ät)fachschaftgm.de<br /> | link1=[https://www.fachschaftgm.de/ Homepage FS Fakultät10]<br /> | link2=[https://www.instagram.com/FachschaftGM/ Instagram]<br /> | link3=[https://www.facebook.com/FachschaftGM/ Facebook]<br /> | link4=[https://twitter.com/fachschaftgm Twitter]<br /> <br /> }}<br /> <br /> {{FSListe Zeile<br /> | stadt=Landshut<br /> | hochschule=[[HS Landshut]]<br /> | anschrift=<br /> | email=if(ät)stuv.la<br /> |link1 = [https://www.haw-landshut.de/studium/im-studium/campusleben/vereine-und-organisationen/stuv/fachschaften/fachschaft-informatik.html Homepage FS]<br /> }}<br /> <br /> {{FSListe Zeile<br /> | stadt=Leipzig<br /> | hochschule=[[Uni Leipzig]]<br /> | anschrift=<br /> Universität Leipzig&lt;br&gt;<br /> Fakultät für Mathematik und Informatik&lt;br&gt;<br /> Fachschaftsrat Informatik&lt;br&gt;<br /> PF 100920&lt;br&gt;<br /> 04009 Leipzig<br /> | besucheradresse=<br /> Fachschaftsrat Informatik Raum A-541&lt;br&gt;<br /> Institut für Informatik&lt;br&gt;<br /> Augustusplatz 10&lt;br&gt;<br /> 04109 Leipzig<br /> | fon=+49-341-97-32297<br /> | email=fsinf (ät) fsinf.informatik.uni-leipzig.de<br /> | link1=[https://fsinf.informatik.uni-leipzig.de/ Homepage FSRI]<br /> | link2=[https://www.facebook.com/FSRinformatikUniLeipzig/ Facebook]<br /> | link3=[https://twitter.com/fsinfleipzig Twitter]<br /> }}<br /> <br /> {{FSListe Zeile<br /> | stadt=Leipzig<br /> | hochschule=[[HTWK Leipzig]]<br /> | anschrift=<br /> Fachschaft Informatik, Mathematik und Naturwissenschaften&lt;br&gt;<br /> Gebäude Zuse-Bau, Raum -125&lt;br&gt;<br /> Gustav-Freytag-Straße 42a&lt;br&gt;<br /> 04277 Leipzig<br /> | besucheradresse=<br /> <br /> | fon=+49-341-30766102<br /> | fon1=<br /> | fax=<br /> | email=fsr.fim (ät) lists.htwk-leipzig.de<br /> | link1=<br /> }}<br /> <br /> {{FSListe Zeile<br /> | stadt=Lemgo<br /> | hochschule=[[Hochschule Ostwestfalen-Lippe]]<br /> | anschrift=<br /> Hochschule Ostwestfalen-Lippe&lt;br&gt;<br /> Liebigstraße 87&lt;br&gt;<br /> D-32657 Lemgo<br /> | email=fachschaft.fb5 (at) th-owl.de<br /> }}<br /> <br /> {{FSListe Zeile<br /> | stadt=Lübeck<br /> | hochschule=[[Uni Lübeck]]<br /> | anschrift=<br /> Fachschaft MINT&lt;br&gt;<br /> c/o AStA&lt;br&gt;<br /> Ratzeburger Allee 160&lt;br&gt;<br /> Haus 24&lt;br&gt;<br /> 23538 Lübeck<br /> | besucheradresse=<br /> Ratzeburger Allee 160&lt;br&gt;<br /> Haus 1&lt;br&gt;<br /> 23538 Lübeck<br /> | fon=<br /> | fon1=<br /> | fax=<br /> | email=<br /> | link1=[http://www.fsmint.uni-luebeck.de/ Fachschaft MINT]<br /> | email_domains=uni-luebeck.de<br /> }}<br /> <br /> {{FSListe Zeile<br /> | stadt=Lübeck<br /> | hochschule=[[TH Lübeck]]<br /> | anschrift=<br /> Stephensonstraße 1-3&lt;br&gt;<br /> Gebäude: 15b 0.06 + 0.07&lt;br&gt;<br /> 23562 Lübeck<br /> | fon=+49-451-300-5039<br /> | email=info (ät) fstw-thl.de<br /> | link1=[https://www.th-luebeck.de/gremien-thl/gremien/fs-tw/alles-zur-tw/ Fachschaft TW]<br /> | link2=[https://www.facebook.com/fstw.thl/ Facebook]<br /> | link3=[https://www.instagram.com/fachschaften_tw/ Instagram]<br /> }}<br /> <br /> {{FSListe Zeile<br /> | stadt=Lüneburg<br /> | hochschule=Leuphana Universität Lüneburg<br /> | anschrift=<br /> <br /> | besucheradresse=<br /> <br /> | fon=<br /> | fon1=<br /> | fax=<br /> | email=fsr-wuk(ät) g m x .net<br /> | link1=[http://www.leuphana.de/studieren/studienangebot/diplom-staex-ma-ba/diplom-fh/sitemap-diplom-fh/angewandte-informatik-diplom-fh.html Webseite des Studiengangs &quot;Angewandte Informatik Diplom&quot;]<br /> }}<br /> <br /> {{FSListe Zeile<br /> | stadt=Magdeburg<br /> | hochschule=[[Uni Magdeburg]]<br /> | anschrift=<br /> Fachschaftsrat der Fakultät für Informatik&lt;br&gt;<br /> Otto-von-Guericke Universität Magdeburg&lt;br&gt;<br /> Fakultät für Informatik&lt;br&gt;<br /> Postfach 4120&lt;br&gt;<br /> 39016 Magdeburg<br /> | besucheradresse=<br /> Gebäude 29, Raum 103&lt;br&gt;<br /> Universitätsplatz 2&lt;br&gt;<br /> 39106 Magdeburg<br /> | fon=+49-391-67-51377<br /> | fax=<br /> | email=post(ät)farafin.de<br /> | link1=[http://www.farafin.de FaRaFIN]<br /> | link2=[http://twitter.com/_farafin_ @_farafin_]<br /> | email_domains=farafin.de,stura-md.de<br /> }}<br /> <br /> {{FSListe Zeile<br /> | stadt=Mainz<br /> | hochschule=[[HS Mainz]]<br /> | anschrift=<br /> Hochschule Mainz&lt;br&gt;<br /> Fachschaftsrat Geoinformatik und Vermessung&lt;br&gt;<br /> Raum C2.14&lt;br&gt;<br /> Lucy-Hillebrand-Straße 2&lt;br&gt;<br /> 55128 Mainz&lt;br&gt;<br /> | email=fachschaft (ät) geoinform.hs-mainz.de<br /> | link1=[https://www.hs-mainz.de/studium/im-studium/studierendenvertretung/fachschaften/ FS Geoinformatik und Vermessung]<br /> }}<br /> <br /> {{FSListe Zeile<br /> | stadt=Mainz<br /> | hochschule=[[JGU Mainz]]<br /> | anschrift=<br /> Fachschaftsvertretung Mathematik/Informatik&lt;br&gt;<br /> Staudingerweg 9&lt;br&gt;<br /> 55128 Mainz<br /> | fon=+49-6131-39-22834<br /> | fax=<br /> | email=fsmathe-informatik@uni-mainz.de<br /> | link1=[https://fachschaft.mathe-informatik.uni-mainz.de Homepage]<br /> | email_domains=uni-mainz.de<br /> }}<br /> <br /> <br /> <br /> {{FSListe Zeile<br /> | stadt=Mannheim<br /> | hochschule=[[Universität Mannheim]]<br /> | anschrift=<br /> Fachschaft Mathematik und Informatik (FIM)&lt;br&gt;<br /> Universität Mannheim&lt;br&gt;<br /> A5, 6, Raum B139&lt;br&gt;<br /> 68131 Mannheim<br /> | fon=+49-621-181-2426<br /> | fax=+49-621-181-2401<br /> | email=fim (ät) fim.uni-mannheim.de<br /> | email_domains=uni-mannheim.de<br /> }}<br /> <br /> {{FSListe Zeile<br /> | stadt=Mannheim<br /> | hochschule=[[Hochschule Mannheim]]<br /> | anschrift=<br /> Fachschaft Informatik&lt;br&gt;<br /> Hochschule Mannheim&lt;br&gt;<br /> Gebäude A, Raum 012a&lt;br&gt;<br /> Paul-Wittsack-Straße 10&lt;br&gt; <br /> 68163 Mannheim<br /> | email=fachschaft-i@hs-mannheim.de<br /> | link1=[https://fachschaft-i.de Homepage]<br /> | email_domains=hs-mannheim.de<br /> }}<br /> <br /> {{FSListe Zeile<br /> | stadt= Marburg<br /> | hochschule=[[Philipps-Universität Marburg]]<br /> | anschrift=<br /> Fachschaft Mathematik &amp; Informatik&lt;br&gt;<br /> c/o Philipps-Universität Marburg&lt;br&gt;<br /> Biegenstraße 10&lt;br&gt;<br /> 35032 Marburg<br /> | besucheradresse=<br /> | email= fachschaft (ät) mathematik.uni-marburg.de<br /> | link1=[https://www.uni-marburg.de/de/fb12/fachbereich/fachschaft Homepage FSMI]<br /> | link2=[https://www.facebook.com/MatheInfo/ Facebook]<br /> | link3=[https://twitter.com/MatheInfoUMR Twitter]<br /> | link4=[https://www.instagram.com/matheinfo/ Instagram] <br /> | email_domains=uni-koblenz.de<br /> }}<br /> <br /> {{FSListe Zeile<br /> | stadt= Merseburg<br /> | hochschule=[[HS Merseburg]]<br /> | anschrift=<br /> | besucheradresse=<br /> |fon = +49-3461-46-2770<br /> | email= fachschaftsrat.inw(ät)hs-merseburg.de<br /> | link1=[https://www.hs-merseburg.de/studium/im-studium/studierendenvertretungen/ Homepage Studierendenvertretungen]<br /> }}<br /> <br /> {{FSListe Zeile<br /> | stadt= Mittweida<br /> | hochschule=[[HS Mittweida]]<br /> | anschrift=<br /> Fachschaft Angewandte Computer- und Biowissenschaften&lt;br&gt;<br /> Technikumplatz 17&lt;br&gt;<br /> 09648 Mittweida<br /> | besucheradresse=<br /> |fon = +49-3461-46-2770<br /> | email=fsr-cb(ät)hs-mittweida.de<br /> | link1=[https://www.hs-mittweida.de/webs/stura/fachschaften/angewandte-computer-und-biowissenschaften.html Homepage FS]<br /> }}<br /> <br /> {{FSListe Zeile<br /> | stadt=München<br /> | hochschule=[[Hochschule München]]<br /> | anschrift=<br /> Fachschaft 07&lt;br&gt;<br /> Lothstraße 64 (Raum R0.013)&lt;br&gt;<br /> 80335 München<br /> | fon=+49-89-1265-3777<br /> | fax=+49-89-1265-3000<br /> | email=info (ät) fs.cs.hm.edu<br /> | link1=<br /> }}<br /> <br /> {{FSListe Zeile<br /> | stadt=München<br /> | hochschule=[[LMU München]]<br /> | anschrift=<br /> Fachschaft GAF&lt;br&gt;<br /> Theresienstr. 39 (Raum B038)&lt;br&gt;<br /> 80333 München<br /> | fon=+49-89-2180-4382<br /> | fax=+49-89-2180-99-4382<br /> | email=gaf (ät) fs.lmu.de<br /> | email_domains=lmu.de,uni-muenchen.de<br /> }}<br /> <br /> {{FSListe Zeile<br /> | stadt=München<br /> | hochschule=[[TU München]]/[[TUM]]<br /> | anschrift=<br /> Fachschaft Mathe/Physik/Informatik&lt;br&gt;<br /> Boltzmannstr. 3 (Raum 00.06.036)&lt;br&gt;<br /> 85748 Garching<br /> | besucheradresse=<br /> <br /> | fon=+49-89-289-18545<br /> | fax=+49-89-289-18546<br /> | email=fsinfo (ät) fs.tum.de<br /> | link1=<br /> | email_domains=tum.de,tum.edu<br /> }}<br /> <br /> {{FSListe Zeile<br /> | stadt=Münster<br /> | hochschule=[[WWU Münster]]<br /> | anschrift=<br /> Fachschaft Mathematik und Informatik&lt;br&gt;<br /> Westfälische Wilhelms-Universität&lt;br&gt;<br /> Raum 010&lt;br&gt;<br /> Einsteinstraße 62&lt;br&gt;<br /> 48149 Münster<br /> | fon=+49-251-83-33713<br /> | email=fsmi (ät) uni-muenster.de<br /> | link1=https://www.uni-muenster.de/FSMI<br /> | email_domains=uni-muenster.de,wwu.de<br /> }}<br /> <br /> <br /> <br /> <br /> {{FSListe Zeile<br /> | stadt=Niederrhein<br /> | hochschule=[[HS Niederrhein]]<br /> | anschrift=<br /> | fon=+49-2151-822-4695<br /> | email=fsr03(ät)hs-niederrhein.de<br /> | link1=[https://www.hs-niederrhein.de/elektrotechnik-informatik/studierende/fsr03/ FSR Homepage]<br /> | link2=[https://www.facebook.com/fachschaft03/ Facebook]<br /> }}<br /> <br /> <br /> {{FSListe Zeile<br /> | stadt=Nordhausen<br /> | hochschule=[[HS Nordhausen]]<br /> | anschrift=<br /> | email=fsr_iae(ät)hs-nordhausen.de<br /> | link1=[https://www.hs-nordhausen.de/forschung/iae-institut-fuer-informatik-automatisierung-und-elektronik/fsr-iae/ FSR Homepage]<br /> }}<br /> <br /> {{FSListe Zeile<br /> | stadt=Nürnberg<br /> | hochschule=[[TH Nürnberg]]<br /> | anschrift=<br /> Technische Hochschule Nürnberg&lt;br&gt;<br /> Fachschaft Informatik&lt;br&gt;<br /> Keßlerplatz 12&lt;br&gt;<br /> 90489 Nürnberg<br /> | besucheradresse=<br /> Fachschaft Informatik&lt;br&gt;<br /> Raum HQ.012&lt;br&gt;<br /> Hohfederstr. 40&lt;br&gt;<br /> 90489 Nürnberg<br /> | fon=+49-911-5880-1620<br /> | fax=<br /> | email=in-fachschaft (ät) th-nuernberg.de<br /> | link1=[https://fachschaft.informatik.fh-nuernberg.de/ Homepage]<br /> | link2=[https://twitter.com/fachschaftin Twitter]<br /> | link3=[https://www.facebook.com/fachschaftin Facebook]<br /> }}<br /> <br /> {{FSListe Zeile<br /> | stadt=[[Offenburg]]<br /> | hochschule=[[HS Offenburg]]<br /> | anschrift=<br /> | email=asta(ät)hs-offenburg.de<br /> | link1=[https://asta.hs-offenburg.de/kontakt/ AStA]<br /> | link2=[https://emi.hs-offenburg.de/ansprechpartnerinnen/fachschaftsvertretung/ Fachschaftsvertretung]<br /> }}<br /> <br /> {{FSListe Zeile<br /> | stadt=[[Oldenburg]]<br /> | hochschule=[[Uni Oldenburg]]<br /> | anschrift=<br /> Fachschaft Informatik&lt;br&gt;<br /> Carl von Ossietzky Universität&lt;br&gt;<br /> 26111 Oldenburg<br /> | fon=+49-441-7982933<br /> | email=oldenburg (ät) fachschaft-informatik.de<br /> }}<br /> <br /> {{FSListe Zeile<br /> | stadt=Osnabrück<br /> | hochschule=[[Uni Osnabrück]]<br /> | anschrift=<br /> Fachschaft Informatik&lt;br&gt;<br /> Albrechtstraße 28a (69/E20)&lt;br&gt;<br /> 49076 Osnabrück<br /> | email=fs-mathinf@uos.de<br /> | link1=https://www.fachschaft.mathinf.uni-osnabrueck.de/startseite.html<br /> }}<br /> <br /> {{FSListe Zeile<br /> | stadt=Osnabrück<br /> | hochschule=[[HS Osnabrück]]<br /> | anschrift=<br /> Fachschaftsrat Ingenieurwissenschaften und Informatik&lt;br&gt;<br /> Gebäude AE&lt;br&gt;<br /> Barbarastraße 7a&lt;br&gt;<br /> 49076 Osnabrück<br /> | fon=+49-541-969-2938<br /> | email=iui(ät)hochschulfreun.de<br /> | link1=[https://hochschulfreun.de/profil/fachschaft-ingenieurwissenschaften-und-informatik/ Homepage FS]<br /> }}<br /> <br /> {{FSListe Zeile<br /> | stadt=Sudeburg<br /> | hochschule=[[FH Ostfalia - Campus Sudeburg]]<br /> | anschrift=<br /> Fachschaftsrat Ingenieurwissenschaften und Informatik&lt;br&gt;<br /> Gebäude AE&lt;br&gt;<br /> Barbarastraße 7a&lt;br&gt;<br /> 49076 Osnabrück<br /> | fon1=+49-5826-988 61910 <br /> | fon2=+29-5826-988-15804 <br /> | email=fara-b(ät)ostfalia.de (Fakultät B) <br /> | email= fara-h(ät)ostfalia.de (Fakultät H)<br /> | link1=[https://www.ostfalia.de/cms/de/b/fakultaet/studentische-vertretung/fachschaftsrat/ Homepage FS]<br /> }}<br /> <br /> {{FSListe Zeile<br /> | stadt=Wolfenbüttel<br /> | hochschule=[[FH Ostfalia - Campus Wolfenbüttel]]<br /> | anschrift=<br /> | fon1=+49-5331-939-32900<br /> | email= fara-i(ät)ostfalia.de<br /> | link1=[https://www.ostfalia.de/cms/de/i/fakultaet/studentische-vertretung/ Homepage FARA-I]<br /> | link2=[https://www.facebook.com/fachschaftsrat.informatik/ Facebook]<br /> }}<br /> <br /> {{FSListe Zeile<br /> | stadt=Paderborn<br /> | hochschule=[[Uni Paderborn]]<br /> | anschrift=<br /> Fachschaft Mathematik/Informatik&lt;br/&gt;<br /> Universität Paderborn&lt;br/&gt;<br /> Warburger Straße 100&lt;br/&gt;<br /> 33098 Paderborn<br /> | besucheradresse=<br /> Raum E1.311&lt;br/&gt;<br /> Universität Paderborn&lt;br/&gt;<br /> Warburger Straße 100&lt;br/&gt;<br /> 33098 Paderborn<br /> | fon=+49-5251-60-3260<br /> | email=fsmi (ät) uni-paderborn.de<br /> | link1=https://die-fachschaft.de/<br /> | email_domains=uni-paderborn.de,upb.de<br /> }}<br /> <br /> {{FSListe Zeile<br /> | stadt=Passau<br /> | hochschule=[[Uni Passau]]<br /> | anschrift=<br /> Fachschaftsvertretung Fakultät für Informatik und Mathematik&lt;br&gt;<br /> Innstraße 33, Zimmer 244&lt;br&gt;<br /> 94032 Passau<br /> | fon=+49-851-509-3004<br /> | fax=+49-851-509-3209<br /> | email=fsinfo (ät) fim.uni-passau.de<br /> | link1=http://fsinfo.fim.uni-passau.de/<br /> | email_domains=uni-passau.de<br /> }}<br /> <br /> {{FSListe Zeile<br /> | stadt= Potsdam<br /> | hochschule=[[Uni Potsdam]]<br /> | anschrift=<br /> Universität Potsdam&lt;br&gt;<br /> Institut für Informatik &amp;&lt;br&gt;<br /> Computational Science&lt;br&gt;<br /> Fachschaftsrat Informatik&lt;br&gt;<br /> August-Bebel-Straße 89&lt;br&gt;<br /> Haus 4 / Raum 2.06&lt;br&gt;<br /> 14482 Potsdam<br /> | besucheradresse=<br /> | email= fsr (ät) cs.uni-potsdam.de<br /> | fon=+49-331-977-3153<br /> | link1=[https://fsr.cs.uni-potsdam.de/ Homepage FSRI]<br /> }}<br /> <br /> <br /> {{FSListe Zeile<br /> | stadt=Potsdam<br /> | hochschule=[[Hasso-Plattner-Institut]]<br /> | anschrift=<br /> Fachschaftsrat Digital Engineering&lt;br&gt;<br /> Hasso-Plattner-Institut für Softwaresystemtechnik GmbH&lt;br&gt;<br /> Prof.-Dr.-Helmert-Str. 2-3&lt;br&gt;<br /> 14482 Potsdam<br /> | fon=+49-331-5509-255<br /> | email=fachschaftsrat (ät) hpi.de<br /> | link1=[http://myhpi.de Website]<br /> | link2=[https://twitter.com/fachschaftsrat @fachschaftsrat]<br /> | email_domains=hpi.de<br /> }}<br /> <br /> {{FSListe Zeile<br /> | stadt=Regensburg<br /> | hochschule=OTH Regensburg<br /> | anschrift=<br /> Fachschaft Informatik Mathematik&lt;br&gt;<br /> OTH Regensburg&lt;br&gt;<br /> Galgenbergstraße 32&lt;br&gt;<br /> 93053 Regensburg<br /> | besucheradresse=<br /> Fachschaft Informatik Mathematik&lt;br&gt;<br /> Raum K033&lt;br&gt;<br /> Galgenbergstraße 32&lt;br&gt;<br /> 93053 Regensburg<br /> | fon=+49-941-943-1276<br /> | fax=<br /> | email= fsim@fsim-ev.de<br /> | email= fachschaft_im@oth-regensburg.de<br /> | link1= [https://fsim-ev.de Website]<br /> | email_domains=oth-regensburg.de<br /> }}<br /> <br /> {{FSListe Zeile<br /> | stadt=Reutlingen<br /> | hochschule=[[HS Reutlingen]]<br /> | anschrift=<br /> | besucheradresse=<br /> | fon=<br /> | fax=<br /> | email=INF.Fachschaft@Reutlingen-University.de<br /> | link1=[https://fsi.reutlingen-university.de FSI Homepage]<br /> | email_domains=<br /> }}<br /> <br /> <br /> {{FSListe Zeile<br /> | stadt=Wiesbaden<br /> | hochschule=[[TH Rosenheim]]<br /> | email=fachschaft.inf(ät)fh-rosenheim.de<br /> | link1=[https://www.th-rosenheim.de/die-hochschule/fakultaeten-institute/fakultaet-fuer-informatik/ansprechpartner/fachschaft/ FS Fakultät Informatik]<br /> | link2=[https://www.facebook.com/FachschaftINF/ Facebook]<br /> }}<br /> <br /> <br /> {{FSListe Zeile<br /> | stadt=Wiesbaden<br /> | hochschule=[[HS Rheinmain]]<br /> | email=fachschaft-ing(ät)hs-rm.de <br /> | link1=[https://www.asta-hsrm.de/gremien/fsr/ing/ FSR Ingenieurwissenschaften]<br /> }}<br /> <br /> {{FSListe Zeile<br /> | stadt=Rostock<br /> | hochschule=[[Universität Rostock]]<br /> | anschrift=<br /> Fachschaftsrat Informatik&lt;br&gt;<br /> Raum 138&lt;br&gt;<br /> Albert-Einstein-Straße 22&lt;br&gt;<br /> 18051 Rostock<br /> | email=fachschaft.informatik (ät) uni-rostock.de<br /> | email_domains=uni-rostock.de<br /> }}<br /> <br /> <br /> {{FSListe Zeile<br /> | stadt=Müllheim an der Ruhr und Bottrop<br /> | hochschule=[[HS Ruhr West(HRW)]]<br /> | anschrift=<br /> | email=fachschaft1(ät)hs-ruhrwest.de<br /> | link1=[https://www.hochschule-ruhr-west.de/die-hrw/leitung-und-gremien/gremien/studierendenvertretung/fachschaftsvertretung-1/ Homepage FS1]<br /> | link2=[https://www.facebook.com/FSV1HRW/ Facebook]<br /> }}<br /> <br /> {{FSListe Zeile<br /> | stadt=Saarbrücken<br /> | hochschule=[[Universität des Saarlandes]]<br /> | anschrift=<br /> Student Council Computer Science Courses&lt;br&gt;<br /> PO Box 151150&lt;br&gt;<br /> D-66041 Saarbruecken<br /> | besucheradresse=<br /> Student Council Computer Science Courses Campus&lt;br&gt;<br /> Building E1.3, Room 109&lt;br&gt;<br /> D-66123 Saarbruecken<br /> | fon=+49681302–4389<br /> | fax=+49681302–2315<br /> | email=<br /> | link1=[https://cs.fs.uni-saarland.de Website]<br /> | email_domains=uni-saarland.de<br /> }}<br /> <br /> {{FSListe Zeile<br /> | stadt=Saarland<br /> | hochschule=[[HTW Saar]]<br /> | anschrift=<br /> Goebenstraße 40&lt;br&gt;<br /> 66117 Saarbrücken<br /> | fon=+49-681-5867-277<br /> | email= fs-i(ät)htwsaar.de<br /> | link1=[http://stud-i.htwsaar.de/ Homepage FS MSI]<br /> | link2=[https://www.instagram.com/fachschaftmsi/ Instagram]<br /> }}<br /> <br /> {{FSListe Zeile<br /> | stadt=Sankt Augustin<br /> | hochschule=[[HS Bonn-Rhein-Sieg]]<br /> | anschrift=<br /> Grantham-Allee 20&lt;br&gt;<br /> Raum A 051&lt;br&gt;<br /> 53757 Sankt Augustin<br /> | fon=+49-2241-865-662<br /> | email= fs-inf (ät) h-brs.de <br /> | link1 = [https://stud.inf.h-brs.de/cms/startseite Homepage(extern) FSI]<br /> | link2 = [https://www.h-brs.de/de/fachschaftsrat-informatik Homepage]<br /> }}<br /> <br /> {{FSListe Zeile<br /> | stadt=Schmalkalden<br /> | hochschule=[[FH Schmalkalden]]<br /> | anschrift=<br /> Fachschaftsrat Informatik&lt;br&gt;<br /> Am Schwimmbad&lt;br&gt;<br /> 98574 Schmalkalden<br /> | besucheradresse=<br /> <br /> | fon=<br /> | fax=<br /> | email=fsi (at) fh-schmalkalden.de<br /> | link1=[http://www.facebook.com/pages/Fachschaftsrat-Informatik-FH-Schmalkalden/160522674077939 Facebook]<br /> | email_domains=hs-schmalkalden.de<br /> }}<br /> <br /> <br /> {{FSListe Zeile<br /> | stadt= Siegen<br /> | hochschule=[[Uni Siegen]]<br /> | anschrift=<br /> Fachschaftsrat ETI&lt;br&gt;<br /> Elektrotechnik und Informatik&lt;br&gt;<br /> Hölderlinstr. 3&lt;br&gt;<br /> 57068 Siegen<br /> | besucheradresse=<br /> | email=alle (ät) fsr-eti.de<br /> | fon=+49-271-740-4452<br /> | link1=[http://www.fsr-eti.de Homepage FSR ETI]<br /> }}<br /> <br /> {{FSListe Zeile<br /> | stadt= St. Pölten<br /> | hochschule=[[FH St. Pölten]]<br /> | anschrift=<br /> | email=stv.dis(ät)fhstp.ac.at <br /> | link1=[https://oeh.fhstp.ac.at/stv/stvdis/ Homepage STV DIS]<br /> }}<br /> <br /> {{FSListe Zeile<br /> | stadt= Steinfurt<br /> | hochschule=[[FH Münster - Campus Steinfurt]]<br /> | anschrift=<br /> Gemeinsamer Fachschaftsrat Steinfurt&lt;br&gt;<br /> Stegerwaldstraße 39, N-Gebäude Raum 13&lt;br&gt;<br /> 48565 Steinfurt<br /> | email=gfsr-st(ät)fh-muenster.de<br /> | link1=[https://www.fh-muenster.de/gfsr-st/index.php Homepage GFSR]<br /> | link2=[https://www.instagram.com/gfsrsteinfurt/ Instagram]<br /> | link3=[https://www.facebook.com/FachschaftSteinfurt/ Facebook]<br /> }}<br /> <br /> {{FSListe Zeile<br /> | stadt=Stralsund<br /> | hochschule=[[FH Stralsund]]<br /> | anschrift=<br /> Hochschule Stralsund&lt;br&gt;<br /> Fakultätsrat der Fakultät ETI&lt;br&gt;<br /> Zur Schwedenschanze 15&lt;br&gt;<br /> 18435 Stralsund<br /> | besucheradresse=<br /> | fon=+49-3831-455<br /> | email=fachschaft.eti(ät)hochschule-stralsund.de<br /> | link1=[https://www.hochschule-stralsund.de/host/fakultaeten/elektrotechnik-und-informatik/fachschaftsrat-eti/fachschaft-eti/ FS ETI]<br /> | link2=[https://www.facebook.com/fsetihost/ Facebook]<br /> | link3=[https://www.instagram.com/fachschaft_eti_hst/ Instagram]<br /> }}<br /> <br /> {{FSListe Zeile<br /> | stadt=Stuttgart<br /> | hochschule=[[DHBW Stuttgart]]<br /> | anschrift=<br /> | email=stuv(ät)dhbw-stuttgart.de<br /> | link1=[https://stuv-stuttgart.de/ Studienvertretung]<br /> | link2=[https://www.facebook.com/studierendenvertretung.dhbw.stuttgart Facebook]<br /> }}<br /> <br /> <br /> {{FSListe Zeile<br /> | stadt=Stuttgart<br /> | hochschule=[[HdM Stuttgart]]<br /> | anschrift=<br /> Verfasste Studierendenschaft&lt;br&gt;<br /> Nobelstraße 10&lt;br&gt;<br /> 70569 Stuttgart<br /> | email=vs(ät)hdm-stuttgart.de<br /> | link1=[https://www.hdm-stuttgart.de/studierende/erstsemester/gruppen Verfasste Studierendenschaft]<br /> }}<br /> <br /> <br /> <br /> {{FSListe Zeile<br /> | stadt=Stuttgart<br /> | hochschule=[[HfT Stuttgart]]<br /> | anschrift=<br /> | fon= +49-711-8926-2644<br /> | email= asta(ät)hft-stuttgart.de <br /> | link1=[https://www.hft-stuttgart.de/hft/verfasste-studierendenschaft Verfasste Studierendenschaft]<br /> }}<br /> <br /> {{FSListe Zeile<br /> | stadt=Stuttgart<br /> | hochschule=[[Uni Stuttgart]]<br /> | anschrift=<br /> Fachgruppe Informatik der Universität Stuttgart (FIUS) &lt;br&gt;<br /> Raum 0.001&lt;br&gt;<br /> Universitätsstr. 38&lt;br&gt;<br /> 70569 Stuttgart<br /> | besucheradresse=<br /> <br /> | fon=+49-711-685-88367<br /> | fax=<br /> | email=fius (ät) informatik.uni-stuttgart.de<br /> | link1=[http://fius.informatik.uni-stuttgart.de/ unsere Webseite]<br /> | link2=[http://www.facebook.com/fsinf/ Facebook]<br /> | email_domains=uni-stuttgart.de<br /> }}<br /> <br /> {{FSListe Zeile<br /> | stadt=Iserlohn<br /> | hochschule=[[FH Südwestfalen - Campus Iserlohn]]<br /> | anschrift=<br /> Raum HE 01&lt;br&gt;<br /> Frauenstuhlweg 31&lt;br&gt;<br /> 58644 Iserlohn<br /> | fon=+49-2371-566-3010<br /> | email=fachschaft.in(ät)fh-swf.de<br /> | link1=[https://www4.fh-swf.de/de/home/ueber_uns/standorte/is/fb_in/fachschaft_4/index.php# Homepage]<br /> | link2=[https://www.facebook.com/FachschaftIuN Facebook]<br /> }}<br /> <br /> {{FSListe Zeile<br /> | stadt=Hagen<br /> | hochschule=[[FH Südwestfalen - Campus Hagen]]<br /> | anschrift=<br /> Fachschaftsrat des Fachbereichs Elektrotechnik und Informationstechnik&lt;br&gt;<br /> Raum 413&lt;br&gt;<br /> Haldener Str. 182&lt;br&gt;<br /> 58095 Hagen<br /> | fon=+49-2331-933-0806<br /> | email=fachschaft.et(ät)fh-swf.de<br /> | link1=[https://www4.fh-swf.de/de/home/ueber_uns/standorte/ha/fb_ei/fachschaft_3/Fachschaft.php Homepage FS]<br /> }}<br /> <br /> {{FSListe Zeile<br /> | stadt=Iserlohn<br /> | hochschule=[[FH Südwestfalen - Campus Iserlohn]]<br /> | anschrift=<br /> Raum HE 01&lt;br&gt;<br /> Frauenstuhlweg 31&lt;br&gt;<br /> 58644 Iserlohn<br /> | fon=+49-2371-566-3010<br /> | email=fachschaft.in@fh-swf.de<br /> | link1=[https://www4.fh-swf.de/de/home/ueber_uns/standorte/is/fb_in/fachschaft_4/index.php# Homepage]<br /> | link2=[https://www.facebook.com/FachschaftIuN Facebook]<br /> }}<br /> <br /> {{FSListe Zeile<br /> | stadt= Trier<br /> | hochschule=[[HS Trier]]<br /> | anschrift=<br /> Fachschaftsrat Informatik&lt;br&gt;<br /> Schneidershof&lt;br&gt;<br /> 54293 Trier&lt;br&gt;<br /> Gebäude L<br /> | besucheradresse=<br /> | email=rat(ät)fsi.hochschule-trier.de<br /> | fon=+49-651-810-3419<br /> | link1=[https://fsi.hochschule-trier.de/ Homepage FSI]<br /> | link2=[https://www.facebook.com/fsi.hochschule.trier.de Facebook]<br /> | link3=[https://twitter.com/fsri Twitter]<br /> }}<br /> <br /> {{FSListe Zeile<br /> | stadt= Trier<br /> | hochschule=[[Uni Trier]]<br /> | anschrift=<br /> Fachschaftsrat Informatik&lt;br&gt;<br /> Universität Trier&lt;br&gt;<br /> Campus 2, Raum H 508&lt;br&gt;<br /> Behringstraße 21&lt;br&gt;<br /> 54296 Trier<br /> | besucheradresse=<br /> | email=fsrinfo (ät) uni-trier.de<br /> | fon=+49-651-201-2829<br /> | link1=[https://www.uni-trier.de/index.php?id=12252 Homepage FSI]<br /> }}<br /> <br /> {{FSListe Zeile<br /> | stadt=Tübingen<br /> | hochschule=[[Uni Tübingen]]<br /> | anschrift=<br /> Fachschaft Informatik&lt;br&gt;<br /> Universität Tübingen&lt;br&gt;<br /> Sand 14, Raum C125&lt;br&gt;<br /> 72076 Tübingen<br /> | fon=+49-7071-2970413<br /> | fax=<br /> | email=fsi (ät) fsi.uni-tuebingen.de<br /> | link1=<br /> | email_domains=uni-tuebingen.de<br /> }}<br /> <br /> {{FSListe Zeile<br /> | stadt=Ulm<br /> | hochschule=[[Uni Ulm]]<br /> | anschrift=<br /> FIN&lt;br&gt;<br /> Universität Ulm&lt;br&gt;<br /> c/o AStA - BECI&lt;br&gt;<br /> 89069 Ulm<br /> | fon=+49-731-50-22407<br /> | email=fin (ät) uni-ulm.de<br /> | email_domains=uni-ulm.de<br /> }}<br /> <br /> <br /> {{FSListe Zeile<br /> | stadt=Ulm<br /> | hochschule=[[HS Ulm]]<br /> | anschrift=<br /> Verfasste Studierendenschaft&lt;br&gt;<br /> Prittwitzstraße 10&lt;br&gt;<br /> 89075 Ulm<br /> | fon=+49-731-50-28161<br /> | email=vs(ät)thu.de<br /> | link1=[https://studium.hs-ulm.de/de/Seiten/Verfasste_Studierendenschaft.aspx Verfasste Studierendenschaft]<br /> }}<br /> <br /> {{FSListe Zeile<br /> | stadt=Weingarten<br /> | hochschule=[[HS Ravensburg-Weingarten]]<br /> | anschrift=<br /> RWU Hochschule Ravensburg-Weingarten&lt;br&gt;<br /> University of Applied Sciences&lt;br&gt;<br /> FSE - Fachschaft Elektrotechnik und Informatik (VS)&lt;br&gt;<br /> Postfach 30 22&lt;br&gt;<br /> D 88216 Weingarten <br /> | besucheradresse=<br /> Gebäude T&lt;br&gt;<br /> Raum 008&lt;br&gt;<br /> Doggenriedstr. 42&lt;br&gt;<br /> 88250 Weingarten<br /> | email=fse(ät)rwu.de<br /> | link1=[https://www.rwu.de/hochschule/einrichtungen/fse-fachschaft-elektrotechnik-und-informatik-vs#edit-group-profile Homepage FSE]<br /> }}<br /> <br /> {{FSListe Zeile<br /> | stadt=Wedel<br /> | hochschule=[[FH Wedel]]<br /> | anschrift=<br /> | fon=+49-4103-8048-62<br /> | email= asta(ät)fh-wedel.de<br /> -wedel.de/ Homepage AStA]<br /> }}<br /> <br /> {{FSListe Zeile<br /> | stadt=Weimar<br /> | hochschule=[[Uni Weimar]]<br /> | anschrift=<br /> Bauhaus-Universität Weimar&lt;br&gt;<br /> FachschaftsRat Medien&lt;br&gt;<br /> Marienstraße 18&lt;br&gt;<br /> 99423 Weimar<br /> | besucheradresse=<br /> <br /> | fon=<br /> | fax=<br /> | email= fachschaft@medien.uni-weimar.de<br /> | link1=[https://m18.uni-weimar.de/fsr/m Homepage]<br /> }}<br /> <br /> {{FSListe Zeile<br /> | stadt=Bocholt<br /> | hochschule=[[Westfälische HS - Campus Bocholt]]<br /> | anschrift=<br /> | email=oeffentlichkeit(ät)fachschaftinformatik.de<br /> | link1=[https://fachschaftinformatik.de/ FS Informatik]<br /> | link2=[https://www.facebook.com/fachschaft.informatik Facebook]<br /> | link3=[https://www.instagram.com/fs_informatik/ Instagram]<br /> | link4=[https://twitter.com/fs_Informatik Twitter]<br /> }}<br /> <br /> <br /> {{FSListe Zeile<br /> | stadt=Gelsenkirchen<br /> | hochschule=[[Westfälische HS - Campus Gelsenkirchen]]<br /> | anschrift=<br /> | email=oeffentlichkeit.elektrotechnik(ät)fsv-whs.de<br /> | link1=[https://www.facebook.com/FSV.WHS/ Facebook]<br /> }}<br /> <br /> {{FSListe Zeile<br /> | stadt=Wien<br /> | hochschule=[[TU Wien]]<br /> | anschrift=<br /> Technische Universität Wien&lt;br&gt;<br /> Fachschaft Informatik&lt;br&gt;<br /> Treitlstrasse 3, Hochparterre&lt;br&gt;<br /> A-1040 Wien<br /> | besucheradresse=<br /> <br /> | fon=+43-1-58801-49549<br /> | fax=<br /> | email=fsinf (ät) fsinf.at<br /> | link1=[http://fsinf.at Homepage]<br /> | link2=[irc://irc.fsinf.at IRC]<br /> | link3=[https://frost.fsinf.at/iris/ WebIRC]<br /> }}<br /> <br /> {{FSListe Zeile<br /> | stadt= Wiesbaden<br /> | hochschule=[[HS RheinMain]]<br /> | anschrift=<br /> Hochschule RheinMain&lt;br&gt;<br /> Fachbereich Design Informatik Medien&lt;br&gt;<br /> – Fachschaftsrat –&lt;br&gt;<br /> Unter den Eichen 5&lt;br&gt;<br /> 65195 Wiesbaden<br /> | besucheradresse=<br /> <br /> | fon=+49-611-94952503<br /> | fax=<br /> | email=fsr-ude (ät) hs-rm.de<br /> | link1=[https://www.asta-hsrm.de/fachschaften/ude/ Website]<br /> | link2=[https://www.facebook.com/FSRUdE/ Facebook]<br /> | email_domains=hs-rm.de<br /> }}<br /> <br /> {{FSListe Zeile<br /> | stadt=Wismar<br /> | hochschule=[[HS Wismar]]<br /> | anschrift=<br /> Fachschaftsrat Elektrotechnik und Informatik&lt;br&gt;<br /> Postfach 1210&lt;br&gt;<br /> 23952 Wismar<br /> | besucheradresse=<br /> Haus 16 Raum 105<br /> | email=fachschaftsrat-eui(ät)hs-wismar.de<br /> | link1=[https://fiw.hs-wismar.de/en/fsr-eui/ FSR EuI]<br /> | link2=[https://www.facebook.com/FsrEuI/ Facebook]<br /> }}<br /> <br /> {{FSListe Zeile<br /> | stadt=Wuppertal<br /> | hochschule=[[Uni Wuppertal]]<br /> | anschrift=<br /> Erenburgerstraße 19&lt;br&gt;<br /> 67549 Worms&lt;br&gt;<br /> | besucheradresse=<br /> Büroraum G208<br /> | fon=+49-6241-509-185<br /> | email=fsinf(ät)hs-worms.de<br /> | link1=[https://fsinf.hs-worms.de/ FS Informatik]<br /> | link2[https://www.facebook.com/FSinfWorms/ Facebook]<br /> | link3=[https://www.instagram.com/fsinfo_worms/ Facebook]<br /> }}<br /> <br /> <br /> <br /> {{FSListe Zeile<br /> | stadt=Wuppertal<br /> | hochschule=[[Uni Wuppertal]]<br /> | anschrift=<br /> Fachschaft für Mathematik und Naturwissenschaften&lt;br&gt;<br /> Gaußstr. 20&lt;br&gt;<br /> 42119 Wuppertal<br /> | besucheradresse=<br /> Raum D.13.05<br /> <br /> | fon=+49-0202-439-3355<br /> | fax=<br /> | email=fsmathe@uni-wuppertal.de<br /> | link1=[https://www.fsmathe.uni-wuppertal.de/ Website]<br /> | email_domains=uni-wuppertal.de<br /> }}<br /> <br /> {{FSListe Zeile<br /> | stadt=Würzburg<br /> | hochschule=[[Uni Würzburg]]<br /> | anschrift=<br /> Fachschaft Mathematik und Informatik&lt;br&gt;<br /> Informatikgebäude am Hubland Zi A006&lt;br&gt;<br /> 97074 Würzburg<br /> | besucheradresse=<br /> <br /> | fon=+49-931-318-6760<br /> | fax=<br /> | email=fmi@uni-wuerzburg.de<br /> | link1=<br /> | email_domains=uni-wuerzburg.de<br /> }}<br /> <br /> <br /> {{FSListe Zeile<br /> | stadt=Würzburg<br /> | hochschule=[[HAW Würzburg-Schweinfurt]]<br /> | anschrift=<br /> | besucheradresse=<br /> | email=fiw(ät)studi.fhws.de<br /> | link1=[https://www.facebook.com/FachschaftFIW/ Facebook]<br /> }}<br /> <br /> {{FSListe Zeile<br /> | stadt=Zürich<br /> | hochschule=[[ETH Zürich]]<br /> | anschrift=<br /> VIS&lt;br&gt;<br /> CAB E 31&lt;br&gt;<br /> Universitätstr. 6&lt;br&gt;<br /> ETH Zentrum&lt;br&gt;<br /> 8092 Zürich<br /> | besucheradresse=<br /> | fon=<br /> | fax=<br /> | link1=[https://vis.ethz.ch/ Website]<br /> | email=vis@vis.ethz.ch<br /> | email_domains=ethz.ch<br /> }}<br /> <br /> {{FSListe Zeile<br /> | stadt=Zürich<br /> | hochschule=[[Universität Zürich]]<br /> | anschrift=<br /> | besucheradresse=<br /> | fon=<br /> | fax=<br /> | email=info@icu.uzh.ch<br /> | link1=[https://www.icu.uzh.ch Website]<br /> | email_domains=<br /> }}<br /> <br /> <br /> {{FSListe Zeile<br /> | stadt=Zwickau<br /> | hochschule=[[FH Zwickau]]<br /> | anschrift=<br /> | besucheradresse=<br /> | email=fachschaftsrat.pti(ät)fh-zwickau.de<br /> | link1=[https://www.fh-zwickau.de/pti/startseite/fachschaftsrat-physikalische-technik-informatik/ FSR Physikalische Technik/Informatik]<br /> | link2=[https://www.facebook.com/fsrpti/ Facebook]<br /> | link3=[https://www.instagram.com/fachschaftsrat.pti.whz/ Instagram]<br /> }}<br /> <br /> |}<br /> <br /> ----<br /> <br /> Einige häufig auf der KIF vertretene Fachschaften sind auch in der [[:Kategorie:Fachschaft|Kategorie Fachschaft]] zu finden.<br /> [[Kategorie:Hauptkategorie]]</div> 2003:C8:6F12:4200:31A4:EB2F:8FC8:321C https://wiki.kif.rocks/w/index.php?title=KIF490:Einf%C3%BChrung_in_Ansible_(einfach_wartbare,_reproduzierbare_Systemkonfigurationen)&diff=45345 KIF490:Einführung in Ansible (einfach wartbare, reproduzierbare Systemkonfigurationen) 2021-05-17T23:42:17Z <p>2003:C8:6F12:4200:31A4:EB2F:8FC8:321C: don't use classes for containers</p> <hr /> <div><br /> = Ansible Quickstart =<br /> <br /> <br /> == What? ==<br /> <br /> * Automation framework<br /> * Open Source<br /> * use cases<br /> ** software deployment<br /> ** configuration management<br /> ** infrastructure service orchestration<br /> ** security automation<br /> <br /> <br /> Docs: [https://docs.ansible.com/ https://docs.ansible.com/]<br /> <br /> == How? ==<br /> <br /> <br /> === Define hosts (hosts file) ===<br /> <br /> * in &lt;code&gt;/etc/ansible/hosts&lt;/code&gt; or whatever is configured in &lt;code&gt;/etc/ansible/ansible.cfg&lt;/code&gt;<br /> * or by supplying it to an ansible command with &lt;code&gt;-i&lt;/code&gt;<br /> * which hosts are we addressing? how to connect to them?<br /> * in ini format or YAML<br /> * hosts will later be identified by this name<br /> * hosts can be grouped to apply actions to whatever hosts are in a group<br /> * ini example:<br /> <br /> &lt;syntaxhighlight lang=&quot;ini&quot;&gt;<br /> mail.example.com<br /> <br /> [webservers]<br /> foo.example.com<br /> bar.example.com<br /> <br /> [webservers:vars]<br /> port_for_thing=8080<br /> <br /> [dbservers]<br /> one.example.com<br /> two.example.com<br /> test_server ansible_host=three.example.com<br /> &lt;/syntaxhighlight&gt;<br /> * YAML example:<br /> <br /> &lt;syntaxhighlight lang=&quot;yaml&quot;&gt;<br /> all:<br /> hosts:<br /> mail.example.com:<br /> children:<br /> webservers:<br /> hosts:<br /> foo.example.com:<br /> bar.example.com:<br /> vars:<br /> port_for_thing: 8080<br /> dbservers:<br /> hosts:<br /> one.example.com:<br /> two.example.com:<br /> test_server:<br /> ansible_host: three.example.com<br /> &lt;/syntaxhighlight&gt;<br /> * default groups: &lt;code&gt;all&lt;/code&gt; and &lt;code&gt;ungrouped&lt;/code&gt;<br /> * also nice: ranges of hosts<br /> <br /> &lt;syntaxhighlight lang=&quot;yaml&quot;&gt;<br /> webservers:<br /> hosts:<br /> www[01:50].example.com<br /> &lt;/syntaxhighlight&gt;<br /> * example host file from the kif minetest server:<br /> <br /> &lt;syntaxhighlight lang=&quot;yaml&quot;&gt;<br /> all:<br /> hosts:<br /> kif_minetest:<br /> &lt;/syntaxhighlight&gt;<br /> * ...and the rest is specified in the &lt;code&gt;~/.ssh/config&lt;/code&gt; (ssh jumps, key file etc.)<br /> * dynamic inventory possible<br /> <br /> <br /> === Writing playbooks ===<br /> <br /> * in YAML<br /> * specify tasks which will be run in sequence<br /> * descriptive: tasks describe desired state, we don't worry about how it is achieved<br /> * name for identification<br /> * module with parameters ([https://docs.ansible.com/ansible/latest/collections/ look at the docs])<br /> * optional meta stuff<br /> ** &lt;code&gt;vars&lt;/code&gt;: variables to pass in (e.g. if templating a file)<br /> ** &lt;code&gt;with_items&lt;/code&gt; etc.: items for each to run this task<br /> ** &lt;code&gt;when&lt;/code&gt;: conditionals to skip the task if not met<br /> ** &lt;code&gt;tags&lt;/code&gt; to attach to run only or exclude specific subsets of tasks on runtime<br /> * rule of thumb: don't be more clever than you need to, simplicity &amp;amp; readability first!<br /> * run playbooks with &lt;code&gt;ansible-playbook -i my_hosts_file.yml example_playbook.yml&lt;/code&gt;<br /> <br /> <br /> Example 1: Simple minetest server install on Ubuntu<br /> &lt;syntaxhighlight lang=&quot;yaml&quot;&gt;<br /> ---<br /> - hosts: all<br /> tasks:<br /> - name: Install newest minetest server<br /> apt:<br /> pkg:<br /> - minetest-server<br /> state: latest<br /> update_cache: true<br /> cache_valid_time: 86400 # One day<br /> become: true<br /> &lt;/syntaxhighlight&gt;<br /> <br /> This playbook has just one task it will run on any target specified in the inventory.&lt;br&gt;<br /> We use [https://docs.ansible.com/ansible/latest/collections/ansible/builtin/apt_module.html the &lt;code&gt;apt&lt;/code&gt; module] to update the cache if older than a day and install the &lt;code&gt;minetest-server&lt;/code&gt; package. By specifying &lt;code&gt;state: latest&lt;/code&gt;, we instruct it to ensure the newest available version is installed (the default &lt;code&gt;state: present&lt;/code&gt; would already be satisfied if the package would be installed). Leaving out &lt;code&gt;cache_valid_time&lt;/code&gt; would cause the module to always update the cache (and take up time), keeping the default of &lt;code&gt;update_cache: false&lt;/code&gt; would base actions just on the existing cache every time&lt;br&gt;<br /> The whole task needs &lt;code&gt;become: true&lt;/code&gt; to meet the elevated user rights required by changing system critical aspects. &lt;code&gt;become&lt;/code&gt; can be thought of as an abstraction from &lt;code&gt;sudo&lt;/code&gt; in the case of linux, as Ansible can be used to manage a multitude of different systems, including Windows.&lt;ref&gt;Though it may require [https://docs.ansible.com/ansible/latest/user_guide/windows.html system specific modules]&lt;/ref&gt;<br /> &lt;hr&gt;<br /> <br /> Example 2: Repeating steps, evaluating variables<br /> &lt;syntaxhighlight lang=&quot;yaml&quot;&gt;<br /> ...<br /> <br /> - name: Assign directories to minetest group and owner<br /> file:<br /> path: &quot;{{ minetest_base_dir }}/{{ item }}&quot;<br /> state: directory<br /> mode: u=rwX,g=rX,o=rX<br /> owner: minetest<br /> group: minetest<br /> with_items:<br /> - minetest<br /> - minetest_game<br /> - minetest_source<br /> - minetest_mods<br /> - world<br /> - minetest_mapserver<br /> become: true<br /> <br /> ...<br /> &lt;/syntaxhighlight&gt;<br /> <br /> We assume &lt;code&gt;minetest_base_dir&lt;/code&gt; is a variable either defined somewhere in our playbook or supplied by us from the command line (&lt;code&gt;ansible-playbook -i my_hosts_file.yml&lt;/code&gt; '''&lt;code&gt;-e minetest_base_dir=&amp;quot;/var/lib/minetest&amp;quot;&lt;/code&gt;''' &lt;code&gt;example_playbook.yml&lt;/code&gt;) or from a file (&lt;code&gt;ansible-playbook -i my_hosts_file.yml&lt;/code&gt; '''&lt;code&gt;-e @my_variables.yml&lt;/code&gt;''' &lt;code&gt;example_playbook.yml&lt;/code&gt;).&lt;br&gt;<br /> We want to change the group and owner of a bunch of directories and their contents and assign a mode: files should be readable for everyone and only writable for the user owning them.&lt;ref&gt;We cannot just write &lt;code&gt;mode: 644&lt;/code&gt; though, because directories need to be marked as executable to list their contents – they should have mode 755. Just as on the command line using &lt;code&gt;chmod&lt;/code&gt;, the &lt;code&gt;file&lt;/code&gt; module also accepts the syntax shown in the example. Using the big &lt;code&gt;X&lt;/code&gt; instead if the small one means the executable bit is only set for directories or if the bit was already set before.&lt;/ref&gt;&lt;br&gt;<br /> The &lt;code&gt;{{&lt;/code&gt; curly braces &lt;code&gt;}}&lt;/code&gt; are Jinja2 syntax and here only denote variables, though we can do more complicated stuff. These should always be in quotation marks so the whole file is valid YAML syntax.&lt;br&gt;<br /> &lt;code&gt;item&lt;/code&gt; is only present because of our use of &lt;code&gt;with_items&lt;/code&gt;: We run the task for every item in that list, at every iteration the current item is assigned to the &lt;code&gt;item&lt;/code&gt; variable. Here we are just using strings, but we could use arbitrarily complex items, if our goal requires it. There are a bunch of aliases for &lt;code&gt;with_items&lt;/code&gt;, another one is &lt;code&gt;loop&lt;/code&gt;.<br /> &lt;hr&gt;<br /> <br /> Example 3: Checking for file properties, acting based on a previous tasks output<br /> &lt;syntaxhighlight lang=&quot;yaml&quot;&gt;<br /> - name: Get stats of a file<br /> ansible.builtin.stat:<br /> path: /etc/foo.conf<br /> register: st<br /> <br /> - name: Fail if the file does not belong to 'root'<br /> ansible.builtin.fail:<br /> msg: &quot;Whoops! file ownership has changed&quot;<br /> when: st.stat.pw_name != 'root'<br /> &lt;/syntaxhighlight&gt;<br /> <br /> The [https://docs.ansible.com/ansible/latest/collections/ansible/builtin/stat_module.html &lt;code&gt;stat&lt;/code&gt; module] never changes anything. It just retrieves status information about a file. But by registering the result of the task to a variable, we can use it for other parts of our playbook.<br /> &lt;div style=&quot;padding: 15px; margin-bottom: 20px; border: 1px solid transparent; border-radius: 4px; color: #31708f; background-color: #d9edf7; border-color #bce8f1;&quot;&gt;<br /> Be careful though, '''if you find yourself programming in a playbook, you're doing something wrong.''' Mostly you're either over-engineering/procrastinating on other problems or you really need a module that does that complicated stuff instead.<br /> &lt;/div&gt;&lt;hr&gt;<br /> <br /> Example 4: Using commands when no modules for it are available<br /> &lt;syntaxhighlight lang=&quot;yaml&quot;&gt;<br /> - name: Get newest Minetest<br /> ansible.builtin.git:<br /> repo: &quot;{{ minetest_git_repo }}&quot;<br /> dest: &quot;{{ minetest_base_dir }}/minetest_source&quot;<br /> force: true<br /> version: &quot;{{ minetest_version }}&quot;<br /> diff: false<br /> become: true<br /> register: minetest_repo<br /> <br /> - name: Build Minetest<br /> command:<br /> cmd: &quot;{{ item }}&quot;<br /> chdir: &quot;{{ minetest_base_dir }}/minetest_source&quot;<br /> with_items:<br /> - cmake . -DRUN_IN_PLACE=TRUE -DBUILD_SERVER=TRUE -DBUILD_CLIENT=FALSE -DPostgreSQL_TYPE_INCLUDE_DIR=/usr/include/postgresql/<br /> - make -j4<br /> become: true<br /> register: minetest_build<br /> when: minetest_repo.changed<br /> &lt;/syntaxhighlight&gt;<br /> <br /> There's not always a module for everything. Sometimes the usecase is too obscure, sometimes there is no meaningful way to ensure Ansible principles like idempotence.&lt;ref&gt;not changing stuff if the desired state is already met&lt;/ref&gt;&lt;br&gt;<br /> The above example is trying to build minetest for maximum control over the installed version. After resetting the git repository to the desired version, the binary is built. For this, we use the [https://docs.ansible.com/ansible/latest/collections/ansible/builtin/command_module.html &lt;code&gt;command&lt;/code&gt; module] – but it has no idea whether the desired state is already met or whether the command has to be run again. We manually tell it to skip this task if the repository did not change in the previous task.<br /> &lt;div style=&quot;padding: 15px; margin-bottom: 20px; border: 1px solid transparent; border-radius: 4px; color: #31708f; background-color: #d9edf7; border-color #bce8f1;&quot;&gt;<br /> There is a minor gotcha with this: Assume you abort the playbook while its running the build task because you forgot to do something else. If you run it again, the git update will be skipped, as it is already in its desired state. But now the build task will not be run again. If you have this in your playbooks, you need to be aware of this edge case.&lt;br&gt;<br /> This is another reason why logical links in playbooks should be kept to a minimum.<br /> &lt;/div&gt;&lt;div style=&quot;padding: 15px; margin-bottom: 20px; border: 1px solid transparent; border-radius: 4px; color: #8a6d3b; background-color: #fcf8e3; border-color: #faebcc;&quot;&gt;<br /> There is also the &lt;code&gt;shell&lt;/code&gt; module that feels very similar. But in contrast to &lt;code&gt;command&lt;/code&gt;, it runs the specified command in a shell. This opens up the use of shell features like piping, but comes at an increased security risk, especially if building the command from variables.&lt;br&gt;<br /> Using &lt;code&gt;shell&lt;/code&gt; is ''not'' recommended.<br /> &lt;/div&gt;<br /> To make &lt;code&gt;command&lt;/code&gt; report success, failure or changed properties depending on other conditions than just the return code, use [https://docs.ansible.com/ansible/latest/user_guide/playbooks_error_handling.html#defining-failure &lt;code&gt;failed_when&lt;/code&gt;, &lt;code&gt;changed_when&lt;/code&gt; and &lt;code&gt;ignore_errors&lt;/code&gt;].<br /> <br /> === Testing things ===<br /> <br /> * syntax check with &lt;code&gt;yamllint&lt;/code&gt; and &lt;code&gt;ansible-lint&lt;/code&gt;<br /> * on real targets (e.g. different host files to ''not'' mess up production stuff)<br /> * in containers or VMs<br /> ** Vagrant (see below: [[#Further_reading|Further reading]])<br /> <br /> <br /> === Keeping secrets ===<br /> <br /> <br /> It is common practice to store important variables alongside playbooks and roles in even public repositories by encryping them with [https://docs.ansible.com/ansible/latest/cli/ansible-vault.html Ansible Vault].<br /> &lt;div style=&quot;padding: 15px; margin-bottom: 20px; border: 1px solid transparent; border-radius: 4px; color: #8a6d3b; background-color: #fcf8e3; border-color: #faebcc;&quot;&gt;<br /> These are production secrets, but never management access to the target machines. Jump hosts are one popular solution to grant access to many machines to various actors: Only this host stores the admins pubkeys, while the target machines only have the key from jump host.<br /> &lt;/div&gt;<br /> === Roles ===<br /> <br /> <br /> Roles are re-usable playbooks that come with default variables, files and can be shared in collections using [https://docs.ansible.com/ansible/latest/galaxy/user_guide.html Ansible Galaxy]. Roles are even easier to develop and test using [https://molecule.readthedocs.io/en/latest/getting-started.html Molecule] to automate different testing stages (linting, provisioning, testing for idempotence, testing for side effects).<br /> <br /> == interesting stuff ==<br /> <br /> * create container &amp;amp; deploy (example from [http://docs.ansible.com docs.ansible.com])<br /> <br /> &lt;syntaxhighlight lang=&quot;yaml&quot;&gt;<br /> - name: Create a jenkins container<br /> community.general.docker_container:<br /> docker_host: myserver.net:4243<br /> name: my_jenkins<br /> image: jenkins<br /> <br /> - name: Add the container to inventory<br /> ansible.builtin.add_host:<br /> name: my_jenkins<br /> ansible_connection: docker<br /> ansible_docker_extra_args: &quot;--tlsverify --tlscacert=/path/to/ca.pem --tlscert=/path/to/client-cert.pem --tlskey=/path/to/client-key.pem -H=tcp://myserver.net:4243&quot;<br /> ansible_user: jenkins<br /> changed_when: false<br /> <br /> - name: Create a directory for ssh keys<br /> delegate_to: my_jenkins<br /> ansible.builtin.file:<br /> path: &quot;/var/jenkins_home/.ssh/jupiter&quot;<br /> state: directory<br /> &lt;/syntaxhighlight&gt;<br /> <br /> == Further reading ==<br /> <br /> * Ansible docs: Group tasks to blocks: [https://docs.ansible.com/ansible/latest/user_guide/playbooks_blocks.html https://docs.ansible.com/ansible/latest/user_guide/playbooks_blocks.html]<br /> * Ansible docs: Guide on using Vagrant with Ansible: [https://docs.ansible.com/ansible/latest/scenario_guides/guide_vagrant.html https://docs.ansible.com/ansible/latest/scenario_guides/guide_vagrant.html]<br /> ** Vagrant can use various virtualization backends<br /> ** Images (&amp;quot;boxes&amp;quot;) are available for specific backends; when running Vagrant with QEMU/KVM, you cannot use &amp;quot;ubuntu/bionic64&amp;quot;, use &amp;quot;generic/ubuntu2004&amp;quot;<br /> ** [https://ostechnix.com/how-to-use-vagrant-with-libvirt-kvm-provider/ https://ostechnix.com/how-to-use-vagrant-with-libvirt-kvm-provider/]<br /> * another Ansible beginners tutorial that looks easy to start with: [https://learnxinyminutes.com/docs/ansible/ https://learnxinyminutes.com/docs/ansible/]<br /> * an article on using Ansible to spawn and destroy Podman containers: [https://fedoramagazine.org/using-ansible-to-configure-podman-containers/ https://fedoramagazine.org/using-ansible-to-configure-podman-containers/]<br /> <br /> &lt;hr&gt;<br /> * Ansible roles/playbooks to deploy the server in our current configuration or test locally: [https://gitlab.fachschaften.org/minetest/minetest_scripts https://gitlab.fachschaften.org/minetest/minetest_scripts]<br /> * Ansible roles by TU Dortmund: [https://gitlab.fachschaften.org/fsi-ansible https://gitlab.fachschaften.org/fsi-ansible]</div> 2003:C8:6F12:4200:31A4:EB2F:8FC8:321C https://wiki.kif.rocks/w/index.php?title=KIF490:Einf%C3%BChrung_in_Ansible_(einfach_wartbare,_reproduzierbare_Systemkonfigurationen)&diff=45343 KIF490:Einführung in Ansible (einfach wartbare, reproduzierbare Systemkonfigurationen) 2021-05-17T23:38:40Z <p>2003:C8:6F12:4200:31A4:EB2F:8FC8:321C: fix boxes</p> <hr /> <div><br /> = Ansible Quickstart =<br /> <br /> <br /> == What? ==<br /> <br /> * Automation framework<br /> * Open Source<br /> * use cases<br /> ** software deployment<br /> ** configuration management<br /> ** infrastructure service orchestration<br /> ** security automation<br /> <br /> <br /> Docs: [https://docs.ansible.com/ https://docs.ansible.com/]<br /> <br /> == How? ==<br /> <br /> <br /> === Define hosts (hosts file) ===<br /> <br /> * in &lt;code&gt;/etc/ansible/hosts&lt;/code&gt; or whatever is configured in &lt;code&gt;/etc/ansible/ansible.cfg&lt;/code&gt;<br /> * or by supplying it to an ansible command with &lt;code&gt;-i&lt;/code&gt;<br /> * which hosts are we addressing? how to connect to them?<br /> * in ini format or YAML<br /> * hosts will later be identified by this name<br /> * hosts can be grouped to apply actions to whatever hosts are in a group<br /> * ini example:<br /> <br /> &lt;syntaxhighlight lang=&quot;ini&quot;&gt;<br /> mail.example.com<br /> <br /> [webservers]<br /> foo.example.com<br /> bar.example.com<br /> <br /> [webservers:vars]<br /> port_for_thing=8080<br /> <br /> [dbservers]<br /> one.example.com<br /> two.example.com<br /> test_server ansible_host=three.example.com<br /> &lt;/syntaxhighlight&gt;<br /> * YAML example:<br /> <br /> &lt;syntaxhighlight lang=&quot;yaml&quot;&gt;<br /> all:<br /> hosts:<br /> mail.example.com:<br /> children:<br /> webservers:<br /> hosts:<br /> foo.example.com:<br /> bar.example.com:<br /> vars:<br /> port_for_thing: 8080<br /> dbservers:<br /> hosts:<br /> one.example.com:<br /> two.example.com:<br /> test_server:<br /> ansible_host: three.example.com<br /> &lt;/syntaxhighlight&gt;<br /> * default groups: &lt;code&gt;all&lt;/code&gt; and &lt;code&gt;ungrouped&lt;/code&gt;<br /> * also nice: ranges of hosts<br /> <br /> &lt;syntaxhighlight lang=&quot;yaml&quot;&gt;<br /> webservers:<br /> hosts:<br /> www[01:50].example.com<br /> &lt;/syntaxhighlight&gt;<br /> * example host file from the kif minetest server:<br /> <br /> &lt;syntaxhighlight lang=&quot;yaml&quot;&gt;<br /> all:<br /> hosts:<br /> kif_minetest:<br /> &lt;/syntaxhighlight&gt;<br /> * ...and the rest is specified in the &lt;code&gt;~/.ssh/config&lt;/code&gt; (ssh jumps, key file etc.)<br /> * dynamic inventory possible<br /> <br /> <br /> === Writing playbooks ===<br /> <br /> * in YAML<br /> * specify tasks which will be run in sequence<br /> * descriptive: tasks describe desired state, we don't worry about how it is achieved<br /> * name for identification<br /> * module with parameters ([https://docs.ansible.com/ansible/latest/collections/ look at the docs])<br /> * optional meta stuff<br /> ** &lt;code&gt;vars&lt;/code&gt;: variables to pass in (e.g. if templating a file)<br /> ** &lt;code&gt;with_items&lt;/code&gt; etc.: items for each to run this task<br /> ** &lt;code&gt;when&lt;/code&gt;: conditionals to skip the task if not met<br /> ** &lt;code&gt;tags&lt;/code&gt; to attach to run only or exclude specific subsets of tasks on runtime<br /> * rule of thumb: don't be more clever than you need to, simplicity &amp;amp; readability first!<br /> * run playbooks with &lt;code&gt;ansible-playbook -i my_hosts_file.yml example_playbook.yml&lt;/code&gt;<br /> <br /> <br /> Example 1: Simple minetest server install on Ubuntu<br /> &lt;syntaxhighlight lang=&quot;yaml&quot;&gt;<br /> ---<br /> - hosts: all<br /> tasks:<br /> - name: Install newest minetest server<br /> apt:<br /> pkg:<br /> - minetest-server<br /> state: latest<br /> update_cache: true<br /> cache_valid_time: 86400 # One day<br /> become: true<br /> &lt;/syntaxhighlight&gt;<br /> <br /> This playbook has just one task it will run on any target specified in the inventory.&lt;br&gt;<br /> We use [https://docs.ansible.com/ansible/latest/collections/ansible/builtin/apt_module.html the &lt;code&gt;apt&lt;/code&gt; module] to update the cache if older than a day and install the &lt;code&gt;minetest-server&lt;/code&gt; package. By specifying &lt;code&gt;state: latest&lt;/code&gt;, we instruct it to ensure the newest available version is installed (the default &lt;code&gt;state: present&lt;/code&gt; would already be satisfied if the package would be installed). Leaving out &lt;code&gt;cache_valid_time&lt;/code&gt; would cause the module to always update the cache (and take up time), keeping the default of &lt;code&gt;update_cache: false&lt;/code&gt; would base actions just on the existing cache every time&lt;br&gt;<br /> The whole task needs &lt;code&gt;become: true&lt;/code&gt; to meet the elevated user rights required by changing system critical aspects. &lt;code&gt;become&lt;/code&gt; can be thought of as an abstraction from &lt;code&gt;sudo&lt;/code&gt; in the case of linux, as Ansible can be used to manage a multitude of different systems, including Windows.&lt;ref&gt;Though it may require [https://docs.ansible.com/ansible/latest/user_guide/windows.html system specific modules]&lt;/ref&gt;<br /> &lt;hr&gt;<br /> <br /> Example 2: Repeating steps, evaluating variables<br /> &lt;syntaxhighlight lang=&quot;yaml&quot;&gt;<br /> ...<br /> <br /> - name: Assign directories to minetest group and owner<br /> file:<br /> path: &quot;{{ minetest_base_dir }}/{{ item }}&quot;<br /> state: directory<br /> mode: u=rwX,g=rX,o=rX<br /> owner: minetest<br /> group: minetest<br /> with_items:<br /> - minetest<br /> - minetest_game<br /> - minetest_source<br /> - minetest_mods<br /> - world<br /> - minetest_mapserver<br /> become: true<br /> <br /> ...<br /> &lt;/syntaxhighlight&gt;<br /> <br /> We assume &lt;code&gt;minetest_base_dir&lt;/code&gt; is a variable either defined somewhere in our playbook or supplied by us from the command line (&lt;code&gt;ansible-playbook -i my_hosts_file.yml&lt;/code&gt; '''&lt;code&gt;-e minetest_base_dir=&amp;quot;/var/lib/minetest&amp;quot;&lt;/code&gt;''' &lt;code&gt;example_playbook.yml&lt;/code&gt;) or from a file (&lt;code&gt;ansible-playbook -i my_hosts_file.yml&lt;/code&gt; '''&lt;code&gt;-e @my_variables.yml&lt;/code&gt;''' &lt;code&gt;example_playbook.yml&lt;/code&gt;).&lt;br&gt;<br /> We want to change the group and owner of a bunch of directories and their contents and assign a mode: files should be readable for everyone and only writable for the user owning them.&lt;ref&gt;We cannot just write &lt;code&gt;mode: 644&lt;/code&gt; though, because directories need to be marked as executable to list their contents – they should have mode 755. Just as on the command line using &lt;code&gt;chmod&lt;/code&gt;, the &lt;code&gt;file&lt;/code&gt; module also accepts the syntax shown in the example. Using the big &lt;code&gt;X&lt;/code&gt; instead if the small one means the executable bit is only set for directories or if the bit was already set before.&lt;/ref&gt;&lt;br&gt;<br /> The &lt;code&gt;{{&lt;/code&gt; curly braces &lt;code&gt;}}&lt;/code&gt; are Jinja2 syntax and here only denote variables, though we can do more complicated stuff. These should always be in quotation marks so the whole file is valid YAML syntax.&lt;br&gt;<br /> &lt;code&gt;item&lt;/code&gt; is only present because of our use of &lt;code&gt;with_items&lt;/code&gt;: We run the task for every item in that list, at every iteration the current item is assigned to the &lt;code&gt;item&lt;/code&gt; variable. Here we are just using strings, but we could use arbitrarily complex items, if our goal requires it. There are a bunch of aliases for &lt;code&gt;with_items&lt;/code&gt;, another one is &lt;code&gt;loop&lt;/code&gt;.<br /> &lt;hr&gt;<br /> <br /> Example 3: Checking for file properties, acting based on a previous tasks output<br /> &lt;syntaxhighlight lang=&quot;yaml&quot;&gt;<br /> - name: Get stats of a file<br /> ansible.builtin.stat:<br /> path: /etc/foo.conf<br /> register: st<br /> <br /> - name: Fail if the file does not belong to 'root'<br /> ansible.builtin.fail:<br /> msg: &quot;Whoops! file ownership has changed&quot;<br /> when: st.stat.pw_name != 'root'<br /> &lt;/syntaxhighlight&gt;<br /> <br /> The [https://docs.ansible.com/ansible/latest/collections/ansible/builtin/stat_module.html &lt;code&gt;stat&lt;/code&gt; module] never changes anything. It just retrieves status information about a file. But by registering the result of the task to a variable, we can use it for other parts of our playbook.<br /> &lt;div class=&quot;info&quot; style=&quot;padding: 15px; margin-bottom: 20px; border: 1px solid transparent; border-radius: 4px; color: #31708f; background-color: #d9edf7; border-color #bce8f1;&quot;&gt;<br /> Be careful though, '''if you find yourself programming in a playbook, you're doing something wrong.''' Mostly you're either over-engineering/procrastinating on other problems or you really need a module that does that complicated stuff instead.<br /> &lt;/div&gt;&lt;hr&gt;<br /> <br /> Example 4: Using commands when no modules for it are available<br /> &lt;syntaxhighlight lang=&quot;yaml&quot;&gt;<br /> - name: Get newest Minetest<br /> ansible.builtin.git:<br /> repo: &quot;{{ minetest_git_repo }}&quot;<br /> dest: &quot;{{ minetest_base_dir }}/minetest_source&quot;<br /> force: true<br /> version: &quot;{{ minetest_version }}&quot;<br /> diff: false<br /> become: true<br /> register: minetest_repo<br /> <br /> - name: Build Minetest<br /> command:<br /> cmd: &quot;{{ item }}&quot;<br /> chdir: &quot;{{ minetest_base_dir }}/minetest_source&quot;<br /> with_items:<br /> - cmake . -DRUN_IN_PLACE=TRUE -DBUILD_SERVER=TRUE -DBUILD_CLIENT=FALSE -DPostgreSQL_TYPE_INCLUDE_DIR=/usr/include/postgresql/<br /> - make -j4<br /> become: true<br /> register: minetest_build<br /> when: minetest_repo.changed<br /> &lt;/syntaxhighlight&gt;<br /> <br /> There's not always a module for everything. Sometimes the usecase is too obscure, sometimes there is no meaningful way to ensure Ansible principles like idempotence.&lt;ref&gt;not changing stuff if the desired state is already met&lt;/ref&gt;&lt;br&gt;<br /> The above example is trying to build minetest for maximum control over the installed version. After resetting the git repository to the desired version, the binary is built. For this, we use the [https://docs.ansible.com/ansible/latest/collections/ansible/builtin/command_module.html &lt;code&gt;command&lt;/code&gt; module] – but it has no idea whether the desired state is already met or whether the command has to be run again. We manually tell it to skip this task if the repository did not change in the previous task.<br /> &lt;div class=&quot;info&quot; style=&quot;padding: 15px; margin-bottom: 20px; border: 1px solid transparent; border-radius: 4px; color: #31708f; background-color: #d9edf7; border-color #bce8f1;&quot;&gt;<br /> There is a minor gotcha with this: Assume you abort the playbook while its running the build task because you forgot to do something else. If you run it again, the git update will be skipped, as it is already in its desired state. But now the build task will not be run again. If you have this in your playbooks, you need to be aware of this edge case.&lt;br&gt;<br /> This is another reason why logical links in playbooks should be kept to a minimum.<br /> &lt;/div&gt;&lt;div class=&quot;warning&quot; style=&quot;padding: 15px; margin-bottom: 20px; border: 1px solid transparent; border-radius: 4px; color: #8a6d3b; background-color: #fcf8e3; border-color: #faebcc;&quot;&gt;<br /> There is also the &lt;code&gt;shell&lt;/code&gt; module that feels very similar. But in contrast to &lt;code&gt;command&lt;/code&gt;, it runs the specified command in a shell. This opens up the use of shell features like piping, but comes at an increased security risk, especially if building the command from variables.&lt;br&gt;<br /> Using &lt;code&gt;shell&lt;/code&gt; is ''not'' recommended.<br /> &lt;/div&gt;<br /> To make &lt;code&gt;command&lt;/code&gt; report success, failure or changed properties depending on other conditions than just the return code, use [https://docs.ansible.com/ansible/latest/user_guide/playbooks_error_handling.html#defining-failure &lt;code&gt;failed_when&lt;/code&gt;, &lt;code&gt;changed_when&lt;/code&gt; and &lt;code&gt;ignore_errors&lt;/code&gt;].<br /> <br /> === Testing things ===<br /> <br /> * syntax check with &lt;code&gt;yamllint&lt;/code&gt; and &lt;code&gt;ansible-lint&lt;/code&gt;<br /> * on real targets (e.g. different host files to ''not'' mess up production stuff)<br /> * in containers or VMs<br /> ** Vagrant (see below: [[#Further_reading|Further reading]])<br /> <br /> <br /> === Keeping secrets ===<br /> <br /> <br /> It is common practice to store important variables alongside playbooks and roles in even public repositories by encryping them with [https://docs.ansible.com/ansible/latest/cli/ansible-vault.html Ansible Vault].<br /> &lt;div class=&quot;warning&quot; style=&quot;padding: 15px; margin-bottom: 20px; border: 1px solid transparent; border-radius: 4px; color: #8a6d3b; background-color: #fcf8e3; border-color: #faebcc;&quot;&gt;<br /> These are production secrets, but never management access to the target machines. Jump hosts are one popular solution to grant access to many machines to various actors: Only this host stores the admins pubkeys, while the target machines only have the key from jump host.<br /> &lt;/div&gt;<br /> === Roles ===<br /> <br /> <br /> Roles are re-usable playbooks that come with default variables, files and can be shared in collections using [https://docs.ansible.com/ansible/latest/galaxy/user_guide.html Ansible Galaxy]. Roles are even easier to develop and test using [https://molecule.readthedocs.io/en/latest/getting-started.html Molecule] to automate different testing stages (linting, provisioning, testing for idempotence, testing for side effects).<br /> <br /> == interesting stuff ==<br /> <br /> * create container &amp;amp; deploy (example from [http://docs.ansible.com docs.ansible.com])<br /> <br /> &lt;syntaxhighlight lang=&quot;yaml&quot;&gt;<br /> - name: Create a jenkins container<br /> community.general.docker_container:<br /> docker_host: myserver.net:4243<br /> name: my_jenkins<br /> image: jenkins<br /> <br /> - name: Add the container to inventory<br /> ansible.builtin.add_host:<br /> name: my_jenkins<br /> ansible_connection: docker<br /> ansible_docker_extra_args: &quot;--tlsverify --tlscacert=/path/to/ca.pem --tlscert=/path/to/client-cert.pem --tlskey=/path/to/client-key.pem -H=tcp://myserver.net:4243&quot;<br /> ansible_user: jenkins<br /> changed_when: false<br /> <br /> - name: Create a directory for ssh keys<br /> delegate_to: my_jenkins<br /> ansible.builtin.file:<br /> path: &quot;/var/jenkins_home/.ssh/jupiter&quot;<br /> state: directory<br /> &lt;/syntaxhighlight&gt;<br /> <br /> == Further reading ==<br /> <br /> * Ansible docs: Group tasks to blocks: [https://docs.ansible.com/ansible/latest/user_guide/playbooks_blocks.html https://docs.ansible.com/ansible/latest/user_guide/playbooks_blocks.html]<br /> * Ansible docs: Guide on using Vagrant with Ansible: [https://docs.ansible.com/ansible/latest/scenario_guides/guide_vagrant.html https://docs.ansible.com/ansible/latest/scenario_guides/guide_vagrant.html]<br /> ** Vagrant can use various virtualization backends<br /> ** Images (&amp;quot;boxes&amp;quot;) are available for specific backends; when running Vagrant with QEMU/KVM, you cannot use &amp;quot;ubuntu/bionic64&amp;quot;, use &amp;quot;generic/ubuntu2004&amp;quot;<br /> ** [https://ostechnix.com/how-to-use-vagrant-with-libvirt-kvm-provider/ https://ostechnix.com/how-to-use-vagrant-with-libvirt-kvm-provider/]<br /> * another Ansible beginners tutorial that looks easy to start with: [https://learnxinyminutes.com/docs/ansible/ https://learnxinyminutes.com/docs/ansible/]<br /> * an article on using Ansible to spawn and destroy Podman containers: [https://fedoramagazine.org/using-ansible-to-configure-podman-containers/ https://fedoramagazine.org/using-ansible-to-configure-podman-containers/]<br /> <br /> &lt;hr&gt;<br /> * Ansible roles/playbooks to deploy the server in our current configuration or test locally: [https://gitlab.fachschaften.org/minetest/minetest_scripts https://gitlab.fachschaften.org/minetest/minetest_scripts]<br /> * Ansible roles by TU Dortmund: [https://gitlab.fachschaften.org/fsi-ansible https://gitlab.fachschaften.org/fsi-ansible]</div> 2003:C8:6F12:4200:31A4:EB2F:8FC8:321C https://wiki.kif.rocks/w/index.php?title=KIF490:Einf%C3%BChrung_in_Ansible_(einfach_wartbare,_reproduzierbare_Systemkonfigurationen)&diff=45341 KIF490:Einführung in Ansible (einfach wartbare, reproduzierbare Systemkonfigurationen) 2021-05-17T22:48:40Z <p>2003:C8:6F12:4200:31A4:EB2F:8FC8:321C: /* Testing things */ fix link for real</p> <hr /> <div><br /> = Ansible Quickstart =<br /> <br /> <br /> == What? ==<br /> <br /> * Automation framework<br /> * Open Source<br /> * use cases<br /> ** software deployment<br /> ** configuration management<br /> ** infrastructure service orchestration<br /> ** security automation<br /> <br /> <br /> Docs: [https://docs.ansible.com/ https://docs.ansible.com/]<br /> <br /> == How? ==<br /> <br /> <br /> === Define hosts (hosts file) ===<br /> <br /> * in &lt;code&gt;/etc/ansible/hosts&lt;/code&gt; or whatever is configured in &lt;code&gt;/etc/ansible/ansible.cfg&lt;/code&gt;<br /> * or by supplying it to an ansible command with &lt;code&gt;-i&lt;/code&gt;<br /> * which hosts are we addressing? how to connect to them?<br /> * in ini format or YAML<br /> * hosts will later be identified by this name<br /> * hosts can be grouped to apply actions to whatever hosts are in a group<br /> * ini example:<br /> <br /> &lt;syntaxhighlight lang=&quot;ini&quot;&gt;<br /> mail.example.com<br /> <br /> [webservers]<br /> foo.example.com<br /> bar.example.com<br /> <br /> [webservers:vars]<br /> port_for_thing=8080<br /> <br /> [dbservers]<br /> one.example.com<br /> two.example.com<br /> test_server ansible_host=three.example.com<br /> &lt;/syntaxhighlight&gt;<br /> * YAML example:<br /> <br /> &lt;syntaxhighlight lang=&quot;yaml&quot;&gt;<br /> all:<br /> hosts:<br /> mail.example.com:<br /> children:<br /> webservers:<br /> hosts:<br /> foo.example.com:<br /> bar.example.com:<br /> vars:<br /> port_for_thing: 8080<br /> dbservers:<br /> hosts:<br /> one.example.com:<br /> two.example.com:<br /> test_server:<br /> ansible_host: three.example.com<br /> &lt;/syntaxhighlight&gt;<br /> * default groups: &lt;code&gt;all&lt;/code&gt; and &lt;code&gt;ungrouped&lt;/code&gt;<br /> * also nice: ranges of hosts<br /> <br /> &lt;syntaxhighlight lang=&quot;yaml&quot;&gt;<br /> webservers:<br /> hosts:<br /> www[01:50].example.com<br /> &lt;/syntaxhighlight&gt;<br /> * example host file from the kif minetest server:<br /> <br /> &lt;syntaxhighlight lang=&quot;yaml&quot;&gt;<br /> all:<br /> hosts:<br /> kif_minetest:<br /> &lt;/syntaxhighlight&gt;<br /> * ...and the rest is specified in the &lt;code&gt;~/.ssh/config&lt;/code&gt; (ssh jumps, key file etc.)<br /> * dynamic inventory possible<br /> <br /> <br /> === Writing playbooks ===<br /> <br /> * in YAML<br /> * specify tasks which will be run in sequence<br /> * descriptive: tasks describe desired state, we don't worry about how it is achieved<br /> * name for identification<br /> * module with parameters ([https://docs.ansible.com/ansible/latest/collections/ look at the docs])<br /> * optional meta stuff<br /> ** &lt;code&gt;vars&lt;/code&gt;: variables to pass in (e.g. if templating a file)<br /> ** &lt;code&gt;with_items&lt;/code&gt; etc.: items for each to run this task<br /> ** &lt;code&gt;when&lt;/code&gt;: conditionals to skip the task if not met<br /> ** &lt;code&gt;tags&lt;/code&gt; to attach to run only or exclude specific subsets of tasks on runtime<br /> * rule of thumb: don't be more clever than you need to, simplicity &amp;amp; readability first!<br /> * run playbooks with &lt;code&gt;ansible-playbook -i my_hosts_file.yml example_playbook.yml&lt;/code&gt;<br /> <br /> <br /> Example 1: Simple minetest server install on Ubuntu<br /> &lt;syntaxhighlight lang=&quot;yaml&quot;&gt;<br /> ---<br /> - hosts: all<br /> tasks:<br /> - name: Install newest minetest server<br /> apt:<br /> pkg:<br /> - minetest-server<br /> state: latest<br /> update_cache: true<br /> cache_valid_time: 86400 # One day<br /> become: true<br /> &lt;/syntaxhighlight&gt;<br /> <br /> This playbook has just one task it will run on any target specified in the inventory.&lt;br&gt;<br /> We use [https://docs.ansible.com/ansible/latest/collections/ansible/builtin/apt_module.html the &lt;code&gt;apt&lt;/code&gt; module] to update the cache if older than a day and install the &lt;code&gt;minetest-server&lt;/code&gt; package. By specifying &lt;code&gt;state: latest&lt;/code&gt;, we instruct it to ensure the newest available version is installed (the default &lt;code&gt;state: present&lt;/code&gt; would already be satisfied if the package would be installed). Leaving out &lt;code&gt;cache_valid_time&lt;/code&gt; would cause the module to always update the cache (and take up time), keeping the default of &lt;code&gt;update_cache: false&lt;/code&gt; would base actions just on the existing cache every time&lt;br&gt;<br /> The whole task needs &lt;code&gt;become: true&lt;/code&gt; to meet the elevated user rights required by changing system critical aspects. &lt;code&gt;become&lt;/code&gt; can be thought of as an abstraction from &lt;code&gt;sudo&lt;/code&gt; in the case of linux, as Ansible can be used to manage a multitude of different systems, including Windows.&lt;ref&gt;Though it may require [https://docs.ansible.com/ansible/latest/user_guide/windows.html system specific modules]&lt;/ref&gt;<br /> &lt;hr&gt;<br /> <br /> Example 2: Repeating steps, evaluating variables<br /> &lt;syntaxhighlight lang=&quot;yaml&quot;&gt;<br /> ...<br /> <br /> - name: Assign directories to minetest group and owner<br /> file:<br /> path: &quot;{{ minetest_base_dir }}/{{ item }}&quot;<br /> state: directory<br /> mode: u=rwX,g=rX,o=rX<br /> owner: minetest<br /> group: minetest<br /> with_items:<br /> - minetest<br /> - minetest_game<br /> - minetest_source<br /> - minetest_mods<br /> - world<br /> - minetest_mapserver<br /> become: true<br /> <br /> ...<br /> &lt;/syntaxhighlight&gt;<br /> <br /> We assume &lt;code&gt;minetest_base_dir&lt;/code&gt; is a variable either defined somewhere in our playbook or supplied by us from the command line (&lt;code&gt;ansible-playbook -i my_hosts_file.yml&lt;/code&gt; '''&lt;code&gt;-e minetest_base_dir=&amp;quot;/var/lib/minetest&amp;quot;&lt;/code&gt;''' &lt;code&gt;example_playbook.yml&lt;/code&gt;) or from a file (&lt;code&gt;ansible-playbook -i my_hosts_file.yml&lt;/code&gt; '''&lt;code&gt;-e @my_variables.yml&lt;/code&gt;''' &lt;code&gt;example_playbook.yml&lt;/code&gt;).&lt;br&gt;<br /> We want to change the group and owner of a bunch of directories and their contents and assign a mode: files should be readable for everyone and only writable for the user owning them.&lt;ref&gt;We cannot just write &lt;code&gt;mode: 644&lt;/code&gt; though, because directories need to be marked as executable to list their contents – they should have mode 755. Just as on the command line using &lt;code&gt;chmod&lt;/code&gt;, the &lt;code&gt;file&lt;/code&gt; module also accepts the syntax shown in the example. Using the big &lt;code&gt;X&lt;/code&gt; instead if the small one means the executable bit is only set for directories or if the bit was already set before.&lt;/ref&gt;&lt;br&gt;<br /> The &lt;code&gt;{{&lt;/code&gt; curly braces &lt;code&gt;}}&lt;/code&gt; are Jinja2 syntax and here only denote variables, though we can do more complicated stuff. These should always be in quotation marks so the whole file is valid YAML syntax.&lt;br&gt;<br /> &lt;code&gt;item&lt;/code&gt; is only present because of our use of &lt;code&gt;with_items&lt;/code&gt;: We run the task for every item in that list, at every iteration the current item is assigned to the &lt;code&gt;item&lt;/code&gt; variable. Here we are just using strings, but we could use arbitrarily complex items, if our goal requires it. There are a bunch of aliases for &lt;code&gt;with_items&lt;/code&gt;, another one is &lt;code&gt;loop&lt;/code&gt;.<br /> &lt;hr&gt;<br /> <br /> Example 3: Checking for file properties, acting based on a previous tasks output<br /> &lt;syntaxhighlight lang=&quot;yaml&quot;&gt;<br /> - name: Get stats of a file<br /> ansible.builtin.stat:<br /> path: /etc/foo.conf<br /> register: st<br /> <br /> - name: Fail if the file does not belong to 'root'<br /> ansible.builtin.fail:<br /> msg: &quot;Whoops! file ownership has changed&quot;<br /> when: st.stat.pw_name != 'root'<br /> &lt;/syntaxhighlight&gt;<br /> <br /> The [https://docs.ansible.com/ansible/latest/collections/ansible/builtin/stat_module.html &lt;code&gt;stat&lt;/code&gt; module] never changes anything. It just retrieves status information about a file. But by registering the result of the task to a variable, we can use it for other parts of our playbook.<br /> <br /> :::info&lt;br&gt;<br /> Be careful though, '''if you find yourself programming in a playbook, you're doing something wrong.''' Mostly you're either over-engineering/procrastinating on other problems or you really need a module that does that complicated stuff instead.&lt;br&gt;<br /> :::<br /> &lt;hr&gt;<br /> <br /> Example 4: Using commands when no modules for it are available<br /> &lt;syntaxhighlight lang=&quot;yaml&quot;&gt;<br /> - name: Get newest Minetest<br /> ansible.builtin.git:<br /> repo: &quot;{{ minetest_git_repo }}&quot;<br /> dest: &quot;{{ minetest_base_dir }}/minetest_source&quot;<br /> force: true<br /> version: &quot;{{ minetest_version }}&quot;<br /> diff: false<br /> become: true<br /> register: minetest_repo<br /> <br /> - name: Build Minetest<br /> command:<br /> cmd: &quot;{{ item }}&quot;<br /> chdir: &quot;{{ minetest_base_dir }}/minetest_source&quot;<br /> with_items:<br /> - cmake . -DRUN_IN_PLACE=TRUE -DBUILD_SERVER=TRUE -DBUILD_CLIENT=FALSE -DPostgreSQL_TYPE_INCLUDE_DIR=/usr/include/postgresql/<br /> - make -j4<br /> become: true<br /> register: minetest_build<br /> when: minetest_repo.changed<br /> &lt;/syntaxhighlight&gt;<br /> <br /> There's not always a module for everything. Sometimes the usecase is too obscure, sometimes there is no meaningful way to ensure Ansible principles like idempotence.&lt;ref&gt;not changing stuff if the desired state is already met&lt;/ref&gt;&lt;br&gt;<br /> The above example is trying to build minetest for maximum control over the installed version. After resetting the git repository to the desired version, the binary is built. For this, we use the [https://docs.ansible.com/ansible/latest/collections/ansible/builtin/command_module.html &lt;code&gt;command&lt;/code&gt; module] – but it has no idea whether the desired state is already met or whether the command has to be run again. We manually tell it to skip this task if the repository did not change in the previous task.<br /> <br /> :::info&lt;br&gt;<br /> There is a minor gotcha with this: Assume you abort the playbook while its running the build task because you forgot to do something else. If you run it again, the git update will be skipped, as it is already in its desired state. But now the build task will not be run again. If you have this in your playbooks, you need to be aware of this edge case.&lt;br&gt;<br /> This is another reason why logical links in playbooks should be kept to a minimum.&lt;br&gt;<br /> :::<br /> <br /> :::warning&lt;br&gt;<br /> There is also the &lt;code&gt;shell&lt;/code&gt; module that feels very similar. But in contrast to &lt;code&gt;command&lt;/code&gt;, it runs the specified command in a shell. This opens up the use of shell features like piping, but comes at an increased security risk, especially if building the command from variables.&lt;br&gt;<br /> Using &lt;code&gt;shell&lt;/code&gt; is ''not'' recommended.&lt;br&gt;<br /> :::<br /> <br /> To make &lt;code&gt;command&lt;/code&gt; report success, failure or changed properties depending on other conditions than just the return code, use [https://docs.ansible.com/ansible/latest/user_guide/playbooks_error_handling.html#defining-failure &lt;code&gt;failed_when&lt;/code&gt;, &lt;code&gt;changed_when&lt;/code&gt; and &lt;code&gt;ignore_errors&lt;/code&gt;].<br /> <br /> === Testing things ===<br /> <br /> * syntax check with &lt;code&gt;yamllint&lt;/code&gt; and &lt;code&gt;ansible-lint&lt;/code&gt;<br /> * on real targets (e.g. different host files to ''not'' mess up production stuff)<br /> * in containers or VMs<br /> ** Vagrant (see below: [[#Further_reading|Further reading]])<br /> <br /> === Keeping secrets ===<br /> <br /> <br /> It is common practice to store important variables alongside playbooks and roles in even public repositories by encryping them with [https://docs.ansible.com/ansible/latest/cli/ansible-vault.html Ansible Vault].<br /> <br /> :::warning&lt;br&gt;<br /> These are production secrets, but never management access to the target machines. Jump hosts are one popular solution to grant access to many machines to various actors: Only this host stores the admins pubkeys, while the target machines only have the key from jump host.&lt;br&gt;<br /> :::<br /> <br /> === Roles ===<br /> <br /> <br /> Roles are re-usable playbooks that come with default variables, files and can be shared in collections using [https://docs.ansible.com/ansible/latest/galaxy/user_guide.html Ansible Galaxy]. Roles are even easier to develop and test using [https://molecule.readthedocs.io/en/latest/getting-started.html Molecule] to automate different testing stages (linting, provisioning, testing for idempotence, testing for side effects).<br /> <br /> == interesting stuff ==<br /> <br /> * create container &amp;amp; deploy (example from [http://docs.ansible.com docs.ansible.com])<br /> <br /> &lt;syntaxhighlight lang=&quot;yaml&quot;&gt;<br /> - name: Create a jenkins container<br /> community.general.docker_container:<br /> docker_host: myserver.net:4243<br /> name: my_jenkins<br /> image: jenkins<br /> <br /> - name: Add the container to inventory<br /> ansible.builtin.add_host:<br /> name: my_jenkins<br /> ansible_connection: docker<br /> ansible_docker_extra_args: &quot;--tlsverify --tlscacert=/path/to/ca.pem --tlscert=/path/to/client-cert.pem --tlskey=/path/to/client-key.pem -H=tcp://myserver.net:4243&quot;<br /> ansible_user: jenkins<br /> changed_when: false<br /> <br /> - name: Create a directory for ssh keys<br /> delegate_to: my_jenkins<br /> ansible.builtin.file:<br /> path: &quot;/var/jenkins_home/.ssh/jupiter&quot;<br /> state: directory<br /> &lt;/syntaxhighlight&gt;<br /> <br /> == Further reading ==<br /> <br /> * Ansible docs: Group tasks to blocks: [https://docs.ansible.com/ansible/latest/user_guide/playbooks_blocks.html https://docs.ansible.com/ansible/latest/user_guide/playbooks_blocks.html]<br /> * Ansible docs: Guide on using Vagrant with Ansible: [https://docs.ansible.com/ansible/latest/scenario_guides/guide_vagrant.html https://docs.ansible.com/ansible/latest/scenario_guides/guide_vagrant.html]<br /> ** Vagrant can use various virtualization backends<br /> ** Images (&amp;quot;boxes&amp;quot;) are available for specific backends; when running Vagrant with QEMU/KVM, you cannot use &amp;quot;ubuntu/bionic64&amp;quot;, use &amp;quot;generic/ubuntu2004&amp;quot;<br /> ** [https://ostechnix.com/how-to-use-vagrant-with-libvirt-kvm-provider/ https://ostechnix.com/how-to-use-vagrant-with-libvirt-kvm-provider/]<br /> * another Ansible beginners tutorial that looks easy to start with: [https://learnxinyminutes.com/docs/ansible/ https://learnxinyminutes.com/docs/ansible/]<br /> * an article on using Ansible to spawn and destroy Podman containers: [https://fedoramagazine.org/using-ansible-to-configure-podman-containers/ https://fedoramagazine.org/using-ansible-to-configure-podman-containers/]<br /> <br /> &lt;hr&gt;<br /> * Ansible roles/playbooks to deploy the server in our current configuration or test locally: [https://gitlab.fachschaften.org/minetest/minetest_scripts https://gitlab.fachschaften.org/minetest/minetest_scripts]<br /> * Ansible roles by TU Dortmund: [https://gitlab.fachschaften.org/fsi-ansible https://gitlab.fachschaften.org/fsi-ansible]</div> 2003:C8:6F12:4200:31A4:EB2F:8FC8:321C https://wiki.kif.rocks/w/index.php?title=KIF490:Einf%C3%BChrung_in_Ansible_(einfach_wartbare,_reproduzierbare_Systemkonfigurationen)&diff=45339 KIF490:Einführung in Ansible (einfach wartbare, reproduzierbare Systemkonfigurationen) 2021-05-17T22:44:24Z <p>2003:C8:6F12:4200:31A4:EB2F:8FC8:321C: /* Testing things */ fixed internal link</p> <hr /> <div><br /> = Ansible Quickstart =<br /> <br /> <br /> == What? ==<br /> <br /> * Automation framework<br /> * Open Source<br /> * use cases<br /> ** software deployment<br /> ** configuration management<br /> ** infrastructure service orchestration<br /> ** security automation<br /> <br /> <br /> Docs: [https://docs.ansible.com/ https://docs.ansible.com/]<br /> <br /> == How? ==<br /> <br /> <br /> === Define hosts (hosts file) ===<br /> <br /> * in &lt;code&gt;/etc/ansible/hosts&lt;/code&gt; or whatever is configured in &lt;code&gt;/etc/ansible/ansible.cfg&lt;/code&gt;<br /> * or by supplying it to an ansible command with &lt;code&gt;-i&lt;/code&gt;<br /> * which hosts are we addressing? how to connect to them?<br /> * in ini format or YAML<br /> * hosts will later be identified by this name<br /> * hosts can be grouped to apply actions to whatever hosts are in a group<br /> * ini example:<br /> <br /> &lt;syntaxhighlight lang=&quot;ini&quot;&gt;<br /> mail.example.com<br /> <br /> [webservers]<br /> foo.example.com<br /> bar.example.com<br /> <br /> [webservers:vars]<br /> port_for_thing=8080<br /> <br /> [dbservers]<br /> one.example.com<br /> two.example.com<br /> test_server ansible_host=three.example.com<br /> &lt;/syntaxhighlight&gt;<br /> * YAML example:<br /> <br /> &lt;syntaxhighlight lang=&quot;yaml&quot;&gt;<br /> all:<br /> hosts:<br /> mail.example.com:<br /> children:<br /> webservers:<br /> hosts:<br /> foo.example.com:<br /> bar.example.com:<br /> vars:<br /> port_for_thing: 8080<br /> dbservers:<br /> hosts:<br /> one.example.com:<br /> two.example.com:<br /> test_server:<br /> ansible_host: three.example.com<br /> &lt;/syntaxhighlight&gt;<br /> * default groups: &lt;code&gt;all&lt;/code&gt; and &lt;code&gt;ungrouped&lt;/code&gt;<br /> * also nice: ranges of hosts<br /> <br /> &lt;syntaxhighlight lang=&quot;yaml&quot;&gt;<br /> webservers:<br /> hosts:<br /> www[01:50].example.com<br /> &lt;/syntaxhighlight&gt;<br /> * example host file from the kif minetest server:<br /> <br /> &lt;syntaxhighlight lang=&quot;yaml&quot;&gt;<br /> all:<br /> hosts:<br /> kif_minetest:<br /> &lt;/syntaxhighlight&gt;<br /> * ...and the rest is specified in the &lt;code&gt;~/.ssh/config&lt;/code&gt; (ssh jumps, key file etc.)<br /> * dynamic inventory possible<br /> <br /> <br /> === Writing playbooks ===<br /> <br /> * in YAML<br /> * specify tasks which will be run in sequence<br /> * descriptive: tasks describe desired state, we don't worry about how it is achieved<br /> * name for identification<br /> * module with parameters ([https://docs.ansible.com/ansible/latest/collections/ look at the docs])<br /> * optional meta stuff<br /> ** &lt;code&gt;vars&lt;/code&gt;: variables to pass in (e.g. if templating a file)<br /> ** &lt;code&gt;with_items&lt;/code&gt; etc.: items for each to run this task<br /> ** &lt;code&gt;when&lt;/code&gt;: conditionals to skip the task if not met<br /> ** &lt;code&gt;tags&lt;/code&gt; to attach to run only or exclude specific subsets of tasks on runtime<br /> * rule of thumb: don't be more clever than you need to, simplicity &amp;amp; readability first!<br /> * run playbooks with &lt;code&gt;ansible-playbook -i my_hosts_file.yml example_playbook.yml&lt;/code&gt;<br /> <br /> <br /> Example 1: Simple minetest server install on Ubuntu<br /> &lt;syntaxhighlight lang=&quot;yaml&quot;&gt;<br /> ---<br /> - hosts: all<br /> tasks:<br /> - name: Install newest minetest server<br /> apt:<br /> pkg:<br /> - minetest-server<br /> state: latest<br /> update_cache: true<br /> cache_valid_time: 86400 # One day<br /> become: true<br /> &lt;/syntaxhighlight&gt;<br /> <br /> This playbook has just one task it will run on any target specified in the inventory.&lt;br&gt;<br /> We use [https://docs.ansible.com/ansible/latest/collections/ansible/builtin/apt_module.html the &lt;code&gt;apt&lt;/code&gt; module] to update the cache if older than a day and install the &lt;code&gt;minetest-server&lt;/code&gt; package. By specifying &lt;code&gt;state: latest&lt;/code&gt;, we instruct it to ensure the newest available version is installed (the default &lt;code&gt;state: present&lt;/code&gt; would already be satisfied if the package would be installed). Leaving out &lt;code&gt;cache_valid_time&lt;/code&gt; would cause the module to always update the cache (and take up time), keeping the default of &lt;code&gt;update_cache: false&lt;/code&gt; would base actions just on the existing cache every time&lt;br&gt;<br /> The whole task needs &lt;code&gt;become: true&lt;/code&gt; to meet the elevated user rights required by changing system critical aspects. &lt;code&gt;become&lt;/code&gt; can be thought of as an abstraction from &lt;code&gt;sudo&lt;/code&gt; in the case of linux, as Ansible can be used to manage a multitude of different systems, including Windows.&lt;ref&gt;Though it may require [https://docs.ansible.com/ansible/latest/user_guide/windows.html system specific modules]&lt;/ref&gt;<br /> &lt;hr&gt;<br /> <br /> Example 2: Repeating steps, evaluating variables<br /> &lt;syntaxhighlight lang=&quot;yaml&quot;&gt;<br /> ...<br /> <br /> - name: Assign directories to minetest group and owner<br /> file:<br /> path: &quot;{{ minetest_base_dir }}/{{ item }}&quot;<br /> state: directory<br /> mode: u=rwX,g=rX,o=rX<br /> owner: minetest<br /> group: minetest<br /> with_items:<br /> - minetest<br /> - minetest_game<br /> - minetest_source<br /> - minetest_mods<br /> - world<br /> - minetest_mapserver<br /> become: true<br /> <br /> ...<br /> &lt;/syntaxhighlight&gt;<br /> <br /> We assume &lt;code&gt;minetest_base_dir&lt;/code&gt; is a variable either defined somewhere in our playbook or supplied by us from the command line (&lt;code&gt;ansible-playbook -i my_hosts_file.yml&lt;/code&gt; '''&lt;code&gt;-e minetest_base_dir=&amp;quot;/var/lib/minetest&amp;quot;&lt;/code&gt;''' &lt;code&gt;example_playbook.yml&lt;/code&gt;) or from a file (&lt;code&gt;ansible-playbook -i my_hosts_file.yml&lt;/code&gt; '''&lt;code&gt;-e @my_variables.yml&lt;/code&gt;''' &lt;code&gt;example_playbook.yml&lt;/code&gt;).&lt;br&gt;<br /> We want to change the group and owner of a bunch of directories and their contents and assign a mode: files should be readable for everyone and only writable for the user owning them.&lt;ref&gt;We cannot just write &lt;code&gt;mode: 644&lt;/code&gt; though, because directories need to be marked as executable to list their contents – they should have mode 755. Just as on the command line using &lt;code&gt;chmod&lt;/code&gt;, the &lt;code&gt;file&lt;/code&gt; module also accepts the syntax shown in the example. Using the big &lt;code&gt;X&lt;/code&gt; instead if the small one means the executable bit is only set for directories or if the bit was already set before.&lt;/ref&gt;&lt;br&gt;<br /> The &lt;code&gt;{{&lt;/code&gt; curly braces &lt;code&gt;}}&lt;/code&gt; are Jinja2 syntax and here only denote variables, though we can do more complicated stuff. These should always be in quotation marks so the whole file is valid YAML syntax.&lt;br&gt;<br /> &lt;code&gt;item&lt;/code&gt; is only present because of our use of &lt;code&gt;with_items&lt;/code&gt;: We run the task for every item in that list, at every iteration the current item is assigned to the &lt;code&gt;item&lt;/code&gt; variable. Here we are just using strings, but we could use arbitrarily complex items, if our goal requires it. There are a bunch of aliases for &lt;code&gt;with_items&lt;/code&gt;, another one is &lt;code&gt;loop&lt;/code&gt;.<br /> &lt;hr&gt;<br /> <br /> Example 3: Checking for file properties, acting based on a previous tasks output<br /> &lt;syntaxhighlight lang=&quot;yaml&quot;&gt;<br /> - name: Get stats of a file<br /> ansible.builtin.stat:<br /> path: /etc/foo.conf<br /> register: st<br /> <br /> - name: Fail if the file does not belong to 'root'<br /> ansible.builtin.fail:<br /> msg: &quot;Whoops! file ownership has changed&quot;<br /> when: st.stat.pw_name != 'root'<br /> &lt;/syntaxhighlight&gt;<br /> <br /> The [https://docs.ansible.com/ansible/latest/collections/ansible/builtin/stat_module.html &lt;code&gt;stat&lt;/code&gt; module] never changes anything. It just retrieves status information about a file. But by registering the result of the task to a variable, we can use it for other parts of our playbook.<br /> <br /> :::info&lt;br&gt;<br /> Be careful though, '''if you find yourself programming in a playbook, you're doing something wrong.''' Mostly you're either over-engineering/procrastinating on other problems or you really need a module that does that complicated stuff instead.&lt;br&gt;<br /> :::<br /> &lt;hr&gt;<br /> <br /> Example 4: Using commands when no modules for it are available<br /> &lt;syntaxhighlight lang=&quot;yaml&quot;&gt;<br /> - name: Get newest Minetest<br /> ansible.builtin.git:<br /> repo: &quot;{{ minetest_git_repo }}&quot;<br /> dest: &quot;{{ minetest_base_dir }}/minetest_source&quot;<br /> force: true<br /> version: &quot;{{ minetest_version }}&quot;<br /> diff: false<br /> become: true<br /> register: minetest_repo<br /> <br /> - name: Build Minetest<br /> command:<br /> cmd: &quot;{{ item }}&quot;<br /> chdir: &quot;{{ minetest_base_dir }}/minetest_source&quot;<br /> with_items:<br /> - cmake . -DRUN_IN_PLACE=TRUE -DBUILD_SERVER=TRUE -DBUILD_CLIENT=FALSE -DPostgreSQL_TYPE_INCLUDE_DIR=/usr/include/postgresql/<br /> - make -j4<br /> become: true<br /> register: minetest_build<br /> when: minetest_repo.changed<br /> &lt;/syntaxhighlight&gt;<br /> <br /> There's not always a module for everything. Sometimes the usecase is too obscure, sometimes there is no meaningful way to ensure Ansible principles like idempotence.&lt;ref&gt;not changing stuff if the desired state is already met&lt;/ref&gt;&lt;br&gt;<br /> The above example is trying to build minetest for maximum control over the installed version. After resetting the git repository to the desired version, the binary is built. For this, we use the [https://docs.ansible.com/ansible/latest/collections/ansible/builtin/command_module.html &lt;code&gt;command&lt;/code&gt; module] – but it has no idea whether the desired state is already met or whether the command has to be run again. We manually tell it to skip this task if the repository did not change in the previous task.<br /> <br /> :::info&lt;br&gt;<br /> There is a minor gotcha with this: Assume you abort the playbook while its running the build task because you forgot to do something else. If you run it again, the git update will be skipped, as it is already in its desired state. But now the build task will not be run again. If you have this in your playbooks, you need to be aware of this edge case.&lt;br&gt;<br /> This is another reason why logical links in playbooks should be kept to a minimum.&lt;br&gt;<br /> :::<br /> <br /> :::warning&lt;br&gt;<br /> There is also the &lt;code&gt;shell&lt;/code&gt; module that feels very similar. But in contrast to &lt;code&gt;command&lt;/code&gt;, it runs the specified command in a shell. This opens up the use of shell features like piping, but comes at an increased security risk, especially if building the command from variables.&lt;br&gt;<br /> Using &lt;code&gt;shell&lt;/code&gt; is ''not'' recommended.&lt;br&gt;<br /> :::<br /> <br /> To make &lt;code&gt;command&lt;/code&gt; report success, failure or changed properties depending on other conditions than just the return code, use [https://docs.ansible.com/ansible/latest/user_guide/playbooks_error_handling.html#defining-failure &lt;code&gt;failed_when&lt;/code&gt;, &lt;code&gt;changed_when&lt;/code&gt; and &lt;code&gt;ignore_errors&lt;/code&gt;].<br /> <br /> === Testing things ===<br /> <br /> * syntax check with &lt;code&gt;yamllint&lt;/code&gt; and &lt;code&gt;ansible-lint&lt;/code&gt;<br /> * on real targets (e.g. different host files to ''not'' mess up production stuff)<br /> * in containers or VMs<br /> ** Vagrant (see below: [[#Further-reading|Further reading]])<br /> <br /> === Keeping secrets ===<br /> <br /> <br /> It is common practice to store important variables alongside playbooks and roles in even public repositories by encryping them with [https://docs.ansible.com/ansible/latest/cli/ansible-vault.html Ansible Vault].<br /> <br /> :::warning&lt;br&gt;<br /> These are production secrets, but never management access to the target machines. Jump hosts are one popular solution to grant access to many machines to various actors: Only this host stores the admins pubkeys, while the target machines only have the key from jump host.&lt;br&gt;<br /> :::<br /> <br /> === Roles ===<br /> <br /> <br /> Roles are re-usable playbooks that come with default variables, files and can be shared in collections using [https://docs.ansible.com/ansible/latest/galaxy/user_guide.html Ansible Galaxy]. Roles are even easier to develop and test using [https://molecule.readthedocs.io/en/latest/getting-started.html Molecule] to automate different testing stages (linting, provisioning, testing for idempotence, testing for side effects).<br /> <br /> == interesting stuff ==<br /> <br /> * create container &amp;amp; deploy (example from [http://docs.ansible.com docs.ansible.com])<br /> <br /> &lt;syntaxhighlight lang=&quot;yaml&quot;&gt;<br /> - name: Create a jenkins container<br /> community.general.docker_container:<br /> docker_host: myserver.net:4243<br /> name: my_jenkins<br /> image: jenkins<br /> <br /> - name: Add the container to inventory<br /> ansible.builtin.add_host:<br /> name: my_jenkins<br /> ansible_connection: docker<br /> ansible_docker_extra_args: &quot;--tlsverify --tlscacert=/path/to/ca.pem --tlscert=/path/to/client-cert.pem --tlskey=/path/to/client-key.pem -H=tcp://myserver.net:4243&quot;<br /> ansible_user: jenkins<br /> changed_when: false<br /> <br /> - name: Create a directory for ssh keys<br /> delegate_to: my_jenkins<br /> ansible.builtin.file:<br /> path: &quot;/var/jenkins_home/.ssh/jupiter&quot;<br /> state: directory<br /> &lt;/syntaxhighlight&gt;<br /> <br /> == Further reading ==<br /> <br /> * Ansible docs: Group tasks to blocks: [https://docs.ansible.com/ansible/latest/user_guide/playbooks_blocks.html https://docs.ansible.com/ansible/latest/user_guide/playbooks_blocks.html]<br /> * Ansible docs: Guide on using Vagrant with Ansible: [https://docs.ansible.com/ansible/latest/scenario_guides/guide_vagrant.html https://docs.ansible.com/ansible/latest/scenario_guides/guide_vagrant.html]<br /> ** Vagrant can use various virtualization backends<br /> ** Images (&amp;quot;boxes&amp;quot;) are available for specific backends; when running Vagrant with QEMU/KVM, you cannot use &amp;quot;ubuntu/bionic64&amp;quot;, use &amp;quot;generic/ubuntu2004&amp;quot;<br /> ** [https://ostechnix.com/how-to-use-vagrant-with-libvirt-kvm-provider/ https://ostechnix.com/how-to-use-vagrant-with-libvirt-kvm-provider/]<br /> * another Ansible beginners tutorial that looks easy to start with: [https://learnxinyminutes.com/docs/ansible/ https://learnxinyminutes.com/docs/ansible/]<br /> * an article on using Ansible to spawn and destroy Podman containers: [https://fedoramagazine.org/using-ansible-to-configure-podman-containers/ https://fedoramagazine.org/using-ansible-to-configure-podman-containers/]<br /> <br /> &lt;hr&gt;<br /> * Ansible roles/playbooks to deploy the server in our current configuration or test locally: [https://gitlab.fachschaften.org/minetest/minetest_scripts https://gitlab.fachschaften.org/minetest/minetest_scripts]<br /> * Ansible roles by TU Dortmund: [https://gitlab.fachschaften.org/fsi-ansible https://gitlab.fachschaften.org/fsi-ansible]</div> 2003:C8:6F12:4200:31A4:EB2F:8FC8:321C https://wiki.kif.rocks/w/index.php?title=KIF490:Einf%C3%BChrung_in_Ansible_(einfach_wartbare,_reproduzierbare_Systemkonfigurationen)&diff=45337 KIF490:Einführung in Ansible (einfach wartbare, reproduzierbare Systemkonfigurationen) 2021-05-17T22:37:42Z <p>2003:C8:6F12:4200:31A4:EB2F:8FC8:321C: Die Seite wurde neu angelegt: „ = Ansible Quickstart = == What? == * Automation framework * Open Source * use cases ** software deployment ** configuration management ** infrastructure se…“</p> <hr /> <div><br /> = Ansible Quickstart =<br /> <br /> <br /> == What? ==<br /> <br /> * Automation framework<br /> * Open Source<br /> * use cases<br /> ** software deployment<br /> ** configuration management<br /> ** infrastructure service orchestration<br /> ** security automation<br /> <br /> <br /> Docs: [https://docs.ansible.com/ https://docs.ansible.com/]<br /> <br /> == How? ==<br /> <br /> <br /> === Define hosts (hosts file) ===<br /> <br /> * in &lt;code&gt;/etc/ansible/hosts&lt;/code&gt; or whatever is configured in &lt;code&gt;/etc/ansible/ansible.cfg&lt;/code&gt;<br /> * or by supplying it to an ansible command with &lt;code&gt;-i&lt;/code&gt;<br /> * which hosts are we addressing? how to connect to them?<br /> * in ini format or YAML<br /> * hosts will later be identified by this name<br /> * hosts can be grouped to apply actions to whatever hosts are in a group<br /> * ini example:<br /> <br /> &lt;syntaxhighlight lang=&quot;ini&quot;&gt;<br /> mail.example.com<br /> <br /> [webservers]<br /> foo.example.com<br /> bar.example.com<br /> <br /> [webservers:vars]<br /> port_for_thing=8080<br /> <br /> [dbservers]<br /> one.example.com<br /> two.example.com<br /> test_server ansible_host=three.example.com<br /> &lt;/syntaxhighlight&gt;<br /> * YAML example:<br /> <br /> &lt;syntaxhighlight lang=&quot;yaml&quot;&gt;<br /> all:<br /> hosts:<br /> mail.example.com:<br /> children:<br /> webservers:<br /> hosts:<br /> foo.example.com:<br /> bar.example.com:<br /> vars:<br /> port_for_thing: 8080<br /> dbservers:<br /> hosts:<br /> one.example.com:<br /> two.example.com:<br /> test_server:<br /> ansible_host: three.example.com<br /> &lt;/syntaxhighlight&gt;<br /> * default groups: &lt;code&gt;all&lt;/code&gt; and &lt;code&gt;ungrouped&lt;/code&gt;<br /> * also nice: ranges of hosts<br /> <br /> &lt;syntaxhighlight lang=&quot;yaml&quot;&gt;<br /> webservers:<br /> hosts:<br /> www[01:50].example.com<br /> &lt;/syntaxhighlight&gt;<br /> * example host file from the kif minetest server:<br /> <br /> &lt;syntaxhighlight lang=&quot;yaml&quot;&gt;<br /> all:<br /> hosts:<br /> kif_minetest:<br /> &lt;/syntaxhighlight&gt;<br /> * ...and the rest is specified in the &lt;code&gt;~/.ssh/config&lt;/code&gt; (ssh jumps, key file etc.)<br /> * dynamic inventory possible<br /> <br /> <br /> === Writing playbooks ===<br /> <br /> * in YAML<br /> * specify tasks which will be run in sequence<br /> * descriptive: tasks describe desired state, we don't worry about how it is achieved<br /> * name for identification<br /> * module with parameters ([https://docs.ansible.com/ansible/latest/collections/ look at the docs])<br /> * optional meta stuff<br /> ** &lt;code&gt;vars&lt;/code&gt;: variables to pass in (e.g. if templating a file)<br /> ** &lt;code&gt;with_items&lt;/code&gt; etc.: items for each to run this task<br /> ** &lt;code&gt;when&lt;/code&gt;: conditionals to skip the task if not met<br /> ** &lt;code&gt;tags&lt;/code&gt; to attach to run only or exclude specific subsets of tasks on runtime<br /> * rule of thumb: don't be more clever than you need to, simplicity &amp;amp; readability first!<br /> * run playbooks with &lt;code&gt;ansible-playbook -i my_hosts_file.yml example_playbook.yml&lt;/code&gt;<br /> <br /> <br /> Example 1: Simple minetest server install on Ubuntu<br /> &lt;syntaxhighlight lang=&quot;yaml&quot;&gt;<br /> ---<br /> - hosts: all<br /> tasks:<br /> - name: Install newest minetest server<br /> apt:<br /> pkg:<br /> - minetest-server<br /> state: latest<br /> update_cache: true<br /> cache_valid_time: 86400 # One day<br /> become: true<br /> &lt;/syntaxhighlight&gt;<br /> <br /> This playbook has just one task it will run on any target specified in the inventory.&lt;br&gt;<br /> We use [https://docs.ansible.com/ansible/latest/collections/ansible/builtin/apt_module.html the &lt;code&gt;apt&lt;/code&gt; module] to update the cache if older than a day and install the &lt;code&gt;minetest-server&lt;/code&gt; package. By specifying &lt;code&gt;state: latest&lt;/code&gt;, we instruct it to ensure the newest available version is installed (the default &lt;code&gt;state: present&lt;/code&gt; would already be satisfied if the package would be installed). Leaving out &lt;code&gt;cache_valid_time&lt;/code&gt; would cause the module to always update the cache (and take up time), keeping the default of &lt;code&gt;update_cache: false&lt;/code&gt; would base actions just on the existing cache every time&lt;br&gt;<br /> The whole task needs &lt;code&gt;become: true&lt;/code&gt; to meet the elevated user rights required by changing system critical aspects. &lt;code&gt;become&lt;/code&gt; can be thought of as an abstraction from &lt;code&gt;sudo&lt;/code&gt; in the case of linux, as Ansible can be used to manage a multitude of different systems, including Windows.&lt;ref&gt;Though it may require [https://docs.ansible.com/ansible/latest/user_guide/windows.html system specific modules]&lt;/ref&gt;<br /> &lt;hr&gt;<br /> <br /> Example 2: Repeating steps, evaluating variables<br /> &lt;syntaxhighlight lang=&quot;yaml&quot;&gt;<br /> ...<br /> <br /> - name: Assign directories to minetest group and owner<br /> file:<br /> path: &quot;{{ minetest_base_dir }}/{{ item }}&quot;<br /> state: directory<br /> mode: u=rwX,g=rX,o=rX<br /> owner: minetest<br /> group: minetest<br /> with_items:<br /> - minetest<br /> - minetest_game<br /> - minetest_source<br /> - minetest_mods<br /> - world<br /> - minetest_mapserver<br /> become: true<br /> <br /> ...<br /> &lt;/syntaxhighlight&gt;<br /> <br /> We assume &lt;code&gt;minetest_base_dir&lt;/code&gt; is a variable either defined somewhere in our playbook or supplied by us from the command line (&lt;code&gt;ansible-playbook -i my_hosts_file.yml&lt;/code&gt; '''&lt;code&gt;-e minetest_base_dir=&amp;quot;/var/lib/minetest&amp;quot;&lt;/code&gt;''' &lt;code&gt;example_playbook.yml&lt;/code&gt;) or from a file (&lt;code&gt;ansible-playbook -i my_hosts_file.yml&lt;/code&gt; '''&lt;code&gt;-e @my_variables.yml&lt;/code&gt;''' &lt;code&gt;example_playbook.yml&lt;/code&gt;).&lt;br&gt;<br /> We want to change the group and owner of a bunch of directories and their contents and assign a mode: files should be readable for everyone and only writable for the user owning them.&lt;ref&gt;We cannot just write &lt;code&gt;mode: 644&lt;/code&gt; though, because directories need to be marked as executable to list their contents – they should have mode 755. Just as on the command line using &lt;code&gt;chmod&lt;/code&gt;, the &lt;code&gt;file&lt;/code&gt; module also accepts the syntax shown in the example. Using the big &lt;code&gt;X&lt;/code&gt; instead if the small one means the executable bit is only set for directories or if the bit was already set before.&lt;/ref&gt;&lt;br&gt;<br /> The &lt;code&gt;{{&lt;/code&gt; curly braces &lt;code&gt;}}&lt;/code&gt; are Jinja2 syntax and here only denote variables, though we can do more complicated stuff. These should always be in quotation marks so the whole file is valid YAML syntax.&lt;br&gt;<br /> &lt;code&gt;item&lt;/code&gt; is only present because of our use of &lt;code&gt;with_items&lt;/code&gt;: We run the task for every item in that list, at every iteration the current item is assigned to the &lt;code&gt;item&lt;/code&gt; variable. Here we are just using strings, but we could use arbitrarily complex items, if our goal requires it. There are a bunch of aliases for &lt;code&gt;with_items&lt;/code&gt;, another one is &lt;code&gt;loop&lt;/code&gt;.<br /> &lt;hr&gt;<br /> <br /> Example 3: Checking for file properties, acting based on a previous tasks output<br /> &lt;syntaxhighlight lang=&quot;yaml&quot;&gt;<br /> - name: Get stats of a file<br /> ansible.builtin.stat:<br /> path: /etc/foo.conf<br /> register: st<br /> <br /> - name: Fail if the file does not belong to 'root'<br /> ansible.builtin.fail:<br /> msg: &quot;Whoops! file ownership has changed&quot;<br /> when: st.stat.pw_name != 'root'<br /> &lt;/syntaxhighlight&gt;<br /> <br /> The [https://docs.ansible.com/ansible/latest/collections/ansible/builtin/stat_module.html &lt;code&gt;stat&lt;/code&gt; module] never changes anything. It just retrieves status information about a file. But by registering the result of the task to a variable, we can use it for other parts of our playbook.<br /> <br /> :::info&lt;br&gt;<br /> Be careful though, '''if you find yourself programming in a playbook, you're doing something wrong.''' Mostly you're either over-engineering/procrastinating on other problems or you really need a module that does that complicated stuff instead.&lt;br&gt;<br /> :::<br /> &lt;hr&gt;<br /> <br /> Example 4: Using commands when no modules for it are available<br /> &lt;syntaxhighlight lang=&quot;yaml&quot;&gt;<br /> - name: Get newest Minetest<br /> ansible.builtin.git:<br /> repo: &quot;{{ minetest_git_repo }}&quot;<br /> dest: &quot;{{ minetest_base_dir }}/minetest_source&quot;<br /> force: true<br /> version: &quot;{{ minetest_version }}&quot;<br /> diff: false<br /> become: true<br /> register: minetest_repo<br /> <br /> - name: Build Minetest<br /> command:<br /> cmd: &quot;{{ item }}&quot;<br /> chdir: &quot;{{ minetest_base_dir }}/minetest_source&quot;<br /> with_items:<br /> - cmake . -DRUN_IN_PLACE=TRUE -DBUILD_SERVER=TRUE -DBUILD_CLIENT=FALSE -DPostgreSQL_TYPE_INCLUDE_DIR=/usr/include/postgresql/<br /> - make -j4<br /> become: true<br /> register: minetest_build<br /> when: minetest_repo.changed<br /> &lt;/syntaxhighlight&gt;<br /> <br /> There's not always a module for everything. Sometimes the usecase is too obscure, sometimes there is no meaningful way to ensure Ansible principles like idempotence.&lt;ref&gt;not changing stuff if the desired state is already met&lt;/ref&gt;&lt;br&gt;<br /> The above example is trying to build minetest for maximum control over the installed version. After resetting the git repository to the desired version, the binary is built. For this, we use the [https://docs.ansible.com/ansible/latest/collections/ansible/builtin/command_module.html &lt;code&gt;command&lt;/code&gt; module] – but it has no idea whether the desired state is already met or whether the command has to be run again. We manually tell it to skip this task if the repository did not change in the previous task.<br /> <br /> :::info&lt;br&gt;<br /> There is a minor gotcha with this: Assume you abort the playbook while its running the build task because you forgot to do something else. If you run it again, the git update will be skipped, as it is already in its desired state. But now the build task will not be run again. If you have this in your playbooks, you need to be aware of this edge case.&lt;br&gt;<br /> This is another reason why logical links in playbooks should be kept to a minimum.&lt;br&gt;<br /> :::<br /> <br /> :::warning&lt;br&gt;<br /> There is also the &lt;code&gt;shell&lt;/code&gt; module that feels very similar. But in contrast to &lt;code&gt;command&lt;/code&gt;, it runs the specified command in a shell. This opens up the use of shell features like piping, but comes at an increased security risk, especially if building the command from variables.&lt;br&gt;<br /> Using &lt;code&gt;shell&lt;/code&gt; is ''not'' recommended.&lt;br&gt;<br /> :::<br /> <br /> To make &lt;code&gt;command&lt;/code&gt; report success, failure or changed properties depending on other conditions than just the return code, use [https://docs.ansible.com/ansible/latest/user_guide/playbooks_error_handling.html#defining-failure &lt;code&gt;failed_when&lt;/code&gt;, &lt;code&gt;changed_when&lt;/code&gt; and &lt;code&gt;ignore_errors&lt;/code&gt;].<br /> <br /> === Testing things ===<br /> <br /> * syntax check with &lt;code&gt;yamllint&lt;/code&gt; and &lt;code&gt;ansible-lint&lt;/code&gt;<br /> * on real targets (e.g. different host files to ''not'' mess up production stuff)<br /> * in containers or VMs<br /> ** Vagrant (see below: [#Further-reading Further reading])<br /> <br /> <br /> === Keeping secrets ===<br /> <br /> <br /> It is common practice to store important variables alongside playbooks and roles in even public repositories by encryping them with [https://docs.ansible.com/ansible/latest/cli/ansible-vault.html Ansible Vault].<br /> <br /> :::warning&lt;br&gt;<br /> These are production secrets, but never management access to the target machines. Jump hosts are one popular solution to grant access to many machines to various actors: Only this host stores the admins pubkeys, while the target machines only have the key from jump host.&lt;br&gt;<br /> :::<br /> <br /> === Roles ===<br /> <br /> <br /> Roles are re-usable playbooks that come with default variables, files and can be shared in collections using [https://docs.ansible.com/ansible/latest/galaxy/user_guide.html Ansible Galaxy]. Roles are even easier to develop and test using [https://molecule.readthedocs.io/en/latest/getting-started.html Molecule] to automate different testing stages (linting, provisioning, testing for idempotence, testing for side effects).<br /> <br /> == interesting stuff ==<br /> <br /> * create container &amp;amp; deploy (example from [http://docs.ansible.com docs.ansible.com])<br /> <br /> &lt;syntaxhighlight lang=&quot;yaml&quot;&gt;<br /> - name: Create a jenkins container<br /> community.general.docker_container:<br /> docker_host: myserver.net:4243<br /> name: my_jenkins<br /> image: jenkins<br /> <br /> - name: Add the container to inventory<br /> ansible.builtin.add_host:<br /> name: my_jenkins<br /> ansible_connection: docker<br /> ansible_docker_extra_args: &quot;--tlsverify --tlscacert=/path/to/ca.pem --tlscert=/path/to/client-cert.pem --tlskey=/path/to/client-key.pem -H=tcp://myserver.net:4243&quot;<br /> ansible_user: jenkins<br /> changed_when: false<br /> <br /> - name: Create a directory for ssh keys<br /> delegate_to: my_jenkins<br /> ansible.builtin.file:<br /> path: &quot;/var/jenkins_home/.ssh/jupiter&quot;<br /> state: directory<br /> &lt;/syntaxhighlight&gt;<br /> <br /> == Further reading ==<br /> <br /> * Ansible docs: Group tasks to blocks: [https://docs.ansible.com/ansible/latest/user_guide/playbooks_blocks.html https://docs.ansible.com/ansible/latest/user_guide/playbooks_blocks.html]<br /> * Ansible docs: Guide on using Vagrant with Ansible: [https://docs.ansible.com/ansible/latest/scenario_guides/guide_vagrant.html https://docs.ansible.com/ansible/latest/scenario_guides/guide_vagrant.html]<br /> ** Vagrant can use various virtualization backends<br /> ** Images (&amp;quot;boxes&amp;quot;) are available for specific backends; when running Vagrant with QEMU/KVM, you cannot use &amp;quot;ubuntu/bionic64&amp;quot;, use &amp;quot;generic/ubuntu2004&amp;quot;<br /> ** [https://ostechnix.com/how-to-use-vagrant-with-libvirt-kvm-provider/ https://ostechnix.com/how-to-use-vagrant-with-libvirt-kvm-provider/]<br /> * another Ansible beginners tutorial that looks easy to start with: [https://learnxinyminutes.com/docs/ansible/ https://learnxinyminutes.com/docs/ansible/]<br /> * an article on using Ansible to spawn and destroy Podman containers: [https://fedoramagazine.org/using-ansible-to-configure-podman-containers/ https://fedoramagazine.org/using-ansible-to-configure-podman-containers/]<br /> <br /> &lt;hr&gt;<br /> * Ansible roles/playbooks to deploy the server in our current configuration or test locally: [https://gitlab.fachschaften.org/minetest/minetest_scripts https://gitlab.fachschaften.org/minetest/minetest_scripts]<br /> * Ansible roles by TU Dortmund: [https://gitlab.fachschaften.org/fsi-ansible https://gitlab.fachschaften.org/fsi-ansible]</div> 2003:C8:6F12:4200:31A4:EB2F:8FC8:321C