5
5
6
6
@kopf .on .delete ('clustersecret.io' , 'v1' , 'clustersecrets' )
7
7
def on_delete (spec ,uid ,body ,name ,logger = None , ** _ ):
8
- syncedns = body ['status' ]['create_fn' ]['syncedns' ]
8
+ try :
9
+ syncedns = body ['status' ]['create_fn' ]['syncedns' ]
10
+ except KeyError :
11
+ syncedns = []
9
12
v1 = client .CoreV1Api ()
10
13
for ns in syncedns :
11
14
logger .info (f'deleting secret { name } from namespace { ns } ' )
@@ -84,6 +87,9 @@ def get_ns_list(logger,body,v1=None):
84
87
logger .debug ("matching all namespaces." )
85
88
logger .debug (f'Matching namespaces: { matchNamespace } ' )
86
89
90
+ if matchNamespace is None : # if delted key (issue 26)
91
+ matchNamespace = '*'
92
+
87
93
try :
88
94
avoidNamespaces = body .get ('avoidNamespaces' )
89
95
except KeyError :
@@ -120,7 +126,7 @@ def create_secret(logger,namespace,body,v1=None):
120
126
v1 = client .CoreV1Api ()
121
127
logger .debug ('new client - fn create secret' )
122
128
try :
123
- name = body ['metadata' ]['name' ]
129
+ sec_name = body ['metadata' ]['name' ]
124
130
except KeyError :
125
131
logger .debug ("No name in body ?" )
126
132
raise kopf .TemporaryError ("can not get the name." )
@@ -129,36 +135,49 @@ def create_secret(logger,namespace,body,v1=None):
129
135
except KeyError :
130
136
data = ''
131
137
logger .error ("Empty secret?? could not get the data." )
132
-
138
+
139
+ if 'valueFrom' in data :
140
+ if len (data .keys ()) > 1 :
141
+ raise kopf .TemporaryError ("ValueFrom can not coexist with other keys in the data" )
142
+
143
+ try :
144
+ ns_from = data ['ValueFrom' ]['namespace' ]
145
+ name_from = data ['ValueFrom' ]['name' ]
146
+ except KeyError :
147
+ logger .error ("Can not get Values from external secret" )
148
+ # to-do keys_from
149
+ logger .debug (f'Take value from secret { name_from } from namespace { ns_from } ' )
150
+ # data = read_data_secret(name,namespace)
151
+ #here - doing the valuform thing. but first fix and update all.
152
+
133
153
secret_type = 'Opaque'
134
154
if 'type' in body :
135
155
secret_type = body ['type' ]
136
-
137
- metadata = {'name' : name , 'namespace' : namespace }
138
- api_version = 'v1'
139
- kind = 'Secret'
140
- body = client .V1Secret (api_version , data , kind , metadata , type = secret_type )
156
+ body = client .V1Secret ()
157
+ body .metadata = client .V1ObjectMeta (name = sec_name )
158
+ body .type = secret_type
159
+ body .data = data
141
160
# kopf.adopt(body)
142
161
logger .info (f"cloning secret in namespace { namespace } " )
143
162
try :
144
163
api_response = v1 .create_namespaced_secret (namespace , body )
145
164
except client .rest .ApiException as e :
146
165
if e .reason == 'Conflict' :
147
- logger .warning (f"secret `{ name } ` already exist in namesace '{ namespace } '" )
166
+ logger .warning (f"secret `{ sec_name } ` already exist in namesace '{ namespace } '" )
148
167
return 0
149
168
logger .error (f'Can not create a secret, it is base64 encoded? data: { data } ' )
150
169
logger .error (f'Kube exception { e } ' )
151
170
return 1
152
171
return 0
153
172
154
173
@kopf .on .create ('' , 'v1' , 'namespaces' )
155
- async def namespace_watcher (patch ,logger ,meta ,body , event ,** kwargs ):
174
+ async def namespace_watcher (spec , patch ,logger ,meta ,body ,** kwargs ):
156
175
"""Watch for namespace events
157
176
"""
158
177
new_ns = meta ['name' ]
159
178
logger .debug (f"New namespace created: { new_ns } re-syncing" )
160
179
v1 = client .CoreV1Api ()
161
-
180
+ ns_new_list = []
162
181
for k ,v in csecs .items ():
163
182
obj_body = v ['body' ]
164
183
#logger.debug(f'k: {k} \n v:{v}')
@@ -167,7 +186,7 @@ async def namespace_watcher(patch,logger,meta,body,event,**kwargs):
167
186
ns_new_list = get_ns_list (logger ,obj_body ,v1 )
168
187
logger .debug (f"new matched list: { ns_new_list } " )
169
188
if new_ns in ns_new_list :
170
- logger .debug (f"Clonning secret { v ['body' ]['metadata' ]['name' ]} into the new namespace { new_ns } " )
189
+ logger .debug (f"Cloning secret { v ['body' ]['metadata' ]['name' ]} into the new namespace { new_ns } " )
171
190
create_secret (logger ,new_ns ,v ['body' ],v1 )
172
191
# if there is a new matching ns, refresh memory
173
192
v ['syncedns' ] = ns_new_list
0 commit comments