ans103 - gpulido-redhat/workshopclaro GitHub Wiki

Qué es Ansible Tower

Meta:
- Entender el proceso de instalación de la solución Red Hat Ansible Tower así como el diseño sugerido para una correcta implementación.

Objetivos:
- Instalación de Red Hat Ansible(Demostración)

Secciones:
- .(Teórico - Practico)
- Validación de pre-requisitos para la instalación de Red Hat Ansible Tower.(Teórico)
- Instalación de Red Hat Ansible. (Demostración)

Laboratorios:
- Instalación de Red Hat Ansible Tower

Red Hat® Ansible® Tower es una herramienta muy eficaz que permite coordinar los entornos empresariales, y forma parte de la familia de productos de Red Hat Ansible Automation. Ansible Tower administra la tecnología Ansible que utilizan miles de empresas alrededor del mundo para automatizar las tareas de TI, como la gestión de configuraciones, el aprovisionamiento, la coordinación de flujos de trabajo, la implementación de aplicaciones y la gestión del ciclo de vida.

Una de las características distintivas de Ansible es que no presenta inconvenientes para su incorporación. Ansible no tiene agentes, es decir que no se requieren cambios en sus servidores o equipos de red para usarlo. Es tan sencillo que puede instalarlo y comenzar a utilizarlo en cuestión de minutos. Cuando esté listo y lo instale, verá que Red Hat Ansible Tower agrega sencillez a Ansible y mejora la seguridad, la escalabilidad y el alcance que tiene.

Ansible le permite usar flujos de trabajo para optimizar las tareas, y ofrece herramientas sencillas para compartir las soluciones con su equipo. Además, podrá centralizar y controlar la infraestructura de TI con el panel visual, el control de acceso basado en funciones (RBAC), la programación de tareas, las notificaciones integradas y la gestión gráfica de inventarios. La integración de Ansible Tower con los procesos y las herramientas actuales es muy sencilla, gracias a la interfaz de programación de aplicaciones (API) de RESTful.

Con Red Hat Ansible Tower puede automatizar los sistemas, programarlos y agruparlos en clústeres, lo cual permite que las empresas expandan su TI de forma más segura y sin necesidad de incorporar personal ni aplicaciones costosas.

• Gestione varios entornos. Si tiene varios entornos por motivos geográficos o por alguna otra razón, podrá administrarlos todos de forma simultánea desde el panel de Ansible Tower. Una sola persona puede gestionar varios sistemas o implementar aplicaciones en diferentes entornos.

• Mantenga la seguridad y los permisos. El RBAC de Red Hat Ansible Tower crea la separación y el aislamiento necesarios entre los usuarios y los recursos. Tanto el equipo de operaciones como el de los desarrolladores que trabajen en un subconjunto de servicios podrán utilizar Ansible Tower de forma segura, porque ambos podrán utilizar solamente los sistemas de los entornos a los que tengan acceso.

• Capacite a sus equipos. Red Hat Ansible Tower ofrece a los diferentes equipos un entorno centralizado para la automatización: pueden compartir las guías y los flujos de trabajo entre muchos grupos, pero al mismo tiempo se mantiene una separación clara cuando comparten conocimientos institucionales sobre la implementación de aplicaciones y la gestión de infraestructuras en toda la empresa.

Validación de pre-requisitos para la instalación de Red Hat Ansible Tower

Ansible Tower tiene los siguientes requisitos:

Sistemas operativos compatibles:

Red Hat Enterprise Linux 6 de 64 bits

Red Hat Enterprise Linux 7 de 64 bits

Red Hat Enterprise Linux 8 de 64 bits

CentOS 6 de 64 bits

CentOS 7 de 64 bits

CentOS 8 de 64 bits

Ubuntu 12.04 LTS de 64 bits

Ubuntu 14.04 LTS de 64 bits

La última versión estable de Ansible

2 GB de RAM como mínimo (se recomiendan más de 4 GB de RAM)

