DevOps Sesión 11 (2022-03-16) Ansible
Documentación relacionada
- ./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
Ansible
- ./Material Curso Ansible/DO407-AUTOMATION WITH ANSIBLE I.pdf
vagrant up vagrant ssh master-ansible su - ansible all -m ping
- 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
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)]
- /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
- 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 errores), se para la ejecución del playbook
.yaml
name: ... gather_facts: No # ignorar recogida de variables hosts: clientes # mirar patrones user: root
tasks: - name: Install Yum Instal copy: src: /etc/sudoers dest: /etc/sudoers.edit
patrones
- separados por puntos o comas
- negar con !
- AND (ha de pertener a todos los grupos indicados): &
lab
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"
- https://www.mkpasswd.net/index.php → crypt-sha512
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"
Módulos
- se pueden indicar los parámetros en 1 línea o indentando en líneas separadas