@@ -10,84 +10,12 @@ import (
10
10
"io/ioutil"
11
11
"log"
12
12
"net/http"
13
- "os"
14
- "strconv"
15
13
"strings"
16
14
"time"
17
15
)
18
16
19
17
var debug bool
20
18
21
- type WebHook struct {
22
- Timestamp int64
23
- Images []string
24
- Namespace string
25
- Source string
26
- Target string
27
- Url string
28
- Token string
29
- }
30
-
31
- type ReqEnvelope struct {
32
- Verb string
33
- Token string
34
- Json []byte
35
- Url string
36
- }
37
-
38
- type Artifact struct {
39
- ApiVersion string
40
- Kind string
41
- Data []byte
42
- Metadata struct {
43
- Name string
44
- }
45
- Url string
46
- }
47
-
48
- func zeroReplicas (artifact Artifact , token string ) (bool , error ) {
49
-
50
- json := `{"spec": {"replicas": 0}}`
51
- req := ReqEnvelope {
52
- Verb : "PATCH" ,
53
- Token : token ,
54
- Url : fmt .Sprintf ("%s/%s" , artifact .Url , artifact .Metadata .Name ),
55
- Json : []byte (json ),
56
- }
57
- res , err := doRequest (req )
58
- if err != nil {
59
- log .Panic ("%s" , err )
60
- }
61
- time .Sleep (time .Second * 5 )
62
- return res , err
63
- }
64
-
65
- func deleteArtifact (artifact Artifact , token string ) (bool , error ) {
66
- if strings .Contains (artifact .Kind , "ReplicationController" ) {
67
- res , e := zeroReplicas (artifact , token )
68
- if e != nil {
69
- log .Panic ("%s" , e )
70
- os .Exit (1 )
71
- }
72
- if res {
73
- if debug {
74
- log .Println ("Replicas set to Zero" )
75
- }
76
- }
77
- }
78
-
79
- url := fmt .Sprintf ("%s/%s" , artifact .Url , artifact .Metadata .Name )
80
- if debug {
81
- log .Println (url )
82
- }
83
- param := ReqEnvelope {
84
- Url : url ,
85
- Token : token ,
86
- Verb : "DELETE" ,
87
- }
88
- return doRequest (param )
89
- }
90
-
91
19
func doRequest (param ReqEnvelope ) (bool , error ) {
92
20
tr := & http.Transport {
93
21
TLSClientConfig : & tls.Config {InsecureSkipVerify : true },
@@ -119,14 +47,13 @@ func doRequest(param ReqEnvelope) (bool, error) {
119
47
if debug {
120
48
contents , err := ioutil .ReadAll (response .Body )
121
49
if err != nil {
122
- os . Exit ( 1 )
50
+ log . Fatal ( err )
123
51
}
124
52
log .Printf ("%s\n " , string (contents ))
125
53
}
126
54
127
55
if err != nil {
128
- log .Panic ("%s" , err )
129
- os .Exit (1 )
56
+ log .Fatal (err )
130
57
} else {
131
58
defer response .Body .Close ()
132
59
@@ -137,50 +64,23 @@ func doRequest(param ReqEnvelope) (bool, error) {
137
64
return false , err
138
65
}
139
66
140
- func existsArtifact (artifact Artifact , token string ) (bool , error ) {
141
- aUrl := fmt .Sprintf ("%s/%s" , artifact .Url , artifact .Metadata .Name )
142
-
143
- req := ReqEnvelope {
144
- Url : aUrl ,
145
- Token : token ,
146
- Verb : "GET" ,
147
- }
148
- return doRequest (req )
149
-
150
- }
151
-
152
- func createArtifact (artifact Artifact , token string ) {
153
- deployments = append (deployments , artifact .Metadata .Name )
154
- param := ReqEnvelope {
155
- Url : artifact .Url ,
156
- Token : token ,
157
- Json : artifact .Data ,
158
- Verb : "POST" ,
159
- }
160
- doRequest (param )
161
-
162
- }
163
-
164
67
func readArtifactFromFile (workspace string , artifactFile string , apiserver string , namespace string ) (Artifact , error ) {
165
68
artifactFilename := workspace + "/" + artifactFile
166
69
file , err := ioutil .ReadFile (artifactFilename )
167
70
if err != nil {
168
- log .Panic (err )
169
- os .Exit (1 )
71
+ log .Fatal (err )
170
72
}
171
73
artifact := Artifact {}
172
74
if strings .HasSuffix (artifactFilename , ".yaml" ) {
173
75
var data interface {}
174
76
err = yaml .Unmarshal (file , & data )
175
77
data , err = transformData (data )
176
78
if err != nil {
177
- log .Panic (err )
178
- os .Exit (1 )
79
+ log .Fatal (err )
179
80
}
180
81
file , err = json .Marshal (data )
181
82
if err != nil {
182
- log .Panic (err )
183
- os .Exit (1 )
83
+ log .Fatal (err )
184
84
}
185
85
186
86
}
@@ -220,45 +120,6 @@ func sendWebhook(wh *WebHook) {
220
120
221
121
var deployments []string
222
122
223
- func transformData (in interface {}) (out interface {}, err error ) {
224
- switch in .(type ) {
225
- case map [interface {}]interface {}:
226
- o := make (map [string ]interface {})
227
- for k , v := range in .(map [interface {}]interface {}) {
228
- sk := ""
229
- switch k .(type ) {
230
- case string :
231
- sk = k .(string )
232
- case int :
233
- sk = strconv .Itoa (k .(int ))
234
- default :
235
- log .Panic ("%s" , err )
236
- os .Exit (1 )
237
- }
238
- v , err = transformData (v )
239
- if err != nil {
240
- return nil , err
241
- }
242
- o [sk ] = v
243
- }
244
- return o , nil
245
- case []interface {}:
246
- in1 := in .([]interface {})
247
- len1 := len (in1 )
248
- o := make ([]interface {}, len1 )
249
- for i := 0 ; i < len1 ; i ++ {
250
- o [i ], err = transformData (in1 [i ])
251
- if err != nil {
252
- return nil , err
253
- }
254
- }
255
- return o , nil
256
- default :
257
- return in , nil
258
- }
259
- return in , nil
260
- }
261
-
262
123
func main () {
263
124
var vargs = struct {
264
125
ReplicationControllers []string `json:replicationcontrollers`
@@ -281,8 +142,7 @@ func main() {
281
142
for _ , rc := range vargs .ReplicationControllers {
282
143
artifact , err := readArtifactFromFile (workspace .Path , rc , vargs .ApiServer , vargs .Namespace )
283
144
if err != nil {
284
- log .Panic (err )
285
- return
145
+ log .Fatal (err )
286
146
}
287
147
if b , _ := existsArtifact (artifact , vargs .Token ); b {
288
148
deleteArtifact (artifact , vargs .Token )
@@ -293,8 +153,7 @@ func main() {
293
153
for _ , rc := range vargs .Services {
294
154
artifact , err := readArtifactFromFile (workspace .Path , rc , vargs .ApiServer , vargs .Namespace )
295
155
if err != nil {
296
- log .Panic (err )
297
- return
156
+ log .Fatal (err )
298
157
}
299
158
createArtifact (artifact , vargs .Token )
300
159
}
0 commit comments