ans01 - gpulido-redhat/workshopclaro Wiki

Introducción a Ansible. (Teórico)

¿Qué es la Automatizacion de TI?

La automatización de TI o automatización de infraestructura consiste en utilizar un software para crear políticas y procesos que reduzcan o reemplacen la interacción manual con sistemas de TI.

Beneficios:


¿Qué es Infraestructura como código?

Tipos de IaC:


¿Qué es Ansible?

Ansible es una plataforma de automatización de código abierto. Es un lenguaje de automatización simple que puede describir perfectamente una infraestructura de aplicaciones de TI en Ansible Playbooks.

Arquitectura Ansible


Introducción a Red Hat Ansible Automation Platform. (Teórico)

¿Qué es Red Hat Ansible Automation Platform?

Ansible Automation Platform ofrece un marco empresarial para diseñar y gestionar la automatización de la TI según sea necesario. Además, proporciona un panel visual, control de acceso basado en funciones y herramientas de automatización que incluyen sistemas de análisis y contenido certificado y reutilizable, para que los usuarios puedan centralizar y controlar su infraestructura.

Ansible Automation Platform utiliza YAML, un lenguaje de automatización comprensible para las personas que permite que los usuarios de una empresa compartan, evalúen y gestionen el contenido de automatización. Colabore con todos los equipos y ponga en marcha sus sistemas rápidamente, gracias a los conjuntos de funciones y módulos creados previamente en los que se pueden realizar búsquedas, para que cualquier persona logre implementar la automatización.

Características y Beneficios

Red Hat Ansible Automation Platform ayuda a las organizaciones a adoptar una cultura de automatización colaborativa al brindar una experiencia coherente en todas partes, basada en características adaptadas a las necesidades de todo el equipo de TI. Con la plataforma de automatización Ansible:

Componentes de la plataforma Usos y beneficios
Ansible Core Ansible Automation Platform está alineada con la comunidad global detrás del proyecto Ansible, con capacidades fundamentales adicionales y garantía de Red Hat que ayudan a su empresa a adoptar cómodamente la automatización en toda la organización a cualquier escala.
Automation controller El plano de control de Ansible Automation Platform se denomina controlador de automatización (renombrado Ansible Tower). Incluye una interfaz de usuario (UI), control de acceso basado en roles (RBAC), flujos de trabajo y CI / CD para ayudar a su equipo a escalar. El controlador de automatización ayuda a estandarizar cómo se implementa, inicia, delega y audita la automatización. Administre el inventario, inicie y programe flujos de trabajo, realice un seguimiento de los cambios e integre en los informes, todo desde una interfaz de usuario centralizada y una interfaz de programación de aplicaciones (API) RESTful.
Automation execution environments Empaquetados como contenedores, los entornos de ejecución de automatización (que reemplazan a Ansible Engine) son entornos definidos, consistentes y portátiles para ejecutar playbooks y roles de Ansible. Los entornos de ejecución ofrecen una forma sencilla y flexible de crear, reutilizar y escalar contenido de automatización.
Ansible Content Collections Las colecciones de contenido de Ansible facilitan a los creadores y desarrolladores de contenido de Ansible poner en marcha la automatización más rápido. Las colecciones de contenido certificadas de Ansible están respaldadas por Red Hat y un sólido ecosistema de socios. Son bloques de construcción de contenido de automatización flexibles y confiables para una variedad de casos de uso.
Automation hub El centro de automatización proporciona un lugar para que los clientes de Ansible Automation Platform encuentren, usen y extiendan rápidamente contenido que sea compatible con Red Hat y sus socios tecnológicos, para brindar tranquilidad adicional en los entornos más exigentes. El centro de automatización privado también está disponible y ofrece a los clientes un repositorio de imágenes de contenedor de sus entornos de ejecución como una instancia local de centro de automatización.
Ansible content tools Ansible Automation Platform 2 incluye dos nuevas herramientas diseñadas para ayudar a que la creación y la implementación de entornos de ejecución sean una experiencia de creación más fluida. Se incluirán herramientas de contenido adicionales de Ansible en futuras versiones de la plataforma. El generador de entornos de ejecución (ansible-builder) es una herramienta de línea de comandos que ayuda a construir entornos Ansible en contenedores usando podman. Permite a los creadores y operadores de automatización crear entornos de ejecución personalizados con el contenido exacto de Ansible necesario para su automatización. El navegador de contenido de automatización (ansible-navigator) proporciona una interfaz de plataforma de nivel superior (a través de CLI o TUI) para los creadores de automatización de Ansible. Proporciona una experiencia de creación de contenido de automatización de nivel superior más coherente, coherente y predecible, diseñada para ayudar al desarrollador empresarial de Ansible.
Red Hat Insights for Ansible Automation Platform Red Hat Insights for Ansible Automation Platform permite a los arquitectos rastrear y solucionar problemas de éxito en el trabajo y medir cómo los equipos coordinan los procesos de automatización en los dominios de TI. También ayuda a los operadores y administradores a mantener Red Hat Ansible Automation Platform funcionando de manera eficiente y óptima, a identificar dónde fallan trabajos específicos e informar sobre proyectos de automatización en toda la infraestructura de un extremo a otro.
Automation services catalog El catálogo de servicios de automatización es un medio para que los usuarios administren, aprovisionen y retiren los recursos de automatización, para facilitar el modelado y la entrega. Brinda a los creadores de automatización y usuarios comerciales acceso de autoservicio en entornos físicos, virtuales, en la nube y de contenedores, lo que facilita la ejecución de proyectos de automatización. Simultáneamente brinda a los usuarios de automatización empresarial y de línea de negocios la gobernanza que necesitan para cumplir con los requisitos de cumplimiento y adquisiciones.

Planificar setup inicial Ansible. (Demostración)

Requerimientos previos

Control Node

Managed Node


Instalar Ansible en el Control Node

  1. Listar repositorios disponibles y validar que contamos con ansible-2.9-for-rhel-8-x86_64-rpms
[[email protected] ~]# subscription-manager repos --list
+----------------------------------------------------------+
    Available Repositories in /etc/yum.repos.d/redhat.repo
+----------------------------------------------------------+
Repo ID:   rhel-8-for-x86_64-baseos-rpms
Repo Name: Red Hat Enterprise Linux 8 for x86_64 - BaseOS (RPMs)
Repo URL:  https://satellite.opennova.pe/pulp/repos/OpenNova/Library/content/dist/rhel8/$releasever/x86_64/baseos/os
Enabled:   1

Repo ID:   satellite-tools-6.9-for-rhel-8-x86_64-rpms
Repo Name: Red Hat Satellite Tools 6.9 for RHEL 8 x86_64 (RPMs)
Repo URL:  https://satellite.opennova.pe/pulp/repos/OpenNova/Library/content/dist/layered/rhel8/x86_64/sat-tools/6.9/os
Enabled:   1

