Unidad 1: ¿Qué tengo que saber?
Usa esta lista para repasar la unidad. Ve marcando lo que ya dominas: se guarda en tu navegador, así que lo verás marcado cuando vuelvas desde el mismo equipo. Si no puedes marcar algún punto, vuelve a la presentación o a la tarea correspondiente.
Infraestructura como código
- Sé explicar qué es la infraestructura como código y qué ventajas tiene frente a configurar los servidores a mano (reproducible, versionada en Git, auditable).
- ¿Sé diferenciar el software de orquestación (OpenTofu) del de gestión de la configuración (Ansible), y en qué orden se usan?
- Sé explicar qué significa el enfoque declarativo: se describe el estado deseado, no los pasos para llegar a él.
- Sé explicar qué relación tiene la infraestructura como código con DevOps.
Ansible: conceptos e instalación
- Sé explicar qué necesita un nodo gestionado para que Ansible lo configure (SSH y Python) y por qué no hace falta instalar ningún agente.
- ¿Sé diferenciar el nodo de control de los nodos gestionados?
- Sé instalar Ansible con
apto conpipen un entorno virtual.
Inventario y configuración
- Sé escribir un inventario con grupos y los datos de conexión de cada nodo (IP, usuario, clave privada).
- Identifico para qué sirve
ansible.cfgy qué haceninventoryyhost_key_checking. - Sé comprobar la conectividad con
ansible all -m pingy explicar qué comprueba (no es un ping ICMP).
Módulos y comandos ad-hoc
- Sé ejecutar un módulo con un comando ad-hoc (
ansible <hosts> -m <módulo> -a "<parámetros>") y cuándo hace falta--become. - Identifico para qué sirven los módulos básicos:
command/shell,copy,apt,service,fileyuser. - ¿Sé diferenciar
commanddeshell, y por qué conviene usar un módulo antes queshell?
Playbooks e idempotencia
- ¿Sé diferenciar un play de un playbook?
- Sé escribir un playbook con
hosts,becomey una lista de tareas. - Sé explicar qué es la idempotencia y comprobarla: la segunda ejecución termina con
changed=0. - Sé reconocer una tarea que no es idempotente (por ejemplo, un
shellcon>>) y corregirla con el módulo adecuado (lineinfile,template,copy). - Sé leer la salida de un playbook:
ok,changed,failed,skippingy elPLAY RECAP.
Variables, facts y plantillas
- ¿Sé diferenciar las variables de nodo (inventario), de grupo (
group_vars) y los facts? - Sé consultar los facts de un nodo con el módulo
setupy usarlos en una tarea o una plantilla. - ¿Sé diferenciar
copydetemplate? - Sé escribir una plantilla Jinja2 con variables, condicionales y bucles.
- Sé recorrer una lista con
loopy usar{{ item }}.
Roles y handlers
- Sé explicar para qué sirve organizar un proyecto en roles y qué contiene cada directorio de un rol (
tasks,handlers,templates,files,defaults). - Sé asignar en
site.yamlun rol a cada grupo de hosts, y uno común aall. - Sé explicar qué es un handler, cuándo se ejecuta y por qué se usa para reiniciar un servicio en lugar de una tarea normal.
- Sé modificar una línea de un fichero de configuración con
lineinfile. - Sé instalar y usar una colección (
community.mysql) para crear una base de datos y un usuario.
OpenTofu: conceptos
- Sé explicar por qué usamos OpenTofu y no Terraform.
- Identifico los cuatro elementos de la configuración: provider, resource, variable y output.
- Sé explicar qué es un provider y que el lenguaje (HCL) es el mismo con cualquier plataforma.
- Identifico los ficheros de un proyecto: los que escribo yo (
provider.tf,variables.tf,main.tf,network.tf,output.tf,cloud-init/) y los que genera OpenTofu (terraform.tfstate,.terraform/,.terraform.lock.hcl). - Sé explicar cómo deduce OpenTofu el orden en que crea los recursos (las referencias entre ellos).
Estado, plan y ciclo de vida
- Sé usar el flujo de trabajo:
tofu init,plan,apply,outputydestroy. - Sé explicar qué guarda
terraform.tfstatey qué pasa si se pierde. - Sé explicar qué compara
tofu plan(el código, el estado y la realidad) y por qué conviene revisarlo antes de aplicar. - ¿Sé diferenciar en un
planun cambio en el sitio (~), un reemplazo (-/+) y una creación (+)? - Sé explicar por qué cambiar la imagen base recrea también la máquina, aunque no se toque el recurso
libvirt_domain. - Sé explicar qué hace OpenTofu si un recurso se ha borrado a mano (drift).
OpenTofu con libvirt
- Sé preparar las imágenes cloud en el pool y explicar por qué hace falta
virsh pool-refresh default. - Sé explicar qué es un clon ligero (
base_volume_name) y crear un disco adicional. - Sé explicar qué hace cloud-init, qué va en
user-datay qué ennetwork-config, y cuándo se aplica. - Sé configurar en
user-datael usuario con mi clave pública. - ¿Sé diferenciar una red NAT, una aislada y una muy aislada, y si el anfitrión tiene IP en cada una?
- ¿Sé diferenciar
network_namedenetwork_id, y cuándo se usawait_for_lease? - Sé explicar por qué conectar una máquina a una red no basta para que tenga IP en ella (hay que configurar la interfaz en
network-config). - Sé explicar por qué el
outputsolo puede leer del dominio las IP que da el DHCP, y por qué las estáticas se escriben a mano.
De OpenTofu a Ansible
- Sé generar el inventario de Ansible desde OpenTofu con
local_fileytemplatefile. - Sé acceder a una máquina que solo está en una red interna saltando por otra (
ssh -A,ProxyJump).
Comprobar y razonar lo que pasa
- Sé crear un escenario con varias máquinas y redes, configurarlo con Ansible y comprobar que funciona.
- Sé destruir el escenario y volver a crearlo, y explicar por qué hay que destruirlo antes de crear otro con redes del mismo rango.
- Sé encontrar la causa de los problemas habituales: el pool sin refrescar, una red que ya existe, la clave SSH, cloud-init sin salida a internet o una interfaz sin configurar.