Поскольку Pulumi сейчас становится модным IaC инструментом, но начинаем серию заметок о нем. В этой статье рассмотрим, откуда Pulumi берет конфигурацию проекта.
Pulumi может считать конфигурацию из 3 различных мест (в порядке приоритета):
- Переменных окружения с префиксом
PULUMI_CONFIG_ - Файла стека
Pulumi.<stack-name>.yamlв директории проекта - Файла конфигурации всего проекта Pulumi.yaml
Таким образом, переменные окружения позволяют переопределить значения, заданные в файлах.
Чтобы задать секретное значение для стека и сохранить его в конфигурацию, необходимо выбрать стек и выполнить config set:
# Development environment
pulumi stack select dev
pulumi config set vault:address http://vault-dev:8200
pulumi config set vault:token dev-token --secret
# Staging environment
pulumi stack select staging
pulumi config set vault:address http://vault-staging:8200
pulumi config set vault:token staging-token --secret
# Production environment
pulumi stack select prod
pulumi config set vault:address https://vault-prod.internal:8200
pulumi config set vault:token prod-token --secretВ результате файл стека dev будет выглядеть так:
# Pulumi.dev.yaml
config:
vault:address: http://vault-dev:8200
vault:token:
secure: AAABAIlHc2lTQUFBQ... # dev tokenПосмотрим пример на Go, как воспользоваться этой конфигурацией:
package main
import (
"github.com/pulumi/pulumi/sdk/v3/go/pulumi"
"github.com/pulumi/pulumi/sdk/v3/go/pulumi/config"
)
func main() {
pulumi.Run(func(ctx *pulumi.Context) error {
// Читаем конфигурацию из всех источников
conf := config.New(ctx, "")
// Значения могут быть из любого источника в порядке приоритета
dbHost := conf.Get("database:host")
dbPort := conf.GetInt("database:port")
dbPassword := conf.GetSecret("database:password")
ctx.Log.Info(fmt.Sprintf("Using database at %s:%d", dbHost, dbPort), nil)
return nil
})
}Ключевые замечания:
config.New(ctx, "")создает читателя для текущего стека. Пуская строка""означает «используй текущий проект».GetSecret()автоматически дешифрует секретыРазные стеки имеют разные значения для одного ключа. Когда код запускается он автоматически берет правильные значения исходя из текущего стека, который вы выбрали командой
pulumi stack select.
