Pular para o conteúdo

Ambiente e configuração

Variáveis de ambiente com padrão, a configuração que falha na partida — e o segredo que nunca vai para o arquivo.

A mesma imagem roda em desenvolvimento, homologação e produção; o que muda é o ambiente. Ler a configuração de variáveis — e não de um arquivo dentro da imagem — é o que deixa o mesmo artefato ir para os três lugares.

dataforge
adopt Arcane.OS as OS

porta := int(OS.get_env("PORTA", "8080"))
modo := OS.get_env("MODO", "desenvolvimento")
assert porta bigger 0
assert OS.get_env("VARIAVEL_QUE_NAO_EXISTE_AQUI") is void
assert not OS.has_env("VARIAVEL_QUE_NAO_EXISTE_AQUI")

Falhe na partida, não no primeiro pedido#

Uma variável obrigatória que falta deveria impedir o programa de subir — com uma mensagem que diz qual —, e não estourar no primeiro pedido que precisa dela, às três da manhã:

dataforge
adopt Arcane.OS as OS

action exigir(nomes):
    faltam := [n cycle n in nomes given not OS.has_env(n)]
    given len(faltam) bigger 0:
        trigger $"faltam variáveis de ambiente: {faltam.join(", ")}"

OS.set_env("BANCO_URL", "sqlite:///tmp/app.db")
exigir(["BANCO_URL"])                       // passa

recusado := no
monitor:
    exigir(["BANCO_URL", "CHAVE_DA_API"])
handle Error as e:
    recusado := e.message.contains("CHAVE_DA_API")
assert recusado
OS.unset_env("BANCO_URL")