bytes.cat

La wiki d'FP d'informàtica

Eines de l'usuari

Eines del lloc


ansible

Diferències

Ací es mostren les diferències entre la revisió seleccionada i la versió actual de la pàgina.

Enllaç a la visualització de la comparació

Ambdós costats versió prèvia Revisió prèvia
Següent revisió
Revisió prèvia
ansible [2022/07/03 21:18]
clara_cabrera_meseguer
ansible [2022/07/03 22:28] (actual)
clara_cabrera_meseguer
Línia 1: Línia 1:
  ===== Ansible: eina d'orquestració  =====  ===== Ansible: eina d'orquestració  =====
  
-Sóc Clara Cabrera i faré documentació d'Ansible. +**Ansible** és un sistema d'orquestració **lliure**, escrit en ''Python'', que ens permet automatitzar la configuració d’una màquina d’una forma senzilla.
- +
- +
-Ansible és un sistema d'orquestració lliure, escrit en Python, que ens permet automatitzar la configuració d’una màquina d’una forma senzilla.+
  
 Ansible automatitza la gestió de sistemes remots i controla el seu estat desitjat.  Ansible automatitza la gestió de sistemes remots i controla el seu estat desitjat. 
 +{{:arquitectura_ansible.jpg?400|}}
  
 {{:red-hat-ansible-vector-logo.png?400|}} {{:red-hat-ansible-vector-logo.png?400|}}
Línia 26: Línia 23:
   * No té agents.   * No té agents.
    
-Un entorn ansible conté els següents components principals:+Un entorn ansible conté els següents **components principals**:
  
   * **Node de control**: un sistema en el que s'instal·la Ansible. És el que controla tota l’execució del Playbook. És qui realitza la connexió per SSH, executa els mòduls en les màquines i realitza la instal·lació.    * **Node de control**: un sistema en el que s'instal·la Ansible. És el que controla tota l’execució del Playbook. És qui realitza la connexió per SSH, executa els mòduls en les màquines i realitza la instal·lació. 