2 GB de RAM (mínimo y recomendado para instalaciones de prueba de Vagrant) Se recomiendan 4 GB de RAM por cada 100 bifurcaciones Disco duro de 20 GB

Se requiere soporte de 64 bits (kernel y tiempo de ejecución)

Para Amazon EC2:

Tamaño de instancia de m3. Mediano o mayor Un tamaño de instancia de m3.xlarge o mayor si hay más de 100 hosts Para configuraciones HA MongoDB:

Si planea ejecutar MongoDB, las siguientes pautas proporcionan una estimación aproximada de la cantidad de espacio requerido. El cálculo básico es:

(number of hosts in inventory) * (number of scans) * (average module fact size) * (number of modules scanning)

Por ejemplo:

hosts = 1,000

número de escaneos = 365 (1 escaneo por día durante un año)

tamaño medio de los hechos del módulo = 100 kb

número de módulos = 4 (ansible, paquetes, servicios, archivos)

= 146 GB

La operación de escaneo predeterminada tiene los cuatro (4) módulos enumerados, pero puede agregar los suyos propios. Dependiendo de los tipos de módulos y del tamaño de los datos que esté recopilando, ese tamaño puede ser mayor.

Requerimientos de puertos y firewall

Puertos para la comunicación de satélite a Red Hat CDN

Puerto Protocolo Servicio Requerido para
80 TCP HTTP Servicios de administración web
443 TCP HTTPS Servicios de administración web seguro
22 TCP SSH Servicios de administración remota via ssh
5432 TCP DB Servicios de conexion a la base de datos

Instalación de Red Hat Ansible Tower. (Demostración)

Verificando conectividad y resolución DNS

[root@server08 ~]# ping -c1 localhost
[root@server08 ~]# ping -c1 $(hostname -f)
[root@server08 ~]# ping -c1 $(hostname -s)
[root@server08 ~]# nslookup server08.opennova.pe
Server:         192.168.10.178
Address:        192.168.10.120#53

Name:   server08.opennova.pe
Address: 192.168.10.178
[root@server08 ~]# nslookup 192.168.10.178
178.10.168.192.in-addr.arpa      name = server08.opennova.pe

Es buena idea indicar el el archivo /etc/hosts
<IP> <FQDN Ansiblee> <Short name Ansible>

192.168.10.178 server08.opennova.pe server08

Habilitación de conexiones de un cliente a un servidor ansible tower

[root@server08 ~]# firewall-cmd \
--add-port="80/tcp" --add-port="443/tcp" \
--add-port="22/tcp" --add-port="5432/tcp"
[root@server08 ~]# firewall-cmd --runtime-to-permanent
[root@server08 ~]# firewall-cmd --list-all


Instalacion

El sistema ya cuenta con un registro a Red Hat Stellite, por lo tanto solo debemos validar los reposotorios y registrar el repositorio de ansible

[root@server08 ~]# subscription-manager repos --list
[root@server08 ~]# subscription-manager repos --enable=ansible-2.9-for-rhel-8-x86_64-rpms

Borrar metadata yum

[root@server08 ~]# yum clean all

Verificar repositorios configurados

[root@server08 ~]# yum repolist enabled

Validamos que el sistema tenga al menos los siguientes repositorios

ansible-2.9-for-rhel-8-x86_64-rpms

rhel-8-for-x86_64-appstream-rpms

rhel-8-for-x86_64-baseos-rpms

Realizar una lista de paquetes necesarios para la administración de la maquina virtual.

[root@server08 ~]# yum install ansible git wget

Actualizar el sistema en conjunto y reiniciar

[root@server08 ~]# yum update
[root@server08 ~]# reboot

Instalar Red Hat Ansible Tower

Descargamos desde el ftp del salon el instalador de Ansible Tower y descomprimirlo


[root@server08 ~]# wget ftp://classroom.opennova.pe/ansible-automation-platform-setup-bundle-1.2.5-1.tar.gz
[root@server08 ~]# tar -xzvf ansible-automation-platform-setup-bundle-1.2.5-1.tar.gz
[root@server08 ~]# cd ansible-automation-platform-setup-bundle-1.2.5-1

