-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathpullsecret.go
149 lines (123 loc) · 4.11 KB
/
pullsecret.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
148
149
package api
import (
"context"
"strings"
"time"
"unicode/utf8"
"github.com/asaskevich/govalidator"
"github.com/moonrhythm/validator"
)
type PullSecret interface {
Create(ctx context.Context, m *PullSecretCreate) (*Empty, error)
Get(ctx context.Context, m *PullSecretGet) (*PullSecretItem, error)
List(ctx context.Context, m *PullSecretList) (*PullSecretListResult, error)
Delete(ctx context.Context, m *PullSecretDelete) (*Empty, error)
}
type PullSecretCreate struct {
Project string `json:"project" yaml:"project"`
Location string `json:"location" yaml:"location"`
Name string `json:"name" yaml:"name"`
Spec PullSecretSpec `json:"spec" yaml:"spec"`
}
type PullSecretSpec struct {
Server string `json:"server" yaml:"server"`
Username string `json:"username" yaml:"username"`
Password string `json:"password" yaml:"password"`
}
func (m *PullSecretCreate) Valid() error {
m.Name = strings.TrimSpace(m.Name)
m.Spec.Server = strings.TrimSpace(m.Spec.Server)
m.Spec.Username = strings.TrimSpace(m.Spec.Username)
v := validator.New()
v.Must(m.Project != "", "project required")
v.Must(m.Location != "", "location required")
v.Mustf(ReValidName.MatchString(m.Name), "name invalid %s", ReValidNameStr)
{
cnt := utf8.RuneCountInString(m.Name)
v.Mustf(cnt >= MinNameLength && cnt <= MaxNameLength, "name must have length between %d-%d characters", MinNameLength, MaxNameLength)
}
v.Must(govalidator.IsURL(m.Spec.Server), "spec.server must be an url")
v.Must(m.Spec.Server != "", "spec.server required")
v.Must(m.Spec.Username != "", "spec.username required")
v.Must(m.Spec.Password != "", "spec.password required")
return WrapValidate(v)
}
type PullSecretDelete struct {
Location string `json:"location" yaml:"location"`
Project string `json:"project" yaml:"project"`
Name string `json:"name" yaml:"name"`
}
func (m *PullSecretDelete) Valid() error {
m.Name = strings.TrimSpace(m.Name)
v := validator.New()
v.Must(m.Location != "", "location required")
v.Must(m.Project != "", "project required")
v.Must(ReValidName.MatchString(m.Name), "name invalid "+ReValidNameStr)
{
cnt := utf8.RuneCountInString(m.Name)
v.Mustf(cnt >= MinNameLength && cnt <= MaxNameLength, "name must have length between %d-%d characters", MinNameLength, MaxNameLength)
}
return WrapValidate(v)
}
type PullSecretList struct {
Project string `json:"project" yaml:"project"`
Location string `json:"location" yaml:"location"`
}
func (m *PullSecretList) Valid() error {
v := validator.New()
v.Must(m.Project != "", "project required")
return WrapValidate(v)
}
type PullSecretListResult struct {
Project string `json:"project" yaml:"project"`
Location string `json:"location" yaml:"location"`
Items []*PullSecretItem `json:"items" yaml:"items"`
}
func (m *PullSecretListResult) Table() [][]string {
table := [][]string{
{"NAME", "STATUS", "LOCATION", "AGE"},
}
for _, x := range m.Items {
table = append(table, []string{
x.Name,
x.Status.Text(),
x.Location,
age(x.CreatedAt),
})
}
return table
}
type PullSecretItem struct {
Name string `json:"name" yaml:"name"`
Value string `json:"value" yaml:"value"`
Spec PullSecretSpec `json:"spec" yaml:"spec"`
Location string `json:"location" yaml:"location"`
Action Action `json:"action" yaml:"action"`
Status Status `json:"status" yaml:"status"`
CreatedAt time.Time `json:"createdAt" yaml:"createdAt"`
CreatedBy string `json:"createdBy" yaml:"createdBy"`
}
func (m *PullSecretItem) Table() [][]string {
table := [][]string{
{"NAME", "STATUS", "LOCATION", "AGE"},
{
m.Name,
m.Status.Text(),
m.Location,
age(m.CreatedAt),
},
}
return table
}
type PullSecretGet struct {
Location string `json:"location" yaml:"location"`
Project string `json:"project" yaml:"project"`
Name string `json:"name" yaml:"name"`
}
func (m *PullSecretGet) Valid() error {
v := validator.New()
v.Must(m.Location != "", "location required")
v.Must(m.Project != "", "project required")
v.Must(m.Name != "", "name required")
return WrapValidate(v)
}