-
Notifications
You must be signed in to change notification settings - Fork 2
/
group_env_deployment_service.go
116 lines (94 loc) · 3.97 KB
/
group_env_deployment_service.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
package service
import (
"context"
"encoding/json"
"net/http"
"time"
_ "time/tzdata"
"github.com/octohelm/courier/pkg/statuserror"
"github.com/octohelm/kubepkg/pkg/util"
"github.com/octohelm/kubepkg/internal/dashboard/domain/group"
grouprepository "github.com/octohelm/kubepkg/internal/dashboard/domain/group/repository"
"github.com/octohelm/kubepkg/internal/dashboard/domain/kubepkg"
kubepkgrepository "github.com/octohelm/kubepkg/internal/dashboard/domain/kubepkg/repository"
"github.com/octohelm/kubepkg/pkg/apis/kubepkg/v1alpha1"
"github.com/octohelm/kubepkg/pkg/datatypes"
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
)
func NewGroupEnvDeploymentService(group *group.Group, env *group.Env) *GroupEnvDeploymentService {
return &GroupEnvDeploymentService{
group: group,
groupEnvDeploymentRepo: grouprepository.NewGroupEnvDeploymentRepository(env),
kubepkgRepo: kubepkgrepository.NewKubepkgRepository(),
}
}
type GroupEnvDeploymentService struct {
group *group.Group
groupEnvDeploymentRepo *grouprepository.GroupEnvDeploymentRepository
kubepkgRepo *kubepkgrepository.KubepkgRepository
}
func (s *GroupEnvDeploymentService) ListKubePkgHistory(ctx context.Context, deploymentID group.DeploymentID, pager *datatypes.Pager) ([]*v1alpha1.KubePkg, error) {
return s.groupEnvDeploymentRepo.ListKubePkgHistory(ctx, deploymentID, pager)
}
func (s *GroupEnvDeploymentService) ListKubePkg(ctx context.Context, pager *datatypes.Pager) (*v1alpha1.KubePkgList, error) {
return s.groupEnvDeploymentRepo.ListKubepkg(ctx, pager)
}
func (s *GroupEnvDeploymentService) PutKubePkg(ctx context.Context, pkg *v1alpha1.KubePkg) (*v1alpha1.KubePkg, error) {
namespace := pkg.Namespace
pkg.Namespace = s.group.Name
kpkg, kpkgRef, err := s.kubepkgRepo.Put(ctx, pkg)
if err != nil {
return nil, statuserror.Wrap(err, http.StatusBadRequest, "InvalidKubePkg")
}
kpkg.Namespace = namespace
deployment, err := s.groupEnvDeploymentRepo.BindKubepkg(ctx, kpkg.Name, group.KubepkgRel{
KubepkgID: kpkgRef.KubepkgID,
KubepkgChannel: kubepkg.CHANNEL__DEV,
})
if err != nil {
return nil, err
}
var settingID uint64
if overwrites := kpkgRef.Overwrites; overwrites != nil {
deploymentSetting, err := s.groupEnvDeploymentRepo.RecordSetting(ctx, deployment.DeploymentID, overwrites)
if err != nil {
return nil, err
}
settingID = uint64(deploymentSetting.DeploymentSettingID)
} else {
deploymentSettingValues, err := s.groupEnvDeploymentRepo.GetSettingValues(ctx, deployment.DeploymentID, 0)
if err != nil {
return nil, err
}
if deploymentSettingValues.Values == nil {
deploymentSetting, err := s.groupEnvDeploymentRepo.RecordSetting(ctx, deployment.DeploymentID, kpkgRef.DefaultsOverwrites)
if err != nil {
return nil, err
}
kpkgRef.Overwrites = kpkgRef.DefaultsOverwrites
settingID = uint64(deploymentSetting.DeploymentSettingID)
} else {
kpkgRef.Overwrites = deploymentSettingValues.Values
settingID = uint64(deploymentSettingValues.DeploymentSettingID)
}
}
deploymentHistory, err := s.groupEnvDeploymentRepo.RecordDeployment(ctx, deployment.DeploymentID, kpkgRef.WithSettingID(settingID))
if err != nil {
return nil, err
}
kpkg.CreationTimestamp = metav1.NewTime(time.Time(deploymentHistory.CreatedAt))
if kpkg.Annotations == nil {
kpkg.Annotations = map[string]string{}
}
if kpkgRef.Overwrites != nil {
overwritesData, _ := json.Marshal(kpkgRef.Overwrites)
kpkg.Annotations[kubepkg.AnnotationOverwrites] = util.BytesToString(overwritesData)
}
kpkg.Annotations[kubepkg.AnnotationChannel] = deployment.KubepkgChannel.String()
kpkg.Annotations[kubepkg.AnnotationDeploymentID] = deploymentHistory.DeploymentID.String()
kpkg.Annotations[kubepkg.AnnotationDeploymentSettingID] = deploymentHistory.DeploymentSettingID.String()
return kpkg, nil
}
func (s *GroupEnvDeploymentService) Delete(ctx context.Context, deploymentName string) error {
return s.groupEnvDeploymentRepo.Delete(ctx, deploymentName)
}