Modificar el archivo inventory para que pueda customizar las claves de admin y de awx a redhat


[root@server08 ~]# vi inventory
admin_password='redhat'
pg_password='redhat'' `

Ejecutar el instalador con


[root@server08 ~]# ./setup.sh

Nota: Para evitar problemas de perdida de conectividad hacia la terminar virtual se recomienda ejecutar elprocedimiento de instalación por screen
Instalar screen

[root@satellite ~]# yum install ftp://classroom.opennova.pe/screen-4.6.2-12.el8.x86_64.rpm

Generar un alias de conexión screen

[root@satellite ~]# screen -S andy

Listar conexión screen, identificar el id ejemplo: 3081

[root@satellite ~]# screen -ls
There is a screen on:
        3081.andy      (Attached)
1 Socket in /var/run/screen/S-root.

En caso de des-conexión abrir otro terminal y ejecutar el comando indicado para restablecer la conexión, recordar poner el id que se genere en su terminal

[root@server08 ~]# screen -r 3081.andy

Abrir puertos de firewall

Abrir los puertos del firewall correspondiente al acceso HTTP, HTTPS y SSH, opcionalmente el puerto 5432 es necesario solo si se trabaja con bases de datos externas

[root@server08 ~]# firewall-cmd \
--add-port="80/tcp" --add-port="443/tcp" \
--add-port="22/tcp" --add-port="5432/tcp"
[root@server08~]# firewall-cmd --runtime-to-permanent
[root@server08 ~]# firewall-cmd --list-all

En este punto indicar a su instructor que active la plataforma de Ansible Tower con una suscripcion de prueba, luego ingresar con un navegador web para validar su instalacion

Laboratorio 01: Instalando Red Hat Ansible Tower


1. Instalar Red Hat Ansible Tower utilizando el procedimiento INSTALACIÓN
- Utilizar el procedimiento indicado en la explicación.
- Solicite a su instructor la activacion de su instalacion.
- Una vez finalizada la instalación logearse con el usuario: admin password: redhat

¿Qué es un grupo de instancias?

Un grupo de instancias de Ansible Tower es un conjunto de nodos de clúster dedicados a un propósito particular. Puede organizar sus Ansible Tower Cluster en cualquier cantidad de grupos de instancias, y los nodos de clúster pueden existir en varios grupos de instancias. Cada grupo de instancias tiene su propia cola de trabajos y cualquier nodo del grupo puede quitar trabajos de esa cola. Los trabajos se pueden asignar a un grupo de instancias de tres formas: la organización, el inventario o la plantilla de trabajo individual.

Si inicia sesión en la plataforma web de ansible tower, podrá ver en la sección de GRUPOS DE INSTANCIAS, una primera instancia llamada tower.

Ingresamos a la instancia, seccion INSTANCIAS.

Veremos la instancia localhost, esta instancia fue creada desde la instalación del producto.

Cómo configurar grupos de instancias de Ansible Tower

Los grupos de instancias se configuran en el archivo de inventario utilizado por el libro de estrategias de configuración de Ansible Tower.

¿Qué es una organización?

Una organización es una colección lógica de usuarios , equipos , proyectos e inventarios , y es el nivel más alto en la jerarquía de objetos de Tower.


Puede crear una nueva organización seleccionando el botón +.

Una organización tiene varios atributos que se pueden configurar:

Ingrese el nombre de su organización (requerido). Ingrese una descripción para la organización. Introduzca un grupo de instancias en el que ejecutar esta organización. Seleccione de la lista del menú desplegable un entorno Ansible virtual personalizado en el que ejecutar esta organización. Este campo solo está presente si se crearon previamente entornos personalizados. Consulte Uso de virtualenv con Ansible Tower en la Guía de actualización y migración de Ansible Tower .

