- 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
4.0 KiB
4.0 KiB
Переменные окружения функций (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 clienthandlePutFunctionEnvVars— PATCH Function CRD, обновляет.spec.runtime.container.envextractEnvVars— вспомогательная функция, читает из 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 (разрешены любые непустые строки)