Enquanto estou mergulhando no novo trabalho, tenho a oportunidade de me aprofundar mais no desenvolvimento de devops. Fui apresentado ao SaltStack há alguns meses e devo dizer que, embora a documentação seja bastante limitada, a ferramenta e as bibliotecas vinculadas a ela são bastante impressionantes.
Quero automatizar as tarefas de implantação e não consigo imaginar me conectar a um servidor usando ssh e emitir comandos a partir daí. Tem que ser automático. O salt foi enxertado em uma API da web há algum tempo, então parece uma boa maneira de automatizar algumas chamadas de salt de outro aplicativo.
Esta breve postagem descreverá a maneira rápida de colocá-lo em funcionamento e em resposta.
Instalando o salt-api
No salt-master, instale o pacote salt-api . Não tive dificuldade em encontrá-lo no meu servidor DigitalOcean usando o repositório salt ppa.
Uma vez feito isso, você precisa configurar pelo menos uma porta e os métodos de autenticação. Decidi usar um arquivo separado para definir aqueles e incluir esse arquivo na configuração principal:
# .. master config extract
include: /etc/salt/salt_api.cf
# /
E nesse arquivo
salt api encontraremos este: “ ` autenticação externa :
pam:
saltdev:
-. *
rest_cherrypy:
port: 8080
debug: True
“ `
Isso define um usuário, a forma como a api é executada (rest_cherrypy, existe outra maneira de verificar os documentos), uma porta e o modo de depuração. O usuário é denominado saltdev , é um usuário do sistema.
Então você precisa iniciar o serviço salt-api (além do salt-master, sim).
Na verdade usando
Esta API usa um token para gerenciar o AUTH, você precisa fazer um POST em / login primeiro com as credenciais do usuário para obter um token de volta:
curl -si localhost:8080/login
-H "Accept: application/json"
-d username='saltdev'
-d password='saltpass'
-d eauth='pam' > /tmp/cookies.txt
Você pode ver que o corpo da resposta é armazenado em um arquivo de texto. Será útil na próxima etapa. O corpo da resposta é semelhante a este:
HTTP/1.1 200 OK
Content-Length: 174
Vary: Accept-Encoding
X-Auth-Token: 0782d4a51c28da79b38420648aca5695a1952e65
Allow: GET, HEAD, POST
Date: Sat, 24 Aug 2013 21:53:24 GMT
Access-Control-Allow-Origin: *
Server: CherryPy/3.2.2
Content-Type: application/json
Set-Cookie: session_id=0782d4a51c28da79b38420648aca5695a1952e65; expires=Sun, 25 Aug 2013 07:53:24 GMT; Path=/
{"return": [{"perms": [".*"], "start": 1377381204.210399, "token": "0782d4a51c28da79b38420648aca5695a1952e65", "expire": 1377424404.2104, "user": "saltdev", "eauth": "pam"}]}
## and stored :
# Netscape HTTP Cookie File
# http://curl.haxx.se/docs/http-cookies.html
# This file was generated by libcurl! Edit at your own risk.
localhost FALSE / FALSE 1377416205 session_id 6d2db01121e27beb39c1c11828d0cacf0c8f3c02
Depois de obter esse token, você pode passá-lo de volta para o curl nas próximas chamadas em que estiver realmente fazendo algo. Aqui, pingamos os lacaios (sim, você precisa de pelo menos um lacaio para ver o resultado):
curl -b /tmp/cookies.txt -si localhost:8080/
-H "Accept: application/json"
-d client='local' -d tgt='*' -d fun='test.ping'
Que responde com:
HTTP/1.1 200 OK
Content-Length: 34
Vary: Accept-Encoding
Server: CherryPy/3.2.2
Allow: GET, HEAD, POST
Cache-Control: private
Date: Sat, 24 Aug 2013 21:58:23 GMT
Access-Control-Allow-Origin: *
Content-Type: application/json
Set-Cookie: session_id=0782d4a51c28da79b38420648aca5695a1952e65; expires=Sun, 25 Aug 2013 07:58:23 GMT; Path=/
{"return": [{"a-brentaal": true}]}
Usando isso
Agora é uma questão de verificar a documentação para ver a lista completa de chamadas que você pode fazer e, em seguida, escrever um módulo adequado em seu aplicativo para falar com seus lacaios a partir dele.
Recursos
- docs: http://salt-api.readthedocs.org/en/latest/
- como gerar e autoassinar um certificado: http://www.akadia.com/services/ssh_test_certificate.html
- um tópico que me ajudou a entender o uso básico: https://groups.google.com/forum/#!searchin/salt-users/salt-api/salt-users/H-MyrvJbyGE/B9ZqSj4gDu4J
Diverta-se.