by: Linux Insider
Θες να αυτοματοποιήσεις την εγκατάσταση εφαρμογών, τη διαχείριση server ή το provisioning δεκάδων μηχανημάτων; Ανακάλυψε το Ansible, το πιο ευέλικτο εργαλείο για system automation σε Linux. Αυτός ο οδηγός καλύπτει πλήρως τη χρήση του σε Debian, Ubuntu και Fedora, με απλά παραδείγματα και πλήρεις εντολές.
🔰 Τι είναι το Ansible και πώς λειτουργεί;
Το Ansible είναι ένα εργαλείο αυτοματισμού συστημάτων ανοιχτού κώδικα. Σου επιτρέπει να εκτελείς εντολές, εγκαταστάσεις πακέτων, τροποποιήσεις ρυθμίσεων, ακόμη και ενημερώσεις, σε δεκάδες ή εκατοντάδες συστήματα ταυτόχρονα, από ένα μόνο σημείο ελέγχου. Με το Ansible δε χρειάζεταινα εγκαθιστάς τίποταστα συστήματα που διαχειρίζεσαι. Είναι agentless, δηλαδή βασίζεται αποκλειστικά στο SSH και γι’ αυτό δεν απαιτεί επιπλέον λογισμικό στα υπόλοιπα συστήματα. Xρησιμοποιεί YAML αρχεία (playbooks) για να περιγράψει τι θέλεις να γίνει και φροντίζει να το κάνει με idempotent τρόπο — δηλαδή χωρίς να ξανακάνει ό,τι έχει ήδη γίνει.
Το Ansible είναι ένα από τα εργαλεία που χρησιμοποιώ καθημερινά όταν θέλω να αυτοματοποιήσω επαναλαμβανόμενες εργασίες σε πολλούς Linux servers. Είτε δουλεύεις με δύο Raspberry Pi είτε με είκοσι VPS, είναι απλά ανεκτίμητο…

