-
Notifications
You must be signed in to change notification settings - Fork 0
/
deployment_builder.go
114 lines (96 loc) · 3 KB
/
deployment_builder.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
package models
import (
"time"
"github.com/equinor/radix-api/api/utils"
"github.com/equinor/radix-operator/pkg/apis/kube"
v1 "github.com/equinor/radix-operator/pkg/apis/radix/v1"
)
// DeploymentBuilder Builds DTOs
type DeploymentBuilder interface {
WithRadixDeployment(v1.RadixDeployment) DeploymentBuilder
WithName(string) DeploymentBuilder
WithAppName(string) DeploymentBuilder
WithEnvironment(string) DeploymentBuilder
WithActiveFrom(time.Time) DeploymentBuilder
WithActiveTo(time.Time) DeploymentBuilder
WithJobName(string) DeploymentBuilder
WithComponents(components []*Component) DeploymentBuilder
BuildDeploymentSummary() *DeploymentSummary
BuildDeployment() *Deployment
}
type deploymentBuilder struct {
name string
appName string
environment string
activeFrom time.Time
activeTo time.Time
jobName string
components []*Component
}
func (b *deploymentBuilder) WithRadixDeployment(rd v1.RadixDeployment) DeploymentBuilder {
jobName := rd.Labels[kube.RadixJobNameLabel]
components := make([]*Component, len(rd.Spec.Components))
for i, component := range rd.Spec.Components {
components[i] = NewComponentBuilder().WithComponent(&component).BuildComponent()
}
b.WithName(rd.GetName()).
WithAppName(rd.Spec.AppName).
WithEnvironment(rd.Spec.Environment).
WithActiveFrom(rd.CreationTimestamp.Time).
WithJobName(jobName).
WithComponents(components).
WithActiveFrom(rd.Status.ActiveFrom.Time).
WithActiveTo(rd.Status.ActiveTo.Time)
return b
}
func (b *deploymentBuilder) WithJobName(jobName string) DeploymentBuilder {
b.jobName = jobName
return b
}
func (b *deploymentBuilder) WithComponents(components []*Component) DeploymentBuilder {
b.components = components
return b
}
func (b *deploymentBuilder) WithName(name string) DeploymentBuilder {
b.name = name
return b
}
func (b *deploymentBuilder) WithAppName(appName string) DeploymentBuilder {
b.appName = appName
return b
}
func (b *deploymentBuilder) WithEnvironment(environment string) DeploymentBuilder {
b.environment = environment
return b
}
func (b *deploymentBuilder) WithActiveFrom(activeFrom time.Time) DeploymentBuilder {
b.activeFrom = activeFrom
return b
}
func (b *deploymentBuilder) WithActiveTo(activeTo time.Time) DeploymentBuilder {
b.activeTo = activeTo
return b
}
func (b *deploymentBuilder) BuildDeploymentSummary() *DeploymentSummary {
return &DeploymentSummary{
Name: b.name,
Environment: b.environment,
ActiveFrom: utils.FormatTimestamp(b.activeFrom),
ActiveTo: utils.FormatTimestamp(b.activeTo),
CreatedByJob: b.jobName,
}
}
func (b *deploymentBuilder) BuildDeployment() *Deployment {
return &Deployment{
Name: b.name,
Environment: b.environment,
ActiveFrom: utils.FormatTimestamp(b.activeFrom),
ActiveTo: utils.FormatTimestamp(b.activeTo),
Components: b.components,
CreatedByJob: b.jobName,
}
}
// NewDeploymentBuilder Constructor for application deploymentBuilder
func NewDeploymentBuilder() DeploymentBuilder {
return &deploymentBuilder{}
}