Ansible verwendet als Template Engine Jinja2. Als Beispiel wird für einen Switch die Radius Konfiguration erzeugt. Man kann direkt vom Template aus die Konfiguration auf ein Gerät fallen lassen oder so wie in diesem Fall einfach als File speichern. Eine ausführliche Anleitung was man alles mit der Jinja2 Template Engine […]
WeiterlesenAutor: Maximilian Thoma
Ansible: CLI Kommandos auf Cisco Devices ausführen und Ausgaben speichern
Beispiel Playbook exec_command.yaml: — – hosts: switch1 connection: local gather_facts: False vars: cli: host: „{{ inventory_hostname }}“ username: „{{ ansible_user }}“ password: „{{ ansible_ssh_pass }}“ tasks: – name: Call show inventory ios_command: commands: show inventory provider: „{{ cli }}“ register: output – name: Store output to file copy: content=“{{ output.stdout[0] […]
WeiterlesenAnsible: Cisco Netzwerkautomatisierung mit Ansible – Erste Schritte
Ich habe kürzlich Angefangen meine ersten Gehversuche mit Ansible zu machen. Ziel ist unteranderem meine Linux Maschinen zu managen als auch Cisco Geräte. Hier meine ersten Erfahrungen mit Ansible. Was ist der Vorteil von Ansible? Opensource reichhaltiges Plugin Angebot (Ansible Galaxy) viele Artikel & Tipps im Internet, kein Nischenprodukt es […]
WeiterlesenPerformance Probleme auf einem Linux System ermitteln
Aktuell habe ich auf einem meiner virtuellen Server Probleme mit der Performance, ein Blick in top offenbart das auf einer CPU 100% Waiting ist, Hintergrund war das der Provider einen ZFS scrub auf dem Host laufen ließ was die Disk Performance in den Keller gezogen hat. Ich nehme das zum […]
WeiterlesenDefekten GRUB Bootloader reparieren
Defekten Rechner mit Knoppix oder der systemrescuecd starten, mit fdisk -l oder parted -l kann man sich alle Partitionen anzeigen lassen. Je nach Installation ist die Bootpartition einzeln z.B. bei einem LVM Setup oder in einer Partition. Um per Chroot in die Installation des Rechners zu wechseln müssen die Partitionen […]
WeiterlesenFestplatte aus einem kaputten Seagate NAS System mounten – EXT4 mit 64k Blocksize mounten
Neulich hat mir ein Kunde eine kaputte Seagate NAS gebracht, eine der Disks hatte ein Problem, die NAS hat nicht mehr zuverlässig gebootet. Ich habe die Disks in meinen Linux PC eingebaut, mit mdadm –scan –assemble hat er die Software RAIDs gefunden. Auf ein Problem bin ich dann doch gestoßen, […]
WeiterlesenPython: Arbeiten mit YAML Files
YAML ist eine vereinfachte Auszeichnungssprache zur Datenserialisierung. Das Format ist einfach gehalten und ist eine schöne alternative zu XML, JSON usw. Ist auch ein super Format für Configfiles als alternative zu INI Files. Einfaches YAML File: variable_str: value variable_num: 33 list: – a – b – c – d dictionary: […]
WeiterlesenPython: Entfernen von Steuerzeichen in ASCII Strings
Bin heute wieder mal über ein Problem mit ASCII Strings gestolpert. Im String war ein CTRL+C welches als \x03 in der ASCII Tabelle ist. Ich bin auf eine Seite gestoßen welche für alle möglichen Script und Programmiersprachen Codesnippets bereitstellt um Steuerzeichen zu entfernen. ASCII Tabelle bei Wikipedia: https://de.wikipedia.org/wiki/American_Standard_Code_for_Information_Interchange Hier für Python: […]
WeiterlesenCisco/Python: Backup der Konfiguration bei write Event auf externen Server
Diverse Cisco Geräte können bei einem write Event die Konfiguration an einen anderen Server z.B. über HTTP pushen. Cisco Config: archive path http://1.2.3.4/cisco_config/put/$h-$t write-memory Apache /etc/httpd/conf.d/zzz_cisco_backup.conf: WSGIDaemonProcess cisco_backup user=apache group=apache threads=10 WSGIPythonPath /opt/cisco_backup/web_root WSGIScriptAlias /cisco_backup /opt/cisco_backup/web_root/cisco_backup.wsgi <Directory /opt/cisco_backup/web_root> WSGIProcessGroup cisco_backup WSGIApplicationGroup %{GLOBAL} WSGIScriptReloading On Order deny,allow Allow from all <Files […]
WeiterlesenPython: Snippet – E-Mail versenden, alternative zu Mailer
#!/usr/bin/env python # -*- coding: utf-8 -*- import smtplib from email.mime.text import MIMEText def postmaster(mfrom, mto, msubject, message, smtphost): msg = MIMEText(message.encode(„utf-8“)) msg[‚Subject‘] = msubject msg[‚From‘] = mfrom msg[‚To‘] = mto s = smtplib.SMTP(smtphost) s.sendmail(msg[‚From‘], msg[‚To‘], msg.as_string()) s.quit()
WeiterlesenPython: Snippet: SSH shell on Cisco devices
Mit dem Snippet können Kommandos auf einer Cisco Shell via SSH ausgeführt werden. #!/usr/bin/env python import paramiko import sys def send_string_and_wait_for_string(command, wait_string, should_print): shell.send(command) receive_buffer = „“ while not wait_string in receive_buffer: receive_buffer += shell.recv(1024) if should_print: print receive_buffer return receive_buffer client = paramiko.SSHClient() client.load_system_host_keys() client.set_missing_host_key_policy(paramiko.AutoAddPolicy()) client.connect(„10.62.62.10″, username=“testuser“, password=“testpasswd“, look_for_keys=False, […]
WeiterlesenNGINX Reverse Proxy für Exchange 2016
Folgende Pakete müssen auf einem Ubuntu 16.04 LTS installiert werden: apt install nginx nginx-extras Die Konfiguration wird abgelegt unter /etc/nginx/conf.d/exchange.conf Folgende Dinge müssen angepasst werden: DNS Name unter dem OWA etc. erreichbar sein soll z.B. mail.example.org Autodiscover DNS Name z.B. autodiscover.example.org Interner Exchange Server z.B. exchange-server.example.internal server { listen 80; […]
WeiterlesenCheck_MK: Problem mit Apache HTTP Proxy – SELinux blockt Reverse Proxy Verbindung zur Check_MK Instanz
Habe gerade auf ein frisch installiertes CentOS 7.4 Check_MK 1.4.0p19 installiert. Nach dem Start einer OMD Instanz kommt nur die Fehlermeldung: OMD: Site Not Started You need to start this site in order to access the web interface. Im Apache Log ist folgendes zu sehen: [Mon Dec 04 08:50:48.097245 2017] […]
WeiterlesenPython: Snippet/Experiment – Syslog Server mit globalen und Host Filtern
Der Code ist nicht fertig und war mal ein Labor Versuch. Es lassen sich globale und Host Filter setzen wo diese zutreffen werden die Logs in ein extra File geschrieben. Config file: #!/usr/bin/env python # -*- coding: utf-8 -*- # Config definition class CFG: def __init__(self): # Path for logfiles […]
WeiterlesenPython: Snippet Multiprocessing mit Ergebnis
Beispiel für Parallelisierung von Jobs mit Ergebnis welche als Liste zurückgegeben werden. #!/usr/bin/env python # -*- encoding: utf-8; py-indent-offset: 4 -*- import os from multiprocessing import Pool def worker(job): x, y = job result = x ** y return os.getpid(), result if __name__ == ‚__main__‘: jobs = [(1, 2), (3, […]
WeiterlesenPython: Experiment/Snippet – Komprimieren und löschen von Logfiles nach X Tagen
Ein Ansatz für Logverzeichnisse im Format /log/<yyyy>/<mm>/<dd>/<div. logsfiles> #!/usr/bin/env python import gzip import shutil import os import datetime import time ############################################# # Config ############################################# # Path of Logfiles # Structure is /opt/log/<YYYY>/<MM>/<DD>/ gpath=’/opt/log/‘ # hold logs for x days hold_time=180 ############################################# def get_immediate_subdirectories(a_dir): return [name for name in os.listdir(a_dir) if […]
WeiterlesenPython: Snippet – Kaputten UTF-8 String reparieren
Ich habe aus der Datenbank einen String zurückbekommen der UTF-8 war aber falsch kodiert zurückgegeben wurde. So wurde aus Geschäftsstelle -> Gesch├ñftsstelle Folgendes Snippet kann einen kaputten UTF-8 String neu auf UTF-8 kodieren: name_kaputt = ‚Gesch\xc3\xa4ftsstelle‘ name = “.join(chr(ord(c)) for c in name_kaputt).decode(„utf-8“) print name_kaputt print name Ergebnis: Python 2.7.13 (v2.7.13:a06454b1afa1, […]
WeiterlesenPython: Snippet – Datum / Zeitstempel älter als X Tage z.B. 90 Tage
Mit dem Typ datetime lässt sich direkt rechnen was das ganze sehr bequem macht. Beispiel: import datetime old_time = datetime.datetime(2016, 4, 11, 10, 57, 23) today = datetime.datetime.today() age = today – old_time if age.days > 90: print „Older than 90 days“ else: print „Not older than 90 days“ Beispiel […]
WeiterlesenCheck_MK: Automation via Web Service
Wenn man Dinge automatisieren möchte kann man das über die Webservices von Check_MK machen. Dazu gibt es einen schönen Artikel von Check_MK selbst: https://mathias-kettner.de/checkmk_multisite_automation.html Leider ist es aus der URL nicht leicht rauszufinden welche Variablen man mitgeben muss um z.B. einen Service zu Ack’en. Es gibt aber einen Trick um das […]
WeiterlesenEinfacher Random String Generator in Python
“.join(random.choice(string.ascii_uppercase + string.digits) for _ in range(N)) N = Anzahl der Stellen z.B. Uppercase + Digits mit 16 Stellen: OMD[dev1]:~$ python Python 2.7.13 (default, Jul 24 2017, 12:14:45) [GCC 6.3.0] on linux2 Type „help“, „copyright“, „credits“ or „license“ for more information. >>> import string >>> import random >>> “.join(random.choice(string.ascii_uppercase + […]
Weiterlesen