El número máximo de hosts solo lo puede editar un superusuario para establecer un límite superior en la cantidad de hosts de licencia que puede tener una organización. Establecer este valor en 0 significa que no hay límite.

Laboratorio 02: Crear una organización Tower


- Crear una nueva organizacion llamada LABX donde X es su numero de alumno.
- La organización debera estar limitada a 50 estaciones y debera ser parte de la instancia tower.

Usuarios

Un usuario es alguien que tiene acceso a Tower con permisos y credenciales asociados. Acceda a la página Usuarios haciendo clic en el icono de usuariosicono Usuarios ( ) de la barra de navegación izquierda. La página Usuarios le permite administrar todos los usuarios de Tower. La lista de usuarios puede ordenarse y buscarse por nombre de usuario , nombre o apellido y haga clic en los encabezados para alternar su preferencia de clasificación.

Para crear un nuevo usuario:

Haga clic en el agregarbotón, que abre el cuadro de diálogo Crear usuario.

Ingrese los detalles apropiados en los siguientes campos obligatorios:

Primer nombre

Apellido

Organización (elija entre una organización existente; esta es la organización predeterminada si está utilizando una licencia de nivel autosoportado).

Correo electrónico

Nombre de usuario

Contraseña

Contraseña de confirmación

Tipo de usuario

Se pueden asignar tres tipos de usuarios de torre:

Usuario normal : los usuarios normales tienen acceso de lectura y escritura limitado a los recursos (como inventario, proyectos y plantillas de trabajo) para los que se le han otorgado los roles y privilegios adecuados a ese usuario.

Auditor del sistema : los auditores heredan implícitamente la capacidad de solo lectura para todos los objetos dentro del entorno de la torre.

Administrador del sistema : un administrador del sistema de la torre (también conocido como superusuario) tiene privilegios completos de administración del sistema para la torre, con privilegios completos de lectura y escritura en toda la instalación de la torre. Un administrador del sistema suele ser responsable de gestionar todos los aspectos de la torre y de delegar las responsabilidades del trabajo diario a varios usuarios. ¡Asignar con precaución!

Al hacer clic en Usuarios (junto a Detalles al ver su organización), se muestran todos los Usuarios asociados con esta Organización. Un usuario es alguien con acceso a Tower con roles y credenciales asociados. Agregar un usuario a una organización lo agrega solo como miembro, la especificación de un rol para el usuario se puede hacer en la pestaña Permisos , como se muestra en el ejemplo a continuación.

Al hacer clic en un usuario, aparecen los detalles de ese usuario, lo que le permite revisar, otorgar, editar y eliminar los permisos asociados para ese usuario.

Para agregar un usuario a una organización, el usuario ya debe estar creado en Tower. Para agregar usuarios existentes a la Organización:

Haga clic en el boton +.

Seleccione uno o más usuarios de la lista de usuarios disponibles haciendo clic en la casilla de verificación junto a los usuarios para agregarlos como miembros de la organización.

Al hacer clic en Permisos (junto a Usuarios cuando visualiza su organización), le permite administrar fácilmente los permisos para esta organización.

Laboratorio 03: Crear Usuarios


- Crear los siguientes usuarios en su organizacion, considerando que X es su numero de alumno
- primera letra de su nombre+apellido = Administrador de la plataforma
- adminX = Administrador de la organizacion LabX
- userX = Ejecutor de la organizacion LabX

Crear el entorno de trabajo entre el servidor y los nodos gestionados

  1. Crear el usuario ansible en el nodo de gestion o tower y asignarle el password redhat, valide el UID del usuario para mantener ese mismo UID en los clientes.
[root@server08 ~]# useradd ansible
[root@server08 ~]# id ansible
uid=1000(ansible) gid=1000(ansible) groups=1000(ansible)
[root@server08 ~]# echo "redhat" | passwd --stdin ansible
  1. Configurarle permisos sudo al usuario ansible en el nodo de control
