Benutzer-Werkzeuge

Webseiten-Werkzeuge


wiki:ansible

Ansible

apt list "*ansible*"
ansible-doc/stable 2.7.7+dfsg-1 all
ansible-lint/stable 4.1.0+dfsg.1-1 all
ansible-tower-cli-doc/stable 3.3.0-1 all
ansible-tower-cli/stable 3.3.0-1 all
ansible/stable,now 2.7.7+dfsg-1 all  [installiert]

System Einrichtung

Auf dem Ansible Kommando Rechner ist das Paket ansible sowie sshpass zu installieren. Da Ansible default SSH keys verwendet, aber bei der Ersteinrichtung zunächst den Nutzer pi verwendet und hier SSH Passwort Authentifizierung genutzt wird.

apt install ansible sshpass

Zuvor wurde ein Passwort Hash z.B. mit Python erzeugt. Wie das funktioniert, ist auf der systemadmin Seite beschrieben. Dieser Hash enthält das verschleierte Passwort für den neuen zu erstellenden backup Benutzer. :!: Dieser Hash ist im Start-playbook enthalten, daher muss dieser Schritt i.d.R. nicht mehr ausgeführt werden. :!:

Mit -k kann das Passwort für dem im Playbook angegebenen Remote Benutzer eingegeben werden. Diesen Benutzer verwenden wir nur für die erst Einrichtung.

Konfigurations Ordner aus Sicherung in das neue Ansible Master System rüber kopieren. Im Start-playbook sollten alle Pfade und Dateien(z.B. ssh-key) zum Konfigurations-Ordner verweisen.

Ansible Ersteinrichtung für ein entferntes System

Folgenden Kommando nur wenn Ansible Ersteinrichtung für ein entferntes System durchgeführt werden soll. Start-playbook auf dem Ansible Master System ausführen für das iglu Remote-System:

ansible-playbook -k -i /home/pi/xy/Konfiguration/ --limit iglu Start-playbook.yml

oder besser die -k Option ans Ende setzen.

ansible-playbook --limit iglu Start_playbook.yml -k

Ansible Ersteinrichtung

Die Angabe des Hostnamen kann weglassen werden wenn im playbook der hostname, z.B. localhost schon bei hosts: drin steht. Da das Playbook aber nicht nur auf dem Ansible Kommando Rechner ausgeführt werden soll sondern für jeden Host eingesetzt wird, steht bei hosts: all. Hier kann man beim Ausführen des Playbooks mit –limit dann angeben auf welchen Host es aktuell ausgeführt werden soll.

ansible-playbook -k --limit iglu start_sshlogin.yml
 ---
 - hosts: all
   vars:
     devops_password: '$6$OfKLYEUGj4tcy$6KJS3UQARnmXqasJaIvWsS1pwUbrpQBvxbxJ55PryPPI604TgsS31lnhKo8'
   gather_facts: no
   remote_user: pi
   become: true
   tasks:
   - name: Gruppe backup erstellen
     group:
          name: backup
          gid: 7500
          state: present
   - name: Nutzer tux erstellen
     user:
          name: tux
          uid: 2121
          groups: adm, sudo, audio, video, plugdev, users, input, netdev, backup, pi
          shell: /bin/bash
          password: "{{ devops_password }}"
   - name: Nutzer backup hinzufügen zu sudoers
     copy:
          dest: "/etc/sudoers.d/backup"
          content: "backup  ALL=(ALL)  NOPASSWD: ALL"
   - name: SSH public Key hinzufügen
     authorized_key: user=backup
                     key="{{ lookup('file', '/home/backup/.ssh/id_rsa.pub') }}"
                     state=present

Nach der Ausführung des Start_playbook.yml ist der neue Backup Nutzer angelegt. Als diesen kann man sich nun anmelden und der /home/pi/xy/Konfiguration/ sollte zum neuen Ansible Kontroll-Nutzer verschoben werden.

Neu: In das Verzeichnis /home/tux/Dokumente/Konfiguration/Ansible/ wechseln. Hier das ansible-playbook Kommando für das gewünschte Playbook ausführen. Da hier die ansible.cfg liegt und diese automatisch genutzt wird, wenn man sich im selben Pfad befindet:

ansible-playbook hauptkonfig.yml

Alt: Ausserdem ist die ansible.cfg und das Inventory(hosts) nach /etc/ansible/ zu kopieren. Es ist darauf zu achten, dass die Berechtigungen für /etc/ansible/ nur für den neuen Ansible Kontroll-Nutzer lesend und maximal schreibend sind.

Ansible Einzeiler

Ohne gleich ein Playbook oder eine komplette Role zu erstellen, kann man ansible direkt ausführen und die entsprechenden Parameter übergeben.

Updates für Suse

ansible localhost -m zypper -a "update_cache=yes state=latest name='*'" --become -K

Updates für alle Debian Systeme

Alle Rechner im Netzwerk gleichzeitig mit Updates versorgen. Dafür braucht man kein extra Playbook schreiben, hier reicht auch ein Ad-Hoc Kommando.

Hier wird das Ansible shell Modul aufgerufen um die bekannten Kommandos von der Bash zu nutzen:

