DKube v1.0
This commit is contained in:
167
service/workflow.go
Normal file
167
service/workflow.go
Normal file
@ -0,0 +1,167 @@
|
||||
package service
|
||||
|
||||
import (
|
||||
"dkube/dao"
|
||||
"dkube/model"
|
||||
)
|
||||
|
||||
var Workflow workflow
|
||||
|
||||
type workflow struct{}
|
||||
|
||||
type WorkflowCreate struct {
|
||||
Name string `json:"name"`
|
||||
Namespace string `json:"namespace"`
|
||||
Replicas int32 `json:"replicas"`
|
||||
Image string `json:"image"`
|
||||
Label map[string]string `json:"label"`
|
||||
Cpu string `json:"cpu"`
|
||||
Memory string `json:"memory"`
|
||||
ContainerPort int32 `json:"container_port"`
|
||||
HealthCheck bool `json:"health_check"`
|
||||
HealthPath string `json:"health_path"`
|
||||
Type string `json:"type"`
|
||||
Port int32 `json:"port"`
|
||||
NodePort int32 `json:"node_port"`
|
||||
Hosts map[string][]*HttpPath `json:"hosts"`
|
||||
}
|
||||
|
||||
func (w *workflow) GetList(name, namespace string, page, limit int) (data *dao.WorkflowResp, err error) {
|
||||
data, err = dao.Workflow.GetWorkflows(name, namespace, page, limit)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
return data, nil
|
||||
}
|
||||
|
||||
func (w *workflow) GetById(id int) (data *model.Workflow, err error) {
|
||||
data, err = dao.Workflow.GetById(id)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
return data, nil
|
||||
}
|
||||
|
||||
func (w *workflow) CreateWorkFlow(data *WorkflowCreate) (err error) {
|
||||
var ingressName string
|
||||
if data.Type == "Ingress" {
|
||||
ingressName = getIngressName(data.Name)
|
||||
} else {
|
||||
ingressName = ""
|
||||
}
|
||||
|
||||
workflow := &model.Workflow{
|
||||
Name: data.Name,
|
||||
Namespace: data.Namespace,
|
||||
Replicas: data.Replicas,
|
||||
Deployment: data.Name,
|
||||
Service: getServiceName(data.Name),
|
||||
Ingress: ingressName,
|
||||
Type: data.Type,
|
||||
}
|
||||
err = dao.Workflow.Add(workflow)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
err = createWorkflowRes(data)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
return err
|
||||
}
|
||||
|
||||
func (w *workflow) DelById(id int) (err error) {
|
||||
workflow, err := dao.Workflow.GetById(id)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
err = delWorkflowRes(workflow)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
err = dao.Workflow.DelById(id)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
return
|
||||
}
|
||||
|
||||
func delWorkflowRes(workflow *model.Workflow) (err error) {
|
||||
err = Deployment.DeleteDeployment(workflow.Name, workflow.Namespace)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
err = Servicev1.DeleteService(getServiceName(workflow.Name), workflow.Namespace)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
if workflow.Type == "Ingress" {
|
||||
err = Ingress.DeleteIngress(getIngressName(workflow.Name), workflow.Namespace)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
}
|
||||
|
||||
return nil
|
||||
}
|
||||
|
||||
func createWorkflowRes(data *WorkflowCreate) (err error) {
|
||||
dc := &DeployCreate{
|
||||
Name: data.Name,
|
||||
Namespace: data.Namespace,
|
||||
Replicas: data.Replicas,
|
||||
Image: data.Image,
|
||||
Label: data.Label,
|
||||
Cpu: data.Cpu,
|
||||
Memory: data.Memory,
|
||||
ContainerPort: data.ContainerPort,
|
||||
HealthCheck: data.HealthCheck,
|
||||
HealthPath: data.HealthPath,
|
||||
}
|
||||
err = Deployment.CreateDeployment(dc)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
var serviceType string
|
||||
if data.Type != "Ingress" {
|
||||
serviceType = data.Type
|
||||
} else {
|
||||
serviceType = "ClusterIP"
|
||||
}
|
||||
sc := &ServiceCreate{
|
||||
Name: getServiceName(data.Name),
|
||||
Namespace: data.Namespace,
|
||||
Type: serviceType,
|
||||
ContainerPort: data.ContainerPort,
|
||||
Port: data.Port,
|
||||
NodePort: data.NodePort,
|
||||
Label: data.Label,
|
||||
}
|
||||
if err := Servicev1.CreateService(sc); err != nil {
|
||||
return err
|
||||
}
|
||||
var ic *IngressCreate
|
||||
if data.Type == "Ingress" {
|
||||
ic = &IngressCreate{
|
||||
Name: getIngressName(data.Name),
|
||||
Namespace: data.Namespace,
|
||||
Label: data.Label,
|
||||
Hosts: data.Hosts,
|
||||
}
|
||||
err = Ingress.CreateIngress(ic)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
}
|
||||
|
||||
return nil
|
||||
}
|
||||
|
||||
func getServiceName(workflowName string) (serviceName string) {
|
||||
return workflowName + "-svc"
|
||||
}
|
||||
|
||||
func getIngressName(workflowName string) (ingressName string) {
|
||||
return workflowName + "-ing"
|
||||
}
|
Reference in New Issue
Block a user