@@ -21,12 +21,12 @@ class ShinyProxyController(private val kubernetesClient: KubernetesClient,
2121 private val shinyProxyInformer : SharedIndexInformer <ShinyProxy >,
2222 namespace : String ) {
2323
24- private val workqueue = Channel <String >()
24+ private val workqueue = Channel <ShinyProxyEvent >()
2525 private val shinyProxyLister = Lister (shinyProxyInformer.indexer, namespace)
2626 private val replicaSetLister = Lister (replicaSetInformer.indexer, namespace)
2727 private val configMapLister = Lister (configMapInformer.indexer, namespace)
2828 private val serviceLister = Lister (serviceInformer.indexer, namespace)
29- private val shinyProxyListener = ResourceListener (workqueue, shinyProxyInformer, shinyProxyLister)
29+ private val shinyProxyListener = ShinyProxyListener (workqueue, shinyProxyInformer, shinyProxyLister)
3030 private val replicaSetListener = ResourceListener (workqueue, replicaSetInformer, shinyProxyLister)
3131 private val serviceListener = ResourceListener (workqueue, serviceInformer, shinyProxyLister)
3232 private val configMapListener = ResourceListener (workqueue, configMapInformer, shinyProxyLister)
@@ -44,27 +44,43 @@ class ShinyProxyController(private val kubernetesClient: KubernetesClient,
4444 }
4545 while (true ) {
4646 try {
47- val key = workqueue.receive()
48- if (key.isEmpty() || ! key.contains(" /" )) {
49- logger.warn { " invalid resource key: $key " }
50- }
51-
52- val name = key.split(" /" ).toTypedArray()[1 ]
53- val shinyProxy: ShinyProxy ? = shinyProxyLister[key.split(" /" ).toTypedArray()[1 ]]
47+ val event = workqueue.receive()
5448
55- if (shinyProxy == null ) {
56- logger.warn { " ShinyProxy $name in workqueue no longer exists" }
57- return
49+ when (event.eventType) {
50+ ShinyProxyEventType .ADD -> {
51+ reconcileSingleShinyProxy(event.shinyProxy)
52+ }
53+ ShinyProxyEventType .UPDATE -> {
54+ // TODO calculate hash -> reconcile
55+ }
56+ ShinyProxyEventType .DELETE -> {
57+ deleteSingleShinyProxy(event.shinyProxy)
58+ }
59+ ShinyProxyEventType .UPDATE_DEPENDENCY -> {
60+ reconcileSingleShinyProxy(event.shinyProxy)
61+ }
5862 }
5963
60- reconcileSingleShinyProxy(shinyProxy)
6164 } catch (interruptedException: InterruptedException ) {
6265 Thread .currentThread().interrupt()
6366 logger.warn { " controller interrupted.." }
6467 }
6568 }
6669 }
6770
71+ private fun deleteSingleShinyProxy (shinyProxy : ShinyProxy ) {
72+ logger.info { " DeleteSingleShinyProxy: ${shinyProxy.metadata.name} " }
73+ for (service in resourceRetriever.getServiceByLabel(APP_LABEL , shinyProxy.metadata.name)) {
74+ kubernetesClient.resource(service).delete()
75+ }
76+ for (replicaSet in resourceRetriever.getReplicaSetByLabel(APP_LABEL , shinyProxy.metadata.name)) {
77+ kubernetesClient.resource(replicaSet).delete()
78+ }
79+ for (configMap in resourceRetriever.getConfigMapByLabel(APP_LABEL , shinyProxy.metadata.name)) {
80+ kubernetesClient.resource(configMap).delete()
81+ }
82+ }
83+
6884 private suspend fun reconcileSingleShinyProxy (shinyProxy : ShinyProxy ) {
6985 logger.info { " ReconcileSingleShinyProxy: ${shinyProxy.metadata.name} " }
7086 val configMaps = resourceRetriever.getConfigMapByLabel(APP_LABEL , shinyProxy.metadata.name)
0 commit comments