-
Notifications
You must be signed in to change notification settings - Fork 47
/
Copy pathmodel.go
147 lines (132 loc) · 6.08 KB
/
model.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
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
package roer
import "github.com/spinnaker/roer/spinnaker"
// PipelineTemplate is a pipeline template
type PipelineTemplate struct {
Schema string `json:"schema"`
ID string `json:"id"`
Metadata PipelineTemplateMetadata `json:"metadata"`
Protect bool `json:"protect"`
Configuration PipelineTemplateConfig `json:"configuration,omitempty"`
Variables []interface{} `json:"variables,omitempty"`
Stages []PipelineTemplateStage `json:"stages"`
}
// PipelineTemplateMetadata metadata for a template
type PipelineTemplateMetadata struct {
Name string `json:"name"`
Description string `json:"description"`
Owner string `json:"owner"`
Scopes []string `json:"scopes,omitempty"`
}
// PipelineTemplateConfig pipeline template config
type PipelineTemplateConfig struct {
ConcurrentExecutions map[string]bool `json:"concurrentExecutions,omitempty"`
Triggers []map[string]interface{} `json:"triggers,omitempty"`
ExpectedArtifacts []map[string]interface{} `json:"expectedArtifacts,omitempty"`
Parameters []map[string]interface{} `json:"parameters,omitempty"`
Notifications []map[string]interface{} `json:"notifications,omitempty"`
}
// PipelineTemplateStage a pipeline template stage
type PipelineTemplateStage struct {
ID string `json:"id"`
Type string `json:"type"`
DependsOn []string `json:"dependsOn,omitempty"`
Inject PipelineTemplateStageInjection `json:"inject,omitempty"`
Name string `json:"name"`
Config map[string]interface{} `json:"config"`
Notifications []map[string]interface{} `json:"notifications,omitempty"`
Comments string `json:"comments,omitempty"`
When []string `json:"when,omitempty"`
InheritanceControl PipelineTemplateStageInheritanceControl `json:"inheritanceControl,omitempty"`
}
// PipelineTemplateStageInjection is a pipeline template stage injection
type PipelineTemplateStageInjection struct {
First bool `json:"first,omitempty"`
Last bool `json:"last,omitempty"`
Before []string `json:"before,omitempty"`
After []string `json:"after,omitempty"`
}
// PipelineTemplateStageInheritanceControl pipeline template stage inheritance control
type PipelineTemplateStageInheritanceControl struct {
Merge []InheritanceControlRule `json:"merge,omitempty"`
Replace []InheritanceControlRule `json:"replace,omitempty"`
Remove []InheritanceControlRule `json:"remove,omitempty"`
}
// InheritanceControlRule inheritance control rule
type InheritanceControlRule struct {
Path string `json:"path"`
Value interface{} `json:"value"`
}
// PipelineTemplateModule pipeline template module
type PipelineTemplateModule struct {
ID string `json:"id"`
Usage string `json:"usage"`
Variables []map[string]interface{} `json:"variables,omitempty"`
When []string `json:"when,omitempty"`
Definition map[string]interface{} `json:"definition"`
}
// PipelineTemplatePartial pipeline template partial
type PipelineTemplatePartial struct {
ID string `json:"id"`
Usage string `json:"usage"`
Variables []map[string]interface{} `json:"variables,omitempty"`
Stages []PipelineTemplateStage `json:"stages"`
}
// PipelineConfiguration pipeline configuration
type PipelineConfiguration struct {
Schema string `json:"schema"`
ID string `json:"id"`
Pipeline PipelineConfigurationDefinition `json:"pipeline"`
Configuration PipelineConfig `json:"configuration"`
Stages []PipelineTemplateStage `json:"stages"`
Modules []PipelineTemplateModule `json:"modules,omitempty"`
Partials []PipelineTemplatePartial `json:"partials,omitempty"`
}
// ToClient convert PipelineConfiguration to spinnaker.PipelineConfig
func (c PipelineConfiguration) ToClient() spinnaker.PipelineConfig {
// TODO rz - Should move this mapping around into orca itself
parallel, ok := c.Configuration.ConcurrentExecutions["parallel"]
if !ok {
parallel = true
}
limitConcurrent, ok := c.Configuration.ConcurrentExecutions["limitConcurrent"]
if !ok {
limitConcurrent = true
}
keepWaitingPipelines, ok := c.Configuration.ConcurrentExecutions["keepWaitingPipelines"]
if !ok {
keepWaitingPipelines = false
}
return spinnaker.PipelineConfig{
ID: c.Pipeline.PipelineConfigID,
Type: "templatedPipeline",
Name: c.Pipeline.Name,
Application: c.Pipeline.Application,
Description: c.Configuration.Description,
Parallel: parallel,
LimitConcurrent: limitConcurrent,
KeepWaitingPipelines: keepWaitingPipelines,
Config: c,
}
}
// PipelineConfig pipeline config
type PipelineConfig struct {
Inherit []string `json:"inherit"`
ConcurrentExecutions map[string]bool `json:"concurrentExecutions"`
Triggers []interface{} `json:"triggers"`
ExpectedArtifacts []interface{} `json:"expectedArtifacts"`
Parameters []interface{} `json:"parameters"`
Notifications []interface{} `json:"notifications"`
Description string `json:"description"`
}
// PipelineConfigurationDefinition pipline config definition
type PipelineConfigurationDefinition struct {
Application string `json:"application"`
Name string `json:"name"`
Template TemplateSource `json:"template"`
PipelineConfigID string `json:"pipelineConfigId"`
Variables map[string]interface{} `json:"variables"`
}
// TemplateSource template source
type TemplateSource struct {
Source string `json:"source"`
}