Änderungen

Zur Navigation springen Zur Suche springen
3.911 Bytes hinzugefügt ,  03:34, 21. Okt. 2020
Zeile 9: Zeile 9:     
* Installation eines Minimalsystems
 
* Installation eines Minimalsystems
* Einrichten eines Benutzers speziell für ansible (optional)
+
* Einrichten eines Benutzers speziell für Ansible (Beispiel, das bereits Ansible nutzt, siehe unten)
 
* Installation der Pakete  
 
* Installation der Pakete  
 
** openssh-server
 
** openssh-server
Zeile 30: Zeile 30:  
         vars:
 
         vars:
 
           ansible_python_interpreter: /usr/bin/python3
 
           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 75: Zeile 131:  
Will man das Kommando als root ausführen, setzt man <code>--become</code> hinzu:
 
Will man das Kommando als root ausführen, setzt man <code>--become</code> hinzu:
 
   ansible pia2016 --become -m command -a "whoami"
 
   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 ===
 
=== Playbooks ===
Zeile 93: Zeile 156:  
       install_recommends: false
 
       install_recommends: false
 
       update_cache: true
 
       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 ==
 
== Weiterführendes ==

Navigationsmenü