Uso básico de Salt-API

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

Diverta-se.