layer1: add namespace event bridge step 18
This commit is contained in:
@@ -0,0 +1,15 @@
|
|||||||
|
# 2026-04-26 — NamespaceManager rewrite, step 18
|
||||||
|
|
||||||
|
## Цель шага
|
||||||
|
|
||||||
|
Подготовить watcher-friendly helper для преобразования Kubernetes Namespace в `NamespaceEvent`.
|
||||||
|
|
||||||
|
## Что меняем
|
||||||
|
|
||||||
|
1. Добавляем `NamespaceEventFromNamespace()`.
|
||||||
|
2. Добавляем unit tests на перенос имени и labels.
|
||||||
|
|
||||||
|
## Что НЕ меняем
|
||||||
|
|
||||||
|
- не подключаем helper к watcher-ам;
|
||||||
|
- не меняем runtime behavior.
|
||||||
@@ -13,11 +13,11 @@ import (
|
|||||||
)
|
)
|
||||||
|
|
||||||
const (
|
const (
|
||||||
ENV_FUNCTION_NAMESPACE string = "FISSION_FUNCTION_NAMESPACE"
|
ENV_FUNCTION_NAMESPACE string = "FISSION_FUNCTION_NAMESPACE"
|
||||||
ENV_BUILDER_NAMESPACE string = "FISSION_BUILDER_NAMESPACE"
|
ENV_BUILDER_NAMESPACE string = "FISSION_BUILDER_NAMESPACE"
|
||||||
ENV_DEFAULT_NAMESPACE string = "FISSION_DEFAULT_NAMESPACE"
|
ENV_DEFAULT_NAMESPACE string = "FISSION_DEFAULT_NAMESPACE"
|
||||||
ENV_ADDITIONAL_NAMESPACE string = "FISSION_RESOURCE_NAMESPACES"
|
ENV_ADDITIONAL_NAMESPACE string = "FISSION_RESOURCE_NAMESPACES"
|
||||||
ManagedNamespaceLabelKey string = "fission.io/managed"
|
ManagedNamespaceLabelKey string = "fission.io/managed"
|
||||||
ManagedNamespaceLabelValue string = "true"
|
ManagedNamespaceLabelValue string = "true"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|||||||
@@ -1,6 +1,10 @@
|
|||||||
package utils
|
package utils
|
||||||
|
|
||||||
import "time"
|
import (
|
||||||
|
"time"
|
||||||
|
|
||||||
|
corev1 "k8s.io/api/core/v1"
|
||||||
|
)
|
||||||
|
|
||||||
const (
|
const (
|
||||||
NamespacePartStateRegistering string = "registering"
|
NamespacePartStateRegistering string = "registering"
|
||||||
@@ -77,6 +81,13 @@ func ManagedNamespaceEvent(eventType NamespaceEventType, name string, source Nam
|
|||||||
}, source, observedAt)
|
}, source, observedAt)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func NamespaceEventFromNamespace(eventType NamespaceEventType, namespace *corev1.Namespace, source NamespaceSource, observedAt time.Time) NamespaceEvent {
|
||||||
|
if namespace == nil {
|
||||||
|
return NewNamespaceEvent(eventType, "", nil, source, observedAt)
|
||||||
|
}
|
||||||
|
return NewNamespaceEvent(eventType, namespace.Name, namespace.Labels, source, observedAt)
|
||||||
|
}
|
||||||
|
|
||||||
func (nr NamespaceRecord) Clone() NamespaceRecord {
|
func (nr NamespaceRecord) Clone() NamespaceRecord {
|
||||||
clone := nr
|
clone := nr
|
||||||
clone.Labels = cloneStringMap(nr.Labels)
|
clone.Labels = cloneStringMap(nr.Labels)
|
||||||
|
|||||||
@@ -3,6 +3,8 @@ package utils
|
|||||||
import (
|
import (
|
||||||
"testing"
|
"testing"
|
||||||
"time"
|
"time"
|
||||||
|
|
||||||
|
corev1 "k8s.io/api/core/v1"
|
||||||
)
|
)
|
||||||
|
|
||||||
func TestNamespaceRecordClone(t *testing.T) {
|
func TestNamespaceRecordClone(t *testing.T) {
|
||||||
@@ -86,3 +88,22 @@ func TestManagedNamespaceEvent(t *testing.T) {
|
|||||||
t.Fatalf("expected tenant-a event name")
|
t.Fatalf("expected tenant-a event name")
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func TestNamespaceEventFromNamespace(t *testing.T) {
|
||||||
|
namespace := &corev1.Namespace{}
|
||||||
|
namespace.Name = "tenant-a"
|
||||||
|
namespace.Labels = map[string]string{ManagedNamespaceLabelKey: ManagedNamespaceLabelValue}
|
||||||
|
|
||||||
|
event := NamespaceEventFromNamespace(NamespaceEventAdd, namespace, NamespaceSourceWatcher, time.Now().UTC())
|
||||||
|
if event.Name != "tenant-a" {
|
||||||
|
t.Fatalf("expected tenant-a event name")
|
||||||
|
}
|
||||||
|
if event.Labels[ManagedNamespaceLabelKey] != ManagedNamespaceLabelValue {
|
||||||
|
t.Fatalf("expected namespace labels to be copied into event")
|
||||||
|
}
|
||||||
|
|
||||||
|
namespace.Labels[ManagedNamespaceLabelKey] = "false"
|
||||||
|
if event.Labels[ManagedNamespaceLabelKey] != ManagedNamespaceLabelValue {
|
||||||
|
t.Fatalf("expected event labels to stay detached from original namespace")
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user