Ansible - Die ersten Gehversuche
Ansible ist schon ganz cool. Im Gegensatz zu cfengine, mit dem ich ja 10 Jahre viel gemacht habe, braucht ansible keinen client auf dem target System. Alles wird mithilfe von ssh auf dem target ausgeführt. Einige "spezialmodule" wie postgresql_* brauchen dann vielleicht noch psycopg2 was man aber ja wieder automatisiert installieren kann.
So ist dann mal eben ein ansible playbook entstanden was auf einer Kiste postgres + postgis installiert, ein ganz bischen tuned, den tablespace verschiebt auf ein definiertes disk volume, eine Datenbank namens osm anlegt mit dem entsprechenden owner, permissions etc und entsprechenden extensions für die Datenbank aktiviert. Was dann nur noch fehlt ist halt ein wget + osm2pgsql und 6 Stunden später hat man eine fertige OSM Datenbank laufen.
Im Gegensatz zu cfengine bringt ansible jede menge module mit die mehr oder minder intelligent sind. So merkt das lineinfile modul das zwar die edit regel gelaufen ist aber sich die Datei gar nicht geändert hat. Damit kann man dann verhindern das z.b. Postgres jedesmal restartet wird. Auch schön gelöst ist im postgresql_user Modul das wenn man im playbook das password des db users ändert der auch nur das password auf dem target setzt.
Natürlich legt ansible auch vorher entsprechend mir einen user an mit password und einem ssh key so das ich direkt nachdem das playbook gelaufen ist mich einloggen kann.
Nachdem ich glaube ich das ansible Thema anfange zu verstehen wird es Zeit das an den Installer zu kleben so das man in der FiDB nicht nur Distribution und Classes definieren kann sondern auch gleich ansible playbooks die nach dem booten ausgeführt werden. Dann ist das aufsetzen einer neuen OSM Datenbank irgendwann nur noch das kleben der Installationsanleitung an einen Server und ein Klick für den Reboot via IPMI und dann warten (So 6-10 Stunden für den Import).
Irgendwie ist es ja schon fast langweilig wie einfach das alles aneinanderzukleben ist.
- hosts: osmtest
remote_user: root
tasks:
- name: install
apt: name={{item}} state=present update_cache=yes cache_valid_time=3600
with_items:
- postgresql
- postgresql-contrib-9.4
- postgresql-9.4-postgis-2.1
- postgresql-9.4-postgis-2.1-scripts
- python-psycopg2
[ ... ]
- hosts: osmtest
vars:
dbname: osm
username: flo
sudo: yes
sudo_user: postgres
tasks:
[ ... ]
- name: Create OSM Database
postgresql_db: name={{dbname}} owner={{username}}
- name: Add Postgis extensions
command: psql --dbname={{dbname}} --command="CREATE EXTENSION IF NOT EXISTS {{item}}"
with_items:
- postgis
- hstore
- name: Fix permissions on postgis tables
command: psql --dbname={{dbname}} --command="ALTER TABLE {{item}} OWNER TO {{username}}"
with_items:
- geography_columns
- geometry_columns
- raster_columns
- raster_overviews
- spatial_ref_sys
[ ... ]