Merge pull request #426 from manuelver/feature/translateES-16

This commit is contained in:
Michael Cade 2023-06-14 09:14:00 +01:00 committed by GitHub
commit 7fb35d9850
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
3 changed files with 149 additions and 144 deletions

View File

@ -1,96 +1,100 @@
## The Big Picture: Configuration Management
## El panorama general: Gestión de la configuración
Coming straight off the back of the section covering Infrastructure as Code, there is likely going to be some crossover as we talk about Configuration Management or Application Configuration Management.
Continuando directamente desde la sección que cubre la Infraestructura como Código, es probable que haya cierta superposición al hablar de la Gestión de la Configuración o la Gestión de la Configuración de Aplicaciones.
Configuration Management is the process of maintaining applications, systems and servers in the desired state. The overlap with Infrastructure as code is that IaC is going to make sure your infrastructure is at the desired state but after that especially terraform is not going to look after the desired state of your OS settings or Application and that is where Configuration Management tools come in. Make sure that the system and applications perform the way it is expected as changes occur over Deane.
La Gestión de la Configuración es el proceso de mantener las aplicaciones, sistemas y servidores en el estado deseado. La superposición con la Infraestructura como Código es que IaC se asegurará de que tu infraestructura esté en el estado deseado, pero después de eso, especialmente Terraform, no se encargará del estado deseado de la configuración de tu sistema operativo o aplicación, y ahí es donde entran en juego las herramientas de Gestión de la Configuración. Aseguran que el sistema y las aplicaciones funcionen como se espera a medida que se producen cambios con el tiempo.
Configuration management keeps you from making small or large changes that go undocumented.
La gestión de la configuración te evita realizar cambios pequeños o grandes que no estén documentados.
### Scenario: Why would you want to use Configuration Management
### Escenario: ¿Por qué querrías usar la Gestión de la Configuración?
The scenario or why you'd want to use Configuration Management, meet Dean he's our system administrator and Dean is a happy camper pretty and
working on all of the systems in his environment.
El escenario o por qué querrías usar la Gestión de la Configuración. Conoce a Dean, nuestro administrador del sistema, y Dean es un feliz y competente trabajador que se ocupa de todos los sistemas en su entorno.
What happens if their system fails, if there's a fire, a server goes down well? Dean knows exactly what to do he can fix that fire easily the problems become difficult for Dean however if multiple servers start failing particularly when you have large and expanding environments, this is why Dean needs to have a configuration management tool. Configuration Management tools can help make Dean look like a rockstar, all he has to do is configure the right codes that allow him to push out the instructions on how to set up each of the servers quickly effectively and at scale.
¿Qué sucede si su sistema falla, si hay un incendio, si un servidor se cae? Dean sabe exactamente qué hacer, puede solucionar ese problema fácilmente. Sin embargo, los problemas se vuelven difíciles para Dean cuando varios servidores comienzan a fallar, especialmente cuando tienes entornos grandes y en expansión. Por eso Dean necesita tener una herramienta de gestión de la configuración. Las herramientas de Gestión de la Configuración pueden ayudar a que Dean parezca un experto, todo lo que tiene que hacer es configurar los códigos correctos que le permitan enviar las instrucciones sobre cómo configurar cada uno de los servidores rápida y efectivamente, y a gran escala.
### Configuration Management tools
### Herramientas de Gestión de la Configuración
There are a variety of configuration management tools available, and each has specific features that make it better for some situations than others.
Existen diversas herramientas de gestión de la configuración disponibles, y cada una tiene características específicas que la hacen más adecuada para algunas situaciones que otras.
![](Images/Day63_config1.png)
At this stage, we will take a quickfire look at the options in the above picture before making our choice on which one we will use and why.
En esta etapa, echaremos un vistazo rápido a las opciones en la imagen anterior antes de tomar nuestra decisión sobre cuál utilizaremos y por qué.
- **Chef**
- Chef ensures configuration is applied consistently in every environment, at any scale with infrastructure automation.
- Chef is an open-source tool developed by OpsCode written in Ruby and Erlang.
- Chef is best suited for organisations that have a heterogeneous infrastructure and are looking for mature solutions.
- Recipes and Cookbooks determine the configuration code for your systems.
- Pro - A large collection of recipes is available
- Pro - Integrates well with Git which provides a strong version control
- Con - Steep learning curve, a considerable amount of time required.
- Con - The main server doesn't have much control.
- Architecture - Server / Clients
- Ease of setup - Moderate
- Language - Procedural - Specify how to do a task
- Chef se asegura de que la configuración se aplique de manera consistente en cada entorno, a cualquier escala, con automatización de infraestructura.
- Chef es una herramienta de código abierto desarrollada por OpsCode escrita en Ruby y Erlang.
- Chef es más adecuado para organizaciones que tienen una infraestructura heterogénea y buscan soluciones maduras.
- Las recetas y libros de cocina determinan el código de configuración para tus sistemas.
- Ventajas: hay una amplia colección de recetas disponible.
- Ventajas: se integra bien con Git, lo que proporciona un sólido control de versiones.
- Desventajas: tiene una curva de aprendizaje pronunciada, se requiere una cantidad considerable de tiempo.
- Desventajas: el servidor principal no tiene mucho control.
- Arquitectura: Servidor / Clientes
- Facilidad de configuración: Moderada
- Lenguaje: Procedimental: especifica cómo hacer una tarea
- **Puppet**
- Puppet is a configuration management tool that supports automatic deployment.
- Puppet is built in Ruby and uses DSL for writing manifests.
- Puppet also works well with heterogeneous infrastructure where the focus is on scalability.
- Pro - Large community for support.
- Pro - Well-developed reporting mechanism.
- Con - Advance tasks require knowledge of the Ruby language.
- Con - The main server doesn't have much control.
- Architecture - Server / Clients
- Ease of setup - Moderate
- Language - Declarative - Specify only what to do
- Puppet es una herramienta de gestión de configuración que admite implementación automática.
- Puppet está construido en Ruby y utiliza un DSL para escribir manifiestos.
- Puppet también funciona bien con infraestructuras heterogéneas donde el enfoque se centra en la escalabilidad.
- Ventajas: gran comunidad de soporte.
- Ventajas: mecanismo de informes bien desarrollado.
- Desventajas: las tareas avanzadas requieren conocimientos del lenguaje Ruby.
- Desventajas: el servidor principal no tiene mucho control.
- Arquitectura: Servidor / Clientes
- Facilidad de configuración: Moderada
- Lenguaje: Declarativo: especifica solo qué hacer
- **Ansible**
- Ansible is an IT automation tool that automates configuration management, cloud provisioning, deployment and orchestration.
- The core of Ansible playbooks is written in YAML. (Should do a section on YAML as we have seen this a few times)
- Ansible works well when there are environments that focus on getting things up and running fast.
- Works on playbooks which provide instructions to your servers.
- Pro - No agents are needed on remote nodes.
- Pro - YAML is easy to learn.
- Con - Performance speed is often less than other tools (Faster than Dean doing it himself manually)
- Con - YAML is not as powerful as Ruby but has less of a learning curve.
- Architecture - Client Only
- Ease of setup - Very Easy
- Language - Procedural - Specify how to do a task
- Ansible es una herramienta de automatización de TI que automatiza la gestión de la configuración, la provisión en la nube, la implementación y la orquestación.
- El núcleo de los libros de jugadas de Ansible está escrito en YAML. (Deberíamos hacer una sección sobre YAML, ya que lo hemos visto varias veces).
- Ansible funciona bien cuando hay entornos que se centran en poner las cosas en marcha rápidamente.
- Trabaja con libros de jugadas que proporcionan instrucciones a tus servidores.
- Ventajas: no se necesitan agentes en los nodos remotos.
- Ventajas: YAML es fácil de aprender.
- Desventajas: la velocidad de rendimiento suele ser menor que la de otras herramientas (más rápido que hacerlo manualmente Dean).
- Desventajas: YAML no es tan poderoso como Ruby, pero tiene una curva de aprendizaje menor.
- Arquitectura: Solo cliente
- Facilidad de configuración: Muy fácil
- Lenguaje: Procedimental: especifica cómo hacer una tarea
- **SaltStack**
- SaltStack is a CLI-based tool that automates configuration management and remote execution.
- SaltStack is Python based whilst the instructions are written in YAML or its DSL.
- Perfect for environments with scalability and resilience as the priority.
- Pro - Easy to use when up and running
- Pro - Good reporting mechanism
- Con - The setup phase is tough
- Con - New web UI which is much less developed than the others.
- Architecture - Server / Clients
- Ease of setup - Moderate
- Language - Declarative - Specify only what to do
- SaltStack es una herramienta basada en CLI que automatiza la gestión de la configuración y la ejecución remota.
- SaltStack está basado en Python, mientras que las instrucciones se escriben en YAML o su DSL.
- Perfecto para entornos con prioridad en la escalabilidad y la resiliencia.
- Ventajas: fácil de usar una vez que está en funcionamiento.
- Ventajas: buen mecanismo de informes.
- Desventajas: la fase de configuración es difícil.
- Desventajas: nueva interfaz web menos desarrollada que las demás.
- Arquitectura: Servidor / Clientes
- Facilidad de configuración: Moderada
- Lenguaje: Declarativo: especifica solo qué hacer
### Ansible vs Terraform
The tool that we will be using for this section is going to be Ansible. (Easy to use and easier language basics required.)
La herramienta que utilizaremos para esta sección será Ansible (fácil de usar y requiere nociones básicas del lenguaje).
I think it is important to touch on some of the differences between Ansible and Terraform before we look into the tooling a little further.
Creo que es importante mencionar algunas diferencias entre Ansible y Terraform antes de adentrarnos un poco más en las herramientas.
| | Ansible | Terraform |
| -------------- | ------------------------------------------------------------ | ---------------------------------------------------------------- |
| Type | Ansible is a configuration management tool | Terraform is an orchestration tool |
| Infrastructure | Ansible provides support for mutable infrastructure | Terraform provides support for immutable infrastructure |
| Language | Ansible follows procedural language | Terraform follows a declarative language |
| Provisioning | Ansible provides partial provisioning (VM, Network, Storage) | Terraform provides extensive provisioning (VM, Network, Storage) |
| Packaging | Ansible provides complete support for packaging & templating | Terraform provides partial support for packaging & templating |
| Lifecycle Mgmt | Ansible does not have lifecycle management | Terraform is heavily dependent on lifecycle and state mgmt |
| | Ansible | Terraform |
| ---------------- | ----------------------------------------------------------------------- | --------------------------------------------------------------------------- |
| Tipo | Ansible es una herramienta de gestión de configuración | Terraform es una herramienta de orquestación |
| Infraestructura | Ansible admite infraestructura mutable | Terraform admite infraestructura inmutable |
| Lenguaje | Ansible sigue un lenguaje procedural | Terraform sigue un lenguaje declarativo |
| Provisionamiento | Ansible proporciona aprovisionamiento parcial (VM, red, almacenamiento) | Terraform proporciona un amplio aprovisionamiento (VM, red, almacenamiento) |
| Empaquetado | Ansible ofrece soporte completo para empaquetado y plantillas | Terraform ofrece soporte parcial para empaquetado y plantillas |
| Ciclo de vida | Ansible no tiene gestión del ciclo de vida | Terraform depende en gran medida del ciclo de vida y la gestión del estado |
## Resources
## Recursos
- [What is Ansible](https://www.youtube.com/watch?v=1id6ERvfozo)
- [Ansible 101 - Episode 1 - Introduction to Ansible](https://www.youtube.com/watch?v=goclfp6a2IQ)
- [NetworkChuck - You need to learn Ansible right now!](https://www.youtube.com/watch?v=5hycyr-8EKs&t=955s)
- [Chef vs Puppet vs Ansible vs Saltstack](https://vergaracarmona.es/chef-vs-puppet-vs-ansible-vs-saltstack/)
See you on [Day 64](day64.md)
Nos vemos en el [Día 64](day64.md)

View File

@ -1,16 +1,16 @@
## Ansible: Getting Started
## Ansible: Introducción
We covered a little about what Ansible is in the [big picture session yesterday](day63.md) But we are going to get started with a little more information on top of that here. Firstly Ansible comes from RedHat. Secondly, it is agentless, connects via SSH and runs commands. Thirdly it is cross-platform (Linux & macOS, WSL2) and open-source (there is also a paid-for enterprise option) Ansible pushes configuration vs other models.
Ayer cubrimos un poco sobre qué es Ansible en la sesión de la imagen general puedes verla en en el [día 63](day63.md), pero ahora vamos a comenzar con un poco más de información sobre eso. En primer lugar, Ansible proviene de RedHat. En segundo lugar, es sin agente, se conecta a través de SSH y ejecuta comandos. En tercer lugar, es multiplataforma (Linux y macOS, WSL2) y de código abierto (también existe una opción empresarial de pago). Ansible aplica configuraciones en comparación con otros modelos.
### Ansible Installation
### Instalación de Ansible
As you might imagine, RedHat and the Ansible team have done a fantastic job of documenting Ansible. This generally starts with the installation steps which you can find [here](https://docs.ansible.com/ansible/latest/installation_guide/intro_installation.html) Remember we said that Ansible is an agentless automation tool, the tool is deployed to a system referred to as a "Control Node" from this control node is manages machines and other devices (possibly network) over SSH.
Como puedes imaginar, RedHat y el equipo de Ansible han hecho un trabajo fantástico documentando Ansible. Esto comienza generalmente con los pasos de instalación, que puedes encontrar [aquí](https://docs.ansible.com/ansible/latest/installation_guide/intro_installation.html). Recuerda que dijimos que Ansible es una herramienta de automatización sin agente y que la herramienta se implementa en un sistema denominado "Nodo de Control". Desde este nodo de control, se administran máquinas y otros dispositivos (posiblemente de red) a través de SSH.
It does state in the above-linked documentation that the Windows OS cannot be used as the control node.
En la documentación vinculada anteriormente, se menciona que el sistema operativo Windows no puede utilizarse como nodo de control.
For my control node and at least this demo, I am going to use the Linux VM we created way back in the [Linux section](day20.md) as my control node.
Para mi nodo de control y al menos para esta demostración, voy a utilizar la máquina virtual de Linux que creamos en la [sección de Linux](day20.md) como mi nodo de control.
This system was running Ubuntu and the installation steps simply need the following commands.
Este sistema ejecutaba Ubuntu y los pasos de instalación simplemente requieren los siguientes comandos.
```Shell
sudo apt update
@ -19,59 +19,60 @@ sudo add-apt-repository --yes --update ppa:ansible/ansible
sudo apt install ansible
```
Now we should have ansible installed on our control node, you can check this by running `ansible --version` and you should see something similar to this below.
Ahora deberíamos tener Ansible instalado en nuestro nodo de control. Puedes verificar esto ejecutando `ansible --version` y deberías ver algo similar a esto a continuación.
![](Images/Day64_config1.png)
Before we then start to look at controlling other nodes in our environment, we can also check the functionality of ansible by running a command against our local machine `ansible localhost -m ping` will use an [Ansible Module](https://docs.ansible.com/ansible/2.9/user_guide/modules_intro.html) and this is a quick way to perform a single task across many different systems. I mean it is not much fun with just the local host but imagines you wanted to get something or make sure all your systems were up and you had 1000+ servers and devices.
Antes de comenzar a controlar otros nodos en nuestro entorno, también podemos verificar la funcionalidad de Ansible ejecutando un comando contra nuestra máquina local. `ansible localhost -m ping` utilizará un [Ansible Module](https://docs.ansible.com/ansible/2.9/user_guide/modules_intro.html) , que es una forma rápida de realizar una tarea única en muchos sistemas diferentes. No es muy divertido con solo el host local, pero imagina que quisieras obtener algo o asegurarte de que todos tus sistemas estén funcionando y tienes más de 1000 servidores y dispositivos.
![](Images/Day64_config2.png)
Or an actual real-life use for a module might be something like `ansible webservers --m service -a "name=httpd state=started"` this will tell us if all of our webservers have the httpd service running. I have glossed over the webservers term used in that command.
Un caso de uso real para un módulo podría ser algo como ansible webservers --m service -a "name=httpd state=started". Esto nos dirá si todos nuestros servidores web tienen el servicio httpd en ejecución. He pasado por alto el término "webservers" utilizado en ese comando.
### hosts
The way I used localhost above to run a simple ping module against the system, I cannot specify another machine on my network, for example in the environment I am using my Windows host where VirtualBox is running has a network adapter with the IP 10.0.0.1 but you can see below that I can reach by pinging but I cannot use ansible to perform that task.
De la misma manera en que usé "localhost" anteriormente para ejecutar un módulo simple de ping en el sistema, no puedo especificar otra máquina en mi red. Por ejemplo, en el entorno que estoy usando, mi host de Windows donde se ejecuta VirtualBox tiene un adaptador de red con la dirección IP `10.0.0.1`, como se muestra a continuación, puedo hacer ping a esa dirección, pero no puedo usar Ansible para realizar esa tarea.
![](Images/Day64_config3.png)
For us to specify our hosts or the nodes that we want to automate with these tasks, we need to define them. We can define them by navigating to the /etc/ansible directory on your system.
Para especificar nuestros hosts o los nodos que queremos automatizar con estas tareas, necesitamos definirlos. Podemos hacerlo navegando hasta el directorio `/etc/ansible` en tu sistema.
![](Images/Day64_config4.png)
The file we want to edit is the host's file, using a text editor we can jump in and define our hosts. The host file contains lots of great instructions on how to use and modify the file. We want to scroll down to the bottom and we are going to create a new group called [windows] and we are going to add our `10.0.0.1` IP address for that host. Save the file.
El archivo que queremos editar es el archivo "hosts". Con un editor de texto, podemos abrirlo y definir nuestros hosts. El archivo hosts contiene muchas instrucciones útiles sobre cómo usar y modificar el archivo. Queremos desplazarnos hasta la parte inferior y crear un nuevo grupo llamado "windows" y agregar nuestra dirección IP `10.0.0.1` para ese host. Guarda el archivo.
![](Images/Day64_config5.png)
However, remember I said you will need to have SSH available to enable Ansible to connect to your system. As you can see below when I run `ansible windows -m ping` we get an unreachable because things failed to connect via SSH.
Sin embargo, recuerda que necesitarás tener SSH disponible para permitir que Ansible se conecte a tu sistema. Como se puede ver a continuación, cuando ejecuto `ansible windows -m ping`, obtenemos un mensaje "unreachable" porque no se pudo establecer la conexión a través de SSH.
![](Images/Day64_config6.png)
I have now also started adding some additional hosts to our inventory, another name for this file as this is where you are going to define all of your devices, could be network devices, switches and routers for example also would be added here and grouped. In our hosts file though I have also added my credentials for accessing the Linux group of systems.
También he comenzado a agregar algunos hosts adicionales a nuestro inventario, que es otro nombre para este archivo, ya que aquí es donde vas a definir todos tus dispositivos, que podrían ser dispositivos de red, switches y enrutadores, por ejemplo, y se agruparían aquí. En nuestro archivo hosts, también he agregado mis credenciales para acceder al grupo de sistemas Linux.
![](Images/Day64_config7.png)
Now if we run `ansible Linux -m ping` we get success as per below.
Ahora, si ejecutamos `ansible Linux -m ping`, obtendremos un éxito, como se muestra a continuación.
![](Images/Day64_config8.png)
We then have the node requirements, these are the target systems you wish to automate the configuration on. We are not installing anything for Ansible on these (I mean we might be installing software but there is no client from Ansible we need) Ansible will make a connection over SSH and send anything over SFTP. (If you so desire though and you have SSH configured you could use SCP vs SFTP.)
Luego, tenemos los requisitos de los nodos, que son los sistemas de destino en los que deseas automatizar la configuración. No estamos instalando nada de Ansible en estos sistemas (es decir, es posible que estemos instalando software, pero no necesitamos un cliente de Ansible). Ansible establecerá una conexión a través de SSH y enviará archivos a través de SFTP (si así lo deseas y tienes SSH configurado, también podrías usar SCP en lugar de SFTP).
### Ansible Commands
### Comandos de Ansible
You saw that we were able to run `ansible Linux -m ping` against our Linux machine and get a response, basically, with Ansible we can run many ad-hoc commands. But you can run this against a group of systems and get that information back. [ad hoc commands](https://docs.ansible.com/ansible/latest/user_guide/intro_adhoc.html)
Viste que pudimos ejecutar ansible Linux -m ping en nuestra máquina Linux y obtener una respuesta. Básicamente, con Ansible, podemos ejecutar muchos comandos ad-hoc. Pero puedes ejecutarlos en un grupo de sistemas y obtener esa información de vuelta. [Comandos ad-hoc](https://docs.ansible.com/ansible/latest/user_guide/intro_adhoc.html)
If you find yourself repeating commands or even worse you are having to log into individual systems to run these commands then Ansible can help there. For example, the simple command below would give us the output of all the operating system details for all of the systems we add to our Linux group.
Si te encuentras repitiendo comandos o, peor aún, tienes que iniciar sesión en sistemas individuales para ejecutar estos comandos, Ansible puede ayudarte en ese sentido. Por ejemplo, el simple comando a continuación nos daría la salida de todos los detalles del sistema operativo para todos los sistemas que agreguemos a nuestro grupo de Linux.
`ansible linux -a "cat /etc/os-release"`
Other use cases could be to reboot systems, copy files, and manage packers and users. You can also couple ad hoc commands with Ansible modules.
Otros casos de uso podrían ser reiniciar sistemas, copiar archivos y administrar paquetes y usuarios. También puedes combinar comandos ad-hoc con módulos de Ansible.
Ad hoc commands use a declarative model, calculating and executing the actions required to reach a specified final state. They achieve a form of idempotence by checking the current state before they begin and doing nothing unless the current state is different from the specified final state.
Los comandos ad-hoc utilizan un modelo declarativo, calculan y ejecutan las acciones necesarias para alcanzar un estado final especificado. Logran una forma de idempotencia mediante la comprobación del estado actual antes de comenzar y no haciendo nada a menos que el estado actual sea diferente al estado final especificado.
## Resources
## Recursos
- [What is Ansible](https://www.youtube.com/watch?v=1id6ERvfozo)
- [Ansible 101 - Episode 1 - Introduction to Ansible](https://www.youtube.com/watch?v=goclfp6a2IQ)
- [NetworkChuck - You need to learn Ansible right now!](https://www.youtube.com/watch?v=5hycyr-8EKs&t=955s)
- [Chef vs Puppet vs Ansible vs Saltstack](https://vergaracarmona.es/chef-vs-puppet-vs-ansible-vs-saltstack/)
See you on [Day 65](day65.md)
Nos vemos en el [Día 65](day65.md)

View File

@ -1,20 +1,20 @@
### Ansible Playbooks
### Playbooks de Ansible
In this section we will take a look at the main reason that I can see at least for Ansible, I mean it is great to take a single command and hit many different servers to perform simple commands such as rebooting a long list of servers and saving the hassle of having to connect to each one individually.
En esta sección vamos a echar un vistazo a la principal razón que yo puedo ver al menos para usar Ansible, me refiero a lo genial que es tomar un solo comando y ejecutarlo en muchos servidores diferentes para realizar tareas simples como reiniciar una larga lista de servidores y evitar la molestia de tener que conectarse a cada uno individualmente.
But what about actually taking a bare operating system and declaring the software and services we want running on that system and making sure they are all running in that desired state.
Pero, ¿qué pasa con tomar un sistema operativo sin configurar y declarar el software y los servicios que queremos que se ejecuten en ese sistema, y asegurarnos de que todos se ejecuten en ese estado deseado?
This is where ansible playbooks come in. A playbook enables us to take our group of servers and perform configuration and installation tasks against that group.
Aquí es donde entran en juego los playbooks de Ansible. Un playbook nos permite tomar nuestro grupo de servidores y realizar tareas de configuración e instalación en ese grupo.
### Playbook format
### Formato de playbook
Playbook > Plays > Tasks
For anyone that comes from a sports background you may have come across the term playbook, a playbook then tells the team how you will play made up of various plays and tasks if we think of the plays as the set pieces within the sport or game, and the tasks are associated to each play, you can have multiple tasks to make up a play and in the playbook, you may have multiple different plays.
Para aquellos que vienen de un fondo deportivo, es posible que hayan oído el término "playbook" (libro de jugadas). Un playbook le dice al equipo cómo van a jugar, compuesto por varias jugadas y tareas. Si pensamos en las jugadas como las partes del juego o deporte y las tareas están asociadas a cada jugada, podemos tener varias tareas que componen una jugada, y en el playbook podemos tener varias jugadas diferentes.
These playbooks are written in YAML (YAML aint markup language) you will find a lot of the sections we have covered so far especially Containers and Kubernetes to feature YAML formatted configuration files.
Estos playbooks se escriben en YAML (YAML ain't markup language). Encontrarás muchas secciones que hemos cubierto hasta ahora, especialmente Contenedores y Kubernetes, que presentan archivos de configuración con formato YAML.
Lets take a look at a simple playbook called playbook.yml.
Echemos un vistazo a un playbook simple llamado "playbook.yml".
```Yaml
- name: Simple Play
@ -27,16 +27,15 @@ Lets take a look at a simple playbook called playbook.yml.
debug:
msg: "{{ ansible_os_family }}"
```
You will find the above file [simple_play](days/../Configmgmt/simple_play.yml). If we then use the `ansible-playbook simple_play.yml` command we will walk through the following steps.
Puedes encontrar el archivo anterior [aquí](days/../Configmgmt/simple_play.yml). Si luego usamos el comando ansible-playbook simple_play.yml, seguiremos los siguientes pasos.
![](Images/Day65_config1.png)
You can see the first task of "gathering steps" happened, but we didn't trigger or ask for this? This module is automatically called by playbooks to gather useful variables about remote hosts. [ansible.builtin.setup](https://docs.ansible.com/ansible/latest/collections/ansible/builtin/setup_module.html)
Puedes ver que ocurrió la primera tarea de "recolección de pasos", ¿pero no la activamos o la solicitamos? Este módulo se llama automáticamente en los playbooks para recopilar variables útiles sobre los hosts remotos. [ansible.builtin.setup](https://docs.ansible.com/ansible/latest/collections/ansible/builtin/setup_module.html)
Our second task was to set a ping, this is not an ICMP ping but a python script to report back `pong` on successful connectivity to remote or localhost. [ansible.builtin.ping](https://docs.ansible.com/ansible/latest/collections/ansible/builtin/ping_module.html)
Nuestra segunda tarea fue configurar un ping, no es un ping ICMP, sino un script de Python que devuelve "pong" cuando hay conectividad exitosa con el host remoto o local. [ansible.builtin.ping](https://docs.ansible.com/ansible/latest/collections/ansible/builtin/ping_module.html)
Then our third or our second defined task as the first one will run unless you disable was the printing of a message telling us our OS. In this task we are using conditionals, we could run this playbook against all different types of operating systems and this would return the OS name. We are simply messaging this output for ease but we could add a task to say something like:
Luego, nuestra tercera o segunda tarea definida (ya que la primera se ejecuta a menos que la desactives) fue imprimir un mensaje que nos dice cuál es nuestro sistema operativo. En esta tarea estamos utilizando condicionales. Podríamos ejecutar este playbook en todos los tipos diferentes de sistemas operativos, y esto devolvería el nombre del sistema operativo. Simplemente estamos mostrando este mensaje para mayor comodidad, pero podríamos agregar una tarea para hacer algo como esto:
```Yaml
tasks:
@ -45,11 +44,11 @@ tasks:
when: ansible_os_family == "Debian"
```
### Vagrant to set up our environment
### Vagrant para configurar nuestro entorno
We are going to use Vagrant to set up our node environment, I am going to keep this at a reasonable 4 nodes but you can hopefully see that this could easily be 300 or 3000 and this is the power of Ansible and other configuration management tools to be able to configure your servers.
Vamos a utilizar Vagrant para configurar nuestro entorno de nodos. Mantendré esto en 4 nodos, pero puedes ver que fácilmente podría ser 300 o 3000, y esta es la potencia de Ansible y otras herramientas de administración de configuración para configurar tus servidores.
You can find this file located here ([Vagrantfile](Configmgmt/Vagrantfile))
Puedes encontrar el archivo aquí ([Vagrantfile](Configmgmt/Vagrantfile))
```Vagrant
Vagrant.configure("2") do |config|
@ -102,15 +101,15 @@ config.vm.base_address = 600
end
```
Use the `vagrant up` command to spin these machines up in VirtualBox, You might be able to add more memory and you might also want to define a different private_network address for each machine but this works in my environment. Remember our control box is the Ubuntu desktop we deployed during the Linux section.
Utiliza el comando `vagrant up` para iniciar estas máquinas virtuales en VirtualBox. Es posible que puedas agregar más memoria y también puedes definir una dirección `private_network` diferente para cada máquina, pero esto funciona en mi entorno. Recuerda que nuestra máquina de control es el escritorio de Ubuntu que implementamos durante la sección de Linux.
If you are resource contrained then you can also run `vagrant up web01 web02` to only bring up the webservers that we are using here.
Si tienes limitaciones de recursos, también puedes ejecutar `vagrant up web01 web02` para iniciar solo los servidores web que estamos utilizando aquí.
### Ansible host configuration
### Configuración del host de Ansible
Now that we have our environment ready, we can check ansible and for this, we will use our Ubuntu desktop (You could use this but you can equally use any Linux-based machine on your network access to the network below) as our control, lets also add the new nodes to our group in the ansible hosts file, you can think of this file as an inventory, an alternative to this could be another inventory file that is called on as part of your ansible command with `-i filename` this could be useful vs using the host file as you can have different files for different environments, maybe production, test and staging. Because we are using the default hosts file we do not need to specify as this would be the default used.
Ahora que tenemos nuestro entorno listo, podemos verificar Ansible y, para ello, utilizaremos nuestro escritorio de Ubuntu (también podrías usar cualquier máquina Linux de tu red con acceso a la red a continuación) como nuestro control. También vamos a agregar los nuevos nodos a nuestro grupo en el archivo de hosts de Ansible. Puedes pensar en este archivo como un inventario. Una alternativa a este archivo podría ser otro archivo de inventario que se llame como parte de tu comando de Ansible con '`-i filename`'. Esto podría ser útil en lugar de usar el archivo de hosts, ya que puedes tener archivos diferentes para diferentes entornos, como producción, prueba y puesta en escena. Como estamos utilizando el archivo de hosts predeterminado, no necesitamos especificarlo, ya que este sería el valor predeterminado utilizado.
I have added the following to the default hosts file.
He agregado lo siguiente al archivo de hosts predeterminado:
```Text
[control]
@ -130,9 +129,9 @@ db01
![](Images/Day65_config2.png)
Before moving on we want to make sure we can run a command against our nodes, lets run `ansible nodes -m command -a hostname` this simple command will test that we have connectivity and report back our host names.
Antes de continuar, queremos asegurarnos de que podemos ejecutar un comando en nuestros nodos. Ejecutemos `ansible nodes -m command -a hostname`. Este comando simple probará que tenemos conectividad y nos mostrará los nombres de host.
Also, note that I have added these nodes and IPs to my Ubuntu control node within the /etc/hosts file to ensure connectivity. We might also need to do an SSH configuration for each node from the Ubuntu box.
También ten en cuenta que he agregado estos nodos e IPs a mi nodo de control Ubuntu dentro del archivo `/etc/hosts` para garantizar la conectividad. Es posible que también necesitemos hacer una configuración SSH para cada nodo desde la caja de Ubuntu.
```Text
192.168.169.140 ansible-control
@ -144,9 +143,9 @@ Also, note that I have added these nodes and IPs to my Ubuntu control node withi
![](Images/Day65_config3.png)
At this stage, we want to run through setting up SSH keys between your control and your server nodes. This is what we are going to do next, another way here could be to add variables into your host's file to give username and password. I would advise against this as this is never going to be a best practice.
En esta etapa, queremos configurar las claves SSH entre nuestro nodo de control y los nodos del servidor. Esto es lo que haremos a continuación. Otra forma podría ser agregar variables en el archivo de hosts para especificar el nombre de usuario y la contraseña. Recomiendo no hacer esto, ya que nunca será una mejor práctica.
To set up SSH and share amongst your nodes, follow the steps below, you will be prompted for passwords (`vagrant`) and you will likely need to hit `y` a few times to accept.
Para configurar SSH y compartirlo entre tus nodos, sigue los pasos a continuación. Se te pedirá las contraseñas (`vagrant`) y es posible que debas presionar `y` varias veces para aceptar.
`ssh-keygen`
@ -156,27 +155,27 @@ To set up SSH and share amongst your nodes, follow the steps below, you will be
![](Images/Day65_config6.png)
Now if you have all of your VMs switched on then you can run the `ssh-copy-id web01 && ssh-copy-id web02 && ssh-copy-id loadbalancer && ssh-copy-id db01` this will prompt you for your password in our case our password is `vagrant`
Ahora, si tienes todas tus máquinas virtuales encendidas, puedes ejecutar `ssh-copy-id web01 && ssh-copy-id web02 && ssh-copy-id loadbalancer && ssh-copy-id db01`. Esto te pedirá tu contraseña, en nuestro caso, nuestra contraseña es `vagrant`.
I am not running all my VMs and only running the webservers so I issued `ssh-copy-id web01 && ssh-copy-id web02`
No estoy ejecutando todas mis máquinas virtuales y solo estoy ejecutando los servidores web, así que escribí `ssh-copy-id web01 && ssh-copy-id web02`.
![](Images/Day65_config7.png)
Before running any playbooks I like to make sure that I have simple connectivity with my groups so I have run `ansible webservers -m ping` to test connectivity.
Antes de ejecutar cualquier playbook, me gusta asegurarme de tener conectividad simple con mis grupos, así que he ejecutado `ansible webservers -m ping` para probar la conectividad.
![](Images/Day65_config4.png)
### Our First "real" Ansible Playbook
### Nuestro primer playbook "real" de Ansible
Our first Ansible playbook is going to configure our web servers, we have grouped these in our host's file under the grouping [webservers].
Nuestro primer playbook de Ansible va a configurar nuestros servidores web. Los hemos agrupado en nuestro archivo de hosts bajo el grupo [webservers].
Before we run our playbook we can confirm that our web01 and web02 do not have apache installed. The top of the screenshot below is showing you the folder and file layout I have created within my ansible control to run this playbook, we have the `playbook1.yml`, then in the templates folder we have the `index.html.j2` and `ports.conf.j2` files. You can find these files in the folder listed above in the repository.
Antes de ejecutar nuestro playbook, podemos confirmar que web01 y web02 no tienen Apache instalado. La parte superior de la captura de pantalla a continuación muestra la estructura de carpetas y archivos que he creado dentro de mi controlador de Ansible para ejecutar este playbook. Tenemos el `playbook1.yml`, luego en la carpeta de plantillas tenemos los archivos `index.html.j2` y `ports.conf.j2`. Puedes encontrar estos archivos en la carpeta mencionada anteriormente en el repositorio.
Then we SSH into web01 to check if we have apache installed?
¿SSH a web01 para comprobar si tenemos Apache instalado?
![](Images/Day65_config8.png)
You can see from the above that we have not got apache installed on our web01 so we can fix this by running the below playbook.
Puedes ver que en la captura de pantalla anterior no tenemos Apache instalado en nuestro web01, así que podemos solucionarlo ejecutando el playbook a continuación.
```Yaml
- hosts: webservers
@ -217,52 +216,53 @@ You can see from the above that we have not got apache installed on our web01 so
state: restarted
```
Breaking down the above playbook:
Desglosemos el playbook anterior:
- `- hosts: webservers` this is saying that our group to run this playbook on is a group called webservers
- `become: yes` means that our user running the playbook will become root on our remote systems. You will be prompted for the root password.
- We then have `vars` and this defines some environment variables we want throughout our webservers.
- `- hosts: webservers:` esto indica que nuestro grupo en el que se ejecutará este playbook es un grupo llamado webservers.
- `become: yes`: significa que el usuario que ejecuta el playbook se convertirá en root en los sistemas remotos. Se te pedirá la contraseña de root.
- Luego tenemos `vars` y esto define algunas variables de entorno que queremos en todos nuestros servidores web.
Following this, we start our tasks,
A continuación, comenzamos nuestras tareas:
- Task 1 is to ensure that apache is running the latest version
- Task 2 is writing the ports.conf file from our source found in the templates folder.
- Task 3 is creating a basic index.html file
- Task 4 is making sure apache is running
- La tarea 1 es asegurarse de que Apache se ejecute en la última versión.
- La tarea 2 es escribir el archivo de configuración `ports.conf` de Apache desde nuestra fuente encontrada en la carpeta de plantillas.
- La tarea 3 es crear un archivo `index.html` básico.
- La tarea 4 es asegurarse de que Apache esté en ejecución.
Finally, we have a handlers section, [Handlers: Running operations on change](https://docs.ansible.com/ansible/latest/user_guide/playbooks_handlers.html)
Finalmente, tenemos una sección de handlers, [Handlers: Ejecutando operaciones en caso de cambio](https://docs.ansible.com/ansible/latest/user_guide/playbooks_handlers.html).
"Sometimes you want a task to run only when a change is made on a machine. For example, you may want to restart a service if a task updates the configuration of that service, but not if the configuration is unchanged. Ansible uses handlers to address this use case. Handlers are tasks that only run when notified. Each handler should have a globally unique name."
"A veces, quieres que una tarea se ejecute solo cuando se realiza un cambio en una máquina. Por ejemplo, es posible que desees reiniciar un servicio si una tarea actualiza la configuración de ese servicio, pero no si la configuración no ha cambiado. Ansible utiliza handlers para abordar este caso de uso. Los handlers son tareas que solo se ejecutan cuando se les notifica. Cada handler debe tener un nombre único a nivel global".
At this stage, you might be thinking that we have deployed 5 VMs (including our Ubuntu Desktop machine which is acting as our Ansible Control) The other systems will come into play during the rest of the section.
En este punto, es posible que estés pensando que hemos implementado 5 máquinas virtuales (incluido nuestro equipo de escritorio Ubuntu, que actúa como nuestro Control de Ansible). Los otros sistemas entrarán en juego durante el resto de esta sección.
### Run our Playbook
### Ejecutando nuestro Playbook
We are now ready to run our playbook against our nodes. To run our playbook we can use the `ansible-playbook playbook1.yml` We have defined the hosts that our playbook will run against within the playbook and this will walk through the tasks that we have defined.
Ahora estamos listos para ejecutar nuestro playbook en nuestros nodos. Para ejecutar nuestro playbook, podemos usar el comando `ansible-playbook playbook1.yml`. Hemos definido los hosts en los que se ejecutará nuestro playbook dentro del playbook y este recorrerá las tareas que hemos definido.
When the command is complete we get an output showing our plays and tasks, this may take some time you can see from the below image that this took a while to go and install our desired state.
Cuando el comando esté completo, obtendremos una salida que muestra nuestras plays y tareas. Esto puede llevar algún tiempo. Como se puede ver en la imagen de abajo, esto tomó un tiempo para instalar nuestro estado deseado.
![](Images/Day65_config9.png)
We can then double-check this by jumping into a node and checking we have the installed software on our node.
Luego, podemos verificar esto al acceder a un nodo y comprobar si tenemos el software instalado en nuestro nodo.
![](Images/Day65_config10.png)
Just to round this out as we have deployed two standalone webservers with the above we can now navigate to the respective IPs that we defined and get our new website.
Para redondear esto, como hemos implementado dos servidores web independientes con lo anterior, ahora podemos navegar a las respectivas IPs que hemos definido y obtener nuestro nuevo sitio web.
![](Images/Day65_config11.png)
We are going to build on this playbook as we move through the rest of this section. I am interested as well in taking our Ubuntu desktop and seeing if we could bootstrap our applications and configuration using Ansible so we might also touch this. You saw that we can use the local host in our commands we can also run playbooks against our local host for example.
Vamos a construir sobre este playbook a medida que avanzamos en el resto de esta sección. También me interesa tomar nuestro escritorio Ubuntu y ver si podríamos configurar nuestras aplicaciones y configuraciones usando Ansible, por lo que también podríamos abordar esto. Viste que podemos usar el host local en nuestros comandos, también podemos ejecutar playbooks en nuestro host local, por ejemplo.
Another thing to add here is that we are only really working with Ubuntu VMs but Ansible is agnostic to the target systems. The alternatives that we have previously mentioned to manage your systems could be server by server (not scalable when you get over a large number of servers, plus a pain even with 3 nodes) we can also use shell scripting which again we covered in the Linux section but these nodes are potentially different so yes it can be done but then someone needs to maintain and manage those scripts. Ansible is free and hits the easy button vs having to have a specialised script.
Otra cosa a tener en cuenta es que realmente solo estamos trabajando con máquinas virtuales Ubuntu, pero Ansible es agnóstico con respecto a los sistemas de destino. Las alternativas que mencionamos anteriormente para administrar tus sistemas podrían ser servidor por servidor (no escalable cuando tienes un gran número de servidores y también es complicado incluso con 3 nodos). También podemos usar scripts de shell, que cubrimos en la sección de Linux, pero estos nodos son potencialmente diferentes, por lo que sí se puede hacer, pero luego alguien necesita mantener y administrar esos scripts. Ansible es gratuito y facilita mucho las cosas en comparación con tener que utilizar un script especializado.
## Resources
## Recursos
- [What is Ansible](https://www.youtube.com/watch?v=1id6ERvfozo)
- [Ansible 101 - Episode 1 - Introduction to Ansible](https://www.youtube.com/watch?v=goclfp6a2IQ)
- [NetworkChuck - You need to learn Ansible right now!](https://www.youtube.com/watch?v=5hycyr-8EKs&t=955s)
- [Your complete guide to Ansible](https://www.youtube.com/playlist?list=PLnFWJCugpwfzTlIJ-JtuATD2MBBD7_m3u)
- [Chef vs Puppet vs Ansible vs Saltstack](https://vergaracarmona.es/chef-vs-puppet-vs-ansible-vs-saltstack/)
This final playlist listed above is where a lot of the code and ideas came from for this section, a great resource and walkthrough in video format.
La última lista de reproducción del anterior listado es de donde provienen gran parte del código e ideas de esta sección, es un recurso excelente con una guía en formato de video.
See you on [Day 66](day66.md)
Nos vemos en el [Día 66](day66.md)