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
info:cursos:pue:devops2022:s11 [09/02/2022 09:21] mateinfo:cursos:pue:devops2022:s11 [21/03/2022 10:23] (actual) – [playbooks] mate
Línia 1: Línia 1:
-= DevOps Sesión 11 (2022-03-16)+= DevOps Sesión 11 (2022-03-16) Ansible
 == Documentación relacionada == Documentación relacionada
-== Clase +<callout type="info" icon="true"> 
-== TODO +  * ./4-Topic 704 Configuration Management 
-<callout type="info" icon="true"></callout>+  * ./Material Curso Ansible/DO407-AUTOMATION WITH ANSIBLE I.pdf 
 +  * ./Material Curso Ansible/Introduccion Ansible.txt 
 +  * ./Material Curso Ansible/Curso Ansible 2020.pdf 
 +</callout> 
 + 
 +== Ansible 
 +<callout type="info" icon="true"> 
 +  * ./Material Curso Ansible/DO407-AUTOMATION WITH ANSIBLE I.pdf 
 +  * [[https://docs.ansible.com/ansible/2.9/modules/list_of_all_modules.html]] 
 +</callout> 
 +<code bash> 
 +vagrant up 
 +vagrant ssh master-ansible 
 +su - 
 +ansible all -m ping 
 +</code> 
 +  * agentless 
 +  * no permite deshacer (deberías crear otro playbook para deshacer y hay errores que no se pueden deshacer) 
 +  * no instalación base 
 +  * no monitoriza cambios 
 +  * otras herramientas 
 +    * puppet 
 +    * chet 
 +    * ansible 
 +    * salt 
 +  * nodo control, hosts administrados 
 +    * nodo control: tiene ansible (solo Linux) 
 +    * gestión hosts fichero txt 
 +      * /etc/ansible/hosts 
 +    * gestión a través de ssh (claves público-privadas) 
 + 
 +=== defs 
 +  * Controller Machine: el equipo donde está instalado Ansible, es el responsable de ejecutar el aprovisionamiento en los servidores de destino 
 +  * Inventory: el fichero que contiene la información de los servidores que gestiona Ansible 
 +  * Playbook: el Sistema de aprovisionamiento de servidores, el cual está definido en un fichero con formato YAML 
 +  * Task: el bloque que define el procedimiento a realizar en el servidor de destino:modificar un fichero, instalar un paquete, etc… 
 +  * Module: es una capa abstracta de las tareas del Sistema, como crear o modidicar un fichero 
 +  * Role: es una forma de organizar nuestros PlayBooks para poder reusar código 
 +  * Play: es la ejecución de un aprovisionamiento, en pocas palabras: es lanza un PlayBook 
 +  * Facts: variables globales que contienen información del sistema 
 +  * Handlers: se usa para cambiar el estado de los servicios, como podría ser reiniciar, parar, etc un servicio 
 +<code bash>ansible --version 
 +  config file = /etc/ansible/ansible.cfg 
 +  configured module search path = [u'/root/.ansible/plugins/modules', u'/usr/share/ansible/plugins/modules'
 +  ansible python module location = /usr/lib/python2.7/site-packages/ansible 
 +  executable location = /bin/ansible 
 +  python version = 2.7.5 (default, Jun 20 2019, 20:27:34) [GCC 4.8.5 20150623 (Red Hat 4.8.5-36)] 
 +</code> 
 +  * **/etc/ansible/ansible.cfg** 
 +    * fichero configuración básica 
 +    * 4 módulos/secciones básicos 
 + 
 +=== install 
 +  * server: python > 2.6 
 +  * clientes: python > 2.4 
 +  * configurar autenticación basada en SSH-KEYGEN 
 + 
 +=== facts 
 +  * variables globales que contienen información del sistema 
 +  * ''ansible clientes -m setup | grep ansible_'' 
 + 
 +== inventory 
 +  * listado de hosts (estático) 
 +  * un host puede pertener a varios grupos (o no) 
 +  * recomendación crear inventarios por entornos 
 +  * dejar el inventario por defecto vacío (o dejar en blanco la variable de **ansible.cfg**) 
 +  * ''ansible -i /etc/ansible/desarrollo clientes -a "yum remove mc -y"'' 
 +    * cambio fichero inventario 
 +  * ''ansible all %%--%%list-hosts'' 
 +  * **[grupo:children]**: capacidad de añadir grupos al grupo 
 +  * variables sobre los hosts del inventario 
 +    * ansible_connection: tipo de conexión al host 
 +    * ansible_host: nombre del host, si es diferente del alias 
 +    * ansible_port: si no es el 22 
 +    * ansible_user:  
 +    * ansible_ssh_pass 
 +      * [[https://docs.ansible.com/ansible/2.3/playbooks_best_practices.html#best-practices-for-variables-and-vaults]] 
 +    * ansible_become: ansible_sudo, ansible_su, escalada de privilegios 
 +    * ansible_become_method 
 +    * ansible_become_user 
 +  * rangos [START:END]: 
 +    * 192.168.[4:7].[0:255] 
 +    * server[01:20].example.com 
 + 
 +=== variables 
 +  * **[all:vars]** 
 +  * **[<GRUPO>:vars]** 
 + 
 +== comandos 
 +=== adhoc 
 +  * comando adhoc (no módulo): ''ansible clientes -m command -a "yum remove mc -y"'' 
 +    * se puede obviar el **-m command** porque es comando por defecto 
 +=== help 
 +  * ''ansible-doc <MODULO>'' 
 +  * ''ansible-doc -s <MODULO>'': sumarizado 
 + 
 +== playbooks 
 +  * libro de jugadas 
 +  * nodos afectados 
 +  * lista de tareas 
 +  * formato YAML 
 +    * recomendable empezar con **---** y acabar con *...* el fichero (para debug errores) 
 +  * ''ansible-playbook'' 
 +    * ''%%--%%symtax-check'' 
 +    * ''%%--%%check'' 
 +    * ''%%--%%list-tasks'' 
 +    * ''%%--%%step'' 
 +    * ''%%--%%start-at-taks'' 
 +    * ''%%--%%verbose'' 
 +  * idempotencia: una tarea vuelta a ejecutar no la duplica, lo deja como está. 
 +  * Si se produce un error en una de las jugadas (a menos que se indique lo contrario **ignore_errors: True** [[https://docs.ansible.com/ansible/latest/user_guide/playbooks_error_handling.html|errores]]), se para la ejecución del playbook 
 +=== .yaml 
 +<code yaml> 
 +name: ... 
 +gather_facts: No # ignorar recogida de variables 
 +hosts: clientes  # mirar patrones 
 +user: root 
 +</code> 
 +<code yaml> 
 +tasks: 
 +  - name: Install Yum Instal 
 +      copy: 
 +        src: /etc/sudoers 
 +        dest: /etc/sudoers.edit 
 +       
 +</code> 
 + 
 +=== patrones 
 +  * separados por puntos o comas 
 +  * negar con **!** 
 +  * AND (ha de pertener a todos los grupos indicados): **&** 
 + 
 +=== lab 
 +<code bash> 
 +ansible --version 
 +ansible clientes -m setup | grep ansible_ 
 +ansible all --list-hosts 
 +ansible clientes -m ping 
 +ansible all -a "df -h /" 
 +ansible all -a "cat /etc/redhat-release" 
 +ansible --limit 192.168.33.12 all -a "cat /etc/redhat-release" 
 +ansible clientes -m yum -a "name=nginx state=present" 
 +ansible clientes -m yum -a "name=nginx state=absent" 
 +ansible clientes -s -m shell -a "tail /var/log/messages | grep ansible-command | wc -l" 
 +ansible clientes -m shell -a "tail /var/log/messages | grep ansible-command | wc -l" 
 +ansible all -m shell -a "rpm -qa | egrep 'vim-enhanced|wget|unzip|mc'" 
 +ansible clientes -v -a "id" 
 +ansible clientes -vv -a "id" 
 +ansible clientes -vvv -a "id" 
 +</code> 
 +  * [[https://www.mkpasswd.net/index.php]] -> crypt-sha512 
 +<code> 
 +ansible cliente12 -m user -a "name=miercoles16 password=`echo '$6$8fCcohUEdyTjoXDd$gbqpwJzxU08YS6nhZwy6zwFCncBgpTxNHClS.MSKYOR1eQ7N68vCHCENpNnK83KbTo9LFEbvtoZYqiPF9mcDh/'` update_password=always state=present" 
 +# asdasd 
 +ansible cliente12 -m shell -a "cat /etc/passwd | grep miercoles16" 
 +ansible cliente12 -m user -a "name=miercoles16 state=absent" 
 +</code> 
 + 
 +== Módulos 
 +  * se pueden indicar los parámetros en 1 línea o indentando en líneas separadas 
 +=== copy 
 +[[https://docs.ansible.com/ansible/2.9/modules/copy_module.html]] 
 + 
 +===lineinfile 
 +[[https://docs.ansible.com/ansible/2.9/modules/lineinfile_module.html]] 
 + 
 +== Extra 
 +  * [[https://www.mkpasswd.net/]] 
 +=== k8s 
 +  * [[https://k8syaml.com]] 
 +  * [[https://k3s.io/]] 
 +  * [[https://containerd.io/]] 
  • info/cursos/pue/devops2022/s11.1644427269.txt.gz
  • Darrera modificació: 09/02/2022 09:21
  • per mate