Repo ID:   ansible-2.9-for-rhel-8-x86_64-rpms
Repo Name: Red Hat Ansible Engine 2.9 for RHEL 8 x86_64 (RPMs)
Repo URL:  https://satellite.opennova.pe/pulp/repos/OpenNova/Library/content/dist/layered/rhel8/x86_64/ansible/2.9/os
Enabled:   0

Repo ID:   rhel-8-for-x86_64-appstream-rpms
Repo Name: Red Hat Enterprise Linux 8 for x86_64 - AppStream (RPMs)
Repo URL:  https://satellite.opennova.pe/pulp/repos/OpenNova/Library/content/dist/rhel8/$releasever/x86_64/appstream/os
Enabled:   1
  1. Habilitar en el nodo de control el repositorio ansible-2.9-for-rhel-8-x86_64-rpms
[[email protected] ~]# subscription-manager repos --enable=ansible-2.9-for-rhel-8-x86_64-rpms
Repository 'ansible-2.9-for-rhel-8-x86_64-rpms' is enabled for this system.

[[email protected] ~]# yum repolist
Updating Subscription Management repositories.
repo id                                                   repo name
ansible-2.9-for-rhel-8-x86_64-rpms                        Red Hat Ansible Engine 2.9 for RHEL 8 x86_64 (RPMs)
rhel-8-for-x86_64-appstream-rpms                          Red Hat Enterprise Linux 8 for x86_64 - AppStream (RPMs)
rhel-8-for-x86_64-baseos-rpms                             Red Hat Enterprise Linux 8 for x86_64 - BaseOS (RPMs)
satellite-tools-6.9-for-rhel-8-x86_64-rpms                Red Hat Satellite Tools 6.9 for RHEL 8 x86_64 (RPMs)
  1. Instalar Python en el nodo de control
[[email protected] ~]# yum install platform-python -y
Updating Subscription Management repositories.
Red Hat Ansible Engine 2.9 for RHEL 8 x86_64 (RPMs)                                                                  7.9 MB/s | 2.0 MB     00:00
Red Hat Enterprise Linux 8 for x86_64 - BaseOS (RPMs)                                                                 26 kB/s | 2.4 kB     00:00
Red Hat Enterprise Linux 8 for x86_64 - AppStream (RPMs)                                                              43 kB/s | 2.8 kB     00:00
Red Hat Satellite Tools 6.9 for RHEL 8 x86_64 (RPMs)                                                                  25 kB/s | 2.1 kB     00:00
Package platform-python-3.6.8-37.el8.x86_64 is already installed.
Dependencies resolved.
=====================================================================================================================================================
 Package                           Architecture             Version                            Repository                                       Size
=====================================================================================================================================================
Upgrading:
 platform-python                   x86_64                   3.6.8-38.el8_4                     rhel-8-for-x86_64-baseos-rpms                    84 k
 python3-libs                      x86_64                   3.6.8-38.el8_4                     rhel-8-for-x86_64-baseos-rpms                   7.8 M

Transaction Summary
=====================================================================================================================================================
Upgrade  2 Packages

Total download size: 7.9 M
Downloading Packages:
(1/2): platform-python-3.6.8-38.el8_4.x86_64.rpm                                                                     818 kB/s |  84 kB     00:00
(2/2): python3-libs-3.6.8-38.el8_4.x86_64.rpm                                                                         55 MB/s | 7.8 MB     00:00
-----------------------------------------------------------------------------------------------------------------------------------------------------
Total                                                                                                                 55 MB/s | 7.9 MB     00:00
Running transaction check
Transaction check succeeded.
Running transaction test
Transaction test succeeded.
Running transaction
  Preparing        :                                                                                                                             1/1
  Upgrading        : platform-python-3.6.8-38.el8_4.x86_64                                                                                       1/4
  Running scriptlet: platform-python-3.6.8-38.el8_4.x86_64                                                                                       1/4
  Upgrading        : python3-libs-3.6.8-38.el8_4.x86_64                                                                                          2/4
  Cleanup          : python3-libs-3.6.8-37.el8.x86_64                                                                                            3/4
  Cleanup          : platform-python-3.6.8-37.el8.x86_64                                                                                         4/4
  Running scriptlet: platform-python-3.6.8-37.el8.x86_64                                                                                         4/4
  Verifying        : python3-libs-3.6.8-38.el8_4.x86_64                                                                                          1/4
  Verifying        : python3-libs-3.6.8-37.el8.x86_64                                                                                            2/4
  Verifying        : platform-python-3.6.8-38.el8_4.x86_64                                                                                       3/4
  Verifying        : platform-python-3.6.8-37.el8.x86_64                                                                                         4/4
Installed products updated.
Uploading Tracer Profile

Upgraded:
  platform-python-3.6.8-38.el8_4.x86_64                                      python3-libs-3.6.8-38.el8_4.x86_64

Complete!
  1. Instalar ansible en el nodo de control
[[email protected] ~]# yum install -y ansible
Updating Subscription Management repositories.
Red Hat Ansible Engine 2.9 for RHEL 8 x86_64 (RPMs)                                               28 kB/s | 2.4 kB     00:00
Red Hat Enterprise Linux 8 for x86_64 - BaseOS (RPMs)                                             29 kB/s | 2.4 kB     00:00
Red Hat Enterprise Linux 8 for x86_64 - AppStream (RPMs)                                          37 kB/s | 2.8 kB     00:00
Red Hat Satellite Tools 6.9 for RHEL 8 x86_64 (RPMs)                                              29 kB/s | 2.1 kB     00:00
Dependencies resolved.
=================================================================================================================================
 Package                         Architecture      Version                   Repository                                     Size
=================================================================================================================================
Installing:
 ansible                         noarch            2.9.26-1.el8ae            ansible-2.9-for-rhel-8-x86_64-rpms             17 M
Installing dependencies:
 python3-babel                   noarch            2.5.1-5.el8               rhel-8-for-x86_64-appstream-rpms              4.8 M
 python3-cffi                    x86_64            1.11.5-5.el8              rhel-8-for-x86_64-baseos-rpms                 238 k
 python3-cryptography            x86_64            3.2.1-4.el8               rhel-8-for-x86_64-baseos-rpms                 559 k
 python3-jinja2                  noarch            2.10.1-2.el8_0            rhel-8-for-x86_64-appstream-rpms              538 k
 python3-markupsafe              x86_64            0.23-19.el8               rhel-8-for-x86_64-appstream-rpms               39 k
 python3-ply                     noarch            3.9-9.el8                 rhel-8-for-x86_64-baseos-rpms                 111 k
 python3-pycparser               noarch            2.14-14.el8               rhel-8-for-x86_64-baseos-rpms                 109 k
 python3-pytz                    noarch            2017.2-9.el8              rhel-8-for-x86_64-appstream-rpms               54 k
 python3-pyyaml                  x86_64            3.12-12.el8               rhel-8-for-x86_64-baseos-rpms                 193 k
 sshpass                         x86_64            1.06-3.el8ae              ansible-2.9-for-rhel-8-x86_64-rpms             27 k
