Introducción
Ansible es una herramienta de administración de sistemas que permite la administración de múltiples dispositivos desde un dispositivo central. Se compara con herramientas como Puppet o Chef, pero mientras que esos paquetes requieren la instalación de agentes en los sistemas cliente, Ansible opera pasando comandos a través de ssh sin necesidad de agentes en absoluto. Echaremos un vistazo a algunas de las tareas administrativas que Ansible es capaz de hacer para que pueda tener una mejor idea de si Ansible podría ser adecuado para usted.
.
Requisitos
- Un dispositivo de control Linux, BSD u OSX.
- acceso ssh (cortafuegos y credenciales) a los dispositivos cliente desde su dispositivo de control. Ansible prefiere el uso de claves ssh para acceder a los dispositivos de los clientes, pero también le mostraremos opciones usando nombre de usuario y contraseña.
- Python 2.6 o 2.7 instalado en el dispositivo de control.
.
Instalación
Ansible está disponible a través de los administradores de paquetes de las principales distribuciones de Linux/BSD/OSX. También está disponible a través del instalador pip de Python.
CentOS/Fedora:
sudo yum install ansible
Ubuntu (primero deberá agregar el PPA de Ansible):
sudo apt-get install software-properties-common sudo apt-add-repository ppa:ansible/ansible sudo apt-get update sudo apt-get install ansible
Arch Linux:
pacman -S ansible
FreeBSD:
sudo pkg install ansible
Administrador de paquetes de Python, pip (los usuarios de OSX también pueden instalar con pip):
sudo pip install ansible
Configuración del acceso a clientes de Ansible
Anfitriones
Uno de los beneficios de usar Ansible es la capacidad de administrar varios clientes desde un dispositivo de control, desde la misma interfaz de terminal. Puede especificar varios grupos de servidores de clientes según la función, la ubicación o el sistema operativo creando grupos en /etc/ansible/hosts
archivo.
[mailservers] smtp.orl-fl.example.com smtp.dal-tx.example.com [db_servers] db.orl-fl.example.com db.sfo-ca.example.com [orlando] smtp.orl-fl.example.com db.orl-fl.examle.com [nameservers] ns[01:12].example.com
Un nombre entre corchetes []
define un nombre de grupo e incluye hosts en la lista que le sigue. También puede indicar un rango secuencial dentro de un patrón de nombre de host con corchetes y dos puntos, como en ns[01:12].example.com
arriba.
Un cliente puede existir en varios grupos. El nombre del grupo funciona como un alias para la lista de grupos, lo que facilita la referencia a qué grupo de servidores se dirigirá con su comando o playbook de Ansible en particular.
.
Teclas ssh
Ansible funciona mejor cuando su servidor de control, desde el cual ejecutará los comandos de Ansible, puede usar claves ssh para acceder a los hosts de los clientes. Cuando ejecuta un comando de Ansible sin opciones adicionales, por defecto intenta acceder a clientes remotos a través de claves ssh.
Sugerencia:si ha asegurado su clave ssh privada con una frase de contraseña, puede ser inconveniente e ineficiente tener que ingresar esa frase de contraseña cada vez que necesite descifrarla para cada sesión de ssh que abrirá con Ansible. Para simplificar este proceso, abra un shell separado con ssh-agent
. Cuando importa una clave privada en este shell, solo tiene que ingresar su frase de contraseña una vez para agregar la clave privada sin cifrar.
ssh-agent bash
ssh-add ~/.ssh/id_rsa
El primer comando abre un nuevo shell bash. El ssh-add
El comando le solicitará la frase de contraseña de su clave privada y luego importará la clave privada RSA a este shell. Por supuesto, puede sustituir la clave privada adecuada si usa id_ecdsa
o id_dsa
, por ejemplo.
.
.
Acceso ssh (sin claves ssh)
Si tiene servidores de clientes que no tienen claves ssh configuradas, aún puede usar Ansible con su usuario actual y solicitar su contraseña de usuario. Por ejemplo, podríamos querer usar el ping
para verificar que todos nuestros hosts en db_servers
el grupo responde.
ansible db_servers -m ping --ask-pass
Este comando primero solicitará la contraseña ssh del usuario actual para acceder a todos los servidores en db_servers
grupo antes de ejecutar el módulo en cada cliente.
Nota:este comando requerirá que su usuario exista en cada cliente, tenga acceso ssh y use la misma contraseña.
Además, el ping
El módulo no está relacionado con el ping ICMP que prueba la conectividad de la red. Su uso con el ansible
El comando verifica que se pueda acceder a un servidor cliente con el usuario indicado y que el servidor cliente tenga una versión de Python con la que Ansible pueda trabajar. El ping
el módulo debería devolver un pong
respuesta al completar con éxito..
.
Acceso ssh (con contraseña)
Los comandos predeterminados de Ansible también suponen que, además de usar claves ssh, está usando sudo sin contraseña. Si tiene servidores de clientes que requieren una contraseña para obtener acceso a sudo, puede usar opciones adicionales para convertirse en sudo y solicitar una contraseña de sudo. Entonces, por ejemplo, para reiniciar todos los servidores en los mailservers
grupo usando el nombre de usuario username
.
ansible mailservers -a "/sbin/reboot" -u username --become --ask-become-pass
El --become
indica que el usuario se convertirá en un usuario privilegiado (sudo), y el --ask-become-pass
La opción solicita a Ansible que solicite la contraseña para convertirse en ese usuario privilegiado antes de ejecutar el comando.
El --become
y --ask-become-pass
Las opciones son opciones más nuevas (a partir de la versión 1.9 de Ansible) destinadas a reemplazar el antiguo --sudo
y --ask-sudo-pass
(-K
) opciones, respectivamente. Estas versiones anteriores todavía funcionan. El reemplazo de sudo
para become
amplía el alcance de estas opciones para incluir la integración con herramientas que utilizan medios distintos de sudo
para habilitar la escalada de privilegios.
.
Algunos comandos básicos de la CLI de Ansible
Si bien el poder real de Ansible radica en el uso de libros de jugadas, también puede ejecutar ansible
comando para realizar una administración rápida de clientes para casos en los que no tiene sentido crear un libro de jugadas o en los que es posible que necesite enviar un solo comando a un grupo de dispositivos cliente.
El ansible
El comando sigue el patrón ansible [group] OPTIONS
.
.
Ejecutar actualizaciones de Yum
Si, por ejemplo, desea ejecutar actualizaciones de yum en los servidores de sus mailservers
grupo, puede realizar esta tarea con el siguiente comando de Ansible:
ansible mailservers -m yum -a "name=* state=latest" --become
Este comando actualiza todos los servidores en mailservers
grupo con el yum
módulo (-m
). El -a
La opción indica un argumento particular entre comillas dobles; en este caso, actualizar todos los paquetes instalados (usando el *
comodín) a su último estado.
.
Copiar archivo a clientes
Puede utilizar Ansible para distribuir un archivo a un grupo de servidores cliente.
ansible orlando -m copy -a "src=/home/scripts/foo.sh dest=/opt/scripts/foo.sh"
Este comando invoca la copy
módulo e indica el src
(fuente) y dest
(destino) entre comillas para los argumentos. La ubicación de origen predeterminada es el dispositivo en el que se ejecuta este comando de Ansible y puede ser absoluta o relativa. La ubicación de destino es la ubicación en el dispositivo cliente remoto y siempre debe ser absoluta.
También puede usar la copy
módulo para refinar aún más los atributos del archivo que está copiando.
ansible orlando -m copy -a "src=/home/scripts/foo.sh dest=/opt/scripts/foo.sh owner=foo group=bar mode=0755"
Este comando también cambia los permisos de propietario, grupo y archivo del archivo en cada cliente en orlando
grupo.
.
Ejecutar comando de shell
También puede ejecutar un script en cada cliente con el shell
módulo.
ansible orlando -m shell -a '/opt/scripts/foo.sh >> /home/foo/bar.txt'
Este comando ejecutaría foo.sh
script y redirige su salida a /home/foo/bar.txt
expediente. Tenga en cuenta las comillas simples aquí. Necesitará comillas simples en lugar de dobles para poder pasar el >>
operador al shell remoto.
.
Un amuse-bouche de Ansible
Hay muchos más comandos y módulos que puede usar, pero esta muestra debería proporcionar una buena introducción a lo útil que puede ser Ansible si administra incluso una pequeña cantidad de servidores. Si se encuentra en la posición a veces poco envidiable de tener que realizar tareas repetitivas en la infraestructura de su servidor, esperamos que estos ejemplos le hayan dado una idea de cómo Ansible puede ayudarlo a trabajar de manera más inteligente (¡y más eficiente!).
Asegúrese de volver a consultarnos en el futuro para obtener más artículos sobre la administración del servidor y otras cosas que puede hacer con Ansible. Atlantic.Net ofrece una amplia colección de soluciones flexibles de alojamiento de VPS para una pequeña empresa emergente o una empresa empresarial bien establecida.
.
.