Skip to content

Commit bccf6ad

Browse files
committed
cleanup and split to increase readability
1 parent 2316b22 commit bccf6ad

File tree

6 files changed

+155
-185
lines changed

6 files changed

+155
-185
lines changed

DOCS.md

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -12,8 +12,8 @@ The following is a sample Kubernetes configuration in your .drone.yml file:
1212
publish:
1313
kubernetes:
1414
replicationcontrollers:
15-
- kubernetes/nginx-rc.json
16-
- kubernetes/nginx-svc.json
15+
- kubernetes/nginx-rc.yaml
16+
- kubernetes/nginx.json
1717
services:
1818
apiserver: https://127.0.0.1
1919
namespace: default

example/botd.json

Lines changed: 0 additions & 35 deletions
This file was deleted.

kube.go

Lines changed: 74 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,74 @@
1+
package main
2+
3+
import (
4+
"fmt"
5+
"log"
6+
"strings"
7+
"time"
8+
)
9+
10+
func zeroReplicas(artifact Artifact, token string) (bool, error) {
11+
12+
json := `{"spec": {"replicas": 0}}`
13+
req := ReqEnvelope{
14+
Verb: "PATCH",
15+
Token: token,
16+
Url: fmt.Sprintf("%s/%s", artifact.Url, artifact.Metadata.Name),
17+
Json: []byte(json),
18+
}
19+
res, err := doRequest(req)
20+
if err != nil {
21+
log.Fatal(err)
22+
}
23+
time.Sleep(time.Second * 5)
24+
return res, err
25+
}
26+
27+
func deleteArtifact(artifact Artifact, token string) (bool, error) {
28+
if strings.Contains(artifact.Kind, "ReplicationController") {
29+
res, err := zeroReplicas(artifact, token)
30+
if err != nil {
31+
log.Fatal(err)
32+
}
33+
if res {
34+
if debug {
35+
log.Println("Replicas set to Zero")
36+
}
37+
}
38+
}
39+
40+
url := fmt.Sprintf("%s/%s", artifact.Url, artifact.Metadata.Name)
41+
if debug {
42+
log.Println(url)
43+
}
44+
param := ReqEnvelope{
45+
Url: url,
46+
Token: token,
47+
Verb: "DELETE",
48+
}
49+
return doRequest(param)
50+
}
51+
52+
func existsArtifact(artifact Artifact, token string) (bool, error) {
53+
aUrl := fmt.Sprintf("%s/%s", artifact.Url, artifact.Metadata.Name)
54+
55+
req := ReqEnvelope{
56+
Url: aUrl,
57+
Token: token,
58+
Verb: "GET",
59+
}
60+
return doRequest(req)
61+
62+
}
63+
64+
func createArtifact(artifact Artifact, token string) {
65+
deployments = append(deployments, artifact.Metadata.Name)
66+
param := ReqEnvelope{
67+
Url: artifact.Url,
68+
Token: token,
69+
Json: artifact.Data,
70+
Verb: "POST",
71+
}
72+
doRequest(param)
73+
74+
}

main.go

Lines changed: 7 additions & 148 deletions
Original file line numberDiff line numberDiff line change
@@ -10,84 +10,12 @@ import (
1010
"io/ioutil"
1111
"log"
1212
"net/http"
13-
"os"
14-
"strconv"
1513
"strings"
1614
"time"
1715
)
1816

1917
var debug bool
2018

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-
9119
func doRequest(param ReqEnvelope) (bool, error) {
9220
tr := &http.Transport{
9321
TLSClientConfig: &tls.Config{InsecureSkipVerify: true},
@@ -119,14 +47,13 @@ func doRequest(param ReqEnvelope) (bool, error) {
11947
if debug {
12048
contents, err := ioutil.ReadAll(response.Body)
12149
if err != nil {
122-
os.Exit(1)
50+
log.Fatal(err)
12351
}
12452
log.Printf("%s\n", string(contents))
12553
}
12654

12755
if err != nil {
128-
log.Panic("%s", err)
129-
os.Exit(1)
56+
log.Fatal(err)
13057
} else {
13158
defer response.Body.Close()
13259

@@ -137,50 +64,23 @@ func doRequest(param ReqEnvelope) (bool, error) {
13764
return false, err
13865
}
13966

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-
16467
func readArtifactFromFile(workspace string, artifactFile string, apiserver string, namespace string) (Artifact, error) {
16568
artifactFilename := workspace + "/" + artifactFile
16669
file, err := ioutil.ReadFile(artifactFilename)
16770
if err != nil {
168-
log.Panic(err)
169-
os.Exit(1)
71+
log.Fatal(err)
17072
}
17173
artifact := Artifact{}
17274
if strings.HasSuffix(artifactFilename, ".yaml") {
17375
var data interface{}
17476
err = yaml.Unmarshal(file, &data)
17577
data, err = transformData(data)
17678
if err != nil {
177-
log.Panic(err)
178-
os.Exit(1)
79+
log.Fatal(err)
17980
}
18081
file, err = json.Marshal(data)
18182
if err != nil {
182-
log.Panic(err)
183-
os.Exit(1)
83+
log.Fatal(err)
18484
}
18585

18686
}
@@ -220,45 +120,6 @@ func sendWebhook(wh *WebHook) {
220120

221121
var deployments []string
222122

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-
262123
func main() {
263124
var vargs = struct {
264125
ReplicationControllers []string `json:replicationcontrollers`
@@ -281,8 +142,7 @@ func main() {
281142
for _, rc := range vargs.ReplicationControllers {
282143
artifact, err := readArtifactFromFile(workspace.Path, rc, vargs.ApiServer, vargs.Namespace)
283144
if err != nil {
284-
log.Panic(err)
285-
return
145+
log.Fatal(err)
286146
}
287147
if b, _ := existsArtifact(artifact, vargs.Token); b {
288148
deleteArtifact(artifact, vargs.Token)
@@ -293,8 +153,7 @@ func main() {
293153
for _, rc := range vargs.Services {
294154
artifact, err := readArtifactFromFile(workspace.Path, rc, vargs.ApiServer, vargs.Namespace)
295155
if err != nil {
296-
log.Panic(err)
297-
return
156+
log.Fatal(err)
298157
}
299158
createArtifact(artifact, vargs.Token)
300159
}

types.go

Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,28 @@
1+
package main
2+
3+
type WebHook struct {
4+
Timestamp int64
5+
Images []string
6+
Namespace string
7+
Source string
8+
Target string
9+
Url string
10+
Token string
11+
}
12+
13+
type ReqEnvelope struct {
14+
Verb string
15+
Token string
16+
Json []byte
17+
Url string
18+
}
19+
20+
type Artifact struct {
21+
ApiVersion string
22+
Kind string
23+
Data []byte
24+
Metadata struct {
25+
Name string
26+
}
27+
Url string
28+
}

0 commit comments

Comments
 (0)