[root@server08 ~]# echo "ansible ALL=(ALL) NOPASSWD: ALL" > /etc/sudoers.d/ansible
[root@server08 ~]# cat /etc/sudoers.d/ansible
ansible ALL=(ALL)       NOPASSWD: ALL
  1. Crear par de llaves ssh para el usuario ansible
[root@server08 ~]# su - ansible
[root@server08 ~]# ssh-keygen -t rsa -f ~/.ssh/id_rsa -N ""
  1. Instalar Python en el nodo administrado
[root@node81 ~]# subscription-manager repos --enable=ansible-2.9-for-rhel-8-x86_64-rpms
[root@node81 ~]# yum install platform-python -y
  1. Crear el usuario ansible en el nodol y asignarle el password redhat, verifique que el UID es el mismo del servidor, en caso de no coincidir pida apoyo al instructor.
[root@node81~]# useradd ansible
[root@node81 ~]# id ansible
uid=1000(ansible) gid=1000(ansible) groups=1000(ansible)
[root@node81 ~]# echo "redhat" | passwd --stdin ansible
  1. Configurarle permisos sudo al usuario ansible en el nodo de control
[root@node81 ~]# echo "ansible ALL=(ALL) NOPASSWD: ALL" > /etc/sudoers.d/ansible

[root@node81 ~]# cat /etc/sudoers.d/ansible
ansible ALL=(ALL)       NOPASSWD: ALL

Repita los pasos 4 5 y 6 en cada cliente de su infraestructura, nodeX1, nodeX2, nodeX3 y nodeX4

  1. Copiar las llaves SSH desde el servidor hacia los clientes ingresando la clave redhat
[ansible@server08 ~]# ssh-copy-id [email protected]
[ansible@server08 ~]# ssh-copy-id [email protected]
[ansible@server08 ~]# ssh-copy-id [email protected]
[ansible@server08 ~]# ssh-copy-id [email protected]
  1. Valide la conexion sin contraseña entre el server y los clients
[ansible@server08 ~]$ ssh node81.opennova.pe "hostname"
node81.opennova.pe
[ansible@server08 ~]$ ssh node82.opennova.pe "hostname"
node82.opennova.pe
[ansible@server08 ~]$ ssh node83.opennova.pe "hostname"
node83.opennova.pe
[ansible@server08 ~]$ ssh node84.opennova.pe "hostname"
node84.opennova.pe

Laboratorio 04: Configurando clientes ansible


- Prepare los clientes ansible en sus estaciones nodeX1, nodeX2, nodeX3 y nodeX4 para que sean gestionados por el server0X.

Credenciales

Tower utiliza las credenciales para la autenticación al iniciar trabajos en máquinas, sincronizar con fuentes de inventario e importar contenido de proyectos desde un sistema de control de versiones.

Puede otorgar a los usuarios y equipos la capacidad de usar estas credenciales, sin realmente exponer la credencial al usuario. Si tiene un usuario que se traslada a un equipo diferente o abandona la organización, no tiene que volver a introducir la clave en todos sus sistemas solo porque esa credencial estaba disponible en Tower.

Para crear una nueva credencial:

Haga clic en el botón + ubicado en la esquina superior derecha de la pantalla Credenciales.

Ingrese el nombre de su nueva credencial en el campo Nombre .

Opcionalmente, ingrese o seleccione el nombre de la organización a la que está asociada la credencial.

Ingrese o seleccione el tipo de credencial que desea crear. Para nuestro laboratorio sera credencial del tipo maquina.

Ingrese los detalles apropiados según el tipo de credencial seleccionado, como se describe en la siguiente sección, Tipos de credenciales. Para nuestro laboratorio usamos el usuario ansible con la clave redhat.

Haga clic en Guardar cuando termine.

Laboratorio 05: Creando credenciales


- Cree la credencial llamada AnsibleX el cual es del tipo Maquina con usuario ansible, clave redhat y esta asociada a la organizacion LabX

Inventarios

