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

95 lines
4.0 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# Переменные окружения функций (env vars)
## Хранение
Env vars хранятся прямо в Function CRD в поле `.spec.runtime.container.env`:
```yaml
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
Возвращает список переменных:
```json
{
"env_vars": [
{"name": "DB_HOST", "value": "localhost"},
{"name": "API_KEY", "value": "secret123"}
]
}
```
### PUT /console/api/functions/:name/envvars
Принимает полный список (полная замена, не merge):
```json
{
"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 (разрешены любые непустые строки)