Das Ansible Modul yum_repository
ist dazu geeignet, Repositories zu RPM-basierten Linux-Distributionen hinzuzufügen bzw. zu entfernen. Es findet z.B. in unserer Umgebung Anwendung, um Repositories von unserem lokalen Spiegelserver anzubinden. Der folgende Text gibt ein Beispiel zur Anwendung dieses Ansible-Moduls.
Auf meiner Spielwiese verwende ich folgende Konfiguration, um zwei Repositories hinzuzufügen.
Hinweis: Die folgende Konfiguration ist nicht zur Nachahmung empfohlen. Es handelt sich dabei um meine ersten Schritte mit Ansible. Es ist daher wahrscheinlich, dass die Konfiguration noch Fehler enthält, nicht optimiert ist und ein großes Verbesserungspotenzial besitzt. Die Nachahmung erfolgt ausdrücklich auf eigene Gefahr. Über Hinweise, wie man es besser machen kann, freue ich mich jederzeit.
Verzeichnisstruktur
Abgeleitet aus den „Best Practices“ von Ansible, verwende ich auf meiner Spielwiese folgende Verzeichnisstruktur:
ansible/ |-- group_vars | `-- e-stage # variables for group e-stage |-- hosts # inventory file |-- host_vars # for system specific variables |-- roles | |-- common # this hierarchy represents a "role" | | |-- defaults | | |-- files | | |-- handlers | | | `-- main.yml # handlers file | | |-- meta | | |-- tasks | | | `-- main.yml # tasks file can include smaller files if wanted | | `-- vars | `-- std-repos | |-- defaults | |-- files | |-- handlers | |-- meta | |-- tasks | |-- templates | `-- vars |-- set_repos.yml # playbook which sets the repos |-- site.yml # master playbook file `-- staging # inventory file for staging environment
Das Playbook
Das Playbook ist sehr kurz gehalten und gibt im Wesentlichen nur an, welche Hosts auf welche Rolle gemapped werden sollen.
# set_repos.yml --- - hosts: all roles: - std-repos
Das obige Playbook definiert, dass die Tasks aus der Datei roles/e-stage/tasks/main.yml
ausgeführt werden sollen, welche wie folgt aufgebaut ist:
--- - name: Add rhel-e-stage-repository yum_repository: name: "{{ repo_name1 }}" description: "{{ repo_description1 }}" baseurl: "{{ repo_baseurl1 }}" gpgcheck: yes gpgkey: file:///etc/pki/rpm-gpg/RPM-GPG-KEY-redhat-release - name: Add my-own-repository yum_repository: name: "{{ repo_name2 }}" description: "{{ repo_description2 }}" baseurl: "{{ rebo_baseurl2 }}" gpgcheck: no
GroupVars
Nun existieren im Staging-Bereich häufig noch weitere Stages. So gibt es oftmals eine T-, E- und I-Stage. Dabei ist jeder Stage ein eigenes Stage-Repository zugeordnet. Um die Systeme in den unterschiedlichen Stages mit den dazugehörigen Stage-Repositories zu versorgen, werden diese mit Hilfe der group_vars
den entsprechenden Gruppen zugewiesen.
Für die Server der Gruppe e-stage
wird in der Datei group_vars/e-stage
definiert:
# file: group_vars/e-stage repo_name1: rhel-e-stage repo_description1: Local RHEL-Repo for E-Stage repo_baseurl1: http://repo.example.com/rhel-e-stage/ repo_name2: own-e-stage repo_description2: Local OWN-Repo for E-Stage repo_baseurl2: http://repo.example.com/own-e-stage/
Nach diesem Beispiel können nun weitere Variablen unter group_vars
für andere Stages erstellt werden. Den Hosts in den entsprechenden Hostgruppen, werden auf diesem Wege die passenden Repositories hinzugefügt.