Un inventario es una colección de hosts contra los que se pueden iniciar trabajos, al igual que un archivo de inventario de Ansible. Los inventarios se dividen en grupos y estos grupos contienen los hosts reales. Los grupos pueden obtenerse manualmente, ingresando nombres de host en Tower, o desde uno de los proveedores de nube admitidos por Ansible Tower.

Para crear un inventario manual vamos a la seccion inventarios y agregamos un inventario nuevo

Es importante asociar el nuevo invetario a una organizacion y una instancia

Ingresamos a la seccion de servidores y agregamos un servidor

Agregamos al primer cliente de nuestra infra

Repetimos el proceso hasta tener los nodos X1 hasta X4

Validamos la disponibilidad de los nodos seleccionando los 4 nodos y dandole click al boton de ejecutar comandos

Seleccionamos el modulo PING y la credencial de los pasos anteriores

Varifique que la salida del sistema indique que los 4 nodos son alcanzables

Laboratorio 06: Creando Inventarios


- Cree un inventario general llamado LinuxServers08 que incluya sus 4 nodos clientes
- Valide que los 4 nodos gestionados sean accesibles a traves del modulo PING

Proyectos

Un proyecto es una colección lógica de playbooks representados en Tower.

Creamos un proyecto nuevo, primero debemos definir un espacio de trabajo, para ello creamos una carpeta en nuestro servidor

[root@server08 ~]$ cd /var/lib/awx/projects/
[root@server08 ~]$ mkdir test08
[root@server08 ~]$ chown awx.awx test08

Ahora que tenemos el espacio de trabajo del proyecto podemos ingresar a la interface web

Creamos un nuevo proyecto recordando asociarloa una organizacion, siendo el punto critico de este laboratorio que sea un proyecto manual que apuntara al recurso creado en el paso anterior

Laboratorio 07: Creando Proyectos


- Utilizando el terminal de linux en su servidor, cree un espacio de trabajo para su proyecto TestX
- Cree el proyecto TestX que pertenesca a su organizacion LabX

Ejecutando Trabajos

Una vez creado todos los recurosos minimos dentro de nuestra organizacion, podemos crear trabajos que agrupen nuestros recursos minimos, para ello vamos a la seccion de plantillas, pero necesitamos poblar nuestro recurso con algunos playbooks desarrollados en capitulos previos de esta capacitacion, para efectos de este laboratorio cargamos los playbooks de instalar y desinstlar apache

[root@server08 ]# cd /var/lib/awx/projects/test08
[root@server08 test08]# vi install_apache.yaml
---
- name: This sets up an httpd webserver
  hosts: all
  tasks:
  - name: Install apache packages
    yum:
      name: httpd
      state: present
  - name: ensure httpd is running
    service:
      name: httpd
      state: started
  - name: Open port 80 for http access
    firewalld:
      service: http
      permanent: true
      state: enabled
  - name: Open port 443 for https access
    firewalld:
      service: https
      permanent: true
      state: enabled
  - name: Restart the firewalld service to load in the firewall changes
    service:
      name: firewalld
      state: restarted

[root@server08 test08]# vi uninstall_apache.yaml
---
- name: This sets up an httpd webserver
  hosts: all
  tasks:
  - name: "Uninstall HTTPD/Apache"
    yum:
      name: httpd
      autoremove: yes
      state: absent
  - name: "Close port 80/tcp ond 443/tcp  firewalld"
    firewalld:
      service: "{{ item }}"
      permanent: yes
      immediate: yes
      state: disabled
    loop:
      - http
      - https

[root@server08 test08]# ls
install_apache.yaml  uninstall_apache.yaml

Con estos recursos .yaml podemos ir a la seccion de plantillas y agregamos una nueva plantilla de trabajo

Creamos la plantilla de trabajo indicando el nombre,inventario, proyecto, playbook de instalacion de apache y la credencial

Tambien debemos activar el check de elevacion de privilegios

De la misma manera creamos una plantilla de trabajo para la desintalacion de apache, pero con el playbook de desinstalar y con el check de privilegios

