Τι είναι τα Playbooks;

15/11/2023 / Ansible
create-ansible-playbooks

Η Ansible είναι ένα εργαλείο που μπορεί να αυτοματοποιεί μια εργασία και να την εκτελεί σε διάφορα συστήματα. Αυτό γίνεται με τη χρήση των playbooks.

Τα playbooks είναι αρχεία που περιέχουν script γραμμένα σε YAML. Σε ένα playbook ορίζουμε τους hosts στους οποίους θα εκτελεστεί ένα script.

Έτσι, αν θέλουμε να εγκαταστήσουμε ένα πρόγραμμα σε 10 διαφορετικούς server, δεν χρειάζεται να επαναλάβουμε την ίδια διαδικασία 10 φορές. Φτιάχνουμε ένα playbook, γράφουμε το script που θα κάνει εγκατάσταση το πρόγραμμά μας και ορίζουμε τους 10 hosts. Μόλις εκτελέσουμε το playbook με μια εντολή, το πρόγραμμα θα εγκατασταθεί σε όλους τους servers.

Ας δούμε ένα βασικό Playbook

---

- hosts: virtual hosts

 tasks:  

- name: Installs nginx web server

     apt: pkg=nginx state=installed update_cache=tru

     notify:

    - start nginx

 handlers:

 - name: start nginx

    service: name=nginx state=started

Το playbook ξεκινά με --- . Αυτό είναι οδηγία προς την YAML να δει το παρακάτω κείμενο ως κανονικό document. Στο ίδιο αρχείο μπορούμε να έχουμε πολλαπλά documents τα οποια θα χωρίζονται με --- .

Εκτελώντας το Playbook 

Τώρα που το playbook είναι έτοιμο, το καλούμε με την εντολή:

ansible-playbook playbook.yml

Για παράδειγμα, αν θέλουμε να κάνουμε install και start up τον Nginx σε όλους τους Hosts, μπορούμε να τρέξουμε την εντολή:

ansible-playbook nginx.yml

Εφόσον μέσα στο playbook έχουμε ορίσει τους hosts, όταν εκτελούμε μια εντολή, δεν χρειάζεται να τους ξαναορίζουμε. Αν όμως θελήσουμε το playbook να εκτελεστεί μόνο για έναν host, τότε αυτό θα γίνει έτσι:

ansible-playbook -l host_subset playbook.yml

Ομοίως, αν θέλαμε να κάνουμε install τον Nginx μόνο στον host3 θα τρέχαμε την:

ansible-playbook -l host3 nginx.yml

Αυξάνοντας τις δυνατότητες του Playbook

Ως τώρα, το playbook που φτιάξαμε απλά κάνει Install και startup τον Nginx. Αυτό όμως από μόνο του δεν είναι χρήσιμο. Ας δοκιμάσουμε να κάνουμε και άλλα πράγματα με το playbook.

Μπορούμε να στείλουμε ένα αρχείο από τον Ansible Server σε έναν host προσθέτοντας τις εξής γραμμές:

---
- hosts: virtual hosts

 tasks:

   - name: Installs nginx web server

     apt: pkg=nginx state=installed update_cache=true

     notify:

       - start nginx

   - name: Upload default index.html for host

     copy: src=static_files/index.html dest=/usr/share/nginx/www/ mode=0644

 handlers:

   - name: start nginx

     service: name=nginx state=started

Όμως το αρχείο αυτό δεν το έχουμε φτιάξει. Στο τωρινό μας directory, φτιάχνουμε το directory static_files και μέσα σε αυτό φτιάχνουμε τη σελίδα index:

mkdir static_files

vi static_files/index.html

Μέσα στο HTML αρχείο γράφουμε τα εξής: 

 


Και το αποθηκεύουμε!

Τώρα όταν ξανατρέξουμε το playbook, θα αντικαταστήσει την αρχική σελίδα του Nginx με την σελίδα index που μόλις φτιάξαμε σε όλους τους Hosts.

Κάθε φορά που κάνουμε κάτι install και configure σε έναν remote host, πρέπει να ξέρουμε αν αυτό έγινε με επιτυχία. Για αυτό, για κάθε εργασία που γίνεται σε έναν remote host, μπορούμε να κάνουμε register το αποτέλεσμα (επιτυχία ή αποτυχία) σε μια μεταβλητή που μπορούμε να τσεκάρουμε με την χρήση της εντολής register.

Για παράδειγμα, μπορούμε να πούμε στο playbook να κάνει upload ένα αρχείο index.php . Αν η εργασία αυτή αποτύχει, τότε θα κάνουμε upload ένα index.html αρχείο αντί για αυτό.

---

- hosts: virtual hosts

 tasks:

   - name: Installs nginx web server

     apt: pkg=nginx state=installed update_cache=true

     notify:

       - start nginx

   - name: Upload default index.php for host

     copy: src=static_files/index.php dest=/usr/share/nginx/www/ mode=0644

     register: php

     ignore_errors: True

   - name: Remove index.html for host

     command: rm /usr/share/nginx/www/index.html

     when: php|success

   - name: Upload default index.html for host

     copy: src=static_files/index.html dest=/usr/share/nginx/www/ mode=0644

     when: php|failed

 handlers:

   - name: start nginx

     service: name=nginx state=started

Επειδή δεν έχουμε φτιάξει κάποιο php αρχείο, το πρώτο task θα αποτύχει, οπότε αναμένουμε να γίνει upload το index.html  σε όλους τους hosts.



Στην Cloud Concept στόχο αποτελεί η αδιάλειπτη τεχνική υποστήριξη των αναγκών σας, η προσφορά managed υπηρεσιών υψηλού επιπέδου και η παροχή πρόσβασης σε χρήσιμες προτάσεις για την αποδοτική διαχείριση των δεδομένων σας.

Μάθετε περισσότερα για τις υπηρεσίες μας εδώ.

Ακολουθήστε μας σε LinkedIn, Facebook, & Instagram για να μένετε ενημερωμένοι!

ΣΥΝΔΕΣΗ

Αίτηση επικοινωνίας

ΠΑΝΩ