feat: event-trigger (Вариант A) — TriggerTypeEvent, event-dispatcher, reconcileEvent

This commit is contained in:
Naeel
2026-03-19 13:44:35 +03:00
parent 1aac3f5093
commit a379091b8a
9 changed files with 534 additions and 6 deletions
+14 -4
View File
@@ -1,6 +1,8 @@
// Изменено: 2026-03-08
// Описание CRD Trigger — триггер для функции (HTTP или Cron).
// Изменено: 2026-03-19
// Описание CRD Trigger — триггер для функции (HTTP, Cron или Event).
// Один Trigger ссылается на одну Function и определяет способ вызова.
// Event-тип: event-dispatcher подписывается на AMQP очередь и при сообщении
// вызывает функцию по внутреннему HTTP.
package v1alpha1
@@ -16,6 +18,9 @@ const (
TriggerTypeHTTP TriggerType = "http"
// TriggerTypeCron — функция вызывается по расписанию (k8s CronJob)
TriggerTypeCron TriggerType = "cron"
// TriggerTypeEvent — функция вызывается при получении сообщения из AMQP очереди.
// event-dispatcher подписывается на spec.queue в RabbitMQ и делает POST на HTTP endpoint функции.
TriggerTypeEvent TriggerType = "event"
)
// TriggerSpec — желаемое состояние триггера.
@@ -30,8 +35,8 @@ type TriggerSpec struct {
// +kubebuilder:validation:Required
FunctionRef string `json:"functionRef"`
// Type — тип триггера: http или cron
// +kubebuilder:validation:Enum=http;cron
// Type — тип триггера: http, cron или event
// +kubebuilder:validation:Enum=http;cron;event
// +kubebuilder:validation:Required
Type TriggerType `json:"type"`
@@ -42,6 +47,10 @@ type TriggerSpec struct {
// Актуально для cron: запускаем pod заранее чтобы избежать cold start.
// +kubebuilder:default=300
PreWarmSeconds int32 `json:"preWarmSeconds,omitempty"`
// Queue — имя AMQP очереди в RabbitMQ (только для type=event).
// event-dispatcher подпишется на эту очередь и вызовет функцию при каждом сообщении.
Queue string `json:"queue,omitempty"`
}
// TriggerStatus — наблюдаемое состояние триггера (заполняет контроллер).
@@ -65,6 +74,7 @@ type TriggerStatus struct {
//+kubebuilder:printcolumn:name="Function",type=string,JSONPath=`.spec.functionRef`
//+kubebuilder:printcolumn:name="Active",type=boolean,JSONPath=`.status.active`
//+kubebuilder:printcolumn:name="URL",type=string,JSONPath=`.status.url`
//+kubebuilder:printcolumn:name="Queue",type=string,JSONPath=`.spec.queue`
//+kubebuilder:printcolumn:name="Age",type=date,JSONPath=`.metadata.creationTimestamp`
// Trigger — ресурс для управления способом вызова Function.