8
8
"log"
9
9
"net/http"
10
10
11
+ typedV1 "k8s.io/client-go/kubernetes/typed/core/v1"
12
+
11
13
"github.com/openfaas/faas/gateway/requests"
12
14
apiv1 "k8s.io/api/core/v1"
13
15
v1beta1 "k8s.io/api/extensions/v1beta1"
@@ -30,97 +32,115 @@ func MakeSecretHandler(namespace string, kube kubernetes.Interface) http.Handler
30
32
defer r .Body .Close ()
31
33
}
32
34
35
+ client := kube .CoreV1 ().Secrets (namespace )
36
+
33
37
switch r .Method {
34
38
case http .MethodGet :
35
- selector := fmt .Sprintf ("%s=%s" , secretLabel , secretLabelValue )
36
- res , err := kube .CoreV1 ().Secrets (namespace ).List (metav1.ListOptions {LabelSelector : selector })
37
- if err != nil {
38
- w .WriteHeader (http .StatusInternalServerError )
39
- log .Printf ("Secrets query error: %v\n " , err )
40
- return
41
- }
42
-
43
- secrets := []requests.Secret {}
44
- for _ , item := range res .Items {
45
- secret := requests.Secret {
46
- Name : item .Name ,
47
- }
48
- secrets = append (secrets , secret )
49
- }
50
- secretsBytes , err := json .Marshal (secrets )
51
- if err != nil {
52
- w .WriteHeader (http .StatusInternalServerError )
53
- log .Printf ("Secrets json marshal error: %v\n " , err )
54
- return
55
- }
56
- w .Header ().Set ("Content-Type" , "application/json" )
57
- w .WriteHeader (http .StatusOK )
58
- w .Write (secretsBytes )
39
+ getSecretsHandler (client , w , r )
59
40
case http .MethodPost :
60
- secret , err := parseSecret (namespace , r .Body )
61
- if err != nil {
62
- w .WriteHeader (http .StatusBadRequest )
63
- log .Printf ("Secret unmarshal error: %v\n " , err )
64
- return
65
- }
66
- _ , err = kube .CoreV1 ().Secrets (namespace ).Create (secret )
67
- if err != nil {
68
- w .WriteHeader (http .StatusInternalServerError )
69
- log .Printf ("Secret create error: %v\n " , err )
70
- return
71
- }
72
- log .Printf ("Secret %s create\n " , secret .GetName ())
73
- w .WriteHeader (http .StatusAccepted )
41
+ createSecretHandler (client , namespace , w , r )
74
42
case http .MethodPut :
75
- newSecret , err := parseSecret (namespace , r .Body )
76
- if err != nil {
77
- w .WriteHeader (http .StatusBadRequest )
78
- log .Printf ("Secret unmarshal error: %v\n " , err )
79
- return
80
- }
81
- secret , err := kube .CoreV1 ().Secrets (namespace ).Get (newSecret .GetName (), metav1.GetOptions {})
82
- if errors .IsNotFound (err ) {
83
- w .WriteHeader (http .StatusNotFound )
84
- log .Printf ("Secret update error: %s not found\n " , newSecret .GetName ())
85
- return
86
- }
87
- if err != nil {
88
- w .WriteHeader (http .StatusInternalServerError )
89
- log .Printf ("Secret query error: %v\n " , err )
90
- return
91
- }
92
- secret .StringData = newSecret .StringData
93
- _ , err = kube .CoreV1 ().Secrets (namespace ).Update (secret )
94
- if err != nil {
95
- w .WriteHeader (http .StatusInternalServerError )
96
- log .Printf ("Secret update error: %v\n " , err )
97
- return
98
- }
99
- log .Printf ("Secret %s updated" , secret .GetName ())
100
- w .WriteHeader (http .StatusAccepted )
43
+ replaceSecretHandler (client , namespace , w , r )
101
44
case http .MethodDelete :
102
- secret , err := parseSecret (namespace , r .Body )
103
- if err != nil {
104
- w .WriteHeader (http .StatusBadRequest )
105
- log .Printf ("Secret unmarshal error: %v\n " , err )
106
- return
107
- }
108
- opts := & metav1.DeleteOptions {}
109
- err = kube .CoreV1 ().Secrets (namespace ).Delete (secret .GetName (), opts )
110
- if err != nil {
111
- w .WriteHeader (http .StatusInternalServerError )
112
- log .Printf ("Secret %s delete error: %v\n " , secret .GetName (), err )
113
- return
114
- }
115
- log .Printf ("Secret %s deleted\n " , secret .GetName ())
116
- w .WriteHeader (http .StatusAccepted )
45
+ deleteSecretHandler (client , namespace , w , r )
117
46
default :
118
47
w .WriteHeader (http .StatusBadRequest )
119
48
return
120
49
}
121
50
}
122
51
}
123
52
53
+ func getSecretsHandler (kube typedV1.SecretInterface , w http.ResponseWriter , r * http.Request ) {
54
+ selector := fmt .Sprintf ("%s=%s" , secretLabel , secretLabelValue )
55
+ res , err := kube .List (metav1.ListOptions {LabelSelector : selector })
56
+ if err != nil {
57
+ w .WriteHeader (http .StatusInternalServerError )
58
+ log .Printf ("Secrets query error: %v\n " , err )
59
+ return
60
+ }
61
+
62
+ secrets := []requests.Secret {}
63
+ for _ , item := range res .Items {
64
+ secret := requests.Secret {
65
+ Name : item .Name ,
66
+ }
67
+ secrets = append (secrets , secret )
68
+ }
69
+ secretsBytes , err := json .Marshal (secrets )
70
+ if err != nil {
71
+ w .WriteHeader (http .StatusInternalServerError )
72
+ log .Printf ("Secrets json marshal error: %v\n " , err )
73
+ return
74
+ }
75
+ w .Header ().Set ("Content-Type" , "application/json" )
76
+ w .WriteHeader (http .StatusOK )
77
+ w .Write (secretsBytes )
78
+ }
79
+
80
+ func createSecretHandler (kube typedV1.SecretInterface , namespace string , w http.ResponseWriter , r * http.Request ) {
81
+ secret , err := parseSecret (namespace , r .Body )
82
+ if err != nil {
83
+ w .WriteHeader (http .StatusBadRequest )
84
+ log .Printf ("Secret unmarshal error: %v\n " , err )
85
+ return
86
+ }
87
+ _ , err = kube .Create (secret )
88
+ if err != nil {
89
+ w .WriteHeader (http .StatusInternalServerError )
90
+ log .Printf ("Secret create error: %v\n " , err )
91
+ return
92
+ }
93
+ log .Printf ("Secret %s create\n " , secret .GetName ())
94
+ w .WriteHeader (http .StatusAccepted )
95
+ }
96
+
97
+ func replaceSecretHandler (kube typedV1.SecretInterface , namespace string , w http.ResponseWriter , r * http.Request ) {
98
+ newSecret , err := parseSecret (namespace , r .Body )
99
+ if err != nil {
100
+ w .WriteHeader (http .StatusBadRequest )
101
+ log .Printf ("Secret unmarshal error: %v\n " , err )
102
+ return
103
+ }
104
+ secret , err := kube .Get (newSecret .GetName (), metav1.GetOptions {})
105
+ if errors .IsNotFound (err ) {
106
+ w .WriteHeader (http .StatusNotFound )
107
+ log .Printf ("Secret update error: %s not found\n " , newSecret .GetName ())
108
+ return
109
+ }
110
+ if err != nil {
111
+ w .WriteHeader (http .StatusInternalServerError )
112
+ log .Printf ("Secret query error: %v\n " , err )
113
+ return
114
+ }
115
+ secret .StringData = newSecret .StringData
116
+ _ , err = kube .Update (secret )
117
+ if err != nil {
118
+ w .WriteHeader (http .StatusInternalServerError )
119
+ log .Printf ("Secret update error: %v\n " , err )
120
+ return
121
+ }
122
+ log .Printf ("Secret %s updated" , secret .GetName ())
123
+ w .WriteHeader (http .StatusAccepted )
124
+ }
125
+
126
+ func deleteSecretHandler (kube typedV1.SecretInterface , namespace string , w http.ResponseWriter , r * http.Request ) {
127
+ secret , err := parseSecret (namespace , r .Body )
128
+ if err != nil {
129
+ w .WriteHeader (http .StatusBadRequest )
130
+ log .Printf ("Secret unmarshal error: %v\n " , err )
131
+ return
132
+ }
133
+ opts := & metav1.DeleteOptions {}
134
+ err = kube .Delete (secret .GetName (), opts )
135
+ if err != nil {
136
+ w .WriteHeader (http .StatusInternalServerError )
137
+ log .Printf ("Secret %s delete error: %v\n " , secret .GetName (), err )
138
+ return
139
+ }
140
+ log .Printf ("Secret %s deleted\n " , secret .GetName ())
141
+ w .WriteHeader (http .StatusAccepted )
142
+ }
143
+
124
144
func parseSecret (namespace string , r io.Reader ) (* apiv1.Secret , error ) {
125
145
body , _ := ioutil .ReadAll (r )
126
146
req := requests.Secret {}
0 commit comments