Skip to content

Commit 0b2e414

Browse files
authored
Merge pull request #8 from nfons/refactor-logic
Refactor logic
2 parents e02e7e8 + ab699f7 commit 0b2e414

File tree

5 files changed

+130
-162
lines changed

5 files changed

+130
-162
lines changed

ApiWatcher.go

Lines changed: 29 additions & 63 deletions
Original file line numberDiff line numberDiff line change
@@ -3,18 +3,27 @@ package main
33
import (
44
"fmt"
55
"k8s.io/api/apps/v1"
6+
v1core "k8s.io/api/core/v1"
67
"k8s.io/apimachinery/pkg/fields"
78
"k8s.io/apimachinery/pkg/runtime"
89
"k8s.io/apimachinery/pkg/util/wait"
10+
"k8s.io/client-go/rest"
911
"k8s.io/client-go/tools/cache"
1012
"k8s.io/kubernetes/pkg/apis/core"
1113
"log"
1214
"path/filepath"
13-
"reflect"
1415
)
1516

1617
func WatchList(resource string, resourceType runtime.Object) cache.Controller {
17-
watchlist := cache.NewListWatchFromClient(clientset.AppsV1().RESTClient(), resource, core.NamespaceAll, fields.Everything())
18+
var restInterface rest.Interface
19+
switch resourceType.(type) {
20+
default:
21+
restInterface = clientset.AppsV1().RESTClient()
22+
case *v1core.Service, *v1core.Secret, *v1core.ConfigMap:
23+
restInterface = clientset.CoreV1().RESTClient()
24+
25+
}
26+
watchlist := cache.NewListWatchFromClient(restInterface, resource, core.NamespaceAll, fields.Everything())
1827
_, controller := cache.NewInformer(
1928
watchlist,
2029
resourceType,
@@ -42,9 +51,11 @@ func WatchApis() {
4251
go WatchList("relicasets", &v1.ReplicaSet{}).Run(wait.NeverStop)
4352
}
4453

45-
// Only get Secrets, Config Maps, Services, Ingress only if its added
54+
// Only get Secrets, Config Maps, Services only if store_all is set
4655
if deck_config.STORE_ALL == true {
47-
// TODO
56+
go WatchList(string(v1core.ResourceServices), &v1core.Service{}).Run(wait.NeverStop)
57+
go WatchList("secrets", &v1core.Secret{}).Run(wait.NeverStop)
58+
go WatchList(string(v1core.ResourceConfigMaps), &v1core.ConfigMap{}).Run(wait.NeverStop)
4859
}
4960

5061
// IDK if I need all these
@@ -60,13 +71,19 @@ func getResourceInfo(obj interface{}) (string, string, string) {
6071
default:
6172
log.Panic("unknown type in deletion")
6273
case *v1.DaemonSet:
63-
return val.Name, "daemonset", val.Namespace
74+
return val.Name, "DaemonSet", val.Namespace
6475
case *v1.StatefulSet:
65-
return val.Name, "statefulset", val.Namespace
76+
return val.Name, "StatefulSet", val.Namespace
6677
case *v1.Deployment:
67-
return val.Name, "deployment", val.Namespace
78+
return val.Name, "Deployment", val.Namespace
6879
case *v1.ReplicaSet:
69-
return val.Name, "replicaset", val.Namespace
80+
return val.Name, "ReplicaSet", val.Namespace
81+
case *v1core.Service:
82+
return val.Name, "Service", val.Namespace
83+
case *v1core.Secret:
84+
return val.Name, "Secret", val.Namespace
85+
case *v1core.ConfigMap:
86+
return val.Name, "ConfigMap", val.Namespace
7087
}
7188
return "", "", ""
7289
}
@@ -82,64 +99,13 @@ func ResourceDeleted(obj interface{}) {
8299
}
83100

84101
func ResourceAdded(obj interface{}) {
85-
switch val := obj.(type) {
86-
default:
87-
log.Panic("Unknown Type: ")
88-
log.Println(val)
89-
return
90-
case *v1.Deployment:
91-
log.Println("Deployment Added " + val.Name)
92-
namespacePath := filepath.Join(createPath, val.Namespace)
93-
SaveDeploy(*val, namespacePath)
94-
case *v1.ReplicaSet:
95-
if deck_config.UseReplicaSets == true {
96-
namespacePath := filepath.Join(createPath, val.Namespace)
97-
SaveRS(*val, namespacePath)
98-
}
99-
case *v1.DaemonSet:
100-
log.Println("DaemonSet Added " + val.Name)
101-
namespacePath := filepath.Join(createPath, val.Namespace)
102-
SaveDS(*val, namespacePath)
103-
case *v1.StatefulSet:
104-
log.Println("Satefulset Added " + val.Name)
105-
namespacePath := filepath.Join(createPath, val.Namespace)
106-
SaveSS(*val, namespacePath)
107-
}
102+
log.Println("Resource Added")
103+
SaveResource(obj)
108104
}
109105

110106
func ResourceUpdated(old interface{}, obj interface{}) {
111107
// Because syncs also call updatefunc we will need to do this
112108
// create kctl deployment struct
113-
114-
switch val := obj.(type) {
115-
default:
116-
log.Panic("Unknown Type: ")
117-
log.Println(val)
118-
return
119-
case *v1.Deployment:
120-
if reflect.DeepEqual(old, obj) == false {
121-
log.Println("Deployment Updated " + val.Name)
122-
namespacePath := filepath.Join(createPath, val.Namespace)
123-
SaveDeploy(*val, namespacePath)
124-
}
125-
case *v1.ReplicaSet:
126-
if deck_config.UseReplicaSets == true {
127-
if reflect.DeepEqual(old, obj) == false {
128-
namespacePath := filepath.Join(createPath, val.Namespace)
129-
SaveRS(*val, namespacePath)
130-
}
131-
}
132-
case *v1.DaemonSet:
133-
if reflect.DeepEqual(obj, old) == false {
134-
log.Println("Daemonset Updated " + val.Name)
135-
namespacePath := filepath.Join(createPath, val.Namespace)
136-
SaveDS(*val, namespacePath)
137-
}
138-
case *v1.StatefulSet:
139-
if reflect.DeepEqual(old, obj) == false {
140-
log.Println("Statefulset Updated " + val.Name)
141-
namespacePath := filepath.Join(createPath, val.Namespace)
142-
SaveSS(*val, namespacePath)
143-
}
144-
}
109+
log.Println("Resource Updated")
110+
SaveResource(obj)
145111
}

FileHelpers.go

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,27 +1,27 @@
11
package main
22

33
import (
4+
log "github.com/sirupsen/logrus"
45
"io/ioutil"
5-
"log"
66
"os"
77
)
88

99
func saveFile(marshalYaml []byte, yamlName string) {
1010
writeErr := ioutil.WriteFile(yamlName, marshalYaml, 0644)
1111
if writeErr != nil {
12-
log.Println(writeErr)
12+
log.Error(writeErr)
1313
}
1414
}
1515

1616
func deleteFile(path string) {
1717
err := os.Remove(path)
1818
if err != nil {
19-
log.Println(err)
19+
log.Error(err)
2020
}
2121
}
2222

2323
func CheckIfError(err error) {
2424
if err != nil {
25-
log.Println(err)
25+
log.Error(err)
2626
}
2727
}

KubeStruct.go

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,4 +10,6 @@ type KubeStruct struct {
1010
Kind string `json:"kind"`
1111
Metadata v1.ObjectMeta `json:"metadata,omitempty"`
1212
Spec interface{} `json:"spec,omitempty"`
13+
Type string `json:"type,omitempty"`
14+
Data interface{} `json:"data,omitempty"`
1315
}

ResourceHelpers.go

Lines changed: 59 additions & 71 deletions
Original file line numberDiff line numberDiff line change
@@ -4,85 +4,73 @@ import (
44
"fmt"
55
"github.com/ghodss/yaml"
66
"k8s.io/api/apps/v1"
7+
v1core "k8s.io/api/core/v1"
78
"log"
9+
"path/filepath"
10+
"reflect"
811
)
912

10-
func SaveSS(deploy v1.StatefulSet, path string) {
11-
yamlName := fmt.Sprintf("%s/%s.statefulset.yaml", path, deploy.Name)
12-
13-
// create kctl deployment struct
14-
deployment := KubeStruct{}
15-
16-
deployment.ApiVersion = "apps/v1"
17-
deployment.Kind = "StatefulSet"
18-
19-
deployment.Metadata = deploy.ObjectMeta
20-
deployment.Spec = deploy.Spec
21-
22-
// save the deployment file
23-
marshalYaml, err := yaml.Marshal(deployment)
24-
if err != nil {
25-
log.Panic(err)
13+
// We need to redo this logic to get rid of some of this damn copy and paste crap...ideally I would like to
14+
// type cast all these to some struct so I can get the relevant fields from it
15+
func SaveResource(obj interface{}) {
16+
resource := KubeStruct{}
17+
var namespacePath string
18+
switch val := obj.(type) {
19+
default:
20+
log.Println("Unknown type in SaveResource : " + reflect.TypeOf(val).String())
21+
return
22+
case *v1.DaemonSet:
23+
resource.ApiVersion = "apps/v1"
24+
resource.Kind = "DaemonSet"
25+
resource.Metadata = val.ObjectMeta
26+
resource.Spec = val.Spec
27+
namespacePath = filepath.Join(createPath, val.Namespace)
28+
case *v1.StatefulSet:
29+
resource.ApiVersion = "apps/v1"
30+
resource.Kind = "StatefulSet"
31+
resource.Metadata = val.ObjectMeta
32+
resource.Spec = val.Spec
33+
namespacePath = filepath.Join(createPath, val.Namespace)
34+
case *v1.Deployment:
35+
resource.ApiVersion = "apps/v1"
36+
resource.Kind = "Deployment"
37+
resource.Metadata = val.ObjectMeta
38+
resource.Spec = val.Spec
39+
namespacePath = filepath.Join(createPath, val.Namespace)
40+
case *v1.ReplicaSet:
41+
resource.ApiVersion = "apps/v1"
42+
resource.Kind = "ReplicaSet"
43+
resource.Metadata = val.ObjectMeta
44+
resource.Spec = val.Spec
45+
namespacePath = filepath.Join(createPath, val.Namespace)
46+
case *v1core.Service:
47+
resource.ApiVersion = "v1"
48+
resource.Kind = "Service"
49+
resource.Metadata = val.ObjectMeta
50+
resource.Spec = val.Spec
51+
namespacePath = filepath.Join(createPath, val.Namespace)
52+
case *v1core.Secret:
53+
resource.ApiVersion = "v1"
54+
resource.Kind = val.Kind
55+
resource.Metadata = val.ObjectMeta
56+
resource.Kind = "Secret"
57+
resource.Data = val.Data
58+
namespacePath = filepath.Join(createPath, val.Namespace)
59+
case *v1core.ConfigMap:
60+
resource.ApiVersion = "v1"
61+
resource.Metadata = val.ObjectMeta
62+
resource.Kind = "ConfigMap"
63+
resource.Data = val.Data
64+
namespacePath = filepath.Join(createPath, val.Namespace)
2665
}
27-
saveFile(marshalYaml, yamlName)
28-
}
66+
yamlName := fmt.Sprintf("%s/%s.%s.yaml", namespacePath, resource.Metadata.Name, resource.Kind)
2967

30-
func SaveDeploy(deploy v1.Deployment, path string) {
31-
yamlName := fmt.Sprintf("%s/%s.deploy.yaml", path, deploy.Name)
32-
33-
// create kctl deployment struct
34-
deployment := KubeStruct{}
35-
36-
deployment.ApiVersion = "apps/v1"
37-
deployment.Kind = "Deployment"
38-
39-
deployment.Metadata = deploy.ObjectMeta
40-
deployment.Spec = deploy.Spec
41-
42-
// save the deployment file
43-
marshalYaml, err := yaml.Marshal(deployment)
68+
// save the file
69+
marshalYaml, err := yaml.Marshal(resource)
4470
if err != nil {
4571
log.Panic(err)
4672
}
73+
fmt.Println("Saving:", resource.Kind, resource.Metadata.Name)
4774
saveFile(marshalYaml, yamlName)
48-
}
49-
50-
func SaveDS(deploy v1.DaemonSet, path string) {
51-
yamlName := fmt.Sprintf("%s/%s.daemonset.yaml", path, deploy.Name)
52-
53-
// create kctl deployment struct
54-
deployment := KubeStruct{}
55-
56-
deployment.ApiVersion = "apps/v1"
57-
deployment.Kind = "DaemonSet"
5875

59-
deployment.Metadata = deploy.ObjectMeta
60-
deployment.Spec = deploy.Spec
61-
62-
// save the deployment file
63-
marshalYaml, err := yaml.Marshal(deployment)
64-
if err != nil {
65-
log.Panic(err)
66-
}
67-
saveFile(marshalYaml, yamlName)
68-
}
69-
70-
func SaveRS(deploy v1.ReplicaSet, path string) {
71-
yamlName := fmt.Sprintf("%s/%s.replicaset.yaml", path, deploy.Name)
72-
73-
// create kctl deployment struct
74-
deployment := KubeStruct{}
75-
76-
deployment.ApiVersion = "apps/v1"
77-
deployment.Kind = "ReplicaSet"
78-
79-
deployment.Metadata = deploy.ObjectMeta
80-
deployment.Spec = deploy.Spec
81-
82-
// save the deployment file
83-
marshalYaml, err := yaml.Marshal(deployment)
84-
if err != nil {
85-
log.Panic(err)
86-
}
87-
saveFile(marshalYaml, yamlName)
8876
}

0 commit comments

Comments
 (0)