Änderungen

Zur Navigation springen Zur Suche springen
6.041 Bytes hinzugefügt ,  03:34, 21. Okt. 2020
Zeile 1: Zeile 1: −
Ansible ist ein so genanntes Orchestrierungswerkzeug, mit dem man Computer automatisch konfigurieren kann. Dazu verwendet Ansible so genannte Playbooks.
+
[https://docs.ansible.com/ansible/latest/index.html Ansible] ist ein so genanntes Orchestrierungswerkzeug, mit dem man Computer automatisch konfigurieren kann. Dazu verwendet Ansible so genannte Playbooks.
         −
Siehe
  −
* [https://www.informatik-aktuell.de/entwicklung/programmiersprachen/einfuehrung-in-ansible.html Einführung in Ansible]
      
== Vorbereitung ==
 
== Vorbereitung ==
Zeile 11: Zeile 9:     
* Installation eines Minimalsystems
 
* Installation eines Minimalsystems
 +
* Einrichten eines Benutzers speziell für Ansible (Beispiel, das bereits Ansible nutzt, siehe unten)
 
* Installation der Pakete  
 
* Installation der Pakete  
 
** openssh-server
 
** openssh-server
 
** sudo  
 
** sudo  
*** Der sudo-Gruppe das passwortlose Ausführen erlauben (siehe [[Sudo]])
+
*** Der ansible-Benutzer das passwortlose Ausführen erlauben (siehe [[Sudo]])
 
** python3
 
** python3
*** Verlinke python3:
+
*** Verlinke python3: <code>sudo ln -s /usr/bin/python3 /usr/bin/python</code> oder
  sudo ln -s /usr/bin/python3 /usr/bin/python
+
*** Deklarieren der entsprechenden Variable für die Rechnergruppe. Beispiel einer inventory.yaml:
 +
  all:
 +
    hosts:
 +
      blacky:
 +
        ansible_host: blacky.fritz.box   
 +
    children:
 +
      home:
 +
        hosts:
 +
          blacky:
 +
      python3: # All hosts that only have python3
 +
        hosts:
 +
          blacky:
 +
        vars:
 +
          ansible_python_interpreter: /usr/bin/python3
 +
 
 +
==== Einrichten eines Ansible-Benutzers ====
 +
 
 +
Das folgende Skript <code>setupAnsible.yaml</code> geht davon aus, dass auf dem Zielrechner ein frisches [[Ubuntu]] 18.04 installiert ist, auf das man sich mit [[SSH]] als normaler Nutzer einwählen kann. Dieser Nutzer ist auch in der sudo-Gruppe und kann mittels Eingabe eines sudo-Passworts root-Rechte bekommen.
 +
 
 +
<pre>
 +
# Call this file with
 +
#    ansible-playbook -l YOURRECHNER -K -v setupAnsible.yaml
 +
 
 +
- hosts:
 +
    - all
 +
   
 +
  tasks:
 +
    - name: create group ansible
 +
      become: true
 +
      group:
 +
        name: ansible
 +
        gid: 425
 +
       
 +
    - name: create user ansible
 +
      become: true
 +
      user:
 +
        name: ansible
 +
        group: ansible
 +
        uid: 425
 +
        password: "$6$rXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXh."
 +
          # encrypted password created with
 +
          #    mkpasswd --method=sha-512
 +
          # You can make it really complicated, since you do not need it again.
 +
        state: present
 +
       
 +
    - name: add user ansible to sudoers with no passwd
 +
      become: true
 +
      copy:
 +
        src: etc/sudoers.d/ansible
 +
        dest: /etc/sudoers.d/ansible
 +
        mode: "0440"
 +
        validate: "visudo -cf %s"
 +
   
 +
    - name: set my authorized key for user ansible
 +
      become: true
 +
      authorized_key:
 +
        key:  "{{ lookup('file', lookup('env','HOME') + '/.ssh/id_rsa.pub') }}"
 +
        user:  ansible
 +
        state: present
 +
</pre>       
 +
   
 +
Nach Ausführung dieses Playbooks mittels
 +
  ansible-playbook -i inventory.yaml -l YOURRECHNER -K -v setupAnsible.yaml
 +
 
 +
wird der Nutzer <code>ansible</code> in die <code>inventory.yaml</code> als Standard-Ansible-Nutzer eingetragen:
 +
  all:
 +
    hosts:
 +
      blacky:
 +
        ansible_host: blacky.fritz.box 
 +
        '''ansible_ssh_user: ansible'''
    
=== Vorbereitung des Kontrollrechners  ===
 
=== Vorbereitung des Kontrollrechners  ===
Zeile 23: Zeile 91:  
   sudo aptitude install ansible
 
   sudo aptitude install ansible
    +
== Nutzen von Ansible ==
    +
=== Konfiguration ===
    +
Die Konfiguration kann durch verschiedene Dateien erfolgen, z.B.:
 +
* ansible.cfg
 +
* ~/.ansible.cfg
 +
 +
Der Inhalt einer ansible.cfg könnte z.B. lauten:
 +
 +
  [defaults]
 +
  inventory=inventory.yaml
 +
 +
=== Inventory ===
 +
 +
Die Inventory-Datei wird in YAML geschrieben, z.B.:
 +
  all:
 +
    hosts:
 +
      blacky:
 +
        ansible_host: blacky.fritz.box
 +
        ansible_user: ansible
 +
 +
In YAML werden die Zeilen mit Leerzeichen, nicht mit Tabs eingerückt.
 +
 +
Siehe
 +
* https://docs.ansible.com/ansible/latest/user_guide/intro_inventory.html
 +
 +
=== Einfache Kommandos ===
 +
==== Ping-Test ====
 +
 +
  ansible all -m ping
 +
 +
==== Ausführen eines Shell-Kommandos ====
 +
 +
Mit Ansible lässt sich auch jedes beliebige [[Shell]]-Kommando ausführen:
 +
 +
  ansible zielrechner  -m command -a "whoami"
 +
 +
Will man das Kommando als root ausführen, setzt man <code>--become</code> hinzu:
 +
  ansible pia2016 --become -m command -a "whoami"
 +
 +
Das hier verwendete Modul command nutzt jedoch nicht die Shell-Erweiterungen. Dafür müsste man das Modul <code>shell</code> nennen.
 +
 +
==== Debug-Hilfe ====
 +
 +
Das Modul "Debug" kann Hilfsausgaben erzeugen. Beispiel:
 +
  ansible blacky  -m debug -a <nowiki>'msg="{{ ansible_ssh_user }}"'</nowiki>
 +
 +
=== Playbooks ===
 +
 +
Mit Playbooks kann man automatisieren, welcher Rechner welchen Zustand erreichen soll.
 +
 +
Dazu nutzt man Tasks in Form von Modulaufrufen (deklarative Ansible-Form von Befehlen), Rechnergruppen und Rollen.
 +
 +
==== Package-Updates ====
 +
 +
Folgender Auszug aus den Tasks eines Playbooks sollte das Paket-Updaten auf einem [[Debian]]- oder [[Ubuntu]]-System ermöglichen:
 +
 +
  - name: update and upgrade apt packages
 +
    become: true
 +
    apt: 
 +
      name: "*"
 +
      state: latest
 +
      install_recommends: false
 +
      update_cache: true
 +
 +
=== Roles ===
 +
 +
Roles ist ein Konzept, um bestimmte Funktionalitäten zu bündeln; diese können dann auf verschiedenen Rechnern wiederverwendet werden.
 +
 +
Mit ansible-galaxy können diese Rollen auch leicht an andere Benutzer weitergegeben werden.
 +
 +
==== Nginx Ansible Role ====
 +
 +
Die offizielle Rolle für den [[Nginx]]-Server nennt sich [https://galaxy.ansible.com/nginxinc/nginx nginxinc.nginx]. Sie lässt sich folgendermaßen installieren:
 +
 +
  ansible-galaxy install nginxinc.nginx
 +
 +
Die Rolle lässt sich dann folgendermaßen ins Playbook integrieren:
 +
<pre>
 +
 +
- hosts: NGINXRECHNER
 +
  roles:
 +
    - role: galaxy/nginxinc.nginx
 +
      vars:
 +
        nginx_debug_output: true
 +
        nginx_install_from: os_repository
 +
</pre>
 +
 +
=== Ansible und Container ===
 +
 +
Im Zusammenspiel mit podman bietet ansible-bender eine Möglichkeit Container-Images zu erstellen und zu betreiben.
 +
 +
Auch das reine Ansible bietet im Zusammenspiel mit Docker vielfältige Möglichkeiten Docker-Container-Images zu erstellen und laufen zu lassen. Siehe
 +
* https://tech.labs.oliverwyman.com/blog/2019/08/30/docker-without-dockerfiles/
 +
 +
=== Ansible und Hetzner Cloud ===
 +
Siehe
 +
* https://www.unixwitch.de/de/sysadmin/tools/hcloud-ansible
 +
* https://community.hetzner.com/tutorials/howto-hcloud-ansible
 +
 +
== Fehlerbehebung  ==
 +
 +
Ansible hat Probleme, wenn die kontrollierende Maschine auf Python2 und die kontrollierte auf Python3 läuft. Das äußert sich z.B. mit folgender Warnung:<cite>
 +
[WARNING]: Module invocation had junk after the JSON data: AttributeError("module 'platform'
 +
has no attribute 'dist'")
 +
</cite>
 +
 +
Daher lässt man auf dem Zielrechner (hier: <code>TARGET</code>) auch Python2 laufen, indem man die <code>inventory.yaml</code> ändert:
 +
 +
  TARGET:
 +
      ansible_python_interpreter: "/usr/bin/python2"
 +
 +
== Weiterführendes ==
 +
 +
Siehe
 +
* [https://www.informatik-aktuell.de/entwicklung/programmiersprachen/einfuehrung-in-ansible.html Einführung in Ansible]
 +
* [https://www.grund-wissen.de/linux/shell/ansible.html Aktualisieren von Knoten mit Hilfe von Ansible]
    
-------
 
-------
 
[[Category:Linux]]
 
[[Category:Linux]]

Navigationsmenü