Gestión de servidores con Salt

Últimamente, la herramienta de automatización de Salt ha ganado mucha atención. Salt, junto con Ansible, son vistos como refrescantes alternativas a herramientas de automatización más establecida como Puppet y Chef.

Recientemente, una nueva herramienta fue agregada a la pila de Salt llamado ‘salt-ssh’, que permite administrar servidores sin tener que instalar ninguna herramienta en el servidor. Lo único que necesita es tener Salt instalado en el cliente, y SSH habilitado en los servidores (que, por cierto, es muy similar a cómo funciona Ansible).

Lo que es muy interesante con este enfoque es que se poder configurar rápidamente servidores a partir de cero, ya que puede configurar un nodo recién instalado. Para demostrar esto, el equipo de Salt publicó un screencast (por debajo) donde empezaron un clúster con 100 nodos de Riak utilizando solamente ‘salt-ssh’.

A lo contratario de un despliegue regular de Salt, ‘salt-ssh’ depende en algo llamado un ‘roster‘ para asignar los servidores. Es un archivo de texto bastante sencillo que describe todos los servidores y cómo se conectan entre ellos.

Si usted tiene más de unos pocos servidores, poblando este archivo puede ser muy doloroso. Afortunadamente, con un poco de ayuda de nuestra biblioteca de Python, podemos automatizar este proceso de construcción en su totalidad.

[python light=»true»] import cloudsigma

default_user = ‘cloudsigma’

# Build a server list
server = cloudsigma.resource.Server()
server_list = server.list()
server_db = {}

for i in server_list:
if i[‘status’] == ‘running’:
name = i[‘name’] ipv4 = i[‘runtime’][‘nics’][0][‘ip_v4’][‘uuid’] server_db[name] = ipv4
print ‘Adding server %s to roster…’ % name

# Populate roster file
f = open(‘roster’, ‘w’)
for s in sorted(server_db):
record = (‘%s:n host: %sn user: %sn sudo: Truen’) % (s, server_db[s], default_user)
f.write(record)
f.close()
[/python]

El script anterior requiere que tenga ‘pycloudsigma’ instalado y configurado. Con esto instalado, el script creará un archivo llamado ‘roaster’ en el directorio actual. ‘Salt-ssh’ requiere que este archivo se encuentre en ‘/etc/salt/’, pero esto puede ser sobreescrito pasando el argumento ‘-roster-file=’.

Ahora, lo probaremos nosotros mismos. Tengo cuatro servidores llamados `salt-[0-3] .local’ a los que quiero conectar. Primero vamos a ver si podemos alcanzarlos con ping usando ‘salt-ssh’. Tenga en cuenta que ya tengo mi clave SSH instalada en todos estos servidores, y el nombre de usuario utilizado es ‘cloudsigma’.

[bash light=»true»] $ salt-ssh ‘salt*’ test.ping
[WARNING ] Warning: sshpass is not present, so password-based authentication is not available.
salt-3.local:
True
salt-2.local:
True
salt-1.local:
True
salt-0.local:
True
[/bash]

Eso funcionó bien. Vamos a instalar ‘vim’ en todas estas máquinas para ilustrar cómo gestionar paquetes con Salt.
[bash light=»true»] $ salt-ssh ‘salt*’ pkg.install vim
[WARNING ] Warning: sshpass is not present, so password-based authentication is not available.
salt-0.local:
———-
vim:
———-
new:
2:7.3.429-2ubuntu2.1
old:

salt-2.local:
———-
vim:
———-
new:
2:7.3.429-2ubuntu2.1
old:

salt-1.local:
———-
vim:
———-
new:
2:7.3.429-2ubuntu2.1
old:

salt-3.local:
———-
vim:
———-
new:
2:7.3.429-2ubuntu2.1
old:
[/bash]

Estamos realmente sólo raspado la superficie de lo que podemos lograr utilizando Salt en estos ejemplos, pero espero que sea suficiente para empezar.

Encontrará mucha más información acerca de cómo utilizar Salt aquí. ¡Happy hacking!

About Patrick Baillie

Patrick is co-founder of CloudSigma, and comes from a career working in Investment Banking Technology, as well as having previously ran his own business.