Variáveis de Ambiente

Toda a parametrização da asgard API é feita via variáveis de ambiente. Nesse documento vamos explicar cada uma das variáveis de ambiente (ENVs) que a Asgard API conhece.

Todas as ENVs são lidas no arquivo asgard.conf. Todas as envs estão sendo movidas para o objeto asgard.conf.Settings, que é um objeto BaseSettings do pydantic (docs).

As envs estão sempre prefixadas com algum valor. O prefixo padrão, caso você não escolhada nada é ASGARD_.

Abaixo está a transcrição completa do modulo asgard.conf.

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
import os
from typing import List, Optional

from pydantic import BaseSettings, BaseModel

from asgard.models.spec.fetch import FetchURLSpec

ASGARD_RABBITMQ_HOST = "127.0.0.1"
ASGARD_RABBITMQ_USER = "guest"
ASGARD_RABBITMQ_PASS = "guest"
ASGARD_RABBITMQ_PREFETCH = 32

ASGARD_HTTP_CLIENT_CONNECT_TIMEOUT = int(
    os.getenv("ASGARD_HTTP_CLIENT_CONNECT_TIMEOUT", 1)
)
ASGARD_HTTP_CLIENT_TOTAL_TIMEOUT = int(
    os.getenv("ASGARD_HTTP_CLIENT_TOTAL_TIMEOUT", 30)
)

# Configs que foram migradas do pacote `hollowman.conf`.
# Depois vamos mudar o prefixo de `HOLLOWMAN_` para `ASGARD_`
SECRET_KEY = os.getenv("HOLLOWMAN_SECRET_KEY", "secret")
TASK_FILEREAD_MAX_OFFSET: int = int(
    os.getenv("ASGARD_TASK_FILEREAD_MAX_OFFSET", 52_428_800)
)


class AuthSpec(BaseModel):
    user: Optional[str]
    password: Optional[str]


class Settings(BaseSettings):

    MESOS_API_URLS: List[str]
    DB_URL: str
    STATS_API_URL: str
    ASGARD_API_ADDRESS: str
    SCHEDULED_JOBS_SERVICE_ADDRESS: str
    SCHEDULED_JOBS_SERVICE_AUTH: AuthSpec = AuthSpec()
    AUTOSCALER_AUTH_TOKEN: str
    AUTOSCALER_MARGIN_THRESHOLD: float
    SCHEDULED_JOBS_DEFAULT_FETCH_URIS: List[FetchURLSpec] = []
    MIN_CPU_SCALE_LIMIT: Optional[float] = 0
    MAX_CPU_SCALE_LIMIT: Optional[float] = float("inf")
    MIN_MEM_SCALE_LIMIT: Optional[float] = 0
    MAX_MEM_SCALE_LIMIT: Optional[float] = float("inf")

    class Config:
        env_prefix = os.getenv("ENV", "ASGARD") + "_"


settings = Settings()

Todos os atributos da classe asgard.conf.Settings já lêm seus valores de envs com prefixo.

Lista de ENVs conhecidas pela Asgard API

Nota: Todos nomes descritos aqui devem receber o prefixo ASGARD_ quando forem criadas as ENVs no momento de rodar a Asgard API.

  • ASGARD_API_ADDRESS

Obrigatório. Recebe o endereço onde a Asgard API responde. Essa env é usada pelo código que faz o auto-tuning das aplicações. Ex: https://api.asgard.server.com

  • AUTOSCALER_AUTH_TOKEN

Obrigatório. Recebe o token de autenticação que será usado para falar com a Asgard API no momento de aplicar as alterações de tuning de alguma app.

  • AUTOSCALER_MARGIN_THRESHOLD

Obrigatório. Recebe o percentual que indica se uma app será modificada pelo tuning ou não. É um float no formato (<margem>/100). Ou seja, se você quiser uma margem de 10%, deve colocar aqui 0.10. Aplicações com uma diferença de uso de CPU e RAM menor que esse threshold não serão modificadas pelo auto-tunig.

  • MESOS_API_URLS

Obrigatório. Recebe uma lista, contendo os endereços de todos os mesos que formam o cluster. Ex: ["http://10.0.0.1:5050", "http://10.0.0.2:5050"]

  • DB_URL

Obrigatório. Recebe a URI de conexão com o banco de dados. Esse banco guarda os dados relacionaos de usuários e contas. O código da Asgard API usa SQLAlchemy.

  • STATS_API_URL

Obrigatório. Endereço da API onde as estatísticas de uso de recursos das apps serão gravadas. Atualmente Asgard API fala com ElasticSearch.

  • SCHEDULED_JOBS_SERVICE_ADDRESS

Obrigatório. Endereço da API responsável pela gerência de tarefas agendadas. Atualmente a asgard API suporta falar com o Chronos.

  • SCHEDULED_JOBS_SERVICE_AUTH

Opcional. Dados de autenticação para falar com a API de tarefas agendadas. Recebe um objeto (asgard.conf.AuthSpec) com user e password. Ex: {"user": "chronos", "password": "secret"}

  • SCHEDULED_JOBS_DEFAULT_FETCH_URIS

Opcional. Recebe uma lista de objetos asgard.models.spec.fetch.FetchURLSpec. Ex: [{"uri": "http://static.server.com.br/content.txt"}, {"uri": "file:///etc/config.tar.bz2"}]