Τι είναι τα Playbooks ;

05/12/2018 / 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 αρχείο , γράφουμε τα εξής : 


 


   This is a sample page

 

 

   

Here is a heading!



   

Here is a regular paragraph.  Wow!



 

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

Τώρα όταν ξανατρέξουμε το 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 .

ΣΥΝΔΕΣΗ

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

ΠΑΝΩ