Installing weak dependencies:
 python3-jmespath                noarch            0.9.0-11.el8              rhel-8-for-x86_64-appstream-rpms               45 k

Transaction Summary
=================================================================================================================================
Install  12 Packages

Total download size: 24 M
Installed size: 124 M
Downloading Packages:
(1/12): sshpass-1.06-3.el8ae.x86_64.rpm                                                          288 kB/s |  27 kB     00:00
(2/12): python3-pyyaml-3.12-12.el8.x86_64.rpm                                                    1.7 MB/s | 193 kB     00:00
(3/12): python3-pycparser-2.14-14.el8.noarch.rpm                                                 2.4 MB/s | 109 kB     00:00
(4/12): python3-cffi-1.11.5-5.el8.x86_64.rpm                                                     5.2 MB/s | 238 kB     00:00
(5/12): python3-cryptography-3.2.1-4.el8.x86_64.rpm                                               14 MB/s | 559 kB     00:00
(6/12): python3-ply-3.9-9.el8.noarch.rpm                                                         2.6 MB/s | 111 kB     00:00
(7/12): python3-jmespath-0.9.0-11.el8.noarch.rpm                                                 1.4 MB/s |  45 kB     00:00
(8/12): python3-pytz-2017.2-9.el8.noarch.rpm                                                     1.6 MB/s |  54 kB     00:00
(9/12): python3-markupsafe-0.23-19.el8.x86_64.rpm                                                897 kB/s |  39 kB     00:00
(10/12): python3-jinja2-2.10.1-2.el8_0.noarch.rpm                                                 12 MB/s | 538 kB     00:00
(11/12): ansible-2.9.26-1.el8ae.noarch.rpm                                                        52 MB/s |  17 MB     00:00
(12/12): python3-babel-2.5.1-5.el8.noarch.rpm                                                     45 MB/s | 4.8 MB     00:00
---------------------------------------------------------------------------------------------------------------------------------
Total                                                                                             64 MB/s |  24 MB     00:00
Running transaction check
Transaction check succeeded.
Running transaction test
Transaction test succeeded.
Running transaction
  Preparing        :                                                                                                         1/1
  Installing       : python3-markupsafe-0.23-19.el8.x86_64                                                                  1/12
  Installing       : python3-pytz-2017.2-9.el8.noarch                                                                       2/12
  Installing       : python3-babel-2.5.1-5.el8.noarch                                                                       3/12
  Installing       : python3-jinja2-2.10.1-2.el8_0.noarch                                                                   4/12
  Installing       : python3-jmespath-0.9.0-11.el8.noarch                                                                   5/12
  Installing       : python3-ply-3.9-9.el8.noarch                                                                           6/12
  Installing       : python3-pycparser-2.14-14.el8.noarch                                                                   7/12
  Installing       : python3-cffi-1.11.5-5.el8.x86_64                                                                       8/12
  Installing       : python3-cryptography-3.2.1-4.el8.x86_64                                                                9/12
  Installing       : python3-pyyaml-3.12-12.el8.x86_64                                                                     10/12
  Installing       : sshpass-1.06-3.el8ae.x86_64                                                                           11/12
  Installing       : ansible-2.9.26-1.el8ae.noarch                                                                         12/12
  Running scriptlet: ansible-2.9.26-1.el8ae.noarch                                                                         12/12
  Verifying        : ansible-2.9.26-1.el8ae.noarch                                                                          1/12
  Verifying        : sshpass-1.06-3.el8ae.x86_64                                                                            2/12
  Verifying        : python3-pyyaml-3.12-12.el8.x86_64                                                                      3/12
  Verifying        : python3-pycparser-2.14-14.el8.noarch                                                                   4/12
  Verifying        : python3-cffi-1.11.5-5.el8.x86_64                                                                       5/12
  Verifying        : python3-cryptography-3.2.1-4.el8.x86_64                                                                6/12
  Verifying        : python3-ply-3.9-9.el8.noarch                                                                           7/12
  Verifying        : python3-jmespath-0.9.0-11.el8.noarch                                                                   8/12
  Verifying        : python3-pytz-2017.2-9.el8.noarch                                                                       9/12
  Verifying        : python3-markupsafe-0.23-19.el8.x86_64                                                                 10/12
  Verifying        : python3-jinja2-2.10.1-2.el8_0.noarch                                                                  11/12
  Verifying        : python3-babel-2.5.1-5.el8.noarch                                                                      12/12
Installed products updated.
Uploading Tracer Profile

Installed:
  ansible-2.9.26-1.el8ae.noarch               python3-babel-2.5.1-5.el8.noarch         python3-cffi-1.11.5-5.el8.x86_64
  python3-cryptography-3.2.1-4.el8.x86_64     python3-jinja2-2.10.1-2.el8_0.noarch     python3-jmespath-0.9.0-11.el8.noarch
  python3-markupsafe-0.23-19.el8.x86_64       python3-ply-3.9-9.el8.noarch             python3-pycparser-2.14-14.el8.noarch
  python3-pytz-2017.2-9.el8.noarch            python3-pyyaml-3.12-12.el8.x86_64        sshpass-1.06-3.el8ae.x86_64

Complete!

Adicionalmente instalar las herramientas de trabajo con las que este familiarizado incluir vim y wget para el laboratorio.

[[email protected] ~]# yum install net-tools bash-completion bind-utils git vim tree wget -y

Instalar Requerimientos en el Managed Node

  1. Instalar Python en el nodo administrado
[[email protected] ~]# yum install platform-python -y
Updating Subscription Management repositories.
Red Hat Ansible Engine 2.9 for RHEL 8 x86_64 (RPMs)                                                                  7.9 MB/s | 2.0 MB     00:00
Red Hat Enterprise Linux 8 for x86_64 - BaseOS (RPMs)                                                                 26 kB/s | 2.4 kB     00:00
Red Hat Enterprise Linux 8 for x86_64 - AppStream (RPMs)                                                              43 kB/s | 2.8 kB     00:00
Red Hat Satellite Tools 6.9 for RHEL 8 x86_64 (RPMs)                                                                  25 kB/s | 2.1 kB     00:00
Package platform-python-3.6.8-37.el8.x86_64 is already installed.
Dependencies resolved.
=====================================================================================================================================================
 Package                           Architecture             Version                            Repository                                       Size
