1. Betriebssystem-Präfix generieren
  2. Multiline-Werte in einer Variablen speichern
  3. synchronize-Modul mit sudo ausführen

Betriebssystem-Präfix generieren

Problem:

  • Man möchte z.B. einen Download abhängig vom Betriebssytem machen, wie z.B. linux-i386 / linux-x64

Lösung:

  • Mittels der system facts und Jinja2-Filter lassen sich Betriebssystem sowie Bitzahl ermitteln und zum gewünschten String modifizieren
  • Folgendes Beispiel erstellt die oben im Problem genannten Betriebssystem-Strings, welches z.B. in einer Variablendatei genutzt werden kann
{{ansible_system | lower}}-{{ansible_userspace_bits |replace('64', 'x64') |replace('32', 'i386')}}

Multiline-Werte in einer Variablen speichern

id_rsa: |
 line 1 blah
 line nr 2 blubb
   indention is allowed
 line 4 finish

nextVar: foo

Diese Werte lassen sich anschließend wie folgt in eine Datei auf dem Remote Host abspeichern:

- name: write myVar
  copy:
    content: "{{ id_rsa }}"
    dest: /home/user/.ssh/id_rsa
    owner: root
    group: root
    mode: 0600

synchronize-Modul mit sudo ausführen

Problem:

...führt zu folgendem Fehler:

failed: [my-server.de] => {"cmd": "rsync --delay-updates -FF --compress --archive --rsh 'ssh  -o StrictHostKeyChecking=no -o Port=123' --rsync-path=\"sudo rsync\" --out-format='<<CHANGED>>%i %n%L' \"/etc/ansible/roles/\" \"user@my-server.de:/tmp/playbook/roles\"", "failed": true, "rc": 12}
msg: sudo: Kein TTY vorhanden und kein »askpass«-Programm angegeben
rsync: connection unexpectedly closed (0 bytes received so far) [sender]
rsync error: error in rsync protocol data stream (code 12) at io.c(226) [sender=3.1.1]

Lösung:

Auf dem Host muss sudo rsync ohne Passwortabfrage erlaubt werden. Die erreicht man mit dem entsprechenden Eintrag in der sudoers-Datei, welchen man vorher mit einem Ansible-task (in z.B. einer gemeinsamen Role) sicherstellen kann:

---
- name: allow use of 'sudo rsync' without password prompt
  lineinfile: dest=/etc/sudoers line="{{ ansible_env.SUDO_USER }} ALL = NOPASSWD{{':'}} /usr/bin/rsync" state=present
Tags:
Erstellt von Thomas Steinbach am 2015/05/08 19:10
    
Copyright 2004-2019 XWiki
7.4.5