Habe gerade einen interessanten Trend zum Thema Ansible gefunden, aber schaut selbst.
Trend für Deutschland einsehen bei Google Trends
Hier ein Beispiel für ein Playbook das ein Update auf einem Debian System ausführt.
- name: Update Repositories and update Distribution to the latest Version
apt:
update_cache: yes
cache_valid_time: 21600
upgrade: dist
dpkg_options: 'force-confold,force-confdef'
register: update_apt
tags: update_apt
Auf einigen Servern werden verschiedene pip packete benötigt. Hier ein kleines Beispiel für paramiko. In diesem Beispiel wird pip auch aktualisiert und die letzte Version von paramiko installiert. Es wird auf dem Hostsystem pip benötigt, unter debian kann das mit
apt install pip-python installiert werden.
- name: install pip and update to newest version
pip:
name: pip
state: latest
register: pip_update
- name: install paramiko
pip:
name: paramiko
state: latest
register: paramiko_install
Wenn NFS frisch installiert wurde werden unsere Systeme neu gestartet.
Das Paket selbst wird mit dieser Funktion installiert:
- name: check default packages
apt:
name: "{{ item }}"
state: latest
with_items: "{{ default_deb_packages }}"
register: apt_install
Hier wird dann register ausgeführt um das Ergebnis später auswerten zu können.
- name: reboot is required if nfs-common installed for the first time
shell: "sleep 5 && systemctl reboot"
async: 1
poll: 0
when: apt_install is changed
- name: wait for reboot
wait_for_connection:
connection_timeout: 20
sleep: 5
delay: 5
timeout: 300
when: apt_install is changed
ist bestimmt nicht die beste Lösung aber sie funktioniert
Um eine Konfiguration für chrony (ntp service) auf unseren Umgebungen zu erstellen, verwenden wir diese ansible Schnipsel.
Es wird in der vorhanden Konfiguration nach dem Eintrag der mit
server 0.debian beginnt gesucht und DAVOR wird ein neuer NTP Server eingetragen. Wenn sich die Konfiguration ändert wird auch der Dienst neu gestartet.
- name: add NTP Server line to chrony.conf
lineinfile:
path: /etc/chrony/chrony.conf
insertbefore: '^server 0.debian'
line: 'server 169.254.169.123 prefer iburst'
state: present
register: chrony_changed
- name: restart chrony
remote_user: admin
become: yes
systemd:
state: restarted
name: chrony
when: chrony_changed is changed
Wir haben hier einige Adminstratoren die auf die erstellten Umgebungen Zugriff benötigen. Der Zugriff geschieht immer über einen SSH Key. Diese werden in unseren Ansible Script auf diese Weise registriert.
- name: register default ssh admin keys
authorized_key:
user: admin
state: present
key: "{{ lookup('file', '{{ item }}') }}"
with_fileglob:
- "/ansible-deploy/global/ssh-keys/*.pub"
- name: register admin-ssh-key for user app
authorized_key:
user: app
state: present
key: '{{ item }}'
with_file:
- "{{ admin_ssh_pub_file }}"
- name: register default ssh app keys
authorized_key:
user: app
state: present
key: "{{ lookup('file', '{{ item }}') }}"
with_fileglob:
- '/ansible-deploy/global/ssh-keys/*.pub'
# allow developers to access servers
- name: register projekt-ssh keys for user app
authorized_key:
user: app
state: present
key: "{{ lookup('file', '{{ item }}') }}"
with_fileglob:
- '/ansible-deploy/customers/{{ customer }}/project_ssh_keys/*.pub'
# register key for user app to allow access between servers
# to generate a private key for this platform you can change into the project_ssh_keys directory and use
# ssh-keygen -t rsa -b 4096 -f ./id_rsa -P '' -C 'app-key'
- name: copy the app private key
copy:
owner: app
group: app
mode: 0600
src: "/ansible-deploy/customers/{{ customer }}/project_ssh_keys/id_rsa"
dest: "/home/app/.ssh/id_rsa"