=====================================================================================================================================================
Upgrading:
 platform-python                   x86_64                   3.6.8-38.el8_4                     rhel-8-for-x86_64-baseos-rpms                    84 k
 python3-libs                      x86_64                   3.6.8-38.el8_4                     rhel-8-for-x86_64-baseos-rpms                   7.8 M

Transaction Summary
=====================================================================================================================================================
Upgrade  2 Packages

Total download size: 7.9 M
Downloading Packages:
(1/2): platform-python-3.6.8-38.el8_4.x86_64.rpm                                                                     818 kB/s |  84 kB     00:00
(2/2): python3-libs-3.6.8-38.el8_4.x86_64.rpm                                                                         55 MB/s | 7.8 MB     00:00
-----------------------------------------------------------------------------------------------------------------------------------------------------
Total                                                                                                                 55 MB/s | 7.9 MB     00:00
Running transaction check
Transaction check succeeded.
Running transaction test
Transaction test succeeded.
Running transaction
  Preparing        :                                                                                                                             1/1
  Upgrading        : platform-python-3.6.8-38.el8_4.x86_64                                                                                       1/4
  Running scriptlet: platform-python-3.6.8-38.el8_4.x86_64                                                                                       1/4
  Upgrading        : python3-libs-3.6.8-38.el8_4.x86_64                                                                                          2/4
  Cleanup          : python3-libs-3.6.8-37.el8.x86_64                                                                                            3/4
  Cleanup          : platform-python-3.6.8-37.el8.x86_64                                                                                         4/4
  Running scriptlet: platform-python-3.6.8-37.el8.x86_64                                                                                         4/4
  Verifying        : python3-libs-3.6.8-38.el8_4.x86_64                                                                                          1/4
  Verifying        : python3-libs-3.6.8-37.el8.x86_64                                                                                            2/4
  Verifying        : platform-python-3.6.8-38.el8_4.x86_64                                                                                       3/4
  Verifying        : platform-python-3.6.8-37.el8.x86_64                                                                                         4/4
Installed products updated.
Uploading Tracer Profile

Upgraded:
  platform-python-3.6.8-38.el8_4.x86_64                                      python3-libs-3.6.8-38.el8_4.x86_64

Complete!

Repetir los pasos del 1 al 3 para los clientes: nodeX2, nodeX3, nodeX4. Donde X es el numero del usuario asignado del 1 al 6.

Configurar espacio de trabajo y recursos en el nodo de control

Se debe definir un usuario de automatización para toda la infraestructura, en nuestro taller el usuario ansible será el usuario de automatización, el mismo requiere cierta configuración tanto en el nodo de control como en los nodos administrador.

  1. Crear el usuario ansible en el nodo de control y asignarle el password redhat
[[email protected] ~]# useradd ansible
[[email protected] ~]# id ansible
uid=1000(ansible) gid=1000(ansible) groups=1000(ansible)

[[email protected] ~]# echo "redhat" | passwd --stdin ansible
  1. Configurarle permisos sudo al usuario ansible en el nodo de control
[[email protected] ~]# echo "ansible ALL=(ALL) NOPASSWD: ALL" > /etc/sudoers.d/ansible

[[email protected] ~]# cat /etc/sudoers.d/ansible
ansible ALL=(ALL)       NOPASSWD: ALL
  1. Crear par de llaves ssh para el usuario ansible
[[email protected] ~]# su - ansible
[[email protected] ~]# ssh-keygen -t rsa -f ~/.ssh/id_rsa -N ""
  1. Configurar editor vim y crear espacio de trabajo
[[email protected] ~]$ echo "autocmd filetype yaml setlocal ai ts=2 sw=2 et" > ~/.vimrc

[[email protected] ~]$ mkdir ansible
[[email protected] ~]$ cd ansible/

[[email protected] ~]$ wget ftp://classroom.opennova.pe/ansible/inventory-template
[[email protected] ~]$ wget ftp://classroom.opennova.pe/ansible/inventory.yml
[[email protected] ~]$ wget ftp://classroom.opennova.pe/ansible/ansible.cfg

Nota: Una vez descargado el archivo inventory-template renonmbrarlo a inventory y reemplazar donde indique X con el numero de su usuario asignado del 1 al 6.

[[email protected] ansible]$ mv inventory-template inventory
  1. Hacer un login inicial del usuario ansible desde el nodo de control hacia el usuario root de los nodos administrados, para que se haga un primer reconocimiento del archivos known_hosts en el nodo de control.
[[email protected] ~]$ ssh [email protected]
[email protected]'s password: <ingresar credencial>
[[email protected] ~]# exit
logout
Connection to node91.opennova.pe closed.

Repetir el paso 5 para los clientes: nodeX2, nodeX3, nodeX4. Donde X es el numero del usuario asignado del 1 al 6.

  1. Revisar en la sesión el archivo inventory, inventory.yml y ansible.cfg para entender su función en el setup inicial. De la misma manera inspeccionar los archivos de configuración por defecto /etc/ansible/ansible.cfg y /etc/ansible/hosts
[[email protected] ~]$ cat /etc/ansible/ansible.cfg
[[email protected] ~]$ cat /etc/ansible/hosts

Luego inspeccionar los archivos inventory y ansible.cfg en el espacio de trabajo del usuario ansible.

[[email protected] ~]$ cat /home/ansible/ansible/inventory
[[email protected] ~]$ cat /home/ansible/ansible/ansible.cfg

Para entender algunas directivas de configuración de ansible.cfg revisar la siguiente tabla:

Ansible Configuration

Directiva Descripción
inventory Especifica la ruta al archivo de inventario.
remote_user El nombre del usuario para iniciar sesión en los hosts administrados. Si no especificado, se utiliza el nombre del usuario actual.
ask_pass Si solicita o no una contraseña SSH. Puede ser false si usa autenticación de clave pública SSH.
become Ya sea para cambiar de usuario automáticamente en el host administrado (normalmente a root) después de conectarse. Esto también puede ser especificado en el playbook.
become_method Cómo cambiar de usuario (normalmente sudo, que es el predeterminado, pero su es una opción).
become_user El usuario al que cambiar en el host administrado (normalmente root, que es el predeterminado).
become_ask_pass Ya sea para solicitar una contraseña para su become_method. El valor predeterminado es false.
  1. Adicional al inventario la siguiente información:

Opción 01

[[email protected] ansible]$ pwd
/home/ansible/ansible

[[email protected] ansible]$ vim inventory
...
[deploy]
node91.opennova.pe
node92.opennova.pe
node93.opennova.pe
node94.opennova.pe
...

Opción 02

[[email protected] ansible]$ pwd
/home/ansible/ansible

[[email protected] ansible]$ vim inventory
...
[deploy]
node9[1:4].opennova.pe
...

