Как Pulumi читает конфигурацию стека

Поскольку Pulumi сейчас становится модным IaC инструментом, но начинаем серию заметок о нем. В этой статье рассмотрим, откуда Pulumi берет конфигурацию проекта.

Pulumi может считать конфигурацию из 3 различных мест (в порядке приоритета):

  1. Переменных окружения с префиксом PULUMI_CONFIG_
  2. Файла стека Pulumi.<stack-name>.yaml в директории проекта
  3. Файла конфигурации всего проекта 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
    })
}

Ключевые замечания:

  1. config.New(ctx, "") создает читателя для текущего стека. Пуская строка "" означает «используй текущий проект».

  2. GetSecret() автоматически дешифрует секреты

  3. Разные стеки имеют разные значения для одного ключа. Когда код запускается он автоматически берет правильные значения исходя из текущего стека, который вы выбрали командой pulumi stack select.

Был ли наш пост полезен?

Нажмите на звезду, чтобы оценить мои труды!

Средний рейтинг: 0 / 5. Количество голосов: 0

Пока голосов нет. Проголосуй первым!

Мне жаль, что пост вам не помог 🙁

Позвольте мне исправиться.

Поделитесь, что можно улучшить?

Похожие посты