DevOps Sesión 11 (2022-03-16) Ansible

  • ./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
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)
  • 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
  • server: python > 2.6
  • clientes: python > 2.4
  • configurar autenticación basada en SSH-KEYGEN
  • variables globales que contienen información del sistema
  • ansible clientes -m setup | grep ansible_
  • 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
  • rangos [START:END]:
    • 192.168.[4:7].[0:255]
    • server[01:20].example.com
  • [all:vars]
  • [<GRUPO>:vars]
  • 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
  • ansible-doc <MODULO>
  • ansible-doc -s <MODULO>: sumarizado
  • 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
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
 
  • separados por puntos o comas
  • negar con !
  • AND (ha de pertener a todos los grupos indicados): &
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"
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"
  • se pueden indicar los parámetros en 1 línea o indentando en líneas separadas
  • info/cursos/pue/devops2022/s11.txt
  • Darrera modificació: 21/03/2022 10:23
  • per mate