config

package
v0.5.0 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Sep 6, 2026 License: MIT Imports: 6 Imported by: 0

Documentation

Overview

Package config carrega e valida a configuracao do processo a partir do ambiente.

Fica fora da arvore descrita na secao 36 do plano, que nao previu um pacote para isso. A alternativa seria espalhar os os.Getenv por cmd/ e infrastructure/; um ponto unico de leitura e validacao vale o desvio, e a regra 7 pede que decisoes assim sejam explicitas em vez de silenciosas.

Index

Constants

This section is empty.

Variables

This section is empty.

Functions

func AmbienteDasTasks

func AmbienteDasTasks(nomes []string) map[string]string

AmbienteDasTasks monta o ambiente que cada passo local recebe.

A task NAO herda o ambiente do orquestrador. A razao e concreta: o processo do Brevis carrega BREVIS_DATABASE_URL com usuario e senha do Postgres, e um workflow e um comando arbitrario escrito por outra pessoa — herdar por padrao entregaria a credencial do banco a todo passo de todo pipeline.

O que a task precisa, entao, e declarado: `BREVIS_TASK_ENV=GOOGLE_PROJECT_ID,STAGE` repassa essas duas do ambiente do processo. `NOME=valor` define um literal. `*` repassa tudo MENOS as BREVIS_* — o curinga existe para quem precisa, e a excecao existe porque a configuracao do orquestrador nunca e trabalho da task.

PATH e HOME entram sempre: sem PATH nenhum comando resolve, e o erro seria um "not found" que nao explica nada. Funcao de pacote e nao metodo: `brevis run` roda sem banco e por isso sem Config — mas precisa do mesmo ambiente.

func TaskEnvDoAmbiente

func TaskEnvDoAmbiente() []string

TaskEnvDoAmbiente le BREVIS_TASK_ENV para quem nao carregou a Config inteira.

Types

type Config

type Config struct {
	Env             string
	HTTPAddr        string
	DatabaseURL     string
	LogLevel        string
	ShutdownTimeout time.Duration

	// BrandFile aponta o YAML de identidade visual. Opcional: sem ele a
	// interface usa a identidade padrao.
	BrandFile string

	// TaskEnv lista o que o processo repassa para as tasks locais. Ver
	// AmbienteDasTasks — o padrao NAO herda o ambiente, e isso e deliberado.
	TaskEnv []string

	// SlackWebhook recebe o alerta de falha definitiva. Vazio = ninguem e
	// avisado. Vem do ambiente, e nunca do YAML: quem tem a URL posta no canal
	// como se fosse a plataforma.
	SlackWebhook string

	// Auth e a credencial de operador que fecha a interface. Ver internal/auth.
	Auth auth.Credencial

	// UIURL monta o link da execucao no alerta. Sem ela o alerta diz o que
	// falhou, mas obriga quem le a procurar a run na mao.
	UIURL string

	// Pods parametriza a execucao em Kubernetes. Sao decisoes da INSTALACAO —
	// com que identidade e credenciais os pods sobem —, e por isso vem do
	// ambiente e nao do YAML do workflow: um pipeline nao deve poder escolher a
	// service account com que roda.
	Pods PodsConfig
}

Config e o estado imutavel derivado do ambiente. Tudo que o processo precisa para subir esta aqui — nada le o ambiente depois do boot.

func Load

func Load() (Config, error)

Load monta a Config e falha no boot se algo obrigatorio faltar. Falhar cedo e deliberado: um processo que sobe sem DATABASE_URL so descobre o problema no primeiro request, e ai o readiness ja mentiu para o orquestrador.

type PodsConfig

type PodsConfig struct {
	// Modo: auto (usa pods quando ha cluster), on (exige) ou off (nunca).
	Modo              string
	Namespace         string
	ServiceAccount    string
	PullSecrets       []string
	EnvFromSecrets    []string
	EnvFromConfigMaps []string

	// SecretsPermitidos limita o que um `secrets:` de YAML pode citar. Vazia
	// nega tudo: a instalacao decide quais segredos existem para workflows, e
	// o YAML decide qual passo recebe cada um.
	SecretsPermitidos []string

	// CredencialPVC e CredencialPath montam o volume onde o SDK guarda a
	// credencial rotacionada. Sem o PVC, nada muda.
	CredencialPVC  string
	CredencialPath string
	NodeSelector   map[string]string
	// Toleracoes no formato "chave=valor:efeito", separadas por virgula. O pool
	// arm64 da Zarv tem taint, e sem toleracao o pod da task fica Pending para
	// sempre — sem erro, so parado.
	Toleracoes    []Toleracao
	ManterEmFalha bool
}

type Toleracao

type Toleracao struct {
	Chave  string
	Valor  string
	Efeito string
}

Toleracao espelha o campo do pod, sem importar o tipo do Kubernetes.

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL