Συζήτηση

Η παρακάτω συζήτηση έγινε ένα απόγευμα στην κοινότητα μας μεταξύ του Πέτρου και του Νίκου (οποιαδήποτε ομοιότητα ή συσχετισμός με υπαρκτά πρόσωπα ενδεχομένως και να είναι συμπτωματική).

Πέτρος:

Εχω ξεκινήσει το ταξίδι μου και εγώ για DevNet & Automation. Παντού βλέπω ότι συγκρίνουν την python vs Ansible. Αφού δεν ειναι τα ιδια, γιατι αυτη η σύγκριση; Καταλαβαινω να συγκρινουν:

  • Python vs Java
  • Python vs C or C++

Μπορειτε να με βοηθήσετε ωστε να καταλαβω και εγω;

Πλαίσιο

Νίκος:

Ο λόγος που ενίοτε γίνεται αυτή η σύγκριση είναι ότι python και Ansible είναι δύο βασικά εργαλεία για network automation. Προφανώς έχεις δίκιο ότι συγκρίνονται μήλα με πορτοκάλια οπότε θα προσπαθήσω να εξηγήσω γιατί έχει νόημα η σύγκριση..

Σε αυτό το context λοιπόν, η σύγκριση στην πράξη είναι μεταξύ Ansible και του “συμπλέγματος” python+nornir+napalm+netmiko (ή κάποιας light παραλλαγής αυτού). Αυτά τα δύο είναι σε κάποιο βαθμό “ισοδύναμα” ως προς τις δυνατότητές τους.

Python Libraries

Αν δεν είσαι εξοικιωμένος με τα libraries που αναφέρω, έχουμε και λέμε:

  • Νornir: python library που αναλαμβάνει τα κομμάτια του inventory και του παραλληλισμού tasks. Και τα δύο είναι ενσωματωμένα στην Ansible (Επίσης το Nornir είναι framework, όχι απλά ένα connection library και δεν διαθέτει το ίδιο connection provider αλλά χρησιμοποιεί plugins γι αυτό το σκοπό)
  • NAPALM: άλλο library που αναλαμβάνει την επικοινωνία με τα διάφορα devices. Επιπλέον, έχει την δυνατότητα να επιστρέψει structured data (JSON, dict) όπως λχ τα network resource modules της Ansible.
  • Netmiko: τρίτο library που “ξέρει” πώς να συνδέεται με SSH σε legacy devices και να τραβάει data. Με λίγο φαντασία, μοιάζει με το “network_cli” connection της Ansible.

Τομείς Σύγκρισης

Τέλος, η σύγκριση που αναφέρεις γίνεται στο 99% των περιπτώσεων για έναν από τους τέσσερις παρακάτω λόγους:

  • Speed: η Ansible για έναν πολύ μεγάλο αριθμό περιπτώσεων είναι αργή όσο optimization και να κάνεις. Αντίθετα, με τον συνδυασμό Python/Nornir μπορείς να πετύχεις μέχρι και 10x ταχύτητα. [Python-Ansible 1-0]
  • Learning curve: για κάποιον που προέρχεται από παραδοσιακό networking background, είθισται να προτείνεται η Ansible καθώς είναι πολύ πιο απλή για κάποιον που δεν έχει εμπειρία στον προγραμματισμό. [Python-Ansible 1-1]
  • Readability: για projects σχετικά μικρής πολυπλοκότητας, η ευκολία της Ansible της δίνει σημαντικό προβάδισμα. Όσο όμως ανεβαίνει η πολυπλοκότητα, τόσο η ζυγαριά δείχνει προς την πλευρά της Python. [Python-Ansible 2-2]
  • Extensibility: από ένα επίπεδο εμπειρίας και πέρα, όταν η πολυπλοκότητα των tasks που καλούμαστε να επιλύσουμε ανεβαίνει, η domain-specific language (DSL) που χρησιμοποιεί η Ansible καταλήγει να είναι εμπόδιο. Αντίθετα, η πληθώρα μηχανισμών που διαθέτει μια proper language όπως η Python μπορεί να σου λύσει τα χέρια.

Τελικό αποτέλεσμα

[Python-Ansible 3-2 με γκολ στο 90’]