Opción 01

[[email protected] ansible]$ pwd
/home/ansible/ansible

[[email protected] ansible]$ vim inventory
...
[webservers]
node91.opennova.pe
node92.opennova.pe
...

Opción 02

[[email protected] ansible]$ pwd
/home/ansible/ansible

[[email protected] ansible]$ vim inventory
...
[webservers]
node9[1:2].opennova.pe
...
[[email protected] ansible]$ pwd
/home/ansible/ansible

[[email protected] ansible]$ vim inventory
...
[infra:children]
webservers
servers
...
  1. Verificar el inventario configurado de tal manera que se pueda validar los nodos y grupos configurados. Nota: como inicialmente las credenciales tanto para el usuario de conexión como para el usuario de escalamiento de privilegios es root utilizar esas credenciales iniciales.
[[email protected] ansible]$ ansible all --list-hosts
SSH password: <ingresar contraseña>
BECOME password[defaults to SSH password]: < ingresar contraseña>

[[email protected] ansible]$ ansible ungrouped --list-hosts
SSH password: <ingresar contraseña>
BECOME password[defaults to SSH password]: < ingresar contraseña>

[[email protected] ansible]$ ansible prod --list-hosts
SSH password: <ingresar contraseña>
BECOME password[defaults to SSH password]: < ingresar contraseña>

[[email protected] ansible]$ ansible dev --list-hosts
SSH password: <ingresar contraseña>
BECOME password[defaults to SSH password]: < ingresar contraseña>

[[email protected] ansible]$ ansible qa --list-hosts
SSH password: <ingresar contraseña>
BECOME password[defaults to SSH password]: < ingresar contraseña>

[[email protected] ansible]$ ansible deploy --list-hosts
SSH password: <ingresar contraseña>
BECOME password[defaults to SSH password]: < ingresar contraseña>

[[email protected] ansible]$ ansible webservers --list-hosts
SSH password: <ingresar contraseña>
BECOME password[defaults to SSH password]: < ingresar contraseña>

[[email protected] ansible]$ ansible servers --list-hosts
SSH password: <ingresar contraseña>
BECOME password[defaults to SSH password]: < ingresar contraseña>

[[email protected] ansible]$ ansible infra --list-hosts
SSH password: <ingresar contraseña>
BECOME password[defaults to SSH password]: < ingresar contraseña>
  1. Consultar los módulos disponibles en ansible y revisar el modulo ping para utilizarlo en pruebas de conectividad iniciales. Realizar la prueba de conectividad vía el modulo ping al grupo deploy.
[[email protected] ansible]$ ansible-doc -l

[[email protected] ansible]$ ansible-doc ping
[[email protected] ansible]$ ansible deploy -m ping
SSH password:
BECOME password[defaults to SSH password]:
node93.opennova.pe | SUCCESS => {
    "ansible_facts": {
        "discovered_interpreter_python": "/usr/libexec/platform-python"
    },
    "changed": false,
    "ping": "pong"
}
node94.opennova.pe | SUCCESS => {
    "ansible_facts": {
        "discovered_interpreter_python": "/usr/libexec/platform-python"
    },
    "changed": false,
    "ping": "pong"
}
node92.opennova.pe | SUCCESS => {
    "ansible_facts": {
        "discovered_interpreter_python": "/usr/libexec/platform-python"
    },
    "changed": false,
    "ping": "pong"
}
node91.opennova.pe | SUCCESS => {
    "ansible_facts": {
        "discovered_interpreter_python": "/usr/libexec/platform-python"
    },
    "changed": false,
    "ping": "pong"
}
  1. Validar que el modulo shell con el comando df -h se pueda ejecutar en los nodos del grupo deploy
[[email protected] ansible]$ ansible deploy -m shell -a "df -h"
SSH password:
BECOME password[defaults to SSH password]:

Configurar nodos administrados para trabajar con usuario ansible vía llaves ssh(Procedimiento manual clientes)

  1. Crear usuario ansible en el nodo administrado
[[email protected] ~]# useradd ansible
[[email protected] ~]# id ansible
uid=1000(ansible) gid=1000(ansible) groups=1000(ansible)

[[email protected] ~]# echo "redhat" | passwd --stdin ansible
  1. Configurarle permisos sudo al usuario ansible en el nodo administrador
[[email protected] ~]# echo "ansible ALL=(ALL)       NOPASSWD: ALL" > /etc/sudoers.d/ansible

[[email protected] ~]# cat /etc/sudoers.d/ansible
ansible ALL=(ALL)       NOPASSWD: ALL
  1. Copiar llaves ssh del usuario ansible del nodo de control hacia el usuario ansible del nodo administrado y validar que podamos logearnos sin contraseña.
[[email protected] ~]$ ssh-copy-id -i /home/ansible/.ssh/id_rsa.pub [email protected]
/usr/bin/ssh-copy-id: INFO: Source of key(s) to be installed: "/home/ansible/.ssh/id_rsa.pub"
/usr/bin/ssh-copy-id: INFO: attempting to log in with the new key(s), to filter out any that are already installed
/usr/bin/ssh-copy-id: INFO: 1 key(s) remain to be installed -- if you are prompted now it is to install the new keys
[email protected]'s password:

Number of key(s) added: 1

Now try logging into the machine, with:   "ssh '[email protected]'"
and check to make sure that only the key(s) you wanted were added.

[[email protected] ~]$ ssh '[email protected]'
Last login: Wed Oct 27 15:50:39 2021
[[email protected] ~]$ exit

Para validar la operación de prueba del procedimiento manual, modificar la configuración del /home/ansible/ansible/ansible.cfg del espacio de trabajo del usuario ansible como sigue: Cambiar de:

[[email protected] ansible]$ cat ansible.cfg
[defaults]
inventory = ./inventory
remote_user = root
ask_pass = True

[privilege_escalation]
become = True
become_method = sudo
become_user = root
become_ask_pass = True

A esta configuración:

[[email protected] ansible]$ cat ansible.cfg
[defaults]
inventory = ./inventory
remote_user = ansible
ask_pass = False

[privilege_escalation]
become = True
become_method = sudo
become_user = root
become_ask_pass = False

Posteriormente tratar de ejecutar el comando remoto df -h con el modulo shell en el grupo prod y validar que ahora no solicite credenciales.

[[email protected] ansible]$ ansible prod -m shell -a "df -h"

Una vez validado que el nodo de control puede ejecutar comandos remotos utilizando el usuario ansible como usuario de conexión sin contraseña y elevarse a root sin contraseña devolver la configuración de /home/ansible/ansible/ansible.cfg a su estado original para proceder a configurar todos los nodos del grupo deploy

Validar que la configuración quede como:

