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

Zunächst ist das Paket 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 sshpass

Ausserdem ist ein Passwort Hash z.B. mit Python zu erzeugen. Wie das funktioniert ist auf der systemadmin Seite beschrieben. Dieser Hash enthält das verschleierte Passwort für den neuen zu erstellenden backup Benutzer.

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. Nun kann man das Start-playbook zunächst nur auf den neuen Ansible Master System ausführen:

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
 ---
 - 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

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 alle 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

Nur auf einer Gruppe

Nur ein Kommando auf einer bestimmten Gruppe von Machinen ausführen.

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

Poweroff

Alle Maschinen ausschalten. Achtung! Auch den Host von wo 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: 2021/05/19 15:43 von techguru