Files
fission-console/doc/descriptions/function-envvars-flow.md
T
“Naeel” 1fa92e069f feat: переменные окружения функций (env vars в CRD)
- Backend: handleGetFunctionEnvVars / handlePutFunctionEnvVars в function_crud.go
- API: GET/PUT /functions/:name/envvars
- handleGetFunction теперь возвращает env_vars в ответе
- Frontend: блок env vars в edit modal (key=value + [×] + [+ Добавить])
- TF-функции показывают env vars в режиме read-only
- Документация: doc/descriptions/function-envvars-flow.md
- Версия v1.3.72
2026-05-09 06:50:52 +04:00

4.0 KiB
Raw Blame History

Переменные окружения функций (env vars)

Хранение

Env vars хранятся прямо в Function CRD в поле .spec.runtime.container.env:

apiVersion: fission.io/v1
kind: Function
metadata:
  name: my-fn
  namespace: c479c9de005f
spec:
  runtime:
    container:
      env:
        - name: DB_HOST
          value: "localhost"
        - name: API_KEY
          value: "secret123"

Почему CRD, а не ConfigMap/PostgreSQL:

  • Env vars — часть конфигурации функции, а не статистика
  • CRD хранится в etcd — единственном хранилище состояния Kubernetes
  • При удалении функции env vars удаляются автоматически (нет orphan-объектов)
  • Не нужен дополнительный RBAC для ConfigMap
  • Fission executor сам передаёт .spec.runtime.container.env в pod

API

GET /console/api/functions/:name/envvars

Возвращает список переменных:

{
  "env_vars": [
    {"name": "DB_HOST", "value": "localhost"},
    {"name": "API_KEY", "value": "secret123"}
  ]
}

PUT /console/api/functions/:name/envvars

Принимает полный список (полная замена, не merge):

{
  "env_vars": [
    {"name": "DB_HOST", "value": "new-host"},
    {"name": "NEW_VAR", "value": "val"}
  ]
}

Пустой массив [] — удалить все переменные.

GET /console/api/functions/:name

Поле env_vars включено в стандартный ответ (чтобы edit modal не делал отдельный запрос).

Frontend (edit modal)

  • Блок "Переменные окружения" появляется в нижней части edit modal при каждом открытии
  • Каждая переменная — строка: input[KEY] = input[value] [×]
  • Кнопка "+ Добавить переменную" добавляет пустую строку
  • Сохранение происходит вместе с остальными полями (Сохранить)
  • После сохранения кода/архива вызывается PUT /envvars с текущим состоянием блока

Terraform-функции (read-only)

Функции с именем tf-* или с go-env (Terraform-управляемые) показывают блок env vars в режиме только чтения:

  • Все input-поля disabled
  • Кнопки [×] и [+ Добавить] скрыты
  • Предупреждение: "⚠️ Функция управляется Terraform — переменные только для чтения"
  • PUT /envvars не вызывается при сохранении TF-функций

Изменить переменные TF-функции можно только через Terraform (terraform apply).

Backend (Go)

Файл: console/internal/api/function_crud.go

  • handleGetFunctionEnvVars — читает .spec.runtime.container.env через dynamic client
  • handlePutFunctionEnvVars — PATCH Function CRD, обновляет .spec.runtime.container.env
  • extractEnvVars — вспомогательная функция, читает из unstructured в []map[string]string

Роутинг: console/internal/api/handlers.go

GET  /console/api/functions/:name/envvars → handleGetFunctionEnvVars
PUT  /console/api/functions/:name/envvars → handlePutFunctionEnvVars

Ограничения (MVP)

  • Секретные переменные (пароли, токены) хранятся в открытом виде в etcd
  • Для sensitive данных в будущем нужно добавить поддержку Secret (valueFrom.secretKeyRef)
  • Нет валидации имён переменных по RFC (разрешены любые непустые строки)