[[email protected] ansible]$ cat ansible.cfg
[defaults]
inventory = ./inventory
remote_user = root
ask_pass = True

[privilege_escalation]
become = True
become_method = sudo
become_user = root
become_ask_pass = True

Configurar nodos administrados para trabajar con usuario ansible vía llaves ssh(Procedimiento vía nodo de control)

Nota: Antes de comenzar validar que el usuario ansible y el archivo /etc/sudoers.d/ansible no existan en los nodos administrados. En este caso como estamos trabajando con el nodox1.opennova.pe, validar que no existan estos recursos.

[[email protected] ~]# userdel -r ansible
[[email protected] ~]# rm -rf /etc/sudoers.d/ansible
  1. En el nodo de control validar que el usuario ansible tenga el par de llaves ssh generadas. Este procedimiento lo debe ejecutar en su server0X, donde X es numero de su usuario asignado del 1 al 6.
[[email protected] ~]$ ls -l /home/ansible/.ssh/
total 12
-rw-------. 1 ansible ansible 2622 Oct 25 20:17 id_rsa
-rw-r--r--. 1 ansible ansible  582 Oct 25 20:17 id_rsa.pub
-rw-r--r--. 1 ansible ansible  776 Oct 25 20:55 known_hosts
  1. Inspeccionar y discutir la operación de los siguientes comando add-hoc, como prueba inicial utilizar el grupo prod como referencia de ejecución. Para este procedimiento inspeccionar los módulos user, shell, copy, authorized_key.
[[email protected] ansible]$ ansible-doc user
[[email protected] ansible]$ ansible prod -m user -a "name=ansible uid=1000 shell=/bin/bash state=present"
SSH password: <ingresar_contraseña>
BECOME password[defaults to SSH password]: <ingresar_contraseña>

[[email protected] ansible]$ ansible-doc shell
[[email protected] ansible]$ ansible prod -m shell -a "echo redhat | passwd --stdin ansible"
SSH password: <ingresar_contraseña>
BECOME password[defaults to SSH password]: <ingresar_contraseña>

[[email protected] ansible]$ ansible-doc copy
[[email protected] ansible]$ ansible prod -m copy -a "content='ansible ALL=(ALL) NOPASSWD: ALL' dest=/etc/sudoers.d/ansible"
SSH password: <ingresar_contraseña>
BECOME password[defaults to SSH password]: <ingresar_contraseña>

[[email protected] ansible]$ ansible-doc authorized_key
[[email protected] ansible]$ansible prod -m authorized_key -a "user=ansible state=present key={{ lookup('file', '/home/ansible/.ssh/id_rsa.pub') }}"
SSH password: <ingresar_contraseña>
BECOME password[defaults to SSH password]: <ingresar_contraseña>

Para validar la operación de prueba, modificar la configuración del /home/ansible/ansible/ansible.cfg del espacio de trabajo del usuario ansible como sigue: Cambiar de:

[[email protected] ansible]$ cat ansible.cfg
[defaults]
inventory = ./inventory
remote_user = root
ask_pass = True

[privilege_escalation]
become = True
become_method = sudo
become_user = root
become_ask_pass = True

A esta configuración:

[[email protected] ansible]$ cat ansible.cfg
[defaults]
inventory = ./inventory
remote_user = ansible
ask_pass = False

[privilege_escalation]
become = True
become_method = sudo
become_user = root
become_ask_pass = False

Posteriormente tratar de ejecutar el comando remoto df -h con el modulo shell en el grupo prod y validar que ahora no solicite credenciales.

[[email protected] ansible]$ ansible prod -m shell -a "df -h"

Una vez validado que el nodo de control puede ejecutar comandos remotos utilizando el usuario ansible como usuario de conexión sin contraseña y elevarse a root sin contraseña devolver la configuración de /home/ansible/ansible/ansible.cfg a su estado original para proceder a configurar todos los nodos del grupo deploy

Validar que la configuración quede como:

[[email protected] ansible]$ cat ansible.cfg
[defaults]
inventory = ./inventory
remote_user = root
ask_pass = True

[privilege_escalation]
become = True
become_method = sudo
become_user = root
become_ask_pass = True
  1. Crear en el espacio de trabajo /home/ansible/ansible un script en bash de nombre setup-adhoc.sh contenga lo siguiente:
[[email protected] ansible]$ vim setup-adhoc.sh
#!/bin/bash
#Create ansible user
ansible deploy -m user -a "name=ansible uid=1000 shell=/bin/bash state=present"

#Set ansible user password
ansible deploy -m shell -a "echo redhat | passwd --stdin ansible"

#Setup sudo privileges for ansible user
ansible deploy -m copy -a "content='ansible ALL=(ALL) NOPASSWD: ALL' dest=/etc/sudoers.d/ansible"

#Copy ssh key from ansible user in control node to ansible user in managed nodes
ansible deploy -m authorized_key -a "user=ansible state=present key={{ lookup('file', '/home/ansible/.ssh/id_rsa.pub') }}"
  1. Ejecutar y validar el correcto funcionamiento del script setup-adhoc.sh
[[email protected] ansible]$ bash setup-adhoc.sh
SSH password: <ingresar_contraseña>
BECOME password[defaults to SSH password]: <ingresar_contraseña>
node92.opennova.pe | CHANGED => {
    "ansible_facts": {
        "discovered_interpreter_python": "/usr/libexec/platform-python"
    },
    "changed": true,
    "comment": "",
    "create_home": true,
    "group": 1000,
    "home": "/home/ansible",
    "name": "ansible",
    "shell": "/bin/bash",
    "state": "present",
    "system": false,
    "uid": 1000
}
node94.opennova.pe | CHANGED => {
    "ansible_facts": {
        "discovered_interpreter_python": "/usr/libexec/platform-python"
    },
    "changed": true,
    "comment": "",
    "create_home": true,
    "group": 1000,
    "home": "/home/ansible",
    "name": "ansible",
    "shell": "/bin/bash",
    "state": "present",
    "system": false,
    "uid": 1000
}
node93.opennova.pe | CHANGED => {
    "ansible_facts": {
        "discovered_interpreter_python": "/usr/libexec/platform-python"
    },
    "changed": true,
    "comment": "",
    "create_home": true,
    "group": 1000,
    "home": "/home/ansible",
    "name": "ansible",
    "shell": "/bin/bash",
    "state": "present",
    "system": false,
    "uid": 1000
}
node91.opennova.pe | CHANGED => {
    "ansible_facts": {
        "discovered_interpreter_python": "/usr/libexec/platform-python"
    },
    "changed": true,
    "comment": "",
    "create_home": true,
    "group": 1000,
    "home": "/home/ansible",
    "name": "ansible",
    "shell": "/bin/bash",
    "state": "present",
    "system": false,
    "uid": 1000
}

