JSON output in ansible verwenden

Hat man in einem Task JSON als Ausgabe (etwa bei einer REST-API Abfrage) könnte man auf die Werte gleich in ansible Zugreifen, welches ebenfalls JSON für die Variablen verwendet.
Zuvor muss die Ausgabe aber in JSON umgewandelt werden. Ansible stellt dazu den Filter to_json zur Verfügung.

Continue reading JSON output in ansible verwenden

Ansible: Globale Variablen

Normalerweise kann man in ansible nur auf die Variablen des gerade ausführenden hosts zugreifen. Ein Konzept von „Globalen Variablen“, welche im ganzen Playbook gültig sind gibt es nicht.
Man kann sich jedoch behelfen, in dem man einfach die Variablen eines bestimmten Hosts zugreift.

Continue reading Ansible: Globale Variablen

ansible: Rolle nur bei explizit gesetzten Tags ausführen

Manchmal hat man in seinem ansible Plabooks Rollen, die man beispielsweise nicht bei jedem Durchgang ausführen möchte, sondern nur wenn ein Tag explizit gesetzt ist.

Ein Beispiel dafür wäre eine „update“ Rolle, welche das System aktualisiert und ggf. danach den Server gleich neu startet. Das will man natürlich nicht bei jedem durchlauf machen.

Mit den zwei Spezial-Tags never und always bietet ansible hierfür die richtigen Werkzeuge.

Continue reading ansible: Rolle nur bei explizit gesetzten Tags ausführen

Ansible: mode für Dateien und Verzeichnisse anders setzen

Bei vielen ansible Modulen gibt es den „mode“ Paramater, mit welchem man die Berechtigung für Verzeichnisse und Dateien setzen kann. Man kann jedoch nur einen Modus angeben, d.h. setzt man diesen beispielsweise auf: 0755 werden die Verzeichnisse world readable, jedoch auch alle Dateien world executable.

Will man dies verhindern kann man anstelle eines kleinen x ein grosses X setzen, das gilt dann nur für Verzeichnisse:

Continue reading Ansible: mode für Dateien und Verzeichnisse anders setzen

ansible: Service vor Änderung stoppen

Vor einer Änderung muss teilweise ein Dienst gestoppt sein, beispielsweise wenn man Eigenschaften eines Benutzers ändern, wenn unter diesem ein Dienst läuft.
Natürlich kann man im ansible task vor der der Änderung den Dienst stoppen und nachher starten, nur wäre das nicht mehr „idempotent“, da der Dienst dann auch gestoppt/gestartet würde wenn gar keine Änderung nötig ist.

Um dieses Problem zu Umgehen kann man mit dem check_mode vorher testen ob eine Änderung überhaupt nötig ist.
Continue reading ansible: Service vor Änderung stoppen

Ansible: mysql Abfrage

Möchte man mittels Ansible z.B. in eine Datenbank einen Wert hinzufügen, jedoch nur, wenn dieser noch nicht besteht, kann man das mittels einer Vorherigen SQL-Abfrage machen:

- name:             "Get setting: myName"
  command:           mysql --defaults-file=/root/.my.cnf myDatabase -Ns -e "select value from settings where name='myName';"
  register:          setting_myName
  changed_when:      setting_myName.stdout != "12345"

- debug:             msg="{{ setting_myName.stdout }}"
 

- name:             "Insert setting into database"
  mysql_db:
    login_host:     "myDBhost"
    login_user:     "myDBuser"
    login_password: "myDBPass"
    name:           "myDatabase"
    state:          "import"
    target:         "/tmp/set_setting_myName.sql"
  when:             setting_myName.stdout != "12345"

Zuerst holt man sich den Wert aus der Datenbanktabelle und ändert diesen nur, wenn er noch nicht da steht (when: setting_myName.stdout != „12345“).

Quellen

redhat/CentOS: vmware-tools mit yum installieren

Das installieren der vmware-tools auf Linux Rechnern, kann manchmal lästig sein. Was viele nicht wissen:
Anstelle der manuellen Installation kann man das Packet: open-vm-tools
installieren (via: yum install open-vm-tools).

Das wird von vmware fully supported.

Bei CentOS6 ist es im EPEL repository drin, ab CentOS7 sogar im core repository.

Ein ansible-playbook dafür könnte so aussheen:

---
- hosts: vmware-servers
  tasks:
    # PREREQUISITES: For RHEL < 7 we need the EPEL repository
  - name: install the EPEL repo
    yum: pkg=epel-release state=latest
    when: (ansible_os_family == "RedHat" and ansible_distribution_major_version == "6")
 
    name: install the EPEL repo
    yum: name=https://dl.fedoraproject.org/pub/epel/epel-release-latest-5.noarch.rpm
    when: (ansible_os_family == "RedHat" and ansible_distribution_major_version == "5")
 
 
    # install open-vm-tools
  - name: install open-vm-tools
    yum: pkg=open-vm-tools state=latest
    when: ansible_os_family == "RedHat"
 
  - name: install open-vm-tools
    apt: pkg=open-vm-tools state=latest
    when: ansible_os_family == "Debian"
 
 
 
  # startup
  - name: ensure vmware-tools are running and started automatically
    service: name=vmtoolsd state=started enabled=yes
    when: ansible_os_family == "RedHat"
 
  - name: ensure vmware-tools are running and started automatically
    service: name=open-vm-tools state=started enabled=yes
    when: ansible_os_family == "Debian"