mirror of
https://github.com/kairos-io/entangle.git
synced 2025-04-27 19:17:25 +00:00
135 lines
3.5 KiB
Go
135 lines
3.5 KiB
Go
package controllers
|
|
|
|
import (
|
|
"context"
|
|
"fmt"
|
|
|
|
entanglev1alpha1 "github.com/kairos-io/entangle/api/v1alpha1"
|
|
appsv1 "k8s.io/api/apps/v1"
|
|
v1 "k8s.io/api/core/v1"
|
|
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
|
|
"k8s.io/apimachinery/pkg/runtime/schema"
|
|
"k8s.io/apimachinery/pkg/types"
|
|
)
|
|
|
|
func genOwner(ent entanglev1alpha1.Entanglement) []metav1.OwnerReference {
|
|
return []metav1.OwnerReference{
|
|
*metav1.NewControllerRef(&ent.ObjectMeta, schema.GroupVersionKind{
|
|
Group: entanglev1alpha1.GroupVersion.Group,
|
|
Version: entanglev1alpha1.GroupVersion.Version,
|
|
Kind: "Entanglement",
|
|
}),
|
|
}
|
|
}
|
|
|
|
func (r *EntanglementReconciler) genDeployment(ent entanglev1alpha1.Entanglement, logLevel string) (*appsv1.Deployment, error) {
|
|
objMeta := metav1.ObjectMeta{
|
|
Name: ent.Name,
|
|
Namespace: ent.Namespace,
|
|
OwnerReferences: genOwner(ent),
|
|
}
|
|
|
|
privileged := false
|
|
serviceAccount := false
|
|
|
|
svc := &v1.Service{}
|
|
if ent.Spec.ServiceRef != nil {
|
|
err := r.Client.Get(context.Background(), types.NamespacedName{Namespace: ent.Namespace, Name: *ent.Spec.ServiceRef}, svc)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
}
|
|
|
|
v := ent.Spec.Envs
|
|
v = append(v, v1.EnvVar{
|
|
Name: "EDGEVPNTOKEN",
|
|
ValueFrom: &v1.EnvVarSource{
|
|
SecretKeyRef: &v1.SecretKeySelector{
|
|
Key: "network_token",
|
|
LocalObjectReference: v1.LocalObjectReference{
|
|
Name: *ent.Spec.SecretRef,
|
|
},
|
|
},
|
|
},
|
|
})
|
|
|
|
expose := v1.Container{
|
|
ImagePullPolicy: v1.PullAlways,
|
|
SecurityContext: &v1.SecurityContext{Privileged: &privileged},
|
|
Name: "entanglement",
|
|
Image: r.EntangleServiceImage,
|
|
Env: v,
|
|
Command: []string{"/usr/bin/edgevpn"},
|
|
}
|
|
|
|
cmd := "service-add"
|
|
if ent.Spec.Inbound {
|
|
// p, err := strconv.Atoi(ent.Spec.Port)
|
|
// if err != nil {
|
|
// return nil, err
|
|
// }
|
|
cmd = "service-connect"
|
|
// expose.Ports = []v1.ContainerPort{
|
|
// {
|
|
|
|
// Name: "service",
|
|
// ContainerPort: int32(p),
|
|
// },
|
|
// }
|
|
// expose.ReadinessProbe = &v1.Probe{
|
|
// ProbeHandler: v1.ProbeHandler{
|
|
// Exec: &v1.ExecAction{
|
|
// Command: []string{"/bin/bash", "-xce", ""},
|
|
// },
|
|
// },
|
|
// InitialDelaySeconds: 60,
|
|
// PeriodSeconds: 30,
|
|
// SuccessThreshold: 3,
|
|
// FailureThreshold: 3,
|
|
// }
|
|
// expose.LivenessProbe = &v1.Probe{
|
|
// ProbeHandler: v1.ProbeHandler{},
|
|
// InitialDelaySeconds: 220,
|
|
// PeriodSeconds: 120,
|
|
// SuccessThreshold: 1,
|
|
// FailureThreshold: 3,
|
|
// }
|
|
}
|
|
|
|
if ent.Spec.ServiceRef != nil {
|
|
expose.Args = []string{cmd, "--log-level", logLevel, ent.Spec.ServiceUUID, fmt.Sprintf("%s:%s", fmt.Sprintf("%s.svc.cluster.local", svc.Name), ent.Spec.Port)}
|
|
} else {
|
|
expose.Args = []string{cmd, "--log-level", logLevel, ent.Spec.ServiceUUID, fmt.Sprintf("%s:%s", ent.Spec.Host, ent.Spec.Port)}
|
|
}
|
|
|
|
pod := v1.PodSpec{
|
|
Containers: []v1.Container{expose},
|
|
AutomountServiceAccountToken: &serviceAccount,
|
|
HostNetwork: ent.Spec.HostNetwork,
|
|
}
|
|
|
|
deploymentLabels := genDeploymentLabel(ent.Name)
|
|
replicas := int32(1)
|
|
|
|
return &appsv1.Deployment{
|
|
ObjectMeta: objMeta,
|
|
|
|
Spec: appsv1.DeploymentSpec{
|
|
Selector: &metav1.LabelSelector{MatchLabels: deploymentLabels},
|
|
Replicas: &replicas,
|
|
Template: v1.PodTemplateSpec{
|
|
ObjectMeta: metav1.ObjectMeta{
|
|
Labels: deploymentLabels,
|
|
},
|
|
Spec: pod,
|
|
},
|
|
},
|
|
}, nil
|
|
}
|
|
|
|
func genDeploymentLabel(s string) map[string]string {
|
|
return map[string]string{
|
|
"entanglement.kairos.io": s,
|
|
}
|
|
}
|