Línia 41: Línia 38:
   * Els diccionaris clau utilitzen l’estructura clau: valor.   * Els diccionaris clau utilitzen l’estructura clau: valor.
   * Els comentaris s’indiquen amb una almohadilla (#).   * Els comentaris s’indiquen amb una almohadilla (#).
-  * L’extensió dels fitxers YAML pot ser .yml o .yaml (recomanada).+  * L’extensió dels fitxers ''YAML'' pot ser **.yml** **.yaml** (recomanada).
  
  
Línia 73: Línia 70:
  
 També es poden utilitzar variables. Es pot consultar la [[https://docs.ansible.com/ansible/latest/user_guide/playbooks_variables.html|llista de variables]]. També es poden utilitzar variables. Es pot consultar la [[https://docs.ansible.com/ansible/latest/user_guide/playbooks_variables.html|llista de variables]].
- 
 \\ \\
 +
 ===  Modificadors del comando Ansible  === ===  Modificadors del comando Ansible  ===
  
-El comando Ansible té diversos arguments (modificadors) que li podem posar. Es pot consular la llista de modificadors per Ansible.+El comando ''Ansible'' té diversos **arguments** (modificadors) que li podem posar. Es pot consultar la [[https://docs.ansible.com/ansible/latest/cli/ansible.html|llista de modificadors]] per Ansible.
  
-L’estructura és:+**L’estructura** és:
  
-<code> **$ansible <nomservidor> <argument> <valorargument>** </code>+<code> $ansible <nomservidor> <argument> <valorargument> </code>
 <code>$ansible ansible1 --> el comando s’executaria en el servidor ansible1.  <code>$ansible ansible1 --> el comando s’executaria en el servidor ansible1. 
-$ansible all --> per executar el comando en tots els servidors del fitxer hosts </code> +$ansible all --> per executar el comando en tots els servidors del fitxer "hosts</code>
  
 Aquí us deixo una llista d’alguns **arguments** per Ansible. Aquí us deixo una llista d’alguns **arguments** per Ansible.
  
   * Argument  **-f**: per indicar el nombre de fils que utilitzarà Ansible.   * Argument  **-f**: per indicar el nombre de fils que utilitzarà Ansible.
-  * Argument  **-u** o **--user**: per indicar l’usuari que realitzarà el comando Ansible utilitzant ssh. +  * Argument  **-u** o **- -user**: per indicar l’usuari que realitzarà el comando Ansible utilitzant ssh. 
-  * Argument **-b** o **--become**: per indicar que el comando s’executarà en permisos de superusuari (root), però no demanarà contrasenya. +  * Argument **-b** o **- -become**: per indicar que el comando s’executarà en permisos de superusuari (root), però no demanarà contrasenya. 
-  * Argument **-k** o **--ask-become-pass**: per indicar que el comando s’executarà en permisos de superusuari (root), però dmanarà contrasenya de superusuari. +  * Argument **-k** o **- -ask-become-pass**: per indicar que el comando s’executarà en permisos de superusuari (root), però dmanarà contrasenya de superusuari. 
-  * Argument **-m** o **--module-name** i **-a**: +  * Argument **-m** o **- -module-name** i **-a**: 
     * Si no s’especifica aquest argument s’utilitza el mòdul [[https://docs.ansible.com/ansible/latest/collections/ansible/builtin/command_module.html|command]] per defecte.      * Si no s’especifica aquest argument s’utilitza el mòdul [[https://docs.ansible.com/ansible/latest/collections/ansible/builtin/command_module.html|command]] per defecte. 
     * Si es vol utlitzar el shell i poder utilitzar les variables d’entorn s’ha d'especificar:      * Si es vol utlitzar el shell i poder utilitzar les variables d’entorn s’ha d'especificar: 
Línia 103: Línia 99:
       <code> $ ansible ansible1 -a “free -m” --> es posa entre cometes perquè porta més d’un argument. </code>       <code> $ ansible ansible1 -a “free -m” --> es posa entre cometes perquè porta més d’un argument. </code>
  
-Alguns dels mòduls per utilitzar són:+Alguns dels **mòduls** per utilitzar són:
  
   * **apt**: per la gestió de paquets ''.deb'' des de la línia de comandos.   * **apt**: per la gestió de paquets ''.deb'' des de la línia de comandos.
Línia 124: Línia 120:
 $ ansible ansible1 -m cron -a "name='exemple' weekday=2 hour=4 minute=0 job='/script.sh'" </code> $ ansible ansible1 -m cron -a "name='exemple' weekday=2 hour=4 minute=0 job='/script.sh'" </code>
   * **setup**: per veure totes les dades tècniques dels servidors. També es pot utilitzar el modificador ''-a'' per fer filtratges:   * **setup**: per veure totes les dades tècniques dels servidors. També es pot utilitzar el modificador ''-a'' per fer filtratges:
-<code>$ansible ansible1 -m setup+<code>$ ansible ansible1 -m setup
 $ ansible ansible1 -m setup -a “filter=*ipv4” </code> $ ansible ansible1 -m setup -a “filter=*ipv4” </code>
  
 +\\
  
 +----
  
 +==== Instal·lació d’Ansible  ====
  
 +Per fer la **instal·lació** es pot seguir el manual oficial d’Ansible. En cas de tenir el sistema operatiu ''Ubuntu'' seria:
  
 +<code> 
 +# apt update
 +# apt install software-properties-common
 +# add-apt-repository --yes --update ppa:ansible/ansible
 +# apt-get install ansible
 +</code>
 +
 +Si es vol tenir l’última versió es pot baixar de pypi (pip install ansible). S’ha de tenir en compte que s’ha de tenir instal·lat abans ''python'' i ''ssh''.
 +
 +Una vegada s’ha realitzat la instal·lació cal configurar el fitxer //Playbook//, en aquest exemple seria **playbook1.yaml**.
 +
 +=== Estructura del Playbook1.yaml ===
 +
 +L’estructura bàsica d’un //Playbook// és:
 +<code>
 +--
 +- hosts: ansible1
 +  become: yes
 +  tasks:
 +  - name: Install Apache
 +    apt: name=apache2 state=latest
 +  - name: Check Apache is running & start on boot
 +    service: name=apache2 state=started enabled=yes
 +...
 +
 +</code>
 +
 +En aquest cas seria un **exemple** de //**Playbook**// per instal·lar l’''Apache''. Es pot observar que el fitxer comença amb 2 guions (- -) i acaba amb 3 punts (...).
 +
 +  * Primer es posen els //**hosts**//, que són els servidors del nostre inventari, indicats com es vulgui.
 +  * Opcionalment, però en aquest cas obligatori ja que es faran canvis en el sistema i es necessiten permisos de superusuari, es posa ''become: yes''. Seria equivalent al ''-b'' en els comandos AD-HOC. Si no es necessiten els permisos de superusuari no cal posar-lo. 
 +  * Es posen les tasques (tasks), una o diverses. 
 +  * Cada **tasca** s'inicia, encara que és opcional, amb un **nom** (name). Serveix només per a identificar la tasca. 
 +  * Després es posa el //**mòdul**// d’Ansible a utilitzar. En la mateixa línia del //mòdul// es posen els seus paràmetres i es configura igual que un comando AD-HOC.
 +  * //**Tenir en compte**//:
 +    * Es recomana **crear un directori** on guardar els //**playbooks**// o utilitzar un repositori ''GIT''.
 +    * Les tasques s'executen per ordre.
 +    * Es pot utilitzar qualsevol **editor**, tant un IDE tipus Visual Studio Code, com en la terminal amb un editor de text tipus ''NANO'' o ''VIM''.
 +    * El nom de l'arxiu no ha de seguir cap format. Pot ser a gust.
 +    * Els ''name'' de cada tasca pot estar en qualsevol idioma mentre segueixi UTF-8 o 16.
 +    * Dintre d'un mateix //Playbook// es poden **crear** diferents **grups de tasques** per a diferents servidors. Només cal escriure una altra vegada ''- hosts: etc'' ja que a l'ésser una llista podem continuar afegint.
 +    * Es pot **definir l'usuari** que executarà tot el //playbook// o una tasca afegint ''remote_user: nom''.
 +    * Per a **executar** el //playbook// que hem escrit prèviament utilitzarem un nou comando d'Ansible: 
 +<code>$ ansible-playbook playbook1.yaml </code>
 +
 +<WRAP center round info 100%>
 +Dintre dels //**Playbooks**// es poden **definir**:
 +
 +  * **Handlers**: tasques que s’executaran només quan se’ls faci la trucada.
 +  * **Include**: és semblant a una llibreria en qualsevol llenguatge de programació.
 +  * **Rol**: paquets d’aplicacions predefinides.
 +  * **Pre_tasks**: tasques que s’executen abans que la resta.
 +  * **Template**: aquest mòdul és semblant al COPY dels comandos AD-HOC, però el ''template'' va a buscar l'arxiu que se li indica en la ruta ''template''.
 +      <code> - name: template file to remote host
 +       template:
 +         src: archivo-config.j2
 +         dest: /tmp/archivo-config
 +</code>
 +</WRAP>
 +
 +\\
 +
 +
 +<WRAP center round todo 100%>
 +Et proposo realitzar les **activitats** següents:
 +
 +**Activitat 1**: Instal·la Ansible en el teu node controlador i crea un Playbook per realitzar tasques de manteniment i control dels teus servidors.
 +
 +**Activitat 2**: Configura el crontab del servidor Ansible per llançar tots els Playbooks diàriament. 
 +
 +
 +</WRAP>
 +
 +\\
 +
 +----
 +
 +
 +==== Vagrant amb Ansible ====
 +
 +Molts projectes necessiten d'un **entorn d'integració** contínua en el qual es pot veure i detectar les fallades de manera ràpida, sense arribar a l'entorn de producció. Doncs, gràcies a la combinació de [[vagrant|Vagrant]] i **Ansible** pots desplegar de manera senzilla un entorn d'integració contínua.
 +{{:ansible-vagrant.png?400|}}
 +
 +Si et preguntes què pots fer amb ''Vagrant'' i ''Ansible'', aquí et deixo una pinzellada:
 +
 +<WRAP center round tip 100%>
 +  * Aixecar les màquines virtuals
 +  * Configurar la xarxa
 +  * Realitzar les actualitzacions de programari
 +  * Instal·lar els paquets del programari que s'utilitzarà
 +  * Copiar els fitxers de configuració de plantilles prèviament creades
 +  * Aixecar o parar els serveis que es determinin
 +  * Executar qualsevol tasca en cadascuna de les màquines virtuals
 +  * Deixar l'entorn completament operatiu
 +
 +</WRAP>
 +  
 +Per a **executar** ''Ansible'' contra ''Vagrant'', la configuració bàsica de ''Vagrantfile'' seria:
 +
 +<code>Vagrant.configure("2") do |config|
 +
 +  #
 +  # Executa Ansible des de Vagrant Host
 +  #
 +  config.vm.provision "ansible" do |ansible|
 +    ansible.playbook = "playbook1.yml"
 +  end
 +
 +end
 +
 +</code>
 +
 +
 +<WRAP center round todo 100%>
 +
 +Et proposo fer la següent **activitat**:
 +
 +**Activitat 3**: Crear un entorn d’integració amb Vagrant i Ansible, per realitzar el manteniment i control dels teus servidors.
 +
 +</WRAP>
 +
 +\\
 + --- //[[[email protected]|CLARA CABRERA MESEGUER]] 2022/07/03 22:25//
ansible.1656883087.txt.gz · Darrera modificació: 2022/07/03 21:18 per clara_cabrera_meseguer