Nos deslogueamos con el uuario admin y nos logueamos con el usuaro userX sin privilegios administrativos creado en pasos previos e ingresamos a la seccion de plantillas.

Ejecutamos la plantilla de instalacion

Verificamos la correcta ejecucion de la tarea, tambien podemos abrir navegadores web y validar el acceso del webserver

Ejecutamos la plantilla de desinstalacion

Verificamos que los servidores ya no tienen acceso web

Laboratorio 08: Ejecutando tareas


- Cree 2 plantillas de trabajo, una para instalar el servicio apache y otra para desinstalarlo en sus 4 nodos
- Las plantillas deberan ejecutarse con el usuario ansible y deberan ser ejecutadas por un usuario de ansible tower que no tenga permisos para editar las tareas, solo ejecutarlas

Laboratorio Propuesto


Con lo aprendido hasta ahora, cree las siguientes plantillas de trabajo considerando que X es su numero de alumno

A01 - Instalar el servicio apache en el inventario ProdX el cual contiene el servidor nodeX1 y nodeX2
A02 - Instalar el servicio vsftpd con el inventario DevX el cual contiene el servidor nodeX3
A03 - Instalar los servicios apache y vsfptd con el inventario QAX el cual contiene el servidor nodeX4
B01 - Desinstalar el servicio apache en el inventario ProdX el cual contiene el servidor nodeX1 y nodeX2
B02 - desinstalar el servicio vsftpd con el inventario DevX el cual contiene el servidor nodeX3
B03 - Desinstalar los servicios apache y vsfptd con el inventario QAX el cual contiene el servidor nodeX4

Todos los recursos seran parte del proyecto AlumnoX con su espacio de trabajo propio
La plantillas deberan ser ejecutada por el usuario alumnoX solo con permisos de ejecucion



Playbook de instalaciond de vsftpd
---
- name: This sets up an vsftp webserver
  hosts: all
  tasks:
  - name: Install vsftpd packages
    yum:
      name: vsftpd
      state: present
  - name: ensure vsftpd is running
    service:
      name: vsftpd
      state: started
  - name: Open port 21 for ftp access
    firewalld:
      service: ftp
      permanent: true
      state: enabled
  - name: replace line
    lineinfile:
      path: /etc/vsftpd/vsftpd.conf
      regexp: '^anonymous_enable='
      line: anonymous_enable=YES
  - name: Restart the firewalld service to load in the firewall changes
    service:
      name: firewalld
      state: restarted
  - name: Restart vsftpd
    service:
      name: vsftpd
      state: restarted

Para instalar apache y vsftpd considerar crear un nuevo playbook que involucre ambos contenidos por ejemplo crear un playbook de nombre install_apache_and_vsftpd.yaml con el siguiente contenido:

---
- name: This sets up an httpd webserver
  hosts: all
  tasks:
  - name: Install apache packages
    yum:
      name: httpd
      state: present
  - name: ensure httpd is running
    service:
      name: httpd
      state: started
  - name: Open port 80 for http access
    firewalld:
      service: http
      permanent: true
      state: enabled
  - name: Open port 443 for https access
    firewalld:
      service: https
      permanent: true
      state: enabled
  - name: Restart the firewalld service to load in the firewall changes
    service:
      name: firewalld
      state: restarted

- name: This sets up an vsftp webserver
  hosts: all
  tasks:
  - name: Install vsftpd packages
    yum:
      name: vsftpd
      state: present
  - name: ensure vsftpd is running
    service:
      name: vsftpd
      state: started
  - name: Open port 21 for ftp access
    firewalld:
      service: ftp
      permanent: true
      state: enabled
  - name: replace line
    lineinfile:
      path: /etc/vsftpd/vsftpd.conf
      regexp: '^anonymous_enable='
      line: anonymous_enable=YES
  - name: Restart the firewalld service to load in the firewall changes
    service:
      name: firewalld
      state: restarted
  - name: Restart vsftpd
    service:
      name: vsftpd
      state: restarted
⚠️ **GitHub.com Fallback** ⚠️