mirror of
https://github.com/YuzuZensai/Minikura.git
synced 2026-09-13 10:49:21 +00:00
🐛 fix: override user env and complete proxy RBAC
This commit is contained in:
@@ -28,6 +28,9 @@ type ReverseProxyServerReconciler struct {
|
|||||||
// +kubebuilder:rbac:groups=minikura.kirameki.cafe,resources=reverseproxyservers,verbs=get;list;watch;create;update;patch;delete
|
// +kubebuilder:rbac:groups=minikura.kirameki.cafe,resources=reverseproxyservers,verbs=get;list;watch;create;update;patch;delete
|
||||||
// +kubebuilder:rbac:groups=minikura.kirameki.cafe,resources=reverseproxyservers/status,verbs=get;update;patch
|
// +kubebuilder:rbac:groups=minikura.kirameki.cafe,resources=reverseproxyservers/status,verbs=get;update;patch
|
||||||
// +kubebuilder:rbac:groups=minikura.kirameki.cafe,resources=reverseproxyservers/finalizers,verbs=update
|
// +kubebuilder:rbac:groups=minikura.kirameki.cafe,resources=reverseproxyservers/finalizers,verbs=update
|
||||||
|
// +kubebuilder:rbac:groups=minikura.kirameki.cafe,resources=minecraftservers,verbs=get;list;watch
|
||||||
|
// +kubebuilder:rbac:groups=apps,resources=deployments,verbs=get;list;watch;create;update;patch;delete
|
||||||
|
// +kubebuilder:rbac:groups="",resources=services;configmaps,verbs=get;list;watch;create;update;patch;delete
|
||||||
|
|
||||||
func (r *ReverseProxyServerReconciler) Reconcile(ctx context.Context, req ctrl.Request) (ctrl.Result, error) {
|
func (r *ReverseProxyServerReconciler) Reconcile(ctx context.Context, req ctrl.Request) (ctrl.Result, error) {
|
||||||
var rp v1alpha1.ReverseProxyServer
|
var rp v1alpha1.ReverseProxyServer
|
||||||
@@ -182,6 +185,9 @@ func (r *ReverseProxyServerReconciler) proxiesForServer(ctx context.Context, obj
|
|||||||
|
|
||||||
reqs := make([]reconcile.Request, 0, len(list.Items))
|
reqs := make([]reconcile.Request, 0, len(list.Items))
|
||||||
for _, rp := range list.Items {
|
for _, rp := range list.Items {
|
||||||
|
if !matchesBackend(rp, obj) {
|
||||||
|
continue
|
||||||
|
}
|
||||||
reqs = append(reqs, reconcile.Request{
|
reqs = append(reqs, reconcile.Request{
|
||||||
NamespacedName: client.ObjectKey{Name: rp.Name, Namespace: rp.Namespace},
|
NamespacedName: client.ObjectKey{Name: rp.Name, Namespace: rp.Namespace},
|
||||||
})
|
})
|
||||||
@@ -189,6 +195,17 @@ func (r *ReverseProxyServerReconciler) proxiesForServer(ctx context.Context, obj
|
|||||||
return reqs
|
return reqs
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func matchesBackend(rp v1alpha1.ReverseProxyServer, obj client.Object) bool {
|
||||||
|
if rp.Spec.BackendSelector == nil {
|
||||||
|
return true
|
||||||
|
}
|
||||||
|
selector, err := metav1.LabelSelectorAsSelector(rp.Spec.BackendSelector)
|
||||||
|
if err != nil {
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
return selector.Matches(labels.Set(obj.GetLabels()))
|
||||||
|
}
|
||||||
|
|
||||||
func (r *ReverseProxyServerReconciler) SetupWithManager(mgr ctrl.Manager) error {
|
func (r *ReverseProxyServerReconciler) SetupWithManager(mgr ctrl.Manager) error {
|
||||||
return ctrl.NewControllerManagedBy(mgr).
|
return ctrl.NewControllerManagedBy(mgr).
|
||||||
For(&v1alpha1.ReverseProxyServer{}).
|
For(&v1alpha1.ReverseProxyServer{}).
|
||||||
|
|||||||
@@ -90,17 +90,29 @@ func JVMEnv(jvm v1alpha1.JVMOptions, limitMB int32) []corev1.EnvVar {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func UserEnv(base []corev1.EnvVar, extra []v1alpha1.EnvVar) []corev1.EnvVar {
|
func UserEnv(base []corev1.EnvVar, extra []v1alpha1.EnvVar) []corev1.EnvVar {
|
||||||
|
index := make(map[string]int, len(base))
|
||||||
|
for i, env := range base {
|
||||||
|
index[env.Name] = i
|
||||||
|
}
|
||||||
for _, e := range extra {
|
for _, e := range extra {
|
||||||
|
if i, ok := index[e.Name]; ok {
|
||||||
|
base[i].Value = e.Value
|
||||||
|
continue
|
||||||
|
}
|
||||||
|
index[e.Name] = len(base)
|
||||||
base = append(base, corev1.EnvVar{Name: e.Name, Value: e.Value})
|
base = append(base, corev1.EnvVar{Name: e.Name, Value: e.Value})
|
||||||
}
|
}
|
||||||
return base
|
return base
|
||||||
}
|
}
|
||||||
|
|
||||||
func TCPProbe(initialDelay int32) *corev1.Probe {
|
func TCPProbe(initialDelay int32, port int32) *corev1.Probe {
|
||||||
|
if port == 0 {
|
||||||
|
port = ContainerPort
|
||||||
|
}
|
||||||
return &corev1.Probe{
|
return &corev1.Probe{
|
||||||
ProbeHandler: corev1.ProbeHandler{
|
ProbeHandler: corev1.ProbeHandler{
|
||||||
TCPSocket: &corev1.TCPSocketAction{
|
TCPSocket: &corev1.TCPSocketAction{
|
||||||
Port: intstr.FromInt32(ContainerPort),
|
Port: intstr.FromInt32(port),
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
InitialDelaySeconds: initialDelay,
|
InitialDelaySeconds: initialDelay,
|
||||||
|
|||||||
@@ -77,10 +77,10 @@ func TestUserEnvOverridesDefaults(t *testing.T) {
|
|||||||
base := []corev1.EnvVar{{Name: "TYPE", Value: "VANILLA"}}
|
base := []corev1.EnvVar{{Name: "TYPE", Value: "VANILLA"}}
|
||||||
got := UserEnv(base, []v1alpha1.EnvVar{{Name: "TYPE", Value: "PAPER"}})
|
got := UserEnv(base, []v1alpha1.EnvVar{{Name: "TYPE", Value: "PAPER"}})
|
||||||
|
|
||||||
if len(got) != 2 {
|
if len(got) != 1 {
|
||||||
t.Fatalf("len = %d, want 2", len(got))
|
t.Fatalf("len = %d, want 1", len(got))
|
||||||
}
|
}
|
||||||
if got[len(got)-1].Value != "PAPER" {
|
if got[0].Value != "PAPER" {
|
||||||
t.Errorf("last TYPE = %q, want PAPER", got[len(got)-1].Value)
|
t.Errorf("TYPE = %q, want PAPER", got[0].Value)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -122,7 +122,7 @@ func minecraftPodSpec(mc *v1alpha1.MinecraftServer, stateful bool) corev1.PodSpe
|
|||||||
}},
|
}},
|
||||||
Env: minecraftEnv(mc),
|
Env: minecraftEnv(mc),
|
||||||
VolumeMounts: mounts,
|
VolumeMounts: mounts,
|
||||||
ReadinessProbe: TCPProbe(initialDelay),
|
ReadinessProbe: TCPProbe(initialDelay, ContainerPort),
|
||||||
Resources: ResourceRequirements(mc.Spec.Resources),
|
Resources: ResourceRequirements(mc.Spec.Resources),
|
||||||
}},
|
}},
|
||||||
Volumes: volumes,
|
Volumes: volumes,
|
||||||
|
|||||||
@@ -92,15 +92,7 @@ func ProxyDeployment(rp *v1alpha1.ReverseProxyServer) *appsv1.Deployment {
|
|||||||
VolumeMounts: []corev1.VolumeMount{
|
VolumeMounts: []corev1.VolumeMount{
|
||||||
{Name: "config", MountPath: "/config"},
|
{Name: "config", MountPath: "/config"},
|
||||||
},
|
},
|
||||||
ReadinessProbe: &corev1.Probe{
|
ReadinessProbe: TCPProbe(30, rp.Spec.ListenPort),
|
||||||
ProbeHandler: corev1.ProbeHandler{
|
|
||||||
TCPSocket: &corev1.TCPSocketAction{
|
|
||||||
Port: intstr.FromInt32(rp.Spec.ListenPort),
|
|
||||||
},
|
|
||||||
},
|
|
||||||
InitialDelaySeconds: 30,
|
|
||||||
PeriodSeconds: 10,
|
|
||||||
},
|
|
||||||
Resources: ResourceRequirements(rp.Spec.Resources),
|
Resources: ResourceRequirements(rp.Spec.Resources),
|
||||||
}},
|
}},
|
||||||
Volumes: []corev1.Volume{{
|
Volumes: []corev1.Volume{{
|
||||||
|
|||||||
Reference in New Issue
Block a user