Configuración de Ansible | Activar administrador del sistema

En un artículo anterior, hablé Sombrero rojo de Ansible basics e instaló Ansible, creando un nodo de control llamado RHEL8 y cuatro nodos gestionados (node1, node2, node3, y node4), todos con Red Hat Enterprise Linux. Ahora, para que Ansible se comunique con un nodo administrado, debe configurar el nodo de control y los nodos administrados con una cuenta de usuario y otorgar a esa cuenta de usuario privilegios elevados para ejecutar comandos sin escribir la contraseña.

Agregue una cuenta de usuario a todos los nodos administrados (node1, node2, node3, y node4) y el nodo de control (RHEL8). Para simplificar las cosas en este ejemplo, voy a crear un ansible cuenta de usuario, agregue el ansible usuario en el wheel grupo, luego configure la autenticación SSH.

Índice

Cuentas de usuario

Al configurar una nueva cuenta de usuario (en este caso, el ansible usuario), cree la cuenta en todos los nodos:

[[email protected] ~]$ sudo useradd ansible

Luego agrega el ansible usuario en el wheel grupo:

[[email protected] ~]$ sudo usermod -aG wheel ansible

Establecer una contraseña para el ansible usuario para que pueda iniciar sesión como este usuario:

[[email protected] ~]$ sudo passwd ansible
Changing password for user ansible.
New password:
Retype new password:
passwd: all authentication tokens updated successfully. 

Luego configure el ansible usuario para elevación de privilegios sin contraseña usando /etc/sudoers archivar:

%wheel ALL=(ALL) NOPASSWD: ALL

Una vez que haya creado el nuevo ansible usuario en todos los nodos administrados y de control, genere una clave SSH en el nodo de control y luego copie la clave SSH pública en todos los nodos administrados. En este ejemplo, estoy usando los valores predeterminados al configurar SSH:

[[email protected] ~]$ sudo su - ansible
[[email protected] ~]$ ssh-keygen
Generating public/private rsa key pair.
Enter file in which to save the key (/home/ansible/.ssh/id_rsa):
Created directory '/home/ansible/.ssh'.
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /home/ansible/.ssh/id_rsa.
Your public key has been saved in /home/ansible/.ssh/id_rsa.pub.
The key fingerprint is:
SHA256:saD6SI4u47J50N5UmV2UfpZcXhbW6UzhrDH4ksr2z4w [email protected]
The key's randomart image is:
+---[RSA 2048]----+
| ... +=|
| o . =o+|
| .+.o o *+= |
| .+..o. B =o |
| . .. S = o |
|. ... . . . |
| ooo + |
|+=oo. . . + |
|O*o . E.+ |
+----[SHA256]-----+

Ahora copie la clave pública SSH a todos los nodos administrados, lo que permite que ansible el usuario se conecta a todos los hosts administrados sin tener que ingresar una contraseña:

[[email protected] ~]$ ssh-copy-id [email protected]
/usr/bin/ssh-copy-id: INFO: Source of key(s) to be installed: "/home/ansible/.ssh/id_rsa.pub"
The authenticity of host 'node1.example.com (3.15.137.216)' can't be established.
ECDSA key fingerprint is SHA256:SJMRfA1B8NDEA9BwxE6aiPs30YGS+Sp1eBRtocyK5sY.
Are you sure you want to continue connecting (yes/no)? yes
/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 are added.  

[[email protected] ~]$

Archivos de configuración

El archivo de configuración predeterminado de Ansible se encuentra en /etc/ansible/ansible.cfg. La mayoría de las configuraciones de Ansible se pueden cambiar con este archivo de configuración para adaptarse a las necesidades de su entorno, pero las configuraciones predeterminadas deberían satisfacer la mayoría de los casos de uso. De cualquier manera, es útil saber dónde busca Ansible los archivos de configuración.

Ansible busca archivos de configuración en el siguiente orden, procesa el primer archivo que encuentra e ignora el resto:

  1. $ANSIBLE_CONFIG si la variable de entorno está establecida.
  2. ansible.cfg si está en el directorio actual.
  3. ~/.ansible.cfg si está en el directorio de inicio del usuario.
  4. /etc/ansible/ansible.cfg, el archivo de configuración predeterminado.

El archivo de inventario predeterminado está dentro /etc/ansible/hosts, pero esta ubicación se puede cambiar en el archivo de configuración. También puede especificar el archivo de inventario para usar con el -i cambiar.

Su archivo de inventario se ve así:

[nodes]

node1.example.com
node2.example.com
node3.example.com
node4.example.com

[webservers]
node2.example.com
node3.example.com

Se recomienda especificar diferentes archivos host para diferentes proyectos.

Comandos ansible ad hoc

Un comando ad hoc es un comando que puede ejecutar para realizar una tarea rápida, pero que no utilizará en el futuro inmediato. Para apreciar los comandos ad hoc de Ansible y ayudarlo a usar Ansible de manera más eficiente, considere algunas opciones esenciales de la línea de comandos de Ansible:

OpciónLa descripcion
-b, --becomeEjecute el comando con privilegios (no pide contraseña).
-mEspecifique el nombre del módulo a utilizar.
-a, --argsInserte los argumentos del módulo.
-uInicie sesión como un usuario diferente.
-h, --helpVer contenido de ayuda.
-v, --verboseEjecute comandos en modo detallado.

Se puede encontrar una lista completa de las opciones de la línea de comandos de Ansible aquí. Ahora mira algunos ejemplos.

Verificación de la conectividad con comandos ad hoc

