Mostra la pàginaRevisions anteriorsQuè hi enllaçaExporta a PDFTorna dalt Aquesta pàgina és només de lectura. Podeu veure'n el codi font, però no podeu canviar-la. Consulteu el vostre administrador si penseu que això és degut a algun error. = DevOps Sesión 11 (2022-03-16) Ansible == Documentación relacionada <callout type="info" icon="true"> * ./4-Topic 704 Configuration Management * ./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.txt Darrera modificació: 21/03/2022 10:23per mate