Como acessar a API OpenStack usando o Python3?

Como acessar a API OpenStack usando o Python3?

Saiba como acessar a API OpenStack através do Python3 e como listar os volumes presentes no console!

Se você já conferiu nosso post Como começar a trabalhar com API OpenStack, já sabe o que é a API OpenStack, do que precisamos para começar a utilizá-la e como instalar o PyCharm (IDE de Python).

Para acessá-la usando o Python3, é necessário:

  1. Chamar as bibliotecas;
  2. Criar um cadastro;
  3. Gerar o token;
  4. Chamar a URL com a credencial de autenticação.

Vamos ver como realizar esse passo a passo, a seguir e depois, vamos conferir como listar todos os volumes presentes na console. Boa leitura!

1. Chame as bibliotecas

Vamos chamar apenas duas bibliotecas para acessar a API, uma biblioteca JSON e uma Requests. Para isso, copie e cole as seguintes linhas:

        import requests
import json

2. Crie um cadastro

Nesta etapa, vamos colocar as nossas credenciais como variável para ficar mais fácil de entender e no futuro adaptar. Por isso, copie as seguintes linhas e coloque a sua Credencial, Senha e a URL Identity somado ao /auth/token:

AUTH_URL = "SuaURL/auth/tokens"
ID_Credencial = "Coloque a sua ID da credencial entre aspas aqui"
Secret = "Coloque a sua senha entre aspas aqui"

3. Gere o token

A próxima etapa é gerar o token de acesso e gravá-lo como uma variável para que, no futuro, seja possível usá-lo como autenticação das outras extensões.

Primeiro, vamos ver como o código está até agora:

# Bibliotecas

import requests
import json


#cadastro:

AUTH_URL = "SuaURL/auth/tokens"
ID_Credencial = "Coloque a sua ID da credencial entre aspas aqui"
Secret = "Coloque a sua senha entre aspas aqui"

Se você chegou nesse resultado, está no caminho certo.

Agora temos de criar uma função que vai pegar somente o cabeçalho (Headers) da resposta e nos retornará o X-Auth-Token. Para isso, usaremos o def, da seguinte forma:

 def get_headers(token):

return {
'X-Auth-Token': token,
'Content-Type': 'application/json'
}

Depois, vamos aplicar o código de autenticação com as nossas variáveis de cadastro. Para isso, copie e cole o seguinte código:

data_auth = {
"auth": {
"identity": {
"methods": [
"application_credential"
],
"application_credential": {
"id": ID_Credencial,
"secret": Secret
}
}
}
}

O seu código até o momento deve estar assim:

# Bibliotecas

import requests
import json


#cadastro:

AUTH_URL = "SuaURL/auth/tokens"
ID_Credencial = "Coloque a sua ID da credencial entre aspas aqui"
Secret = "Coloque a sua senha entre aspas aqui"

def get_headers(token):

return {
'X-Auth-Token': token,
'Content-Type': 'application/json'
}

# gerar token
data_auth = {
"auth": {
"identity": {
"methods": [
"application_credential"
],
"application_credential": {
"id": ID_Credencial,
"secret": Secret
}
}
}
}

4. Chame a URL com a credencial de autenticação

A próxima etapa é chamar a URL com a credencial de autenticação que configuramos. Para isso, vamos usar a função post na URL e depois usaremos um get na header de saída para pegar o token de acesso.

Seguem as linhas de código necessárias para isso:

response = requests.post(
AUTH_URL,
data=json.dumps(data_auth),
headers={
'Content-Type': 'application/json'
}
)


token = response.headers.get('X-Subject-Token')

Pronto! O seu token de acesso está pronto para ser usado para as outras extensões de API.

Agora, vamos listar os volumes do nosso projeto através da função get.

Listando os volumes da console

Visto que autenticamos nossa API e geramos o nosso código de acesso, podemos agora aplicar outras extensões. Como exemplo, vamos listar os volumes presentes no console.

Primeiro, vamos gerar a nova URL. Para isso, serão necessários a URL do Compute e a extensão /os-volumes. Coloque-os no seguinte código:

url_nova1 = "SuaUrlCompute/os-volumes"

response = requests.get(
url=url_nova1,
headers=get_headers(token)
)

Seu código deve ficar da seguinte forma:

response = requests.post{
AUTH_URL,
data=json.dumps(data_auth),
headers={
'Content-Type': 'application/json'
}
}

token = response.headers.get('X-Subject-Token')

#Nova_URL:
url_nova1 = "SuaUrlCompute/os-volumes"

response = requests.get(
url=url_nova1,
headers=get_headers(token)
)

Agora, basta dar um print da forma que você desejar. Como exemplo, vamos colocar no console de duas formas: uma crua e uma com quebra de linhas. Confira os códigos:

Forma crua:

print(response.json())

Saída:

C:\Users\SeuUser\AppData\Local\Programs\Python\Python39\python.exe "C:/Users/SeuUser/Desktop/Binario Cloud/code/FAQ.py"
{'volumes': [{'id': 'seuid', 'status': 'in-use', 'size': 80, 'availabilityZone': 'ap-01-a', 'createdAt': '2021-05-20'

Process finished with exit code 0

Forma com quebra de linha:

print(json.dumps(response.json(), indent=2))

Saída:

{
"volumes": [
{
"id": "seuid",
"status": "in-use",
"size": 80,
"availabilityZone": "sp-01-a",
"createdAt": "2021-02-27T19:10:14.000000",
"attachments": [
{
"id": "seuid",
"volumeId": "seuid",
"serverId": "seuserverId",
"device": "/dev/vda"
}
]
"displayName": "",

Pronto! Com isso você tem a lista de todos os volumes do seu projeto usando Python3.

Existem diversas opções de extensão, cada uma com uma funcionalidade e para saber quais são as outras extensões de API, recomendamos que você acesse o Quick Start da OpenStack.

Assine nossa Newsletter

Receba o melhor conteúdo sobre soluções em nuvem, hospedagem cloud e aplique dicas estratégicas para garantir uma infraestrutura de TI eficiente.