Κεντρική Αρχή του Ansible – Οι βασικοί ρόλοι
Το Ansible βασίζεται σε ένα απλό αλλά πολύ ισχυρό μοντέλο:
- Control node
Ο υπολογιστής από τον οποίο εκτελείται το Ansible.
Παράδειγμα: το laptop σου ή ένας κεντρικός server. - Managed nodes
Οι υπολογιστές-στόχοι στους οποίους εφαρμόζονται οι εντολές και τα playbooks του Ansible.
Παραδείγματα: web servers, database servers, Raspberry Pis, virtual machines, containers.
👉 Το Ansible τρέχει μόνο στον control node. Δεν χρειάζεται να εγκαταστήσεις τίποτα στα managed nodes (εκτός από Python ≥3.8, η οποία σχεδόν πάντα είναι ήδη εγκατεστημένη).
Πώς επικοινωνεί;
Το Ansible χρησιμοποιεί SSH για να συνδεθεί με τα managed nodes και να εκτελέσει εντολές. Αυτό σημαίνει ότι δεν χρειάζεσαι “agents”, δηλαδή μόνιμες υπηρεσίες ή daemons που να τρέχουν στους άλλους υπολογιστές — είναι πλήρως agentless.
📌 Εν ολίγοις, χρειάζεσαι:
- Έναν control node (π.χ. ο δικός σου υπολογιστής με Ubuntu ή Fedora).
- Μερικούς managed nodes (άλλους υπολογιστές ή VM με SSH ενεργοποιημένο).
- Σύνδεση SSH από τον control node προς τα managed nodes (ιδανικά χωρίς password).
- Το Ansible εγκατεστημένο μόνο στον control node.
Παράδειγμα:
Έστω ότι έχεις:
- Το laptop σου με Ubuntu 22.04 → Control node
- Έναν Raspberry Pi με Debian 12 → Managed node
- Έναν virtual server με Fedora 40 → Managed node
Θα εγκαταστήσεις μόνο στο laptop σου:
sudo apt install ansible
Θα φροντίσεις να μπορείς να συνδεθείς μέσω SSH στους άλλους δύο:
ssh pi@192.168.1.42
ssh fedora@192.168.1.56
Και μετά, το Ansible θα μπορεί να κάνει install πακέτα, να ξεκινήσει services ή να στείλει αρχεία και στους δύο στόχους με μία μόνο εντολή.
Πάμε να δούμε πως γίνεται!
🛠️ Προετοιμασία Συστήματος
Οπως είπαμε, για να χρησιμοποιήσεις το Ansible, θα χρειαστείς:
- Έναν control node (ο υπολογιστής από όπου στέλνεις τις εντολές).
- Έναν ή περισσότερους managed nodes (υπολογιστές-στόχους στους οποίους εφαρμόζεται η κάθε εντολή).
- Ενεργό SSH μεταξύ τους.
- Python ≥ 3.8 εγκατεστημένο στα managed nodes (σχεδόν πάντα προεγκατεστημένο σε Debian/Fedora).
📦 Εγκατάσταση του Ansible
➤ Σε Ubuntu / Debian:
sudo apt update
sudo apt install ansible
Για νεότερες εκδόσεις:
sudo add-apt-repository ppa:ansible/ansible
sudo apt update
sudo apt install ansible
➤ Σε Fedora:
sudo dnf install ansible
Βεβαιώσου ότι εγκαταστάθηκε:
ansible --version
📁 Δημιουργία Inventory Αρχείου
Το Ansible χρειάζεται ένα inventory αρχείο που να περιγράφει τα managed nodes, δηλαδή τους υπολογιστές-στόχους σου. Από προεπιλογή χρησιμοποιεί το /etc/ansible/hosts
, αλλά μπορείς να ορίσεις custom path.
Παράδειγμα:
[webservers]
192.168.1.101
192.168.1.102 ansible_user=ubuntu
[dbservers]
db1.example.com ansible_user=root
Μπορείς επίσης να χρησιμοποιήσεις aliases για πιο ευανάγνωστα ονόματα:
[web]
alpha ansible_host=192.168.1.101 ansible_user=admin
🔑 Ρύθμιση SSH χωρίς Κωδικό
Οπως είπαμε, το Ansible βασίζεται σε SSH συνδέσεις για να κάνει τη δουλειά του. Ιδανικά, μπορείς να ενεργοποιήσεις passwordless login με SSH keys. Με την πρώτη εντολή φτιάχνεις ένα public/private SSH κλειδί στο control node, ενώ με τη δεύτερη στέλνεις το κλειδί σε ένα managed υπολογιστή ο οποίος από εκεί και έπειτα θα δέχεται συνδέσεις από τον control χωρίς να ζητά κάθε φορά τον κωδικό χρήστη:
ssh-keygen
ssh-copy-id user@192.168.1.101
Δηλαδή, από εδώ και πέρα, το Ansible θα μπορεί να συνδέεται αυτόματα!
🔍 Πρώτη Δοκιμή: Ping όλων των συστημάτων
ansible all -m ping
Αναμένεις:
192.168.1.101 | SUCCESS => {
"changed": false,
"ping": "pong"
}
Αν δεις “UNREACHABLE”, έλεγξε SSH, IP ή firewall.
🔧 Εκτέλεση Modules (χωρίς Playbook)
Το Ansible διαθέτει εκατοντάδες προκαθορισμένα modules που σου επιτρέπουν να εκτελέσεις πολύπλοκες εργασίες χωρίς να γράψεις playbook. Αυτό είναι ιδανικό για δοκιμές, μικρές εργασίες ή επείγουσες εντολές.
Ένα module είναι ουσιαστικά ένα “δομικό block ενέργειας”: μπορεί να εγκαταστήσει πακέτα, να τροποποιήσει services, να δημιουργήσει αρχεία, να εκτελέσει shell εντολές, να αντιγράψει αρχεία, να διαχειριστεί χρήστες, και πολλά ακόμη.
Σύνταξη Γενικής Μορφής
ansible <στόχος> -m <module_name> -a "<επιλογές>"
Παραδείγματα από τον Πραγματικό Κόσμο
➤ Εγκατάσταση πακέτου htop
σε Debian/Ubuntu:
ansible all -m apt -a "name=htop state=present"
➤ Εγκατάσταση πακέτου nginx
σε Fedora:
ansible all -m dnf -a "name=nginx state=present"
➤ Εκτέλεση μιας απλής shell εντολής:
ansible webservers -m shell -a "uptime"
➤ Εκκίνηση υπηρεσίας:
ansible dbservers -m service -a "name=mysql state=started"
Τι κάνει το κάθε flag:
-m
= ορίζει ποιο module θα χρησιμοποιηθεί (π.χ.apt
,service
,shell
)-a
= ορίζει τα arguments (επιλογές) του moduleall
ήwebservers
= καθορίζει σε ποια hosts θα εφαρμοστεί (όπως ορίζονται στοhosts
αρχείο)
🧪 Χρήσιμα Modules:
Module | Περιγραφή |
---|---|
ping | Ελέγχει αν ο Ansible agent μπορεί να επικοινωνήσει με το node |
command | Εκτελεί απλές εντολές shell (χωρίς shell expansion) |
shell | Εκτελεί shell εντολές με υποστήριξη pipes, redirects, κ.λπ. |
apt , dnf , yum , package | Διαχείριση πακέτων |
service | Έναρξη, τερματισμός, ενεργοποίηση υπηρεσιών |
copy | Αντιγραφή αρχείων από τον control node προς τα managed nodes |
file | Δημιουργία/τροποποίηση αρχείων και δικαιωμάτων |
user | Δημιουργία ή διαγραφή χρηστών |
Αν έπρεπε να διαλέξω ένα module που με έχει σώσει άπειρες φορές, αυτό θα ήταν το copy. Ιδανικό για να στέλνεις config αρχεία, scripts ή templates σε πολλά συστήματα χωρίς scp και manual sync.
🧨 Προσοχή:
Αν χρησιμοποιείς modules που απαιτούν root δικαιώματα (π.χ. apt
, service
), πρέπει να προσθέσεις την επιλογή --become
:
ansible all -m apt -a "name=vim state=latest" --become
Γιατί να χρησιμοποιήσω modules αντί για shell;
Αν και μπορείς να εκτελέσεις οποιαδήποτε εντολή με το shell
module, είναι πιο ασφαλές και idempotent να χρησιμοποιείς native modules όπου είναι δυνατό. Για παράδειγμα:
ansible all -m shell -a "apt install nginx -y" # Μη ιδανικό
ενώ
ansible all -m apt -a "name=nginx state=present" # Ιδανικό
Το δεύτερο είναι πιο προβλέψιμο, επαναλήψιμο και εντοπίζει αλλαγές καλύτερα.
📌 TL;DR
Χρησιμοποίησε modules όταν θέλεις να κάνεις μικρές, γρήγορες αλλαγές από το terminal. Είναι σαν να έχεις τη δύναμη πολλών SSH sessions ταυτόχρονα, αλλά με πολύ μεγαλύτερη σαφήνεια, ακρίβεια και δυνατότητα επέκτασης.
📜 Δημιουργία Playbook
Μέχρι τώρα είδαμε πώς μπορούμε να χρησιμοποιούμε modules απευθείας από το terminal για μικρές, αποσπασματικές εργασίες. Όμως… αν θέλεις να εκτελείς πολλές ενέργειες, σε πολλούς servers, με συνέπεια και επαναληψιμότητα, τότε χρειάζεσαι ένα playbook.
Τι είναι Playbook;
Ένα playbook είναι ένα απλό αρχείο YAML που περιγράφει:
- σε ποιους υπολογιστές θα εφαρμοστούν οι ενέργειες
- τι ακριβώς πρέπει να γίνει
- με ποια σειρά
- και υπό ποιες συνθήκες
Το Ansible διαβάζει αυτό το αρχείο και εκτελεί κάθε task όπως το ορίζεις, ελέγχοντας μάλιστα αν χρειάζεται να γίνει κάτι (idempotence).
Δομή ενός Playbook
Ένα playbook αποτελείται από:
name
: Περιγραφικός τίτλος για το τι κάνειhosts
: Ποιοι στόχοι θα επηρεαστούνbecome
: Αν απαιτούνται root δικαιώματαtasks
: Η λίστα με τις ενέργειες (modules + options)
✍️ Παράδειγμα: site.yml
- name: Εγκατάσταση και εκκίνηση του Nginx
hosts: webservers
become: true
tasks:
- name: Εγκατάσταση Nginx σε Debian/Ubuntu
apt:
name: nginx
state: present
when: ansible_os_family == "Debian"
- name: Εγκατάσταση Nginx σε Fedora
dnf:
name: nginx
state: present
when: ansible_os_family == "RedHat"
- name: Εκκίνηση και ενεργοποίηση υπηρεσίας
service:
name: nginx
state: started
enabled: true
Τι κάνει αυτό το playbook;
- Στοχεύει τους hosts της ομάδας
webservers
- Χρησιμοποιεί
apt
για Debian-based συστήματα καιdnf
για RedHat/Fedora - Ξεκινάει το service και το ενεργοποιεί στο boot
- Όλα γίνονται με
sudo
(επειδήbecome: true
)
📌 Pro Tip:
Μπορείς να δημιουργήσεις ένα αρχείο site.yml
και να το εκτελέσεις με:
ansible-playbook site.yml
Συνήθως δοκιμάζω κάθε playbook με --check
πρώτα, για να αποφύγω τυχόν ατυχήματα (π.χ. αν έβαλα λάθος όνομα service ή πακέτου).
ansible-playbook site.yml --check
Να μερικές παράμετροι για χρήσιμες παραλλαγές:
--check
: dry-run (δοκιμή χωρίς αλλαγές)--diff
: δείχνει αλλαγές αρχείων--limit webservers
: στοχεύει μόνο συγκεκριμένη ομάδα
Δοκίμασε να γράψεις το πρώτο σου playbook σήμερα! Με το Ansible, κάθε επανάληψη γίνεται αυτοματισμός.
🧩 Μικρή Εισαγωγή στα Roles
Τα roles οργανώνουν το playbook σε επαναχρησιμοποιήσιμα κομμάτια.
Δημιουργία:
ansible-galaxy init nginx_role
Δομή:
roles/
nginx_role/
tasks/main.yml
handlers/main.yml
templates/
vars/
💡 Best Practices & Χρήσιμα Tips
- Δημιούργησε
ansible.cfg
με:
[defaults]
inventory = ./hosts
remote_user = ubuntu
host_key_checking = False
- Χρησιμοποίησε
group_vars/
καιhost_vars/
για παραμετροποίηση - Ενσωμάτωσε jinja2 templates για δυναμικά αρχεία config
🎯 Συμπέρασμα
Το Ansible είναι ένα πανίσχυρο αλλά φιλικό εργαλείο για DevOps, sysadmins και developers που θέλουν να αυτοματοποιήσουν διαχειριστικές εργασίες με ασφάλεια, ευκολία και δυνατότητα επέκτασης.
Ξεκινώντας με έναν μόνο υπολογιστή και προχωρώντας σταδιακά, θα φτάσεις στο σημείο να διαχειρίζεσαι ολόκληρους στόλους συστημάτων με μία εντολή.
Αλλά και αρχάριος-α να είσαι, αν ξεκινήσεις με μικρά playbooks και λίγους στόχους, θα διαπιστώσεις γρήγορα πόσο χρόνο μπορεί να σου εξοικονομήσει. Εγώ πλέον το χρησιμοποιώ ακόμα και για ενημερώσεις του συστήματος στο σπίτι!
Πηγή άρθρου:https://planet.ellak.gr/, https://www.linuxinsider.gr