Εκμάθηση Ansible για αρχάριους: Playbook, Commands & Example
Τι είναι το Ansible;
Πιθανό είναι ένα εργαλείο αυτοματισμού και ενορχήστρωσης ανοιχτού κώδικα για παροχή λογισμικού, διαχείριση διαμόρφωσης και ανάπτυξη λογισμικού. Το Ansible μπορεί εύκολα να τρέξει και να διαμορφώσει συστήματα που μοιάζουν με Unix επίσης Windows συστήματα για την παροχή υποδομής ως κώδικα. Περιέχει τη δική του δηλωτική γλώσσα προγραμματισμού για τη διαμόρφωση και τη διαχείριση του συστήματος.
Το Ansible είναι δημοφιλές για την απλότητα εγκατάστασης, την ευκολία χρήσης σε ό,τι αφορά τη συνδεσιμότητα με πελάτες, την έλλειψη αντιπροσώπου για τους πελάτες του Ansible και το πλήθος των δεξιοτήτων. Λειτουργεί με σύνδεση μέσω SSH στους υπολογιστές-πελάτες, επομένως δεν χρειάζεται ειδικό πράκτορα στην πλευρά του πελάτη, και με την ώθηση των μονάδων στους πελάτες, οι μονάδες εκτελούνται στη συνέχεια τοπικά στην πλευρά του πελάτη και η έξοδος προωθείται πίσω στον διακομιστή Ansible.
Δεδομένου ότι χρησιμοποιεί SSH, μπορεί πολύ εύκολα να συνδεθεί με πελάτες χρησιμοποιώντας SSH-Keys, απλοποιώντας ωστόσο την όλη διαδικασία. Τα στοιχεία πελάτη, όπως ονόματα κεντρικών υπολογιστών ή διευθύνσεις IP και θύρες SSH, αποθηκεύονται σε αρχεία που ονομάζονται αρχεία αποθέματος. Αφού δημιουργήσετε ένα αρχείο αποθέματος και το συμπληρώσετε, η ansible μπορεί να το χρησιμοποιήσει.
Γιατί να χρησιμοποιήσετε το Ansible;
Ακολουθούν ορισμένα σημαντικά πλεονεκτήματα/πλεονεκτήματα της χρήσης του Ansible
- Ένα από τα πιο σημαντικά πλεονεκτήματα του Ansible είναι ότι είναι δωρεάν για χρήση από όλους.
- Δεν χρειάζεται ειδικές δεξιότητες διαχειριστή συστήματος για την εγκατάσταση και χρήση του Ansible και η επίσημη τεκμηρίωση είναι πολύ ολοκληρωμένη.
- Η πολυμορφικότητά του όσον αφορά τα πρόσθετα, τις ενότητες, τα αποθέματα και τα βιβλία αναπαραγωγής καθιστούν το Ansible τον τέλειο σύντροφο για την ενορχήστρωση μεγάλων περιβαλλόντων.
- Το Ansible είναι πολύ ελαφρύ και συνεπές και δεν υπάρχουν περιορισμοί σχετικά με το λειτουργικό σύστημα ή το υποκείμενο υλικό.
- Είναι επίσης πολύ ασφαλές λόγω των δυνατοτήτων του χωρίς πράκτορες και λόγω της χρήσης των λειτουργιών ασφαλείας OpenSSH.
- Ένα άλλο πλεονέκτημα που ενθαρρύνει την υιοθέτηση του Ansible είναι η ομαλή καμπύλη εκμάθησής του που καθορίζεται από την ολοκληρωμένη τεκμηρίωση και την εύκολη στην εκμάθηση δομή και διαμόρφωση.
Ιστορία του Ansible
Εδώ, είναι σημαντικά σημεία αναφοράς από την ιστορία του ansible:
- Τον Φεβρουάριο του 2012 ξεκίνησε το έργο Ansible. Αναπτύχθηκε για πρώτη φορά από τον Michael DeHaan, τον δημιουργό του Cobbler and Func, Fedora Unified Network Controller.
- Αρχικά ονομαζόταν AnsibleWorks Inc, η εταιρεία που χρηματοδοτούσε το εργαλείο ansible εξαγοράστηκε το 2015 από την RedHat και αργότερα, μαζί με την RedHat, μετακινήθηκαν υπό την ομπρέλα της IBM.
- Προς το παρόν, το Ansible περιλαμβάνεται σε διανομές όπως το Fedora Linux, RHEL, Centos και Oracle Linux.
Σημαντικοί όροι που χρησιμοποιούνται στο Ansible
-
Ansible διακομιστής
Το μηχάνημα όπου είναι εγκατεστημένο το Ansible και από το οποίο θα εκτελούνται όλες οι εργασίες και τα βιβλία αναπαραγωγής
-
Μονάδα μέτρησης
Βασικά, μια ενότητα είναι μια εντολή ή ένα σύνολο παρόμοιων εντολών Ansible που προορίζονται να εκτελεστούν στην πλευρά του πελάτη
-
Έργο
Μια εργασία είναι μια ενότητα που αποτελείται από μια ενιαία διαδικασία που πρέπει να ολοκληρωθεί
-
Ρόλος
Ένας τρόπος οργάνωσης εργασιών και σχετικών αρχείων που θα καλούνται αργότερα σε ένα βιβλίο αναπαραγωγής
-
Γεγονός
Πληροφορίες που λαμβάνονται από το σύστημα πελάτη από τις καθολικές μεταβλητές με τη λειτουργία συλλογής στοιχείων
-
Απόθεμα
Αρχείο που περιέχει δεδομένα σχετικά με τους διακομιστές πελάτη ansible. Ορίζεται σε μεταγενέστερα παραδείγματα ως αρχείο κεντρικών υπολογιστών
-
Δοκιμάστε να παίξετε
Εκτέλεση βιβλίου παιχνιδιού
-
Handler
Εργασία που καλείται μόνο εάν υπάρχει ειδοποιητής
-
Ειδοποιητής
Ενότητα που αποδίδεται σε μια εργασία που καλεί έναν χειριστή εάν αλλάξει η έξοδος
-
ετικέτα
Όνομα που έχει οριστεί σε μια εργασία που μπορεί να χρησιμοποιηθεί αργότερα για την έκδοση ακριβώς αυτής της συγκεκριμένης εργασίας ή ομάδας εργασιών.
Εγκατάσταση Ansible σε Linux
Αφού συγκρίνετε και σταθμίσετε τις επιλογές σας και αποφασίσετε να επιλέξετε το Ansible, το επόμενο βήμα είναι να το εγκαταστήσετε στο σύστημά σας. Θα περάσουμε από τα βήματα της εγκατάστασης σε διάφορα Linux διανομές, οι πιο δημοφιλείς, στο επόμενο μικρό σεμινάριο.
Εγκαταστήστε το Ansible σε συστήματα Centos/RedHat
Βήμα 1) Εγκαταστήστε το EPEL repo
[root@ansible-server ~]# sudo yum install epel-release
Βήμα 2) Εγκαταστήστε το πακέτο ansible
[root@ansible-server ~]# sudo yum install -y ansible
Εγκατάσταση ansible σε Ubuntu/Συστήματα Debian
Βήμα 1) Εκτελέστε μια ενημέρωση στα πακέτα
$ sudo apt update
Βήμα 2) Εγκαταστήστε το λογισμικό-ιδιότητες-κοινό πακέτο
$ sudo apt install software-properties-common
Βήμα 3) Εγκαταστήστε το αρχείο προσωπικών πακέτων ansible
$ sudo apt-add-repository ppa:ansible/ansible
Βήμα 4) Εγκατάσταση ansible
$ sudo apt update $ sudo apt install ansible
Ansible ad-hoc εντολές
Ένας από τους απλούστερους τρόπους που μπορεί να χρησιμοποιηθεί το Ansible είναι η χρήση εντολών ad-hoc. Αυτά μπορούν να χρησιμοποιηθούν όταν θέλετε να εκδώσετε ορισμένες εντολές σε έναν διακομιστή ή σε ένα σωρό διακομιστές. Οι εντολές ad-hoc δεν αποθηκεύονται για μελλοντικές χρήσεις, αλλά αντιπροσωπεύουν έναν γρήγορο τρόπο αλληλεπίδρασης με τους επιθυμητούς διακομιστές.
Για αυτό το σεμινάριο Ansible, θα διαμορφωθεί ένα απλό αρχείο κεντρικών υπολογιστών δύο διακομιστών, το οποίο θα περιέχει τον host1 και τον host2.
Μπορείτε να βεβαιωθείτε ότι οι κεντρικοί υπολογιστές είναι προσβάσιμοι από τον διακομιστή ansible εκδίδοντας μια εντολή ping σε όλους τους κεντρικούς υπολογιστές.
[root@ansible-server test_ansible]# ansible -i hosts all -m ping host1 | SUCCESS => { "changed": false, "ping": "pong" } host2 | SUCCESS => { "changed": false, "ping": "pong" }
Επεξήγηση:
- Κατάσταση της εντολής, σε αυτήν την περίπτωση, ΕΠΙΤΥΧΙΑ
- Κεντρικός υπολογιστής στον οποίο εκτελέστηκε η εντολή
- Η εντολή που εκδίδεται μέσω της παραμέτρου -m, σε αυτήν την περίπτωση, ping
- Με την παράμετρο -i, μπορείτε να υποδείξετε το αρχείο hosts.
Μπορείτε να εκδώσετε την ίδια εντολή μόνο σε έναν συγκεκριμένο κεντρικό υπολογιστή, εάν χρειάζεται.
[root@ansible-server test_ansible]# ansible -i hosts all -m ping --limit host2 host2 | SUCCESS => { "changed": false, "ping": "pong" }
Επεξήγηση:
- Η παράμετρος ορίου μπορεί να χρησιμοποιηθεί για την έκδοση εντολών μόνο σε συγκεκριμένους κεντρικούς υπολογιστές στο αρχείο του κεντρικού υπολογιστή
- Το όνομα του κεντρικού υπολογιστή όπως ορίζεται στο αρχείο αποθέματος
Εάν χρειάζεται να αντιγράψετε ένα αρχείο σε πολλούς προορισμούς γρήγορα, μπορείτε να χρησιμοποιήσετε τη μονάδα αντιγραφής στο ansible που χρησιμοποιεί SCP. Έτσι η εντολή και η έξοδος της μοιάζουν παρακάτω:
[root@ansible-server test_ansible]# ansible -i hosts all -m copy -a "src=/root/test_ansible/testfile dest=/tmp/testfile" host1 | SUCCESS => { "changed": true, "checksum": "da39a3ee5e6b4b0d3255bfef95601890afd80709", "dest": "/tmp/testfile", "gid": 0, "group": "root", "md5sum": "d41d8cd98f00b204e9800998ecf8427e", "mode": "0644", "owner": "root", "size": 0, "src": "/root/.ansible/tmp/ansible-tmp-1562216392.43-256741011164877/source", "state": "file", "uid": 0 } host2 | SUCCESS => { "changed": true, "checksum": "da39a3ee5e6b4b0d3255bfef95601890afd80709", "dest": "/tmp/testfile", "gid": 0, "group": "root", "md5sum": "d41d8cd98f00b204e9800998ecf8427e", "mode": "0644", "owner": "root", "size": 0, "src": "/root/.ansible/tmp/ansible-tmp-1562216392.6-280302911361278/source", "state": "file", "uid": 0 }
Επεξήγηση:
- Ορίστηκε μονάδα αντιγραφής
- Τα ορίσματα της μονάδας, σε αυτήν την περίπτωση, είναι η απόλυτη διαδρομή πηγής και η απόλυτη διαδρομή προορισμού.
- Αντίστοιχη έξοδος εντολών που αντικατοπτρίζει την επιτυχία της εντολής αντιγραφής και άλλες λεπτομέρειες, όπως τα αθροίσματα ελέγχου sha1 ή md5 για έλεγχο ακεραιότητας αρχείων και μεταδεδομένα όπως κάτοχος, μέγεθος ή δικαιώματα. Είναι εύκολο να εγκαταστήσετε ένα πακέτο σε μια δέσμη διακομιστών. Το Ansible έχει πολλές ενότητες που αλληλεπιδρούν με μεταχειρισμένα προγράμματα εγκατάστασης, όπως yum, apt, dnf κ.λπ.
Στο επόμενο παράδειγμα, θα μάθετε πώς να εγκαταστήσετε ένα πακέτο μέσω της μονάδας yum σε δύο κεντρικούς υπολογιστές Centos.
[root@ansible-server test_ansible]# ansible -i hosts all -m yum -a 'name=ncdu state=present' host1 | SUCCESS => { "changed": true, "msg": "", "rc": 0, "results": [ "Loaded plugins: fastestmirror\nLoading mirror speeds from cached hostfile\n * base: mirror.netsite.dk\n * elrepo: mirrors.xservers.ro\n * epel: fedora.mirrors.telekom.ro\n * extras: centos.mirrors.telekom.ro\n * remi-php70: remi.schlundtech.de\n * remi-safe: remi.schlundtech.de\n * updates: centos.mirror.iphh.net\nResolving Dependencies\n--> Running transaction check\n---> Package ncdu.x86_64 0:1.14-1.el7 will be installed\n--> Finished Dependency Resolution\n\nDependencies Resolved\n\n================================================================================\n Package Arch Version Repository Size\n================================================================================\nInstalling:\n ncdu x86_64 1.14-1.el7 epel 51 k\n\nTransaction Summary\n================================================================================\nInstall 1 Package\n\nTotal download size: 51 k\nInstalled size: 87 k\nDownloading packages:\nRunning transaction check\nRunning transaction test\nTransaction test succeeded\nRunning transaction\n Installing : ncdu-1.14-1.el7.x86_64 1/1 \n Verifying : ncdu-1.14-1.el7.x86_64 1/1 \n\nInstalled:\n ncdu.x86_64 0:1.14-1.el7 \n\nComplete!\n" ] } host2 | SUCCESS => { "changed": true, "msg": "", "rc": 0, "results": [ "Loaded plugins: fastestmirror\nLoading mirror speeds from cached hostfile\n * base: mirror.netsite.dk\n * elrepo: mirrors.leadhosts.com\n * epel: mirrors.nav.ro\n * extras: centos.mirrors.telekom.ro\n * remi-php70: mirrors.uni-ruse.bg\n * remi-safe: mirrors.uni-ruse.bg\n * updates: centos.mirror.iphh.net\nResolving Dependencies\n--> Running transaction check\n---> Package ncdu.x86_64 0:1.14-1.el7 will be installed\n--> Finished Dependency Resolution\n\nDependencies Resolved\n\n================================================================================\n Package Arch Version Repository Size\n================================================================================\nInstalling:\n ncdu x86_64 1.14-1.el7 epel 51 k\n\nTransaction Summary\n================================================================================\nInstall 1 Package\n\nTotal download size: 51 k\nInstalled size: 87 k\nDownloading packages:\nRunning transaction check\nRunning transaction test\nTransaction test succeeded\nRunning transaction\n Installing : ncdu-1.14-1.el7.x86_64 1/1 \n Verifying : ncdu-1.14-1.el7.x86_64 1/1 \n\nInstalled:\n ncdu.x86_64 0:1.14-1.el7 \n\nComplete!\n" ] }
Επεξήγηση:
- Η μονάδα Yum χρησιμοποιείται σε αυτό το παράδειγμα
- Ορίζει τα ορίσματα της ενότητας και σε αυτήν την περίπτωση, θα επιλέξετε το όνομα του πακέτου και την κατάστασή του. Εάν η κατάσταση απουσιάζει, για παράδειγμα, το πακέτο θα αναζητηθεί και εάν βρεθεί, θα αφαιρεθεί
- Όταν χρωματιστεί με κίτρινο χρώμα, θα δείτε την έξοδο της εντολής ansible με την κατάσταση αλλαγμένη, που σημαίνει σε αυτήν την περίπτωση ότι το πακέτο βρέθηκε και εγκαταστάθηκε.
- Κατάσταση της εντολής εγκατάστασης yum που εκδόθηκε μέσω του ansible. Σε αυτήν την περίπτωση εγκαταστάθηκε το πακέτο ncdu.x86_64 0:1.14-1.el7.
Φυσικά, όλες οι επιλογές του προγράμματος εγκατάστασης yum μπορούν να χρησιμοποιηθούν μέσω του ansible, συμπεριλαμβανομένης της ενημέρωσης, εγκατάστασης, τελευταίας έκδοσης ή κατάργησης.
Στο παρακάτω παράδειγμα εκδόθηκε η ίδια εντολή για την αφαίρεση του πακέτου ncdu που είχε εγκατασταθεί προηγουμένως.
[root@ansible-server test_ansible]# ansible -i hosts all -m yum -a 'name=ncdu state=absent' host1 | SUCCESS => { "changed": true, "msg": "", "rc": 0, "results": [ "Loaded plugins: fastestmirror\nResolving Dependencies\n--> Running transaction check\n---> Package ncdu.x86_64 0:1.14-1.el7 will be erased\n--> Finished Dependency Resolution\n\nDependencies Resolved\n\n================================================================================\n Package Arch Version Repository Size\n================================================================================\nRemoving:\n ncdu x86_64 1.14-1.el7 @epel 87 k\n\nTransaction Summary\n================================================================================\nRemove 1 Package\n\nInstalled size: 87 k\nDownloading packages:\nRunning transaction check\nRunning transaction test\nTransaction test succeeded\nRunning transaction\n Erasing : ncdu-1.14-1.el7.x86_64 1/1 \n Verifying : ncdu-1.14-1.el7.x86_64 1/1 \n\nRemoved:\n ncdu.x86_64 0:1.14-1.el7 \n\nComplete!\n" ] } host2 | SUCCESS => { "changed": true, "msg": "", "rc": 0, "results": [ "Loaded plugins: fastestmirror\nResolving Dependencies\n--> Running transaction check\n---> Package ncdu.x86_64 0:1.14-1.el7 will be erased\n--> Finished Dependency Resolution\n\nDependencies Resolved\n\n================================================================================\n Package Arch Version Repository Size\n================================================================================\nRemoving:\n ncdu x86_64 1.14-1.el7 @epel 87 k\n\nTransaction Summary\n================================================================================\nRemove 1 Package\n\nInstalled size: 87 k\nDownloading packages:\nRunning transaction check\nRunning transaction test\nTransaction test succeeded\nRunning transaction\n Erasing : ncdu-1.14-1.el7.x86_64 1/1 \n Verifying : ncdu-1.14-1.el7.x86_64 1/1 \n\nRemoved:\n ncdu.x86_64 0:1.14-1.el7 \n\nComplete!\n" ] }
Επεξήγηση:
- Η έξοδος της εντολής yum δείχνει ότι το πακέτο καταργήθηκε.
Ένα άλλο χρήσιμο και ουσιαστικό χαρακτηριστικό που χρησιμοποιεί το ansible για την αλληλεπίδραση με τον διακομιστή του πελάτη είναι να συγκεντρώσει ορισμένα στοιχεία για το σύστημα. Έτσι, ανακτά πληροφορίες υλικού, λογισμικού και έκδοσης από το σύστημα και αποθηκεύει κάθε τιμή σε μια μεταβλητή που μπορεί να χρησιμοποιηθεί αργότερα.
Εάν χρειάζεστε λεπτομερείς πληροφορίες σχετικά με τα συστήματα που πρόκειται να τροποποιηθούν μέσω του ansible, μπορεί να χρησιμοποιηθεί η επόμενη εντολή. Η μονάδα εγκατάστασης συλλέγει στοιχεία από τις μεταβλητές συστήματος.
Ansible Playbooks
Ansible Playbooks είναι ο τρόπος αποστολής εντολών σε απομακρυσμένα συστήματα μέσω σεναρίων. Τα Ansible playbooks χρησιμοποιούνται για τη διαμόρφωση σύνθετων περιβαλλόντων συστήματος για αύξηση της ευελιξίας εκτελώντας ένα σενάριο σε ένα ή περισσότερα συστήματα. Τα Ansible playbook τείνουν να είναι περισσότερο μια γλώσσα διαμόρφωσης παρά μια γλώσσα προγραμματισμού.
Οι εντολές Ansible playbook χρησιμοποιούν τη μορφή YAML, επομένως δεν χρειάζεται πολλή σύνταξη, αλλά πρέπει να τηρείται η εσοχή. Όπως λέει και το όνομα, ένα playbook είναι μια συλλογή θεατρικών έργων. Μέσω ενός βιβλίου παιχνιδιού, μπορείτε να ορίσετε συγκεκριμένους ρόλους σε ορισμένους κεντρικούς υπολογιστές και άλλους ρόλους σε άλλους κεντρικούς υπολογιστές. Με αυτόν τον τρόπο, μπορείτε να ενορχηστρώσετε πολλούς διακομιστές σε πολύ διαφορετικά σενάρια, όλα σε ένα βιβλίο.
Για να έχουμε όλες τις λεπτομέρειες ακριβείς πριν συνεχίσουμε με παραδείγματα βιβλίων Ansible, πρέπει πρώτα να ορίσουμε μια εργασία. Αυτές είναι η διασύνδεση με ansible ενότητες για ρόλους και βιβλία.
Τώρα, ας μάθουμε το Ansible playbook μέσα από ένα παράδειγμα με ένα playbook με ένα παιχνίδι, που περιέχει πολλαπλές εργασίες όπως παρακάτω:
--- - hosts: group1 tasks: - name: Install lldpad package yum: name: lldpad state: latest - name: check lldpad service status service: name: lldpad state: started
Στο παραπάνω παράδειγμα του βιβλίου Ansible, η ομάδα 1 κεντρικών υπολογιστών στο αρχείο του κεντρικού υπολογιστή στοχεύει για εγκατάσταση πακέτου lldpad χρησιμοποιώντας τη λειτουργική μονάδα yum και στη συνέχεια η υπηρεσία lldpad που δημιουργήθηκε μετά την εγκατάσταση ξεκινά χρησιμοποιώντας τη λειτουργική μονάδα υπηρεσιών που χρησιμοποιείται κυρίως για αλληλεπίδραση με το σύνολο του systemd.
Επεξήγηση:
- Ομάδα κεντρικών υπολογιστών στους οποίους θα εκτελείται το playbook
- Η μονάδα Yum χρησιμοποιείται σε αυτήν την εργασία για εγκατάσταση lldpad
- Η μονάδα σέρβις χρησιμοποιείται για να ελέγξει εάν η υπηρεσία είναι σε λειτουργία και λειτουργεί μετά την εγκατάσταση
Κάθε ansible playbook λειτουργεί με ένα αρχείο αποθέματος. Το αρχείο αποθέματος περιέχει μια λίστα με διακομιστές χωρισμένους σε ομάδες για καλύτερο έλεγχο για λεπτομέρειες όπως Διεύθυνση IP και θύρα SSH για κάθε κεντρικό υπολογιστή.
Το αρχείο αποθέματος που μπορείτε να χρησιμοποιήσετε για αυτό το παράδειγμα βιβλίου Ansible μοιάζει με το παρακάτω. Υπάρχουν δύο ομάδες, που ονομάζονται group1 και group2 η καθεμία περιέχει host1 και host2 αντίστοιχα.
[group1] host1 ansible_host=192.168.100.2 ansible_ssh_port=22 [group2] host2 ansible_host=192.168.100.3 ansible_ssh_port=22
Επεξήγηση:
- Όνομα ομάδας
- Όνομα κεντρικού υπολογιστή, με διεύθυνση IP και θύρα ssh, σε αυτήν την περίπτωση, το προεπιλεγμένο, 22.
Ένα άλλο χρήσιμο παράδειγμα βιβλίου Ansible που περιέχει αυτή τη φορά δύο παιχνίδια για δύο κεντρικούς υπολογιστές είναι το επόμενο. Για την πρώτη ομάδα κεντρικών υπολογιστών, η ομάδα 1, το selinux θα είναι ενεργοποιημένο. Εάν είναι ενεργοποιημένο, τότε θα εμφανιστεί ένα μήνυμα στην οθόνη του κεντρικού υπολογιστή.
Για τη δεύτερη ομάδα κεντρικών υπολογιστών, το πακέτο httpd θα εγκατασταθεί μόνο εάν το ansible_os_family είναι RedHat και το ansible_system_vendor είναι η HP.
Το Ansible_os_family και το ansible_system_vendor είναι μεταβλητές που συγκεντρώνονται με την επιλογή collect_facts και μπορούν να χρησιμοποιηθούν όπως σε αυτό το υπό όρους παράδειγμα.
--- - hosts: group1 tasks: - name: Enable SELinux selinux: state: enabled when: ansible_os_family == 'Debian' register: enable_selinux - debug: Imsg: "Selinux Enabled. Please restart the server to apply changes." when: enable_selinux.changed == true - hosts: group2 tasks: - name: Install apache yum: name: httpd state: present when: ansible_system_vendor == 'HP' and ansible_os_family == 'RedHat'
Επεξήγηση:
- Παράδειγμα της ρήτρας when, Σε αυτήν την περίπτωση, όταν ο τύπος λειτουργικού συστήματος είναι Debian. Η μεταβλητή ansible_os_family συγκεντρώνεται μέσω της λειτουργικότητας collect_facts.
- Η έξοδος της εργασίας καταχωρείται για μελλοντική χρήση, με το όνομά της enable_selinux
- Ένα άλλο παράδειγμα της ρήτρας όταν. Σε αυτήν την περίπτωση, θα εμφανιστεί ένα μήνυμα για τον κεντρικό χρήστη εάν το SELinux ήταν όντως ενεργοποιημένο στο παρελθόν.
- Ένα άλλο παράδειγμα της ρήτρας όταν αποτελείται από δύο κανόνες
Εκτός από τις εργασίες, υπάρχουν επίσης ορισμένες συγκεκριμένες εργασίες που ονομάζονται χειριστές. Οι χειριστές πρέπει να έχουν ένα μοναδικό όνομα σε όλο το βιβλίο. Αυτά λειτουργούν με τον ίδιο τρόπο όπως μια κανονική εργασία, αλλά ένας χειριστής μπορεί να ειδοποιηθεί μέσω ενός ειδοποιητή.
Εάν ένας χειριστής δεν ειδοποιηθεί κατά τη διάρκεια της εκτέλεσης του βιβλίου αναπαραγωγής, δεν θα εκτελεστεί. Ωστόσο, εάν περισσότερες από μία εργασίες ειδοποιήσουν έναν χειριστή, αυτό θα εκτελεστεί μόνο μία φορά μετά την ολοκλήρωση όλων των εργασιών.
Στο παράδειγμα που φαίνεται παρακάτω, μπορείτε να δείτε πώς μια συγκεκριμένη εργασία έχει μια ενότητα ειδοποιήσεων που καλεί μια άλλη εργασία. Εάν αλλάξει η έξοδος της πρώτης εργασίας, τότε θα κληθεί μια εργασία χειριστή. Το καλύτερο παράδειγμα είναι να αλλάξετε ένα αρχείο ρυθμίσεων και στη συνέχεια να επανεκκινήσετε τη συγκεκριμένη υπηρεσία.
--- - hosts: group2 tasks: - name: sshd config file modify port lineinfile: path: /etc/ssh/sshd_config regexp: 'Port 28675' line: '#Port 22' notify: - restart sshd handlers - name: restart sshd service: sshd name: sshd state: restarted
Σε αυτήν την περίπτωση, εάν η πρώτη εργασία, "sshd file config modify port" αλλάξει, που σημαίνει ότι εάν η θύρα δεν είναι αρχικά 28675, τότε θα τροποποιηθεί και η εργασία θα ειδοποιήσει το πρόγραμμα χειρισμού με το ίδιο όνομα για εκτέλεση , και θα επανεκκινήσει την υπηρεσία sshd.
Επεξήγηση:
- Παράδειγμα ειδοποιητή
- Παράδειγμα χειριστή
Αναισθητικοί Ρόλοι
Όταν ασχολείστε με εκτεταμένα βιβλία παιχνιδιού, είναι ευκολότερο να χωρίσετε τις εργασίες σε ρόλους. Αυτό βοηθά επίσης στην επαναχρησιμοποίηση των ρόλων στο μέλλον. Οι ρόλοι είναι μια συλλογή εργασιών, οι οποίες μπορούν να μετακινηθούν από το ένα βιβλίο αναπαραγωγής στο άλλο, μπορούν να εκτελεστούν ανεξάρτητα αλλά μόνο μέσω ενός αρχείου βιβλίου αναπαραγωγής.
Οι ρόλοι αποθηκεύονται σε ξεχωριστούς καταλόγους και έχουν μια συγκεκριμένη δομή καταλόγου.
[root@ansible-server test2]# tree . `-- role1 |-- defaults | `-- main.yml |-- handlers | `-- main.yml |-- meta | `-- main.yml |-- README.md |-- tasks | `-- main.yml |-- tests | |-- inventory | `-- test.yml `-- vars `-- main.yml 7 directories, 8 files
Το αρχείο yaml στον κατάλογο προεπιλογών περιέχει μια λίστα προεπιλεγμένων μεταβλητών που πρόκειται να χρησιμοποιηθούν μαζί με το βιβλίο αναπαραγωγής. Ο κατάλογος χειριστές χρησιμοποιείται για την αποθήκευση χειριστών. Ο μετα-κατάλογος υποτίθεται ότι έχει πληροφορίες σχετικά με τις εξαρτήσεις του συγγραφέα και του ρόλου. Στον κατάλογο εργασιών, υπάρχει το κύριο αρχείο yaml για το ρόλο.
Ο κατάλογος δοκιμών περιέχει ένα δείγμα αρχείου yaml playbook και ένα δείγμα αρχείου αποθέματος και χρησιμοποιείται κυρίως για δοκιμαστικούς σκοπούς πριν από τη δημιουργία του πραγματικού ρόλου.
Ο κατάλογος vars περιέχει το αρχείο yaml στο οποίο θα οριστούν όλες οι μεταβλητές που χρησιμοποιούνται από τον ρόλο. Τα πρότυπα καταλόγου και τα αρχεία καταλόγου θα πρέπει να περιέχουν αρχεία και πρότυπα που θα χρησιμοποιηθούν από τις εργασίες του ρόλου.
Για να δημιουργήσετε το δέντρο καταλόγου για έναν ρόλο, θα πρέπει να χρησιμοποιήσετε την ακόλουθη εντολή με την τελευταία παράμετρο, το όνομα του ρόλου:
[root@ansible-server test2]# ansible-galaxy init role1
Το Ansible λειτουργεί επίσης καλά με τα πρότυπα. Ως γλώσσα για πρότυπα, χρησιμοποιεί Jinja2.
Στο επόμενο παράδειγμα, θα μάθετε πώς μοιάζει ένα βασικό πρότυπο jinja2 και θα το χρησιμοποιήσετε σε έναν ρόλο.
Κατά το χρόνο εκτέλεσης, ανάλογα με το, ας πούμε, σε ποιο κέντρο δεδομένων βρίσκεται ο διακομιστής σας, μπορείτε να επιλέξετε από περισσότερους από έναν διακομιστές ονομάτων, ο καθένας που αντιστοιχεί σε ένα κέντρο δεδομένων, χρησιμοποιώντας τη μεταβλητή "resolver_ip_addresses".
{% for resolver in resolver_ip_addresses %} nameserver {{ resolver }} {% endfor %} options timeout:1 options attempts:5 options rotate
Σε αυτό το παράδειγμα, στον κατάλογο του playbook, ορίζονται ορισμένες μεταβλητές, συμπεριλαμβανομένης μιας μεταβλητής με το όνομα solver_ip_addresses με διαφορετικές τιμές ανάλογα με το κέντρο δεδομένων.
- name: Set resolver for server template: src: dns.j2 dest: /etc/resolv.conf group: root owner: root mode: "0644" tag: resolver
Επεξήγηση:
- Όνομα του προτύπου που θα χρησιμοποιηθεί. Το πρότυπο βρίσκεται στα πρότυπα στη διαδρομή ρόλου
- Διαδρομή προορισμού του ονόματος αρχείου που θα αντικατασταθεί με το πρότυπο, στην πλευρά του πελάτη.
- Δικαιώματα του αρχείου προορισμού
Οι εργασίες ρόλων μπορούν επίσης να έχουν ένα πεδίο ετικέτας, το οποίο έχει ένα όνομα. Περισσότερες από μία εργασίες μπορούν να μοιράζονται την ίδια ετικέτα. Κατά την εκτέλεση ενός βιβλίου αναπαραγωγής, μπορείτε επίσης να καθορίσετε την ετικέτα, έτσι ώστε αυτές οι εργασίες να εκτελούνται.
Ansible Case Study
Σε αυτή την ενότητα, θα αναλύσουμε μια μελέτη περίπτωσης ενός βασικού βιβλίου παιχνιδιού που έχει τρεις ρόλους. Σκοπός αυτού είναι να δώσουμε ένα πρακτικό παράδειγμα αυτού για το οποίο μιλήσαμε πριν. Μερικά από τα παραδείγματα που χρησιμοποιήθηκαν προηγουμένως σε αυτό το σεμινάριο Ansible playbook θα προσαρμοστούν και θα χρησιμοποιηθούν σε αυτό το playbook.
Παρακάτω είναι η δομή καταλόγου του playbook. Το αρχείο Yaml που θα χρησιμοποιηθεί θα είναι p4.yml.
[root@ansible-server test_ansible]# ls -lrth total 16K -rw-r--r--. 1 root root 0 Jul 3 10:13 testfile -rw-r--r--. 1 root root 203 Jul 3 13:30 p1.yml -rw-r--r--. 1 root root 125 Jul 3 15:00 hosts -rw-r--r--. 1 root root 488 Jul 3 16:40 p2.yml -rw-r--r--. 1 root root 188 Jul 4 17:33 p4.yml drwxr-xr-x. 5 root root 47 Jul 4 17:35 roles [root@ansible-server test_ansible]# cd roles [root@ansible-server roles]# ls -lrth total 12K drwxr-xr-x. 9 root root 4.0K Jul 4 12:52 httpd drwxr-xr-x. 9 root root 4.0K Jul 4 13:55 selinux drwxr-xr-x. 9 root root 4.0K Jul 4 16:54 resolver
Το βιβλίο αναπαραγωγής έχει τρεις ρόλους, ο ένας ονομάζεται αναλυτής που ορίζει έναν συγκεκριμένο διακομιστή ονομάτων στους διακομιστές αντιγράφοντας ένα αρχείο από τον διακομιστή στον προορισμό /etc/resolv.conf. Ένα άλλο ονομάζεται httpd και εγκαθιστά το πακέτο httpd με την ενότητα yum και το τρίτο ενεργοποιεί το SELinux και ειδοποιεί τον συνδεδεμένο χρήστη να επανεκκινήσει το σύστημα. Κάθε ρόλος δημιουργήθηκε χρησιμοποιώντας την εντολή ansible-galaxy.
Ρόλος επίλυσης, εργασία main.yml:
Ρόλος Httpd, εργασία main.yml:
Ρόλος Selinux, εργασία main.yml:
Παρακάτω ορίζεται το playbook p4.yml. Θα εκτελείται σε όλους τους κεντρικούς υπολογιστές, εάν δεν ορίζεται διαφορετικά στη γραμμή εντολών, θα εκτελείται ως χρήστης root στη θύρα 22 (SSH), θα συλλέγει στοιχεία πριν από την εκτέλεση των ρόλων και θα εκτελεί και τους τρεις ρόλους που αναφέρθηκαν προηγουμένως. Κάθε ρόλος μπορεί να εκτελεστεί ανεξάρτητα, καθορίζοντας την ετικέτα στη γραμμή εντολών ansible-playbook με την παράμετρο –t.
--- - hosts: all user: root port: 22 gather_facts: True roles: - { role: selinux, tags: selinux } - { role: httpd, tags: httpd } - { role: resolver, tags: resolver }
Εκτέλεση του βιβλίου αναπαραγωγής p4.yml σε δύο κεντρικούς υπολογιστές και ερμηνεία της εξόδου. Η ίδια εντολή μπορεί να εκτελεστεί με την παράμετρο –check για στεγνή εκτέλεση. Σε περίπτωση που θέλετε να χρησιμοποιήσετε έλεγχο ταυτότητας με κωδικό πρόσβασης, χρησιμοποιήστε την παράμετρο -k.
Επεξήγηση:
- Εντολή Ansible-playbook που εκτελεί το p4.yml
- Το Playbook παρακάμπτει το ρόλο SELinux επειδή είναι ήδη ενεργοποιημένος.
- Ο Ansible διαπίστωσε ότι το πακέτο httpd είναι ήδη εγκατεστημένο, οπότε επιστρέφει οκ.
- Το πρόγραμμα επίλυσης ορίστηκε και η κατάσταση του εργαλείου επίλυσης ρόλων άλλαξε.
Φύλλο εξαπάτησης εντολών Ansible
Εγκαταστήστε το EPEL repo σε συστήματα Centos/RHEL
[root@ansible-server ~]# sudo yum install epel-release
Εγκαταστήστε το πακέτο ansible σε συστήματα Centos/RHEL
[root@ansible-server ~]# sudo yum install -y ansible
Εκτελέστε μια ενημέρωση στα πακέτα στο Debian/Ubuntu συστήματα
$ sudo apt update
Εγκαταστήστε το λογισμικό-ιδιότητες-κοινό πακέτο στο Debian/Ubuntu συστήματα
$ sudo apt install software-properties-common
Εγκαταστήστε το αρχείο προσωπικών πακέτων ansible στο Debian/Ubuntu συστήματα
$ sudo apt-add-repository ppa:ansible/ansible
Εγκαταστήστε το ansible στο Debian/Ubuntu συστήματα
$ sudo apt update $ sudo apt install ansible
Εκδώστε μια εντολή ping σε όλους τους διακομιστές που ορίζονται στο αρχείο αποθέματος με το όνομα hosts
[root@ansible-server test_ansible]# ansible -i hosts all -m ping
Εκδώστε μια εντολή ping μόνο στον host2
[root@ansible-server test_ansible]# ansible -i hosts all -m ping --limit host2
Αντιγράψτε το αρχείο "testfile" σε όλους τους κεντρικούς υπολογιστές στο αρχείο αποθέματος
[root@ansible-server test_ansible]# ansible -i hosts all -m copy -a "src=/root/test_ansible/testfile dest=/tmp/testfile"
Εγκαταστήστε το πακέτο ncdu σε όλους τους κεντρικούς υπολογιστές
[root@ansible-server test_ansible]# ansible -i hosts all -m yum -a 'name=ncdu state=present'
Καταργήστε το πακέτο ncdu σε όλους τους κεντρικούς υπολογιστές
[root@ansible-server test_ansible]# ansible -i hosts all -m yum -a 'name=ncdu state=absent'
Δημιουργήστε τη δομή καταλόγου για το ρόλο με το όνομα role1.
[root@ansible-server test2]# ansible-galaxy init role1
Dry-run p4.yml playbook
[root@ansible-server test_ansible]# ansible-playbook -i hosts p4.yml --check
Εκτελέστε το p4.yml playbook με έλεγχο ταυτότητας κωδικού πρόσβασης για όλους τους κεντρικούς υπολογιστές
[root@ansible-server test_ansible]# ansible-playbook -i hosts p4.yml -k
Σύνοψη
Σε έναν κόσμο με τεχνολογία που αλλάζει συνεχώς με γρήγορους ρυθμούς και ταυτόχρονα αναπτύσσεται απίστευτα γρήγορα, οι διαχειριστές συστημάτων και οι μηχανικοί ανάπτυξης πρέπει να σκεφτούν διαφορετικές προσεγγίσεις για το πώς να αυτοματοποιήσουν εργασίες ρουτίνας και να ενορχηστρώσουν μεγάλες ομάδες διακομιστών.
Ενώ υπάρχουν πολλά εναλλακτική του Ansible (Chef, Puppet) εκεί έξω που κάνουν το ίδιο πράγμα με κάποιες διαφορές, το Ansible κατάφερε να ανέβει πάνω από όλα με την απλότητά του, τη βελτιωμένη ασφάλεια και το σημαντικότερο την ομαλή καμπύλη εκμάθησής του. Λόγω αυτών των ιδιοτήτων και της γρήγορης υιοθέτησης του Ansible, δημιουργήσαμε ένα σεμινάριο γεμάτο παραδείγματα, ώστε να έχετε μια ακόμη πιο απρόσκοπτη πρώτη εμπειρία στη συνεργασία με το Ansible.
Σε αυτό το σεμινάριο βασικών στοιχείων του Ansible, περιγράψαμε το ansible και μιλήσαμε λίγο για την ιστορία του. Αναφέραμε τα δυνατά σημεία του Ansible και τα πλεονεκτήματα που μπορεί να φέρει το ansible στον αυτοματισμό και την ενορχήστρωση υποδομών διαφορετικών μεγεθών. Ορίσαμε τους βασικούς χρησιμοποιούμενους όρους του Ansible και ορίσαμε τη δομή των βιβλίων Ansible. Ενδελεχή παραδείγματα συνόδευαν όλες τις πληροφορίες με λεπτομερείς εξηγήσεις.