Skip to main content

Cerca

Elementi taggati con: ansible


 

Controlando módulos en Ansible [Ansible #4]





#ansible #apt #modulos

* ¿Qué es y para que sirve Ansible? [Ansible #0]

* Instalación de Ansible en GNU/Linux [Ansible #1]

* El inventario en Ansible [Ansible #2]

* Comandos básicos en Ansible [Ansible #3]

En el anterior capítulo, hablamos sobre los Comandos básicos en Ansible y aprendimos que se podían utilizar módulos. Incluso usamos un módulo muy básico como el de ping.

Existen módulos para absolutamente todo. Y evidentemente, no los vamos a ver todos, pero si que vamos a ver algunos interesantes y sobretodo vamos a ver como encontrar esos módulos.

Como todo en esta vida -de informático- es importante saber donde están las documentaciones de las herramientas que vamos a utilizar. La de Ansible es maravillosa y muy completa. Pero por ahora nos vamos a fijar en la documentación de los módulos ordenados por categorías.

Si vemos el listado de módulos por categorías, vemos que hay prácticamente de todo. Módulos para Cloud, módulos para clusters, módulos para criptomonedas, módulos para monitorización, módulos de red, etc.

Muchos módulos. Os recomiendo que os perdáis un poco por la lista de módulos, a la categoría que más os llame la atención y veáis la cantidad ingesta de módulos que hay.

Módulos, módulos… ¡Módulos!


En el anterior capítulo llegamos a ejecutar varios comandos, y es que podemos ejecutar un solo comando para que haga cualquier cosa por shell:
ansible db.voidnull.es -a 'uname -a'
La respuesta que obtendremos será la siguiente:
db.voidnull.es | success | rc=0 >>

Linux ansible 4.15.0-20-generic #21-Ubuntu SMP Tue Apr 24 06:16:15 UTC 2018 x86_64 x86_64 x86_64 GNU/Linux

Si os habéis fijado en el comando que hemos ejecutado, no hay el parámetro -m para indicar el módulo que hay que usar. Cuando no se indica el módulo, por defecto Ansible selecciona un módulo llamado Shell.


Documentación para el módulo Shell

Para cada módulo existe su documentación muy bien explicada. Como en los manuales de los comandos de GNU/Linux, tenemos un resumen de la función del módulo, la estructura sintáctica del módulo -si, la sinopsis-, y luego los parámetros que podemos utilizar. Además de notas, ejemplos de uso, etc.

Pero vamos a ir un poco más lejos. Imaginemos que queremos instalar un paquete en nuestro servidor. Lo lógico sería acceder por SSH al servidor y ejecutar un apt-get install, ¿Verdad?

Con Ansible, podemos utilizar un módulo llamado APT que permite instalar paquetes usando el gestor de paquetes de Debian.

Si entramos en su página de documentación, veremos que hay una serie de parámetros para utilizar que pueden ser muy interesantes:
  • name: para indicar el nombre de paquete.
  • state: Nos indica el estado actual del paquete y tiene diferentes opciones: latest, absent, present, build-dep. O dicho de otro modo: en su última versión, sin instalar, instalado, o que las dependencias estén instaladas.
  • update_cache: Esto permite ejecutar un apt-get update antes de procesar su instalación.
Dicho esto, vamos a ver un caso práctico que siempre se entiende mejor:
ansible voidnull.es -m apt -a 'name=nmap state=present'
¿Que significado tiene este comando? Pues le estamos indicando a ansible, que en el servidor voidnull.es utilice el módulo apt y que ejecute el comando con las siguientes opciones: instalar (present) el paquete con el nombre (name) nmap. ¿Sencillo verdad?

Y esta es la salida que nos da el comando:
voidnull.es | success >> {

"changed": true,

"stderr": "",

"stdout": "Reading package lists...\n

Building dependency tree...\n

Reading state information...\n

Suggested packages:\n ndiff\n

The following NEW packages will be installed:\n nmap\n0 upgraded, 1 newly installed, 0 to remove and 135 not upgraded.\n

Need to get 0 B/5174 kB of archives.\n

After this operation, 24.0 MB of additional disk space will be used.\n

Selecting previously unselected package nmap.\r\n

(Reading database ... \r

(Reading database ... 5%\r

(Reading database ... 10%\r

(Reading database ... 15%\r

(Reading database ... 20%\r

(Reading database ... 25%\r

...

(Reading database ... 90%\r

(Reading database ... 95%\r

Reading database ... 100%\r

(Reading database ... 67375 files and directories currently installed.)\r\n

Preparing to unpack .../nmap_7.60-1ubuntu5_amd64.deb ...\r\nUnpacking nmap (7.60-1ubuntu5) ...\r\n

Setting up nmap (7.60-1ubuntu5) ...\r\n

Processing triggers for man-db (2.8.3-2) ...\r\n"

}

Este comando lo he ejecutado como usuario root, porque las claves de SSH que he compartido han sido para ese usuario. Pero, ¿Qué sucede si esto lo ejecutamos con un usuario diferente a root? Pues seguramente tengáis un error, ya que vuestro usuario no tendrá permisos para instalar el paquete.

En el caso que queramos ejecutar un comando desde Ansible y necesitemos ser root, podemos ejecutar el comando con el parámetro -b. Este parámetro transforma el comando que vamos a ejecutar en nuestro servidor y le añade un sudo delante. También tendremos que añadir otro parámetro para que nos pida la contraseña -Kansible voidnull.es -m apt -a 'name=nmap state=present' -b -K

SUDO password:

Si volvemos a ejecutar el comando para instalar nmap en nuestro servidor, como que ya tiene ese paquete instalado, no nos mostrará ningún error. Más que nada porque la salida será success y tiene su sentido:
voidnull.es | success >> {

"changed": false

}

El parámetro changed es false, y básicamente Ansible nos está diciendo “En tu servidor, no ha cambiado absolutamente nada, porque el paquete nmap ya lo tienes instalado, así, que no voy a ejecutar apt-get install nmap“.

La entrada Controlando módulos en Ansible [Ansible #4] se publicó primero en _ voidNull.
Controlando módulos en Ansible [Ansible #4]

 

¿Qué se cuece en el mundo IT en este 2018?


https://www.ochobitshacenunbyte.com/2018/08/20/que-se-cuece-en-el-mundo-it-en-este-2018

#amazon #ansible #aws #cloud #docker #google cloud #kubernetes #machine learning #noticias #proxmox #puppet #sysadmin #vmware #windows azure #xen

 

Comandos básicos en Ansible [Ansible #3]


#ansible #comandos basicos

Tras el tutorial anterior El inventario en Ansible [Ansible #2], ya deberíais de tener vuestro Inventario preparado para ser usado. Ahora vamos a aprender algunos comandos básicos que podemos hacer con Ansible.

En Ansible la manera que tenemos de interactuar con nuestro servidor es mediante Tareas -¿Os acordáis de esta palabra?- Una Tarea o Task es una función que Ansible debe de realizar en tu servidor o servidores. Dichas tareas son declarativas, es decir, nosotros no escribimos nunca comandos en bash ni nada por el estilo. Nosotros declaramos que queremos hacer en ese servidor, si queremos instalar un Nginx, un Tomcat, Postfix, etc. Y Ansible se encargará de aprovisionar ese servidor tal y como le hemos pedido.

Estas Tareas las apuntaremos en nuestro Playbook, que no dejarán de ser otros ficheros donde nosotros apuntaremos como debe de aprovisionarse el servidor. Por ejemplo, si nosotros hacemos una tarea que se llama “Se tiene que instalar Apache” Ansible mirará si en ese servidor ya está aprovisionado ese servicio, y en el caso de que no lo esté, hará todo lo necesario para aprovisionarlo. Y si ya está el servicio instalado, pasará a la siguiente tarea.

Aún así, de momento no vamos a ver esos PlayBooks, ya que es algo que hablaremos más adelante, por ahora, hablaremos de los comandos básicos que podemos ejecutar con Ansible y que manera tenemos para enviar una tarea usando Ansible.

Comandos básicos


Si por ejemplo queremos saber si un host en concreto está activo podemos hacer lo siguiente:
ansible db.voidnull.es -m ping
Con esto le decimos a Ansible que mire si ese nombre de host está activo haciendo un ping y su respuesta es el siguiente:
db.voidnull.es | SUCCESS => {

“changed”: false,

“ping”: “pong”

}

La sintaxis de las respuestas de los comandos en Ansible siempre son así, al más puro estilo JSON. Si son en color verde significa que todo ha ido bien y si son de color rojo es que algo no ha ido bien. Por un lado tenemos el nombre del host al que hemos preguntado (db.voidnull.es) y luego tenemos un SUCCESS, que significa que la operación ha sido un éxito, en caso contrario tendríamos un FAILED! -y el texto en rojo-.

Luego tendríamos dos parámetros, el primero, changed significa si el comando ejecutado ha realizado algún cambio en el servidor. Como que en este caso era un simple ping, pues no ha realizado ningún cambio y por eso pone false. Y luego tenemos otro que es ping *que es el comando que hemos enviado y el servidor nos ha respondido con un *pong.

Pero vamos a ver algo más del comando que hemos ejecutado para que nos diera esta salida. Hemos ejecutado Ansible con la opción -m ping, -m significa module -módulo-, y es que Ansible trabaja con un montón de módulos. Hay módulos para todo, para gestión de paquetes, gestión de usuarios, gestión de bases de datos, etc

Ahora imaginemos que quiero hacer un ping a un servidor que no está dentro de nuestro inventario:
ansible portallinux.es -m ping
La respuesta será más que evidente:
[WARNING]: Could not match supplied host pattern, ignoring: portallinux.es

[WARNING]: No hosts matched, nothing to do

En este caso, ignora por completo la tarea debido a que portallinux.es no es un host especificado en nuestro Inventario. ¿Qué ocurre si queremos usar de manera puntual Ansible con unos servidores que no tenemos en nuestro Inventario? Pues que podemos especificar el fichero del inventario con la opción -i:
ansible portallinux.es -m ping -i /root/hosts.txt
¿Y si nos conectamos a un host que no tenemos configurada nuestra llave SSH? Pues el resultado es el siguiente:
portallinux.es | UNREACHABLE! => {

“changed”: false,

“msg”: “Failed to connect to the host via ssh: root@portallinux.es: Permission denied (publickey,password).\r\n”,

“unreachable”: true

}

¿Y si el servidor está caído? -no necesariamente tiene que estar caído, pobre :(-
portallinux.es | UNREACHABLE! => {

“changed”: false,

“msg”: “Failed to connect to the host via ssh: ss: connect to host portallinux.es port 22: Resource temporalily unavailable\r\n”,

“unreachable”: true

}

Como podéis ver en los dos casos, el resultado de Ansible nos da un mensaje bastante claro de lo que está sucediendo. En el primer caso, te dice que no se puede conectar por ssh debido a que hay una denegación de acceso y en el segundo caso te dice que el servicio SSH no está funcionando en ese host y que no puede contactar.

La entrada Comandos básicos en Ansible [Ansible #3] se publicó primero en _ voidNull.
Comandos básicos en Ansible [Ansible #3]

 

El inventario en Ansible [Ansible #2]


#ansible #inventario

* ¿Qué es y para que sirve Ansible? [Ansible #0]

* Instalación de Ansible en GNU/Linux [Ansible #1]

* El inventario en Ansible [Ansible #2]

* Comandos básicos en Ansible [Ansible #3]

Continuamos con este tutorial de Ansible, esta vez hablaremos de algunas palabrejas del idioma Ansible. Si habéis llegado aquí, seguramente cuando ejecutéis ansible en vuestra terminal ya no os dura eso de -bash: ansible: command not found si no que os aparecerá la ayuda propia del comando. Así que sin más explicación, vamos directo a hablar sobre los inventarios en Ansible.

Inventario


Una vez tenemos Ansible instalado, ya podemos trabajar con él, pero antes es necesario configurar el Inventario. Generalmente vamos a encontrar que tendemos muchos servidores que administrar y tendremos que hacer un pequeño “inventario”. Cuando en Ansible hablamos del Inventario nos referimos a esas IP’s, hosts o máquinas que estamos gestionando y que hacemos un listado de todas ellas.

Si tenemos cuatro servidores en nuestra infraestructura donde dos son servidores web y otros dos son servidores de correo, nuestro inventario constará de esas cuatro máquinas. Y las podremos apuntar en el inventario por su IP o por el nombre de dominio principal -o incluso rangos, pero todo a su tiempo-. Además podremos hacer dos grupos, el grupo de los servidores web y el grupo de los servidores de correo.

Configurar inventario en Ansible


¿Y como podemos configurar ese inventario? Pues muy simple, utilizando el fichero de configuración de Ansible que podrás encontrar en /etc/ansible/hosts. Si editamos este fichero, veremos que es un fichero más de configuración en GNU/Linux y que cada línea consta de un host y que hay un montón de ejemplos que vamos a ver ahora mismo.

Imaginemos que en nuestro Inventario tenemos lo siguiente:
db1.voidnull.es

mail.voidnull.es

192.168.100.1

192.168.100.10

Esto significa que en nuestro inventario tenemos 4 máquinas, un servidor de bases de datos, un servidor de correo y dos maquinas identificadas por IP’s que por el momento no se que pueden ser XD. Pero lo que tenemos que tener claro, es que son 4 maquinas que vamos a gestionar con Ansible.

Pero imaginemos que tenemos 4 servidores para bases de datos, dos servidores web y uno de correo. ¿Seria necesario hacer esto?:
db1.voidnull.es

db2.voidnull.es

db3.voidnull.es

db4.voidnull.es

web1.voidnull.es

web2.voidnull.es

mail.voidnull.es

Pues si, puedes listar tu inventario de esta manera sin ningún problema. Pero quizás, si tienes muchas más maquinas que esas, sea un poco rollazo tener que escribir todos los hosts ¿Verdad? Pues en el Inventario de Ansible permite configurar rangos y podemos representar en una sola línea 4 maquinas:
db[1:4].voidnull.es

web[1:2].voidnull.es

mail.voidnull.es

¿Mola, verdad?

También podemos especificar maquinas por grupo. Para agrupar los servidores en grupos es necesario que en una línea pongamos entre corchetes el nombre del grupo -y así luego nos podremos referir a ese grupo en concreto con Ansible-. Por ejemplo:


[webservers]web1.voidnull.es

web2.voidnull.es



[dbservers]db1.voidnull.es

db2.voidnull.es

db3.voidnull.es

db4.voidnull.es

¿Para que sirve tener grupos? Pues imagina que necesitamos hacer una tarea en todos los hosts que tenemos pero luego queremos hacer una especifica a unos cuantos hosts en concreto. Por ejemplo, queremos que en todos los hosts se instale un certificado SSL pero únicamente en los servidores del grupo dbservers queremos instalar un servicio de bases de datos. O que la tarea de configurar un servidor en Postgress solo se haga en el grupo dbservers -quedaos con la palabra Tarea :P-.

Y eso es todo, una vez tengas configurado tu inventario, es momento de empezar con algunos comandos básicos.

La entrada El inventario en Ansible [Ansible #2] se publicó primero en _ voidNull.
El inventario en Ansible [Ansible #2]

 

Instalación de Ansible en GNU/Linux [Ansible #1]


Immagine/foto

#ansable #ansible #instalación

Si habéis llegado aquí de casualidad debéis saber que existe una primera parte llamada ¿Qué es y para que sirve Ansible? [Ansible #0] y que seguramente os pueda interesar antes de poneos a instalar como locos cosas. A menos que sepáis que es Ansible de primeras y simplemente vengáis aquí a saber como se instala, en ese caso, ¡Adelante!

Ansible es un software multiplataforma, por supuesto lo vas a poder instalar en todas las distribuciones de GNU/Linux, pero también en Solaris, FreeBSD o Mac. Además, también lo podrás usar en Windows gracias a la integración con Ubuntu que hicieron la gente de Micros… ¿Que hago explicando esto? Usa solo GNU/Linux Immagine/foto

Instalación de Ansible en GNU/Linux


Como ya hemos dicho en la introducción Ansible sirve para aprovisionar servidores y da igual si necesitas aprovisionar uno o veinticuatro o trescientos cuarenta y cuatro, lo importante es tener una buena configuración en Ansible, que de eso también hablaremos extensamente pero antes iremos a por la instalación.

En derivadas de Ubuntu:
# apt-get install ansible
Si queréis tener las últimas versiones siempre de Ansible:
# apt-get update

# apt-get install software-properties-common

# apt-add-repository ppa:ansible/ansible

# apt-get update

# apt-get install ansible

Si tenéis otra distribución o queréis compilar Ansible desde su repositorio de código, podéis hacerlo desde** la propia documentación que tiene la web de Ansible** que es como la Biblia pero para sysadmins que molan.

Configuración previa a Ansible


Ansible es para cosas serias y bien hechas, así que es importante una muy buena configuración previa. Es 100% recomendable utilizar las conexiones por SSH a nuestros servidores utilizando clave compartida. Nada de conectarse con contraseña, ni otros métodos pocos seguros. Esto para Ansible también es importante, ya que como que la gran mayoría de comandos van a ser remotos, nos va a evitar tener que poner la contraseña cada vez que hagamos alguna cosa.

Así que creamos una llave para SSH con:
ssh-keygen -t rsa
Le asignamos una contraseña, y la importamos a nuestro servidor con este otro comando:
ssh-copy-id usuario@192.168.1.24
Y ale, ya está. Luego podríamos desactivar acceso root y todo eso, pero no es el lugar para explicarlo, así que te dejo este tutorial para que configures correctamente SSH en tu servidor.

Con todo esto, ya deberías de tener tu ordenador preparado para utilizar Ansible, en el siguiente capítulo veremos como configurar Ansible tocando los ficheros de configuración que tanto nos gustan a los Sysadmin.

La entrada Instalación de Ansible en GNU/Linux [Ansible #1] se publicó primero en _ voidNull.
Instalación de Ansible en GNU/Linux [Ansible #1]

 

¿Qué es y para que sirve Ansible? [Ansible #0]


Immagine/foto

#ansible #aprovisionar #puppet

He decidido iniciar una serie de tutoriales interesantes y voy a empezar por el de Ansible. Todo esto lo estoy haciendo sobre la marcha y a medida que voy aprendiendo cosas nuevas. Así que es posible que algo pueda estar mal. Pero en este pequeño tutorial aprenderemos a utilizar Ansible y ha aprovisionar servicios en servidores. Pero como siempre que hago alguna cosa en mi blog, quiero dejar algo claro: ¿Soy experto en Ansible? No. ¿Lo seré? Por supuesto Immagine/foto¿Lo serás? Immagine/fotoImmagine/fotoGracias a mi -más abajo hay un botón de donaciones Immagine/foto-.




¿Qué es eso de aprovisionar? Generalmente cuando adquieres un servidor como Syadmin o Developer -o ambas, pero odio decir te encuentras con un servidor con Debian o alguna otra distro de GNU/Linux popular -como CentOS o Ubuntu-. Pero ese servidor es “virgen”, es decir, no tiene absolutamente nada instalado, únicamente tiene el sistema operativo que viene siendo la “base” del servidor.

¿Qué ocurre cuando instalas servicios? Pues que lo que estás haciendo realmente, pequeño Syadmin sin conocimientos, es aprovisionar el servidor. Y lo aprovisionas de cosas como Nginx, MariaDB, Bind9, Docker, etc. Todo este proceso, el de ejecutar comandos en Shell para instalar mil cosas y configurar otras tantas, lo puedes hacer de una sola tirada gracias a Ansible. ¡Adiós shells Scripts del demonio!es broma, amo los shell scripts <3




Lo interesante de Ansible es que es declarativo, por lo que no vamos a dar instrucciones sobre los pasos que hay que seguir para tener ciertos servicios. Es decir, no hacemos un apt-get install apache2, ni modificamos un fichero, ni cambiamos ninguna configuración. Con Ansible, lo que hacemos** es pedir lo que queremos al final de todo ese proceso**. Por ejemplo, quiero un servidor web con Apache2, que tenga instalado MariaDB y con la versión de PHP 7.1 y que además tenga un FTP con proFTPd en el DocumentRoot de mi web con permisos para el usuario voidnull. ¿Entendéis la diferencia?

Pero esto no es todo, es que con Ansible no es necesario tratar los casos manualmente, es decir, que no es necesario aplicar condiciones en lo que queremos aprovisionar. No tendremos que decir: quiero un servidor web con Apache2 pero si ya está instalado no hagas nada. Ansible es capaz de recopilar automáticamente los hechos (o facts en lenguaje Ansible).




Ansible es modular –oh, que bien suena esta palabra– por lo que significa que si necesitas algo en concreto puedes buscar en su maravillosa web alguna documentación que necesites. Hay módulos para todo, para apt, para pacman, para nginx, para apache, para criptomondeas, paaara toooodo. Y si no encuentras algo, puedes ir a una web comunitaria donde la gente deja sus ficheros de Ansible y sus módulos.

Supongo que tendrás ganas de aprender más sobre Ansible, pero este artículo es únicamente para explicar que es y para que sirve. Pero tengo más información, Ansible está bajo licencia GPLv3, por lo que se trata de Software Libre y eso está mejor que bien. En la gran mayoría de distribuciones de GNU/Linux lo puedes instalar desde el gestor de paquetes porque seguramente esté en repositorios. Ansible únicamente requiere Python y SSH. ¡Lo puedes instalar en local y empezar a jugar!




En la siguiente parte, veremos como instalar Ansible en diferentes distribuciones y empezaremos a ejecutar algunas instrucciones con Ansible.

La entrada ¿Qué es y para que sirve Ansible? [Ansible #0] se publicó primero en _ voidNull.
¿Qué es y para que sirve Ansible? [Ansible #0]

 

DebOps - Your Debian-based data center in a box

The DebOps project is a set of Free and Open Source tools that let users bootstrap and manage an IT infrastructure based on Debian or Ubuntu operating systems. Ansible is used as the main configuration management platform. DebOps provides a collection of Ansible roles that manage various services, as well as a set of Ansible playbooks that tie them together in a highly integrated environment.
Note to myself: Need to check out this project.

#debian #ansible #debops #container #datacenter #devops

 

Mini-DebConf 2017 Toulouse this weekend



Saturday, 2017-11-18 and Sunday, 2017-11-19



Talks in French and English about Debian, Let's Encrypt, Ansible, Accessibility, Privacy, and more



#debian #debconf #minidebconf #france #toulouse #letsencrypt #ansible #accessibility #privacy

DebianEvents/fr/2017/Toulouse - Debian Wiki

DebianEvents/fr/2017/Toulouse - Debian Wiki