1
1
package controller
2
2
3
3
import (
4
+ "context"
4
5
"fmt"
6
+ appsv1 "k8s.io/api/apps/v1"
7
+ corev1 "k8s.io/api/core/v1"
8
+ metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
5
9
"k8s.io/apimachinery/pkg/util/wait"
6
10
appsInformer "k8s.io/client-go/informers/apps/v1"
7
11
"k8s.io/client-go/kubernetes"
@@ -29,8 +33,8 @@ func NewController(clientset kubernetes.Interface, depinfomer appsInformer.Deplo
29
33
30
34
depinfomer .Informer ().AddEventHandler (
31
35
cache.ResourceEventHandlerFuncs {
32
- AddFunc : handleAdd ,
33
- DeleteFunc : handleDel ,
36
+ AddFunc : c . handleAdd ,
37
+ DeleteFunc : c . handleDel ,
34
38
})
35
39
return c
36
40
}
@@ -46,13 +50,72 @@ func (c *controller) Run(ch <-chan struct{}) {
46
50
}
47
51
48
52
func (c * controller ) worker () {
53
+ for c .processItem () {
49
54
55
+ }
56
+ }
57
+
58
+ func (c * controller ) processItem () bool {
59
+ item , shutdown := c .queue .Get ()
60
+
61
+ if shutdown {
62
+ return false
63
+ }
64
+ key , err := cache .MetaNamespaceKeyFunc (item )
65
+ if err != nil {
66
+ fmt .Printf ("key and err, %s\n " , err .Error ())
67
+ }
68
+ namespace , name , err := cache .SplitMetaNamespaceKey (key )
69
+ if err != nil {
70
+ fmt .Printf ("spliting namespace and name, %s\n " , err .Error ())
71
+ }
72
+ err = c .syncDeployment (namespace , name )
73
+ if err != nil {
74
+ fmt .Printf ("sync deployment, %s\n " , err .Error ())
75
+ return false
76
+ }
77
+ return true
50
78
}
51
79
52
- func handleAdd (obj interface {}) {
80
+ func (c * controller ) syncDeployment (ns , name string ) error {
81
+ ctx := context .Background ()
82
+ dep , err := c .depLister .Deployments (ns ).Get (name )
83
+ if err != nil {
84
+ fmt .Printf ("getting deployment from lister %s\n " , err .Error ())
85
+ }
86
+ service := corev1.Service {
87
+ ObjectMeta : metav1.ObjectMeta {
88
+ Name : dep .Name ,
89
+ Namespace : ns ,
90
+ },
91
+ Spec : corev1.ServiceSpec {
92
+ Selector : depLabels (* dep ),
93
+ Ports : []corev1.ServicePort {
94
+ {
95
+ Name : "http" ,
96
+ Port : 80 ,
97
+ },
98
+ },
99
+ },
100
+ }
101
+
102
+ _ , err = c .clientset .CoreV1 ().Services (ns ).Create (ctx , & service , metav1.CreateOptions {})
103
+ if err != nil {
104
+ fmt .Printf ("sync deployment, %s\n " , err .Error ())
105
+ }
106
+
107
+ return nil
108
+ }
109
+
110
+ func depLabels (dep appsv1.Deployment ) map [string ]string {
111
+ return dep .Spec .Template .Labels
112
+ }
113
+ func (c * controller ) handleAdd (obj interface {}) {
53
114
fmt .Println ("hello add is called" )
115
+ c .queue .Add (obj )
54
116
}
55
117
56
- func handleDel (obj interface {}) {
118
+ func ( c * controller ) handleDel (obj interface {}) {
57
119
fmt .Println ("hello del is called" )
120
+ c .queue .Add (obj )
58
121
}
0 commit comments