Para verificar la conectividad con los hosts administrados mediante ping módulo:

[[email protected] ~]$ ansible all -m ping

En el comando anterior, all especifica que Ansible debe ejecutar este comando en todos los hosts. Aquí está la respuesta a este comando:

[[email protected] ~]$ ansible all -m ping
node2.example.com | SUCCESS => {
    "ansible_facts": {
        "discovered_interpreter_python": "/usr/bin/python"
    },
    "changed": false,
    "ping": "pong"
}
node1.example.com | SUCCESS => {
    "ansible_facts": {
        "discovered_interpreter_python": "/usr/bin/python"
    },
    "changed": false,
    "ping": "pong"
}
node3.example.com | SUCCESS => {
    "ansible_facts": {
        "discovered_interpreter_python": "/usr/bin/python"
    },
    "changed": false,
    "ping": "pong"
}
node4.example.com | SUCCESS => {
    "ansible_facts": {
        "discovered_interpreter_python": "/usr/bin/python"
    },
    "changed": false,
    "ping": "pong"
}
[[email protected] ~]$

Gestión de paquetes con comandos ad-hoc

Con los comandos ad hoc de Ansible, también puede instalar paquetes de software en sus hosts administrados. Todo lo que necesita emitir es una línea para instalar un solo paquete en un grupo de hosts administrados.

instalar apache httpd servidor en su webservers grupo de hosts administrados:

[[email protected] ~]$ ansible webservers -m yum -a "name=httpd state=present" -b

Gestión de servicios con comandos ad hoc

Ya que ha instalado Apache con éxito httpd servidor en el último paso, vea cómo puede usar los comandos ad hoc de Ansible para iniciar y activar el httpd servicio, por lo que su apache httpd el servidor web está operativo.

Para activar un servicio, emita:

[[email protected] ~]$  ansible webservers -b -m service -a "name=httpd enabled=yes"

Para iniciar, reiniciar y detener un servicio, cambie el valor del argumento de estado a started para iniciar el servicio, restarted para reiniciar un servicio, y stopped para detener un servicio:

[[email protected] ~]$  ansible webservers -b -m service -a "name=httpd state=started"

Los comandos ad hoc de Ansible son excelentes y adecuados para realizar una sola tarea. Se puede encontrar una lista completa de módulos aquí.

Libros de jugadas

Los libros de jugadas de Ansible son una forma poderosa de usar Ansible. A diferencia de los comandos ad hoc de Ansible, los playbooks de Ansible se pueden guardar y reutilizar.

Los libros de jugadas se definen en YAML no es un lenguaje de marcas (YAML). Cada libro de jugadas se compone de uno o más. El objeto de los juegos es asignar tareas a un grupo de hosts. Cada juego consta de una o más tareas, y estas tareas se realizan una a la vez.

Aquí hay un Ansible simple httpd.yaml libro de jugadas para instalar apache httpd servidor en el webservers grupo:

---
- hosts: webservers
  remote_user: ansible
  tasks:
  - name: Ensure apache is installed and updated
    yum:
      name: httpd
      state: latest
    become: yes

 

Para ejecutar este playbook de Ansible, ejecute el siguiente comando en el formato:

[[email protected] ~]$ ansible-playbook -i <hostfile> <playbook.yaml>

Dado que está utilizando el archivo de hosts predeterminado (/etc/ansible/hosts), puede ignorar -i flag y simplemente emita el comando en el formato:

[[email protected] ~]$ ansible-playbook <playbook.yaml>

Entonces, para este ejemplo:

[[email protected] ~]$ ansible-playbook httpd.yaml

PLAY [webservers] *************************************************************************************************

TASK [Gathering Facts] ********************************************************************************************
ok: [node2.example.com]
ok: [node3.example.com]

TASK [Ensure apache is installed and updated] *********************************************************************
changed: [node2.example.com]
changed: [node3.example.com]

PLAY RECAP ********************************************************************************************************
node2.example.com : ok=2 changed=1 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0
node3.example.com : ok=2 changed=1 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0

[[email protected] ~]$

Los playbooks son poderosos cuando necesita realizar múltiples tareas en diferentes grupos de hosts administrados. Para mostrar cómo puede usar más que comandos ad hoc, use un libro de jugadas para:

  1. Instalarlo httpd servidor.
  2. Activar y poner en marcha el httpd departamento en su webservers grupo de hosts gestionados.
  3. Instalar git a all hosts gestionados.

El libro de jugadas podría verse así:

---
- hosts: webservers
  remote_user: ansible
  become: yes
  tasks:
  - name: Installing apache
    yum:
      name: httpd
      state: latest
  - name: Enabling httpd service
    service:
      name: httpd
      enabled: yes
    notify:
      - name: restart httpd
  handlers:
  - name: restart httpd
    service:
      name: httpd
      state: restarted

- hosts: all
  remote_user: ansible
  become: yes
  tasks:
  - name: Installing git
    yum:
      name: git
      state: latest

En el ejemplo anterior, ha realizado dos jugadas en un libro de jugadas. Aprender más acerca de Manuales de Ansible aquí.

Conclusión

Ansible es simple, fácil de configurar y potente. Ansible no tiene agentes, lo que facilita que un administrador del sistema comience con la automatización y dedique menos tiempo a la configuración. Con esta herramienta, todos los administradores de sistemas, independientemente de su nivel de experiencia, pueden comenzar a automatizar su infraestructura en horas o incluso minutos. La facilidad de uso y el sólido conjunto de herramientas hacen de Ansible una plataforma de automatización muy deseable para aprender.

Artículos de interés

Subir