SSH password: <ingresar_contraseña>
BECOME password[defaults to SSH password]: <ingresar_contraseña>
node91.opennova.pe | CHANGED | rc=0 >>
Changing password for user ansible.
passwd: all authentication tokens updated successfully.
node92.opennova.pe | CHANGED | rc=0 >>
Changing password for user ansible.
passwd: all authentication tokens updated successfully.
node94.opennova.pe | CHANGED | rc=0 >>
Changing password for user ansible.
passwd: all authentication tokens updated successfully.
node93.opennova.pe | CHANGED | rc=0 >>
Changing password for user ansible.
passwd: all authentication tokens updated successfully.

SSH password: <ingresar_contraseña>
BECOME password[defaults to SSH password]: <ingresar_contraseña>
node93.opennova.pe | CHANGED => {
    "ansible_facts": {
        "discovered_interpreter_python": "/usr/libexec/platform-python"
    },
    "changed": true,
    "checksum": "0e2acb1172a2aab3688a29dd3a644e77f3c6e53e",
    "dest": "/etc/sudoers.d/ansible",
    "gid": 0,
    "group": "root",
    "md5sum": "94f8e667bc58a8600e3f092631926055",
    "mode": "0644",
    "owner": "root",
    "secontext": "system_u:object_r:etc_t:s0",
    "size": 31,
    "src": "/root/.ansible/tmp/ansible-tmp-1635369761.0412073-14725-228162569873209/source",
    "state": "file",
    "uid": 0
}
node94.opennova.pe | CHANGED => {
    "ansible_facts": {
        "discovered_interpreter_python": "/usr/libexec/platform-python"
    },
    "changed": true,
    "checksum": "0e2acb1172a2aab3688a29dd3a644e77f3c6e53e",
    "dest": "/etc/sudoers.d/ansible",
    "gid": 0,
    "group": "root",
    "md5sum": "94f8e667bc58a8600e3f092631926055",
    "mode": "0644",
    "owner": "root",
    "secontext": "system_u:object_r:etc_t:s0",
    "size": 31,
    "src": "/root/.ansible/tmp/ansible-tmp-1635369761.038752-14726-12846207559701/source",
    "state": "file",
    "uid": 0
}
node91.opennova.pe | CHANGED => {
    "ansible_facts": {
        "discovered_interpreter_python": "/usr/libexec/platform-python"
    },
    "changed": true,
    "checksum": "0e2acb1172a2aab3688a29dd3a644e77f3c6e53e",
    "dest": "/etc/sudoers.d/ansible",
    "gid": 0,
    "group": "root",
    "md5sum": "94f8e667bc58a8600e3f092631926055",
    "mode": "0644",
    "owner": "root",
    "secontext": "system_u:object_r:etc_t:s0",
    "size": 31,
    "src": "/root/.ansible/tmp/ansible-tmp-1635369761.0361688-14722-40549305685145/source",
    "state": "file",
    "uid": 0
}
node92.opennova.pe | CHANGED => {
    "ansible_facts": {
        "discovered_interpreter_python": "/usr/libexec/platform-python"
    },
    "changed": true,
    "checksum": "0e2acb1172a2aab3688a29dd3a644e77f3c6e53e",
    "dest": "/etc/sudoers.d/ansible",
    "gid": 0,
    "group": "root",
    "md5sum": "94f8e667bc58a8600e3f092631926055",
    "mode": "0644",
    "owner": "root",
    "secontext": "system_u:object_r:etc_t:s0",
    "size": 31,
    "src": "/root/.ansible/tmp/ansible-tmp-1635369761.0319064-14723-201151924444824/source",
    "state": "file",
    "uid": 0
}