ansible all -m shell -a "sudo apt update && sudo apt autoremove && sudo apt upgrade -y"

Im nächsten Aufruf wird das Ansible apt Modul verwendet, dies ist der von Ansible empfohlene Weg:

ansible all -m apt -a "update_cache=yes upgrade=yes autoremove=yes cache_valid_time=86400" --become

Anzeigen der SCSI Harddisk ID und der dazugehörigen Mountpunkte, dann ein grep (Filtern) nach einem bestimmten Mountpunkt.

ansible all -i inventories/produktion/ -m shell -a "lsblk --output HCTL,PATH,MOUNTPOINT,PARTLABEL|grep -iC2 oraexp"

Nur auf einer Gruppe

Kommando nur auf den Rechnern in einer bestimmten Inventory-Datei testing ausführen.

ansible all -i inventory-Lager/testing -a "/root/agentinstall.sh --uninstall --clean" --become

Playbook für eine sub-Gruppe(hier die Gruppe: jboss) innerhalb einer Inventory-Datei produktion ausführen.

ansible-playbook -i produktion -l jboss playbooks/add_icinga-agent.yml --ask-vault-pass

Reboot und Poweroff

Nur den Rechner iglu neu-starten:

ansible iglu -a "/sbin/reboot" --become

Alle Maschinen ausschalten. Achtung! Auch den Host von wo aus der Kommando ausgeführt wird, wenn in all enthalten:

ansible all -a "/sbin/poweroff" --become

Ansible Playbooks

---
# Playbook für die Ersteinrichtung des Systems
# Es wird ein neuer Haupt-Nutzer angelegt und die benötigte Standard-Software installiert.

- hosts: all
  vars:
    tux_password: '$6$yad.Pht99YEu9zsl$peArU8hOYVo/xzAsyWiF2ANIw5pLmkfOqRXNVospQr661'
# Um den Abbruch mit "ansible_hostname' is undefined" zu verhindern, muss gather_facts: yes gesetzt sein.
# Oder man entfernt die Zeile komplett, denn "gather_facts: yes" müsste als Standard eingestellt sein.
  gather_facts: yes
# Mit -k kann das Passwort für dem im Playbook angegebenen Remote Benutzer eingegeben werden.
  remote_user: pi
  become: true
  tasks:
 
  - name: Nutzer tux - erstellen
    user:
         name: tux
         uid: 1111
         groups: adm, sudo, audio, video, plugdev, users, input, netdev, gpio, i2c, spi, pi
         shell: /bin/bash
         password: "{{ tux_password }}"
 
  - name: NFS-Freigabe mount Verzeichnis - erstelle Mount-Punkt
    file:
      path: /home/pi/NFSFreigabe
      state: directory
      owner: pi
      group: users
      mode: '0775'
 
  - name: Installation - Desktop Standard Pakete
    apt:
      name: "{{ item }}"
      update_cache: yes
      cache_valid_time: 86400 #Cache nur Updaten wenn älter als 1 Tag
    when: 'iglu' in inventory_hostname
    loop:
      - marble
      - pidgin
      - wesnoth
 
  - name: De-Installation - Nicht benötigte Pakete werden entfernt
    apt:
      name: "{{ item }}"
      state: absent
    loop:
      - scratch*
      - minecraft-pi
      - cups-client
      - realvnc-vnc-server
      - samba-common
      - cifs-utils*
---
# Playbook für Icinga2 - Installation aller Monitoring Plugins
# Einrichten des icinga Benutzers
# Einfügen des SSH-Keys

- hosts: monitoring
  become: yes
  tasks:
 
  - name: installiere benötigte Pakete
    zypper:
      name: ['bind','bind-utils']
      state: latest
      disable_recommends: no
    notify: enable named
    when: (ansible_hostname != 'zcm' and ansible_hostname != 'pdx2')
 
  - name: Sicher stellen das group "icinga" existiert
    group:
      name: icinga
      gid: 600
      state: present
 
  - name: Erstelle Icinga Benutzer
    block:
      - user:
          name: icinga
          state: present
          home: /usr/local/icinga
          comment: System Monitoring
          shell: /bin/bash
          uid: 900
          group: icinga
    when: ansible_hostname == 'zcm'
 
  - name: Set authorized key taken from file
    authorized_key:
      user: icinga
      state: present
      key: "{{ 'ssh-rsa AAAAB3NzaC1yc2EAAAADNAHXGAQAQDixsxXlraHdDJq91k/0XOiXMhKVrx+dkFrjKyO+gulxXc+OA+PiDw3BzFG347c1aO5eM+8lwVOlrrNeSw1evryWVef9J4NOReMbgNUSUHU637263x/V+J++NNYBmWR9 icinga@moni2' }}"     
 

Module

Mit copy Modul eine leer Datei erstellen, wenn noch nicht existent.

  - name: sicherstellen das Log-Dateien existieren
    copy:
      content: ""
      dest: /var/adm/log/dhcpdns_sync.lg
      force: no
      group: hw
      owner: ansible
      mode: 0664
wiki/ansible.txt · Zuletzt geändert: 2024/04/07 12:38 von pulsar