11
22import base64
33import importlib
4+ import logging
45import pathlib
56import sys
67
78import kopf
89
910
11+ PACKAGE_LABEL = {'function-pythonic.package' : kopf .PRESENT }
1012PACKAGES_DIR = None
13+ GRPC_SERVER = None
1114GRPC_RUNNER = None
1215
13- def setup (packages_dir , packages_runner ):
14- global PACKAGES_DIR , GRPC_RUNNER
16+
17+ def operator (packages_secrets , packages_namespace , packages_dir , grpc_server , grpc_runner ):
18+ logging .getLogger ('kopf.objects' ).setLevel (logging .INFO )
19+ global PACKAGES_DIR , GRPC_SERVER , GRPC_RUNNER
1520 PACKAGES_DIR = packages_dir
16- GRPC_RUNNER = packages_runner
21+ GRPC_SERVER = grpc_server
22+ GRPC_RUNNER = grpc_runner
23+ PACKAGES_DIR = pathlib .Path (packages_dir ).expanduser ().resolve ()
24+ sys .path .insert (0 , str (PACKAGES_DIR ))
25+ if packages_secrets :
26+ kopf .on .create ('' , 'v1' , 'secrets' , labels = PACKAGE_LABEL )(create )
27+ kopf .on .resume ('' , 'v1' , 'secrets' , labels = PACKAGE_LABEL )(create )
28+ kopf .on .update ('' , 'v1' , 'secrets' , labels = PACKAGE_LABEL )(update )
29+ kopf .on .delete ('' , 'v1' , 'secrets' , labels = PACKAGE_LABEL )(delete )
30+ return kopf .operator (
31+ standalone = True ,
32+ clusterwide = not packages_namespace ,
33+ namespaces = packages_namespace ,
34+ )
35+
36+
37+ @kopf .on .startup ()
38+ async def startup (settings , ** _ ):
39+ settings .scanning .disabled = True
40+
41+
42+ @kopf .on .cleanup ()
43+ async def cleanup (** _ ):
44+ await GRPC_SERVER .stop (5 )
1745
1846
19- @kopf .on .create ('' , 'v1' , 'configmaps' , labels = {'function-pythonic.package' : kopf .PRESENT })
20- @kopf .on .resume ('' , 'v1' , 'configmaps' , labels = {'function-pythonic.package' : kopf .PRESENT })
21- @kopf .on .create ('' , 'v1' , 'secrets' , labels = {'function-pythonic.package' : kopf .PRESENT })
22- @kopf .on .resume ('' , 'v1' , 'secrets' , labels = {'function-pythonic.package' : kopf .PRESENT })
47+ @kopf .on .create ('' , 'v1' , 'configmaps' , labels = PACKAGE_LABEL )
48+ @kopf .on .resume ('' , 'v1' , 'configmaps' , labels = PACKAGE_LABEL )
2349async def create (body , logger , ** _ ):
2450 package_dir , package = get_package_dir (body )
2551 if package_dir :
@@ -40,8 +66,7 @@ async def create(body, logger, **_):
4066 logger .info (f"Created file: { '/' .join (package + [name ])} " )
4167
4268
43- @kopf .on .update ('' , 'v1' , 'configmaps' , labels = {'function-pythonic.package' : kopf .PRESENT })
44- @kopf .on .update ('' , 'v1' , 'secrets' , labels = {'function-pythonic.package' : kopf .PRESENT })
69+ @kopf .on .update ('' , 'v1' , 'configmaps' , labels = PACKAGE_LABEL )
4570async def update (body , old , logger , ** _ ):
4671 old_package_dir , old_package = get_package_dir (old )
4772 if old_package_dir :
@@ -91,8 +116,7 @@ async def update(body, old, logger, **_):
91116 old_package .pop ()
92117
93118
94- @kopf .on .delete ('' , 'v1' , 'configmaps' , labels = {'function-pythonic.package' : kopf .PRESENT })
95- @kopf .on .delete ('' , 'v1' , 'secrets' , labels = {'function-pythonic.package' : kopf .PRESENT })
119+ @kopf .on .delete ('' , 'v1' , 'configmaps' , labels = PACKAGE_LABEL )
96120async def delete (old , logger , ** _ ):
97121 package_dir , package = get_package_dir (old )
98122 if package_dir :
0 commit comments