SSH password: <ingresar_contraseña>
BECOME password[defaults to SSH password]: <ingresar_contraseña>
node92.opennova.pe | CHANGED => {
    "ansible_facts": {
        "discovered_interpreter_python": "/usr/libexec/platform-python"
    },
    "changed": true,
    "comment": null,
    "exclusive": false,
    "follow": false,
    "key": "ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABgQCneAf/+wPKW09WT4Yfc9ot+oP2By4ovKjMg1G0bkE81wiehd+JNv/HwzwN5xxO1fPMhJ+yisYgCZm/kRHvX4xeuEfjCu3MriSviNpb5/HmVdi/7fhyLDLEjpkwQ8a32QscFp8e+kmDqeBzFSBX4ne4IhOYFNSQSYbqU9ST7MYCUQtRZkLRXx5eQ+EpmWnSTDbIx4RKjElNDgZj4p+ylP9sPQprcAIct1HsPWQvy7OuOS3OZAVQk0wwcQjZsgwjE2XN8R+QuKSTd/JgPMz0RHfIpcti2TWbqh/SlC6YrML4KEWS1wNks33vAadIx7aW9R2UWQviUHqkqfRmOsgpHPq3MbSB6ieMU1K2izjFeLvgAJTJ4eTp+armp7761Ht7w6CwIbubofJQ1SlqJ3vK4V6oz2oEyrXTspMmp8uOHnveIhoUZ26waDowQ00WFqhJ2RseBXzLT6MtSm0j5frDVTfQGwbYnjvpLr2Neraw7GW+uyYrr00kXXhQfS5AFvw55OM= [email protected]",
    "key_options": null,
    "keyfile": "/home/ansible/.ssh/authorized_keys",
    "manage_dir": true,
    "path": null,
    "state": "present",
    "user": "ansible",
    "validate_certs": true
}
node94.opennova.pe | CHANGED => {
    "ansible_facts": {
        "discovered_interpreter_python": "/usr/libexec/platform-python"
    },
    "changed": true,
    "comment": null,
    "exclusive": false,
    "follow": false,
    "key": "ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABgQCneAf/+wPKW09WT4Yfc9ot+oP2By4ovKjMg1G0bkE81wiehd+JNv/HwzwN5xxO1fPMhJ+yisYgCZm/kRHvX4xeuEfjCu3MriSviNpb5/HmVdi/7fhyLDLEjpkwQ8a32QscFp8e+kmDqeBzFSBX4ne4IhOYFNSQSYbqU9ST7MYCUQtRZkLRXx5eQ+EpmWnSTDbIx4RKjElNDgZj4p+ylP9sPQprcAIct1HsPWQvy7OuOS3OZAVQk0wwcQjZsgwjE2XN8R+QuKSTd/JgPMz0RHfIpcti2TWbqh/SlC6YrML4KEWS1wNks33vAadIx7aW9R2UWQviUHqkqfRmOsgpHPq3MbSB6ieMU1K2izjFeLvgAJTJ4eTp+armp7761Ht7w6CwIbubofJQ1SlqJ3vK4V6oz2oEyrXTspMmp8uOHnveIhoUZ26waDowQ00WFqhJ2RseBXzLT6MtSm0j5frDVTfQGwbYnjvpLr2Neraw7GW+uyYrr00kXXhQfS5AFvw55OM= [email protected]",
    "key_options": null,
    "keyfile": "/home/ansible/.ssh/authorized_keys",
    "manage_dir": true,
    "path": null,
    "state": "present",
    "user": "ansible",
    "validate_certs": true
}
node93.opennova.pe | CHANGED => {
    "ansible_facts": {
        "discovered_interpreter_python": "/usr/libexec/platform-python"
    },
    "changed": true,
    "comment": null,
    "exclusive": false,
    "follow": false,
    "key": "ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABgQCneAf/+wPKW09WT4Yfc9ot+oP2By4ovKjMg1G0bkE81wiehd+JNv/HwzwN5xxO1fPMhJ+yisYgCZm/kRHvX4xeuEfjCu3MriSviNpb5/HmVdi/7fhyLDLEjpkwQ8a32QscFp8e+kmDqeBzFSBX4ne4IhOYFNSQSYbqU9ST7MYCUQtRZkLRXx5eQ+EpmWnSTDbIx4RKjElNDgZj4p+ylP9sPQprcAIct1HsPWQvy7OuOS3OZAVQk0wwcQjZsgwjE2XN8R+QuKSTd/JgPMz0RHfIpcti2TWbqh/SlC6YrML4KEWS1wNks33vAadIx7aW9R2UWQviUHqkqfRmOsgpHPq3MbSB6ieMU1K2izjFeLvgAJTJ4eTp+armp7761Ht7w6CwIbubofJQ1SlqJ3vK4V6oz2oEyrXTspMmp8uOHnveIhoUZ26waDowQ00WFqhJ2RseBXzLT6MtSm0j5frDVTfQGwbYnjvpLr2Neraw7GW+uyYrr00kXXhQfS5AFvw55OM= [email protected]",
    "key_options": null,
    "keyfile": "/home/ansible/.ssh/authorized_keys",
    "manage_dir": true,
    "path": null,
    "state": "present",
    "user": "ansible",
    "validate_certs": true
}
node91.opennova.pe | CHANGED => {
    "ansible_facts": {
        "discovered_interpreter_python": "/usr/libexec/platform-python"
    },
    "changed": true,
    "comment": null,
    "exclusive": false,
    "follow": false,
    "key": "ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABgQCneAf/+wPKW09WT4Yfc9ot+oP2By4ovKjMg1G0bkE81wiehd+JNv/HwzwN5xxO1fPMhJ+yisYgCZm/kRHvX4xeuEfjCu3MriSviNpb5/HmVdi/7fhyLDLEjpkwQ8a32QscFp8e+kmDqeBzFSBX4ne4IhOYFNSQSYbqU9ST7MYCUQtRZkLRXx5eQ+EpmWnSTDbIx4RKjElNDgZj4p+ylP9sPQprcAIct1HsPWQvy7OuOS3OZAVQk0wwcQjZsgwjE2XN8R+QuKSTd/JgPMz0RHfIpcti2TWbqh/SlC6YrML4KEWS1wNks33vAadIx7aW9R2UWQviUHqkqfRmOsgpHPq3MbSB6ieMU1K2izjFeLvgAJTJ4eTp+armp7761Ht7w6CwIbubofJQ1SlqJ3vK4V6oz2oEyrXTspMmp8uOHnveIhoUZ26waDowQ00WFqhJ2RseBXzLT6MtSm0j5frDVTfQGwbYnjvpLr2Neraw7GW+uyYrr00kXXhQfS5AFvw55OM= [email protected]",
    "key_options": null,
    "keyfile": "/home/ansible/.ssh/authorized_keys",
    "manage_dir": true,
    "path": null,
    "state": "present",
    "user": "ansible",
    "validate_certs": true
}
  1. Para validar la operación, modificar la configuración del /home/ansible/ansible/ansible.cfg del espacio de trabajo del usuario ansible como sigue: Cambiar de:
[[email protected] ansible]$ cat ansible.cfg
[defaults]
inventory = ./inventory
remote_user = root
ask_pass = True

[privilege_escalation]
become = True
become_method = sudo
become_user = root
become_ask_pass = True

A esta configuración:

[[email protected] ansible]$ cat ansible.cfg
[defaults]
inventory = ./inventory
remote_user = ansible
ask_pass = False

[privilege_escalation]
become = True
become_method = sudo
become_user = root
become_ask_pass = False

Posteriormente tratar de ejecutar el comando remoto df -h con el modulo shell en el grupo deploy y validar que ahora no solicite credenciales.

[[email protected] ansible]$ ansible deploy -m shell -a "df -h"

Con esto ya tenemos el setup inicial de nuestro laboratorio configurado para ejecutar tareas de configuración.

Laboratorio: Setup Inicial Ansible

NOTA:

[[email protected] ansible]$ ansible -m ping prod
SSH password:
BECOME password[defaults to SSH password]:
node91.opennova.pe | FAILED! => {
    "msg": "Using a SSH password instead of a key is not possible because Host Key checking is enabled and sshpass does not support this.  Please add this host's fingerprint to your known_hosts file to manage this host."
}

Debe establecer la conexión ssh inicial desde el nodo de control hacia los nodos administrador como indica el punto 5. de la seccion Configurar espacio de trabajo y recursos en el nodo de control

Requerimientos:

  1. Instalar y/o Actualizar Python en el nodo de control.
  2. Instalar ansible en el nodo de control asignado.
  3. Instalar y/o Actualizar Python en los nodos administrados.
  4. En el nodo de control realizar lo siguiente:
  1. Al inventario agregarle los siguientes grupos:
  1. Listar los host que pertenecen a los grupos: prod, dev, qa, webservers, deploy, servers, infra, all y ungrouped y verificar que estan de acorde al inventario.
  2. Para el nodoX1.opennova.pe realizar el procedimiento de Configurar nodos administrados para trabajar con usuario ansible vía llaves ssh(Procedimiento manual clientes).
  3. Para los nodos del grupo deploy realizar el procedimiento de Configurar nodos administrados para trabajar con usuario ansible vía llaves ssh(Procedimiento vía nodo de control).
  4. Al final de este punto usted deberá tener su ambiente de ansible configurado de tal modo que el usuario de conexión hacia todos los nodos sea ansible sin solicitud de contraseña y el usuario de escalamiento de privilegios sea root sin solicitud de contaseña. Al ejecutar estos comando en sus nodos de control correspondientes, todos los nodos administrados deberían responder sin solicitar contraseña.
[[email protected] ansible]$ ansible deploy -m ping 
[[email protected] ~]# ansible deploy -m shell -a "df -h"