Estou tentando passar uma variável de ambiente definida no shell atual para uma das systemd unidade que estou escrevendo.
DB_URL=databus.dev.mysite.io:8080
Estou usando isso em um script python que está sendo executado como um serviço. Minha unidade systemd executará este script como uma unidade que faz uso da variável para seu funcionamento.
[Unit]
Description=device-CompStatus: Computes device availability status
[Service]
Type=simple
ExecStart=/usr/bin/bash -c "/usr/bin/python /opt/deviceCompStatus/deviceCompStatusHandler.py"
Restart=always
[Install]
WantedBy=default.target
A maneira como estou usando a variável no script Python seria
if os.environ.get('DB_URL') is not None:
dbEndPoint = "http://" + os.environ['DB_URL']
O problema é que não consigo usar a variável ao executar o script em systemd . Eu pesquisei alguns recursos Usando variáveis de ambiente em unidades systemd , diz para usar a atribuição sob [Service] diretamente como
[Service]
Environment=DB_URL=databus.dev.mysite.io:8080
Como você pode ver, meu DB_URL pode mudar dependendo do ambiente em que estou implantando minha máquina, pode ser um desenvolvedor ou uma configuração de produção, em que os URLs podem variar.
Como faço isso dinamicamente? ou seja, passar o valor disponível para DB_URL to systemd environment?
Eu também tentei usar a opção EnvironmentFile= para definir um arquivo e passá-lo para o serviço. Mas o mesmo problema novamente, minha variável poderia ser dinâmica e não pode ser codificada.
Atualizar
Depois de usar a opção
systemctl import-environment DB_URL
Eu posso ver a variável disponível no ambiente de systemd que confirmei por
systemctl show-environment
DB_URL=databus.dev.mysite.io:8080
LANG=en_US.UTF-8
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin
mas ainda assim o valor não é refletido no aplicativo python que eu executo. O os.environ('DB_URL') é um caminho errado para acessar a variável?